Release Notes for Version 1.5

From C4 Engine Wiki
Jump to navigation Jump to search

Release date: December 27, 2008

  • A new voxel terrain system has been added to the engine, along with several terrain editing tools in the World Editor. More information about these can be found in the Editing Terrain article. Support for the old terrain geometry has been removed from the engine, so any old terrain in existing worlds will disappear when opened in the new version of the engine. To preserve the old terrain, select it in the editor under a previous version and convert it to a generic mesh before opening it in the current version of the engine.
  • All of the shading systems in the engine have been completely replaced by a new architecture based on shader graphs. Every existing attribute-based material will continue to work just fine, but they are translated into shader graphs internally. The Material Manager still allows materials to be created by configuring a fixed set of material attributes, and this is still the preferred method of creating materials that only use the standard options. Arbitrary custom materials can now be created in the new Shader Editor that's accessible from the Material Manager window.
  • Both the new Shader Editor and the existing Script Editor have a new tool for creating sections in a graph. A section is simply a rectangular area drawn beneath the graph that can be used to group a set of nodes for organizational purposes—it has absolutely no effect on the function of the graph itself. Each section has a user-configurable title and background color that can be changed by double-clicking on the title bar or by selecting the section and choosing Get Info from the menu (or hitting Ctrl-I).
  • Three new script methods have been added that can be used to set scalar, vector, and color parameter values in shader-based materials. These methods allow you to specify a parameter slot number and a new parameter value. When executed, the methods search all of the materials on the target geometry node for Constant Scalar, Constant Vector, and Constant Color processes that use the parameter slot and change the input value for those processes to the new value specified in the script.
  • A new tool has been added to the Material page in the World Editor that works like the eyedropper in a painting program. When this tool is clicked on a geometry surface in a scene, the current material is set to the material used on that surface.
  • For transition zones having exactly two outgoing direct portals, the ambient light color is now dynamically calculated. The light color is simply a smooth gradient in between the two portals, blending from one zone's ambient light color to the other's. If either zone's ambient light color changes, then the gradient is automatically updated.
  • The collision system has been improved in this release. To gain the full benefits of these improvements, it is necessary to rebuild the collision data for geometry nodes in the World Editor. This can be done by selecting all of the geometry nodes, hitting Ctrl-I to open the Node Info window, moving to the Collision tab, and then just clicking OK.
  • The engine now recognizes the operating system clipboard under Windows and Mac OS X, so it's possible to copy and paste text between other applications and text boxes inside C4.
  • The project files now have a new build target called Server. When this target is selected, the engine builds without any graphics, sound, or input systems so that it can be run on minimal hardware and used as a dedicated server.
  • The kWindowMaximize flag can now be passed to the Window constructor to make it as large as possible upon creation.
  • If an attempt is made to read strings from a non-existent string table resource, the engine now returns the "<missing>" string in the same way that it already does for missing strings in an existing resource.
  • The Time Manager has been modified so that it correctly handles frame rates greater than 1000 fps.
  • The quad effect now has a setting for the blend mode that it's rendered with.
  • The Panel Controller script functions for getting and setting panel item text now work on editable text items as well as static text items.
  • New standard Panel Controller script functions have been added to get and set the texture map shown in an image item.
  • The script expression parser now recognizes the words "true" and "false" as boolean literals. These are now treated as keywords and cannot be used as variable names.
  • Hexadecimal integer literals using the 0x syntax are now recognized by the script expression parser.
  • The box select tool in the World Editor has been reimplemented and is now very precise.
  • In the World Editor, double-clicking on a node in the scene graph now opens the Node Info window.
  • When importing a geometry node with the Collada Importer, if the transform contains any kind of scale, then the 3×3 portion of the transform (containing the scale and rotation) is now baked into the vertices.
  • A voice chat channel can now be enabled and disabled so that it's possible to switch among chat configurations without having to create and/or delete channels.
  • A new type of event handler, the WindowEventHandler, can now be installed in the Interface Manager to receive events pertaining to GUI windows. The types of events posted are (a) a window was added/removed from the GUI, (b) a window's enable or hidden state has changed, and (c) the mouse has moved into or out of a window's content area.
  • The Input Manager has been modified so that it is possible to receive raw input from only specific classes of devices while still receiving ordinary OS events for mouse and/or keyboard devices. The kInputNormal mode that could previously be passed to the InputMgr::SetInputMode() function has been replaced by the three values kInputMouseActive, kInputKeyboardActive, and kInputGameActive. The "Game" classification includes all devices that are not mice or keyboards. These values can be passed in any combination (through logical OR) to the InputMgr::SetInputMode() function to set the input mode for those classes of device. If either kInputMouseActive or kInputKeyboardActive is not specified, then you continue to receive OS events for those classes of device. The kInputAllActive value is provided to enable raw input for all devices, equivalent to the old value of kInputNormal.
  • The SetAudioCaptureProc() function has been added to the Audio Capture Manager. This function lets you install a callback procedure that is periodically invoked when new audio data has been captured on the local machine, and it provides a way for the application to intercept the raw sample data.
  • The configuration file Engine/engine.cfg has been renamed to Engine/input.cfg since it only includes commands for binding input controls.
  • In debug mode, the values used to fill newly allocated memory and just-deallocated memory have been changed to 0x7FCCCCCC and 0x7FDDDDDD, respectively. This was done so that any float-point values read from uninitialized memory would be interpreted as NaNs. In the case that a memory block is not a multiple of four bytes in size, 0xCC and 0xDD are used to fill in the remainder bytes.
  • In debug mode under Windows, the engine will now display an error message at startup if the working directory does not point to the location containing the Data directory.
  • The per-vertex fog option has been removed from the engine. Fog calculations are now always performed at the fragment level.
  • The separate specular color option has been removed from light objects.
  • The microfacet rendering variable $renderMicrofacetShading has been removed from the engine. Microfacet rendering can no longer be turned off through a flag.