New features since Clonk Rage

This article is outdated!

This article is written for all those, who know Clonk Rage and would like to know what's new in OpenClonk. Since the project went open source, quite a few new experimental features have been introduced. In this newest installment of the Clonk series, we've left behind the old shackles and created something more advanced than anything you've ever seen in Clonk.

It is safe to say, that with OpenClonk, we are making the biggest leap in terms of new features and changes since Clonk 4.

Contents

General

New in OpenClonk is the possibility to zoom in and out. Now, the clonk can be displayed in a proper size, larger than a mouse cursor ;-). Use the scroll wheel on the mouse or F5/F6 to zoom.

3D Rendering

Bones.png
Also new is the possibility to add 3D models to be rendered ingame. As opposed to the classic sprite graphics, 3D models are much more versatile: First of all, the models don't get blurry and the animations don't seem edgy when zoomed in. Animations are directly saved in the model, they don't need to be pieced together from single renderings in different animation phases and then exported into a big Graphics.png anymore (goodbye, anigrab.exe). This allows to add a lot more animations than before. Currently, the clonk has more than 100 different animations.

The renderer loads models in the Ogre 3D format, a lightweight format for 3d models tailored to be rendered in realtime. Models in the landscape are projected orthographically and pictures of objects perspectively. Apart from the basic stuff, the renderer supports:

  • UV mapped textures (including multitexturing)
  • Transparent textures / alpha maps
  • Texture animation
  • Skeletal animation including blending of multiple animations
  • Backface culling
  • Live script-controlled mesh transformations and attachments

See the Artists Guide for how to create models that will be rendered in realtime. Our repository for resources already encompasses many such models.

New Controls

However, most of the changes we made and are making were and are only possible because we decided to drop the backwards compatibility towards Clonk Rage and created all game content from scratch. This is why the game content of OpenClonk is far from having reached the extent of that of Clonk Rage.

The controls have been overhauled completely and are now completely controlled by script. With the new control system, it is much easier and intuitive to control your clonk. For new players, learning the unusual and unintuitive controls of Clonk has always been a huge obstacle to overcome before they could appreciate the bustling gameplay of clonk.

Digging.png
The controls are now completely customizable and can be adjusted in any scenario/mod. The standard controls are based on a well known scheme from many other games: Movement with WASD, throwing, aiming and using tools with the mouse. Space for interacting with objects in the landscape (like entering a building or grabbing a vehicle). The new controls fully utilize the mouse control, giving you precise control over all the items and weapons. The new shovel for example can be used also from climbing or hangling and the clonk just digs into the direction of the cursor while the mouse button is held down. Details of the new controls are explained in the first tutorials in the game.

Apart from the keyboard+mouse control, it is also possible to use a gamepad. However this feature is still experimental and does not work for several gamepads. It is also not possible yet to customize the controls but this is planned in the future. A early version of the gamepad controls were introduce in a blog post.

An extensive documentation of the custom controls feature can be found in the C4Script documentation

Overall, the clonk has been made more agile than before: He can not only move and use stuff while jumping, he can also make use of a number of tools that help him scramble around the world - like grappling hooks, rope ladders, the improved shovel and many others.

Tools and HUD

Backpack.png
Closely related to the controls is the inventory system of the clonk. Every clonk has a backpack now, in which he can carry five items (which can be adjusted for any scenario). He can open the backpack and easily exchange any object in the backpack with one of the items in his hand.

There is a big focus on tools in OpenClonk. The clonk needs a shovel to dig, an axe to chop and a hammer to build. In exchange, the clonk can not only carry more than the classic clonk, but he can also use any item: A sword, a bow, a shovel, a musket, a magical staff, etc.. There is no need for special clonks anymore, the abilities of a clonk are defined by his equipment. By making use of the mouse, tools have become more versatile and easy to use.

Crew hud.png
The new control system goes hand in hand with the complete overhaul of the HUD. The minimalistic HUD was a thing that was repeatedly critized on Clonk.

Now, the HUD is completely controlled by script (rather than controlled in the engine) which allows more flexibility for scenario and mod authors. The default HUD shows all clonks in the players team on the upper edge, all with an energy- and breath-bar right below their picture. This picture shows the actual clonk live, so if he is attacked or drowning, you see it in the picture.

Lower hud.png

On the lower edge of the screen, the two items that the clonk is carrying in his hands which can be used with left and right-click are shown. Also, all other objects that can be interacted with in the landscape are shown there.

All buttons that are shown in the HUD can be clicked to be used or to be selected and items can be dragged and dropped around the HUD where it makes sense. This feature is also interesting for mod makers.

New Game Content and Concepts

Since all game content has been created from scratch, the many new or remade tools, weapons, items, buildings, vehicles and animals, rules, goals and environment objects must be mentioned. Apart from the objects, we are completely replacing the old graphics, sound effects and textures. Textures for example are not grayscale images anymore which are then colored in the tone of the texture but full-color textures with more variation, making the landscape look a lot better and detailed. New sound effects are collected from various free (creative commons) archives or made by ourselves.

So actually, the question should rather be, what is not new?

Well, regarding the game content, nothing. However, we did not just remake the old objects, some new concepts are already visible in the game content. For example, the annoying automatic melee-fight was removed and is now replaced with various melee weapons to be used in close combat. The classic explosives which only differed in the size of their explosion are now being replaced by more specialized mining tools an weapons, such as the dynamite box. But instead of listing all the new or remade objects here, you should just play the game and see by yourself :-P.

For developers

Many changes have been made which are interesting for scripters and scenario developers:

C4DT

One tool for the clonk development has to be highlighted here: C4DT, the Clonk Development Tools for Eclipse. Eclipse is an extensible open source IDE which supports a multitude of programming and script languages. Now, also C4Script: The C4DT plugin enables you to develop content for Clonk using the powerful Eclipse IDE. Since C4DT does not try to be a standalone IDE, it inherits many features of Eclipse and thus facilitates development a lot. Features include:

Eclipse ProblemsView.png
  • Syntax highlighting for C4Script, landscape.txts and INI-like files like the DefCore.txt or the Scenario.txt
  • All references to valid identifiers (variables, functions) can be turned into hyperlinks to their declaration location. This even works for text placeholders for the translation file StringTblXX.txt
  • Quickly jump to object definitions by typing the name or ID of the object
  • Context-sensitive content assistance and parameter hints while typing(!) (see below)
  • Helpful auto-completion and -indention
  • An outline for opened script files
  • A built-in parser finds and warns about potential script errors and warnings without having to start the engine(!)
  • refactoring of variables and functions
  • A real debug mode for the engine: Debug scenarios in the Eclipse debugger(!)

The old editor.exe from Clonk Rage has been removed. C4DT is the definite successor of this old friend of the C4Script developer. A more than worthy one, actually, because C4Script development really can't get any more sophisticated than with this Eclipse plugin.

Eclipse ContentAssist.png

C4Script changes

Apart from this the following big changes have been made to C4Script:

  • The ID of an object is no longer limited to 4 big letters. For example
    CreateObject(Musket);
    instead of
    CreateObject(MSKT);
  • All functions that are working in context of an object have been stripped of their respective object parameters. E.g., write
    clonk->GetX();
    instead
    GetX(clonk)
  • Some obsolete functions have been removed or replaced. For example
    FindObject()
    now works like the
    FindObject2()
    from Clonk Rage and
    FindObject2()
    was removed. Numbered local variables are gone (use arrays instead) and references have been removed.
  • Many functionalities, like climbing ladders, rope physics, bases, workshop or clonk controls have been written in unitized library objects (referred to as script libraries) which are then included by the concrete objects. This makes it easier to include functionalities of other objects without having to inherit everything. For example, all production buildings
    #include Library_Workshop
    to inherit the basic workshop functionality. Also, much functionality is moved from the engine into these script libraries. For example the base functionality.
  • A new type called Proplist (property list) has been introduced. Proplists are basically associative arrays with prototype inheritance, like Javascript objects. For example
    var info = { XP = 1200, Comment = "I'm new here." }; Log("%d",info.XP);
    logs "1200". Objects and Object Definitions are also Proplists now and Objects inherit from their Definition:
    Log("%s",Bow.Name);
    logs the localized name of the bow. Local named variables are now properties of the object.
  • ActMaps are stored as Proplists in a property of the Object Definition. Probably, the DefCore.txt will follow in the future.
  • DescXX.txt, Names.txt are not used anymore. The name is set in the script and translated in the StringTblXX.txt. A description is only needed for some objects and also defined in script and translated in the stringtable.
  • PlayerControls have been revised. Scenarios and objects can now use and overload arbitrary keys, mouse buttons and gamepad events. The Clonk script defines a new interface (see
    ControlUse
    ) for object interaction.
  • Variables can now be
    nil
    , regardless of their type.
    nil
    is like null in other programming languages and is usally used to indicate that something is not set in C4Script. For example whether a variable is
    0
    or
    nil
    is not the same. It is
    0
    if it contains the integer value
    0
    and
    nil
    if it is not set. For functions,
    nil
    can be used to not specify an optional parameter (as if it was left out). For example
    [http://docs.openclonk.org/en/sdk/script/fn/Sound.html Sound("Water",true,nil,nil,+1)]
    plays the water sound for all players in a loop, at 100% volume (the default) while
    Sound("Water",true,nil,0,+1)
    plays the same sound only for player zero. Also, you can distinguish between a function with no return value (returning
    nil
    ) and a e.g. function returning the number
    0
    . Regardless of if a variable
    foo
    is either
    nil
    ,
    0
    or
    false
    , this statement still logs "yay":
    if(!foo) Log("yay");
  • C4Script
    1. #strict
    is not used anymore. All scripts are considered to be
    C4Script
    1. #strict 2
    .
  • As usual, some new functions and engine callbacks have been added. Refer to the documentation.