BigWorld Technology 2.1. Released 2012.
Copyright © 1999-2012 BigWorld Pty Ltd. All rights reserved.
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.
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
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.
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
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 directoryres/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 viaopen()
will no longer be relative to the BigWorld resource tree as defined in yourpaths.xml
file. Files are now relative toos.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
ofBigWorld.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 ifreloadEvents
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
andPhysics.collideObjects
. To enable use of the new flags use thePhysics.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
Visual Studio property sheets have been moved from
bigworld/src/lib/cstdmf
tobigworld/src/build/vsprops
.Added
ROAMING_APP_DATA
,LOCAL_APP_DATA
, andMY_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
andclient3
underbigworld/src/examples
. Theclient4
example has been moved tobigworld/src/examples/client_integration/python/simple
.Bug 32638
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
andSimpleGUIComponent.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
ofBigWorld.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 forBigWorld.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
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
andFlashGuiComponent
objects asGuiAttachments
. 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 ifimport
is called fromEntity.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
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 theServerMessageHandler
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 callingprocessInput()
, they should also be checking the status of theLoginHandler
instance passed intoonSwitchBaseApp()
, by queryingLoginHandler
::done()
. Oncedone()
returns true, the client should callServerConnection
::enableEntities()
to tell the server that it is ready for entity updates.In the mainstream client, this logic is implemented by
EntityManager
::onSwitchBaseApp()
and inConnectionControl
::tick()
.Bug: 31509 / Ticket : 3076
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
directory has been moved totrunk
/src
.trunk
/bigworld/srcIn addition, the BigWorld client Visual Studio solution is no longer contained within
fantasydemo/src
and is now fully contained withinbigworld/src/client
. The default build location for the client executable is nowbigworld/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>
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()
andBigWorld.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 theBigWorld.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
andlightonly_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 aPyMaterial
object.Bug 25223
Added
drawSplodges
attribute toPySceneRenderer
.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()
andBigWorld.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 onPyChunkLight
andPyChunkSpotLight
.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
inbigworld/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 thespace.settings
file for that space. You can then callBigWorld.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 toGUIAttachment
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 inengine_config.xml
. It is enabled in Fantasy Demo.Ticket 27955
In order to make the source code location for BigWorld components consistent, the
directory has been moved totrunk
/src
. This needs to be considered when merging source code changes from previous versions to the latest version.trunk
/bigworld/srcBug 10156
The BigWorld client Visual Studio solution is no longer contained within
fantasydemo/src
and is now fully contained withinbigworld/src/client
. The default build location for the client executable is nowbigworld/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 ifpaths.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
, andhandleAxisEvent
now take a single parameter (aPyKeyEvent
,PyMouseEvent
, andPyAxisEvent
respectively). Existing Python scripts will need to be updated accordingly. See the Python API documentation forPyKeyEvent
,PyMouseEvent
, andPyAxisEvent
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 withinkey_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, usePyKeyEvent.isRepeatedEvent()
inhandleKeyEvent
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 whenSimpleGUIComponent.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 settingmouseButtonFocus
to True andfocus
to False respectively).Bug 19477
SimpleGUIComponent.handleClickEvent
now only gets called on components that have theirmouseButtonFocus
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
andSpell.py
, which can be found infantasydemo/res/scripts/client
.Bug 27324
The default value for
waitVSync
indevice_app.cpp
and inpreferences.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 themaxVBSize_
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
andCursorCamera
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
, theminPitch
and maxPitch values set inBigWorld.dcursor()
including settings inengine_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
andPyGUIComponentColour
classes (returned by theSimpleGUIComponent.position
andSimpleGUIComponent.colour
attribute accessors) now hold onto a weak reference (rather than a strong reference) to theSimpleGUIComponent
they belong to. This avoids scripts unwittingly holding onto a strong reference to theSimpleGUIComponent
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 inSimpleGUIComponent.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 theChunkPortal
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 usingEntity.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
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
andscreenToLocal
methods now take the scroll property ofWindowGUIComponent
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 toActionMatcher.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 constructedTracker
and then setting it'sdirectionProvider
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
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 asGuiAttachments
. 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 ifimport
is called fromEntity.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 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.
The application window title can now be changed using the appTitle xml element in the engine configuration file.
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
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 27001Fixed 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 # 1432Fixed 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 26721BigWorld.spaceLoadStatus
now considers whether or not nearby terrain blocks have streamed at least one LOD. Bug 26951The 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 fromEntityManager
if this is the case. This was causing client-only entities to sometimes "leak" into another space when teleporting quickly between spaces. Bug 27188Changed 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 27188ChunkVLO
no longer uses theWANTS_NEST
flag. This fixes a minor memory leak when unloading/reloading chunks that contain water. Bug 27188Removed 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 thePyObject
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 baseSimpleGUIComponent
class was destructed (causing a crash). Bug 27149The 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
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 inmf/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
orBigWorld.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 usingBigWorld.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 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.
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
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 #1403The "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
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 inmf/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
orBigWorld.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 usingBigWorld.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 is the latest version of the BigWorld Technology engine. This version contains multiple 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
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 inmf/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
orBigWorld.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 usingBigWorld.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.
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 toBigWorld.collide
while the camera was backed up against a wall. In this case it would often pick the wall behind the camera. Bug 26454Fixed 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 26478The 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 #974A different port is now used when reconnecting the client. Previously, reconnection could have been delayed.
Ticket #1073
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.
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.
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 standardhandleKeyEvent
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 receivesKeyEvents
(e.g. via theInputHandler
interface will need to consider that multipleKeyEvents
are triggered while the key is held down due to operating system auto-repeat. To see if the key has only just been pressed, callKeyEvents::repeatCount
and check if the return value is 0.Bug 24161
There is now a
clipped
property on theGUI.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
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 thecamera.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 thatEntity.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
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 ifkeepClientOnly
wasTrue
.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
whenfaceCamera
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 settingUSE_TARGET_GUI_STYLE2
toTrue
inscripts/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
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 inmf/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
orBigWorld.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 usingBigWorld.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 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.
Multiple fixes were done to make 1.9.2 shippable as an evaluation version for BigWorld
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
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
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 inmf/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
orBigWorld.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 usingBigWorld.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 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.
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.
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()
andBWResource::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 theCSIDL_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 istrue
.Added new shaders lightonly_uvtransform2_alpha.fx and lightonly_uvtransform2_add.fx
SpeedTree now has a quality setting.
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 oneManagedEffect
. This functionality was superceded by multiple techniques in a .fx file.Moved
EffectManager
andEffectIncludes
classes into separate source files.Moved effect initialization queue from
EffectMaterial
toEffectManager
.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 allMF_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 methodMoo::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
orBigWorld.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
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 20869Prevented 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
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 inmf/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
orBigWorld.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 usingBigWorld.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
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.ThirdPersonTargettingMatrix()
is now available. It is a matrix provider that implements the legacy targetting solution, see bug fixes below.
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.
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.
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 insrc/lib/math/xp_math.hpp
, disable the/arch:SSE
option in the project code generation options, and recompile the client.
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
andBigWorld.clearEntitiesAndSpaces
.For details, see the Client Python API documentation.
Added two new entries to the graphics settings:
OBJECT_LOD
(which adjusts object LODing distances) andTEXTURE_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 theexplicitOrientation
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
andmoveScale
attributes to thePyModel
class.actionScale
sets the speed scale of the model's action's animation, andmoveScale
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
andRestoreActionState
methods to theActionQueue
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 viaEntity.prerequisites
orBigWorld.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 ofBigWorld.PyResourceRefs
into the callback function. Note that this behaves exactly like a runtime version ofEntity.prerequisites
. Script writers can manage the lifetime of the resources via this object. Note that if you upgrade to the newEntity.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.
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 fromPyObjectPlus
, 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 toBigWorld.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 insrc/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 fromcharacter_lighting*
tonormalmap*
.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
andBigWorld.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
inbigworld/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
'sLoadingScreenGUI
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 aCRITICAL_SECTION
, instead of aMutex
.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 fromclient/script_bigworld.cpp
topyscript/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 tomath
on Win32.The terrain code (for both classic and new terrain) has been moved from
Moo
to the newTerrain
libraryThe
Matrix::row()
set method now takes aVector4
input parameter, rather than returningVector4 &
. 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.
The client no longer uses a
modeIndex
value in thepreferences.xml
file to choose which screen resolution to default to -- it now uses thescreenWidth
andscreenHeight
parameters. This fixes issues with copying thepreferences.xml
file between computers with different devices, as different devices may use differentmodeIndex
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.
The
BigWorld.windowSize
method has been deprecated -- useBigWorld.screenSize
instead.For details, see the Client Python API documentation.
The
Entity.enterWorld
method has been deprecated -- useEntity.onEnterWorld
instead.For details, see the Client Python API documentation.
The
Entity.leaveWorld
method has been deprecated -- useEntity.onLeaveWorld
instead.For details, see the Client Python API documentation.
Removed
IdentityMatrix
class, you can still useMatrix::identity
constant.
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 inmf/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
orBigWorld.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 usingBigWorld.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 withres_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.