Viking City Builder - Carnet de Développement #1

Bonjour, chers Vikings !

Je sais que je n'ai pas posté beaucoup de nouveaux contenus vidéo ces derniers temps, alors j'aimerais partager avec vous ce que j'ai fait. L'une des choses qui m'excitent le plus dans les jeux de construction de villes est la simulation d'une société vivante, qui respire. Les citoyens ne se contentent pas de faire des allers-retours entre la mine d'or et la mairie, comme dans un jeu RTS typique. Ils ont des maisons et des familles. Ils ont des noms, des vies et des histoires intéressantes. Une fois que vous avez mis en place une économie de travail, vous pouvez les regarder faire leur travail et commencer à vous occuper vraiment d'eux. Et comme les nordiques de l'âge Viking sont célèbres pour leur cran et leur forte volonté, il est super important pour moi de donner vie aux citoyens de Viking City Builder.
J'ai commencé par jouer mes bâtisseurs de ville préférés : Banished et Dawn of Man. Je me suis plongé dans ces mondes et j'ai passé beaucoup de temps à observer mes citoyens. Ensuite, j'ai joué des inspirations un peu moins évidentes, comme RimWorld et Frostpunk. J'ai aussi regardé beaucoup de vidéos youtube sur la vie des Vikings. Quelle était leur routine quotidienne, etc.

Après cela, j'ai senti que je savais ce que je voulais réaliser. Maintenant, j'ai juste besoin de COMMENT. Comment transformer mon idée de la vie dans un village viking en code.



Pour réaliser ce que je voulais, j'avais besoin d'un système d'IA (Intelligence Artificielle) vraiment robuste. Ma première implémentation de l'IA a été assez simple - j'ai utilisé des arbres de comportement pour que les unités fassent ce que je voulais. Unreal Engine a un système BT intégré qui est facile à utiliser et que je connais bien. Il fonctionne très bien pour les comportements prédéfinis, en créant une IA réactive, comme dans les jeux Shooter ou RTS.

Mais ce dont j'ai vraiment besoin, ce sont les comportements émergents, quelque chose qui vous fait croire que c'est un être indépendant et non un robot préprogrammé. Il fallait que j'aille plus loin. J'ai donc commencé à faire des recherches.

Je me suis souvenu de mentions de technologies comme le Goal Oriented Action Planning et l'Utility Based AI. Après avoir lu un peu sur le sujet, j'ai décidé que l'IA utilitaire était la voie à suivre. Je ne veux pas que ce post devienne un livre, donc je vais essayer d'expliquer brièvement ce qu'est l'IA utilitaire.



Imaginez que vous avez un jeu comme Les Sims. Votre sim a peu de besoins - disons la faim, le sommeil, l'hydratation et le divertissement. Alors, comment programmeriez-vous votre Sim pour qu'il décide de ce qu'il doit faire ensuite ? Si vous utilisiez les arbres de comportement ou d'autres approches d'arbre de décision, vous devriez coder un grand nombre de cas : si vous avez super faim et que vous n'êtes pas fatigué, mangez de la pizza. Mais si vous avez un peu faim et que vous êtes super fatigué, dormez d'abord et mangez ensuite une pizza. Imaginez maintenant que vous deviez préprogrammer tous ces comportements pour le jeu.

L'IA basée sur l'utilité vous permet de créer une fonction de mise en forme - une fonction qui prend en compte certaines considérations et produit un nombre pour chacune des décisions. Par exemple, pour manger une pizza, vous pourriez créer une fonction du type "envie de manger une pizza = 5 * faim + 2 * ennui - 10 * taille de mon ventre" Vous avez compris.

C'est exactement ce dont j'avais besoin. Malheureusement, il n'y a pas de cadre d'IA utilitaire intégré dans Unreal, donc maintenant je passe mon temps entre la lecture de livres blancs sur l'IA utilitaire et l'essai de l'implémenter dans Unreal. Si vous pensez que je ne suis pas très actif sur les médias sociaux, c'est peut-être parce que j'essaie de trouver la meilleure fonction pour manger une pizza
Vous pouvez discuter de cet article sur le forum en cliquant ici.

Auteur : Roslagen
Traducteur : Ancient Egypt Fan