habile-game
habile-game
Habile
4 posts
the game devlog
Don't wanna be here? Send us removal request.
habile-game · 5 years ago
Text
Milestone 3 : De l’or, merci
Nous voici réunis (à distance bien sûr !) pour un tout nouveau résumé de Milestone. Cette semaine, nous avons commencé à développer un nouvel aspect de HABILE : la collecte de ressources. En effet, pendant une partie, il vous faudra de l’or pour acheter des unités et de l’expérience pour débloquer de nouvelles technologies. 
La gestion des ressources
La première chose faite a été de créer le système qui gère les ressources du joueur. Dans un premier temps, nous nous sommes concentrés seulement sur l’or, rien de bien sorcier : des variables, avec possibilité d’ajouter, retirer, vérifier si le compte est bon, ainsi qu’une synchronisation des valeurs en multijoueur !
Tumblr media
Création des premiers objets interactifs
Le joueur aura plusieurs manières de récolter de l’or mais les plus simples au début de la partie seront de trouver les petits coffres répartis aléatoirement sur la carte ou de miner un filon (l’unité reste à côté du filon et le joueur gagne directement de l’or à chaque coup de pioche !)
Nous avons voulu créer un système générique permettant de poser la base des objets interactifs : une action se déclenche lorsqu’une unité l’actionne. 
Pour les ressources, il ne restait plus qu’à découler de cela. L’action du minerais d’or donne à l’unité la quantité d’or par tick (coup de pioche). Pour le coffre, c’est la même chose, sauf qu’il se détruit au 1er tick.
Tumblr media
Interactions
On a un système prêt à augmenter une variable d’or, des objets interactifs configurés, et des unités. Maintenant il faut que ces unités récoltent l’or en anticipant quelques besoins futurs, comme la possibilité d’être interrompu par un attaquant par exemple.
Tumblr media
On a donc choisis d’utiliser le modèle de conception commande. Nos unités devront être capables de recevoir et d’exécuter des commandes contenant des actions et des paramètres. Ce choix a plusieurs avantages:
Il permet d’implémenter facilement des nouveaux comportements sans avoir de conflit avec l’existant. En effet nos unités exécutent une commande à la fois, il n’y a donc pas d’effets de bords où l’on oublierait de désactiver un comportement pendant l’utilisation d’un autre.
Il nous permet aussi d’anticiper les interruptions et la reprise d’une tâche. Si une unité est en train de récolter des minerais et se fait attaquer, on veut que sa commande d'attaque passe en priorité devant les autres. Une fois le combat terminé, elle aura toujours en mémoire ses anciennes tâches et pourra rependre sa routine. 
Tumblr media
Nous avons donc repris notre code initial gérant les déplacements pour les passer en commandes. Puis nous avons créer une commande ordonnant de récolter une ressource.
Et maintenant ?
Et bien récolter de l’or c’est fun, mais c’est encore mieux de le dépenser non ?
Tumblr media
3 notes · View notes
habile-game · 5 years ago
Text
Milestone 2 : le début de la partie
Bonjour et bienvenue pour un nouveau point Habile. Vous êtes maintenant connectés, vous avez choisi votre pseudo, votre civilisation, les doigts sont échauffés et vous êtes prêts à faire exploser les APM ? Et bien cliquez sur le bouton “Play” et découvrez ce qui se passe ensuite !
Tumblr media
Le Pre-Game
La partie Pre-Game désigne pour nous toutes les étapes entre l’arrivée sur la scène de jeu (après le chargement) et le début réel de la partie. Notre idée est de créer un système modulable pour pouvoir ajouter/enlever à la volée des étapes avant le début de la partie.
Par exemple, au début du prototype, nous n’avions pas intégré la caméra et grâce à notre système, nous avons pu insérer le module qui la paramètre entre deux étapes sans avoir à toucher à celles-ci. Nous pouvons aussi créer plusieurs modules de spawn (aléatoire, au choix du joueur, …) et switcher très rapidement de l’un à l’autre pour les tester.
Tumblr media
Actuellement, la routine de Pre-Game se déroule comme cela : les joueurs indiquent qu’ils sont prêts, quand tout le monde est prêt un point de spawn aléatoire leur est assigné et enfin, chaque joueur récupère ses unités de base (avec la caméra qui va se placer sur le point de spawn).
Tumblr media
Premiers systèmes de jeu
Le joueur peut sélectionner ses unités
La sélection des unités n'est pas réinventée, on reste sur des méthodes connues:
Sélection d'une unité par clic gauche
Sélection de plusieurs unités par un clic gauche glissé
Sélection de toutes les unités avec la combinaison Ctrl + A
À cela nous avons ajouté la possibilité d'ajouter ou supprimer des unités à sa sélection en gardant la touche Ctrl enfoncée.
Tumblr media
Pour ce qui est de la logique, nous utilisons un manager qui garde en mémoire la sélection et qui communique les changements de cette dernière par des évènements Unity. De cette façon les interfaces et les différents effets n'auront qu'à "écouter" ces changements.
Tumblr media
La sélection par groupes précédemment enregistrés et par type est prévue et sera implémentée par la suite…
Le joueur peut déplacer ses unités
Le déplacement des unités est assez classique lui aussi. L'ordre avec la destination est donné par un clic droit sur le terrain, et le chemin à parcourir pour y arriver utilise l'algorithme A* (A star).
Tumblr media
Pour la résolution du chemin, appelé "pathfinding", nous utilisons le NavMeshComponent proposé par Unity. Ce composant se base sur une surface 3D précalculée sur laquelle les unités vont trouver leur chemin et se déplacer. Il propose la possibilité de recalculer en temps réel cette surface, ce qui nous sera certainement utile pour suivre les changements de terrains ou l'apparition d’obstacles.
Tumblr media
Le petit défi a été de gérer les troupes. En effet, dans Habile vous pourrez déplacer des lots d’unités, et l’on s’attend naturellement à ce que ces unités se placent en rang une fois arrivées à destination. Il a donc fallu déduire, à partir de la position du clic, la destination réelle pour chaque unité afin de former les rangs. Autrement les unités se seraient agglutinées autour de la destination.
Tumblr media
Pour implémenter cette conversion d’un point en un ensemble de points représentant les rangs, nous avons utilisé le design pattern strategy avec des ScriptableObjects (cf Milestone 1). Ainsi, nous pouvons implémenter de nouvelles façon d'ordonner les unités rapidement. En créant une toute nouvelle manière de calculer les points (stratégie), ou en créant une nouvelle instance dans Unity avec de nouveaux paramètres. Ces mêmes stratégies sont utilisées pour placer les unités au début de la partie.
Tumblr media
Contrôle de la caméra
Un dernier indispensable pour un RTS c'est le contrôle de la caméra bien sûr. L'objectif a été de permettre :
Le contrôle au clavier ◀️🔼▶️🔽 et ZQSD
Le zoom à la molette
Recentrer la caméra sur les unités sélectionnées
Suivre les unités sélectionnées
Tumblr media
Pour la gestion de la caméra nous avons utilisé un autre package proposé par Unity, Cinemachine. Il propose d'origine un ensemble de scripts pour contrôler finement la caméra et pour suivre des groupes d'objets.
Tumblr media
Il nous a donc suffit de lier les commandes et de synchroniser l'ensemble d'objets à suivre avec la sélection d'unité.
Et la suite ?
Voilà pour cette Milestone qui a mis en place les bases indispensable du gameplay. Notre prochain objectif touchera un sujet un peu plus concret de Habile, à suivre…
Tumblr media
10 notes · View notes
habile-game · 5 years ago
Text
Milestone 1 : Menu principal, début du multijoueur et créations des civilisations
Nous voilà donc pour le retour de notre 1ère milestone !  Tout d’abord, qu’est ce qu’une milestone ? C’est un marqueur dans un projet qui signifie un changement ou une étape de développement. 
Pour cette étape, nous nous étions fixés comme objectif d’importer dans le projet le système réseau que nous allons utiliser et de construire la base du multijoueur. C’est à dire que le joueur puisse se connecter, choisir son pseudo, créer une partie ou en rejoindre une. Ensuite, nous voulions créer plusieurs civilisations. C’est l'un des premiers choix que pourra faire le joueur et dont découlera beaucoup d'autres, c'est pourquoi il a été important pour nous de mettre en place la gestion de cette donnée le plus rapidement possible. Enfin, nous avons créer un menu permettant de rendre toutes ces fonctions accessibles aux joueurs !
Menu principal
Pour le menu, le but était de créer une interface permettant de choisir son pseudo, sa civilisation, la scène à lancer et de lancer la recherche ou la création de lobby automatiquement. Nous nous sommes accordés le droit d’ajouter quelques éléments graphiques pour ne pas saturer du visuel par défaut de Unity.
Tumblr media
Multijoueur
Nous avons choisi d’utiliser Photon Unity Network pour la partie multi-joueur. 
Pourquoi Photon ? Grâce au SDK conçu pour Unity, ce service nous permet de créer très facilement une partie avec “lobby” et “room” (entendez par là “mise en relation des joueurs” et “création d’une partie”) . On peut avoir gratuitement jusqu'à 20 utilisateurs simultanés, ce qui est amplement suffisant pour nos tests pour le moment. De plus, la partie réseau interne de Unity est en gros chantier !
Aillant déjà utilisé Photon, nous n’avons pas eu de soucis particulier pour mettre en place de la logique de communication entre les clients, ni pour la logique de client maître (le joueur hôte de la partie).
Tumblr media
Pour créer et rejoindre une partie, nous sommes allés au plus simple. Lorsque l’on clique sur “Play”, on vérifie la scène sélectionnée, si personne n’en a encore lancé avec cette scène, nous en créons une nouvelle, sinon nous rejoignons l'existante.
Tumblr media
On ne voit pas bien sur le gif, mais le 2eme joueur voit qu’il y’a déjà 1 joueur connecté dans la scène choisie !
Création des civilisations
Pour tout ce qui concerne les données du jeu (civilisations, unités, technologies, …) nous allons utiliser les Scriptable Objects. Ce sont des conteneurs de données indépendants. Ils sont vraiment pratiques et tout indiqués dans notre cas ! Une fois la structure de notre objet créée (par exemple pour une Civilisation le nom, le logo, …), on peut en quelques clics créer plusieurs variantes et modifier les valeurs.
Tumblr media
3 notes · View notes
habile-game · 5 years ago
Text
Bienvenue !
Bienvenue sur le blog de développement du projet Habile !
Habile vous dites ? Et bien oui pour Harvest Army Battle-royal Improve Lords Explorers évidement ! N’allez pas penser que ce nom de code est le fruit du hasard, il provient bien d’une longue réflexion pour décrire ce projet. Ou pas...
Tumblr media
Le but de ce blog et de faire un point rapide sur les features développées à la fin d’une milestone : quelques explications accompagnées de visuels. Et si un des sujets sur lesquel nous avons travaillé nous semble intéressant, pourquoi pas en faire un article technique plus détaillé !
Qu’est ce que le projet Habile ?
Ce projet Habile reprend des codes du battle royale, c’est à dire des combats joueur contre joueurs où le dernier survivant remporte la partie, avec une zone de jeu qui devient de plus en plus petite.
Dans Habile cependant ce n’est pas un personnage unique que vous contrôlez, mais une armée ainsi que votre base stratégique.
Pendant la partie, il faudra créer votre armée,  vous développer vos technologies pour améliorer vos troupes, tout en veillant aux autres joueurs et au terrain dynamique.
Tumblr media
6 notes · View notes