Release Notes for Build 132

From C4 Engine Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Release date: February 14, 2007

  • NOTE: A lot of changes have been made to the distribution of source code files among the three code directories in this build. The directories have been renamed to "EngineCode", "GameCode", and "ToolCode", without spaces, so unzipping into an existing installation will result in three new code directories being created with clean groups of files.
  • The World Editor has received a massive upgrade, and the existing editor code has been largely reorganized. It is now structured in such a way that custom editor extensions (plugins) will be possible in a near-term release.
  • Most of the editor tools have now been organized into palette-like subwindows called "pages". Pages contain groups of related tools and can be arranged on the left side of the editor window by dragging them around. Pages can also be hidden or collapsed, and invisible pages can be shown by selecting them in the new Page menu. The page state is saved and restored for each world separately.
  • Some previously existing editor features have been moved into new pages. The selection mask buttons are now part of the Selection Mask page, and the show/hide items previously in the View menu are now part of the Visibility page.
  • The bulk of the manipulator code has been moved out of the engine core and into the World Editor module, and some internal structures have been changed. All saved manipulators will be dumped when worlds are first opened with this build and replaced with new ones. The only impact this has is that certain manipulator state such a node's editor-only visibility state will be reset.
  • There is a new page called Layout that controls viewport configuration and manipulator appearance. Several new viewport layouts are now possible, and the type of each viewport can be chosen by right-clicking in the viewport itself. All editor viewports will be reset to default configurations when worlds are opened with this build.
  • A new viewport type has been added to the editor that displays the scene graph hierarchy. Each node is shown with an icon representing its type and either its name or a string describing its type if it doesn't have a name. The collapse boxes in the hierarchy can be used to hide subtrees. Nodes belonging to referenced worlds are shown in a darker color (when referenced world display is on) and cannot be selected.
  • The node select, rect select, scroll, zoom, and rect zoom tools work in the scene graph viewport in the same way that they do elsewhere. The move tool works as a reparenting tool in the scene graph viewport, allowing you to drag the selection to a new parent node. Nodes cannot be reparented to one of their descendants or to a reference marker, but anything else goes.
  • The root node can be selected in the scene graph viewport, but it cannot be deleted or reparented.
  • The concept of a target group has been removed from the editor because its functionality has been superseded by the reparenting capabilities in the scene graph viewport.
  • The World Settings command has been removed from the editor. It simply opened the Get Info dialog for the root node, and this can now be accomplished by selecting the root node directly and hitting Ctrl-I.
  • The right-click menu contains two additional items called Frame All and Frame Selection. These center a viewport on either all nodes or just selected nodes and scale so that everything fits into view.
  • Most node types are now visible and selectable in the perspective viewport. Lights, sources, markers, and effects are represented by cubic icons whose size can be changed in the Layout page. The volumes covered by triggers, spaces, and effects are also visible.
  • The default grid color in the World Editor is now given by the variable $editorGridColor.
  • Added a camera placement tool to the World Editor in a new Cameras page. Also, connectors can now be set up so that they can only link to camera nodes.
  • Added a new interface panel item that displays an image rendered from another camera in the world. This can be used for things like security camera monitors. To use this panel item, a connector must be assigned to the panel effect node and linked to the target camera. Then the same connector key should be assigned to the camera panel item.
  • A new function that changes the connector key for a camera panel item has been added to the panel controller. This lets a script change which camera is used to render an image for a camera panel item.
  • Added a new Skybox page that contains a skybox placement tool. A skybox is now added to a world by explicitly placing a skybox node in the root zone. Skyboxes in existing worlds will show up at the world-space origin. Since a skybox is rendered at infinity, the physical location of a skybox node has no effect, but its orientation does affect the angle at which the skybox is rendered. Furthermore, it is now possible to assign a controller to a skybox node so that, for example, it can be rotated or controlled by a script.
  • It is now possible to assign a material to a skybox node in the World Editor. Such a material affects how a skybox is rendered in addition to the texture maps assigned to the six skybox faces. Only material attributes that pertain to the ambient lighting equation affect the appearance of a skybox. A material can be removed from a skybox using the new Remove Material command under the Node menu.
  • The Change Material Color script method will now affect any material assigned to a skybox.
  • Added a new sound source type that plays ambient sounds. These can be placed in a world to serve as containers for music or environmental sounds. Currently, the physical location of an ambient source has no effect. If an ambient source is playing, it can be heard at the same volume everywhere.
  • The Node Info dialog for an ambient source lets you assign a list of sound files to play. If the source is streaming, then multiple sounds can be attached to the source, and they will play consecutively without interruption. The same file can be listed more than once.
  • Under the texcoord animation pane in the material manager, the texcoord speed is now displayed numerically, and the allowable range of speeds has been increased.
  • When geometry is imported into the World Editor, it will now always appear at the same world-space coordinates no matter what zone is currently the target zone. Imported geometry is still added to the current target zone, but it's transform is multiplied by the inverse of the zone's transform to keep it at the location specified in the import file.
  • The Remove Transform command has been renamed to Reset Transform to Identity, and a new command called Align Position to Grid has been added to the Node menu in the editor.
  • The Texture Viewer and Texture Importer tools have been merged into a single tool module.
  • A new check box has been added to the Texture Importer that lets you specify that the RGB channels of the source texture already contain vector information (such as a normal map). Checking this box causes mipmaps to be generated for vectors instead of colors. This option can be accessed on the command line using the -vector switch.
  • The Model Viewer has been integrated into the World Editor tool module. It's likely that the model viewer will eventually be integrated into the editor window itself so that a separate window isn't even necessary.
  • The Constructable class template has been changed in a couple of ways that make it more flexible in general and slightly simpler in the default case. All installed custom constructor objects (such as Constructor<Controller>) should now encapsulate a function taking a single parameter of type reference to Unpacker. The type to be constructed can be retrieved by calling the GetType() function on the Unpacker object. See the examples in the game modules.
  • The polyboard rendering code has been improved so that polyboards viewed near-tangentially look better.
  • Panels now render correctly in fog. Fog must be explicitly enabled for panels by checking a new box in the Get Info dialog for a panel effect node.
  • New functions have been added to the Controller class called Wake() and Sleep(). When a controller is asleep, it does not receive calls to its Move() function, saving processing time. New script methods for putting controllers to sleep and waking them are now available.
  • Added a new flag to the script controller that causes a script to loop continuously. If this flag is set, a script will start over when its last method has finished executing.
  • When a world is loaded, all nodes now have their world transforms updated before they are preprocessed. This means that the world transform of a node is valid inside the Preprocess() function when a world is being loaded. The world transform is not valid inside Preprocess() if this function is called explicitly or indirectly through a call to the AddNewSubnode() function.
  • The Node::EnumerateGeometries() function has been updated so that the callback function gets the center and radius of the input sphere.
  • Added a loop callback to the Interpolator class. This allows you to install a function that is called each time an interpolator loops (such as the frame interpolator for the FrameAnimator class).
  • Modified the RotationController class in the Game Module. The center of rotation and the rotation axis are now specified by adding connectors of type CENT and AXIS to the controller's target node and connecting them to markers. If the AXIS connector is present and connected to a node, then the difference in the positions of the two markers gives the axis of rotation. If there is no AXIS connector, then the rotation axis is the z-axis. These markers should not be subnodes of the node that is actually moved.
  • Modified the DoorController class in the Game Module. The controller should now be applied directly to the node that gets moved (which can be the root node of a bigger tree). Open, closed, and shifted positions are specified by adding connectors of type OPEN, CLOS, and SHFT to the controller's target node and connecting them to markers. The relative positions of the markers (which can actually be any kind of node) tell the controller how to move the door. These markers should not be subnodes of the node that is actually moved.
  • Added a new enemy character to the Game Module. The AI for the Pumpkinhead is extremely basic for now, but the code demonstrates how an NPC could be added to a game. The Pumpkinhead can be found in the Dungeon level, and he'll come after you with fireballs.
  • By fiddling with internal formats, a 75% increase in shadow map rendering speed has been achieved on ATI hardware.
  • The C4 Engine now runs on PS3.