[Note: see Changelog_pb1.txt for items up to public beta 1. This file contains items changed from pb1 to pb2] - Well, people whined about flying in 1.3. I'll give them a 9/10 for effort, but a -10/10 for persuasiveness. Considering that only one of us has the code, and you're perfectly welcome to stay with 1.2 (and its bugs), whining was the wrong strategy. Too bad some people couldn't think outside the box, or outside of the whine. There's an extra penalty for flying now. And, those that wanted more optional features in 1.3-final, odds are your requests will be ignored thanks to the whiners. Go complain to them. [NM] - Merged in Red_Devil/GreenHeart's recycler list, descriptions files. These should have been in the public beta, but got lost in email. [NM] - Fixed bug where score columns could appear in an IA game after visiting recy/factory panel. Thanks to Commando for finding out how to reproduce it. [NM] - Disabled "built blah.msh" console message (well, the opening, not the message) in the editor builds. [NM] - MPI w/ 5 player limit should properly reserve off the last F# slot. [NM] - Some AVs in ShellHandler::Command::Process() should be fixed if the user is using a MOD that replaced out parts of the shell (FE). Doubt I got them all, but it's a start. [NM] - AV in AttackGroup::GetLeft() fixed by doing an explicit sanity check before every call to it. [NM] - AOI::SaveAll() had a logic imbalance between the code that determined how many items to save and how many were actually written. (Could write out more than the count.) This might have caused AVs in AiPath::LoadAll() -- the next thing that was reading in data had data it wasn't expecting. [NM] - Targeted craft could be double-simulated on a frame. Fixed. [NM] - Tweaked volcano.inf from CmptrWz added. [NM] - Tweaked ibagtow00.{msh|xsi} from Greenheart added. [NM] - Made /noscript an editor-only commandline switch. Speedy noticed it could be used to cause resyncs, etc. [NM] - AV fixed (I think) in Team::IsDefensiveTeam(). If not, optimization settings changed around that code to help figure out how it got called. [NM] - Redid the smoothing code in multiworld to have more tuning values, etc. Seems slightly better here. Read GamePrefs.ini for the scoop on the new values in there and the ingame console commands to adjust them. [NM] - Cleaner way of setting random angle when spawning in (DLL callback SetRandomHeadingAngle()), which avoids some ugly quaternion hacks. Calling Build_Yaw_Matrix() is so much simpler, straightforward. [NM] -- b62a released - Some people aren't quite grasping what the words 'Private Beta' mean. First, it's private. Talk about it on the private boards, AND NOWHERE ELSE. Second, it's a beta. Things in it may be for testing, feedback, or the like. They're not guaranteed to be what's eventually released to the public. These sub-builds since the public beta are back in the private beta category. Your appreciation in learning these without me having to apply a clue-by-four to you would make this entire process so much easier for everyone involved. [NM] - AIP Idle dispatcher takes another parameter, 'MaxAttackForce'. (Default is 99 if not specified). That's the max # of units it'll send out at once. Also renamed internal variables to match code style better. [NM] - Tweaked isdf1001.aip (for 'On Thin Ice') to wait 2 more minutes before first sending (12 minutes now), and a max of 5 craft sent at once. Let me know if the mission is a bit easier now. [NM] - Reduced optimization on the function Animation::SetFrame() in order to try and track down AVs reported in it. [NM] - Network playerlimit is 5 in a MPI game. This is not negotiable. Setting this limit may help out with some AVs reported in the 1.3pb1. [NM] - Changed GS version # to '1.3b' from '1.3pb'. This should help emphasize my point above. [NM] -- b62b released - Test. Then release. AV triggered by collisions fixed. [NM] -- b62c released - Looping weapon sfx are stopped when they're replaced via a powerup. This fixes the machinegun-heard-forever after picking up a chaingun powerup while firing. Helpful savegame by Commando. [NM] -- b62d released - Fixed strafes-of-unusual-velocity by clamping control values to sane limits. Same code was in 1.2 and 1.3 (yes, I looked); must be a side effect of something else that caused it. [NM] -- b62e released - Experiment over: it failed. Merging in some 1.2 physics code caused lots of weird behavior in areas that were rather unexpected. There's *ZERO* chance of getting 1.2 and 1.3 code in the same binary; if you're so damn addicted to flying, then go play 1.2. This binary is back to code 1.3pb1 closer to pb1 than any other version. - IA map select screen can be re-entered w/o losing all settings. [NM] - Compiler migration in process. Switched from Visual C++ 6.0SP5 + Intel C++ 7.1 to Visual Studio .NET 2003 (aka VC++7.1). I have Intel C++ 8.0 here, but it took so long getting a build runnable I decided to go with something that works first. [With some graphics code compiled in Intel8, VS.NET would segfault and close when launching BZ2. The game would run, the debugger wouldn't.] Consider this another experiment. All AV reports from code prior to 62f are invalid as too much changed. CTF:Canyons worked for 2 minutes between 3 of my machines here, a mix of AMD & Intel CPUs. Let me know if the framerate's any different (positive or negative). DLLs are also compiled with VS.NET; ones with VC6 (e.g. SP missions from pb1) should still work, but this isn't very tested. Let me know of oddities observed, etc. [NM] -- b62f released - IA map select screen resets itself when you exit a mission, visit the main menu. 62f was a little too loose about not refreshing that. [NM] -- b62g released - SatellitePanel.cpp properly saves the owner (building) handle across saves, which is required to be valid for the 'logout' button to work. I couldn't see anywhere that it was being saved, so I added it. It's not really possible to repair any old savegames without this info. Thanks to Red Devil for posting a save demonstrating this. [NM] - Targeted human craft should be smoother now. The post-pb1 smoothing code seems to handle double-smooths on a frame ok, so all targeted craft get that behavior now. [NM] - Removed linear/logarithmic options from sound page. DirectX is quite logarithmic, no chance of working another way. [NM] - Set ranges on game.minsmooth, game.maxsmooth, game.smooth_posfactor, and game.smooth_velfactor console variables. [0..5 for first two, 0..1 for latter two]. This should make it easier to make them adjustable from a slider. [NM] - Moved 3D cockpit from graphics to gameplay options page (it had the space). EMBM bumpmapping now takes its place on the graphics options page. Note: if this setting is off when a mission is loaded, changes to it won't take effect. The setting must be on when the mission is loaded to also load the embm textures. [NM] - Added 'game.noaipdebug' console variable. If set to 1, then the onscreen AIP debugger won't be visible, no matter what other settings are applied. Quitting back to the shell will reset this. [NM] - made svar11 be the team name for a craft on team "group" 3 (teams 11..15). Teams must be on for this to take effect. This is not an officially supported team group, but support was added for named items on it. If this svar is empty, the default "Unknown Team" string is used instead. [NM] -- b62h released - Added new console command, "game.showsmoothline" (no quotes). This is a debugging feature for the multi-world smoothing, and draws a TLI-like line from the current (smoothed) render position to where unsmoothed guesstimate as to where the craft is. This line is colored as follows: blue: clamped by game.minsmooth, i.e. it moved less than it should have been able to. [Therefore, reduce game.minsmooth] red: clamped by game.maxsmooth, i.e. it moved more than the game thought it should. [Therefore, reduce game.maxsmooth] white: not clamped by either of the above. As things seemed to be red most of the time, increased the max on that value to 10.0f. Also, made the PositionFactor take more effect-- as it increases, it forces the craft closer to the guesstimated position (i.e. shortening the line). This reduces 'error' at the cost of jumpiness. [NM] - Updated config pages from Commando, bzshell_multi_mpi2.cfg, bzshell_multi_client_mpi2.cfg . Terminology tweaked to be more consistent with the other pages. [NM] - Added a VarInteger, 'scrap.max' which is your team's current max scrap. Asked for; those making custom ingame shells might have fun with it. [NM] - Added a meaning for network.session.ivar29: (All) Flag as whether the server disables the TLI line on targeted objects. 0 = server enables TLI (local pref valid), 1 = server disables TLI for all. Options pages for various MP modes not updated to show this option. Someone want to do this? [NM] - Turned off some optimizations (omit frame pointers) in release builds, to try and get some context on occasional crashes on shutdown. This might slow things down slightly. [NM] -- b62i released - Thanks to assets & savegames by Red Devil & Commando, found a condition in Mortar.cpp where it would try to take the square root of a negative number, and that could cause serious numerical poisoning of all physics, etc. ("Tracked physics going bezerk" message was one possible result, when it wasn't really the tracked code at all). This error was introduced as part of 1.3's development; resurrecting some 1.2 code fixed it. Did a precautionary check of other calls to fsqrtf() and inserted code to check for such things. [NM] - LibPNG version 1.2.7 is now used instead of 1.2.5. Security issues were found in 1.2.5. [NM] - Pulled various graphics projects together (were split up a long time ago for Intel compiler), same with bz2_intel. Split Jpeg, PNG libs off to their own separate libs (were part of Graphics). [NM] - ZLib upgraded to version 1.2.1, was 1.1.4. Couldn't get the hand-optimized asm files to link, so using compiler-optimized files. [NM] - Switched on some more paranoid compiler flags (keep frame pointers, buffer security check on) This may slow things down for the near term until I turn them off. [NM] -- b62j released - isdf08 ("Get Help") savegames wouldn't load. Traced it to the 'sssold' objects failing to load/save properly. I'd changed things earlier from 'assold' to 'sssold' (not 100% sure why, probably a missing or wrong asset). Removed the code creating those assets from the DLL. As the old asset (assold) never existed for 1.0-1.2, this shouldn't mess up mission balance. [NM] - Thanks to mission from Commando, traced down some resync issues caused by Ice Rhinos. LandAnimalProcess.cpp wasn't properly dealing with data -- no PostLoad() function. AlternateAnimalProcess had the same bugs, fixed there also. PersonProcess.cpp didn't save/reload the target base for them. See if this helps MP maps with animals. [NM] - If more than 16 "SAVEGAME CORRUPT" messages are generated, bzone.exe will self-terminate, rather than continue to spam logfiles. Users will have to look at the bottom of the battlezone.log file to figure out why the game spontaneously exited. [NM] - Texture size, game resolution can't be adjusted during a MP game. This has been the case for quite some time in 1.3. It produced some complaints as to non-functional interface elements. So, I replaced those elements with messages to change it not in MP. Changing those adds lag to the game in progress, which is unacceptable in MP. [NM] - Better logging on the occasional "CreateSoundBuffer failed!" message that shows up in Battlezone.log. It now prints the filename of the sound being played, and other debug info. If you see one of these messages, let me know the entire line or few printed. [NM] - Messages generated by DLLs for the ingame messages box should show up in chat logfile (in GamePrefs.ini). [NM] -- b62k released - Refactored Deathmatch DLL source so that it has a proper header file, not just an ad-hoc dumping of files in a class{} 'bag'. This might make the source a bit easier to read by people trying to learn DLL writing. [NM] - New DM shell .cfg files from Commando. [NM] - Found source of resyncs caused by animals in MP -- reticule aim never initialized for animals, so it used garbage values instead. Fixed by using the code from the Craft base class. This seems to be the proper fix for my bandaid to fix things in scion01.bzn 'Transformation', but I'm not going to pull out that other thing. (See line 755 of this file) [NM] - In DM, ivar27 is # of animals (0..8) on map. svar12 is the ODF spawned for them. svar13 is the alternate Animallist.txt file. Interface for DM (but not yet DM variants like CTF) to edit those values. The listbox to edit that can be "ExtraOptions.AnimalListWindow.AnimalList", "ExtraOptions2.AnimalListWindow.AnimalList", "ExtraOptions3.AnimalListWindow.AnimalList", or "ExtraOptions4.AnimalListWindow.AnimalList" [NM] - Fixed case where sounds were created with DSBCAPS_CTRL3D and DSBCAPS_CTRLFREQUENCY at the same time. DirectSound 8 doesn't support both at once. Made such sounds go thru the 2D pipe instead. This should end logfile errors like ERR |GLOBAL | dsutil:488 |11:51:21|373105 |CreateSoundBuffer([blah].wav) failed! [...] [NM] - Some minor changes to BoidProcess.cpp for code cleanups, but code had changed so much that an AV reported in BoidProcess.obj::UpdateFlock() didn't have any useful info. Please retest and resubmit if it crashes again. A quick look at code made me suspect boids might trigger resyncs in MP, but I'd prefer people test that before I save/reload even more data. [NM] -- b62L released - Extra safety added to UnitTask & BoidProcess to ensure that an AI process can be safely typecast into a BoidProcess. This should fix up AVs in UpdateFlock() when Boids are built and given orders by a human. However, in giving them orders, they lose their 'Boidness' and just fall back to being a normal craft. So, this should be less crash-happy, but modders should consider leaving boids with their default AI process. [NM] - Changed order of destructor for istreambuf, iss in meshread.cpp -- they should now be executed in reverse order of construction. I don't think this was ever a noticeable problem, but my style-guidelines radar picked this up. This code was only executed when parsing an XSI file into MSH format, so most people would never have seen this. [NM] - Change to debug_memory.cpp -- no longer installs an _onexit() handler in release builds. This seems to fix a no-callstack crash-on-exit that has plagued 1.3 ever since the changeover to the VS.NET 2003 compiler. Thanks to Commando for sending on a map that reproduced the crash on demand. Traced it to instantiating a single std::istrstream object would cause that, nothing else required. It seems as if the debug_memory handler frees memory too early, which conflicts with the standard library's release of locale facets during normal app exit. However, don't make me swear that my analysis was correct. Hopefully, the side effects (if any) of delaying the release of memory will be minimal. [NM] - Turned some optimizations back on in Release LTCG builds. [NM] - Shell, escape screen cfg updates from Commando. [NM] - Change to TugProcess, Tug - constant rechecks that what it's trying to pickup/carry is able to be moved. Savegame from Commando described this in theory, but I was not able to load that locally. So, I took the paranoid approach and put in lots of sanity checks. [NM] - Looping weapon sfx are stopped when a craft loses its pilot for any reason (hopout, snipe, etc). Savegame from Commando. [NM] - Better fix for sounds w/ DSBCAPS_CTRL3D and DSBCAPS_CTRLFREQUENCY at the same time. I had turned off 3D, but left on other 3D parameters. Changed so it turns off freq instead. [NM] - Got rid of "Missing file .msh" message while in the shell. It can't create .msh files while the shell, as items like animations, scale aren't fully set. If mod makers use an asset only in the shell, having each machine recreate it shouldn't cause sync errors. If things are used ingame, it should have a msh created, which modders can copy to distribution. Modders can create MSHs in the editor, if they want to be good about this. [NM] - Max fps shown in MP display is 150 (due to compression). If it exceeds that, now shows "150+". [NM] -- b62M released - Updated RaceName_{B,H,O}.txt files from Avatar. [NM] - In Humans vs Bots DM, human teams are now allied by the DLL. Commando spotted this. [NM] - Resurrected some 1.2 code in NavBeacon.cpp -- beacons spawned by the DLL should appear in the player's ~ list. Not sure why this code was removed. Noted by Fishbone. (After this change, I tried deleting nav points in multiplayer+multiworld games, and had no problems doing so with keys like ~, 2, and [delete].) [NM] - Tab-completion in console works once again. Was inserting a tab (0x09) character after filling in the completion. This was probably a side effect of some other changes. [NM] - Ingame changes to ivar/svar/civar/csvar made at the console will be ignored by both clients and servers. Before, clients were prevented from making changes. Now, everyone is prevented. You might be able to get the console to show a change, but those changes are not propagated anywhere. [NM] - Redid the lost move packet detector and resend code to be a lot simpler, and hopefully cleaner and better. It should notice things quicker, and sends are now UDP-UDP-TCP-UDP (as necessary), instead of UDP-TCP. Hopefully, lag might be slightly reduced. [NM] -- b62N released - Lots of changes to build types, intermediate directories, etc. for BZ2 and DLLs. This should make things generally cleaner and more logical; added ReleaseEditor build types for all DLLs. [NM] - bz2edit.exe now loads its own DLLs. These must be separate DLLs on disk, with 'Editor' tacked onto the end before ".dll", e.g. you need both "instant.dll" *and* "instantEditor.dll" in the missions folder. The 'Editor' one must also be linked against bz2edit.exp, not bzone.exp as normal DLLs are. The editor also starts up in the shell once again, not edit mode. If you're editing a map, enter the standard DLL name, e.g. "instant", even if in the editor. There are some "network" DLLs distributed with this release; good luck trying to run them. [NM] - Removed exception-recovery code from game, DLLs, etc. As the game's "recovery" strategy is to put up a dialog box and quit to Windows, there's no need to have code in place that tries to recover. This might make things slightly faster. Anyone tried a framerate comparison between 1.2, 1.3pb1, and current? Some of the ingame cinematics at the start of some SP missions might give a reasonably stable basis for comparison. [NM] - Added a chatline command "/logvehicles" which (when in game), dumps out all the vehicles to the chat box (and also disk if logging is on). Config, team, position and group are logged for each. Anything else that should be added? Also, if the console command "game.noaipdebug" has been executed, this will do nothing. [NM] - Added a 'bailout' command to all non-recycler craft, which is on the 9 key by default. [Some craft might override this setting.] Sending this command will explode them. Yes, this key is right next to 0 (recycle), but hopefully people won't mis-hit keys too often. Suggested by Commando. [NM] - Big refactoring of Instant.dll source code. Removed dependencies on SPMission completely; it's just the DLLBase now. Made a proper header file. Also made 'options.instant.bool0' to be a flag as to whether the user can respawn or not if they die as a pilot, with support code to match. No UI for this (yet). This change may fix the respawn problems seen if the user gets sniped in a custom IA map. Modders may want to use this revised version as a basis for their projects. [NM] - Change to Person.cpp to support not going into spinny deathcam if the user got respawned. [NM] -- b62o released - Instant.dll handles sniped ships better. Should also eject pilots from dead ships as well. [NM] - Changes to ScriptUtils.cpp -- all calls to VarSys::FindVarItem() are properly checked for items not being found, and will return 0 (ints) or NULL (strings) if the value's not found. It's up to DLLs to make sure they can handle such return values. This should fix some crashes noticed trying to use the editor on Strat/MPI maps. [NM] - Tracks what race everyone is on better. This is used in the respawn code, and why clients would get disconnected/"FIXME couldn't find user" messages if they died. [NM] -- b62p released - More editor tweaks to not crash on player death. Savegame from BZZERKER was useful. [NM] - Rare case where human would be kicked from a MP game should be fixed. Bug noticed by Spawn, savegame by Commando. [NM] - Edited DMBane.bzn from Commando. Tunnels should be aligned with their entrance/exit ramps; also, all powerups should be out of the bzn so they aren't doubled-up. [NM] - Fix (once again, maybe this time is a winner) for navbeacons. They should start on the #1 slot, and count up from there. (Items were getting a slot during constructor, then immediate reassign if placed by a player. If an item was already assigned, it simply keeps its current assignment) [NM] - Fix for multiple training facilities bug in MP. They were being forgotten about in MP if "too far" away. Now, all items with a fixed team items slot (such as training) will be kept, regardless of distance. [NM] - Scrap from exploding items shouldn't be deposited over a building. This should keep bailout'd craft from parking scrap in inaccessible places, etc. [NM] - Snarky message for those that try and use the editor in SP. [NM] -- b62q released - Removed a few dangerous console commands, and made some more only affect SP. [NM] - Edited DMBane.bzn from Commando, try #2. First one seemed to have gotten botched by emailing. [NM] - Changed bzeditor_water.cfg from GreenHeart, changing trail.tga -> water256.tga. This file will be in next editor build. [NM] - Cleaned up Strategy02 DLL source to a "more proper" C++ style, similar to what was done to Deathmatch01 DLL source. MPI will be done when I get sick of the old style in it. [NM] - If /record or /playback is on the commandline, the game uses a consistent random number starting point. If neither of those is present, it uses a random starting point. This should make playbakcs slightly more accurate with respect to playbacks, but as long as there are resyncs in MP, those could be affecting SP playbacks as well. [NM] - IA and MP maplists are now filled in from all AddDirRecurse()'s in bzone.cfg. 'missions\instant' and 'missions\multiplayer' are appended to all the AddDirRecurse() entries (except 'data'), and scanned for .bzn files. This means that MODs are free to not touch addon at all. Feature suggested a long time ago (by TS, I think), but it took me a while to figure out how to do this elegantly. This code did touch the same code that used to crash on WinXP w/ Win98 "compatability" (hah!) mode turned on. Do test that I didn't break that. [NM] - In Humans vs Bots DM, animals are now on a team hostile to both. Bug noticed by Commando. [NM] - Large ingame MP chat box (accessible by hitting escape) should automatically be at the bottom item when it's opened. [NM] - Undid Ken's change to hovercraft bounding box made for b50D. Raising the eyepoint makes craft "feel" slower, even though its forward velocity is is the same speed. Maybe this will quiet some whiners. [NM] - Clarified comments in GamePrefs.ini, re MWSmooth_PositionFactor. How's the smoothing of AI and remote players online? [NM] - Minimized use of pointless worldswaps and remote move submissions during the loading screen. Probably not anything noticeable, though. [NM] - Shouldn't drop graphics features if alt-tabbed. It thought the framerate was really low when alt-tabbed. [NM] -- b62r released - Doesn't crash if an AddDirRecurse() entry has no missions\instant or missions\multiplayer. Oops. [NM] - CRigs won't get in a hung state if EMP-lockdown'd during building. The building should complete, then the rig should be done. Did make it so that rigs can't be given orders to build something else when lockdown'd. You can still order them away from the problem, then give them an order. (Should it be that you can't give any orders to any EMP'd units?) [NM] - Initial support for Ogg (compressed) audio, thanks to the Ogg Vorbis team (see http://www.vorbis.com/ ). Ogg is a type of compressed audio, much like mp3 files, but unlike mp3, decompressors are available with full source code, no restrictions on using it in commercial projects. BZ2 will treat any audio file ending in ".ogg" as an ogg file. Some notes on using oggs within the game: 1) At most 4 ogg streams may be active at once. Decompressing ain't free. 2) You may not used oggs for any sfx in 3D. 3) There's a 3-second stream buffer per stream. Thus, don't use them for anything shorter than 3 second samples. 4) Oggs may be looped (shell background music) 5) Oggs may be stereo. Bitrates at or under GamePrefs.ini::AudioMixRate is preferred. I've not really tested insane bitrates. 6) Oggs are always played thru software buffers. Trust me on this one, the programming is a LOT harder to do HW buffers. 7) You do not have to change all filenames -- if a .wav file is not found, it looks for a .ogg file with otherwise the same name. E.g. 'shell.backgroundsound mire22_5.wav' will look for mire22_5.wav and plays that if found. If not found, it looks for mire22_5.ogg, and plays that if found. If neither is found, it'll complain. Really, the only thing you should be using oggs for are shell music, and really long voiceovers during missions (more than 5-6 seconds). Things like "unit under attack" are best left in .wav format. Like jpeg images, oggs are lossy, so you should *NOT* edit them, resave, or convert from mp3 <-> ogg. Do all your editing on .wav files, and convert to ogg as the last step. Free programs like Audacity ( http://audacity.sourceforge.net/ ) can save as ogg, or there are commandline conversion tools available on the net. In Audacity, look under Preferences -> File Formats for the ogg export quality level, which is the amount of compression applied. FE and audio-heavy MODs better be smaller now. :) [NM] - Tweaked iv*.odf from Red_Devil to hopefully make them somewhat more aggressive in combat. Please test. Also, renamed Scion pilot assets with the proper starting character (f*.*, not s*.*). [NM] -- b62s released - (Comment about Scion pilot assets above was wrong. Fixed, and you never saw what was wrong.) [NM] - A bunch of new functions in ScriptUtils.h. See the DLL source snapshot for more info. I think I covered some of the most-requested items. Any more to be added? Keep it reasonable, folks. [NM] -- b62t released - Added a slider for recycler invulnerability in Strat. Default is 0, and can be set from 0..15 minutes. [NM] - GamePrefs.ini has Spacecomber's set of tweaked values for framerate adjustments. [NM] - SpecialItem.cpp added code to restart looping sfx (if necessary) when the item is still active. This will restart red field sfx if the player hops out of a craft with it playing, and start sounds if they were originally ignored due to the craft being too far away when originally triggered. [NM] - Change to FactoryPanel.cpp - it should register some more values when configuring ships. Bug was noted by GreenHeart where trying to remove all weapons from a sabre left a mortar even when it was set to no mortars. [NM] - Another change to Person.cpp - support for sniping in IA caused use of memory after it had been released. It's safe now, but not 100% sure that my earlier fix still works. Do retest IA w/ sniping AI. [NM] -- b62u released - Strat, FFA Extra Options pages updates from Commando. [NM] - Multilauncher.h/.cpp (e.g. Multi Lock missile) didn't have a PostLoad() function, which is almost certainly why it didn't work in multiworld. Added that function; do test if my theory is correct. [NM] - Some more DLL calls. Things should be a little more orthagonal. [NM] - In strat games, team chats will go to allies only if in FFA. In regular teamplay, team chats should behave as before. [NM] - Better tweak to StatusDisplay.cpp (than the one for b54d). It stores a flag if it can't find a unit icon texture. If that flag is set, it won't re-activate the texture for a frame after leaving the escape-menu. [ISDF interceptor needs such a texture, if anyone wants to volunteer that.] [NM] - Edited all SP mission .aip files, inserting an [IdleDispatcher] chunk to not send units towards the player until 10 minutes has elapsed. [NM] - If music volume is set to 0, or CD music is turned off, 'silence.wav' plays in the background, looping. This should give your audio card something to do all the time, which may reduce audio pops as sounds are suddenly started. Silence.wav is set as a very low priority sound, so it should be able to be released when another sound needs to take over. It'll be restarted when there's free channels. [NM] -- b62v released - For some reason, change to MultiLauncher above seemed to cause bad code to be generated, only in the Release LTCG target. Noticed that optimization flags for some files weren't what the base project had, so reset all file-specific optimizations, so that project defaults are used. This seems to have fixed the problem. As this bug seems to have made all missions unlaunchable, I'm releasing another build. [NM] -- b62w released - More cleanups on optimization flags. [NM] - AV fix (I think) in FactoryPanel.cpp::WeaponInit(). It never checked if a weapon's altClass was NULL. (Can't believe that it's never been run into before; maybe the recent weapon changes and/or optimization tweaks exposed this.) [NM] - Switched to slower (but safer) load/save pathway in AiPath.cpp::LoadAll(). That function has been the cause of too many AVs. [NM] - Tugs respond to bailout command now. [NM] - Can save IA games with multiworld on now. [NM] - Max fps shown in MP display is 150 (due to compression). If it exceeds that, now shows "150+". This time, I tested it, and it seems to work. [NM] - Possible AV fix in TurretTankProcess. Details were a little iffy, but if it died the way I think it did, the true problem is somewhere else. [NM] - Change to SatellitePanel.cpp - if owner in one of the multiworlds is invalid, the old owner is used instead. Savegame by Commando, though I think someone else noticed it before. [NM] -- b62x released - Normalized select.wav, shmclick.wav, shmroll.wav to remove any DC Offset. This might help with some popping heard on those sounds. [NM] - Upped 'NUM_ALLIES' in Team_Panel.h from 3 to 4. This might finally allow F7 to be used as an teammate slot, not a group, in 5-human MPI. A quick look thru the code didn't find load/save dependence on that, so old savegames should be unaffected by this. Also modified bzgame_keys.cfg and bzgame_team.cfg to have F7 control the 4th ally slot. Strat still only blocks off F8..F10. This is untested, as I don't have 5 PCs here at home that'll run BZ2. [NM] - Clients can pick which team they want to be on once server launches. Locked down too many ivars. Ooops. [NM] - Changes to allow AIPs, starting recyclers to be set on all 1.3 IA maps. .inf files for IA maps tweaked to reflect this. Added ia_aiplist.txt, ia_cpu_recylist.txt, ia_human_recylist.txt, bzshell_instant_xo_Default.cfg . This did break IA savegame compatability, once again, so IA saves from before this won't load. [NM] - Errors while loading from a .bzn or .sav file now get a dialog box explaining a little about the error, and that the game will now exit. This should be a little better than crashing and/or digging in battlezone2.log afterwards. [NM] - Motion Sensor destruction or loss of power properly turns off objective markers. [Ken] - Added "playerOnly" flag to "[GameObjectClass]" section; set to 1 for objects that only players are allowed to operate. [Ken] - Fixed unsafe use of atan2 in Craft::AimBody(), Craft::AimTurret(), and MorphTank::AimAt(). This should prevent potential sync errors in multiplayer between AMD and Intel processors. [Ken] - Added Render.cfg::SIS630Compatability and commandline "/sis630compat" to achieve the same thing: SIS 630 compatability. This disables a check that the zbuffer pixel depth is <= the framebuffer pixel depth, something that's true on virtually all other cards. If you get a "Can't start hardware accelerated DirectX 8" message on startup, try the instructions in render.cfg. Side note: if you have one of these things, you REALLY WANT to go to http://windowsupdate.microsoft.com and grab the latest drivers it offers. The drivers I had on CD (sis630m.drv v4.12.0001.1030 on a Win98 box) lie like a rug, claiming the system doesn't do ZBuffering. It does. 640x480x32 is really bad (stencil shadow issues?). The later drivers (v4.13.0001.2060) work a LOT better. System: P6STP-FN motherboard, Pentium 3-800 (100Mhz FSB), 384MB total ram w/ 8MB dedicated to framebuffer, Soundblaster Live (original release of card), Win98 w/ DirectX 9.0c and latest updates/drivers for all. [NM] - Extra Options pages for ST, MPI updates from Commando. [NM] -- b62y released - Updated fspilo.odf from Red Devil. [NM] - Repositioned the Ally4 group in bzgame_team.cfg so that it's not on top of the Ally3 group. Noticed by RubiconAlpha. [NM] - Updated IA extra options screen from Commando. [NM] - SIS630 compatability mode is now auto-determined, if the line in Render.cfg is commented out (i.e. has a semicolon (;) at the start of the SIS630 line). If there is no semicolon, the setting from render.cfg is used, overriding the auto-detection. [NM] - Lots of asset changes by Red Devil. I think I merged them correctly w/ the directory tree in 1.3's patch13.pak, but please verify. [NM] - ChargeGun.cpp (e.g. MAG Cannon) uses proper sfx category of 'WEAPON', not 'ENGINE'. This makes its sfx work, as it was incorrectly calculating distance to listener to be from your ship to the center of the map, not the distance from your ship to your guns. Doing a quick check, the only other things using ENGINE are actual craft (and torpedos). [NM] - Random crashes noted in SelectionDisplay::Control(). They aren't happening after I did a build of some other files for above fixes. Probably some kind of weirdball malfunction in the compiler. (VS.NET does do that far too often, in my experience) [NM] - Installer uses Windows's 'Pick a directory' dialog, instead of the really nonstandard dialog it had. If I read documentation right, then Internet Exploder 4.0 or higher is now required to install 1.3, something I'm willing to put up with. [NM] - Console message printed if trying to adjust AIPs in Multiworld (which you can't do). Otherwise, console commands like "game.cheat bzsetaip blah.aip 6" work in IA just fine. [NM] - Some updates to Readme13.rtf [NM] - Several new functions added to ScriptUtils.h. The bad hacks to overload IsODF() should be replaced by newer, cleaner calls. (The old hacks should still work). Those using the GetObjInfo() function *MUST* make sure that the buffers passed in are 64 bytes in size; 1.3pb1's IsODF overloads tended to use 20-32 byte buffers. Also redid all DLLs to use new calls, not IsODF hacks. [NM] - Larger options screen ingame -- the 2-column form seen in the shell, with some items turned off in MP. Also did more work to ensure that changes to auto leveling in a MP game will NOT take effect. This should reduce the chances of out-of-syncs caused by people adjusting things they shouldn't. [NM] - Updates to igbolt00.msh, fblung.odf from Red_Devil. [NM] ---- 1.3 beta 63 released======= - Finally tracked down crashes in SelectionDisplay::Control() . It was calling Team::GetTeam() with an invalid team #, which pointed to nearly-valid memory. [How this ever worked is a mystery to me...] Changed Team::GetTeam() to return NULL if an invalid team # is passed in. This is slightly more dangerous in the short term, as any code which doesn't check for NULL will AV. However, it's better to crash immediately and obviously than it is to stomp on some other parts of memory. [NM] - Going to Main from the IA Extra Options pages doesn't leave detritus onscreen. [NM] - Added an entry to scavenger ODFs: [ScavengerClass] doDrop = false (Default is false, if not specified). If true, scavs will return to drop off scrap, no instant-add of it. The code to do this was already present, but hardwired to never do the dropoff. If this works (I only gave it ~1 minute of testing), some modders might find a use for it. [NM] -- b63a released - ivar10 (pause join) can now be changed ingame, if the server wants. [NM] - Minelayer task more or less rewritten, with inspiration from the Bomber's attack process. I couldn't figure out what was going on, and the rewrite probably went faster, as it was a copy from code I'd written a long time back. Also added some values to ODFs. Default values shown, if they're not specified in the ODF [MineLayerClass] mineCount = 15 // # of mines to drop (if out of ammo, will still go thru the motions) radius = 10.0f // Initial radius from current location to first mine's dropoff radiusInc = 10.0f // Amount radius grows by each drop angleInc = 90.0f // Initial angle increment per drop (in DEGREES) angleDec = 4.0f // Amount angle increment decreases by each drop (in DEGREES) timeout = 10.0f // Timeout (seconds) in getting to next drop point. If exceeded, will just drop mine at current location, work on next mine Old savegames w/ active minelayer tasks won't be loadable. I didn't bother trying to make them compatible, as I don't think anyone's actively using that. [NM] - Added more virtual destructors to AI Tasks, as they had virtual members. Possibly harmless, but non-virtual destructors set off faint alarm bells. [NM] - Added another item to craft ODFs: [CraftClass] CanBailout = true // default If set to false, the unit won't be able to be given (or accept) bailout (i.e. self-destruct) commands. This is pretty much untested. [NM] -- b63b released - MP sessions of the wrong version are now listed in red. Maybe now some people who never read the fine manual might get the idea that they're never joinable. [NM] - SelectionDisplay.cpp changed so that it uses the simulation position (i.e. position at last 1/10 second physics update) for all objects more than 150m away. Items closer than that use the interpolated (render) position, which is how all positions used to be gotten. This seems to make really-far objects move smoother onscreen if objectified, etc. (I think their interpolated position was updated rarely if outside of render distance; up to 1/10 second lag on position shouldn't be too noticeable if >150m away.) Savegame from Commando helped demonstrate this issue. [NM] - Updated TeamSlots.h to support 256 items per team (was 128). Also changed Entities.h to track 4096 objects at once, not 2048. The first change seemed relatively safe, the second was a serious change -- moving one bit in every Entity Handle from a sequenceNumber to an index field. Frankly, I was surprised savegames loaded after this. (Fair warning: this build may act funny!) Did this change as a custom map by a modder seemed to run out of entity slots, and units built past a certain number were uncommandable. Thanks to Lizard and Commando for savegame. If this is problematic, change will very likely be undone. [NM] -- b63c released - Added classLabel = "scavengerH" to ODFs, making them Deployables, not TrackedDeployables. I believe the relevant sections of the ODF are: [GameObjectClass] classLabel = "scavengerH" unitName = "ScavengerH" aiName = "ScavHProcess" aiName2 = "ScavHProcess" [HoverCraftClass] // usual stuff goes here [DeployableClass] // usual stuff goes here [ScavengerHClass] soundPickup = "suck.wav" scrapHold = 20 deployClass = "ibscav" deployOffset = 3.2 The resulting mutant ODF I made (some sections copied from ivturr.odf) here drove a little funny, strafing sideways a lot rather than turning. Not sure if that's my mistake or how it'll always be. [NM] - Changes to ConvertHandle() so that if trying to reassociate ordnance across a visual world swap, it doesn't have to exactly match the sequence #. This seems to keep 20-50% of things across such a swap. The remaining items couldn't be found at all in the current world, so it's got to just drop them on the floor. [NM] - Code added to push away tracked vehicles from buildings if they're colliding for more than about a half-second. (Same principle as the building effect). This may help tracked units from getting embedded in the first place. One savegame from RedDevil has a ST embedded in a GT, yet the two claim they're not colliding(!). Such savegames won't be fixed by this change; I'm wondering if this change is sufficient to keep them out of each other in the first place. [NM] -- b63d released - Change optimization settings around MeshEnt::SetupStates(MeshRoot &root) to try and get some more info if it AV's. One report on it didn't have enough info. [NM] - Code to reassociate ordnance across MW boundaries searches even harder now. Things seem slightly better to me now, but then again I'm probably biased. Not sure if this extra work will affect framerate or anything. [NM] - More changes to TrackedVehicle::Simulate. If colliding w/ building, it does the pushaway, and nothing else. (Previously, it tried to continue on w/ normal physics). This should prevent annd feedback loops; normal physics will resume only when no longer in collision. [NM] - Hoverscavs turn now. Consolidated some code that was cut-and-paste between Microplan.cpp and UnitTask.cpp, which differed as to how animals are treated. Do check that they still work in all cases. [NM] -- b63e released - Added support for more factories/armories occupying base buttons 4-9. Someone's going to have to reorganize the .cfg files to make this all work out, but as the stock configuration doesn't use those keys, I'm not going to do that work. [PoweredBuildingClass] PanelIcon = "" // Optional, texture to use for icon, e.g. "icon_base_armo.tga" [FactoryClass] BaseSlot = 4 // valid values are 2..9. Default is 2. To do this, I shuffled down all team slots (Service bay, etc). Not sure if this is going to have some side effects. PanelIcon is valid for all base buildings, so sides can have custom icons. The only-1-allowed requirement is still in effect for these, so you could conceivably make a blocking-tech-tree where making one building on BaseSlot 4 means that a different building on that slot couldn't be made. [NM] - Changed GotoTask.cpp's CashOutTask (== 'recycle self') to have a tolerance of 10m from the recycle point. Previously, it was 8m. This might help some of the queues of units trying to go bye-bye. [NM] - AV fix in ConvertHandle(). How are weapon effects in multiworld now? [NM] - AV fix in SaveRecording() -- if it can't open the file to write, it'll complain, but not crash anymore. [NM] - SelectionDisplay.cpp switches to the render position at 250m, not 150m. See above. [NM] - Refined tracked vehicle building pushaway. It seems to work better on a savegame that gave 63e fits. Let me know how this works out. [NM] - Added a way to make a person count against the IsSingle command. You'll need to set both of these in the ODF: [GameObjectClass] IsSingle = true [PersonClass] IsSingle = true // default: false, if not specified Also made the user's craft count against the isSingle restriction as well; previously, that was unchecked. Both issues noticed by Fishbone. [NM] -- b63f released - Added DLL_TEAM_SLOT_BASE4 .. DLL_TEAM_SLOT_BASE9 to ScriptUtils.h, plus some other important base buildings. Modders who want to access these can go ahead. Custom DLLs won't need a rebuild if they refer to the same DLL_TEAM_SLOT_* values that have been published from day 1. Stock DLLs don't check BASE4..BASE9 for game-end conditions. [NM] - Ordnance in multiworld was a bit glitchy. Switched using only the (slower) pathway, which should also help stability. This seems to fix up some issues with trails being rendered at odd angles, etc. Trying gauss in MWF1 (from a Titan) seemed to get the brighter lines pretty much the same as in singleworld, but I can't say I know that effect by heart. It didn't alternate 100% of the time, but in singleworld it didn't seem to do that either. [NM] - With 5-player MPI, people cannot give/take command roles. This is why the playerlimit is usually only 4. Added a message (probably only on the server) to that effect, when someone tries switching roles. Pick your commander wisely before the 5th player joins. [NM] - Widescale change to some low-level code. This should make the game slightly more resistant to crashes by modders feeding it bad data. I'm being deliberately vague so as to not give the black hats a headstart. Also added a new function to ScriptUtils.h, recompiled stock DLLs (SP, mainly) to use it. [NM] - Basepanel slot #10 (key 0) isn't selectable. Also, if a building in slots 1-3 has no PanelIcon set, it force-uses the defaults. [NM] - Updated IA, MPI, Strat DLLs to use GetObjInfo(h, Get_GOClass, ...) to properly determine an object's type. See the source snapshot for more details, but these changes allow the DLLs to identify Scav/Hoverscav, and turrets, no matter what the odf is named. [NM] -- b63g released - Dropped optimization settings around some functions to get more info from callstacks. [NM] - Ordnance isn't stripped out when multiworld switches. This might help visual efx, and possibly also some of the recent instability. -- b63h released - Found cause of some weird crashes recently. Building pushaway code could access invalid memory if the building died between when the collision was noticed, and the tracked vehicle was seeing if it was still colliding. Tweaked collision code to store handles, not just pointers, and check that handles are (still) valid before using the pointers. This seemed to improve stability in a savegame sent on by Commando. [NM] - Update to ibagtow00.{xsi|msh} from Greenheart. Collision mesh changes. [NM] - Added NULL.msh from my box. This might help asset/sync stability. [NM] - Added a section to MorphTank ODFs: [MorphTankClass] UseChromeMesh = false // default is true if not specified. Note: this is really untested. This should turn off the chroming effect on morphs. [NM] -- b63i released - Morphtanks have proper name after morphing. Ooops. [NM] - Change to AIUtil.cpp - if trying to figure if a shot will hit a target, if the target is a lung, and the shot will hit the owning building, then fire away. This allows ATanks (and other craft using Line of Sight weapons) to blast away at lungs from a distance w/o charging in. This will probably have some side effects where craft won't maneuver to get a straight line of sight to the lung, but I think that this is better than charging in. [NM] - Scrap cost for replacing lungs is charged upfront, not when the lung is replaced. This is mainly for consistency's sake, though some said it wasn't being charged. [If the scrap gauge was full, and some scavs had some spare in them, they'd teleport it back as soon as the deduction happened. Make sure your scrap gauge isn't full before testing this.] [NM] - Added method for AIPs to switch themselves out. In the AIP, just put the following two lines in the [Plan#] section: [Plan1] planType = "SwitchAIP" NextAIP = "stock13_ff3.aip" All the usual conditions, priorities, etc can also be attached to the plan. If it reaches that plan item, it switches the AIP right away. Any other plans at the same priority won't be executed, as the old AIP is kicked out of memory. [NM] - In GameObject::Simulate(), if they have negative health after addHealth is applied, the destroyed flag is set. This should kill the item, though it may wait until the next simulation update (1/10 second) to do that. (GO::Simulate is the last function called as part of an object's simulate, while the higher-level things done beforehand check the destroyed flag.) [NM] - Added a parameter in ODFs: [MagnetMineClass] TeamFilter = 0 // 0 = pushes all teams, 1 = pushes same team only, 2 = pushes only allies, 3 = pushes only enemies, 4 = not same team [MagnetShellclass] TeamFilter = 0 // 0 = pushes all teams, 1 = pushes same team only, 2 = pushes only allies, 3 = pushes only enemies, 4 = not same team Both default to 0 (traditional behavior) if not specified. This is untested, but it compiled. [NM] - Construction rigs clear out physics parameters (in their Euler) when they start deploying (building). This should clean up some oddities related to their stopping to build, then continuing old physics. [NM] - (Finally) stores current graphics prefs in a different set of memory than the copy used by the renderer. This allows the auto-drop to touch values that won't be saved to disk. [NM] - AV fix in NetManager::AllowVarNotify() on shutdown. [NM] - Added [CraftClass] CanUserBailout = true // Human can exit craft w/ Ctrl-B if true CanUserHopout = true Default is true if not specified. The first should allow people to protect GTs/GSs from hostile users. Second added for competion's sake. [NM] - Fix in Person.cpp to prevent AI pilots from stealing deploying scavs. There was a test above the deploying-scav test that was giving false positives. Changed order of tests to work better. [NM] - Options save on every change now (max of once per second). This should make sure that user's choices are reloaded the next time the game is launched. Let me know if the resolution-doesn't-stick issue is still present. [NM] - Added "/ignore" "/unignore" and "/showignore" commands to the chat box. That squelches all messages from them, though some things like "go to " will still show up on the messages box. (By the time that's printed, I don't think I can tell who sent it). Targets will still be painted, as that could cause sync issues if they weren't. [NM] - Added [GameObjectClass] CanSelect = true // can select with point-and-space NoShadow = false // never renders a shadow if true. CanSelect's default is true if not specified. Requested by Commando. NoShadow's default is false (i.e. have a shadow) if not specified (compiled, but not really tested). Requested by Slaor. [NM] -- b63j released - AV fix in AiUtil.cpp AbleToHit(). Wa introduced w/ the fire-at-lung code above. [NM] - Building constuction pushaway is a little faster now. [NM] - Added [GameObjectClass] Tuggable = -1 // -1 = default behavior, 0 = never tuggable, 1 = always tuggable [CraftClass] CanRecycle = true // 'RECYCLE' shows up on the 0 key if true Default is true for CanRecycle. Tuggable defaults to -1. Some items (like tugs, buildings, turrets) will ignore the tuggable setting. These are untested. [NM] - Before launching a Strat/MPI game, it checks that starting recyclers exist for the current human/cpu race(s) and recycler variant (svar5). If those files are missing, it refuses to launch. It could launch, but w/o recyclers then playing would be rather pointless. Noticed by Commando. [NM] -- b63k released - When loading ordnance across multiworld swaps, it now checks the ordnance type. This should fix the occasional bit of "wrong type of ordnance appearing" bug. [NM] - AOI.cpp is stricter about not AVing when accessing invalid memory. Can't tell from an AV how it happened, but it should be a little better now. [NM] - Construction rig no longer clears out its euler when building something. Apparently this caused anims to break. [NM] - Shell files update from Commando to fix position of pilot life edit. Also change to gauss guns to increase shotDelay to 0.75 so it renders better in MW. Also updates to tunnels.inf and USMC_UW.inf and new shell configs to turn off bots on maps that make the AI look real dumb. Also a bunch of tweaks to the recycler variants, to fix some imbalances. [NM] - Update by GreenHeart to ivrecy xsi|msh file to move eyepoint off the ground. Also changes to editor config files for more water changes. (Editor changes will be distributed w/ next editor update) [NM] - For MPI opponents, files matching '*vrecycpu.odf' are used to determine which races are selectable for the MPI opponents. This is more in line with the way BZ2 works than a static file of opponents. [NM] - IA Extra options screen properly restores race-locked teams when it closes. Noticed by several people. [NM] - Added [ShieldTowerClass] TeamFilter = 0 // 0 = all teams, 1 = same team only, 2 = allies, 3 = enemies, 4 = not same team ** see extended documentation on 63u build below! ** Default value is 0. Value of 4 (push everything not on the exact same team-- opposite of value 1) also added to MagnetMine/MagnetShell. Documentation on them changed above. [NM] - FactoryClass::soundBuild should work now, playing a sound effect when a unit starts building. Also added [FactoryClass] soundCancel = "" // Played if a unit build is canceled [PoweredBuildingClass] SoundSelect = "" // Played when activated thru the 1..9 keys SoundDeselect = "" // Played when deactivated thru the 1..9 keys for completeness's sake. All of these are untested, but should work. [NM] - When alt-tabbed in multiworld, game does more work, acting more like what happens when the game isn't alt-tabbed. This might help make behavior post alt-tabs more like they never happened. -- b63l released - Changes to TwirlTrailRender and EmitRender classes. They should track parent craft's velocities better now, as they store last position after velocity is calculated. [I think this had the desired results... this isn't my code, and I'm guessing at things.] [NM] - PoweredBuildingClass::SoundSelect/SoundDeselect might work now. I think they were being done as 3D sounds, which would have been faded quickly by distance. Remember that you MUST have .wav specified in odf, e.g.: [PoweredBuildingClass] SoundSelect = "ivrecy04.wav" // Played when activated thru the 1..9 keys SoundDeselect = "ivrecye5.wav" // Played when deactivated thru the 1..9 keys If .wav isn't part of the SoundSelect/Deselect lines, sounds won't play. [NM] - Changes to Options.cpp to (finally) store user's resolution choice as Width, Height & BPP. Previously, it would store the index in the list of resolution choices (top choice is #1, next is #2, etc). However, it seems Windows and/or DirectX report back different lists of possible resolutions depending on the time since reboot, phase of the moon, and other things. Storing (and matching) width, height & bpp should make the [re]selection more reliable. If it can't find a stored resolution, it'll whine to battlezone.log and fallback to 640x480x16 (minspec). [NM] - Restored 1.0's fvwalk_*.xsi files. Also edited xplascar_c.odf. [NM] - Added [CannonClass] OnlyOneSound = false // If true, should kill previous shot's sound effect when next shot fires Default is false if not specified. This is pretty much untested. [NM] -- b63m released - Added GamePrefs.ini::ShowHistogram. Just in case you're addicted to it. [NM] - Added [BuildingClass] CanDemolish = true // If true, can be demolished w/ construction rig [TurretCraftClass] CanDemolish = true // If true, can be demolished w/ construction rig Both default to true if not specified. This allows buildings and guntowers/gunspires to be protected from demolishing. This is untested, but should work. [NM] - Fixed longstanding (since June 2003) bug with loading savegames when a team has more than 1 blocked items under construction. Problem was caused by 'sizeof(blah * count)' vs 'sizeof(blah) * count' -- misplaced parentheses causing the math to go a little wonky. [The former is legal, but insane C/C++ code. I wish there was a compiler warning to flag any math operations inside sizeof's parentheses as there's very little good that could result from it.] Thanks to Commando, Spawn & Lizard for putting together a case that demonstrates this AV. Note: this may also fix an issue reported with savegames made during crig action not loading; several tests here on that bug were unable to reproduce it after the custom-assets case was fixed. (Special efx aren't saved/reloaded, but I can't be bothered to fix that.) A save mission (.bzn) was missing several items like ibrecyexp.odf, so its lack of loading is probably due to the other warnings encountered. [NM] - Added code to planners.cpp to scan over all base slots and if one of them is a factory (i.e. not an armory) that can build an item, the item is scheduled to be built there. Old code didn't check all base slots. [NM] - Added GetScavengerCurScrap, GetScavengerMaxScrap, SetScavengerCurScrap, SetScavengerMaxScrap to ScriptUtils.h . Pretty much untested. [NM] - Back to 1.3pb1's mauler. Head turns once again. Looks like any chances of getting the head 'bob' back are pretty much nil. Wish that would be the volume of complaints. [NM] - Added a little "gift" to those who still manage to join the CPU team in a MPI. For those who don't understand the phrase "don't do that," maybe a little tough love will help them. This message will disappear soon from the changelog, but the feature won't. [NM] -- b63n released - Scrap gauge work. Now, it sorts extractors by the rate at which they produce scrap, with the fastest ones on the bottom, and larger ones coming before smaller ones within the same scrap production rate. This should allow more diversity. [NM] - Added a new type of (unpowered) building: [GameObjectClass] classLabel = "silo" [SiloClass] initDelay = 10.0 // How long before produces first scrap scrapDelay = 10.0 // How long between scrap after first is created scrapHold = 10 // Scrap capacity Above values under [SiloClass] are defaults if not specified. Note that silos will sort vertically above the recycler (i.e. last to produce anything) at these default rates. If their scrapDelay is < 3, it'll be vertically below the recycler, >3, it'll be above. (Faster production now sorts to the bottom.) You can set the initDelay/scrapDelay pretty big (e.g. 1e6) to only store scrap, never create scrap. Also note that each silo counts against max of 16 scrap producing buildings/recycler vehicles per team. [NM] - Added [CraftClass] CanAIEject = true // AI pilots can eject from this craft when destroyed Default is true. This is pretty much untested. [NM] - Changed behavior in CollectTask.cpp/CollectHTask.cpp. Both check for a full scav in the main update process, and switch immediately to 'RETURN' (dropoff) if their ODF has doDrop = true. Previously, both would only check full if within 15m of their target, and when finding the next target. This might fix a case where ScavH's would start collecting again when they were damaged while full. [NM] - Added [ScavengerClass] and [ScavengerHClass] animPickup = "" // animation name to play on picking up a piece of scrap animPickupCycle = 0 // 0 = loop, 1 = 2way This is an animation triggered right when the scrap is picked up (same time as soundPickup(=="suck.wav") is triggered). This is pretty much untested. [NM] -- b63o released - Change to Scavenger[H]Process.cpp to ignore shots from friendly or enemy if they're full. This should allow those with doDrop = true to continue back to base when full and not be disrupted. Noticed by Avatar on ScavengerH's, but I fixed it in both types for consistency's sake. [NM] - Complete hack to Scavenger[H].cpp - in order to get pickup anims playing more than once, the "forward" animation is triggered immediately before the animPickup animation. Thus, your scav needs to have an anim named that for the animation system to properly play the pickup animation more than once. [And, therefore, your animPickup can't be called "forward"] As the "forward" anim never really plays, this should be pretty much unnoticeable. [NM] -- b63p released - Fix to code that checked for custom race explosion.odf files. It was looking for the file with the wrong call, so it couldn't find them to use them. Thanks to Commando and Bull Dog for providing sample files that demonstrated this. [NM] - Tightened up code for commandline "/config ", a way to override the use of bzone.cfg. This has been in the game since 1.0, but apparently not documented. Added it to Readme13.rtf. I guess I just simplified how modders work on things. [NM] - Added GamePrefs.ini::OldOrdnancePath . This lets you disable some code for speed. [NM] - Added GamePrefs.ini::ServerTimeskewSetup . This lets servers set which timeskew code their clients use. [NM] - Added some code to work around some (more) ivar hacking. This should help keep things more as intended. [NM] -- b63q released - Potential AV fix in Attacker::Init(). It should be more resilient to mispellings, etc in the AIP file. Similar code in Planners.cpp was examined to see if it could die in the same way, but I didn't find anything that looked suspicious. [NM] - More recycler variant updates from Commando. [NM] - Added [CommBunkerClass] CanAlliesUse = false // If true, allies can use it. Default: false. MinViewDist = 100.0 // If specified, minimum height of commbunker view MaxViewDist = 100.0 // If specified, maximim height of commbunker view If Min/Max aren't specified, then it uses viewDist for them. This is pretty much untested. [NM] - Fixed bug where .bzn files specified on cmdline would be ignored. Ooops. [NM] -- b63r released - AudioMessageMgr::Insert() returns 0 if it points to an invalid sound effect file. This is used by the AudioMessage() DLL callback, among other things. (Should a warning be printed?) [NM] - Serious buffer overflow fix in some code that was callable by a DLL. Details censored in order to keep knowledge out of bad people's hands. Basically, this should reduce the number of memory trashing issues. [NM] - TorpedoProcess::Execute() is restricted from doing much work if it's not attached to a powerup. This might fix some memory trashing. [NM] - Fix to ScriptUtils.cpp's SetIndependence call -- checks AI Process type on what it's trying to modify. Only things with a UnitProcess can have that modified. TorpedoProcess is not a type-of UnitProcess, so that would trash memory. ScriptUtils' Patrol() would also call SetIndependence. This seems to fix the EDF15 mission. [NM] -- b63s released - AV fix in SetIndependence(). Fix for 63s inserted some code above a check. Swapping the order was the right thing to do. [NM] - Warning to bzone.log and console from AudioMessageMgr::Insert() if a sfx file can't be found. [NM] - AV fix in TorpedoLauncher::Simulate() -- no longer crashes if its ordnance couldn't be found. [NM] - Torpedeos work once again. A change I'd made to TorpedoProcess as part of 63s wasn't the right change-- the code said it operated on a PowerUp(!), so for safety, I made it only operate on PowerUps. [I don't just write the changelog for end-users; it also helps me remember what was done.] Better fix was to take the relevant part of Craft/PowerUp/Torpedo, and access it with a virtual function. [NM] -- b63t released - Scavenger/ScavengerH's will ignore deploy commands if their deployClass is invalid or missing. This should prevent a little console spamming. Also added code that if they deploy into a craft, they should go into a F# group, allowing them to be commandable, etc. Savegames from Commando were useful in demonstrating these bugs. [NM] - Simtimer, pauseview are better behaved now if multiworld is enabled while the pausemenu is turned on. Do test leaving the pausemenu in all sorts of cases, especially in multi-machine MP games, etc. [NM] - Savegame from Commando noted that ShieldTowers behaved differently with ordnance. This was because it the TeamFilter code didn't apply to ordnance; it always treated it as if the TeamFilter was 0. Fixed. Also extended what the TeamFilter does: Craft Ordnance All Teams 0 0 Same Team Only 1 16 Allies 2 32 Enemies 3 48 Not Same Team 4 64 Simply sum the values together to get what behavior is desired. For example, pushing craft on the same team only, and ordnance of enemies is 1 + 48, or 49. [NM] -- b63u released - Recyclers won't crash when loading if their deployClass is missing or invalid. DeployBuildings (e.g. recyclers) will refuse deploy orders if what they turn into is missing or invalid. DeployBuildings should get assigned a group if they turn into a craft. (And other unnatural acts that belie their deployBUILDING name :) Changes to ConstructionRigProcess.cpp to avoid an AV in RigProcess::InitDefend if a mission is saved while a crig is busy. (Save by Commando) [NM] - Changes to ConstructionRig/ConstructionRigProcess to allow rigs to build vehicles and other unnatural acts. If this causes more problems, I'll work to do the opposite -- prevent rigs from considering building such things. Some vehicles have strange lines coming out of them in the preview display-- not sure what that is, and probably won't investigate too much. (Save by Commando) [NM] - Change to way scrap gauge is sorted -- as recyclers/silos can add scrap to total only when there's an extractor below them in the gauge, extractors are now put at the bottom of the list, recyclers/silos above them. Within each category (extractor vs recycler/silo), then the sorting rules still apply -- speed first, then capacity second. (Save by Commando) [NM] - Updates to IA, Strat, MPI DLLs to track upgrades of recycler buildings into recycler vehicles. Spurious 'game over' messages after doing that should be gone. All the SP missions remain untouched, as they're designed for the stock assets that don't support such a thing. (Save by Commando) [NM] - Construction rigs will refuse upgrade orders if the upgrade item is grouped, and there are no F# slots available. Items will simply be shown but disabled on the 1..0 display; the user will have to figure out that they've run themselves out of free slots. (Save by Commando) [NM] - Update to Planners.cpp - SwitchAIP plans should honor conditions now. Thanks to Natty Bumppo for noticing. [NM] - Added render_editor.cfg::EditorSchematicIsWindowed. See comments above it for more info. [NM] -- b63v released - Integrated new set of tunnel ODFs from GH that are supposed to fix pathing issues. (Should have been done earlier, but this slipped thru the cracks) Recycler updates from Commando. [NM] - Fixed a case of uninitialized parts of matrices, specifically when they were built from a quaternion and vector. The 4th column wasn't properly set up, so bad things could happen, such as to the Assault Pulse Stab effect. (Technically, I saw this issue as soon as I ramped up code warnings and loaded a mission; the fact that the problem the savegame was supposed to fix was gone was a happy coincidence). Not sure how the code ever worked without these fields properly set up. Savegame by Commando. [NM] - Fixed crash if a hovercraft had no meshRoot, as pointers to its animations had uninitialized contents in them. Assets by Commando (ivkami1.odf). [NM] - Change to UnitTask::SelectWeapon(). It does the 1.3 check for available and useful weapons first. If none are found, it re-runs the check, but doesn't disallow specials. This seems to fix kamikazi units, though there may be some sideeffects. Do test. Savegame by Commando, extracting some FE files. [NM] - CommBunker::PostLoad() tries to reset satellite view ranges (for ones with custom min/max heights) on mission load. It doesn't save precisely what altitude you've got set at the moment, but should snap back to default altitude. Do test, especially in MP games. [NM] - Removed [CommBunkerClass]::CanAlliesUse from ODFs, as it didn't work as expected. Try this instead, though it should probably only be set for commbunkers. Allies trying to use recy/factory panel will probably be useless at best and crashy at worst. [PoweredBuildingClass] CanAlliesUse = false // If true, allies can use it. Default: false. [NM] - Added [FactoryClass] WeaponConfig = "blah.odf" // If blank, uses *weapon.odf. If specified, MUST end in .odf This allows modders to restrict weapon layouts available at a specific factory to a different odf than the normal 'iweapon.odf'. If this parameter is missing or "", then the default behavior is used. As noted above, if this parameter is specified, it *must* have .odf in it, as per the above. There is no race-customization of the first char if specified. This code compiles, but is otherwise untested. [NM] - Added [GameObjectClass] PilotConfig = "ispilo" // If blank, uses [if]spilo/[if]suser. Otherwise, pilot for craft This will allow modders to manually set the default pilot for any craft. Note that each craft's current pilot config is saved in .bzn/.sav files, so any changes to this parameter will take effect only when a new craft of that type is built. If this parameter is missing or "", then the default behavior is used. If the parameter is specified, is no race-customization of the first char. This code compiles, but is otherwise untested. [NM] - Changed conditions under which DLL's AddObject() or DeleteObject() could be called. Previously, it was only when they had an AIProcess attached to them. Now, this is done from the constructor/destructor of GameObject. Thus, DLLs should get called a lot more often, and a lot more reliably. Technically, the constructor only adds the handle to an internal list, which is called during the next time through the main loop. This is because when the low-level constructor is called, not everything is fully set up. DLL authors: watch for any weirdness. You're going to get a lot more calls. Also, due to the slight delay between object construction and calling the DLL, you *might* get a call on DeleteObject() before AddObject comes thru, but I think this is unlikely. [NM] -- b63w released - MPInstant.dll needed to change after my calling changes. New version posted, plus DLL source. -- b63w MPInstant.dll released - Found more problems with the way DLLs were being called, including possibly not calling AddObject for items pre-placed on the map. (The timing issues found above could break a lot of 3rd party DLLs, and I'd rather not do that.) Went with a hybrid approach to calling AddObject -- items are put on pending list when GameObject constructor is called. If they get to the old code that would have called AddObject, then the DLL is called immediately and they're pulled off the pending list. Added some interlocks so that they're only added to DLL once for a given handle. This should ensure that items are registered with the DLL as soon as possible-- with timing no different that 1.0-1.3b63v for anything with an AiProcess attached. Only items without AiProcesses will go to the DLL during the next 1/10 second update; in 1.0-1.3b63v, they would never have gone to the DLL, so that's an improvement. MPInstant.cpp changes made above are now pointless but harmless. [NM] -- b63x released - Race-specific nav beacons should be possible. It'll look for 'Xbnav.odf' (replacing X by the appropriate race), and fall back on ibnav.odf if it's not found. Note: this code only compiles. Haven't tested it. [NM] - Added [GameObjectClass] CanDropScrap = true // true = default. If false, won't leave a scrapfield when destroyed This is untested, but compiles. The DM code already had flags to do that, so it ought to use the same system just fine. [NM] - Added [PersonClass] SpawnInvincibleTime = 0.5 // 0.5 = default if not specified This is how much time (in seconds) a newly-created pilot will be invincible. This compiles, but isn't really tested. This is the same code used to give newly-created pilots some invulnerability as they bail out, so it ought to work. [NM] - Deleted the ivar27 meaning for MPI, namely the never-switch-plans aspect of it. Replaced it with a better solution, in the aip itself: [Start] DLLCanSwitch = true // true = default. If false, DLL orders to switch are ignored. This should make the same system work in IA and MPI rather easily. Note: SwitchAIPs generated from within the AIP itself are honored, even if DLLCanSwitch is false. Also, game.cheat requests to change AIPs are also fine, unless the no aip debugging has been set. MPI DLL [NM] - Added fbmtow00.msh . Should have been included last build as its xsi was added that build. [NM] - When done loading a .bzn file, it should call DLL's AddObject() for all preplaced objects in the world. Not sure if that was done before, but it seemed relatively easy to do. [NM] - Added some more tuning values to the MW smoothing system. See GamePrefs.ini, and comments above MinMWSmooth_dt and MaxMWSmooth_dt . As noted in Gameprefs for quite some time, craft that are barely moving in position, but have a high rotation will cause fits in the smoothing -- they just won't be shown as rotating. Maybe setting a floor on the dt in simultating will help this somewhat. [NM] -- b63y released - Idle Dispatcher now checks the team # of all objects it tracks. If that changes (e.g. sniped unit is entered by pilot), it stops tracking that object. Also made it so that craft are immediately removed from Idle Dispatcher when sniped, so it doesn't try sending orders to them w/o a pilot. Bug noticed by technoid, save by Commando. [NM] - Uppsed size of space that [WeaponClass]::fireSound is read into. Some people had names that went over the limit. That shouldn't cause any problems these days, but in the past, it might have. [NM] - bzsetaip cheat command should work once again. Ooops. [NM] - Added [GameObjectClass] ScanTeamLimit = 0 // 0 = all teams (default), 1 = same team only, 2 = allies only This can be used to keep objects off the screens of other teams. Edited ibnav.odf to use ScanTeamLimit = 2, and navs from hostile teams don't show up on the screen anymore. [NM] - Upped MAX_PLANS from 256 to 1024. This affects the number of [Plan#] slots available in a .aip file. You shouldn't need anywhere near that number, honestly. [NM] - Postgame stats include total game time. Shown in H:MM:SS format. [NM] - Fixed another AV when recyclers have an invalid deployName. Save by Commando. [NM] - Pilots can't get into an exploding walker anymore. Noticed by Spawn, savegame by Commando. [NM] - Tweak to building pushaway code. Some recyclers had problems climbing bridges, which turned out to be the building pushaway code. I can't reliably tell if an object is interpenetrating or not, so I faked it by not pushing away if a craft is going pretty fast. Slow objects will still get the push. Save by Commando. [NM] - Deleted g_fflash.msh from local directory, as it was built from the wrong xsi (g_sflash.xsi), and generally wasn't needed anyhow. This will be removed from patch13.pak in the next full build. [NM] - When interpolating (guessing) at future moves from players, weapon switching is turned off from the guessed-at moves. This might help make the guessed-at worlds closer to reality, possibly also with Blink. Do test. [NM] -- b63z released - Major work to 1.3's installer. Switched internal compression format to 7Zip format -- see http://www.7zip.org/ . This shaved nearly 10MB off the download size, from about 37,556Kb on B63's installer to 27,732Kb in a b64-preview test. The installer might chew up a bit more memory now, and might be a bit slower due to undoing the extra compression, but I think the benefits are worth the tradeoffs. [NM] - Updates to GreenHeart's mappack. Email noted "Added updated GreenHeart map pack to use Scion Artillery Tower. Changed path "mpic#_ibmtow1" to this "mpic#_ibmtow1_fbmtow" [NM] - Update to ISDF12 by Commando. New odfs and AIPs to build objects that are less snipeable/destroyable. This should make the map more resiliant to user errors. [NM] - Point-and-space code now respects 'canDemolish = 0', same as the number keys. Save game by Commando. [NM] - When AI pilots try and enter an unpiloted craft, and all groups have craft in them, it now tries to find a non-full group that it can join. Only if there's no space in any matching groups, or there's no empty groups for a new type of craft, will the pilot be killed. Save by Commando. [NM] - Fix to AIP Attacker plan -- it would tend to only send the first object in a group, and only if it had no target previously picked. (Quite possibly broken by me a long time ago). Now, it should send all units in the attacker plan at the target. [NM] - Fix to an "Out of Memory" error that tended to be caused by Missile scouts. In Bullet::Simulate(), it looped over time simulating a bullet, until dt reached zero. However, in some of the code that determined it had collidied with something, it got a negative dt back (i.e. it collided a bit ago). That increased dt, making it never hit zero. While it was looping infinitely, it was generating tens of thousands of explosions, which eventually ran the system out of memory. I made Bullet::Simulate() ensure dt_left always decreased, no matter whether dt was positive or negative. That fixed a savegame from Commando. Let me know if this causes any weirdness; another possible solution is to only loop say 16 times in a frame. [NM] - If the DirectX BeginScene() call fails repeatedly-- 16 times in a row-- BZ2 will put up a dialog box and exit. Something has gone seriously wrong if that's repeatedly happening, and we might as well put up a dialog box rather than expecting the user to force-kill BZ2. [NM] - Fixed an exploit related to satellite view. First reported to me by APCs r evil. [NM] ---- 1.3 beta 64 released======= - Further changes to Bullet::Simulate(), as above change wasn't enough. Added a hard limit of 32 collisions with objects during a single call to Simulate(). [Railgun-type weapons may not go thru as many objects, but it should be hard to go thru more than 32 objects in a straight line.] Also ensured that explosions are generated only once on each object hit -- savegames tended to show ping-ponging between hitting two objects, generating an explosion each time. Now, only the first hit by a bullet on a given object that frame will trigger an explosion. Savegame by Red Devil. [NM] - Cannons with shotAlternate = 1 (e.g. guntowers) should have the right shotDelay after [re]loading a savegame. Items were being calculated at initial setup, but not saved. Added code to recalculate them after loading gamestate. This should have no other side effects, but I didn't test everything. Savegame by APCs R Evil. [NM] - Removed tugs from Idle Dispatcher's tracked lists. They can't attack anything. Change will affect newly built objects; savegames won't be touched. Noticed during save from Commando. [NM] - AIP code now properly skips sniped ships in the CountMyUnits() functions, used by BuildMinimums plans and possibly others. This should prevent it from getting hung up when the user snipes out its units. Saves by Commando. [NM] - Thug's scavs with doDrop = true should be able to drop off scrap at the commander's recycler/extractor/etc. Bug description by Commando; fix is untested. Also increased "close enough" radius on dropoff from 3m to 8m. This might help craft getting stuck on buildings. [NM] - DeployBuilding.cpp (e.g. Recyclers) do extra check to see if their build zone is free before starting to deploy. If it's not, they'll still drive to that area, but never deploy. Reported many times over the years by lots of people. [NM] -- b64a released - Optimized DeployBuilding's terrain check. Only does it when it's very close to the target location. Not that it should have been very slow, but it's the principle. [NM] - Change to CountMyUnits() code to check for sniped units by looking for ones with no AiProcess attached to them. This seems to not infinitely build construction rigs or other unpiloted vehicles, saving the need for a ton of ODF tweaks. [NM] - Turrets should have a better chance of all deploying when a group is told to go to a particlar location. They won't really spread out for optimal firing patterns, though. Noted by Red Devil, others. [NM] - Mission changes by Commando : isdf10.bzn: ivstas1.odf updated so the mission critical interceptor can't be ordered to pick you up, can't be ordered to bailout, and can't be ordered to recycle. All resulting in a mission failure. isdf12.bzn : ivcons12.odf, ivscav12.odf, and ivtug12.odf updated so they can't be ordered to recycle. isdf20 : replaced the walker in this mission with one that can't be told to bail out in case the player decides to pilot the assault tank or rocket tank. Scion01.bzn : Replaced reference of fvtug with fvtugs01. Scion02.bzn (no .bzn change) : Applied the following flags to fvcos2.odf since killing off this construction rig could possibly kill the mission script. Scion03.bzn : Replaced ivrckt with ivrckts03. The new version has doIdleDispatch = 0 Replaced the scouts with fvscouts03 which has a 50% health increase to ensure they survive long enough to complete their job. Mission could break if they don't live. scion04.bzn: The bzn calls new warrior odfs, a new healer odf, a new tug odf, new archer odfs, and new sentry odfs. Now they can't be told to bail out. The tug would result in a mission failure. The rest would make the mission a lot harder to complete. Due to the units being irreplaceable in this mission, I sent them to canbailout = false too. fbarttow.odf : uses the GunTowerFriend/GunTowerEnemy ai process instead of SupportProcess/SupportProcess ai process. A few values were tweaked to match ibmtow.odf such as engagerange and rangescan. I also removed the subattack from fbmtow.odf since ibmtow lacked one. This should fix the missing asset errors that come up on GreenHeart's Firestorm map and maybe a few others. updated version if the Ballistic Sub xsi and odf. Five hardpoints have been added to the xsi, hp_rocket_1, hp_rocket_2, hp_mortar_1, hp_special_1, and hp_eyepoint. The odf was given "gshadow_c", "gfafmsl_a", "gmortar", and "gproxmin". The model still needs a skin, but its functional now. [NM] -- b64b released - Oops. Changes for turrets to deploy further away from gotoPoint broke recycler deploying. Made change to GotoTask apply only to turrets, which should fix things. [NM] -- b64b2 released - Scavs should be able to drop off at silos now, or at least they should be searched for in dropoff locations. [NM] - Added [ScavengerClass] DropDist = 8 -or- [ScavengerHClass] DropDist = 8 Both default to 8 if not specified. Allows modmakers to define how close is "good enough" for scavs dropping off their loads. [NM] - Added [ConstructionRigClass] BuildSparkConfig = "sparker" [DeployBuildingClass] BuildSparkConfig = "sparker" [FactoryClass] BuildSparkConfig = "sparker" [ScavengerClass] BuildSparkConfig = "sparker" [ScavengerHClass] BuildSparkConfig = "sparker" Allows individual items to override use of sparker.odf. If not specified, sparker.odf is still used. This does not completely change the build effect, just the particles added to it. As a reminder, whatever filename you point to, it must have an internal chunk named the same as the filename. Thus the file 'sparker_s.odf' must have a [sparker_s] chunk within it. [NM] - Updates to recycler variants from Commando: "updated the Undeployable Recycler. I set it up to be a w/ttb recycler instead of one without a TeamTransferable Bomber. I also created a variant specifically for multiplayer that can build empty scouts. The empty scouts is the only difference between the two. Both are w/ttb recyclers." [NM] - Update to bzshell_single_debrief.cfg - "General BlackDragon had upaded the end game scores section too by adding a "Main" button. This adds the "Main" button to both the debriefing screen and the scores screen." [NM] - Update to mauler: "a fixed version of fvwalk_skel.msh. The previous version broke the death animation. Taking the death animation from the xsi.zip and pasteing it into addon along with the rest of the xsis in patch13.pak fixed the issue. Now the death animation plays when the mauler is killed. I also included that death animation in this zip." and "This fvwalk_skel.msh may work better than the previous one sent since it has been used for a long time and noone complained about it. This was extracted from the public beta's patch13.pak so it has been in use for a while." [NM] - Updates to instant.dll, mpinstant.dll. They won't switch to a a/l/s plan until the CPU has built a commbunker. This should help keep them from getting hung up if the user charges them too early. Note: this broke savegame compatability for IA maps. A better fix might be to change the AIPs, but I don't have the time or the inclination to do that. [NM] -- b64c released - Updates to some isdf recyclers to fix a problem. Also updates to fvwalk.{msh|xsi}. Sent on by Commando. [NM] - Update to CellType.cpp to really not read invalid memory. There was already a debug-only assert in the code to complain when it would do such a thing, but in release builds, it would happy do the wrong thing. Changed, so it returns "Cliff" for any invalid cell. This seems to keep a save sent on by Commando from crashing, but I saw some MBs doing some really weird collisions. Not sure if that's a side effect or not. [NM] -- b64d released - When scav/scavH units drop off their scrap, they now prefer to give it to their own team, should their team have a scrap gauge to receive it. Only if their team has no scrap gauge (i.e. scav is owned by a thug) will it try and drop it off on the team of the dropoff object. [NM] - Tweak to ConstructionRig::CancelBuild() to always clear the buildGroup. It was not being cleaned up when the buildClass was NULL -- i.e., when it was upgrading a building into a vehicle. This should prevent F# slots from being needlessly occupied. This should be a safe change, but do test. Save by Commando. [NM] -- b64e released - BZ2 sets C/C++ Runtime Libs locale on startup to English, and leaves it there. This seems to fix oddities caused by (wrong) number formats from around the world. Found by Technoid after much troubleshooting effort. This should make things better, but may cause some other side effects; not sure. [NM] - Added in hack to disable shot alternating when MP or MW is on. The timing should all be the same, but it won't do the cycling. Maybe this will fix various rendering issues. [NM] - Added in power info to onscreen AIP debugger. You might need to reposition it if there's too much text. [NM] - Added [CraftClass] BailSound = "bail.wav" // Sound on pilot bailing out CollideTerrainSound = "collide03.wav" // Sound on collision w/ terrain CollideBldgSound = "collide02.wav" // Sound on collision w/ building or immovable object CollideOtherSound = "collide01.wav" // Sound on hitting other objects ExplodeSound = "Ordin_a.wav" // Sound when a craft explodes Above values are default when those parameters are omitted. Doing this should help get rid of a few more hardwired constants in the code. The above is pretty much untested. [NM] - Inserted a 10-minute delay in the [IdleDispatcher] chunk in a number of stock AIPs, including stock13_if1.aip. [NM] - Added [RecyclerClass] ScrapDropPoint = true // true == scavs can drop scrap off here [ExtractorClass] ScrapDropPoint = true // true == scavs can drop scrap off here [SiloClass] ScrapDropPoint = true // true == scavs can drop scrap off here All default to true if not specified. If false, scavs should ignore that place when finding dropoff locations. This compiles, but is otherwise untested. [NM] - Possible fix for AV in TerrainClass::GetMeshExtents(), but I'm not sure. [NM] - Tweak in MissionHandler.cpp to reduce multiworld swaps if fps < 10. This might help with some late-game slowdowns people have reported. [NM] - Despite comments above (line 652), CraftClass really looks for "damageEffect1" thru "damageEffect4", not "damageClass1" through "damageClass4" as noted above. Left a comment above, and here to that effect, so that there's hopefully less confusion. Still don't know if it works, but it probably should work if ODFs point to the right name(s). [NM] -- b64f released - ShotAlternating cannons were firing at double-speed in MP/MW. Fixed. [NM] - Update to MotionSensor, ObjectiveList. In both, doubled the # of tracked objects from 64 to 128. In MotionSensor, also made sure it won't trash memory if there were too many objects in its list. Save by Commando. [NM] - If the factorypanel has no idea who owns it, and the local user is at a factory view, kicks them out asap. Received save from BlackDragon where the user was stuck at an uncontrollable factorypanel. These changes fix that, but there may be side effects. [NM] -- b64g released - Code fixes, so that [CraftClass]::CollideBldgSound and [CraftClass]::ExplodeSound should work now. Note that ExplodeSound is probably going to be drowned out by BailSound, so you might need to try making it a bit louder sample. Also, if testing this as a bailing out pilot, you're going to be well away from it so it'll be rather faint. Part of the changes may affect all 3D sounds, so let me know how things are. [NM] - Added [GameObjectClass] scrapReturn = 0 // Defaults to same value as scrapValue This is the amount of scrap given to the player when upgrading is canceled. By default, this will have the same amount as the scrapValue, if it is omitted. Requested by Commando. [NM] - Updated terrain files for IA & MPI iceberg by GreenHeart. There should be more flat space for the AI to build in now. [NM] - Updated GamePrefs.ini from Red_Devil with better support for higher resolutions. [NM] - Fix to make 'isSingle = 1' work when classLabel = "powered". And probably anything else without a fixed team slot. Save by Commando. [NM] - Added [PoweredBuildingClass] SoundSwitchOn = "silence.wav" // sfx for when building switches on SoundSwitchOff = "silence.wav" // sfx for when building switches off SoundTerminalSwitchOn = "silence.wav" // sfx for when terminal switches on SoundTerminalSwitchOff = "silence.wav" // sfx for when terminal switches off All of these default to nothing (e.g. silence.wav) if not specified. Also, hooked up *event.odf::[BettyVoice]::EVENT_SOUND_10 (satellite view activated) and EVENT_SOUND_15 (satellite view deactivated) so that they should work for the first time (ever?). Change applied to CommBunker/CommVehicle. Updated fevent.odf/ievent.odf with the new lines. Compiled, but pretty much otherwise untested. [NM] - Update to editor code - can't erase user object. The game really doesn't like that, so might as well make that harder. Note: new editor build needs to be released to test this. [NM] - Fix to Reticle.cpp - enemy navs and other things covered by the ScanTeamLimit code (see above) aren't snapped to with the point-and-space. Save by Commando. [NM] - Added [ScavengerClass] DeathScrapDropRatio = 0 // 0 = drop no current scrap on death, 1.0 = drop 100% scrap [ScavengerHClass] DeathScrapDropRatio = 0 // 0 = drop no current scrap on death, 1.0 = drop 100% scrap Default is 0 if not specified. This is a percentage of currently held scrap that is dropped on the ground when the craft explodes. This value is clamped between 0.0 and 5.0 (500%). Compiled, but otherwise untested. [NM] - When scrap fields are generated on craft explosion or scavenger death drop, they now take the exploder's race into account. So, an exploding ivscout.odf will try to create ipscr1.odf .. ipscr3.odf, falling back on npscr1.odf .. npscr3.odf if the race-specific pieces aren't found. Compiled, but otherwise untested. [NM] - Fix to CRig code. In adding the arbitraty rotate code above, the changes changed the way AI builders rotate their buildings. This made 2x1 buildings (e.g. tech center) not build, as the location finder said "it'll fit here with this rotation," but the rig interpreted that rotation differently. That's fixed, though there may be other side effects, possibly to the human building rotates. Save by RD. [NM] - Fix to minelayerprocess.cpp -- waits for craft's weapons to be ready to drop off a mine before doing so and moving on. Otherwise, it'd just move on and miss some spots. Save by Commando. [NM] - Added ability to attach up to 16 conditions to AIP plans. Feature suggested by Red Devil. For example, a plan with two 'Exists' chunks would look like this: [Plan105] planCondition = "Exists" planConditionClass = "ibarmocpu" planConditionCount = 1 planCondition2 = "Exists" planConditionClass2 = "ibsbaycpu" planConditionCount2 = 1 The 'planCondition' 'planConditionClass' and 'planConditionCount' now support a numerical extension after them, from 2 .. 16. Gaps in the numbers may be present (e.g. planCondition2 and planCondition4 are present, but not planCondition3). All valid condition chunks must pass for that plan chunk to be executed. (Side note: the above chunk should probably have some items before it, e.g. [Plan103] that has a 'NotExists' on ibarmocpu, and a [Plan104] that has a 'NotExists' on ibsbaycpu, and each of those plans builds that item.) This compiles, but is untested. [NM] -- b64h released - Added another game mode: Strat-CTF. The goal is simple: tug an object, and return it to your recycler. However, it's guarded, and you'll need to clean out the guards-- and the opposite team-- to win. Recyclers are invulnerable, so you might as well try and win with the tug. There's only one map for this mode so far, a quickly modified version of chill. To make a Strat-CTF map, you need to set the DLL to 'stratctf.dll', and add a pathpoint with name "stctf_goal". The goal will be created there on startup. You may want to put some goal-defenders on team 15, like I did. That's all. [NM] -- b64h2 released - New PoweredBuildingClass sound params introduced above were documented wrong. Oops. Fixed documentation above so that only the correct form is shown. Revisionist history at its finest. :) [NM] - Race-specific scrap works now. Thanks to Commando for actually testing this. [NM] - Tweaked params for stctf_goal.odf. Should be really invulnerable now, unsnipeable, and really not too maneuverable. Thanks to tester who didn't read the directions I thought were pretty clear, and did most of the above. Definitely a true tester for doing the opposite of what they're supposed to. :) [NM] - Made Strat-CTF messages a bit more explanatory when the goal is tugged, saying what to do with it. Also updated text above introducing the mode. [NM] - Update to hovercraft.cpp - applies LIFT_SPRING only when heightOffset is > 0. This seems to fix a craft going into orbit when entered. Also made scaledThrust = 0 when the velocity to be applied is < EPSILON, fixing a craft going fast by accident. First change could possibly have some serious side effects; do test. Saves by Greenheart. [NM] - Change to SAV.cpp to allow it to settle to the ground when unpiloted. Request by Greenheart. Added [SAVClass] emptyAltitude = 2.0 // default altitude above ground when empty [NM] - Change to TwirlTrailRenderClass.cpp [e.g. "draw_twirl_trail"]. When first creating list of particles (i.e. list is empty), sets velocity of first particle to 0. This seems to prevent the first smoke puff from flying off at high speed. This may cause the opposite problem, where some people do want the first particle to go off at high velocities. Save by Avatar. [NM] - If editing a MP map w/o the net system being on, the game will tell the DLL that the user chose to spawn in a ivscout. Better than never spawning a player. [NM] - Added a few more params to override some code constants. Any physics bugs caused by putting in weird values may well be ignored. [NM] [PowerupClass] alphaDamp = 2.0 alphaTrack = 5.0 pitchThrust = 0.5 rollStrafe = 0.5 omegaSpin = 2.0 omegaTurn = 1.5 alphaSteer = 2.0 velocForward = 15.0 velocReverse = 10.0 velocStrafe = 10.0 accelThrust = 10.0 FLOAT_HEIGHT = 1.0 LIFT_SPRING = 25.0 LIFT_DAMP = 7.5 SlowFall = true FallSpeed = 10.0f // only if SlowFall = false. Set to <= 0 to use normal velocFwd/Reverse values and [HoverCraftClass] // sound properties THRUST_PITCH_BASE = 11025.0 THRUST_PITCH_RANGE = 5000.0 THRUST_VOLUME_BASE_USER = 0.4f; THRUST_VOLUME_RANGE_USER = 0.4f; THRUST_VOLUME_BASE_AI = 0.7f; THRUST_VOLUME_RANGE_AI = 0.3f; // physics properties LIFT_SPRING = 25.0 LIFT_DAMP = 6.25 Above are defaults if not specified. The ones with 'Stationary' as a prefix apply when the powerup is not flying. Updated apwrck.odf to make the bomb fall a little faster (too fast?). All I needed to do was allow tweaking of 1-2 values in Powerup, but I did a little more work. [NM] - Undid Commando's changes to gauss guns done a while back now that shotAlternate is disabled in MP/MW. This should be back to the 1.2 contents. [NM] -- b64i released - Added access to a lot more ex-constants in the code: [ArmoryClass] scaleVelY = 2.0 // Multiplier on vertical launch velocity [CameraPodClass] turnSpeed = -5.0 // Speed it turns in the direction the user is pointing. PowerUp values may override [ConstructionRigClass] AnimateChrome = true // It's hard to see the cromeTexture if this is true ChromeTexture = "blah.tga" // Takes slight effect if specified when AnimateChrome = true. If not specified, uses the world's envTexture HoverRig = false // if true, rig doesn't do the usual walking. [CraftClass] chunkEffect1 .. chunkEffect5 = "iochnk01.xsi" .. "iochnk05.xsi" // chunks from craft. Note that .xsi MUST be present. // elasticity MIN_BOUNCE_VEL = 0.5 OBJECT_ELASTICITY = 0.125 GROUND_ELASTICITY = 0.03125 // spin rates for collision X_SPIN_RATE = 1.5707963267948966 // = 0.5f * PI; Y_SPIN_RATE = 3.1415926535897932 // = PI; Z_SPIN_RATE = 0.7853981633974483 // = 0.25f * PI; // Other constants DAMAGE_SCALE = 0.05 // Scale in turning velocity into damage, on craft:ground or craft:building collisions MAX_PILOT_HORIZ_VELOCITY = 25.0 // Max horizontal velocity a pilot can have when ejecting RECYCLE_TASK_DIST = 10.0 // How far from the recycler until we're 'done' and recycle [DeployBuildingClass] UseChrome = false // when deploying AnimateChrome = true // It's hard to see the cromeTexture if this is true ChromeTexture = "blah.tga" // Takes slight effect if specified when AnimateChrome = true. If not specified, uses the world's envTexture [FactoryClass] AnimateChrome = true // It's hard to see the cromeTexture if this is true ChromeTexture = "blah.tga" // Takes slight effect if specified when AnimateChrome = true. If not specified, uses the world's envTexture [GameObjectClass] DAMAGE_SCALE = 0.05 // Scale in turning velocity into damage, I think Mass = -1 // If <= 0, uses default of Sphere(Width*Height*Breadth) * 800.0. Peek in an ascii-saved .sav or .bzn file to determine what things already have explosionName = "blah" // In BZ2 1.2+ (or earlier?), allows default explosion from Xexplosion.odf to be overridden. ScrapClass1 = "" // Scrap generated when this object goes boom. Unspecified = use default ScrapClass2 = "" // Scrap generated when this object goes boom. Unspecified = use default ScrapClass3 = "" // Scrap generated when this object goes boom. Unspecified = use default [MagnetMineClass] TeamFilter = 0 // See 63u's documentation of ShieldTowerClass's TeamFilter for objects vs ordnance [MagnetShellClass] TeamFilter = 0 // See 63u's documentation of ShieldTowerClass's TeamFilter for objects vs ordnance [MorphTankClass] AnimateChrome = true // *must* be false for below to take effect. MorphAmbientR = 1.0 // All these RGBA values are 0.0 .. 1.0, not 0..255 MorphAmbientG = 1.0 MorphAmbientB = 1.0 MorphDiffuseR = 1.0 MorphDiffuseG = 1.0 MorphDiffuseB = 1.0 MorphEmissiveR = 0.0 MorphEmissiveG = 0.0 MorphEmissiveB = 0.0 MorphSpecularR = 0.0 MorphSpecularG = 0.0 MorphSpecularB = 0.0 MorphSpecularA = 1.0 MorphSpecularP = 0.0 // specular power MorphTexture = "blah.tga" // Takes slight effect if specified when AnimateChrome = true. If not specified, uses the world's envTexture [PersonClass] PersonMass = 100.0 // overrides GameObjectClass::Mass PersonRadius = 1.0 [ScavengerClass] UseChrome = false // when deploying AnimateChrome = true // It's hard to see the cromeTexture if this is true ChromeTexture = "blah.tga" // Takes slight effect if specified when AnimateChrome = true. If not specified, uses the world's envTexture [ScavengerHClass] UseChrome = false // when deploying AnimateChrome = true // It's hard to see the cromeTexture if this is true ChromeTexture = "blah.tga" // Takes slight effect if specified when AnimateChrome = true. If not specified, uses the world's envTexture [TorpedoClass] LIFT_SPRING = 40.0 LIFT_DAMP = 15.0 [TrackedVehicleClass] COLLISION_RAISE = 0.5 SUSPENSION_MIN = -0.2 SUSPENSION_MAX = 0.3 SPRING_FACTOR = 2.0 // minimum value: 0.01 DAMPING_FACTOR = 2.0 // 2.0 = critical damped, minimum value: 0.01 TREAD_STATIC_FRICTION = 1.5 Most of the above compiles, but isn't tested. Messing with physics constants may cause really weird behavior. [NM] [NM] - Added coneSinSq, ReticleRadiusMult to GamePrefs.ini. As usual, adjust at your own risk. [NM] - AV fix in MoveManager::SetCommand() -- reported as an AV in pb1 by someone, sorry forgot whom. Also a possible AV fix in LandAnimalTask::ShouldLeaveFollowGroup(), reported by APCs r evil [NM] - If CraftClass::CanRecycle = false, then recycle isn't shown at all, rather than just dimmed. Noted on boards. [NM] - Fix to HuntTask.cpp - class variable wasn't properly saved/loaded, leading to garbage values in it. This was probably the cause of crashes, as I couldn't get a save by Commando to replicate an AV after this fix. [NM] - Updated fix to Hovercraft.cpp - last build's change for when setAltitude is very small could cause underwater hovercraft to stay there. Fixed. Save by Avatar. [NM] - apwrck.odf fall speed changed to be closer to 1.2's bomb fall speed. [NM] - When powerups explode, the explosion's owner is set to the player on that team. This may better associate damage from the bomber's bomb with its owner. This may cause other issues, though. [NM] - If [MineClass]::lifeSpan is < 0, then the mine will last forever. Untested, though. [NM] -- b64j released - ConstructionRig w/ HoverRig=true behaves much more like a hovercraft now, such as the usual walking-on-water miracles. (Note: HoverCraftClass::setAltitude really should be at least 0.5, preferably 1.0) [NM] - Added [CraftClass] PathingType = -1 // -1 = auto, 0 = Hover, 1 = Walker, 2 = Person, 3 = Tracked, 4 = Flyer AvoidType = -1 // -1 = auto, 0 = None, 1 = force, 2 = plan Hover-crigs will really want to put PathingType = 0 to help avoid stuttering, and being able to go over water. [NM] - GameObjectClass::Mass actually is set now, when specified in ODFs. Oops. [NM] - Possible AV fix in AddTunnelStrip(). It put a debug-only warning up about going off the end of a memory block, but then went ahead and wrote to illegal memory. Expanded warning to not trash memory in all builds. [NM] - Thanks to savegame from Commando, finally got a reproducable case of the tracked units going bezerk message. After much tracing, found that UnitTask's multiple class constructors were not initializing all of the class's member variables. Added a helper function to initialize *all* member variables. Other functions may override those default values, but I'll take safety over a tiny speed hit any day. I can't get the savegames to show the problems after this fix, so I'm going to release this fix to you testers. I've asked for years for an (optional!) compiler warning flag to note when not all class member varbs are touched during constructors. This is the kind of nitpicky grunt work computers are good at. Anyone listening? [NM] - Added [WalkerClass] FRICTION_COEF = 0.35 Another named constant in the code. Used as a parameter to Calc_Ground_Constrain(). [NM] - TrackedVehicleClass::SPRING_FACTOR and TrackedVehicleClass::DAMPING_FACTOR now have minimum values of 0.01 . Negative values caused problems immediately. Most "don't do that, then" things will probably be left in, as an encouragement to modders to not push things too far. [NM] -- b64k released - Change to MagnetMine.cpp so that if lifeSpan is negative, it should still arm itself after the triggerDelay. It looks like this is the only mine-variant with this kind of timing code. Reported & savegame by Commando. [NM] - Added editor support for StratCTF DLLs & objects, and a mappack of Strat-CTF maps, both by Greenheart. Future subbuilds (64L and after) will not include any of these maps. It's recommended you unpack 64k, and then this mappack. Editor updates will be included in a future editor build. [NM] - StratCTF changes: won't say 'goal is moving' until 30 seconds of gametime has elapsed. This prevents This prevents spurious messages if the mapmaker placed it on a slope. - Two updated DM .inf files from Red Devil. [NM] - Added GamePrefs.ini::TimestampChat. [NM] - Added [APCClass] AltitudeLookahead = 1.0 // # of seconds it will look ahead for adjusting altitude OverWater = true // true = set altitude is over water height, if present [BomberClass] AltitudeLookahead = 2.0 // # of seconds it will look ahead for adjusting altitude OverWater = true // true = set altitude is over water height, if present [TrackedVehicleClass] CanWaterDamage = true // false means no underwater damage. Lava will still damage [WalkerClass] CanWaterDamage = false // false means no underwater damage. Lava will still damage Compiled, but untested. [NM] - Powerup changes made early in 1.3's development caused CameraPods to go crazy. Noticed by several people, save by Commando. Resurrected old code, which has its own set of parameters for how stationary code parameters. The obsoleted parameters have been deleted from the listing above for 64i, and the new ones are shown: [PowerupClass] StationaryAlphaDampX = 10.0 StationaryAlphaDampY = 10.0 StationaryAlphaDampZ = 10.0 StationaryAlphaTrackX = 25.0 StationaryAlphaTrackY = 20.0 StationaryAlphaTrackZ = 25.0 StationaryVelocDampX = 5.0 StationaryVelocDampY = 5.0 StationaryVelocDampZ = 5.0 [NM] - Some parameters added a bit ago weren't properly documented. So, here they are. Noticed by Commando. [DeployBuildingClass] chromeEffect = false // needs to be true for useChrome to work [ScavengerClass] chromeEffect = false // needs to be true for useChrome to work [ScavengerHClass] chromeEffect = false // needs to be true for useChrome to work [NM] -- b64l released - CollectTask/CollectHTask have some more buffer overrun protection. Not going to say more in public. Ask if you really need to know. Also optimized filesizes of load/saves. [NM] In going thru various classes (mostly AI) to ensure that all member variables are properly initialized at constructor time. Tweaked AttackTask, BoidTask, BomberAttack, CollectTask, CollectHTask, RigBuild, LayMinesTask, HarvestTask, HarvestHTask, TurretDefendTask, TurretAttack, UnitProcess, OffensiveProcess, PersonProcess, TurretTankProcess. Also, found some more constants in the code that could be pulled out: [CraftClass] attackRange = 320.0 // for AttackTask.cpp waitRange = 370.0 // for AttackTask.cpp fireConeXBase = 0.2 // for AttackTask.cpp and other AI tasks fireConeXSkillAdj = -0.05 // for AttackTask.cpp and other AI tasks fireConeYBase = 0.2 // for AttackTask.cpp and other AI tasks fireConeYSkillAdj = -0.05 // for AttackTask.cpp and other AI tasks AttackTaskBlastDist = 40.0 // for AttackTask.cpp, AltAnimalTCoolDist = 125.0 // for AlternateAnimalProcess.cpp. Dist looking for tanks AltAnimalTYumDist = 75.0 // for AlternateAnimalProcess.cpp. Dist looking for pilots AltAnimalTGotoClose = 15.0 // for AlternateAnimalProcess.cpp. AltAnimalTGotoCloseMax = 30.0 // for AlternateAnimalProcess.cpp. AltAnimalTFleeDist = 75.0 // for AlternateAnimalProcess.cpp. AltAnimalTGoto2AttackDist = 15.0 // for AlternateAnimalProcess.cpp. How close we need to be to switch from GOTO to ATTACK AltAnimalTDontStand = false // for AlternateAnimalProcess.cpp. BoidTaskInfluenceRadius = 50.0 BoidTaskCollisionFraction = 0.8 BoidTaskNormalSpeed = 0.75 BoidTaskAngleTweak = 0.06 BoidTaskPitchToSpeedRatio = 0.002 LandAnimalTCoolDist = 125.0 //, for LandAnimalProcess.cpp. Dist looking for tanks LandAnimalTYumDist = 75.0 // for LandAnimalProcess.cpp. Dist looking for pilots LandAnimalTGotoClose = 15.0 //, for LandAnimalProcess.cpp. LandAnimalTGotoCloseMax = 30.0 // for LandAnimalProcess.cpp. LandAnimalTFleeDist = 75.0 //, for LandAnimalProcess.cpp. LandAnimalTGoto2AttackDist = 15.0 // for LandAnimalProcess.cpp. How close we need to be to switch from GOTO to ATTACK LandAnimalTDontStand = false // for LandAnimalProcess.cpp. OffensiveProcessMadTime = 30.0 // for OffensiveProcess.cpp ScavengerCollectPoolRange = 200.0 // for ScavengerProcess/ScavengerHProcess, scanner on craft will override ScavengerChoosePoolRange = 300.0 // for ScavengerProcess/ScavengerHProcess TurretTankAttackRange = 320.0 // for TurretTankProcess TurretTankWaitRange = 370.0 // for TurretTankProcess The firecone is Base + Adj*SkillLevel. Most of these apply only when the specified AI task in their name is in use. Pretty much all of these are untested. [NM] - Rolled the VEHICLE structure into the Craft structure, etc, under the theory that it's better to do one larger memory allocation than two smaller ones. Every Craft had a VEHICLE, so might as well make it a true member, not something attached by a pointer. [NM] - Tweaked ENTITY allocator to use lots of fine-grained pool sizes, rather than three precalculated ones. This might reduce overall memory usage somewhat slightly, and generally be a bit nicer. [NM] - More buffer overrun protection in various pieces of code. This and the two items above are something that shouldn't be noticeable unless I've botched the job. [NM] - Construction Rig tweak - for hoverrigs, does the last little bit of getting ready to build properly -- uses steering params, not strafe as the turning that footed-rigs do. This fixed a save sent on my Commando where a hoverrigs wouldn't build. Hoverrigs (or footed-rigs) don't truly deploy; that's just a state-changing mechanism to trigger animations. Also did work to keep crigs of all types from being snipeable. Players just can't use them. Really. Just stop this fantasy of making a mod with player-controller rigs. [NM] - Fix to SAV.cpp - when unpiloted, SAVs will come to a stop much more aggressively. Just borrowed some code from the landed bomber. Save by Greenheart. [NM] - Change to PoweredBuilding.cpp - when they Explode(), they force a call to SimulateSwitchOff(), which does any cleanup. This fixes up a motion sensor bug sent in by Greenheart, but may cause some other issues. Saves where the Explode has already happened won't (& can't) be fixed by this, sorry. [NM] - Added [BuildingClass] DoBettyLost = true // true = betty voice when this building is lost Lifespan = -1 // If <= 0 : infinite, else *max* # of seconds it'll be alive [CommBunkerClass] DoBettyOn = true // true = bettyvoice when switched on DoBettyOff = true // true = bettyvoice when switched on [CommVehicleClass] DoBettyOn = true // true = bettyvoice when switched on DoBettyOff = true // true = bettyvoice when switched no [CraftClass] DoBettyLost = true // true : betty voice when this craft is lost [GameObjectClass] DoBettyAttack = true // true: do betty attack warnings when this is damaged. DoBettyHealth = true // true: do Betty health warnings DoBettyAmmo = true // true: do Betty ammo warnings [PowerPlantClass] DoBettyPower = true // true: betty voice when this building is lost and power is now negative As usual, compiles but is pretty much untested. [NM] - Strat-CTF changes. svar10, 11 used to specify goal list, goal ODF. Added stctfgoallist.txt, stctf_goal2.odf (from Commando). New shell cfg pages to handle the UI for this. DLL updates - can handle goal being killed by any team, gameover with big score hit if so. Recyler vulnerability is back to user-preference, from ivar25. [NM] - Sliders for DM Bots & animals now have proper limits on their ranges (0..32 for bots, 0..8 for animals). [NM] -- b64m released - Possible AV fix in BasePanel::Control(). Also switched optimization of main BZ2 project from maximize speed to minimize size, as the code generated around that AV location looked pretty wasteful. Minimize size is more cache-friendly, which is actually a speed win on a lot of CPUs. Graphics code is still max speed. Let me know if the framerate seems any different. [NM] - Forgot to note above that the ST-CTF goal list is looked for on ExtraOptions.STCTFListWindow.STCTFList , ExtraOptions2.STCTFListWindow.STCTFList , ExtraOptions3.STCTFListWindow.STCTFList , and ExtraOptions3.STCTFListWindow.STCTFList on the config pages. [NM] - Added [CommVehicleClass] viewDist = 100.0 MinViewDist = 100.0 // If specified, minimum height of commbunker view MaxViewDist = 100.0 // If specified, maximim height of commbunker view [GameObjectClass] // This flag takes effect when ClearBuildZone() is called -- i.e. a // building is being built. This doesn't go in the building's odf, it // goes in the ODF of anything pushable by the build zone. ClearBuildZone = -1 // -1 = auto, 0 = never, 1 = always. If 0/1, overrides collideable setting // This allows an overriding of the default 'CategoryType' assigned by // code. WARNING: messing with this can cause a LOT of weirdness to // happen. This was done so that a team could theoretically have // multiple bomberbays. There may be some second-order effects still // preventing that. Typical 'Sledgehammer, meet Mr Fly' approach to // adding that feature. // // Valid values are: // TEAM_SLOT_PLAYER = 0, // // base buildings. Items 1-9 can have dropmenus associated with them. // TEAM_SLOT_RECYCLER, // == 1, // TEAM_SLOT_FACTORY, // == 2, // TEAM_SLOT_ARMORY, // == 3, // TEAM_SLOT_PRODUCER4,// == 4 // TEAM_SLOT_PRODUCER5,// == 5 // TEAM_SLOT_PRODUCER6,// == 6 // TEAM_SLOT_PRODUCER7,// == 7 // TEAM_SLOT_PRODUCER8,// == 8 // TEAM_SLOT_PRODUCER9,// == 9 // TEAM_SLOT_TRAINING, // == 10, // TEAM_SLOT_BOMBERBAY,// == 11, // TEAM_SLOT_SERVICE, // == 12, // TEAM_SLOT_TECHCENTER,//== 13, // TEAM_SLOT_COMMTOWER,// == 14, // !! Note: items above here are automatically limited to 1 item per team with that CategoryType // TEAM_SLOT_POWER // == 15 // TEAM_SLOT_COMM, // == 16 // TEAM_SLOT_EXTRACTOR, // == 17 // TEAM_SLOT_JAMMER, // == 18 // TEAM_SLOT_SENSOR, // == 19 // TEAM_SLOT_GUNTOWER, // == 20 // TEAM_SLOT_SHIELDTOWER, // == 21 // !! Above items are base buildings // TEAM_SLOT_OFFENSE // == 22 // TEAM_SLOT_DEFENSE, // == 23 // TEAM_SLOT_UTILITY, // == 24 // TEAM_SLOT_SCAVENGER, // == 25 // TEAM_SLOT_CONSTRUCT, // == 26 // TEAM_SLOT_BOMBER, // == 27 CategoryTypeOverride = -1 // -1 = auto, else must be 0..27 [ScavengerClass] doDropRecycler = true // If true, this scav will consider dropping scrap off at team's recycler doDropExtractor = true // If true, this scav will consider dropping scrap off at extractor doDropSilo = true // If true, this scav will consider dropping scrap off at silo [ScavengerHClass] doDropRecycler = true // If true, this scav will consider dropping scrap off at team's recycler doDropExtractor = true // If true, this scav will consider dropping scrap off at extractor doDropSilo = true // If true, this scav will consider dropping scrap off at silo [ServicePowerupClass] localAmmoUp = 0 // added to target's localAmmo when healing [ServiceTruck] localAmmoRate = 0 // added to target's localAmmo when healing [SupplyDepotClass] localAmmoRate = 0 // added to target's localAmmo when healing [TrackedDeployableClass] isStealthDeployed = false // just like under DeployableClass [WeaponClass] addLocalAmmo = 0 // Like GameObjectClass::addAmmo, but applies only to localAmmo (if > 0) Note that for the scavs, their scrap destination can also vote themselves off the destination list. If either the scav or the dest says no, then the target isn't considered. In other words, there is no override, but both sides have a veto. Also, updated npscr*.odf to have ClearBuildZone = 1. Pretty much all of the above is compiled but untested. [NM] -- b64n released - Added Factory::Explode(), which cancels any/all builds in progress. Then it calls the parent function PoweredBuilding::Explode(). The change above that inserted the call to PoweredBuilding::Explode() which turns the power off at Explode() time might have caused a savegame sent on by Avatar to have a build survive a building destruction. [NM] - Added [TrackedVehicleClass] NormalTrackFactor = 0.0 // may need to be > 0 for some of the other params to take effect pitchThrust = 0.0 rollSteer = 0.0 alphaTrack = 0.0 With code borrowed from Hovercraft.cpp. Note that these constants may be need to be scaled by *3.0 or /3.0 compared to what you're used to in hovercraft. This compiled and got about 20 seconds of testing to ensure that the default values of 0.0 didn't break anything too horribly in the default physics. [NM] - Added GamePrefs.ini : ShiftF9ScrollScale . Has been a common complaint. Now, tweak things to your own liking. Of course, this is mainly useful in the editor build. [NM] - Possible fix for slowdown after returning from alt-tab. FPS drops to 0 while alt-tabbed, so some things that were based off that were unhappy. [NM] -- b64o released - Commando noticed some oddities in scavs backing up without seeming to collide with anything. Noticed that scrap pieces return true to the IsBuilding() call (unsure why), but put a workaround in TrackedVehicle to ignore collisions with scrap. Test & see how this works. [NM] - Update to ZLib 1.2.3 (security upgrade), LibPNG 1.2.8 ("fixes a crash bug"). End users should not notice any differences. Also updated readme13.rtf to reflect those. Next full build will have that rtf update; I'm not going to push that out in subbuilds. [NM] - Made Utils::Sprintf() be even more secure, and it should give more of a callstack if an error happens within it. Changed a lot of calls to it to use sizeof(buf), which should insulate things against future changes. Found one possible area where a error reported by General BlackDragon could happen, and upped buffer sizes just in case. [NM] - More possible tweakes for slowdown after returning from alt-tab with multiplayer and/or multiworld on. [NM] - Added [GameObjectClass] allowTLI = true // true = TLI shows up when this is targeted (and preferences allow, etc) allowMDMCollisionDetonation = -1 // -1 = auto (== hit non-building), 0 = never, 1 = always. [Applies to all bouncebombs.] enableServiceTruckPull = -1 // -1 = auto, 0 = never, 1 = always pull this object when ST serviced if moveable. Auto is classic behavior that this must be moveable & tuggable [ScavengerClass] enablePoolGoTo = true // Reticule line to pool for deploying if true. Defaults to false if deployClass isn't valid and this odf entry isn't present [ScavengerHClass] enablePoolGoTo = true // Reticule line to pool for deploying if true. Defaults to false if deployClass isn't valid and this odf entry isn't present [ServiceTruckClass] objPush = -0.5f // Used while servicing. Factor based on distance from truck to target objDrag = -0.1f // Used while servicing. Factor based on target's velocity [TrackedVehicleClass] alphaDampX = 0.0 alphaDampZ = 0.0 These TrackedVehicleClass params don't need 'NormalTrackFactor' (see above) to be >0 to take effect. This is some more stay-level code borrowed from hovercraft.cpp. Note that these constants may be need to be scaled by *3.0 or *0.33333 compared to what you're used to in hovercraft. [NM] - In Planners.cpp, made sure all classes/structs initialized all their member variables at constructor time. Theoretically, this should have no effect, but in case the code didn't touch all member variables later, this should ensure slightly more consistent results. Also, tweaked crig-stealing code, so that if it doesn't know where the build will be sent to, it'll print the message " !! Build called for crig, but didn't specify where. Stealing first found one" in the logfile. However, if when it commits to a build location, it'll re-look for the closest rig, and print out a message like " Another idle rig(%d) was closer to position(%3.2f %3.2f), so builder plan borrowed it instead\n" If you see a lot of only the first message, and there's multiple rigs in action, there's a problem. If the second one shows up, or there is only 1 rig, all is well. [NM] - Added some new AIP plan chunk parameters [Plan#] planType = "Attacker" // for this type only attackMode = -1 // -1 = auto, 0 = combat, 1 = assault If this is specified, and the attacker is a deployable (not just a morphtank), it will force the mode. If the unit is stolen by another task or the idle dispatcher, the mode may stick. [NM] [Plan#] planType = "BuilderPlan" or "BuildMinimums" or "BuildLoop" or "BaseBuilder" or "BaseBuildMinimums" or "BaseBuildLoop" or "Upgrade" consClass = "ivcons" // default is to use AIP file's [Start]::consClass = "" if not specified Most of the above compiled, but isn't otherwise tested. [NM] -- b64p released - Added, in AIP files [Start] baseDir = -1 // -1 = auto, else 0..3 are rotations. Note: auto means that it tries to point the building towards the center of the map. The numbers for a forced direction are: 0: front faces along the +Z axis, 1: front faces along the -Z axis, 2: front faces along the +X axis, 3: front faces along the -X axis. Values outside of -1..3 will be treated as -1. This is the way the game calculates headings internally, which is annoyingly different from 90 degree increments. [Plan#] planType = "BaseBuilder" or "BaseBuildMinimums" or "BaseBuildLoop" buildHeading = -1 // -2: use baseDir from auto/AIP above, -1 = auto determine (classic behavior if not specified), 0-3 : force Note that I moved this up one level; last build had this under BaseBuildMinimums. Deleted comments in changelog above for some revisionist history. This means that all buildings made by one of these chunks will have the same orientation. If this is not what you want, you'll probably have to split the AIP chunk into two. [NM] [Plan#] planType = "Deployer" // New planType. buildLoc = "pathname" // Required: Pathpoint name. Plan shuts down if not valid. DeployClass = "ivrecy" // Required: GameObjectClass of what to send. Plan shuts down if not valid. If the buildLoc or DeployClass are invalid/not found, then this plan will go into a safety mode and do nothing. ["pathname" and "ivrecy" above are only examples, the true defaults are empty strings, i.e. do nothing] Note that all the other usual common/shared items in a [Plan#] can be added. Things like conditions, buildIfNoIdle, and the like can be specified as well. You'll probably want to at least put a NotExists condition on the plan to ensure it doesn't keep building and sending things to a destination. Also, this doesn't apply to just 'recyclers' -- it sends a 'deploy at' command to its target object. Also, added a new pair of conditions to all AIP chunks [Plan#] planCondition = "PathBuildingExists" planConditionPath = "pathname" // Required: pathpoint name. Condition ignored if invalid or not on current map [Plan#] planCondition = "NotPathBuildingExists" planConditionPath = "pathname" // Required: pathpoint name. Condition ignored if invalid or not on current map Of course, these should work in the other condition slots, e.g. planCondition2, planConditionPath2 .. planCondition16, planConditionPath16. A PathBuildingExists condition is satisfied when there is a terrain-owning building (of *any* type) at the path. A NotPathBuildingExists condition is satisfied when there is *no* terrain-owning building (of *any* type) at the path. This type of condition shold probably be used with the "Deployer" plan above, for fairly obvious reasons -- cutting down on overbuild. It can be used on other planTypes as well. All this is pretty much untested. If it blows up, send me a save with assets. [NM] - Update to ballistic sub model, sent on by GreenHeart. Credits: UV map by Fishbone. Texture by Slaor. [NM] - Update to Bomber, TurretCraft - they now clear & dim the ~ menu command. This prevents really spurious commands from being sent to the bomber. Discovered by Commando. [NM] -- b64q released - Moved AIP debugger's power display down one more line. [NM] - Added the ability to tweak some craft physics parameters depending on whether a human or AI is piloting it. These new parameters have 'AI' at the start of their name, and default to the non-AI value if not specified. [TrackedVehicleClass] AIomegaSpin = AIomegaTurn = AIalphaSteer = AIvelocForward = AIvelocReverse = AIaccelThrust = [WalkerClass] AIalphaDamp = AIalphaTrack = AIpitchPitch = AIpitchThrust = AIvelocForward = AIvelocReverse = AIaccelThrust = AIomegaTurn = AIvelocJump = AIomegaTurnAttenuation = Done to help some people tweak AI tracked vehicle driving without messing with the human's driving. Changing the HoverCraft ones was a HUGE amount of extra work, as the Deployable/MorphTank code doesn't work the same way tracked/walkers work, so it wasn't done. Rather untested. [NM] - Added [Boid] NormalSpeed = 30.0 Just another constant no longer. Rather untested. [NM] - Tweaks to AIP crig-stealing code. Made sure it wouldn't build any more rigs if none were available when it looked to find a closer one. Also made sure that the closer rig got the info as to what the first rig was told to build, and the first rig had its state cleared. Let me know if this makes things better. [NM] - Added [Plan#] planType = "CollectField" or "CollectPool" scavClass = "ivscav" // NEW: default is to use AIP file's [Start]::scavClass = "" if not specified As usual, compiles, but is untested. [NM] - Tweak to AIP code. If a buildLoc is specified, but the requested object isn't buildable there (i.e. uneven terrain), it will pretend the buildLoc isn't specified, and fall back on searching for a place nearby to build, roughly centered on where the pathpoint was. In the AIP log, it will say the following: "UHOH! Can't build %s at path %s(%f,%f) Overriding AIP's buildLoc and falling back on searching for a location..." . [Note: if a building is destroyed, and the AIP wants to rebuild it, the rough-centering may not take effect. Changing this is much harder.] Earlier updates to maps to give the AI more room to build seem to have been a bandaid over the problem; this solution seems to be one addressing the real cause. Save by Commando. [NM] - Tweak to ConstructionRig.cpp - hoverrigs don't do the 5-second delay waiting for the 'death' animation to play. They should die a lot faster. Noticed by General BlackDragon. Also made hoverrigs a lot more resistant to collisions when building things. Reported by Commando. [NM] - Tweak to ClearBuildZone() - it checks the y-position (height) against the object's bounding box, and should only affect it if it's close to it. (There's a 10-meter slop zone below, and 5-meter above it where objects will be pushed). [NM] - Tweak to SupplyDepot.cpp - shouldn't play sfx if the best object needs local ammo, but the depot can't supply it. Reported by several people. [NM] -- b64r released - Walker physics values had some post-processing done to them after reading them in. AI version of those values didn't have the same tweaks, so AI walkers were a little uncontrollable. Fixed. [NM] -- b64s released - Code above for the buildHeading param in AIPs was honored when it was looking for a spot to build, but not passed to the rig when it was time to build. Ooops. Fixed. Noticed by Commando. [NM] - Found some more variables in AIP code that weren't being properly cleared on AIP change/savegame load, or were shared among all AIPs, even if multiple teams were running AIPs at the time. Things should be better cleared/shared between teams. Most of the time, this shouldn't be noticeable to end users, except possibly by things behaving a little saner. [NM] - Added [DeployableClass] idleAttackBuildings = -1 // -1 = auto (unlock), 0 = force undeployed, 1 = force deployed idleAttackCraft = -1 // -1 = auto (unlock), 0 = force undeployed, 1 = force deployed These are taken into account when the idle dispatcher sends a a deployable (including morphtanks) off to attack something. Note that if the target dies, any mode forcing will persist. Compiled but untested. [NM] - Added PlanType = "ClearArea" or "DefendArea" or "Defender" MaxUnits = 0 // If > 0, this is a limit on the # of units that will be used in this plan. Compiled but untested. [NM] - Fix to IA, MPI DLLs - they check for the human team building a commbunker (ISDF) or a commtower (Scion) as a prerequisite to go to the late game plans. Before, it only looked for the commbunker. Noticed by Commando. [NM] - Added [LandCreature] TooFarDist = 5.5 // Distance at which attacks stop DamageBase = 100.0 // This and below are used when applying damage to a target DamageArmor = 1.0 DamageShield = 1.0 DamageValue = 100.0 All of the above are used only when a LandCreature - class creature is controlled by a LandAnimalProcess. Also changed LandAnimalProcess to take the y-positions and collision radii into account when attacking, so it shouldn't damage the target unless they're close enough in 3D space. With this and the ClearBuildZone code above, BZ2 no longer has 'Ring of Fire' exploits. (Bonus points if you can identify which game had that exploit, by that name. Hint: it's a game I've played) [NM] - Fixed bug where items with satellite view and adjustable view distances would pop back to default altitude every MW swap. Now sets default distance only when Satellite View is setup in the lockstep world. Bug noticed & save by Fishbone. [NM] -- b64t released - Duplicate asset checker ignores .txt (most of them), .rtf, .doc, .zip, .rar and .7z files. [NM] - For AI buildings at pathpoints, it tries all 4 possible rotations before giving up with the "can't build X at path Y". [NM] -- b64u released - Code to increment frontDir while searching for build locations wasn't properly clamping it to the 0..3 range. If a value got out of that range, it'd never get back in. Changed to ensure that it was reset to 0 after the "can't build X at path Y" message, as well as a check just before every "BaseBuildMinimums - checking x(%d) z(%d) frontDir(%d)" message. It'll complain if frontDir is out of range, and clamp it back to 0 if so. Reported & save by Commando. [NM] -- b64v released - Further work to try and fix an AV in LandAnimalProcess::ShouldLeaveFollowGroup(), called from ::DoState() Possible workaround for a problem is in, but also dialed down optimizations for that function in order to get a lot more info in case this happens again anytime soon. This is hardly time-critical code, so even if it ships unoptimized, it shouldn't hurt much at all. [NM] - Added [GameObjectClass] serviceTruckAutoHeal = -1 // -1 = auto, 0 = never, 1 = always heal this This replaces the 'serviceTruckAutoIgnore' used for a few subbuilds. Documentation on that deleted above so people don't get confused. This AutoHeal setting is processed *before* the ServiceTruck's class restrictions are processed, so that a 0 or 1 in AutoHeal will override the class restriction. Rather untested. [NM] - Tweaked ConstructionRig.cpp so that if it is a hoverrig, then an animation named "deploy" should work when it starts/finishes building things. Rather untested. [NM] - Added [LandCreature] painSound1 .. painSound6 = "" // On damage burnSound1 .. burnSound2 = "" // Triggered by water (lava) dieSound1 .. dieSound5 = "" crushSound = "" // Triggered by collision curiousSound1 .. curiousSound4 = "" // Played when attacking something The first 4 are cribbed from PersonClass. Note that several of these have multiple samples, which are randomized. If you only have 1 .wav file, you'll need to ensure that all the references point to the same file. [NM] - Updated apcamr00.xsi from Red_Devil. "Realigned eyepoint an com points so com point is on axis and eyepoint points the right way." [NM] -- b64w released - Made fatal error messages in vid.cpp a little more descriptive. [NM] - Angelwing noted that addLocalAmmo didn't seem to be working as expected. It was being applied correctly, but the HUD wasn't being updated. Fixed. Also made the text for the localAmmo values able to take some more digits. This may collide with long weapon names, not sure. Might need to shrink the font size in the "Ammo" chunks in bzgame_weapon.cfg. [NM] - Added [APCClass] CanReloadAtRecycler = true // false: won't consider recycler a refill point reloadClass = "" // If valid, reloads there instead of at barracks like normal [DeployBuildingClass] CanDeploy = true // if false, won't get option to deploy [ScavengerClass] or [ScavengerHClass] CanScavenge = true // false: can't scavenge, only deploy Also made it so that AI-controlled scavs shouldn't auto-deploy if enablePoolGoTo = false, or auto-scavenge if CanScavenge is false. This is for when they're bored. There may be some ways the AI can still get into a mode their ODFs say don't support. [NM] [NM] - New sfx added last sub-build were in [LandCreatureClass], paralleling the code from which they were borrowed (the PersonClass code), but the rest of the code was looking for [LandCreature]. Changed sfx to look for [LandCreature] be consistent, also changed documentation above. Also set the default values for the new sfx to be empty strings so there aren't missing sfx warnings. [NM] - Tweak to LOCBowl by NoK0mm3nt to add some more spawnpoints. Also added mappack (ST: Fever Valley, ST: No Mans Land, ST: Flyway, ST: Death Island) from Angelwing. (Both are in maps download w/ ST-CTF maps until next full build). [NM] -- b64x released - Added [BomberClass] BayConfig = "" // Config (no .odf suffix) of bomber bay. Must be used if a bay's CategoryTypeOverride is set. This replaces the old BaySlot param, which wouldn't work at all if it was >= 15, and had other issues if < 15. If this parameter is missing, empty quotes, or otherwise invalid, it looks for a bomber building in the usual slot. Multiple saves by Commando sent in to get this working better. Note: rebuilding bombers from factories probably won't work too well with custom slots, especially if >=15. Probably won't ever be fixed. [NM] - In GroupPanel.cpp, checks that all selected objects have the same point-and-space command. If they differ, then the point-and-space system is disabled. This removes some exploits with classes getting some commands they can't really support. [NM] -- b64y released - Hovering crigs explode properly when dead now. Save by Avatar. [NM] - Tweaked Extras/Help/Manual/Units.htm by Red_Devil. "Some ISDF units were missing." Will be in next full build. [NM] - Added "debug.collisions" varsys command in editor builds ONLY. Code was previously in debug builds only. This only shows collisions on *buildings*, not vehicles. [NM] - Tweaks to CombatProcess to properly initialize its member varbs, and also load/save them properly. This means that it has a better chance of working in multiworld/multiplayer and even after a savegame. Looking at the CombatProcess code, I'm surprised anything works at all. It had *zero* load/save code, which means it was probably never anywhere near 'finished' or even tested. It is a parallel bit of AI code to UnitTask, and so it has *zero* support for any of the usual subtasks, such as goto, follow, pickup, etc. Requests to get those subtasks working will be ignored as it's WAY too much work. I'm just trying to make it so that a save works w/o crashing after load. All saves made before 64z will exhibit this problem and not be fixed by loading in 64z. For proper testing, resave with 64z and try to load that in 64z. Saves by Red_Devil [NM] - Strings such as session name are sanitized for illegal character replacement before sending to Gamespy. [NM] - Added [GameObjectClass] CanBeIdleVictim = true If true, then this object can be the target of an idle units dispatch. [MorphTankClass] HiddenWhenMorphed = false // if true, Vir+Red turned on when morphed Added for Avatar. If this is true, then Phantom Vir & Red Field turned on automatically all the time when the unit is deployed. As soon as it starts undeploying, then this is turned off. Also added some code to AttackTask and EnemySearch() and GetClosestEnemyWithin() (latter two are functions called by AttackTask) to hopefully ignore such morphed craft automatically w/o having to resort to DLL trickery. There may be other places that still allow things to be attacked. [NM] -- b64z released - AV fix in CombatProcess found after its victim died. May be other crashes; not sure yet. Saves by Red_Devil. [NM] - Turrets w/ needPilot=0 can now maneuver at will. Cause was the stop-all-movement code added in b52I to make sniped/ejected craft come to a halt. [NM] - Added [DeployableClass] canAttackWhenDeployed = true // if false, weapons inoperative when deployed canAttackWhenUndeployed = true // if false, weapons inoperative when undeployed [GameObjectClass] limitClass1 = "" // e.g. "ibrecy", *NO* ".odf" on item limitClass1Count = 0 .. limitClass8 = "" // e.g. "ibrecy", *NO* ".odf" on item limitClass8Count = 0 This allows modders to put more flexible limits on unit counts, allowing for up to 8 classes that can be checked against. This is in addition to all the other checks (e.g. isSingle), and is checked only if all the rest succeed. Note that this check isn't good enough to handle timing-based attacks, such as multiple factories building two of the same unit that's limited to only 1. Doing that is *way* too much work. [NM] - Bombers aren't tuggable anymore. Set via code, ODFs shouldn't be able to override. [NM] - AV fix in Planners.cpp::BuilderSlot(). Caused when the GameObjectClass::requireCount was > 0, but the first requireName was blank. It shouldn't crash anymore, but in such a case, the object will always be built at the recycler. [NM] - More changes for MorphTanks - the who_shot_me is updated only when a craft is shot by a non-hidden craft. Most AI tasks updated to validate their target's hidden status each time, and should forget about their target if it's (now) hidden. Still might have missed something; can't be sure. [NM] - In CellType.cpp::AddBuilding, added range checks on all terrain accesses. This should prevent it from reading/writing illegal memory blocks, which trigger AVs. [NM] - Tried /G7 compiler optimization switch-- generates code that's a little more P4-friendly than /G6 which previous builds had. Seems to work on my Athlon 64 here at home. Let me know if things act weird. [NM] -- b64z1 released - Negative addAmmo values should be clamped at 0 now. Noticed by Commando. [NM] - AV in AssaultTankProcess::ChooseAttackTarget() fixed. Copy & paste error dealing w/ hidden morphtanks. Oops. [NM] - Further work to add more range checks to CellType.cpp::AddBuilding. There were about a dozen places it'd happily run off the end of an array. [NM] -- b64z2 released - AV on bailing out (usually in DM) fixed. Yet another copy & paste error dealing w/ hidden morphtanks. Oops. [NM] - When the new unit limit code is reached, the message "Object Limit Reached" appears as to why you can't build something. Better than no message, but displaying that you can't have more that 17 ivwhatever.odf's isn't going to happen. Noted by Commando. [NM] - Change to TerrainExpose.cpp (site cam) - if it's being destroyed, and on the same team as the local user, turns itself off. Fixes bailout bug, save by Spawn. This is a bit of a rude hack, as it's only for that specific weapon, and not a general fix. [NM] - Undid change for 63z related to weapon switching is turned off from the guessed-at moves. Seems to be disliked. [NM] - Added [DeployableClass] ScanTeamLimitDeployed = 0 // 0 = all teams (default), 1 = same team only, 2 = allies only This is a parallel to GameObjectClass::ScanTeamLimit, but applies only to a deployed deployable. [NM] - Major surgery to FactoryPanel.cpp, making it (hopefully) multi-team aware. (Probably the first time ever). This seems to work better in (extremely limited!) testing with 2-way FFA testing where both players deploy recyclers and immediately go in to the panels on them without doing anything else. I did have one case where the host and/or 1st player to enter the panel got stuck, but couldn't reproduce that. [NM] -- b64z3 released - More tweaks to FactoryPanel.cpp - seems to not get stuck anymore. Do test. [NM] - More tweaks to stealth code for morphtanks. The gflags.stealth param is also set, and scouts (actually ScoutProcess/SentryProcess) can't find them when they're stealthed. Save by Commando. Note: old savegames with hidden morphed units won't be fully fixed by this change, as the fact that they're objectified is in the save. There's no way to re-force that calculation on load, so please keep that in mind when verifying this change. I think it should track morphs/unmorphs made while the game is running fine, but test this. [NM] - Added [MorphTankClass] CanScoutObjectifyWhenHidden = false If true, AI scouts (ScoutProcess/SentryProcess) can objectify (== 'paint') this morphtank, even when cloaked and hidden from view. Added so you can get somewhat less-stealthy craft. See notes re savegames one line up. [NM] - Tweaked ScoutProcess/SentryProcess (and derived) so that they properly load/save what their last target was. This should allow savegames made with 64z4 and higher to behave more as expected with hidden morphed targets after load. [NM] -- b64z4 released - Redid changes to celltype.cpp as changes a few subbuilds ago caused weird routes to be generated around buildings. New code should be as safe as recent changes, but touched the file less, so it should have fewer possible side effects. Save by Commando. [NM] -- b64z5 released - The *.AIP::[Start]::DLLCanSwitch parameter was being read and applied only on the first AIP loaded, and also when not a .sav was being read. Fixed so that it reads and applies (if present) that setting each time a .aip file is loaded. Noticed by Commando. [NM] - Updates to EMP Streem, Scion Solar flare, ivbomb.xsi, ivmisl.xsi from APCs R Evil. [NM] - Update to fvartl.odf from Commando - turned off ability to fire when undeployed. [NM] - Tweaks to ivmbike.odf, ivmisl.odf, ivscout.odf by Greenheart. These changes should make them drop fewer mines. [NM] - Items queued up by CRig, Recyclers and Factories now count against the new unit limit checks. Noted by Commando. [NM] - SAVs should take into account their bounding box height, and only hurt pilots when the difference between the two objects' heights is less than bboxHeight + 10m. [NM] ---- 1.3 beta 65 released======= - AV fix in PlayRecording() and other cineractive functions. fclose(NULL) makes the system unhappy. Also took much greater care to not buffer-overflow, and whine to battlezone.log and the console when opening a file failed. This seems to also fix up another AV when starting recording. Saves by RD. [NM] - CommBunker/CommVehicle should only trigger Betty voiceovers if the building/vehicle team is the same as the local user's team. [NM] - Tweaks to MP vehicle randomizer for bots, players. It should better respect the MPVehicles.txt (or replacement) in terms of handing out selections. If it has to fall back on ivscout due to any problems, it should put some 'Uhoh' warnings in the logfile as to why. [NM] -- b65a released - While looking thru (unsuccessfully) to match an AV location in 1.3pb1 with current code (different compilers make offsets really hard), found some code I didn't like. Upgraded security on it and about 15-20 other places in the code calling the same function that uses varargs. Not saying more for now to try and give black hats less to go on. [NM] - Protected some more network varbs from changing (or at least having an effect ingame). Do test, as the last time I did something like this, clients couldn't set their teams before the game. [NM] - If a client gets to the end of the mission load screen, and the server has quit the game, the client should also quit. Pretty much untested, though. [NM] - Did work to synchronize the nav names across the network. network.session.csvar1 should now have a shadow copy of control.satellite.name. This should let client-set nav names be correct even after a resync. Note that there is sometimes some lag on the var system, so that creating a nav immediately (or up to 0.5 seconds?) after setting its name might have the server create it with the old name-- though you wouldn't see the old name until a resync. For best results, please be patient. [NM] - Noticed a case where after a resync, a client's moves might be double-read, and the server and client would use different values for them. Did some work to try and cut down on this. This might be responsible for series of resyncs; not sure. [NM] - If the AIP code needs to replace a lung, it should now use the closest crig to where the lung needs to go, not just the first one it found. Noted and save by Commando. [NM] - Tweaks to bzgame_scrap.cfg, bzshell.cfg, scatter.odf, sparker.odf by Red_Devil. Fixes some issues. [NM] -- b65b released - Added [BlinkDeviceClass] shotDelay = 0.0 // Delay after firing before it can trigger again, in seconds [GameObjectClass] limitClass1Text = "" .. limitClass8Text = "" These must be used in conjuction with the other limitClass* params. This string is displayed if the limit is reached, with a fallback of "Object Limit Reached" if the string is blank. If multiple limits are simultaneously reached, then the lowest numbered text will be shown. These two additions are pretty much untested. [NM] - MPI opponent selection for pregame is a listbox now, not a button. FE apparently did this first, but this approach allows all possible races to be listed. [NM] - Updates to readme13.rtf -- map count, install sizes, etc. Added file to subbuild distributions so it can be eyeballed before pb2 release. [NM] - Fixed code so that the enter game button for clients is hidden as soon as the host aborts a mission. [NM] - Made CPU internal clock reading code able to handle small amounts of "negative" time. This is needed for dual-core (or more) systems, as the internal fequency counters on the CPUs can be slightly out of sync. As BZ2 gets ping-ponged across CPUs by Windows's scheduler (which is so bad my cat walking across a keyboard could do a better job), it can end up reading "negative" time as the CPU it's presently on thinks it's running a bit slower than the last CPU. [Ping-ponging is bad even without the clockskew issues, as the L2 caches get flushed and reloaded more than necessary.] Negative time are now treated as zero time, which isn't guaranteed to be the best approach, but at least it's not going to cause the game to radically misbehave. [NM] -- b65c released - Updates to bzshell_multi_team.cfg by Commando. "mainly by adjusting the bordersize and bevelsize to be more consistent with other listboxes. " and "Its been made wider so you can see the whole name for the [Black Dog Squadron]. Squadron is no longer cut off. It also transitions better from player listbox to cpu opponent listbox." [NM] - When ivar25 (MPI opponent locked) is 1, then the listbox for selections is disabled. Noticed by Commando. [NM] - Back to /G6 compiler optimization switch for all of the code. Listbox sliders didn't work properly when dragging them on a less-than-full list and /G7 optimizations were on. Must be a compiler bug, so back to the most-tested behavior. Noticed by Commando. Also decided to try /GA compiler switch (optimize for windows application) for now. Once again, let me know if something weird is noticed. [NM] - Rewrite of new limit code. It should now properly handle vehicles, especially ones customizable by factories. Noted several times by Commando. I'm getting tired of tweaking new mod-only features, so I really hope this is the last change to it. [NM] -- b65d released - Possible AV fix in AnimKey::RefObjectMatrix and/or AnimSetState. This is code I don't fully understand, and so my fix may cause some other issues. [NM] - Fairly large tweaks to Deathmatch01.dll code. Rewrote code it uses to track empty vehicles to do a much better job of noticing when they're entered, and tweaked code to kill off empties as well. Renamed a fair number (but not all) of member varbs to be more m_* style. Code to go to a nearby powerup ensures that the item *is* a powerup before going there. Added a few more callbacks to ScriptUtils.h (DamageF, SelfDamage) to reduce hacks and be cleaner overall. Made bots spawn in a LOT faster, and will always spawn in 32 bots if running the game w/o the network code on. All this while trying to figure out the root cause of occasional resyncs, which I don't really think I got. [NM] - Team-transfers of objects should go thru the various limit checks (e.g. isSingle, the new code) before allowing it to be transferred. Untested. [NM] - A whole bunch of changes to make /record and /playback more accurate, especially when recording in singleworld, and playing back with /multiworld on. [NM] - Code in AiUtil::Blocking() wasn't (1) being properly reset during a resync, and (2) was allowing some values from the non-lockstep world to pollute values processed in the lockstep world. #2 might have caused resyncs, and #1 might have caused further resyncs. Also upped the number of blocking items tracked from 40 to 128. After this change, 2 machines on my LAN survived a 10-minute 32 bot test on dmbane w/o resyncs, which doesn't prove it's gone, but I think it's a hopeful sign. [NM] -- b65e released - Made a "logging" bzone.exe for sync tests. Some ground rules for this special build: 1) If it plays in MP, that's a minor miracle. If it doesn't, please don't bother me. 2) You *MUST* run maps thru the commandline. Don't bother with the shell. You should make a commandline roughly like this: /record dmbane.values dmbane.bzn 3) Play for a while, then exit with alt-X. Then, play back with /playback dmbane.values dmbane.bzn The record filename and mapname MUST be identical from recording to playback. You can also try adding /multiworld to the playback line. If the recording is in sync, the playback will loop when done. If not, a messagebox will appear. The file valLog.dat is created in your BZ2 folder, and will get pretty big (~50-60MB per minute), so limits of 15-30 minutes of playtime are STRONGLY recommended. 4) If you are getting repeatable cases of problems, then .7z (at maximal compression) up both the vallog.dat and the recording file. I might be able to determine the cause of the out-of-sync from that, or I might only be able to get a rough guesstimate and I'll need to add in more values to be logged for a future build. This value logging ability will go away shortly. I'm just giving the testers some tools for a build or few to try and nail sync issues. -- b65e-v released - Moved valLog.dat for valuelogging builds (only!) to the same directory as bzone.exe. There was some confusion as to where it was placed, and whether it was being created. I figure that the BZ2 folder better be easy to find. :) [NM] - One out-of-sync issue in release builds (especially isdf11.bzn) is due to voiceovers not always ending on the exact same frame, due to audio card lag. Added a 0.25 second padding to the end of sounds before it starts pinging the driver saying "are we there yet?" This seems to help isdf11 a bit. [NM] - AV in TurretAttack::CheckFollowing hopefully fixed. I'd put one potential fix in 13 months ago, but I think it wasn't enough then. [NM] - Out-of-sync issue noticed immediately during /playback when a recycler/factory was opened was fixed. Cause was the auto-created temp nav beacon that only opened during /record. Changed it so that (1) the auto-beacon is now race-specific, using "*pdrop.odf" with the first character set to the appropriate race. (2) the auto-beacon is always created now, and moved over to team 15 when the recy/factory isn't selected. A rude hack that nav beacons on team 15 will never be visible to anyone was introduced. Sorry, couldn't find any other good way of fixing this. [NM] - Ability to introduce some out-of-syncs by turning off multiworld has been disabled. This might make some units more jumpy, or less. Not sure. [NM] - In DM DLL, made bots spawn out a LOT further from their spawnpoints. This should hopefully make them less clustered, but only a lot more spawnpoints would really help that. Usually, as two units spawn near a place, the 'middle' (where they'll drive to as they fight) will tend be back at the spawnpoint. Also reduced randomness of AI bot teams -- they're now on teams 9, 10, 11, .. 14, then wrap back to 9. This also might reduce some indecision, as there's more likely to be an enemy bot nearby. [NM] - Some slight memory leaks when /noparticles is on the commandline fixed. After doing this, I ran dmbane in 1-machine multiworld host, and memory according to www.sysinternals.com 's Process Explorer (1000x better than MS's Task Manager for 2000/XP, please start using :) showed the memory pretty much leveled off after 2 minutes between 131.1 and 131.2MB, running debug. There was no appreciable difference between 2 minutes and 5 minutes into the run. [NM] - Tweak to Path.cpp to share less data between lockstep and visual worlds. Just trying to eliminate things that might be able to cause a resync. [NM] - Fix to Planners.cpp - recent change to make it use the closest rig when replacing a lung broke the crig stealing code for buildings. So, rigs would seem to be indecisive. Remember, folks, there's a percentage chance that every change you feed my way will break something else. Especially in the AIP code, which I'm developing a nasty dislike for having to touch again and again. [NM] - Made /playback loop when done. If you use game.gofast from the console, it should loop and be back at normal speed when playing. However, in some tests here, it seems that turning on game.gofast in the first 10-15 seconds of playback seems to make it quit at the end, not loop. You have been warned. [NM] - Added commandline param "/ivar X Y", (e.g. "/ivar 13 102"), which sets the specified ivar's initial value from the commandline. Note that in the shell, selecting any map will probably override this. However, this is great for launching MP maps from the commandline, e.g. mpibridges. [NM] -- b65f-v released -- b65f released - Crash in isdf01 with /multiworld on while placing nav beacons led to discovery that mission script was doing the forbidden thing of telling BZ2 to delete an object it was partway thru creating. That had been mentioned as a no-no in 1.3's DLL source code, but there's no way to go back in time. Added a hack where such calls to delete an object from the DLL will be re-routed by BZ2, and actually take place beforethe the next call to the DLL's Update() function. That's the safe approach, and accounts for other DLLs misbehaving. The downside is that in ISDF01 w/ /multiworld, the nav menu icon shows up for about a second until it notices that the nav beacon was nuked. [NM] - Tweak to deathmatch DLL. When user hops out of vehicle, then that vehicle is added to the empties list, and subject to eventual culling if there are "too many" empties (150% of number of humans, plus 1) on the map at once. [NM] - Tweak to Strat, MPI DLLs - if there's a preplaced recycler on the map for a team, it won't spawn in one. Note: this will not make preplaced objects the 'correct' race as chosen in the UI. [NM] - Tweak to ChargeGun.cpp - if it ran out of ammo part way thru charging, it'll kill off the sound efx for it. This seems to fix an issue noted by Commando with the '8-ball' FE weapon. [NM] - Recy/Factory dropoff navs tweaked to better hide themselves on save load. Armory should now have the same nav system as the recy/factory thanks to cut & paste. [A logical class hierarchy that reduces duplicated code? Hah.] [NM] - Added [PoweredBuildingClass] CanBasepanelSelect = true // if false, can't select with 1..9 keys Whether the above value is true or false, the appropriate icon will show up for the number key. Hitting the number key or trying to select with point-and-space won't get any menu if the above is set to false. [NM] -- b65g released - Fix to AV that happened when any DM map was loaded. Stupid mistake of mine, dating back to the early days of 1.3. [NM] - Fix to armory.cpp - calls parent cleanup functions when destroyed. Fixes an AV introduced last build when I added the new nav code to the armory. [NM] - Tweaks to recy/factory/armory dropoff navs. They should show up as green after loading. Also, if they're initially moved a long distance, without looking at their old position, they wouldn't show up. (Bug probably went back to 1.2, but the recent code to keep them around all the time exposed it.) [NM] - Change to CommandPanel -- if PoweredBuildingClass::CanBasepanelSelect = false (see one subbuild up), then you can't enter the customization panels for those buildings. [NM] -- b65h released - Recy/factory/armory navs shouldn't ever appear in the user's selectable nav list now. Any nav object with a label of "autonav" should behave the same way. [NM] - Tweak to Tug.cpp - if told to go to a service bay, it should skip following and get service instead. This code was duplicated all over the place in the code (dang cut & paste!), but not in tug.cpp. Also tweaked apc.cpp to get service at bays, not defend them. Untested, but it ought to work. [NM] - Tweaked fbkiln00.{xsi|msh} from Greenheart. Somewhere along the way, that file lost (or never had) its frm-collision__hc chunk. That chunk was copied over from the forge. I know this change is past my cut-off date, but I think it should be really safe. If there's any issues, though, I'll consider reverting it. [NM] - Tweak to DLL's callback GetPositionNear() function. When it generates a radius & angle to test, it also checks the y-height at the point halfway out on that radius. That must be also be "close enough" to the center position's height for the point to be chosen. This should prevent units from spawning on the far sides of walls. [NM] - Changed TeamPanel.cpp - [GameObjectClass]::limitClass1..limitClass8 are enforced when transferring units to allies. There's no total for all the human players as a whole, but it'll prevent allies from hoarding units in excess of team-specific limits. [NM] - Added [SAVClass] OverWater = true // true = flightAltitude is over water height, if present This is for consistency w/ bomber, etc. Untested. [NM] - Ranges on client's # bots, animals sliders should be more correct. [NM] -- b65i released - Tweaked isSingle=true check to check all allied teams, not just those of commander/thugs when teamgroups are on. I have a bad feeling this might break a SP mission or two. [NM] - ivar9 (unit limit) could have an arbitrary cap of 32 after a DM map was selected in the list. Now the valid range is 0..9999 in Strat/MPI. As much as you may want 10,005 units, I think BZ2 would die horribly. [NM] - Updates scatter.odf, sparker.odf from RD. "More sparks, smaller, and no trails." The previous version was a bit clunky. [NM] -- b65j released - SP mission ODFs tweaked by Commando. "The original minigun on mission three lacked a valid geometry so I specified the default gun geometry. The sounds also differed from the regular minigun, the reject and pickup sounds. Those were tweaked to be consistent with the regular minigun." "Attached is a modified version of the mission 3 shadower missile. The pickup sound and rejection sounds were the only things changed. The requirecount was also removed since it was set to 0." "I modified isdf11.bzn, Snow Blind, to use three custom structures using the CanBeIdleVictim = 0 flag so the ai wouldn't kill the particular structures. The ai are on team 2 while these structures, the bomber bay, the bomber, and a power generator were on team 3. " - Made various cfg files more resolution-independent. Basically, for a file like "bzshell.cfg", it'll look first for a file "bzshell_640x480.cfg" first, and if that's present, use it. The 640, 480 are based on the current resolutions. As there's a lot of resolutions, there'll be a lot of duplications. Sorry. The files affected by this change are: "bzshell.cfg", "bzshell_editor.cfg", "bzgame_base.cfg", "bzgame_command.cfg", "bzgame_factory.cfg", "bzgame_group.cfg", "bzgame_moves.cfg", "bzgame_satellite.cfg", "bzgame_scrap.cfg", "bzgame_weapon.cfg", "bzgame_team.cfg", "bzgame_init.cfg", "bzgame_keys.cfg", "bzgame_stats.cfg" Mostly untested, but should work. [NM] - Changed Factory code for new rally navs (again). If the rally nav is missing in a visual world, it's ignored. If it's missing in the lockstep world, it's re-created at simulate time, not PostLoad() time, and a whining message is printed that doing so may cause out-of-syncs. This may fix an occasional AV in PostLoadAll(). [NM] - Undid changes to isSingle check, as it caused more issues than were worth it. Added another check to see if an isSingle item exists on that team, and that team only. (Probably vulnerable to timing-based attacks). As an alternative, how about setting [CraftClass]::teamTransferrable=false when isSingle=true to keep people from stacking up things? This code is mostly untested. [NM] -- b65k released - Copied code from Factory navs done last build to Armory navs. Also made the message about not found only appear in MP games, as it was causing spurious messages in some SP missions. Hopefully the PostLoadAll crashes are finally gone. [NM] - Tweaked ipdrop.odf from Commando, set canSelect=0. [NM] - Fix to bug introduced w/ repair powerups (optionally) providing localAmmo and jetpacking. Doesn't divide by 0 to give you plenty of ammo. Save by Spawn, originally reported by General BladkDragon. [NM] -- b65L released - Yet another tweak to Recycler/Armory drop points. They shold be visible all the time now to the owner's team, no team-switching. They're named with what building owned them, to be cleaner. Hopefully this is the last issue with them. [NM] - Tweaked position-near code. It tries much harder to find a position closer to the target position's height, and shouldn't spawn any objects outside the edge_path. [NM] -- b65m released - Updated ipdrop.inf by Commando, mentions the armory. [NM] - Updates to ScanTeamLimit code. Added ScanTeamLimit = 3, which means that it'll never be visible to any team. For limit 1..3, if the object is filtered, extra care is taken to make sure an item can't be seen. Tested on ST: High & Low on my LAN -- navs placed by the commanders on each team (1 & 6) weren't visible to the other player. [NM] -- b65n released - Recy/Factory/Armory navs should be objectified when selected, and un-objectified after they're selected. Also squelched the "Fixme. _____ Rally Nav needed to be rebuilt" message if encountered in the first second of gameplay -- it'd be a preplaced building missing its nav. Also adjusted load/save code so that saves made with 65o and later should properly save out the nav's handle and restore it. Saves made from about 65e to 65n with a preplaced recy/factory/armory might leave a stray unmoveable ipdrop around the landscape. [NM] - Code to read ScanTeamLimit read 3 as 0. Fixed. [NM] - Tweaked ipdrop.odf by Commando - "ScanTeamLimit = 2, the same setting used by navs." [NM] - Scrap is moved out of build zone even in singleworld now. [NM] - Support for placing the 'missions' (the DLLs folder) and 'movies' folder under any dir mentioned in the bzone.cfg's AddDirRecurse(). It scans the DirRecurse in order of priority, and if the file is found under there, it uses that preferentially. For example, in the default config, it will use $BZ2/addon/movies/worldcmp.bik and $BZ2/addon/missions/strategy02.dll instead of $BZ2/movies/worldcmp.bik and $BZ2/missions/strategy02.dll , should they exist. Requested by Avatar. [NM] -- b65o released - [DeployableClass]::ScanTeamLimitDeployed = 3 was being treated as invalid, and set to = 0 instead. Fixed. [NM] - Tweak to APCProcess.cpp - if an APC is empty, and there's nowhere to refill, the pilot stays in. Not sure if this will have some side effects. Save by Spawn. [NM] - Some sanitizing of this changelog above to remove info on exploits present in builds before pb2. If I missed anything, speak up ASAP and note what line(s) need editing. [NM] - Did some poking, and without generating a new sprite.stb file, I can't insert a "proper" entry for the 4th ally (on F7). I did make it a 7 in a circle, in blue, which is probably as good as I can make it for now. [NM] ---- 1.3 public beta 2, RC1 released======= - Minor changelog edits above. [NM] - DLL source release had some edits to the readme, and a 'build all' project .sln file added from OvermindDL1. [NM] - All unit colors are refreshed after loading a game or multiworld swap. This seems to make the armory show up in the right colors for me better. Probably overkill, but I don't have time to dig into any root issue. [NM] - Tweak to ChargeGun.cpp to make it not AV in ChargeGun::SimulateFiring if a modder has botched things badly ("I didn't do anything" -- yeah right.) It may still die elsewhere, but this is a condition that hasn't shown up with stock (i.e. working) assets so I'm not so concerned. [NM] - Added code to make the "enter game" button's state be refreshed every half second. This might help with a rare issue that hasn't been fully determined how it got in that state. That button should be visible if the network.session.ivar63 = 1 (check this on both client and server), and the end-of-game screen isn't up. [Quit out to session list and re-enter the session to ensure that state is cleared.] This may cause other issues, not sure. [NM] -- pb2 rc1a released - Tweaked code above to only change the enter game button's state when the extra options window isn't open. This was causing more side effects than I wanted. I still think that this may be a server-side issue, where ivar63 somehow got reset. [NM] -- pb2 rc3 released ---- 1.3 public beta 2 released=======