Release Notes for Version 2.1.1

From C4 Engine Wiki
Jump to navigation Jump to search

Release date: September 20, 2010

Core Engine


  • A new material flag called "Use alpha multisample coverage" has been added. This turns on transparency antialiasing when a multisampled rendering context is being used. Alpha multisample coverage can be used to soften up the outlines of alpha-tested materials.
  • A global light detail level has been added to the engine. Any light source can now specify a detail level, and the light will only be rendered if the global detail level setting is at least as high as that specified by the light source. This is useful for turning off dynamic lights for things like projectiles on lower-end hardware.
  • The method for determining the default graphics settings has been rewritten. There are three general initial quality settings, and one is chosen based on the number in the name of the graphics card. If the second digit is 5 or less, then the lowest quality setting is used. If the second digit is 6 or 7, then the normal quality setting is used. If the second digit is 8 or 9, then the highest quality setting is used. All of this only matters if the user hasn't yet changed any graphics settings, creating a new variables.cfg file.


  • The scale for triplanar texture coordinates has been made an independent parameter in the material object settings. It used to share the scale for texcoord 0, but this interferes with the use of ordinary 2D textures on the terrain. Materials for existing terrains will need to be updated if the texcoord scale is anything other than the default 1/16.


  • New code has been added for collision detection between shapes and arbitrary geometry meshes, and the continuous collision detection code has been completely replaced. Performance has improved drastically.
  • The RigidBodyContact class contains a new function called GetWorldContactPosition() that can be used to simplify the extraction of world-space contact information in a consistent manner.
  • A new Truncated Dome shape has been added to the engine. Like the other truncated shapes, this is a dome with its top cut off by a plane parallel to its base.
  • Problems that arose in previous versions when multiple shapes were used for a single rigid body have been corrected.
  • The amount of collision data stored in a world file for most types of geometry has been reduced considerably. To update existing worlds, select all and then select Rebuild Geometry from the Geometry menu (or just type Ctrl-A followed by Ctrl-R). Be sure to make a backup copy of your worlds first.

World Manager

  • A new Modifier class has been added to the engine, and one or more of them can be attached to reference markers in order to modify the appearance or structure of the referenced world in some way. This allows some variation among different instances of a referenced world while still preserving the data-sharing benefits. In this release, there are three built-in modifier types, and a game module can define its own custom modifiers.


  • The variable $applicName has been removed from the engine as the method for identifying the name of the game module to load. The engine now determines the name of the game module through the following steps, in this order:
  1. If the symbol GAME_MODULE_NAME is defined (in the project properties), then its value is used as the name of the game module. The symbol should begin and end with double quotes, so to load the SimpleBall game, you would define GAME_MODULE_NAME to be "SimpleBall", with the quotes.
  2. If the symbol GAME_MODULE_NAME is not defined, then the engine checks to see if the variable $gameModuleName exists, possibly because it was defined on the command line. If this variable exists, then its value is used as the name of the game module to load.
  3. If the $gameModuleName doesn't yet exist, then the engine executes the file game.cfg, which can be stored in any subfolder of the Data folder or in a PAK file. This file should define the variable $gameModuleName by assigning the name of the game module to it. For example, to load the SimpleBall game, the game.cfg file would contain the line $gameModuleName = "SimpleBall";.
  4. If the $gameModuleName variable still isn't defined, either because game.cfg doesn't exist or it didn't define the variable $gameModuleName, then the name of the game module defaults to Game.
  • A generic lossless data compression algorithm has been added to the engine, and it is now used for all texture resources. Most textures will get smaller if they are re-imported, but all existing textures will continue to work just fine (re-importing is not required).
  • Backwards compatibility with releases preceding version 1.4.10 has been removed.