Release Notes for Version 2.5

From C4 Engine Wiki
Jump to navigation Jump to search

Release date: February 12, 2011

Core Engine

Interface Manager

  • The systems for rendering on-screen interfaces and in-game panel effects have been unified into a single architecture that uses the Widget class hierarchy. The Element class hierarchy has been removed from the engine, and there is now a Widget subclass corresponding to each Element subclass that previously existed. The functionality in many of the new Widget subclasses has been enhanced compared to the corresponding Element subclass.
  • Several new types of widgets have been added that have no Element counterpart. These are the line, border, password, text button, and hyperlink widgets.
  • A new type of resource, the panel resource with extension .pan, has been defined for holding interface layouts. A panel resource can be loaded under any widget, so it may contain an entire window's layout or just smaller sections.
  • The Interface Manager now displays a "strip" at the bottom of the screen that is similar to the Windows task bar. Certain types of windows have buttons associated with them in the strip so that it's easy to switch among multiple editors (for example). The Tools menu that was previously displayed in a menu bar at the top of the screen is now accessible from the C4 button displayed at the left end of the strip, and there is no global menu bar. (Menu bars are now contained inside windows.)
  • Any widget can have a help balloon assigned to it that either displays a text message or loads an entire panel resource.
  • The Interface Manager now starts in manual input management mode. A call to the InterfaceMgr::SetInputManagementMode() function is necessary if you want the input devices to automatically switch to gameplay (active) mode when all interactive windows are closed.
  • Some functionality for widget animation (including color changes for things like hover events) have been deferred to the next release because the design of the system that was going to handle this has been expanded.


  • New object-space and world-space vertex position interpolants have been exposed in the Shader Editor.
  • The subdivisions setting has been removed from the skybox node. Each of the six faces of a skybox is now always rendered as one quad.
  • The engine now uses the Nvidia API to detect the driver version, and it disables the GL_EXT_direct_state_access extension automatically if old drivers known to be buggy are installed.


  • All collision detection code in the physics system now runs as a set of jobs so that it can take advantage of all available CPU cores.
  • Shapes now have a flag that causes them to be ignored for collision detection, but still lets them affect the mass distribution of a rigid body. A shape with this flag set would typically be put inside another shape to weight an object down in a certain place.
  • The cloth controller has been upgraded to work with the new physics system. Cloth now uses the global gravity acceleration stored in the physics controller attached to the physics node for a world. Cloth is also affected by wind force fields.
  • An “exclusive” flag can now be set for force fields. This prevents the field from being applied to all rigid bodies globally. Instead, an exclusive field must be explicitly used by a controller designed to recognize a force field to which its target node is connected. The cloth controller recognizes a WIND connector on its target node and applies the wind generated by any wind force field to which it's connected. (So a cloth geometry can be connected to an exclusive wind force field in order to receive the wind without anything else being affected.)
  • A new gravity force type has been added to the physics system so that force fields that modify the global gravity can be created.
  • The kRigidBodyLocalSimulation has been added for rigid bodies. If set, then the rigid body is only simulated on the local machine, and the server does not transmit information about the rigid body to the clients. This is useful for debris objects that only exist for a short time and have no effect on gameplay if they're simulated differently on different machines.

Math Library

  • A new high-performance function called Math::CosSin() has been added for calculating sine and cosine simultaneously for the same angle. It returns a Vector2D object with the cosine in the x coordinate and the sine in the y coordinate.

Utility Library

  • The InsertReplace() function has been added to the Map class. This inserts an element into the map and replaces any existing element with the same key that is already in the map.
  • The HashTable class now guarantees that elements having the same key are stored consecutively. This lets you iterate through all elements having the same key by finding the first element and then calling Next() until the key changes or no elements are left.

System Utilities

  • Support for 3Dconnexion devices (like SpaceNavigator) has been implemented in the engine. Multiaxis mouse movement is currently supported in the World Editor.
  • The OpenExternalWebBrowser() function has been added to the Engine class. This launches the default web browser and goes to the specified URL. This function works on all platforms supported by the engine, but it can take 10 seconds or more to execute under Windows XP.
  • The engine can now switch among game DLLs without restarting. When the value of the $gameModuleName system variable changes, the current application object is destroyed, the game DLL is unloaded, and a new game DLL is loaded and initialized.


  • The Panel Editor has gained a number of new capabilities that include a transform type-in, nudge tools, alignment functions, and grouping functions.
  • The Panel Editor, Script Editor, Shader Editor, and Model Viewer now use the page system for organizing tools and information on the left side of their windows.
  • The Texture Importer can now apply S3TC compression to externally-created normal maps. If the "Treat RGB channels as vector" box and "Use S3TC compression" box are both checked, then the red channel is copied to the alpha channel, and then the red and blue channels are cleared to zero before the texture is compressed. (This is the format expected by the shaders when a compressed normal map is used.)
  • The “Bleed colors for alpha test” setting in the Texture Importer now also increases alpha values by 50% for each mipmap level. This has the effect of preventing thin features in alpha-tested textures from vanishing as the geometry to which they're applied gets farther away from the camera.
  • There is a new option when importing animations that freezes the model's root node to its current position.


  • Trigger activation has been added to the SimpleChar game.