# GDevelop

GDevelop est un logiciel permettant de créer des jeux 2D et 3D sans utiliser de langage de programmation qui se veut accessible aux plus jeunes grâce à un système de conditions et d'action sous forme de blocs appelé événements. Le programme est gratuit et les jeux créés avec fonctionnent sous Windows, GNU/Linux ou sur le Web (jeux en HTML5) et appartiennent totalement à l'utilisateur qui a le droit d'en faire un usage commercial sans payer de royalties ou de licence$^,$$^,$.
Le code du moteur et de l'environnement de développement intégré qui composent GDevelop sont open-source, toute personne voulant y contribuer le peut, il est accessible sur le dépôt officiel sur GitHub.

## Fonctionnalités
### Export en un clic

Un export sans outils spécialisés sous Android, Windows, GNU/Linux et pour le Web est proposé. Il est aussi possible de faire un export local qui permet de build avec Cordova sous iOS. Grâce à l'export vers le Web, il est possible de publier le jeu vers des plateformes comme Kongregate, Itch.io, Gamejolt ou autres.

### Les comportements

On peut ajouter des comportements aux objets du jeu, un même objet peut en avoir plusieurs. Définissez en une fois comment l'objet doit agir en lui appliquant le comportement, appliquez le comportement sur des centaines d'objets ils agiront tous de la même manière.
Un comportement permet par exemple d'ajouter un moteur physique (celui inclut dans GDevelop par défaut est Box2D), des algorithmes pour trouver un chemin, agir comme un jeu de plateforme, permettre de déplacer l'objet à la souris ou au tactile, des transitions, etc.

### Les extensions

Les extensions contiennent les événements, comportement et fonctions, aussi bien celles pour que GDevelop fonctionne que celles que les utilisateurs ont partagé pour qu'elles soient disponibles au travers d'une bibliothèque communautaire directement dans GDevelop.
Vous pourrez ajouter à votre jeu en quelques clics des événements approuvés et fonctionnels.

### Les fonctions

Les fonctions permettent de créer des événements réutilisables dans n'importe quelles feuilles d’événements, événement externe, et même dans les extensions.

### JavaScript

L'implémentation du langage JavaScript est un point fort permettant aux utilisateurs avancés d'étendre les possibilités au-delà de la limite d'événements en manipulant directement le moteur de GDevelop. Ceci offre de nouveaux horizons pour tout développeur.
Partout où il est possible d'utiliser un événement classique, il vous est possible d'écrire du JavaScript.

### Publicité

Gdevelop supporte AdMob (Google) (plateformes mobiles seulement), et Shopify, ces deux services vous permettent l'ajout de publicité sous forme de vidéo, bannière, écran interstitiel et lien pour Facebook Instant Games. GDevelop supporte Facebook Instant games. Il est donc possible de publier des jeux Facebook et d'interagir avec les services Facebook dans le jeu.achat.

## Fonctionnement
### Gestionnaire de projet

Lorsqu'un projet est ouvert vous y trouverez les paramètres (niveaux), les scènes et niveaux, les ressources, les feuilles de code externe, les agencements externes, les extensions et les fonctions.
On peut choisir à travers celui-ci la scène à éditer, ainsi que modifier ses principaux paramètres, comme le titre et la couleur de fond. Après avoir choisi la scène à éditer, un éditeur de scène s'ouvre pour la modifier.

### Éditeur de scène

L'éditeur de scène permet d'organiser la scène en positionnant les objets voulus. Nous pouvons par exemple positionner l'objet "Héros", créer un décor en installant plusieurs objets "Fond" et "Mur", puis insérer les ennemis en mettant les objets "Méchants". L'éditeur permet de tester directement la scène comme elle sera rendue dans le jeu final en l'affichant dans une fenêtre externe (un débogueur est disponible afin d'obtenir des informations (sur les objets, les variables…) ou encore de modifier les scènes durant le déroulement de celles-ci.

### Gestionnaire de ressources

L'éditeur de ressources permet de gérer toutes les images qui vont être utilisées par le jeu par l'intermédiaire des objets.
Il est possible d'utiliser les formats d'image JPG, PNG. GDevelop supporte directement la transparence intégrée aux images.
Vous y trouverez aussi les polices d'écriture (TTF, TTC), la musique, fichiers sons et musique (WAV, MP3, OGG), et les fichiers vidéos (MP4).

### Éditeur d'objets

L'éditeur d'objet permet la création des objets (qui peuvent représenter le joueur, une arme, une image d'arrière-plan ou encore une barre de vie) qui seront ensuite affichés sur la scène.
Les objets peuvent, définis par les extensions, être de différents types. Par exemple, les objets "Sprite" (image animée) peuvent disposer de plusieurs animations, contenant elles-mêmes des directions (8 directions ou une seule direction qui tournera à 360°). D'autres types d'objets, tels que les objets "Texte", "Mosaïque" uniquement pour le moment, "Vidéo", "Boite 3D" (GD4), sont aussi utilisées par leur extension respective et au travers d'extensions. Le logiciel possède aussi un objet "Émetteur de particules" permettant d'utiliser des particules simplement dans le jeu.
Les objets supportent depuis un comportements (voir ci-dessus dans fonctionnalités) de jeux de plateforme.

### Éditeur de calques

L'éditeur de calques permet de gérer facilement les calques ou les différentes couches qui composent la scène, un objet peut être sur un calque différent d'un autre. Par exemple une (les HUD) barre de vie fixe à l'écran ne sera pas sur les ennemis qui même calquent les entités ainsi que le héros qui se déplace.
Le placement des objets sur les différents calques se fait dans les propriétés de l'objet.
Cela permet d'ordonner plus facilement ces objets, et d'interagir avec un groupe d'entre eux en particulier (par exemple cacher le calque HUD pour cacher les HUD au lieu de cacher chaque objet un par un) via l'éditeur de scènes.

### Éditeur d'événements (feuille d'événement)

L'éditeur d'événements permet de programmer grâce à un principe de conditions et actions. Chaque événement est constitué de conditions avec un autre (un objet est-il en collision, le curseur est-il sur un objet, la vitesse de l'objet est-elle supérieure à…) et d'actions, qui seront effectuées si les conditions sont remplies (déplacer un objet, créer un objet, afficher un texte, jouer un son…).
Il est possible d'utiliser des sous-événements et d'ajouter des commentaires ou des liens vers les événements des autres scènes du jeu. Le support des boucles ou des événements-fonctions est inclus. Les conditions et actions et types d’événements sont extensibles grâce à des apports créés par la communauté.
Les événements sont améliorés en interne par GDevelop pour une meilleure optimisation lors de l’exécution du jeu.

## Compilation des jeux

GDevelop permet de compiler des jeux en des jeux autonomes, ne nécessitant pas le logiciel Electron (pour GDevelopo5). La compilation permet d'exporter pour Windows, MacOS, Gnu/Linux. La compilation via Cordova permet de créer des applications pour IOS ou Android, et enfin il est possible de juste transcrire les évènements en JavaScript pour GDevelop, ou des jeux HTML pour ensuite les mettre en ligne et jouer depuis tout navigateur web récent.

## Technologies

L'EDI de GDevelop 5 est écrit en Javascript. L'interface du logiciel est en React et utilise les bibliothèques material-ui et PIXI pour le rendu. Pour modifier le projet, une bibliothèque C++ portée en WebAssembly est utilisée. Les outils Piskel, Jfxr et YarnSpinner sont inclus pour assister le développement. Le tout est emballé avec Electron.
GDevelop 4 est écrit en C++ et repose essentiellement sur la bibliothèque SFML pour la gestion du multimédia et sur Widgets pour l'interface de l'éditeur. Le logiciel utilise également Boost et TinyXML.
Le moteur de jeu actuel (GDJS) est fait en Javascript pour la plus grande partie ES5 (on peut trouver des traces d'ES6 ici et là, surtout dans les extensions).
Jusqu'à GDevelop 4, il y avait aussi un moteur natif en C++ (GDCPP) mais il a été abandonné car non utilisable sur un navigateur et qu'il n'était plus possible de maintenir deux moteurs. Il est prévu de le supporter à nouveau quand GDJS sera assez stable et complet.

## GDevApp

GDevApp est une web application permettant avec le moteur de GDevelop de faire des jeux sans programmation directement depuis un navigateur. La web app est basée sur le code de GDevelop et dispose d'une interface plus simple mais de la même puissance en interne.
GDevApp a désormais été remplacé par l'éditeur de base de GDevelop 5, qui a été reprogrammé en JavaScript et qui est du coup nativement compatible avec le navigateur (l'interface est complète et a presque toutes les fonctionnalités de l'éditeur de bureau).

## Financement participatif de mars à mai 2014

Un financement participatif a été mis en place sur le site Indiegogo du 23 mars au 18 mai 2014.

## Origine du logo

Selon l'auteur principal du logiciel :
"Le G est une sorte de spirale qui a été coupée (au D de "Développer") (on part du centre et on suit le G, puis on continue une spirale imaginaire jusqu'à l'arc sous le G, puis on continue une spirale imaginaire de l'arc pour faire le tour du G).
Le sens de la spirale est qu'il s'agit d'une forme où l'on part d'un point et où l'on se développe en tournant autour de ce que l'on a déjà. J'ai aimé l'analogie avec la programmation, où vous créez une application/jeu en construisant une abstraction/fonctions/comportements sur des choses simples, alors vous pouvez réutiliser ces abstraction/fonctions/comportements pour rendre les choses encore plus complexes et intéressantes, et ainsi de suite.
Le logo est donc un indice très subtil de l'art de construire des objets (dans notre cas de jeu) en assemblant des blocs de construction - ce qui est maintenant particulièrement le cas avec les comportements personnalisés / extensions utilisant des événements.
Note finale, la spirale comme la propriété intéressante qu'il va dans toutes les directions, remplissant l'espace entier. C'est un indice pour permettre aux gens de créer des choses sans limites - vous n'êtes pas contraint d'aller dans une direction."