User:Nicolas.le-guen/Cube Engine

The Cube Engine is a game engine made by Wouter van Oortmerssen for the game Cube. This engine was reused for other games.

Description
It's a 3D engine, similar, by some of its aspects, to the Doom one. In both, there can't be, in theory, a place over an other. This limitation can be bypassed at using entities called mapmodels (in Doom mods, equivalent of mapmodels was also used to bypass this limitation) but they tend to be incorrectly handled by the weapons.

Most of the games using this engine (probably all) include an ingame map editor, allowing to edit any already existing maps or create new ones. These maps can immediately be played because they aren't compiled. These maps mainly consist in an array of of square zones, called cubes, that have a predefined list of properties (limiting to eight the possible orientations of any wall). Each cube is internally represented by a structure whose size depend on the game (14 bytes in Cube and 16 bytes in AssaultCube). the maps also contain entities

The number of available entity types, that vary depending on the game, is usally between fifteen an twenty but only three of them are common to all games using this engine : the mapmodels (which are mainly used to decorate the map but not only), the playerstart and the lights (especially before the introduction of the ambient light).

For characters and map models, 3D models are used. Si cube ne supporte, pour cela, que le format md2, d'autres jeu utilisant le même moteur supportent également d'autres format, comme le format md3, qui est supporté par AssaultCube.

Development
The development of Cube (and its engine) started in late 2000. In 2008, in a thread about the origins of Cube, Aardappel uploaded the oldest version of Cube he managed to retrieve, dated 2001-05-26

Cube was released late 2001 then became open source the next year and its development a continued until 2005, when its developpers chose to freeze this development to focus on the ones of Sauerbraten, released the previous year. Le moteur du jeu, quant à lui, a continué à être développé par des tiers.

Files
Each map of any game using this engine correspond to one or several files. Actually, only one of these files is required. The others are optional.

The cgz file
This file is the sole required one. Without this one, the map isn't. It's a compressed file.

It's also the sole one the extension can vary, even if, most time, it's .cgz. In the first versions of Cube, it was .cube.gz but that was changed due to accidental uncompressions. In the game Newcube, it's .ncm.

Its encoding, once uncompressed, is the following one :

The file is divided into three part : the header, the entities list and the geometry. The version 10 of the AssaultCube Maps add a fourth part, the header extras, between the header and entities.

L'entête est ainsi constitué :

{{legend|#7fff7f|Addition of the version 4 of the Cube map format}} {{legend|#ffff7f|Addition of the version 6 of the AssaultCube map format (first AssaultCube versions)}} {{legend|#ffbf7f|Addition of the version 7 of the AssaultCube map format}} {{legend|#ff7f7f|Addition of the version 7 of the AssaultCube map format removed in the version 9}} {{legend|#7fffff|Addition of the version 10 of the AssaultCube map format (current version)}}

The Header extras are data block

the next part is the entity list. Each entity of the map correspond à une entrée de cette liste.

If they represent quite varied things, all of the entities have, for a same version of the format, the same structure and, so, the same size, 16 bytes in the version 10 of the AssaultCube map format, 12 bytes in the other cases.

Each entity is structured this way :

La troisième et dernière partie, la géométrie, consiste en une liste d'entées de longueur variable. La longueur de chacune de ces entrées dépend de son premier octet, pour lequel il peut y avoir huit valeurs différentes possibles : les numéros des six types de cubes (de 0 à 5) du jeu et deux valeurs spéciales (254 et 255).

Les six types de cubes sont les suivantes :
 * SOLID (0):"solid" zone, impenetrable and without ground nor ceiling. most ground to ceiling walls are of this type.
 * CORNER (1):wall (as well ground to ceiling or not) at 45° from the orientation or the cubes borders.
 * FHF (2):Heightfielded floor, the ground can be non flat or have an height a cube of an other type can't have.
 * CHF (3):Heightfielded ceiling, same but for the ceiling.
 * SPACE (4):Normal cube.
 * SEMISOLID (5):Special type, generated by the mipmapping.

the cubes of type solid (0) are described with three bytes entries :
 * type (ici 0)
 * texture (valeur wtex, qui, avec les autres types de cubes, correspond à la texture du mur inférieur)
 * valeur delta (pour d'éventuels cubes voisins heightfieldés)

Les autres cubes sont tous décrits avec des entrées ayant la même structure de neuf octets :
 * type (from 1 to 5)
 * ground height (from -128 to 126)
 * ceiling height (from -127 to 127)
 * lower wall texture
 * ground texture
 * ceiling texture
 * delta value
 * upper wall texture
 * tag

Les deux valeurs spéciales sont :
 * same beside for light (254): abandonned since the version 3 of the map format de cartes but still supported by the map loading algorithm. A cube corresponding to an entry of this type a les mêmes particularités que le précédent, sauf pour ce qui est de la lumière.
 * same (255):Constitue un deuxième niveau de compression. Ce type d'entrées correspond à une série de cubes identiques. C'est le seul cas où une entrée peut correspondre à plusieurs cubes. Les cubes correspondant à une entrée de ce type ont les mêmes particularités que celui de la précédente entrée d'un autre type.

La première de ces deux valeurs correspond à des entrées de trois octets :
 * type (ici 254)
 * intensité de la nouvelle lumière
 * un octet inutilisé (rôle d'origine inconnu; totalement inutilisé aujourd'hui)

L'autre correspond à des entrées de deux octets :
 * type (ici 255)
 * number of cubes (de 1 à 255)

Les autres fichiers
Ces fichiers, tous optionnels, ne diffèrent du fichier cgz que par leur extension. À l'exception du ficher cfg, qui est supporté par tous les jeux utilisant ce moteur, et du fichier texte, qui n'est aucunement utilisé par le jeu, ces fichiers ne sont supportés que par certains des jeux utilisant ce moteur.

Ces fichiers se trouvent dans le même dossier que le fichier cgz, à l'exception du fichier wpt et du fichier de preview.


 * Le fichier cfg:Le contenu de ce fichier texte est, techniquement, un script en CubeScript qui est exécuté lors du chargement de la carte. Ce fichier n'est pas créé par le jeu. Il doit être créé séparément avec un éditeur de texte. Si, dans l'absolu, il est optionnel, il est nécessaire pour changer certains paramètre de la carte ou y inclure dans la carte des textures ou des mapmodels non mentionnés dans le fichier default_map_settings.cfg (dont l'emplacement varie selon le jeu), qui est toujours exécuté juste avant ce fichier.
 * Ce fichier peut également comporter, en commentaires, des informations relatives à la carte, comme les droits d'auteur. Contrairement à ce qui est souvent cru, mettre ces informations dans ce fichier n'était une chose courante avec les cartes de Cube (ce n'est le cas d'aucune carte officielle de Cube), elles étaient alors plutôt mises dans un fichier séparé, généralement au format txt. Le choix de mettre ces données dans le fichier cfg à la place semble être une conséquence de l'ajout, dans AssaultCube, d'un système de téléchargement des cartes, qui ne télécharge que le fichier cgz et l'éventuel fichier cfg.
 * De plus, afin d'empêcher l'exécution de scripts potentiellement malveillants, AssaultCube (et les jeux basés sur ce jeu) n’exécute que certaines commandes de ces fichiers. Les autres, au lieu de s'exécuter, causent l'affichage d'un message d'erreur.


 * Le ficher texte (ou fichier txt):Ce fichier, qui n'est aucunement utilisé par le jeu, est parfois sans extension mais, le plus souvent, il a .txt pour extension. Son contenu est expliqué ci-dessus, dans la section sur le fichier cfg.


 * the wpt file:Specific to games using bots. Contain the waypoints'' used by AI of bots. The AI of the monsters, very different doesn't use waypoints.


 * Le fichier de sauvegarde (ou fichier bak):Sauvegarde de précédentes versions du fichier cgz. Ce fichier a une double extension. La première consiste en un underscore suivi d'une série de chiffres donnée par l'horloge du système et la seconde est .bak. Il peut donc y avoir plusieurs fichiers bak pour une même cartes.


 * Le fichier de preview: spécifique à AssaultCube (et aux jeux basés sur ce AssaultCube). C'est l'image qui apparait à côté du menu dans les menus listant des cartes. Il s'agit généralement d'une image au format jgeg (ce qui est le cas pour toutes les cartes officielles d'AssaultCube) mais il peut également d'une image au format png dont l'extension a été changée. L'extension du nom de ce fichier est toujours .jpg.

Performances
Le Cube Engine a un rendu généralement fluide. Si le nombre de frames par seconde (FPS) peut descendre très bas (plus ce nombres est élevé, plus le jeu est fluide) dans certains cas, cela reste moins fréquent qu'avec le Cube 2 Engine (moteur de Sauerbraten).

Category:Video game engines