Release Notes for Build 149

From C4 Engine Wiki
Jump to navigation Jump to search

Release date: July 8, 2008

  • The graphical scripting system in the engine has been replaced with a far more powerful design that supports variables, loops, and conditional execution. All previously existing scripts will continue to run without modification. Details about the new scripting system are too extensive to include here, but they can be found in the Graphical Scripting Language article.
  • The Function::Execute() function now takes a pointer to the method that is calling it. This allows the function to set the method's boolean result value in the new scripting system.
  • The engine's texture format has been changed in this release. The file extension is still .tex, and the engine can still read the old format. However, in the next release, the old format will no longer be supported. We have included a conversion utility in this release that will scan your Data folder and convert all .tex files to the new format automatically. All textures that ship with the engine have already been converted. To use the conversion utility, run the engine and type convtex in the command console. This will convert all .tex files in your Data folder to the new format in place. Be sure that you have a backup copy of your custom textures before running this utility.
  • The Texture Viewer tool has been renamed to Texture Tool, and all the code that creates textures of any kind has been moved to this plugin. Generated textures (light projections, shadow maps, environment maps, and ambient spaces) are now made using the gentex console command.
  • The ambient space feature has been replaced with a new rendering method for static volumetric ambient occlusion. Ambient spaces are still placed in zones as they were previously, but now they only encode directional occlusion that modulates the ambient light intensity as opposed to encoding the ambient light intensity itself. More ambient lighting capabilities will be added to near-term future releases.
  • The SceneImportPlugin class has been changed slightly so that it's possible for an import plugin to display a dialog before importing a scene. (See the Collada import plugin for an example.) The SceneImportPlugin::ImportGeometry() function now takes a pointer to the editor window as a parameter, and the importer must call the Editor::ImportScene() function in order to complete the import.
  • The Collada importer now offers the option to attempt to import texture maps while it is importing a scene. When this option is turned on, any qualified diffuse map, normal map, gloss map, or emission map specified in a Collada file will be imported with the Texture Tool using the default settings. A texture map qualifies for import if its path name contains /Import/ so that the importer recognizes it as being in the C4 Import folder. If the Collada file specifies the wrap modes for a texture map, then they are respected when a texture map is automatically imported.
  • A Cleanup button has been added to the Material Manager. Clicking this button causes all duplicate materials to be merged into one material. Materials are considered equivalent if they produce the same shaders.
  • The Entity class has been renamed to the Model class. To update your code, make the case-sensitive global replacements of Entity to Model and entity to model. This will have the effect of inadvertently changing the word "identity" as well, so you'll need to also make the replacement of dmodel to dentity to clean it up.
  • A new toggle button has been added to the World Editor that turns display of models on and off. Models are no longer displayed as a bounding box.
  • A model registration now takes one more parameter that specifies the human-readable model name to be displayed in the World Editor.
  • A new multi-zone referencing system has been implemented that generalizes some older techniques used in the engine for transition zones and effects that span multiple zones. Most of this system is internal to the engine and not exposed to higher-level code, but there's one new addition that game programmers need to be aware of. Model nodes have always automatically reparented themselves to the zones that contain them as they move around, but now when a model exits a zone, it also attaches a special reference to the zone that survives until the model's bounding volume has completely left the zone. This allows large models to span multiple zones and to be correctly identified by the visibility determination system. The whole thing is automated, so no code needs to be written to take advantage of this feature.
  • The kEntityAttached flag, previously used to signify that a model is attached to another model in some way, has been removed from the engine. The Model class now determines whether models are attached to other models automatically.
  • Under Windows, the Sound Manager now uses XAudio2 instead of DirectSound. This should be completely transparent to all higher-level code, but you will need to upgrade to the latest version of DirectX. The engine will only compile with the June 2008 DirectX SDK or later.
  • The streaming capabilities in the Sound Manager have been generalized so that it's possible to stream sound data from any kind of source. The method for setting up a streaming wave file has changed—see the Working with Sound article for more information.
  • A color scale and bias operation has been added to the post-processing pass. The World::SetFinalColorTransform() function can be used to specify a scale color S and a bias color B that are applied to the final rendered color C to yield SC + B. The red, green, and blue channels of these colors can be any floating-point values that produce the desired effect. The scale and bias colors only affect rendering of the current world and not the graphical user interface.
  • The WorldRenderTask() and InterfaceRenderTask() functions have been added to the Application class. These functions are called once per frame after the world has been rendered and after the graphical user interface has been rendered, respectively.
  • The Display Manager will now allow any window size to be specified by the $displayWidth and $displayHeight variables when running in windowed mode.
  • The Node class is now subclassed from Constructable so that custom node types can be defined and properly deserialized. The Constructable::InstallConstructor() function is used to install a callback function that constructs custom node subclasses.
  • Full native support for Xbox 360 controllers under Windows has been added to the Input Manager (using XInput). The demo game code has been updated so that it's possible to play using only the Xbox controller. Better support for DirectInput joysticks has also been added to the Input Manager.
  • The movies plugin now allows movies to be played as streams from remote locations. The movie controller and movie panel item now both have check boxes indicating whether the movie name is a URL.
  • Movie play position is now synchronized in multiplayer games when new players join.