Ajout de fonctions à la console
Ce tutoriel vous apprendra à créer une nouvelle commande au sein de la console de commande d'OpenTTD. Vous devez connaître un minimum le langage de programmation C afin de pouvoir suivre et comprendre ce tutoriel.
Le but ici est de savoir comment fonctionne la console de commande d'OpenTTD.
La console du jeu est accessible via la touche ² du clavier (en haut à gauche au dessus de tab et juste dessous la touche ESC, juste à gauche de la touche 1). Voici un exemple de commande :
rcon <passsword> "setting max_company 10"
Cette commande par exemple, permet de définir au niveau du serveur, un maximum de 10 compagnies présentes sur le jeu. Elle se compose de la commande rcon qui permet d'envoyer une commande au serveur, elle dispose ensuite de deux paramètres, le premier qui est le mot de passe configuré au sein du serveur et la seconde mise entre guillemets (appelés aussi des double quotes en informatique) ici indique que nous modifions la configuration concernant le nombre de compagnies maximum que l'on place à 10.
Aujourd'hui, nous allons donc voir comment créer une nouvelle commande mais qui ne possède pas de paramètres et qui ne fait pas grand chose d'intéressant, mais cela permet d'apprendre déjà où cela se trouve et comment en créer une.
Qu'allons nous voir ?
Nous allons voir comment créer une commande sans paramètre, voir un exemple de couleurs possible et enfin ajouter la commande au sein de la console.
Pour pouvoir afficher un texte au sein de la console, il faut utiliser une fonction particulière de l'API du jeu, il s'agit de la fonction :
IConsolePrintF
Cette fonction demande une couleur, comment formater le texte (voir la documentation de la fonction printf du C) et enfin le texte concerné. Attention toutefois, car la même fonction sans le F final, ne fait pas un retour à la ligne automatique (équivalent du \r en C).
Les couleurs que l'on peut utiliser
Nous pouvons utiliser les couleurs suivantes :
- CC_DEFAULT qui est la couleur par défaut du texte de la console
- CC_WARNING qui est la couleur des messages d'avertissement
- CC_ERROR la couleur est actuellement rouge, cela représente les messages d'erreurs
- CC_WHITE c'est du blanc tout simplement
Chaque couleur est utilisée suivant ce que l'on souhaite exprimer et le rouge n'est pas spécifique aux messages d'erreurs.
Ajout de notre commande à la console
Pour ajouter ou modifier une commande de la console, il faut que nous modifions le fichier console_cmds.cpp du répertoire src des sources du jeu. Le fichier semble organisé de façon assez bizarre, en partit par la présence de DEF_CONSOLE_CMD, mais pas de soucis c'est un simple define. Nous devons maintenant créer un Alias, c'est à dire que nous allons faire appel à une fonction qui va faire le lien entre le nom tapé dans la console du jeu et le nom de la fonction à appeler.
Cherchons :
IConsoleCmdRegister("ls", ConListFiles);
Ici, nous voyons deux choses : premier paramètre qui est le nom à taper dans la console (ici c'est ls) et en second paramètre, il s'agit du nom de la fonction à appeler (à savoir ConListFiles). Juste dessous, reprenons le même principe, mais en mettant en premier paramètre test et ConTest pour le second paramètre. Voici le résultat :
IConsoleCmdRegister("test", ConTest);
Une fois que nous avons déclaré notre Alias, il faut créer la fonction en elle même. Pour cela nous allons rechercher :
DEF_CONSOLE_CMD(ConListFiles)
Sous cette fonction, nous allons ajouter la même chose mais avec ConTest au lieu de ConListFiles. Maintenant au sein de cette fonction, nous affichons notre texte avec la fonction IConsolePrintF et on renvoi un boléan à true. Exemple :
DEF_CONSOLE_CMD(ConTest)
{
IConsolePrintF(CC_DEFAULT, "%s", "This is a command test");
return true;
}
Il ne vous reste plus qu'à procéder à la compilation et au lancement du jeu. Dans une partie, ouvrez la console et tapez la commande test, vous y verrez alors le résultat.
J'espère que vous aurez eu autant de plaisir à lire ce tutoriel que j'en ai eu à l'écrire. Vous trouverez prochainement d'autres tutoriels sur la programmation OpenTTD.
Sujet en relation