bw logo

BigWorld Technology Client Release Notes

BigWorld Technology 2.1. Released 2012.

This document is proprietary commercial in confidence and access is restricted to authorised users. This document is protected by copyright laws of Australia, other countries and international treaties. Unauthorised use, reproduction or distribution of this document, or any portion of this document, may result in the imposition of civil and criminal penalties as provided by law.


BigWorld Technology 2.1.1 Client Release Notes


1. New Features

2. Changed Features

2.1. Script & Script API

2.2. Miscellaneous

3. Bug Fixes

  • Fixed an issue in ProcessDefs/GenerateCPlusPlus for FIXED_DICT types with ImplementedBy clause in the type definition. The descriptions of these types were previously not being parsed properly, and would cause the tool to abort with an exception stating that the description was invalid.

    Bug 32883

4. Known Bugs & Limitations

BigWorld Technology 2.1 Client Release Notes


1. Important Notes

  • The Client/Server protocol version for this release is 2.0.8. Only clients with the 2.0.8 protocol version can connect to the server in this release.

2. New Features

  • Added an option to do a Python garbage collection at program exit for debugging memory leaks in scripts. This is documented in Reference Counting in Python Scripts

    31636

  • Added FXAA (Fast approXimate Anti-Aliasing) as a post processing effect.

    This is documented in the Content Creation Manual, chapter 45 Post Processing and the 3D Engine (Moo).

    Bug 31602

  • Added the BigWorld.consumerBuild() function for detecting if the client is built with the CONSUMER_CLIENT_BUILD define from scripts. See the client Python API reference for details.

    Bug 31636

  • Added support for streaming files from the FileSystem through the IFileStreamer interface.

    Bug 31958

  • A new document has been added which describes how to interface Python and C++, located at Python and C. The section on debugging script memory leaks was moved from the Server Programming Guide into the Python and C document.

    Bug 32074

  • Added a new FantasyDemo iOS client as an example of integrating an iOS client with the BigWorld server. This makes use of a new code generation tool called ProcessDefs, which removes the need for entity definition files on the client-side by generating code to stream property and method call data from and to the server, and also allows for using other client-side scripting environments. This client implements entity behaviour in Objective-C++, using the Cocos2D third-party library. The example's Xcode project file is bigworld/src/examples/client_integration/c_plus_plus/ios/FantasyDemo.xcodeproj.

  • A new client integration example has been added that demonstrates how to integrate arbitrary clients to a BigWorld server. It uses SDL to implement a simple top-down sprite-based AoI visualisation. This source in in bigworld/src/examples/client_integration/c_plus_plus/sdl, and currently supports Linux and Mac OS X.

  • The two new client examples use the new simplified interfaces in the connection_model library. The interfaces and the ProcessDefs tool are documented in the Client Programming Guide, in the new chapter, Integrating With BigWorld Server, which also describes how to integrate arbitrary clients to the server. This new connection_model API is not finalised, and likely to change in future releases.

    Bug 31472

  • It is now possible to configure the maximum number of footprints drawn in the FantasyDemo by editing "maxFootPrints" section in fantasydemo/res/resources.xml

    Bug 31594

  • It is now possible to configure the default window size and start position of client by editing "clientWindow" section in fantasydemo/res/engine_config.xml. The previous behaviour of using CW_USEDEFAULT will be used if the window position is not specified.

    Bug 31614

3. Changed Features

3.1. Script & Script API

  • Saving a child file of a zip file specified in paths.xml is now supported, but this should be avoided on large zip files, because saving a child file of a zip file causes the entire zip file to be read and written back.

    Bug 31804

  • Iterating through an internal zip file (a zip file inside another zip file) is now supported correctly.

    Bug 31750

  • For the case of a ZipSection who is the child of another ZipSection, the constructor has been changed to accept only a "tag" argument instead of both "tag" and "path" arguments. The engine will determine if it's a path according to the hierarchy it lives in.

    Bug 31750

  • Fixed the in-game Python console's paste to work like the Windows Python console. Now you can paste into the middle of a line, instead of it replacing the entire line.

  • Documentation was added for the SFX system, located in SFX.

    Bug 31635

  • The BigWorld Python integration has been simplified to remove all BigWorld source code modifications from Python. This allows a much easier upgrade process and compatibility with third party Python modules that need to link against Python.

    As a result of this modification, Python is now dynamically linked into the Client binary requiring that the Python DLL be placed in the bigworld/bin/client directory (or corresponding directory for your game). By dynamically linking Python, it is now possible to load third-party modules from PYD files rather than statically linking them into the Client as was previously required. Client Python binary modules should be placed into the directory res/scripts/client/DLLs.

    Bug 27617

  • Python was upgraded from 2.6.4 to 2.6.6

    Bug 27617

  • The Python method ResMgr.resolveToAbsolutePath has been modified so that if the given path does not exist it will return the path relative to the first resource tree instead of raising an exception.

    Bug 32219

  • As part of the Python upgrade the behaviour of the open() function has changed. Files and paths referenced via open() will no longer be relative to the BigWorld resource tree as defined in your paths.xml file. Files are now relative to os.getcwd().

    In order to replicate old behaviour of referencing files within the BigWorld resource tree you can use the ResMgr.resolveToAbsolutePath() method. For example:

    fp = open( "data/custom_data.dat", "r" )

    would become

    filename = ResMgr.resolveToAbsolutePath( "data/custom_data.dat" )
    fp = open( filename, "r" )

    Bug 27617

  • Two new status values are passed to the connectionCallback of BigWorld.connect().

    "LOGIN_REJECTED_NO_LOGINAPP_RESPONSE" is passed when nothing is received from the LoginApp and "LOGIN_REJECTED_NO_BASEAPP_RESPONSE" is passed when nothing is received from the BaseApp. Previously, "CONNECTION_FAILED" was passed in these cases.

    Bug 31442

  • The FMOD Python method EventGroup.freeEventData no longer takes "reloadEvents" as an optional parameter. It now always behaves as if reloadEvents was false.

    Bug 31478

  • The FMOD Python method FMOD.unloadSoundBankFromMemory now makes sure any events currently playing from the unloaded sound bank are stopped.

    Bug 31478

  • Fixed collision flags on physics. In order not to break code that may rely on existing behaviour this has been implemented via two new flags; Physics.collideTerrain and Physics.collideObjects. To enable use of the new flags use the Physics.oldStyleCollision property.

    The old Physics.collide flag will be deprecated in BWT 3.0 and the new collision flags will default to enabled.

    Bug 31628

  • Deprecated BigWorld.fetchModel. Use BigWorld.loadResourceListBG instead. See the client Python API reference for details.

    Ticket 3576

  • Deprecated Py_Return in favour of Py_RETURN_NONE, which is part of the standard Python distribution.

    Deprecated PyTypePlus in favour of PyTypeObject, which is part of the standard Python distribution.

    Deprecated PyInstancePlus and Py_InstanceHeader as they are simply aliases for PyObjectPlus and Py_Header.

    Py_RETURN_NONE and PyTypePlus can be updated in existing code with a find and replace. When replacing Py_InstanceHeader, make sure that you add PyObjectPlus as the base class in the new Py_Header. Example:

    // Original
    class Entity : public PyInstancePlus
    {
        Py_InstanceHeader( Entity )
    // New
    class Entity : public PyObjectPlus
    {
        // Need to add in name of base class
        Py_Header( Entity, PyObjectPlus )

    Replacing them will not affect the behaviour of the code in any way. See the Python and C document for general information on CPython usage.

    Bug 32074

  • The Moo::VisualCompound system has been improved to use less memory. Instead of creating combined vertex buffers for batched objects, it now has a tight loop around the batched objects which updates the object transform before rendering each instance. Performance is unaffected.

    Bug 31958

  • Memory fragmentation has been decreased by modifying texture loading to stream texture data directly from .dds files to video memory. This is removes the temporary buffer used when loading through the ResMgr.

    Bug 31958

  • Threads can now be named so that they can be more easily identified in the Visual Studio thread debugging window. Names have been given to existing threads.

    Bug 32052

3.2. Miscellaneous

  • Visual Studio property sheets have been moved from bigworld/src/lib/cstdmf to bigworld/src/build/vsprops.

  • Added ROAMING_APP_DATA, LOCAL_APP_DATA, and MY_PICTURES as options to the PathedFilename mechanism used for saving preferences.xml and screen shots. See the Client Programming Guide sections on preferences.xml and Screen Shots for details.

    Bug 27914

  • Disabled global plugins as the Flash 11 plugin is not compatible with llmozlib in the web_render project. Compatible plugins now need to be installed manually.

    See the Client Programming Guide for more details.

    Bug 31858

  • The client build instructions have been updated and moved from client_and_tools_build_instructions.html to the PDF Client and Tools Build Guide.

    Bug 32073

  • Disabled static batching (visual compound) for trees if SpeedTreeRT is disabled.

    Bug 32029

  • Removed unsuppported libraries: "sound", "xactsound" and "xbsound". FMOD is currently the only supported sound solution.

    Packaging review

  • Removed old client integration examples previously in directories named client1, client2 and client3 under bigworld/src/examples. The client4 example has been moved to bigworld/src/examples/client_integration/python/simple.

    Bug 32638

4. Bug Fixes

  • Fixed a bug with lending of ChunkParticles that caused particle systems crossing chunk boundaries to be culled incorrectly.

    Bug 32759

  • Fixed a crash that could occur when the user locked and then unlocked their machine while in fullscreen mode. The client now makes sure to not reset the device or perform a full tick while the screen is locked.

    Bug 32676

  • Fixed a bug where the callbacks SimpleGUIComponent.handleDragEnterEvent and SimpleGUIComponent.handleDropEvent were not always called.

    Bug 32352

  • Fixed a bug where accessing BigWorld.PyTextureProvider("a.zip/b.bmp") would crash the client. It now works, but the converted file b.dds is not saved.

    Bug 31750

  • Fixed a bug where the client would create a new folder at the root level if the BigWorld project root included non-ascii characters. Note: to run the client from a non-ascii path, you need to set the "Language for non-unicode programs" (system locale) to the appropriate region, i.e. "Chinese (Simplified PRC)" if using chinese characters.

    Bug 31581

  • Fixed a bug where if attachments are attached to a blank PyModel, they won't be LODed.

    Bug 32092

  • Fixed a bug where if there is a zip res path in the front of a non-zip res path in paths.xml, saving a data section that does exist in the non-zip res path will fail.

    Bug 31804

  • Fixed a bug where calling FMOD.unloadEventProject could crash the client.

    Ticket 3423

  • Fixed a memory leak when using SkeletonCollider.

    Bug 31554

  • Fixed crash caused by setting "Client Settings/Entity Picker/Debug" to True and then teleporting.

  • Fixed PyMovieView.invoke so that it properly parses additional arguments (previously you would have to pass in everything as a single tuple). See the Python documentation for details.

    Ticket 3021

  • PyMovieView.invoke no longer raises an internal SystemError Python exception.

    Ticket 3021

  • Fixed a bug where modifying the GUI hierarchy inside a Scaleform external interface callback could cause a crash.

    Ticket 3021

  • Fixed a bug where play priorities on FMOD sounds are incorrect. Take two JFIQ PySounds A and B that refer to the same sound file, and are played without being attached to PyModels. If the listener walks from A to B, causing A's priority to be stolen by B, and then if the listener walks back again to A, A would not get its play priority back.

    Ticket 2652

  • Fixed a bug where if a one-shot PySound of JFIQ type gets stolen, it will never stop playing after the play priority is restored.

    Bug 28440

  • Fixed a bug where a JFIQ PySound's callback never gets triggered.

    Bug 28329

  • Fixed a login bug when triggering the connectionCallback of BigWorld.connect() for stage 2. Packet loss could cause this callback to be called prematurely before the base player had been created on the client, causing the return value for BigWorld.player() to be invalid.

    Bug 31558

  • Fixed a bug where the Page Up and Page Down keys could get stuck down when Num Lock is enabled and the number pad Page Up/Page Down keys were used with Shift key held down.

    Bug 28333

  • Added partial support for absolute mouse input devices such as tablets. This also fixes the mouse when the client is used in a virtual machines.

    Bug 28333

  • Fixed a bug where the own-client properties of entities observed by other-clients were being populated by default values. These properties are now not populated in the entity dictionary.

    Bug 31585

  • Fixed a bug when disconnecting from the server which may have resulted in a client crash.

    Bug 31906

  • Fixed a bug where fonts could not be loaded with BigWorld.loadResourceListBG and added a skeleton PyFont class to act as a container. See the client Python API reference for details.

    Bug 32094

  • Fixed a bug where loading an invalid GUI XML could cause a SystemError to be raised.

    Bug 32338

  • Fixed particle flare component to work properly with the default zero value for "Flare Step" property. For more detail see Content Creation guide "Particle and Special Effects->Sub system components->Flare sub-panel"

    Bug 32689

  • Fixed a bug where Profiler::tick may hit MF_ASSERT(slotStackPos_ == 0).

    Bug 32704

  • Fixed a bug where the client would crash when the server changed space while the client was minimised. For example, in FantasyDemo this would happen if you minimised immediately after selecting a character.

    Bug 32206

5. Known Bugs & Limitations

  • The web browser capabilities of the BigWorld client are currently limited as follows:

    • Mozilla 1.9 (Firefox 2.0) is currently being used in the BigWorld client.

    • Global plugins are disabled by default as the Flash 11 plugin is not compatible with LLMozlib.

    • Flash components interaction is limited (dragging and some other mouse operations do not work).

    • Flash movies are shown in smaller windows than their actual original window. Sometimes you will need to use lower web page resolution when using flash movies.

    • HTML files can't be loaded from zipped resource files.

    • Small memory leaks might occur when navigating to multiple web pages multiple times.

    • Mozilla is currently disabled in PyModule_Hybrid. Customers wanting to debug python related web stuff can enable mozilla by not defining DISABLE_LLMOZLIB in mozilla_web_page.cpp. Warnings about missing dlls will be displayed while running PyModule_Hybrid in that case, but everything should still work as usual.

    • Some websites which capture the keyboard input might not work correctly when Mozilla doesn't capture the keyboard by being focused for keyboard events (see MozillaWebPageInterface::focusBrowser). This usually happens when supporting in game IME.

  • Bloom now requires shader model 2 or better because it is part of the new PostProcessing framework. The other shader model 1.1 full screen effects (heat shimmer and player fader) are unaffected.

  • While the debugging consoles (e.g. the Python console) now support arbitrary Unicode characters, some wider character sets will be clipped (e.g. Chinese). This is due to the widestChar property not being set for the system fonts (See the Fonts chapter in the Client Programming Guide), since non fixed-width fonts are not supported in the debugging consoles.

    If wide character output is required when debugging Python scripts, an alternative is to connect to the BigWorld client Python console using a telnet client and set the output character encoding to UTF-8.

    Bug 12713

  • The soft keyboard for the Traditional Chinese IME (i.e. Taiwanese) will not display correctly whilst in full screen mode.

    Bug 27719

  • The shimmer channel is incompatible with using FlashText and FlashGuiComponent objects as GuiAttachments. If you wish to do this, the shimmer channel will need to be disabled, or you could modify the Scaleform renderer to not use the alpha channel.

    Bug 26887

  • Due to how the decal system works, decals may cause visual artifacts (e.g. floating decals) on models that have a collision BSP that is significantly different to the visual mesh.

    Bug 26222

  • Some fonts require an EffectMargin of 1 pixel to work around idiosyncrasies in GDI+; in one example measureString returns 7*15 and drawString then draws a 7*16 block of pixels.

    Bug 12713

  • Entity traps (i.e. those created via Entity.addTrap) will not trigger correctly if the same number of entities enter and leave within a single tick (even if the actual entities change).

    Bug 27634

  • The client may crash if Python scripts try to execute import statements while the engine is shutting down. For example, this may happen if import is called from Entity.onLeaveWorld.

    Bug 27743

  • Nvidia PerfHUD cannot be used as it is incompatible with the D3DCREATE_MULTITHREADED flag which is needed for the renderer to run.

    Bug 27358

BigWorld Technology 2.0.8 Client Release Notes


No changes were done for this version.

BigWorld Technology 2.0.7 Client Release Notes


No changes were done for this version.

BigWorld Technology 2.0.6 Client Release Notes


1. Bug Fixes

  • Removed a character which could break the build in some non-English locales.

    Bug 32161

BigWorld Technology 2.0.5 Client Release Notes


No changes were done for this version.

BigWorld Technology 2.0.4 Client Release Notes


No changes were done for this version.

BigWorld Technology 2.0.3 Client Release Notes


No changes were done for this version.

BigWorld Technology 2.0.2 Client Release Notes


1. Changed Features

  • The Scaleform integration has been updated to make dealing with font libraries easier and more intuitive. This involved the following changes:

    • Font libraries used when loading a movie are now defined externally in a font configuration XML file that sits next to the .swf. This allows you to specify a list of SWFs to be used as the font library while loading, as well as a number of font mappings. Importantly, if the font configuration file is absent, it will fall back to gfxfontlib.swf (previously this feature was never available). See the Scaleform chapter in the Third Party Integrations document for details on how to use this.

    • The PyMovieDef.addToFontLibrary has been removed since this is now controlled via font configuration files and there is no longer a global font library.

    • FlashGUIComponent now correctly serialises to .gui files and will automatically load the MovieDef and MovieView on deserialisation.

    • The FlashGUIComponent.movie attribute is now read-write (previously it was read only).

    Bug: 24308

  • Improved the robustness of calling Proxy.giveClientTo() on the server to give a client connection a remote BaseApp's proxy via a mailbox. This was previously unreliable under packet loss.

    Customers that implement their own client using BigWorld's connection library should be aware of the extra virtual method onSwitchBaseApp() added to the ServerMessageHandler interface.

    The onSwitchBaseApp() method signals that the client connection is being switched over to another BaseApp.

    Custom clients should handle this by continuing to periodically call ServerConnection::processInput(). After calling processInput(), they should also be checking the status of the LoginHandler instance passed into onSwitchBaseApp(), by querying LoginHandler::done(). Once done() returns true, the client should call ServerConnection::enableEntities() to tell the server that it is ready for entity updates.

    In the mainstream client, this logic is implemented by EntityManager::onSwitchBaseApp() and in ConnectionControl::tick().

    Bug: 31509 / Ticket : 3076

2. Bug Fixes

  • Fixed a leak in the BigWorld.Texture function where the returned PyTextureProvider would never get freed.

    Bug: 24308

BigWorld Technology 2.0.1 Client Release Notes


1. Bug Fixes

  • Added missing files in the Full Source package that were preventing the package from being compiled.

BigWorld Technology 2.0 Client Release Notes


1. Overview

  • BigWorld Technology 2.0 is the latest version of the BigWorld Technology engine.

2. Important Notes

  • The release number system has changed. Previously, there were two digits assigned to a major release version (e.g. 1.9), an extra digit for the minor release version (e.g. 1.9.6) and a final, fourth digit for the patch version (e.g. 1.9.6.7). Major release versions now have a single digit. The full version number now has three digits (e.g. 2.0.0).

  • In order to make the source code location for BigWorld components consistent, the trunk/src directory has been moved to trunk/bigworld/src.

    In addition, the BigWorld client Visual Studio solution is no longer contained within fantasydemo/src and is now fully contained within bigworld/src/client. The default build location for the client executable is now bigworld/bin/client/bwclient.exe.

    These changes need to be taken into consideration when merging source code changes from previous versions to the latest version and may impact on your build/packaging systems.

  • Please note that support for Visual C++ 2005 will be dropped in BigWorld version 2.1 in favour of supporting Visual C++ 2008 and Visual C++ 2010.

    If upgrading projects to Visual C++ 2010 yourself, you will need to upgrade the projects and configure project to project dependancies yourself. In addition, comment out the following line in src/lib/python/PC/msvcrtmodule.c:

    #include <crtassem.h>

3. New Features

  • Added a PostProcessing framework, which allows full control over full-screen filters applied after scene draw time and before GUI draw. Please see the Client Programming Guide, Content Tools Reference Guide, Content Creation Manual, Client Python API, and Python helper code in bigworld/res/scripts/client/PostProcessing for further details.

    Bug 25223

  • Added a multicore job system. It records Direct3D commands from the main thread and plays them back on another core in the next frame. It also runs jobs just in time to calculate results for the rendering and is able to run these jobs on any additional cores. The system is optional and can be disabled in the engine config XML. See the Job System chapter in the Client Programming Guide for full documentation.

    Bug 24182

  • Added BigWorld.PyMaterial class. This wraps effect materials and allows full control over artist-editable properties from Python.

    Bug 25223

  • Added BigWorld.PyRenderTarget class. This wraps render targets and allows control over their use and creation from Python.

    Bug 25223

  • Added BigWorld.PyGraphicsSetting class. This wraps the graphics setting class, and allows creation of new graphics settings that you can manage from Python.

    Bug 26002

  • Added BigWorld.addModel() and BigWorld.delModel(). This allows PyAttachments to be drawn without being associated with an entity. See the Client Python API for further details.

    Bug 23871

  • Added the BigWorld.InvViewMatrixProvider class. This MatrixProvider returns the current inverse view matrix, regardless of what camera is currently in use. Previously you'd need to access this matrix through instances of the BigWorld.Camera class, requiring you to manually handle the case when the BigWorld camera object changes. See the Client Python API for further details.

    Bug 23871

  • Added the Math.Vector4Distance class. This Vector4Provider returns the dynamic distance between two MatrixProvider positions.

    Bug 26724

  • Added the Math.MatrixInverse class. This MatrixProvider returns the inverse a given MatrixProvider.

    Bug 24709

  • Added the Math.Vector4Translation class. This Vector4Provider returns the translation part of a MatrixProvider.

    Bug 24709

  • Added LOOKAT and LOOKAT_SCALEZ styles for Math.MatrixAdaptor. These interprets the source Vector4Provider as a direction, and produces a look-at Matrix, optionally scaling the resultant z-axis by the size of the input vector.

    Bug 24709

  • Added an optional position Vector4Provider attribute for Math.MatrixAdaptor. This provides the translation for the output Matrix.

    Bug 24709

  • Created FX Python module. This is a general purpose special effects library, previously in use by FantasyDemo but now properly documented and tested. Please see the File Grammar Guide for details about the file format, and the Python code for comments and details on its use.

    Bug 23871

  • Created Weather Python module. This is a client-side weather library, previously in use by FantasyDemo but now properly documented and tested and with WorldEditor support. Please see the Content Tools Reference Guide for comments and details on its use.

    Bug 23871

  • It is now possible to export vertex colours and/or an additional UV map set. These can then be used in any of the shaders, for examples of usage see the lightonly_dual.fx and lightonly_vertexcolour.fx files.

    Bug 24220

  • The BigWorld client can now display web pages using Mozilla Gecko 1.9 engine. Use the WebPageProvider as a Python object which can return a web page TextureProvider.

    Bug 22741

  • Integrated with Scaleform v3.0. Please read the Third-Party Integrations for further details.

    Bug 26488

  • BigWorld.loadResourceListBG() can now load .fx files in the background. It returns a PyMaterial object.

    Bug 25223

  • Added drawSplodges attribute to PySceneRenderer.

    Ticket 693

  • TextGUIComponent can now render multi-line text. See the Client Python API for details on the property TextGUIComponent.multiline.

    Bug 19477

  • Colour formatting tags can now be embedded within a TextGUIComponent. See Client Python API for details on the property TextGUIComponent.colourFormatting.

    Bug 19477

  • A new Input Method Editor API has been exposed to the Python scripts which allows for writing in-game IME interfaces for the Chinese, Japanese and Korean languages. An example IME implementation is included as part of the Fantasy Demo PyGUI library. See the Client Programming Guide for details.

    Bug 19477

  • The size and the frequency of face updates of the EnvironmentCubeMap are now configurable. See bigworld/res/resources.xml/environment/cubeMap.

  • Added an ActionMatcher testing and visualisation script, see bigworld/res/scripts/client/Tests/ActionMatcher.py.

    Bug 15312

  • Added two memory-related Python API functions, BigWorld.totalPhysicalMemory() and BigWorld.totalVirtualMemory(). These can aid game scripts in choosing appropriate detail settings for a user.

    Bug 26144

  • Omni lights, spot lights, and pulse lights now have a property called priority which can be used to bias sorting towards certain lights when determining the most relevant dynamic lights for an object. This value has also been exposed on PyChunkLight and PyChunkSpotLight.

    Bug 27362

  • Added Physics.smoothingTime. This allows you to specify the time in seconds over which velocity changes are smoothed. It defaults to 0.3 seconds, which is the default blend time for animations. This attribute replaces a 0.3 that was hardcoded into the engine.

    Bug 27369

  • The base path for the preferences XML file can now be configured in the engine config XML, allowing the option to put the preferences in the current user's AppData or My Documents directories. Similarly, screenshots can now be configured to output in a custom location. See the Client Programming Guide and the example Fantasy Demo engine_config.xml for details.

    Bug 12228

  • You can now perform navigation queries on client side. To allow this, you have to modify CDataPacker::pack in bigworld/src/tools/res_packer/cdata_packer.cpp so that it keeps "worldNavmesh" sections. You also need to enable navigation for each space by setting the value of "clientNavigation/enable" to "true" in the space.settings file for that space. You can then call BigWorld.navigatePathPoints() to get a list of intermediate positions between the source and destination position.

    Note: This functionality is not yet officially supported.

    Bug 24754

  • Added the reflectionVisible attribute to GUIAttachment to allow control over whether a GUI attachment is visible in reflection scenes (e.g. water reflections). It defaults to True in order to keep existing default behaviour.

    Ticket 2412

  • Added an option to engine_config.xml which allows WARNING and ERROR messages to be logged to the Python console. This allows warnings and errors to be more visible during development. This is disabled by default in the engine, but can be enabled by setting "debug/logMessagesToConsole" to true in engine_config.xml. It is enabled in Fantasy Demo.

    Ticket 27955

4. Changed Features

  • In order to make the source code location for BigWorld components consistent, the trunk/src directory has been moved to trunk/bigworld/src. This needs to be considered when merging source code changes from previous versions to the latest version.

    Bug 10156

  • The BigWorld client Visual Studio solution is no longer contained within fantasydemo/src and is now fully contained within bigworld/src/client. The default build location for the client executable is now bigworld/bin/client/bwclient.exe.

    Keep in mind that this means that bwclient2005|2008.vcproj is now the actual executable project rather than a static library.

    Bug 12228

  • The client will now look for a paths.xml in the current working directory before checking to see if paths.xml exists next to the executable file.

    Bug 12228

  • The internal Python library has been updated to version 2.6.4.

    Bug 27310

  • If building using Visual Studio 2005, you will need to upgrade your Windows Platform SDK installation to the latest version (available from the Microsoft web site).

  • The Font system now dynamically allocates glyphs on-the-fly. This is to support large Asian character sets. Please see the Client Programming Guide chapter Fonts for further details.

    Bug 12713

  • Removed existing C++ post-processing filters, and the FullScreenBackBuffer class. These have been replaced by the PostProcessing framework (see New Features).

    Bug 25223

  • The GoboComponent (GUI.Gobo) no longer refers to the hard-coded bloom2 render target. Instead the render target is specified via a python attribute. This allows you to use any secondary texture to blend with. Also, the freeze functionality no longer saves a frozen copy of the Gobo to disk, instead you now must provide a render target into which the gobo will be frozen.

    Bug 25223

  • Removed weather systems which were deprecated in 1.8. These are replaced by the new Python weather system module, which allows far greater customisation and control. See the New Features section for more details.

    Bug 23871

  • Added lighting and parallax support for the static sky box shaders (sky_box.fx and sky_box_alpha.fx).

    Bug 23871

  • For all keyboard keys other than shift, input now uses the WM_KEYDOWN family of Windows messages rather than raw input. This allows keyboard input to better cooperate with IME. Raw input is still used for the shift key in order to be able to differentiate between the left and right shift keys.

    Bug 19477

  • Mouse button events now use the WM_LBUTTONDOWN family of Windows messages rather than raw input. This allows the location of the mouse cursor when the event occured to be determined.

    Bug 26987

  • There is no longer a separate character event for text input. It has been unified into the key event message, allowing easier control of the overall flow of keyboard related events.

    Bug 24161

  • The personality script input event handlers handleKeyEvent, handleMouseEvent, and handleAxisEvent now take a single parameter (a PyKeyEvent, PyMouseEvent, and PyAxisEvent respectively). Existing Python scripts will need to be updated accordingly. See the Python API documentation for PyKeyEvent, PyMouseEvent, and PyAxisEvent for details on how to query event parameters.

    Similarly, the equivalent GUI system event handlers have been modified in the same way.

    Bugs 24161, 26987

  • The C++ enum KeyEvent::Key has been refactored into its own namespace within key_code.hpp.

    Bug 26987

  • handleKeyEvent now receives auto-repeat for keyboard keys other than characters. This allows more complex text-input GUI's (e.g. system controlled auto-repeat for arrow keys) to be implemented in Python. If porting from a previous version of BigWorld and want to keep old behaviour, use PyKeyEvent.isRepeatedEvent() in handleKeyEvent to filter out repeats.

    Note that joystick and mouse buttons do not generate auto-repeat events.

    Bug 24161

  • SimpleGUIComponent.handleMouseButtonEvent will now be called only when SimpleGUIComponent.mouseButtonFocus property is set to True (previously it would only be when the focus flag was True). Separating this out makes it easier to implement a focusing system that allows the user to focus a component using a mouse click (i.e. the component can receive mouse button events but not keyboard events by setting mouseButtonFocus to True and focus to False respectively).

    Bug 19477

  • SimpleGUIComponent.handleClickEvent now only gets called on components that have their mouseButtonFocus property set to True.

    Bug 26987

  • The BigWorld.rumble function has been removed.

    Bug 26987

  • ConsoleGUIComponent has been deprecated in favour of using script based solutions that take advantage of multi-line TextGUIComponents. See the chat console scripts in FantasyDemo for an example.

    Bug 26444

  • Vector4Providers and MatrixProviders are now automatically ticked, instead of relying on the holder to tick them. This fixes a bug where Providers being held onto by more than one owner would be ticked twice or more per-frame, thus speeding up. Due to this changed feature, some effects that you may have created that rely on Vector4 or MatrixProviders may tick at a different (correct) speed - so any workarounds or timings must be corrected for. As a second by-product of fixing this bug, Vector4TimeManipulator has been removed. If you rely on Vector4TimeManipulator, please contact BigWorld Support and we will provide an appropriate replacement class.

    Bug 25223

  • RenderTargets now add themselves by name to the Texture Manager. This means you can access render target textures just as they were any other texture. This was added for the PostProcessing framework, but should also be useful in other ways. For example, in ModelEditor, you could type in the name of a render target ("downSample1") and have that appear on models.

    Bug 25223

  • RenderTargets do not allocate their texture memory until first used (via push(), pTexture(), pSurface(), depthBuffer().) This allows you to create any number of Render Targets definitions without using more memory than is necessary at runtime.

    Bug 26855

  • Models containing Dyes can now be used as software occluders. Previously, the engine automatically turned off occlusion if a model had Dyes, just in case one of the Dyes was transparent. Now the engine doesn't take this into account, so if you encounter occlusion issues using such a Model, then you must now manually turn off the Occluder flag in ModelEditor for that object.

    Bug 26523

  • Lens Flare optimisations - added an alternate implementation for Lens Flare Occlusion Testing that doesn't use DirectX Occlusion Queries. For these flares, the rendering is batched and the fill-rate usage is reduced by drawing them to a small offscreen buffer before final compositing. This alternate implementation greatly reduces the performance cost of lens flare for some cards, especially the GeForce 8600.

    Bug 25912

  • Added 'bypass depth' property to the water. On Shader Model 3, the water uses screen-space depth for soft particle blending, soft edge blending etc. Sometimes you need to be able to override the depth-based extensions, for example in the case where very shallow water is used to simulate a reflective floor.

    Bug 26627

  • The BigWorld client 'Release' and 'Consumer_Release' build configurations no longer use the 'Whole Program Optimization' compiler option and the 'Link Time Code Generation' linker option. This was done to decrease compilation time and as these options do not provide significant performance benefit. Customers can still enable these options if required.

    Bug 26870

  • The TextureManager is now less strict about file extensions. If a texture is not found, it will look for a file with the same name but different file extension before returning an error.

    Bug 26459

  • We now check the number of CPU cores and only perform a 1ms per-frame sleep on single-core machines. The sleep is there for single-core machines to allow time for background tasks such as chunk loading.

    Bug 27341

  • The Python API function BigWorld.findChunkFromPoint will now throw a ValueError if a chunk is found, but it has not been fully loaded. This is to handle the case when the point actually resides in an indoor chunk, but only the outdoor part has been loaded. Scripts should use this function in the same way as before, but there will be cases when it returns a chunk later than previously. As a result of this change, this method will now also be more accurate.

    Bug 26756

  • The chunk traversal for the non-Umbra code path has been optimized, it now uses a quad tree for outdoor chunk traversal and only does portal traversal for indoor chunks.

    Bug 27375

  • The chunk traversal for the Umbra code path has been optimised, it now only uses Umbra for the outside scene and uses portal traversal for indoor areas. The water reflection no longer uses Umbra to calculate the reflection either. This should result in improved performance in indoor areas and scenes with water.

    Bug 26875

  • Lights that dynamically light the scene now deteremine which neighbouring chunks they affect by checking to see if they intersect with the portal that links the two chunks. Previously, lights would be pulled from neighbouring chunks regardless of whether or not they intersect with the portal. This may affect the lighting setup of existing spaces that were built using the previous lighting scheme and will need to be adjusted accordingly by an artist. See the Content Creation Manual section on lights for more information on how this works.

    Bug 27362

  • Spot lights are now sorted by attenuation to find the two most relevant spot lights affecting an object, similarly to how omni lights were already being sorted.

    Bug 27362

  • The spaceID parameter of BigWorld.weather() is now optional. If no spaceID is passed in, then the current camera space is used. Although the spaceID parameter still works, it is only being kept for backwards compatibility, since the client only supports a single space at a time, and the other weather features are global and not per-space.

    Bug 27522

  • Conversion from Python strings to C++ strings is now more strict. More specifically, Script::setData now checks to make sure the Python object being converted is actually a string (narrow or unicode), and fails conversion if it is not.

    Because of this, some BigWorld Python methods that used to work when passing in non-string Python objects will now fail if something other than a string is given.

    In our FantasyDemo code we found that this impacted some Python scripts that were reading strings from data sections and passing a Python None object as a default value. This will now fail, as the default value for readString is a string. The scripts that had to be fixed are Helpers/PyGUI/Button.py and Spell.py, which can be found in fantasydemo/res/scripts/client.

    Bug 27324

  • The default value for waitVSync in device_app.cpp and in preferences.xml is now true to prevent tearing.

    Bug 26781

  • Multiple improvements were made to automatic flora selection and placement. Additionally, a typo was fixed in reading flora.xml, now vb_size is read in for the vertex buffer size. Finally, the ecotype blur and position blur watchers are now initialised from XML, via the ecotypeBlur and positionBlur tags in flora.xml.

    Bug 27628

  • BigWorld.floraVBSize() now sets the maxVBSize_ member; this value is then multiplied by the flora graphics settings ratio to get the actual vb size. This makes it behave exactly like the vbSize tag in your flora.xml file and should help finding the correct flora vb size for your game.

    Bug 27652

  • The interpretation of pitch has been corrected in NodeTrackerInfo, DirectionCursor and CursorCamera to be consistent with other uses of pitch within BigWorld. That is, a positive pitch indicates the nose is pointing down and a negative pitch indicates the nose is pointing up.

    This is likely to affect script in the construction arguments to NodeTrackerInfo, the minPitch and maxPitch values set in BigWorld.dcursor() including settings in engine_config.xml's directionCursor section.

    Bug 27757

  • Physics.droppingTime in Python API is no longer supported. Physics.fallingVelocity is now used to track the vertical movement of the entity.

    Bug 27685

  • The SimpleGUIComponent.addChild method now raises a Python exception if the given component already has a parent, where-as previously it would simply log a warning message and fail without reporting this back to the scripts.

    Bug 27855

  • The PyGUIComponentPosition and PyGUIComponentColour classes (returned by the SimpleGUIComponent.position and SimpleGUIComponent.colour attribute accessors) now hold onto a weak reference (rather than a strong reference) to the SimpleGUIComponent they belong to. This avoids scripts unwittingly holding onto a strong reference to the SimpleGUIComponent and potentially causing a memory leak due to having circular references.

    Bug 27955

  • The BigWorld client now overrides sys.excepthook and disables the main-thread access warning while tracebacks are being printed.

    Bug 27955

  • SimpleGUIComponent will no longer call the component.script.focus() family of event handlers while defocusing components during component destruction (i.e. when the SimpleGUIComponent reference count hits zero). Scripts should either explicitly defocus the component before decreasing the reference count of the component to zero (e.g. in a custom fini method), or implement logic in SimpleGUIComponent.onDelete (whilst being very careful not to touch the component since the component is in the middle of destruction).

    Bug 28002

  • The Python BigWorld.chunkInhabitant() function and the ChunkPortal class have been removed. The functionality they were previously provided for (turning on and off portals for door-like entities) can now be achieved by using Entity.setPortalState(). This makes the Client API consistent with the CellApp API.

    Bug 26400

  • The vlo file saved in space folder now has an underscore as prefix to avoid warnings about invalid XML tags. The old vlo file name is still supported.

    Bug 28090

5. Bug Fixes

  • GUI shaders are now applied to a component before applying shaders to children. This means that a shader attached to a child can now override a shader attached to a parent (e.g. previously, if both a parent and a child have a ColourGUIShader, the parent colour shader would override the child colour shader).

    Bug 19477

  • The SimpleGUIComponent.localToScreen and screenToLocal methods now take the scroll property of WindowGUIComponent into account.

    Bug 19477

  • Fixed a problem with drag and drop functionality in the GUI where the drag would fail to commence if the mouse moves too quickly off the component to be dragged.

    Bug 26987

  • Particle systems addYBounds is now calculated correctly, therefore particle systems are no longer incorrectly culled when not using Umbra and looking up.

    Bug 26711

  • Fixed lightonly_normal shader, it was incorrectly using the world vertex normal, making the effect appear differently from different world directions.

    Bug 27158

  • Fixed use of watchers by environment objets. This fixes both their behaviour and the related warnings that appear when changing spaces.

    Bug 24269

  • Fixed a bug that caused floating point values to be read incorrectly when using a locale other than English.

    Bug 23016

  • Fixed bugs in entity def files that use True of False as the default value of property type BOOL. BOOL is actually an alias of UINT8 so it only accepts 0 or 1 as its value. Also, a warning message will be printed if trying to intepret a non-integer string value as an integer when reading it from data section.

    Bug 25794

  • Loading of files required by User Data Objects is now done on startup instead of on first use, avoiding file access from the main thread when the first User Data Object is created.

    Bug 17451

  • There is now a 3DS Max preview shader for water_surface.fx and distort.fx.

    Bug 27119

  • Fixed a bug that required you to have some translation in any animation used for an isImpacting Action. Now you can have purely rotational isImpacting Actions.

    Bug 26610

  • If a model action has the feetFollowsDirection flag set to true, the ActionMatcher now only turns the model in the direction of movement if the action also has the isMovement flag set to true. This was causing the model to turn in the wrong direction momentarily while transitioning between some movement and non-movement actions (e.g. while decelerating to an Idle action after walking backwards).

    It will still turn the model to face the direction of the entity.

    Bug 28072

  • Fixed an issue where spot lights would light static objects both statically and dynamically.

    Bug 26610

  • The Zip File System now uses 32 bit numbers for the zip magic. No file format modification is required as the files already had 32 bit magic numbers.

    Bug 26177

  • Models with batching enabled will now display properly inside as well as outside.

    Bug 27377

  • Coroutines now continue to execute correctly after a timeout expires in a nested coroutine.

    Bug 27533

  • A fix was made to the Physics velocity smoothing, and a related change made to the Action Matcher's velocity guessing code to make it more stable. This fixes a bug where the Action Matcher would guess the physics velocity incorrectly, producing glitchy and/or frequent matched action changes.

    Bug 27369

  • If the current space changes due to a call to Proxy.giveClientTo() on the base, the client no longer leaks the previous space it had already loaded.

    Bug 26716

  • Physics.uncorrectedVelocity now includes velocity due to gravity, which allows falling actions to be triggered when using this as an input to ActionMatcher.velocityProvider.

    Bug 27886

  • Fixed a bug where collision detection would fail when colliding straight along the z-axis, close to the left edge of an outdoor chunk.

    Bug 27071

  • Fixed a bug where setting the nodeInfo property of a newly constructed Tracker and then setting it's directionProvider property to None, the Tracker would incorrectly continue to override the node's animation. For example:

    tracker = BigWorld.Tracker()
    tracker.nodeInfo = someNodeInfo
    tracker.directionProvider = None # The tracker would continue to affect the node

    Bug 27903

  • FreeCamera.set now resets the camera yaw and pitch velocity to zero. This avoids having the camera spin due to old velocity data when switching from another camera type to the FreeCamera.

    Bug 28067

6. Known Bugs & Limitations

  • The web browser capabilities of the BigWorld client are currently limited as follows:

    • Mozilla 1.9 (Firefox 2.0) is currently being used in the BigWorld client. (MPL License)

    • Flash components interaction is limited (dragging and some other mouse operations do not work).

    • Flash movies are shown in smaller windows than their actual original window. Sometimes you will need to use lower web page resolution when using flash movies.

    • HTML files can't be loaded from zipped resource files.

    • Small memory leaks might occur when navigating to multiple web pages multiple times.

    • Mozilla is currently disabled in PyModule_Hybrid. Customers wanting to debug python related web stuff can enable mozilla by not defining DISABLE_LLMOZLIB in mozilla_web_page.cpp. Warnings about missing dlls will be displayed while running PyModule_Hybrid in that case, but everything should still work as usual.

    • Some websites which capture the keyboard input might not work correctly when Mozilla doesn't capture the keyboard by being focused for keyboard events (see MozillaWebPageInterface::focusBrowser). This usually happens when supporting in game IME.

  • Bloom now requires shader model 2 or better because it is part of the new PostProcessing framework. The other shader model 1.1 full screen effects (heat shimmer and player fader) are unaffected.

  • While the debugging consoles (e.g. the Python console) now support arbitrary Unicode characters, some wider character sets will be clipped (e.g. Chinese). This is due to the widestChar property not being set for the system fonts (See the Fonts chapter in the Client Programming Guide), since non fixed-width fonts are not supported in the debugging consoles.

    If wide character output is required when debugging Python scripts, an alternative is to connect to the BigWorld client Python console using a telnet client and set the output character encoding to UTF-8.

    Bug 12713

  • The soft keyboard for the Traditional Chinese IME (i.e. Taiwanese) will not display correctly whilst in full screen mode.

    Bug 27719

  • The shimmer channel is incompatible with using FlashText & FlashGuiComponent objects as GuiAttachments. If you wish to do this, the shimmer channel will need to be disabled, or you could modify the Scaleform renderer to not use the alpha channel.

    Bug 26887

  • Due to how the decal system works, decals may cause visual artifacts (e.g. floating decals) on models that have a collision BSP that is significantly different to the visual mesh.

    Bug 26222

  • Some fonts require an EffectMargin of 1 pixel to work around idiosynchronacies in GDI+; in one example measureString returns 7*15 and drawString then draws a 7*16 block of pixels.

    Bug 12713

  • Entity traps (i.e. those created via Entity.addTrap) will not trigger correctly if the same number of entities enter and leave within a single tick (even if the actual entities change).

    Bug 27634

  • The client may crash if Python scripts try to execute import statements while the engine is shutting down. For example, this may happen if import is called from Entity.onLeaveWorld.

    Bug 27743

  • Nvidia PerfHUD cannot be used as it is incompatible with the D3DCREATE_MULTITHREADED flag which is needed for the renderer to run.

    Bug 27358

BigWorld Technology 1.9.6.12 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.11 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.10 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.9 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.8 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.7 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.6 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.5 Client Release Notes


1. Bug Fixes

  • Fixed a problem that could cause a passenger not to be positioned on its vehicle. This could occur if the entity's vehicle left and re-entered the AoI, leaving the passenger referring to the old instance.

    Bug: 27803

BigWorld Technology 1.9.6.4 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.3 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6.2 Client Release Notes


1. Bug Fixes

  • Added the missing src/lib/third_party_integration library.

    Ticket # 1799

BigWorld Technology 1.9.6.1 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.6 Client Release Notes


1. Overview

  • BigWorld Technology 1.9.6 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes and highly important features which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • Multiple bug fixes were done in this version.

3. New Features

  • The application window title can now be changed using the appTitle xml element in the engine configuration file.

4. Changed Features

  • Added a (commented out) #define in pymodelnode.hpp, THROW_UNLATCHED_NODE_EXCEPTIONS. If this is turned on, then an exception is thrown if a PyModelNode matrix value is used before it's initialized. The most common symptom of this is models or particle systems 'not displaying', or more likely, displaying at the world origin, i.e. not where you would expect.Bug 26732

5. Bug Fixes

  • Multiple water objects now share a common timer for texture animation. This makes it easier to synchronise multiple water bodies. Ticket # 1270

  • Fixed an issue where impacting animations would reset the model scale to (1,1,1) if the scale was less than 1.0. Bug 27001

  • Fixed a rare crash caused by a race condition in terrain streaming. Ticket # 1576

  • Improved performance scalability for the function SimpleGUI::filterList(), which is used to detect enter/leave GUI events. Ticket # 1432

  • Fixed an uninitialised variable in AvatarFilter that caused an assert when optimisations were turned off. Bug 26949

  • The player physics code that checks if the target position in the space has been loaded (in order to disable physics while loading) was performing an intersection test against an uninitialised bounding box. It now checks if the chunk overlappers (i.e. indoor chunks) have loaded their bounding box before testing against it. This fixes a problem where the player could fall through the floor when teleporting into an indoor chunk.Bug 26949

  • Fixed a memory leaked caused by they way Moo::DeviceCallback managed lists of deleted device callbacks. This memory leak was usually minor, but some customers who have modified the engine to perform large-scale static outdoor lighting were greatly affected.Bug 26779

  • Fixed noResize flag for .texformat and texture_detail_levels.xml for the consumer client build.Bug 26884

  • Fixed a bug where animations would lose one Cue key each time they're saved.Bug 27135, Ticket 1577

  • BigWorld.spaceLoadStatus now takes both indoor and outdoor chunks into account (previously it was ignoring indoor chunks). Bug 26721

  • BigWorld.spaceLoadStatus now considers whether or not nearby terrain blocks have streamed at least one LOD. Bug 26951

  • The FantasyDemo icon is now correctly loaded and used by FantasyDemo. New icon is being used and this icon applies for the ICON_BIG and ICON_SMALL window icons.

  • The CAT tool batch file bigworld\tools\cat\cat.bat now correctly runs cat.

  • Client-only entities placed in WorldEditor (i.e. ChunkEntity) now check to see if they are still loading their prerequisites when ejecting chunks and make sure the entity is removed from EntityManager if this is the case. This was causing client-only entities to sometimes "leak" into another space when teleporting quickly between spaces. Bug 27188

  • Changed the order in which operations are performed in ChunkSpace::clear. Previously, the homeless list was being cleared before it was being populated, causing some ChunkItems to live on after the space is cleared. Bug 27188

  • ChunkVLO no longer uses the WANTS_NEST flag. This fixes a minor memory leak when unloading/reloading chunks that contain water. Bug 27188

  • Removed unnecessary logging while using non-relative mouse devices (e.g. pen tablet). It now logs a single message the first time such a device is used. Bug 27185

  • Added a PyObjectPlus::pyDel method which is called just before the PyObject is destructed. SimpleGUIComponent uses this to avoid the situation where the attached script could call on derived classes after the derived class had been destructed but before the base SimpleGUIComponent class was destructed (causing a crash). Bug 27149

  • The portal system now works properly when multiple visible portals lead to the same chunk.Bug 26915

  • The timeout for FantasyDemo loading screen is now set to 180 seconds instead of 60 seconds.Bug 27204

6. Known Bugs & Limitations

  • Although previously advertised, we have not yet included support for Visual Studio 2008. This will be released as part of BigWorld 2.0.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • We do not support models with a node hierarchy greater than 128 elements. This includes bones and joints. If you attempt to add a model that has a hierarchy with a greater depth than this, an error message will be logged and the model may display incorrectly. Bug 20962

  • Currently, BigWorld only supports a maximum of three bone influences per vertex. If the model is defined with vertices that have more than three bones, then only the highest three influencing bones are used. Bug 20719

  • BigWorld does not support non-orthogonal rotation matrices in Visual nodes. The skew will be removed when the matrix is converted to the rotation quaternion in the BlendTransform. In 1.9.1, warnings for non-orthogonal matrices will be issued in DEBUG configuration. In future releases, the visual exporter will ensure the matrices are correct and this warning will be upgraded to an error. Bug 21717

  • There are several known issues with the MatrixProvider and VectorProviders, because they require the caller to manually tick them. As a result some providers are ticked multiple times in the frame, while others are not ticked at all. Bug 23154

  • Visual doesn't support node hierarchy deeper than 128 levels. Bug 23087

  • Zipped assets currently suffer form a loading performance penalty and it is not recommend to zip large directories where loading speed is critical. Bug 23086

BigWorld Technology 1.9.5 Client Release Notes


1. Overview

  • BigWorld Technology 1.9.5 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes and highly important features which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • Multiple bug fixes were done in this version.

3. Changed Features

  • The BigWorld client 'Release' and 'Consumer_Release' build configurations no longer use the 'Whole Program Optimization' compiler option and the 'Link Time Code Generation' linker option. This was done to decrease compilation time and as these options do not provide significant performance benefit. Customers can still enable these options if required. Bug 26870

  • The 'Release_Indie' and 'Consumer_Release_Indie' build configurations have been added to the BigWorld solution files. These configurations are used internally by BigWorld to build executables shipped to Indie customers and are usually not used by BigWorld customers. Bug 26840

4. Bug Fixes

  • A bug has been fixed where keyboard buttons could get stuck in a pressed state. This would occur when a button is pressed, released, and pressed again within a single frame. Ticket # 1353

  • GUI Components' internal state is now updated correctly in their draw method even if they are clipped by a WindowGUIComponent. This prevents event methods being called incorrectly when the components were clipped. Ticket #1403

  • The "Client Settings/Debug Action Matcher" watcher now functions correctly. This watcher can be enabled to display action matcher parameters as a string above each model in the world. Bug 26991

  • The input system now deals with the situation where Windows inserts additional raw shift key-down and key-up messages when using extended keys with num-lock turned on. These inserted events are filtered out and ignored where previously they would generate an event with the code KEY_NONE. Bug 26895

5. Known Bugs & Limitations

  • Although previously advertised, we have not yet included support for Visual Studio 2008. This will be released as part of BigWorld 2.0.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • We do not support models with a node hierarchy greater than 128 elements. This includes bones and joints. If you attempt to add a model that has a hierarchy with a greater depth than this, an error message will be logged and the model may display incorrectly. Bug 20962

  • Currently, BigWorld only supports a maximum of three bone influences per vertex. If the model is defined with vertices that have more than three bones, then only the highest three influencing bones are used. Bug 20719

  • BigWorld does not support non-orthogonal rotation matrices in Visual nodes. The skew will be removed when the matrix is converted to the rotation quaternion in the BlendTransform. In 1.9.1, warnings for non-orthogonal matrices will be issued in DEBUG configuration. In future releases, the visual exporter will ensure the matrices are correct and this warning will be upgraded to an error. Bug 21717

  • There are several known issues with the MatrixProvider and VectorProviders, because they require the caller to manually tick them. As a result some providers are ticked multiple times in the frame, while others are not ticked at all. Bug 23154

  • Visual doesn't support node hierarchy deeper than 128 levels. Bug 23087

  • Zipped assets currently suffer form a loading performance penalty and it is not recommend to zip large directories where loading speed is critical. Bug 23086

BigWorld Technology 1.9.4.5 Client Release Notes


1. Bug Fixes

  • The action matcher was not preserving model scale, and was resetting it to (1,1,1). It now explicitly re-applies the scale at the end of each action matcher tick. Bug 26939

BigWorld Technology 1.9.4.4 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.4.3 Client Release Notes


1. Bug Fixes

  • Removed an unncessary modification to the moon angle calculation which was introduced in 1.9.4.0.

    Ticket # 1564

BigWorld Technology 1.9.4.2 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.4.1 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.4 Client Release Notes


1. Overview

  • BigWorld Technology 1.9.4 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes.

2. Executive Summary

  • Multiple bug fixes were done in this version.

3. Bug Fixes

  • ZipFileSystems are no longer closed and reopened on every read in the client and server. This improves the client loading speed when running from a zip file.

    Ticket # 877

  • The timer handles returned from BigWorld.callback() are now ever-increasing, and unique. This allows double deletion of a callback with no side-effects. The timer handles will run out eventually, but unless you try very hard you probably have around 135 years worth of handles up your sleeve.

    Ticket # 1017

  • Fixed a bug whereby GUI Attachments that were faded out via an AlphaShader would never draw again.

    Ticket # 1079

  • A different port is now used when reconnecting the client. Previously, reconnection could have been delayed.

    Ticket # 1073

  • PyModel::playSound now returns NULL when raising a python exception.

    Ticket # 1053

  • GuiAttachments are no longer drawn while doing Moo::Visual::s_pDrawOverride. This should prevent wrong calculation of TextGUIComponent size when drawing it while doing a draw override.

    Ticket # 1089

  • The BWPersonality handleCharEvent function parameters now contain the correct unicode string. For East Asian languages, this requires setting the correct language in the Windows regional settings for non-Unicode programs.

    Ticket # 1042

  • PyChunkLight and PyChunkSpotLight are now ticked. This fixes PyChunkLights that have bounds or shaders set to Vector4Providers requiring ticking.

    Bug 26399

  • Tab auto-complete now works properly again in the python console.

    Bug 26643

  • Implemented water shader techniques for Shader Model 1.1 and Fixed Function. The previous techniques were stand-ins featuring "TODO" comments. Both FF and SM1 techniques display a reflection texture, although the FF version is restricted to reflecting only the sky, this at least sits the water in the environment properly. SM1 water displays the reflection texture, and the amount and types of objects being reflected are selectable via the graphics settings.

    Bug 26593

  • Fixed a bug whereby the Action Matcher would be confused and play the wrong actions if the entity is on a rotating vehicle.

    Bug 25062

4. Known Bugs & Limitations

  • Although previously advertised, we have not yet included support for Visual Studio 2008.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • We do not support models with a node hierarchy greater than 128 elements. This includes bones and joints. If you attempt to add a model that has a hierarchy with a greater depth than this, an error message will be logged and the model may display incorrectly. Bug 20962

  • Currently, BigWorld only supports a maximum of three bone influences per vertex. If the model is defined with vertices that have more than three bones, then only the highest three influencing bones are used. Bug 20719

  • BigWorld does not support non-orthogonal rotation matrices in Visual nodes. The skew will be removed when the matrix is converted to the rotation quaternion in the BlendTransform. In 1.9.1, warnings for non-orthogonal matrices will be issued in DEBUG configuration. In future releases, the visual exporter will ensure the matrices are correct and this warning will be upgraded to an error. Bug 21717

  • There are several known issues with the MatrixProvider and VectorProviders, because they require the caller to manually tick them. As a result some providers are ticked multiple times in the frame, while others are not ticked at all. Bug 23154

  • Visual doesn't support node hierarchy deeper than 128 levels. Bug 23087

  • Zipped assets currently suffer form a loading performance penalty and it is not recommend to zip large directories where loading speed is critical. Bug 23086

  • Using handleCharEvent For East Asian languages requires setting the correct language in the Windows regional settings for non-Unicode programs.

BigWorld Technology 1.9.3.5 Client Release Notes


1. Bug Fixes

  • Keypad numbers when numLock is on now function correctly and no longer send an incorrect virtual key.

    Ticket # 1045

    Ticket # 1054

BigWorld Technology 1.9.3.4 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.3.3 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.3.2 Client Release Notes


1. Bug Fixes

  • The client now disables IME input for the client window on startup. This means keyboard controls can be used on a system with an IME language installed (e.g. Chinese) without having the Windows IME interfaces pop-up unexpectedly.

    For experimentation purposes, a new Python API has been exposed (BigWorld.enableIME) which allows the Windows IME to be enabled on demand. See the Python API documentation for details.

    Bug 26481

  • Added python documentation for the PyLoft class. Bug 26471

  • MouseTargettingMatrix now produces a world transform positioned on the near plane of the camera rather than just using the camera world position. This was causing problems when the position was being used as a source vector as a parameter to BigWorld.collide while the camera was backed up against a wall. In this case it would often pick the wall behind the camera. Bug 26454

  • Fixed a few problems with the MouseCursor clipped property. It now resets the clipping region when the window is resized (i.e. when the device is reset). It also delays resetting the clipping region when the window comes back into focus until the next engine tick so that it behaves better when the user interacts with the title bar area of the client window (e.g. click+dragging to move the window or clicking on the maximise/restore control buttons). Bug 26478

  • The input system now calls RegisterRawInputDevice twice instead of just once (once for each device explicitly). This works around a bug that exists in the current version of NVidia's PerfHUD tool, allowing mouse input while PerfHUD is running. Support ticket #974

  • A different port is now used when reconnecting the client. Previously, reconnection could have been delayed.

    Ticket #1073

BigWorld Technology 1.9.3.1 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.3 Client Release Notes


1. Overview

  • BigWorld Technology 1.9.3 is the latest version of the BigWorld Technology engine. This version contains multiple bug fixes and highly important features which do not require complicated merges. Future 1.9 releases are expected to mainly contain bug fixes.

2. Executive Summary

  • International keyboards are now supported.

  • A new PyAttachment object allows rendering a smoothed trail which can be used to render a sword trail.

  • Vertex colours and secondary UV's are now supported.

  • The BigWorld FMOD integration has been enhanced to support multiple additional apis.

  • The client now maintains its connection to the server, even when pausing for short to medium durations.

  • Multiple bug fixes were done in this version.

3. New Features

  • The client reports a warning when it does not send a message to the server longer than a threshold. The threshold is configurable by setting the watcher System/Network/SendReportThreshold , the default is 10 seconds.

  • The client now supports international keyboards for text input. There is a new message that gets posted to the scripts called handleCharEvent which gets called after the standard handleKeyEvent if the key that was pressed generates a character. The character input system respects the user's keyboard layout as configured in the operating system, and supports more complex input such as dead keys (e.g. pressing the ' key followed by the e key on a Spanish keyboard layout will cause é to be posted to the character event handler).

    When porting from previous versions of BigWorld, you must add a BWPersonality.handleCharEvent function to your personality script even if it does no processing.

    See the client Python API documentation and the Client Programming Guide for details.

    The Python handleKeyEvent behaviour has remained untouched, however any C++ code that receives KeyEvents (e.g. via the InputHandler interface will need to consider that multiple KeyEvents are triggered while the key is held down due to operating system auto-repeat. To see if the key has only just been pressed, call KeyEvents::repeatCount and check if the return value is 0.

    Bug 24161

  • There is now a clipped property on the GUI.mcursor object. This can be used to constrain the mouse cursor within the bounds of the client area (useful for mouse-look modes when the cursor is hidden).

    See the client Python API documentation for details.

    Bug 24161

  • When using Umbra for scene traversal, occlusion culling is no longer performed for the water reflection when no reflection is needed, this improves the performance of the water.

    Bug 24156

  • Added a new PyLoft object, which is a PyAttachment that renders a smoothed trail, useful as a sword trail for example. See the Python API documentation for more details.

    Bug 23021

  • It is now possible to export vertex colours and/or an additional UV map set. These can then be used in any of the shaders, for examples of usage see the document bigworld/doc/howto_add_vertex_colour_or_second_uv.pdf Bug 19777 & Bug 24220

  • Added two Python API functions, Physics.uncorrectedVelocity and ActionMatcher.velocityProvider. If you hook the two up for the player, the action matcher takes its cues from the intended velocity, corrected for uphill speed scaling, but not corrected for collisions or hitting the maximum slope limit. This can reduce player action 'jitter' when the player collides with objects, or tries to walk up too steep a slope. Whether or not you should use this depends entirely on how your game's actions look in these scenarios; it is completely optional. Bug 24051

  • There is now an optional localTransform attribute on PyModel's node accessor. localTransform is a MatrixProvider, allowing you to attach objects not just to nodes, but to any dynamic reference frame relative to the node. See the python API documentation for further details. Bug 26103, Support ticket 567

  • A number of additional FMOD sound features have now been exposed to Python. See the chapter on sound playback in the Client Programming Guide for details. This required a number of changes to the existing code-base, please refer to the Changed Features section below for important notes about these. Bug 24729

4. Changed Features

  • Client only entities containing properties of type OWN_CLIENT are now considered to be valid client only properties and should exist in an entity's property list.

    Bug 21570

  • Mouse and keyboard no longer use DirectInput, and instead use the raw input API's (i.e. via WM_INPUT). There is no longer an exclusive mode option in the engine configuration XML.

    DirectInput is still used for Joystick support.

    Bug 24161

  • The in-game Python console system has been updated to accept character input via the new char event system. It does not yet accept non-ASCII characters.

    Bug 24161

  • Since the Python console now uses proper text input mechanisms and therefore respects the state of the caps-lock key, CAPS is now no longer the debug key. It is now, by default, the grave (tilde) key. This key can be configured in engine_config.xml (under the debugKeys section). You can specify any key name as listed in Keys.py.

    Bug 24161

  • Removed keyboard joystick emulation mode (emulation joystick input via the keyboard), and removed the joystick text input system from the Python console line editor.

    Bug 24161

  • In order to have joystick controlled player movement, you now need to set Physics.joystickEnabled to True (defaults to False). This was previously enabled via CAPS+J (which was a hardcoded key sequence).

    Bug 24161

  • The engine no longer automatically sets the first created ChunkSpace as the camera space. If your game depends on this behaviour, you will need to modify your scripts to explicitly set BigWorld.camera().spaceID to your newly created space. Keep in mind that this is only really necessary to explicitly set the spaceID for client side spaces that do not have a player entity. If the camera.spaceID == 0 then the camera will automatically be placed into the same space as the player entity.

    Bug 25566

  • Python sky boxes have been generalised slightly, you can now use any PyAttachment (previously was specialised to PyModels). Additionally, the skyboxes are ticked. This allows you to now use particle systems, and animating PyModels as python sky boxes.

    Client sales/support - no bug or support ticket

  • Updated the Python Client API documentation, Client Programming Guide, Content Tools Reference Guide, File Grammar Guide, and the Content Creation Manual to better describe the isImpacting, isMovement and promoteMotion flags on Actions. These options have often been misunderstood, and hopefully the new documentation will clear up any confusion about what they do. Please note that we now intend to remove the promoteMotion option from ModelEditor, since it is redundant, and must be enabled for isImpacting and isMovement actions to work correctly. Please contact BigWorld Support if you have a good reason for us to retain this option.

    Bug 24709

  • Added a new callback called Entity.onControlled(). This callback is called whenever client control of an entity changes from being controlled locally to be controlled by the server. Previously, Entity.onPoseVolatile() was being used for this purpose by script writers for the notification of this condition. The new callback was added due to the fact that Entity.onPoseVolatile() can be called for reasons not related to client control being enabled or disabled. See the client Python API for more details.

    PerlDesk #572, Bug 26169

  • As part of upgrading the support for FMOD, a number of changes have been made which should be taken into account when upgrading:

    • All FMOD Python bindings have been moved into their own "FMOD" module. See the Client Python API documentation for more information on the FMOD module.

    • For the sake of backward compatability, certain sound related functions are aliased from the FMOD module into the BigWorld module (e.g. BigWorld.playSound). However, in order for this aliasing to occur you must import FMOD at some point as early on as possible on client startup (e.g. at the top of your personality script module). It is recommended that you move to the new sound API as the old API is now deprecated.

    • If the FMOD_SUPPORT pre-processor macro is set to 0 in C++, the entire FMOD library and all references to it is compiled out. It no longer generates stub functionality in C++. This stubbing behaviour is implemented in Python itself (see bigworld/res/scripts/client/FMOD.py). Non-FMOD module sound related functions such as PyModel.playSound and sound related properties such as FootTrigger sound prefix will still exist, but will produce no effect.

    Bug 24729

  • Changed the internal list management used by BigWorld.callback(), in order to fix a bug (see Bug Fixes - cancelCallback, below.) A side-effect of the bug fix means that timers queued up to go off at the same time will now be called back in the order that they were added. Previously the ordering was undefined. Note that BigWorld.addCallback( 0.0, fn ) is still guaranteed to be called the next frame, not the current frame - even if the new timer is added during a callback function.

    PerlDesk #634

5. Bug Fixes

  • Exposed BaseCamera.handleAxisEvent to Python. This allows camera motion to be controlled from a joystick if so desired.

    Bug 24161

  • Chunks will now be loaded when necessary in spaces containing multiple geometry mappings. Previously chunks for other space mappings would only get loaded once the camera entered the mapping.

    Bug 25427

  • Fixed a bug in PyModelRenderer where specular lighting from the main scene (e.g. the sunlight) was affecting the models renderered using PyModelRenderer.

    Bug 25712

  • EntityManager no longer holds onto spaces which have been cleared. This fixes a memory leak in the case where the player would leave a space and then enter a new space with a different ID (so the old space pointer never was never getting reused).

    Bug 25816

  • Fixed mesh particles from being incorrectly culled when the particle system is placed into "local" mode.

    Bug 25699

  • Fixed a Python Documentation bug - the Python Particle System Actions are now included in the python API documentation.

    Bug 25614

  • Fixed a crash when creating a PyModelRenderer before any other space had been successfully created and mapped.

    Bug 25566

  • Reinstated the <weight> option for automatic flora creation. Due to the terrain changes in 1.9, this feature was accidentally dropped. Now the feature has be reinstated, but you must associate the weightings in material_kinds.xml, not flora.xml. Please see the file grammar guide for more information.

    Bug 24894

  • Fixed glow for PS3.0 normal map shaders (previously the glowFactor parameter was not having any effect).

    Bug 25168

  • Fixed a problem in PyOutputWriter::printMessage where it would index out of range if an empty string was passed in.

    Bug 25168

  • Fixed a crash on shutdown when running the engine in PyModule_Hybrid mode.

    Bug 25113

  • Stopped the _AssetProcessor.pyd module from crashing when it was being unloaded. Added _AssetProcessor.fini Python call. You should adjust any scripts that use Asset Processor to call this on exit to allow the engine to be cleanly shutdown.

    Bug 25113

  • Fixed a problem in advanced terrain collisions. The collision would occasionally return incorrect results on the edge of low lod terrain blocks.

    Bug 26052

  • Sprite and point-sprite particle renderers were not being reflected in water. Turned off back-face culling for sprites, which wasn't necessary in the first place since sprites always face the camera.

    Bug 23875

  • Fixed a bug caused by .anca file generation calculating numBlocks_ incorrectly. For any animation whose length (num frames - 1) was evenly divisible by STREAM_BLOCK_SIZE (16), the .anca file would not include the final frame of animation.

    Bug 25569

  • BigWorld.resetEntityManager was destroying client-only entities that were waiting for their prerequisites to load even if keepClientOnly was True.

    This bug was showing up in FantasyDemo as the login GUI hanging on the Waiting for Character List screen.

    Bug 26106

  • Adjusted the math used by GUI.Attachment when faceCamera is set to True. It now keeps the component rotating around its own centre point (rather than around the object it is attached to).

    Also added a usage example for GUI.Attachment in Fantasy Demo which can be activated by setting USE_TARGET_GUI_STYLE2 to True in scripts/client/FDGUI/__init__.py.

    Bug 25170

  • GUI.Attachment now ticks the GUI component in the draw method to be certain that component properties such as position have been applied before rendering.

    Bug 25170

  • Fixed a bug in BigWorld.cancelCallback() whereby if you cancelled a timer during a callback function, and that timer was due to go off in the current frame, then the cancel would silently fail, and the timer would still go off. Now you should never have the case whereby you call cancelCallback() and the timer is still called.

    PerlDesk #634

  • Fixed a timing issue when timeGetTime() wraps (every 49.7 days). dTime_ would be calculated as a large, negative value.

    Bug 26187

  • Fixed an issue that could cause BigWorld.serverTime() to be incorrect in high loss environments.

    Bug 26189

  • Fixed the lighting on SpeedTree leaves when set to very high quality. Additional lights will now work, and in the case when there is only the sunlight, the faster pixel shader path will be used.

    Bug 26236

  • Fixed a crash that occurred on some driver/card combinations when changing video mode from full-screen to windowed.

    Bug 26313, 26226

  • Fixed a bug in saveActionQueue / restoreActionQueue for matched actions, the matched action was not being correctly restored and so an animation pop was visible. The currently matched action is now also serialised, so that a playing-matched-action will remember the frame it was playing when restored.

    Support Ticket 719

  • The BigWorld input system now swaps left and right mouse button events based on the Windows user setting.

    Bug 26389

  • Fixed a problem in the avatar physics code where it could crash if you teleported off a vehicle so that in the next tick the vehicle is outside the player entity's AoI.

    Bug 26402

6. Known Bugs & Limitations

  • Although previously advertised, we have not yet included support for Visual Studio 2008.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • We do not support models with a node hierarchy greater than 128 elements. This includes bones and joints. If you attempt to add a model that has a hierarchy with a greater depth than this, an error message will be logged and the model may display incorrectly. Bug 20962

  • Currently, BigWorld only supports a maximum of three bone influences per vertex. If the model is defined with vertices that have more than three bones, then only the highest three influencing bones are used. Bug 20719

  • BigWorld does not support non-orthogonal rotation matrices in Visual nodes. The skew will be removed when the matrix is converted to the rotation quaternion in the BlendTransform. In 1.9.1, warnings for non-orthogonal matrices will be issued in DEBUG configuration. In future releases, the visual exporter will ensure the matrices are correct and this warning will be upgraded to an error. Bug 21717

  • There are several known issues with the MatrixProvider and VectorProviders, because they require the caller to manually tick them. As a result some providers are ticked multiple times in the frame, while others are not ticked at all. Bug 23154

  • Visual doesn't support node hierarchy deeper than 128 levels. Bug 23087

  • Zipped assets currently suffer form a loading performance penalty and it is not recommend to zip large directories where loading speed is critical. Bug 23086

BigWorld Technology 1.9.2.5 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.2.4 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.2.3 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.2.2 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.2.1 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.2 Client Release Notes


1. Overview

  • BigWorld Technology 1.9.2 is the latest version of the BigWorld Technology engine. This version contains the fixes required for releasing the BigWorld evaluation version and urgent fixes required by customers using 1.9.1.

2. Executive Summary

  • Multiple fixes were done to make 1.9.2 shippable as an evaluation version for BigWorld

3. Changed Features

  • The ticking of chunk items has changed. Only chunk items with the WANTS_TICK flag set now receive tick events. In addition, some objects, such as ChunkModel perform tick when they are drawn. Bug 24156

  • TerrainRenderer2 now checks for current pixel shader cap and now reports an error if it is below 2.0. Bug 22951

  • ConsoleGUIComponent.editText now automatically moves the cursor and thus the editing position to the end of the string. Bug 23507

  • Camera events are no longer automatically handled in C++, instead you need to handle them in your personality script. This also gives you the option to choose when to not enpass events, and to choose in what order the events will be passed. Please see the FantasyDemo personality script for examples. Bug 23504

  • Entities that leave the AoI are now explicitly marked as destroyed and attempts to access members other than Entity.isDestroyed, Entity.id, Entity.inWorld or language defined properties prefixed with double underscore will raise an EntityIsDestroyedException. The previous behaviour was undefined but would often manifest as an attribute error. This functionality can be used to make callback functions robust to their entities leaving the world. Bug 22775

  • Added the Evaluation build targets to all libraries and changed the fantasydemo.exe to be built using the Release target. Bug 19756

  • The GUI library now keeps track of the current component that the mouse is over so that it can determine, per-frame, if the mouse focus has changed. This allows the library to correctly post handleMouseEnterEvent and handleMouseLeaveEvent even if the mouse hasn't been moved by the user (i.e. without GUI.handleMouseEvent needing to be called).

    This allows components to move out from under a stationary mouse while ensuring that events are posted (e.g. a scrolling list of items). Additionally, the events will be posted if the component visibility is toggled, or if it is added or removed from the GUI hierarchy.

    Additionally, mouse, keyboard and axis events are not posted to invisible components (nor to components whose parents are invisible). If you want an invisible component to still receive events, set its textureName property to an empty string.

    Bug 23231

  • Made the signature of SimpleGUIComponent.handleMouseEvent script handler more useful. It now passes in dx, dy, dz (rather than just the current screen position which can be accessed globally via GUI.mcursor). See Python API documentation for details.

    Bug 23468

  • The signatures of all other mouse events have been updated to remove the redundant "mouse position" parameter (which was just in screen space). The affected functions are:

    • handleMouseButtonEvent
    • handleMouseClickEvent
    • handleMouseEnterEvent
    • handleMouseLeaveEvent
    • handleDragStartEvent
    • handleDragStopEvent
    • handleDragEnterEvent
    • handleDragLeaveEvent
    • handleDropEvent

    See Python API documentation for details.

    Bug 23468

  • Log messages (e.g. ERROR_MSG( ... ) ) are now compiled in when using the Release build. To compile out log messages please use the Consumer Release target that also removes other development time features such as watchers. Bug 23998

  • Improved AvatarFilter's handling of position error changes. This reduces movements made by stationary entities as the connected player approaches and moves away. Bug 24129

4. Bug Fixes

  • Updated ashes.fx to use "Screen" semantic instead of "GUIResolution" so it uses actual screen resolution for pixel snapping rather than the virtual GUI resolution (i.e. the resolution override). We want to snap to real pixels, otherwise it looks bad and defeats the purpose of pixel snapping.

  • Fixed a bug where any references to watchers from Python (PyAccessorWatcher) still hanging around after Py_Finalize was called would cause a crash. It now prints a warning message if this situation occurs. Bug 24288

  • Fixed a bug where GUI.reSort wouldn't resort children of root components properlly (so someComponent.reSort() would work fine, but GUI.reSort did not). Bug 22596

  • User Data Objects will now get their __del__ method called when they get deleted.

    Bug 24153, Ticket # 85

  • SoundManager::fini now notifies all PySounds that FMOD is being shutdown so that PySound can reset handles to FMOD objects. Previously, the client could crash on shutdown because there were still strong references to PySound objects after FMOD had been released.

  • Removing a child of a SimpleGUIComponent by name was not resetting the childs parent pointer to NULL (in SimpleGUIComponent::removeChild).

  • Fixed crash on shutdown when the Entity Manager had not been reset in the by the personality script's fini() function.

    Bug 24311

  • Fix an issue where fonts would be incorrectly generated if a lost Direct3D device occurred during the creation process. This would appear as having blank fonts.

    Bug 25186

5. Known Bugs & Limitations

  • Although previously advertised, we have not yet included support for Visual Studio 2008.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • Callbacks registered using BigWorld.callback(..) are not guaranteed to be called back in the order they were added,for callbacks within a single frame.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • We do not support models with a node hierarchy greater than 128 elements. This includes bones and joints. If you attempt to add a model that has a hierarchy with a greater depth than this, an error message will be logged and the model may display incorrectly. Bug 20962

  • Currently, BigWorld only supports a maximum of three bone influences per vertex. If the model is defined with vertices that have more than three bones, then only the highest three influencing bones are used. Bug 20719

  • BigWorld does not support non-orthogonal rotation matrices in Visual nodes. The skew will be removed when the matrix is converted to the rotation quaternion in the BlendTransform. In 1.9.1, warnings for non-orthogonal matrices will be issued in DEBUG configuration. In future releases, the visual exporter will ensure the matrices are correct and this warning will be upgraded to an error. Bug 21717

  • There are several known issues with the MatrixProvider and VectorProviders, because they require the caller to manually tick them. As a result some providers are ticked multiple times in the frame, while others are not ticked at all. Bug 23154

  • Visual doesn't support node hierarchy deeper than 128 levels. Bug 23087

  • Under certain conditions the client can starve the network connection while teleporting between spaces. The workaround for this is to increase the amount of preloaded shaders that are common between spaces, or to increase the server/client timeout period. Bug 21601

  • Zipped assets currently suffer form a loading performance penalty and it is not recommend to zip large directories where loading speed is critical. Bug 23086

  • texanim files that override a texture that is used in another texanim file will not always animate correctly. The workaround for this issue is to rename the texanim file to a filename without a corresponding texture file.Bug 24537

BigWorld Technology 1.9.1.2 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.1.1 Client Release Notes


No changes were done for this version.

BigWorld Technology 1.9.1 Client Release Notes


1. Overview

  • BigWorld Technology 1.9.1 is the latest version of the BigWorld Technology engine. This version should allow customers to develop and release their games and is considered a feature complete, fully tested version for the BigWorld 1.9 series.

2. Executive Summary

  • Multiple performance related issues have been fixed in this version providing a 10%-20% performance increase compared to the 1.9.0 version

  • FantasyDemo now has a new UI. This UI includes an Action Bar, multiple dialogs and a minimap. This UI is currently implemented as example code, it will become a supported fully documented API in a future release.

3. New Features

  • Added the onChangeCameraSpace personality script notification method. Please see the client Python API for full details.

  • The main thread affinity of WorldEditor, ModelEditor and Fantasydemo can now be configured in their respective configuration files ( options.xml for WorldEditor and ModelEditor, preferences.xml for Fantasydemo)

  • BWResource::appDataDirectory( company, product ) has been added, to create and return the path to an Application Data directory for storing user-specific application preferences. This is CSIDL_APPDATA from section 4.2 of Microsoft's Data and Settings Management Requirements.

  • BWResource::appCompanyName() and BWResource::appProductName() have been added to return the appropriate string from the current locale's vesion of the currently executing program's version resource.

  • The Consumer build of Fantasydemo now stores its preferences.xml in the CSIDL_APPDATA directory, unless a compile-time flag is set to override it. This will allow Fantasydemo to be run from the Program Files folder under Windows Vista without requiring administrator privileges.

  • Managed directx resources can now be preloaded into videomemory using the method RenderContext::addPreloadResource. This method adds the resources to the list and the render context preloads a few resources from this list every frame.

  • The BigWorld Evaluation suite must be installed and run as an Administrator user on Windows Vista.

  • When using Umbra some types of chunk items render with a depth only pass. This usually improves performance, but not in every case. Specifically in scenes with little overdraw and/or simple pixel shaders the overhead of the depth only pass may be greater than the benefit. The depth only pass can be controlled using the "Render/Umbra/depthOnlyPass" watcher. The default is true.

  • Added new shaders lightonly_uvtransform2_alpha.fx and lightonly_uvtransform2_add.fx

  • SpeedTree now has a quality setting.

4. Changed Features

  • The wind now affects the flora and (dual)_cloud_layer sky boxes. You may have to go back to your flora.xml file and tweak the 'flex' value of your flora visuals to suit. You may also have to re-edit your skyboxes as the Vector2 windSpeed/direction has been replaced with a single windSpeed float (the direction is taken from the weather's wind settings.)

  • BigWorld.loadResourceListBG() has been modified with priority loading so higher priority resources will be loaded before lower priority. (see python documentation for more info)

  • Added a "wrap" option to the Barrier Particle System Action.

  • Blooming on shader 2 and above cards no longer require a full-sized intermediate render target. This greatly reduces its memory footprint, with the only visible change being that it will now miss blooming 1-pixel sized regions.

  • Bloom settings are now accessible via python, see the client Python API for details on the BigWorld.bloomController and BigWorld.bloomColourAttenuation functions.

  • The constructor for AvatarFilter and all subclasses of AvatarFilter now take in an optional AvatarFilter to copy from to allow for a smooth transition when an entity changes to a new filter.

  • Removed TERRAIN_SPECULAR_ENABLE shader macro, cutting the number of required shader compilation combinations in half. This macro was only being used in the old terrain, this is now controlled via the CLASSIC_TERRAIN_QUALITY graphics setting.

  • Refactored EffectMaterial class, it now only contains one ManagedEffect . This functionality was superceded by multiple techniques in a .fx file.

  • Moved EffectManager and EffectIncludes classes into separate source files.

  • Moved effect initialization queue from EffectMaterial to EffectManager .

  • Graph GUI Component now draws all 4 components of the Vector4Provider input.

  • BackBuffer is now exposed as an automatic effect variable.

  • The ActionMatcher now stops the currently matched action when it is decoupled. This was done because any matched action that is looped will continously play and blend with other actions. If you want to recreate this behaviour you should decouple the ActionMatcher and explicity call the action you want.

  • The ActionMatcher now has an option to use the entity's model instead of the owner's model for checking movement / rotations. This can be used to apply the action matcher to models attached to an entity.

  • PyModel now has an option to call move on attached objects. Move is used to rev motors. In particular, this allows the action matcher to apply to models attached to other models.

  • Improved the camera flythroughs to avoid bumpiness and to use the camera directions specified through WorldEditor. They now use a Catmull-Rom spline for their path and direction.

  • MF_ASSERT_DEV( exp ) has been removed from client release configurations. It still remains in all MF_SERVER, EDITOR_ENABLED configurations, and for non-release client configurations (Debug, Hybrid).

  • The function prototype for Filter::input and Filter::getLastInput have changed, they now take posError as an argument (this represents the the amount of uncertainity of the position parameter.)

  • BigWorld.connect's callback status code 'LOGIN_REJECTED_BASEAPPMGR_NOT_READY' has been renamed 'LOGIN_REJECTED_SERVER_NOT_READY'. This code will be returned if a login is attempted before the server has finished initialising its components i.e. before script-driven initialisation has even begun.

  • Moo::RenderContext::addToPrimitiveCount, Moo::RenderContext::addToPrimitiveGroupCount and related methods have been deprecated. These methods were removed as the draw calls and primitive counts are profiled in the calls to the variations of the method Moo::RenderContext::drawPrimitive

  • The SpeedTree integration has been updated to use version 4.2.

  • Added maximumSlope to physics, used by AvatarStylePhysics. Disallows movement into any area that does not have at least one surface less than the allowable slope amount.

  • Added SimpleGUIComponent.horizontalPositionMode and SimplyGUIComponent.verticalPositionMode properties to control how the position of a component is interpreted (e.g. whether they are defined in pixel or clip coordinates). See the Python API documentation for SimpleGUIComponent.position for details.

  • SimpleGUIComponent.widthRelative and SimplyGUIComponent.heightRelative have been deprecated and replaced with widthMode and heightMode. See the documentation for SimpleGUIComponent.width and SimpleGUIComponent.height to see how these new modes affect how the size of the component is interpreted. For existing .gui files, you can use the AssetProcessor to automatically convert to the new size modes (DeprecatedGuiSizeModeFix).

  • Added screenToLocal and localToScreen helper methods to the SimpleGUIComponent class to ease coordinate conversions.

  • It is now possible to override the screen resolution that the GUI uses to perform calculations using GUI.setResolutionOverride. This is useful for scaling UI's defined in PIXEL coordinates.

  • All GUI components now have the pixelSnap setting (was previously only available on text components). This is now implemented at the vertex shader level by snapping the vertices to the nearest pixel boundary. This is useful when trying to achieve 1-1 pixel mapping between GUI artwork and the screen. Pixel snapping is enabled by default, so be aware of this setting if you are using GUI attachments in the 3D scene.

  • All GUI components now default to the "POINT" filter type for newly created components, rather than defaulting to "LINEAR".

  • Added TextGUIComponent.stringDimensions, which returns both the width and height of the given string in pixels.

  • Added ability to preload sound banks as specified in the engine_config.xml file.

  • Extra functionality has been added to the Python Tracker to allow for smooth blending of quick node angle changes. Please see the client Python API for more details on angularThreshold and angularHalflife in BaseNodeInfo object.

  • Increased the fixed frame time when profiling when using either BigWorld.runSoakTest or BigWorld.runProfile.

  • Extra optional parameter have been added to BigWorld.runProfile in order to specify the number of runs to perform and set the csv output file path name root.

  • PyTextureProvider.width and PyTextureProvider.width have been added to give read-only access to the width and height of the referenced texture.

  • Removed legacy definition PRESERVE_V18X_DISCONNECTED from bigworld/src/client/entity_manager.hpp. This macro allowed entity manager to clear all server spaces and entities when disconnected. This behaviour should now be done via python scripts using BigWorld.resetEntityManager and BigWorld.clearAllSpaces (please refer to python documentation for more information)

  • Added load timing functionality to FantasyDemo. Example usage: run fantasydemo.exe with "-sa loadtimer -sa spaces/highlands" to write results to load_timers.csv. This allows users to time loading a space to far plane from command line and could even be part of an automated test. Bug 17882

  • Added the following debug watchers:

    Client Settings/Entity Filter , which enables or disables entity position historical filtering.

    Memory/TextureManagerReckoningFrame , which is the amount of texture being used by textures in the last frame.

    Render/FPSAverage , which is the frames-per-second running average for the last 50 frames.

    Chunks/Loaded Chunks , which is the number of loaded chunks.

    Render/Draw Calls , which is the number of DrawCalls of the previous frame.

    Render/Primitives , which is the number of Primitives drawn in the previous frame.

  • Added initial health levels for the creatures. This is configurable through editing "scripts/common/GameData/CreatureData.py". The table is called healthTable. The young striff was set to 50 health and both the crab and the chicken set to 25.

  • Added functionality to auto-detect graphics settings. The graphics settings and detection criteria are defined in xml. See the Client Programming Guide chapter 9.2.1 for more details.Bug 19890

  • Added a faceCamera option to GuiAttachment. An example usage of this is to attach a text label above a player's head, and have the text label drawn in 3D space, be occluded by the scene and get larger or smaller based on distance to the camera. Please refer to python documentation for more information.

  • SimpleGUIComponent.reSort now also updates the draw order of that component and its children without needing to call GUI.reSort. C++ subclasses of SimpleGUIComponent that specialise calcDrawOrder need to instead specialise calcDrawOrderRecursively. Bug 22596

5. Bug Fixes

  • Fixed a bug where Python timer callbacks were not guaranteed to be called in the order that should have (some callbacks could have been skipped on the frame they should have happend and delayed until a future frame). It now also guarantees that timers that are due at the same time are called in the same order they were setup.

  • Fixed a PyChunkLight reference leak caused by homeless items not being cleared with when the rest of the items in a space are cleared. This avoids a problem where PyChunkLights could reappear in another unrelated space if a client logs off (CAPS+F12) and logs back on again.

  • Fixed an issue that whitespace at the beginning of xml files where causing "createAppropriateSection" to determine the wrong datasection type. All leading whitespace is now ignored when determinining the datasection type.

  • Fixed an issue with the ActionQueue so that actions matched by the ActionMatcher can now be interrupted by calling actions on the same track or actions played on track 0 (primary actions).

  • If BLOOM_FILTER setting is disabled, blur will still work when BloomBlur is set to False.

  • Fixed collide action for particle system so particles defined in local coordinates collide properly with world.

  • DNS errors on logon are now correctly reported to callback passed to BigWorld.connect() .

  • Python code will operate when inside a zipped resource file.

  • The Graph GUI component now draws when it has no associated texture, which is the default.

  • The Gobo component now draws with correct pixel-texel mapping, removing unwanted blurry artifacts.

  • Disabled fixed-function option on client with SM1 graphics card. Fixed function need vertex shader 2.0 no matter whether it is software or hardware vertex processing. SM1 graphics card such as TI4400 enables hardware vertex processing but only support vertex shader 1.1, so would cause a crash.

  • Fixed an issue where Visual BSP trees would never get deleted from their cache in client code.

  • Fixed an issue where static objects using the visual compound optimisation were not being lit by the correct lights.

  • Fixed an issue where ChunkExitPortal::pUmbraModel_ was created with exactly four vertices of the portal, regardless of how many points the portal had.

  • Fixed XConsole bug which would cause the console to spam text if the console string could not fit on a single line after switching to a lower resolution.

  • Fixed a crash bug which could occur when running a flythrough if any new type of UDO is created that doesn't have a name property.

  • Added safety checks for D3D memory allocation failures. This helps prevent crashes in low memory situations. There is also a new personality script callback ("onMemoryCritical") which is triggered when running out of memory.

  • Fixed an issue where Python was not allocating memory using BigWorlds overrides, resulting in crashes when the memory was later freed by BigWorld. An example of this was when Python language encoding tags were used in script. Bug 20720

  • Fixed Visual Studio property pages for Consumer_Release configuration that incorrectly defined _HYBRID instead of _RELEASE. This could have accidently allowed development only code into consumer builds. Bug 20839

  • Fixed a bug in the normal map shaders, they were incorrectly capping the number of omni lights to 2; they are now capped to 4 as would be expected.

  • Fixed a data corruption issue that could occur if streamed animation reads were in flight while animation data was being released. Bug 20031

  • Fixed potential crashes and data corruption when two models were referencing the same animation, one of the models would use the wrong animation cache, causing a crash if the animation cache was freed. Bug 21890

  • Disabled python logging for Consumer builds. Bug 21320

  • Fixed a problem when the client changes spaces. Previously, the space resources would not be released from memory. Bug 20276

  • Ensure that compiled python modules are not written to disk when client is running from zipped resource paths. Bug 18802

  • Fixed a problem when setting the texture property of the mouse cursor, previously it would fail and eventually crash if user tried to set it with a texture provider that supplied a non-rendertarget texture. Bug 21380

  • Water simulation cells will now de-activate when the camera moves a distance away from them. This helps maintain active cells for the movements around the camera. Also, movements will not be added to a water simulation if they are too far away from the camera. Bug 21180

  • Visible texture seams on the borders of the water simulation cells have been greatly reduced for the high quality setting. Bug 18086 and 17257

  • Fixed an issue in SuperModelAction::dress() where the blend ratio for additional tracks was being incorrectly modified. Bug 20869

  • Prevented compilation of shader files in multiple threads simultaneously. Previously, BigWorld's compilation methods could get the wrong include paths for a shader file because they are not thread safe. Bug 21855

  • The full screen back buffer is now created first, at program initialisation. This fixes performance issues with some different video card configurations. Previously the render targets were created the first time they were used. Bug 21485 + 21502

  • The sky, sun and moon rendering has been fixed for older graphics cards. There was an issue where both the sun and moon were visible at midday and midnight as well as the sky dome rendering incorrectly on ATI radeon 7200 cards and possibly other fixed function cards Bug 21731

  • PyModels now have their foam masked out to avoid the glowing effect around players when swimming. Bug 20437

  • The Advanced Post Processing graphics option will now properly check the shader cap when being initialised. Bug 21428

  • The key F4 is now being passed to the player entity if it isn't handled by an earlier handler.

  • Turned on D3D clipping for fixed function cards. There were various problems with artifacts from offscreen primitives that are removed with this change.

  • The client now always passes through argv[0] command line parameter (i.e. application path) to sys.argv in Python.Bug 22452

  • Terrain collision is now performed on the highest level of detail that is available matching the highest level of detail that is set through the TERRAIN_MESH_RESOLUTION graphics settingBug 22489

  • User data object circular references are now broken up when chunks containing one or more of these user data objects are unloaded. Bug 21674

  • Normal mapped shaders using normalmap_specmap.fxh for rendering and lighting now performs lighting consistently with other shaders. This fixes an issue where the some shaders were too bright when doing normal mapped lighting. Bug 19607

  • The parallax_lighting, subsurface_skinned and water_surface shaders now use the proper BigWorld fog parameters. Bug 22585

  • The edges of a terrain block will now longer sparkle at some angles/distances from the camera when multiple blend layers are used. Bug 22178

  • Fixed bug in PyDataSection which would crash the client if no section name was given.Bug 23223

  • WorldApp and CameraApp are now ticked while the client is inactive (i.e. while minimised), which allows chunks to be loaded while minimised. Bug 22915

6. Known Bugs & Limitations

  • Although previously advertised, we have not yet included support for Visual Studio 2008.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The direction of the wind setting that applies to the weather and to particle systems is not the same direction as the wind that gets applied to the flora. Additionally, while speedtrees listen to the weather's wind setting, it is not obvious that the wind in the trees is coming from that direction at all.

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • Callbacks registered using BigWorld.callback(..) are not guaranteed to be called back in the order they were added,for callbacks within a single frame.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • There is no prerequisites support for loading and creating GUI elements.

  • Flora wind is separate from the Speedtree / Particles wind.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • We do not support models with a node hierarchy greater than 128 elements. This includes bones and joints. If you attempt to add a model that has a hierarchy with a greater depth than this, an error message will be logged and the model may display incorrectly. Bug 20962

  • Currently, BigWorld only supports a maximum of three bone influences per vertex. If the model is defined with vertices that have more than three bones, then only the highest three influencing bones are used. Bug 20719

  • Due to changes in optimisation targetting for more recent hardware support, customers may observe performance issues moving from the BigWorld Technology 1.8 releases to the 1.9 releases. If you find that this is the case, please contact BigWorld Technology for assistance to address this. Bug 22100

  • BigWorld does not support non-orthogonal rotation matrices in Visual nodes. The skew will be removed when the matrix is converted to the rotation quaternion in the BlendTransform. In 1.9.1, warnings for non-orthogonal matrices will be issued in DEBUG configuration. In future releases, the visual exporter will ensure the matrices are correct and this warning will be upgraded to an error. Bug 21717

  • There are several known issues with the MatrixProvider and VectorProviders, because they require the caller to manually tick them. As a result some providers are ticked multiple times in the frame, while others are not ticked at all. Bug 23154

  • Visual doesn't support node hierarchy deeper than 128 levels. Bug 23087

  • Under certain conditions the client can starve the network connection while teleporting between spaces. The workaround for this is to increase the amount of preloaded shaders that are common between spaces, or to increase the server/client timeout period. Bug 21601

  • Zipped assets currently suffer form a loading performance penalty and it is not recommend to zip large directories where loading speed is critical. Bug 23086

BigWorld Technology 1.9.0.4 Client Release Notes


1. Bug Fixes

  • Fixed a problem when setting the texture property of the mouse cursor. Previously it would fail and eventually crash, if user tried to set it with a texture provider that supplied a non-rendertarget texture.

  • Fixed a problem with using _malloca and _freea when the memtracker is enabled. In some cases the the memtracker was used to allocate memory and the crt free function was used to free the memory causing the application to crash. This was fixed by always using the crt malloc and free functions when using _malloca and _freea.

  • Backported camera path code and profiling from 1.9.1. This now uses splines for the paths and uses the camera directions specified by the camera nodes. This will make it possible to comparing profiles between versions in a meaningful way.

BigWorld Technology 1.9.0.3 Client Release Notes


1. New Features

  • BigWorld.ThirdPersonTargettingMatrix() is now available. It is a matrix provider that implements the legacy targetting solution, see bug fixes below.

2. Bug Fixes

  • The targetting system now uses the specificed source matrix, instead of implicitly using the camera matrix and moving it towards the source. This allows greater control over the targetting system, especially if implementing mouse cursor targetting. If you want to use the legacy style of targetting, a new MatrixProvider has been created, BigWorld.ThirdPersonTargettingMatrix . Simply wrap your current targetting matrix provider with this one, and set the result as the targetting system source attribute.

  • Fixed an issue in SuperModelAction::dress() where the blend ratio for additional tracks was being incorrectly modified. This means that multiple track animations with morph targets should work correctly.

  • The GUI library now takes into account Direct3D's right-hand exclusive rectangles when calculating scissor rectangles for clipping components.

  • Fixed an issue where Python was not allocating memory using BigWorlds overrides, resulting in crashes when the memory was later freed by BigWorld.

3. Changed Features

  • The pixelshaders for the advanced terrain have been optimised, this improves terrain rendering performance when only sunlight affecting the terrain block.

BigWorld Technology 1.9.0.2 Client Release Notes


1. Bug Fixes

  • The lightonly_uvtransform shaders properly interprets the w parameter of transform properties so they can be used as offsets again.

  • BigWorld.fetchModel() now correctly loads models.

BigWorld Technology 1.9.0.1 Client Release Notes


1. Bug Fixes

  • Fixed bug in TextureManager that incorrectly loaded compressed textures when quality setting was changed which resulted in some missing textures.

  • Fixed a crash when loading space while using fixed function video card.

2. Changed Features

  • Updated to FMod 4.14.04

BigWorld Technology 1.9.0 Client Release Notes


1. Important Notes

  • Please refer to How To Convert to BigWorld 1.9 for more detailed information on migrating from BigWorld 1.8 to 1.9.

  • The BigWorld Technology suite now does some simple XML validation.

    Previously, badly formed XML was allowed, but this resulted in third-party applications being unable to parse XML resources.

    The main source of these problems is spaces in tag names and tag names beginning with numbers, which mostly occurs in three places:

    • .graph files, which have tags based upon a UID, and frequently begin with numbers.

    • Particle systems, which could have spaces in the sub-particle system names.

    • Node names in model files, which quite often have spaces in certain tags.

    In version 1.9, the use of such tags result in a warning being issued. Future versions of BigWorld Technology will make this an error.

    To fix these warnings, you can either manually edit the XML, or you can run AssetProcessor, which finds the locations of these errors (and in the cases of particle systems, models and graph files, fix them for you).

    Badly formed tags should be fixed as follows:

    • Spaces in tags should be replaced with '..' .

      For example, <my tag> should be replaced with <my..tag> .

      Internally what the tag refers to still retains the spaces, so for example, in Python or C++, a sub-particle system's name is referred to in exactly the same way as before.

    • UID tags in .graph files should be prefixed with 'id.' .

      For example, <0897F6FD.4B03ADAD.0F9401B6.C483C775> should be replaced with <id.0897F6FD.4B03ADAD.0F9401B6.C483C775> .

  • The client will only run on processors with the SSE instruction set -- this means that it needs at least an Intel Pentium 3 or an AMD Athlon XP.

    If you wish to run the client on a computer that does not have SSE, then you need to disable the SSE_MATH preprocessor directive in src/lib/math/xp_math.hpp , disable the /arch:SSE option in the project code generation options, and recompile the client.

2. New Features

  • A new advanced terrain engine has been added. The new terrain engine has support for unlimited texture layers, advanced level of detail, configurable height/shadow/normal map resolution and more.

    For details, see the documents:

    • Client Programming Guide 's section Terrain -> Advanced Terrain

    • How To Convert to BigWorld 1.9 's section Converting to Advanced Terrain

    • Content Creation Manual -> Create and Apply Terrain Texture Maps

  • Added visualisation of cell boundaries in FantasyDemo client (enabled via the Left Ctrl + C keyboard shortcut).

    For details on FantasyDemo, see the document BigWorld Tutorial 's section Overview , and Content Tools Reference Guide 's section Starting The Tools .

  • Added support for modifying sound parameters in-game using the FMOD Designer tool, as well as support for reloading soundbanks in-game to retrieve new sound event definitions without having to restart the client.

    For details on sounds in BigWorld, see the document Client Programming Guide 's section Sounds and the Client C++ API documentation.

  • Added the onGeometryMapped callback to the client personality script, to be invoked by the engine whenever a geometry is mapped to the space on the client.

    For details, see the document Client Programming Guide 's section Scripting -> Personality Script -> onGeometryMapped .

  • Added the debug watcher Client Settings/Sky Dome2/Render static sky dome , which toggles the rendering of the static sky dome.

    For details on watchers, see the document Client Programming Guide 's section Debugging -> Watchers .

  • Added support for normal maps and leaf meshes on SpeedTrees.

    For details on SpeedTree, see the document Content Tools Reference Guide 's WorldEditor -> SpeedTree

  • Added the following script functions to clear spaces and entities data: BigWorld.clearAllSpaces and BigWorld.clearEntitiesAndSpaces .

    For details, see the Client Python API documentation.

  • Added two new entries to the graphics settings: OBJECT_LOD (which adjusts object LODing distances) and TEXTURE_FILTERING (which toggles between linear, bilinear, trilinear and anisotropic filtering).

    For details, see the document Client Programming Guide 's section 3D Engine (Moo) -> Graphics Settings .

  • Instances of SpriteParticleRenderer now have the option of specifying the explicitOrientation attribute -- this allows a particle to be aligned to a user-defined plane, instead of always being locked to the viewer direction.

    For details, see the Client Python API documentation.

  • Python console now persists history in the preferences file (Debug and Hybrid builds only).

    For details on the Python console, see the document Client Programming Guide 's section Debugging-> Scripts -> Python Console .

  • Mouse cursor can now take a texture provider to use as mouse pointer.

    For details on how to use this feature, see the Client Python API documentation.

  • Added the noFilter option to the texture format file.

    When set to True, auto-generated mipmaps are created using point filter, instead of linear.

    For details, see the document File Grammar Guide 's section <compress> .texformat , texture_detail_levels.xml .

  • Added the actionScale and moveScale attributes to the PyModel class.

    actionScale sets the speed scale of the model's action's animation, and moveScale sets the speed scale of the model's action's movement.

    For details, see the Client Python API documentation, and src/lib/duplo/pymodel.cpp .

  • Added the SaveActionState and RestoreActionState methods to the ActionQueue class. These allow the state of the action queue to be saved before reloading a supermodel and then restored. This is useful for dynamically swapping models in real time without losing the model's current action data.

  • Added the BigWorld.PyResourceRefs class. This class holds onto resources loaded in the background thread via Entity.prerequisites or BigWorld.loadResourceListBG

  • Added the BigWorld.loadResourceListBG function. This function loads a list of resources in the background thread, and calls a callback function when complete. It passes an instance of BigWorld.PyResourceRefs into the callback function. Note that this behaves exactly like a runtime version of Entity.prerequisites . Script writers can manage the lifetime of the resources via this object. Note that if you upgrade to the new Entity.onEnterWorld method then you have greater control over the lifetime of the entity's prerequisites, as the resources are passed into that method.

  • Added a few new Python API functions that can be used to fade between sky boxes and to control other weather variables. Examples of their usage can be seen in client WeatherSystem.py script, or by pressing CTRL+0 in FantasyDemo for a client-only randomised weather system demo.

  • Added the Distortion channel. This channel is used for objects that want direct access to the main render target as a texture. It is used by the water for its refractions. See the the bigworld/res/shaders/std_effects/distort.fx shader for another example of its usage.

  • The water shader now has a high quality mode that includes simple shore animation and foaming as well as some fogging of the refraction for deep parts of the water.

  • There is now a way to access the depth information of the scene. An MRT texture is created to hold this information. Refer to src/lib/romp/full_screen_back_buffer.cpp .

  • The Moo RenderContext now supports multiple render targets. All previous calls to the d3d device SetRenderTarget should now go through the RenderContext::setRenderTarget(..).

  • There is a new data section type: ZipSection . It implements the creation/loading of zip files that can be used to replace the usage of a BinSection with multiple children. These are especially handy for development time because they allow easy access to internal data structures of previously solid binary blocks. They also support partial loading and compression of the internal files. The .cdata files used for space data, and shader .fxo's are now in this zip format.

  • .fx files may now be preloaded by the application. Doing so will help smooth the frame-rate, but like all preloads it will incur memory usage that exists throughout the lifetime of the application.

  • .fx files can now be built offline using the RebuildShaders.py script. This will build shaders using all possible setting combinations, so that the end-user doesn't have to compile them themselves the first time the client is start (and whenever certain graphics settings are changed).

  • The client can now be run without the source shader .fx files if the corressponding .fxo files exists.

  • Added a new type of script object, the user data dbject, which allows embedding user-defined data in chunk files. A key feature of user data objects is their linkability, which allows both entities and user data objects to link to other user data objects. They can be instatiated in the client or the server.

  • Added the Vector4Morph Vector4Provider class. Please see the client Python API for full details of this class.

3. Changed Features

  • Morph animations no longer blend against each other, this means that you can play back two morph animations at the same time without the result of them being halved. Morph animations can still blend in and out using the action system.

  • The interface of the callback function passed to BigWorld.connect has changed.

    The second parameter is now the status enumeration defined in login_inface.hpp , in string form, and the third parameter is now always provided.

    For details, see the Client Python API documentation.

  • The source file bigworld/src/client/app.cpp has been broken up into multiple files.

    Customers that have modified this file will need to merge their changes.

  • All particle system classes have been moved to a new library, src/lib/particles . All C++ classes no longer inherit from PyObjectPlus , instead they each have a corresponding python wrapper class. This change was made to allow particle systems to be able to be fully loaded in the background thread.

    Customers that have modified this system will need to merge their changes.

  • Warnings are now enabled as errors on all VC2005 projects (using the /WX compiler flag).

  • Unknown D3D error codes will now be output in the more useful hexadecimal format. Also, the DVDERR_DRIVERINTERNALERROR error is now handled.

  • SpeedTree branch geometry is now used for collision detection, along with the collision volumes defined in SpeedTreeCAD.

    For details, see the document Content Tools Reference Guide 's section WorldEditor -> SpeedTree -> Collision Geometry .

  • The custom implementation of Queue in the FantasyDemo script was replaced in favor of Python's standard version.

  • The collision test in BigWorld.addDecal has been changed to detect collisions in the same way a straight call to BigWorld.collide would.

    Previously, it would ignore collisions detected at or closer to 0.1 metres from the origin of the collision ray. This behaviour can be reverted by setting PRESERVE_V18X_COLLISION_OFFSET to 1 in src/lib/duplo/decal.cpp .

    For details, see the Client C++ API documentation.

  • The shaders in the bigworld/res/shaders/std_effects folder have been renamed from character_lighting* to normalmap* .

    For details, see bigworld/res/shaders/std_effects .

  • SpeedTree LODing now takes the size of the tree into consideration when computing the LOD value (when LOD Model is -2).

    For details, see the document Content Tools Reference Guide 's section WorldEditor -> SpeedTree -> Level Of Detail .

  • SpeedTree integration now links against y-up versions of SpeedTree libraries.

  • For easier maintenance, the bigworld/res/shaders/speedtree/speedtree.fx file has been refactored into four separate FX files.

    For details, see bigworld/res/shaders/speedtree .

  • The Moo::TextureCompressor has been changed as described below:

    • The constructor now defaults to useful values.

    • The method convertTo (for in-memory conversion) has been created.

    • Converted textures now live in managed pool, rather than in system memory.

    For details, see the Client C++ API documentation.

  • The client no longer clears all entities and spaces data when disconnected.

    It is now the script programmer's responsibility to call BigWorld.clearAllSpaces and BigWorld.resetEntityManager when a disconnection occurs. This behaviour can be reverted back to the way 1.8.x worked by setting the #define PRESERVE_V18X_DISCONNECTED in bigworld/src/client/entity_manager.hpp .

    For details, see the Client Python API documentation.

  • An optional argument was added to BigWorld.resetEntityManager , which allows the player entity to survive the entity manager clear-up.

    For details, see the Client Python API documentation.

  • If the <res> /resources.xml 's LoadingScreenGUI tag has an associated script object, then it is no longer automatically added to the GUI root.

    In this case, the GUI script should add it itself (most probably from the onLoad notification method). If the loading screen GUI does not have an associated script, then the old behaviour is preserved -- i.e. , it is added to the GUI root after the load is complete.

    For details on how to use this tag, see the document Client Programming Guide 's section Scripting -> Personality Script -> init , and How To Implement A Progress Bar 's section Implementing Progress Bars .

  • The SimpleMutex class is now implemented using a CRITICAL_SECTION , instead of a Mutex .

  • The zlib library has been updated from version 1.2.1 to version 1.2.3. This version includes some security fixes. See mf/src/lib/zip/ChangeLog for more details.

  • The App constructor now takes two optional parameters for compile time string and build id, this removes a circular dependency between bwclient lib and host executable.

  • The callNextFrame function and other callback related functions have been moved from client/script_bigworld.cpp to pyscript/py_callback.cpp . This removes a circular dependency between several libs and bwclient lib.

  • The FantasyDemo solution now explicitly includes dependencies for each module, rather than having FantasyDemo project include all other modules.

  • The math3D library has been been renamed to math on Win32.

  • The terrain code (for both classic and new terrain) has been moved from Moo to the new Terrain library

  • The Matrix::row() set method now takes a Vector4 input parameter, rather than returning Vector4 & . This avoids possible strict aliasing issues when compiling under GCC.

  • Water no longer creates a second render target for refraction. It now uses the new Distortion channel.

  • Movements in water now have a particle system associated with them, causing a splashing effect.

  • Respacker now uses a null ref d3d device. This allows creation of d3d resources (e.g. .dds files) without having a d3d device present.

  • Dynamic lending as been added to ensure dynamic objects are correctly rendered when crossing the boundaries between chunks.

  • The loadSoundBank, unloadSoundBank and reloadSoundBank methods have been replaced with loadEventProject, unloadEventProject and reloadEventProject, respectively, since these methods handle loading and unloading a FMOD Event project file and not a sound bank.

  • Building the PyModule_Hybrid configuration no longer require the user to modify the project dependencies.

4. Bug Fixes

  • The client no longer uses a modeIndex value in the preferences.xml file to choose which screen resolution to default to -- it now uses the screenWidth and screenHeight parameters. This fixes issues with copying the preferences.xml file between computers with different devices, as different devices may use different modeIndex values.

  • Cues are now always correctly exported from 3dsMax -- the time unit for cues was in seconds, when it should have been in frames. Developers worked around the problem either by multiplying the cue time by the frame rate, or by dividing the frame time by the frame rate. This workaround generally hardcoded the framerate at which animations could be exported, and is no longer needed.

  • RenderContext::changeMode now uses the correct window size when switching from full-screen to windowed mode.

  • BigWorld.windowSize now does not return out-of-date values.

  • The shader compilation does not cause memory leaks anymore, which happened because the source .fx file was kept in memory after use. The shader caching was also changed to only compile the shader, and not load it into memory -- a shader will now only be loaded into D3D when it is touched in a preload. This saves loading the entire shader set when they will not be used.

  • Python console history has been changed to no longer store empty command lines.

  • SpeedTrees' transforms do not behave erratically anymore if a non-uniform scaling is applied.

  • Chunk manager now updates the minimum distance to the farthest loaded chunk when the far plane distance changes.

  • Cue responses are no longer culled before being played.

  • Camera can now be moved into a space other than the one the player is currently in.

  • Decals and splodges on terrain with non-zero height are now correctly rendered.

  • Stopping a DogWatch that has not been started does not corrupt memory anymore.

  • Animations now do not inherit bone information only from the lowest level LOD of a SuperModel.

  • GUI components now save and load the mapping coordinates and all focus flags.

  • Fixed a crash in Pixie.createBG.

  • Pixie.createBG now loads the entire system in the background thread. This fixes a problem where the use of Pixie.createBG would cause a spike in the frame rate.

  • Chunk Particle systems now load the entire system in the background thread. This fixes a problem where the use of Chunk Particle systems would cause a spike in the frame rate.

  • Fixed possible issues when using BigWorld.spaceLoadStatus() after teleporting between spaces.

  • Worked around possible strict aliasing issue in PackedSection::asMatrix34()

  • Lens flares now set their own FVF before drawing, avoiding related d3d errors.

  • Speedtree optimised billboards will now adher to the reflection visible flags properly.

  • Fixed some problems with the priorities of lights causing flickering. The first directional light gets the highest priority, followed by the point lights and spot lights.

  • The light container selection for visual compounds has been improved. It now uses the combined bounding box of all the objects to determine the lights.

  • The effect visual context will now check the maximum number of lights available instead of blindly uploading everything. This fixes some problems with lighting when lots of lights are around.

  • Some speedtree bsp files had incorrect rotations applied, this has been fixed.

  • "Don't Render" materials will no longer cast shadows.

  • Water simulation will now work at the same time that rain is active on a water surface.

  • Decals will now fog correctly when using the fixed function pipeline.

  • The "mipSkip" flag no longer gets applied to cube maps.

  • Speedtree LOD values are now calculated from the closest point to the eye instead of always being the base of the tree. This fixes some lodding issues when trees are scaled.

  • A missing rain_splashes.xml no longer causes a crash.

5. Deprecated Features

  • The BigWorld.windowSize method has been deprecated -- use BigWorld.screenSize instead.

    For details, see the Client Python API documentation.

  • The Entity.enterWorld method has been deprecated -- use Entity.onEnterWorld instead.

    For details, see the Client Python API documentation.

  • The Entity.leaveWorld method has been deprecated -- use Entity.onLeaveWorld instead.

    For details, see the Client Python API documentation.

  • Removed IdentityMatrix class, you can still use Matrix::identity constant.

6. Known Issues

  • Although previously advertised, we have not included support for Visual Studio 2008 out-of-the-box for 1.9.0

  • The client cannot recover after a device loss on Windows XP or Vista. This issue will occur when any of the following occurs.

    • User presses CTRL+ALT+DEL.

    • User locks the computer (Windows Key + L)

    • Vista only: The UAC dialog is activated by any program (including FantasyDemo) while FantasyDemo is running.

  • BigWorld does not support multiple client spaces.

  • Resource files compressed using the WinZip command-line tools have known issues with BigWorld resource manager. As a workaround, either the WinZip GUI or the 7-Zip command-line tools can be used.

  • Python code will not operate when inside a zipped resource file, whether compressed or not.

  • All spotlights are treated as specular regardless of whether they have the specular set.

  • Occasionally, terrain polygons (on new terrain spaces) are clipped incorrectly on GeForce 6600 cards.

  • The ENABLE_CULLING_HUD option defined in mf/src/lib/cstdmf/config.hpp has been disabled. If it is re-enabled then crashes can occur.

  • Running both the client and the tools simultaneously can exhaust video memory and cause undefined behaviour in both applications.

  • The /3gb Windows boot option can sometimes cause instability with DirectX applications such as the client.

  • GUI files are not completely loaded in the background using Entity.prerequisites or BigWorld.loadResourceListBG . Only the XML file describing the gui tree is loaded. To workaround this, you will need to load the gui XML file in the background (or preload it), and parse the gui file looking for texture maps, then load the texture maps in the background using BigWorld.loadResourceListBG .

  • The direction of the wind setting that applies to the weather and to particle systems is not the same direction as the wind that gets applied to the flora. Additionally, while speedtrees listen to the weather's wind setting, it is not obvious that the wind in the trees is coming from that direction at all.

  • .chunk files packed with res_packer cause the client to assert and crash.

  • The parallax_lighting pixel shader produces incorrect results for spot lighting. When you have one or more spot lights inside a shell that are using dynamic lighting, at least one will produce an incorrect lighting result.

  • There is currently no way to destroy an individual decal, only the whole set. This makes it difficult to use decals on models that change, for example, a wall that collapses.

  • Particles using local-space rendering do not collide correctly using the Collide Action.

  • Callbacks registered using BigWorld.callback(..) are not guaranteed to be called back in the order they were added,for callbacks within a single frame.

  • MSAA or Multi-sample Anti-aliasing is not available due to the way the post-processing filters currently use the back buffer.

  • There is no prerequisites support for loading and creating GUI elements.

  • Flora wind is separate from the Speedtree / Particles wind.

  • The Action matcher plays its matched actions on Track 0, thus overriding the track number you may have selected for the action in ModelEditor. Having said this, the interrupt/blend rules for actions still work consistently, so any actions played explicitly on track 0 will interrupt action matched actions. However it is worth noting that the action matcher is implicitly overriding the track number allocated.

  • Large client spaces can exhibit floating point precision issues depending on the distance from the origin. This can become aparent as early as 6-7,000 units distance from the origin if models use a lot of overlapping geometry. Animation can become jerky at about 15,000 units from the origin.

  • An assert is triggered when running the client and power saving mode kicks in. (i.e. the laptop is running low on batteries)

  • Models whose set of material groups and tints do not match those names used in its LoD parent will sometimes render using an incorrect material.

  • The BigWorld client is known not to compile using Express versions of Visual C++.

  • Server discovery will crash the client if it is invoked without its callback being set.

  • The direction cursor is currently unaffected by changes in rotation of the player's vehicle.

  • A speedtree without any billboard information will cause a crash.

  • Terrain rendering issues on the RADEON 9600XT, the diffuse pass is not working, although it should be.