Release Notes for Version 2.10

From C4 Engine Wiki
Jump to navigation Jump to search

Release date: November 16, 2012

Core Engine

  • The engine can now be compiled for 64-bit Windows. New project files for Visual Studio 2012 are included, and they have 64-bit configurations in addition to 32-bit.
  • Several parts of the Mac OS X code in the engine have been rewritten to use the Cocoa API. The engine no longer calls any deprecated API functions, and it can compile with the latest Mac SDK for 32-bit and 64-bit targets.
  • The float4 type has been renamed to vec_float, and new types vec_int8, vec_int16, vec_int32, vec_unsigned_int8, vec_unsigned_int16, and vec_unsigned_int32 have been added. This affects your code only if you are directly using the engine's SIMD functions.
  • The align_address macro has been renamed to alignas to be consistent with the new C++11 keyword.
  • The Extras plugin has been eliminated, and most of the functionality it contained has been moved to the core engine (star field particle system, flash controller, rotation controller, and shock wave effect).

Movie Manager

  • The Movies plugin based on QuickTime has been removed from the engine and replaced by a new proprietary cross-platform movie format. Movie compression and playback functionality is now part of the core engine in a new Movie Manager component, and it is available on all platforms supported by the engine.
  • Movie data is stored in a resource file with the extension .mvi. Movies can contain both video and audio tracks.
  • Video tracks are compressed using standard DCT and block truncation methods followed by a bit encoding that is optimized for fast decompression. This is a lossy compression technique with a variable quality level that can be controlled at the time a movie is generated. Pixel data is decompressed into the YCbCr 4:2:0 format, which is transformed into filtered RGB 4:4:4 format on the GPU using shader code.
  • The video codec supports key frames and delta frames for temporal compression. The frequency of key frames can be controlled at the time a movie is generated.
  • Audio tracks are compressed using a lossless technique to preserve perfect fidelity.
  • The Movie Manager uses an integer time base for which there are exactly 36000 ticks per second. This number was chosen because it is evenly divisible by the following numbers (plus others): 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 30, 32, 36, 40, 45, 48, 50, 60, 72, 75, 80, 90, 96, 100, 120.
  • Movies can be recorded inside the engine by using the record console command. This causes the engine to generate one or more "sequence" files containing raw video data and a single wave file containing raw audio data. These can be imported through the Movie Tool to create a compressed movie resource.

Interface Manager

  • There is a new movie widget that is used to display movies in a panel or window. Movie widgets can be controlled from a script using the Play Movie, Stop Movie, Get Movie Time, and Set Movie Time controller functions.
  • A movie widget belonging to a panel effect can specify that its audio track be played through a connected source node. This allows the audio for a movie to be fully spatialized in a scene just like any other sound.
  • Paint widgets now have settings that can be used to specify the initial properties of the paint brush: radius, fuzziness, opacity, and color.

Graphics Manager

  • The Combine Normals shader process has been extended so it can take an optional interpolation parameter. If the port named "t" has an input, then the normal "N1" is weighted by 1 − t and the normal "N2" is weighted by t.

Physics Manager

  • The "mover" controller has been redesigned and replaced by the "movement" controller. The movement controller moves a node between a start and finish location at a constant speed with optional acceleration and deceleration at the beginning and end. The node to which a movement controller is assigned must have connectors that link to other nodes (usually markers) specifying the start and finish positions, and the connector keys used for this are specified in the controller settings.
  • The "rotation" controller previously in the Extras plugin has also been redesigned and moved into the core engine. The functionality has been split into two separate types of controllers: a "rotation" controller that is used for nodes that rotate in between two specific angles, and a "spin" controller that is used for nodes that rotate continuously about a given axis. The node to which either of these controllers is assigned must have a connector that links to another node (usually a marker) specifying the center and axis of rotation, and the connector key used for this is specified in the controller settings. Rotation takes place in the counterclockwise direction about the object-space z axis of the center node (which is shown in blue inside the World Editor). This means that reversing the direction of the z axis (by rotating the node 180 degrees about the x or y axes) causes the rotation to reverse direction.

World Manager

  • The perspective exclusion mask for geometries, portals, and fog spaces has been modified so that visibility in the primary, reflection, and refraction perspectives can be controlled separately for direct rendering, rendering through a remote portal (that is not rendered into the reflection or refraction buffer), and rendering through a camera widget.
  • The perspective exclusion mask settings for the portal object and fog space object have been moved to the portal node and fog space node.
  • A perspective exclusion mask can now be set for all effect nodes, which include particle systems.


  • The previously existing method called Fade Ambient Source has been renamed to Vary Source Volume, and it can now be used on any type of source node to smoothly vary the playback volume.
  • A new script method called Vary Source Frequency has been added, and it can be used to smoothly increase or decrease the relative playback frequency of a source node.
  • If an instance node is the target of a Call Controller Function script method and the instanced world contains a rigid body, then the Script Editor now displays the available functions for the rigid body instead of the instance node. This makes sense because the rigid body inside an instanced world is always extracted and placed in the referencing world, and the instance node is deleted.

File Manager

  • The FileMgr::BuildFileList() function has been replaced by the FileMgr::BuildFileMap() function. File names are now sorted on all platforms such that letter case is ignored and numerical parts of the names are sorted numerically instead of lexicographically.

Resource Manager

  • The Resource Manager is now 100% thread-safe. Any type of resource can be loaded outside the main thread without risk of corrupting internal data structures.


Movie Tool

  • There is a new Movie Tool plugin that contains a movie player window and the movie generation functionality. The movie player can be opened by selecting Open Movie from the C4 Menu, and a movie can be generated by selection Import Movie from the C4 Menu.
  • The movie generator can import a sequence of individual frames from TGA files and/or a group of sequence files that were recorded by the engine. (Each sequence file contains multiple frames.) Audio data for a movie is specified by a separate wave file.

World Editor

  • A check box has been added to the Worlds Page that let's you click through instances already in the main world when placing a new instance node.
  • A modifier preset list has been added to the Worlds Page. A modifier preset stores a list of modifiers that can be assigned to instance nodes, and whenever a preset is selected, the modifiers stored in it are automatically assigned to each new instance that is placed in the scene. A modifier preset is created by selecting an instance node in the scene that already has modifiers assigned to it and selecting New Modifier Preset from the popup menu in the Worlds Page. Another menu command, Replace Modifiers, can also replace the modifiers for all currently selected instance nodes with the modifiers stored in the currently selected modifier preset.
  • A random Z offset range has been added to the Placement Page. This causes a node to be offset by a random distance in the specified range along the node's local z axis after the other placement adjustments have been made. This is useful for sinking objects into the ground by random amounts.

Script Editor

  • The OK and Cancel buttons have been removed from the Script Editor. There are now items named Close and Save Script under the Script menu.
  • Boxes that display the letters "T" or "F" are now displayed on conditional fibers in a script that execute only if the result of the starting method is true or false. The fibers also still retain the green and red colors.

Shader Editor

  • The OK and Cancel buttons have been removed from the Shader Editor. There are now items named Close and Save Shader under the Shader menu.