ShimStar : l'aventure est dans les étoiles

Une nouvelle aventure commence : venez jouer dans les étoiles, dans un jeu multijoueur

Aller au contenu | Aller au menu | Aller à la recherche

lundi, janvier 4 2016

2016

HEllo,

New beginning for shimstar... again All these years, I grew up my skills around 3D, networking, game design... and I made something very cool around shimstar on panda3d. I think I have something quite mature, and I am proud of this, because I wrote lot of code to be at this step.

But I choosed to do a restart using a game engine mature, known of the market. It is long time I looked at Unreal Engine, and because of this, I choosed to use it for this next step. Unity was another choice possible... but for different reasons, not all very consistent, I choosed unreal engine 4.

On this first step, I think I will try to create something simpler than a mmorpg :D I will keep the multiplayer stuff, and implement some missions to do with AI. Once in space, you will have things to do, linked between them. For example, once you kill the first enemies, you will have to reach a point to protect something, ... and so on.

My feelings after 3 months, is that unreal engine is not for totally beginners. I think if you have a good background on 3D, graphisms, gameplay, it will enhance your ability to build a good game, otherwise you will spend lot of time to do something, that anoter engine can do easier.

I will use this blog, to show some stuff I do with unreal engine. Lot of things can be done without coding, using a workflow tools named blueprint.

I hope it can be usefull for other people.

mardi, août 6 2013

2013-08-06

Ca y est, cela prend forme. L'architecture est plus robuste. Les communications réseaux sont plus fluides, et mieux gérées. Elles sont séparées entre les différents serveurs selon leur nature (global, spécifique zone), et dispatcher entre UDP et TCP selon le souhait d'avoir une information qui soit importante ou non.

Contrairement à la version précédente, je me concentre sur le coeur du jeu réellement, c'est à dire le pilotage du vaisseau, le multi joueur et l'IA. Toute la partie RP, évolution, skillz, achat/vente ne m'intéressent pas pour le moment. Ces fonctionnalités sont facilement implémentable et ne sont que des éléments d'interface avec des règles de gestion touffues certes, mais on est loin de gestion temps réel des joueurs.

Si la partie temps réel fonctionne réellement, avec de bonnes performances, une bonne maniabilité et un bon sentiment de jeu, je repartirai sur toute la partie interface, et complément de jeu.

Le jeu se résumera pour l'instant à une bataille spatiale entre joueurs et IA, sans autre possibilités.

J'ai lors de la réécriture, utilisé du code existant, mais j'ai réécrit énormément de code, pour l'optimiser, et m'adapter à mes propres changements d'architecture qui était structurant sur la manière de coder. Je me suis rendu compte également de pas mal d'erreurs.

Le bilan est grandement positif, mais néanmoins, il me reste un travail conséquent. Il me faut également à un moment donné me jeter à l'eau et tester l'ensemble sur Internet, ce qui me donnera un réel feedback de la viabilité du projet.

lundi, juin 10 2013

v3 : nouveau départ

Bonjour,

Un nouveau départ! Après 2 ans de choix, de contre choix, et d'autres choix... Mon code s'est vu restructurer, dans tous les sens, et l'impression d'un vaste tas de bout de scotches qui tiennent par magie. De cela, j'ai choisi de repartir de zéro, de mon expérience, et en récupérant les quelques éléments pertinents qui me permettront d'avancer plus facilement.

Ici, les premiers jets de la documentation technique http://www.hostedredmine.com/projects/shimstar/wiki/DocTechnique.

J'espère y gagner énormément en performance, notamment en performance réseau pour accueillir des joueurs.

mercredi, janvier 16 2013

15 01 2012

Un petit état d'avancement. Je rencontre de véritables problèmes de performance actuellement, lié au fait d'avoir mis un certain nombre d'IA en place. Le traffic réseau est plus important, et la gestion des IAs en traitement et en affichage est important.

Je travaille ardemment sur le sujet, car si je ne peux pas mettre de joueurs vs des IAs autant m'arrêter.

Je n'avais pas encore abordé le sujet Thread, et j'ai du m'y mettre.

A ce jour, une boucle unique exécutait de manière quasi séquentielle toute les étapes du programme (traitement des messages réseaux, mise à jour des positions, recueil des touches pressées, affichage des objets,...). Quand un grand nombre de messages arrivent, et qu'il faut traiter les messages pour mettre à jour les objets cela devient juste l'horreur.

De ce fait, sur le client, j'ai désormais 3 threads:

*  le 1er qui gère la communication réseau
* le second qui met à jour les objets (IA, joueur, vaisseau, position, ....)
* le 3e qui gère l'affichage et les inputs joueurs

Côté serveur, j'ai également 3 threads:

* communication réseau
* vie du monde
* création des messages réseaux de mise à jour des clients

J'ai des temps qui se sont largement améliorés. Ma boucle principale côté client passe de 0.08 sec en moyenne à 0.015 sec. Mes envois réseaux sont effectivement envoyés tous les 1/4 de sec, et non plus tous les 0.45 sec en moyenne.

Je suis content d'être passé par cette étape. Néanmoins, elle est encore insuffisante, il faut que je trouve les éléments techniques qui pêchent encore. Mon but est de pouvoir assurer une performance optimale pour au moins 10 joueurs ou IA dans un premier temps.

A suivre

lundi, novembre 26 2012

25 11 2012

Gestion des événements dynamiques:

Quelques petites réflexions sur le sujet. Je vais commencer par gérer des événements associés à une zone. Il est évident que plus tard, certaines actions (causes) généreront des événements inter zone. Mais ceci est complexe, et lourd à mettre en place. Etant adepte de la théorie des petits pas, je commence par quelque chose que je vais pouvoir maîtriser et tester.

Le premier événement décrit débutera à l'arrivée d'un joueur dans la zone.

La question sous jacente est comment je décris l'arrivée dans une zone, et comme j'y réagis. J'ai des objets événements qui attendent pour démarrer un critère d'entrée. Pour la compréhesion, j'utiliserai le terme anglais event pour les événements dynamiques, et événements pour des choses qui arrivent dans le jeu. Dans une zone, un certain nombre d'événements seront déclencheurs: -- Arrivée d'un joueur dans la zone -- Destruction d'un NPC en particulier pourrait être déclencheur -- Un timer Chaque event a une condition de déclenchement basé sur un événement du jeu.

En terme de conception informatique, la solution va tourner sur un système d'abonnement. Un objet va contenir une liste d'événement éligible dans certaines localisations, et chaque event, choisira de s'abonner à un événement.

Lorsqu'un événement se produira, l'objet liste événements sera mis à jour, et déclenchera la fonction adéquate de l'event associé. En python, comme dans d'autres langages, il est possible de stocker une référence d'une fonction dans un tableau

ex: tabfunc={} tabfuncidZone1idTriggerNouveauJoueur=evt1.declenche et ensuite de déclencher en faisant: idZone1idTriggerNouveauJoueur() Cela me paraît pertinent pour les MasterEvent (event mâitre duquel découle X événements enfants). Ensuite la gestion du déclenchement des événements fils me paraît plus subtil à mettre en oeuvre. Une phase de réflexion est nécessaire à l'élaboration finale des événements.

jeudi, novembre 22 2012

21 - 11 - 2012

Beaucoup de réflexions sur l'élaboration de la prochaine étape, à savoir la mise en place d'événements dynamiques. Le but est de proposer aux joueurs une interactivité avec le monde qui ne soit pas forcément dépendant du joueur. Que le joueur soit présent ou non, qu'il ait parlé à un npc ou non, l'événement arrivera selon certaines conditions.

Par exemple, des batailles se tiendront entre les différentes factions pour la conquête de certaines zones, ou la destruction de certaines ressources. Ces batailles se dérouleront même si aucun joueur ne se trouve dans la zone. Egalement, un joueur pourra influencer l'issue de la bataille en y participant. L'élaboration des événements est quelque chose d'assez important, et nécessite une grosse réflexion. On considérera un master event, qui sera l'événement à proprement parler. Celui ci se déclenche quelque part selon certaines conditions (lesquelles?quel type de condition?). Ce masterevent contient des sous événements, qui sont tout ce qui va se passer durant cet événement : arrivée d'un groupe d'IA à telle localisation, avec tel objectif par exemple. Ces event unitaires seront décrits aussi selon un grand nombre de paramètres qui sont à définir, dans le but ensuite de pouvoir développer un éditeur d'événements, qui permettra de créer des événéments rapidement par un concepteur d'événements.

D'autres types d'événements existeront qui réguleront la vie de Shimstar. Une réflexion est en cours également sur la vie en elle même. A mon sens, une partie du jeu doit être régulée par des personnes que je nommerai Maître du jeu, pour insuffler les directions, créer des événements, manipuler les factions. Par contre, il pourrait être intéressant d'avoir un moteur de vie globale automatisée. Selon les intérêts, le comportement des responsables de faction, les forces en présence, les besoins en matières premières, les lieux stratégiques, certains événements pourraient se créer de manière automatique sans l'intervention des maîtres du jeu. Des zones seraient conquises, des transports capturés, des npcs rançonnés... Une espèce de simulation géopolitique.

Par contre, il est nécessaire que les 2 cohabitent.

A suivre....

mardi, novembre 6 2012

5-11-2012

Bonjour,

Voilà quelques temps que je n'ai donné nouvelles. Quel avancement? je suis en plein dans la mise en place d'IA. J'avais fait quelques tentatives à une époque, qui me donnèrent un premier jet très brouillon. J'ai refactoré complétement les différentes classes, pour avoir 2 classes de comportement (attaque, et patrouille). J'ai ajouté des caractéristiques à l'IA comme aggressivité. En effet, en patrouille, si l'IA est aggressive, elle scrute régulièrement aux alentours, et si elle trouve une cible, l'acquiert et change de comportement. Quand la cible est détruite, elle revient à son comportement initial, par un système d'empilage en fifo.

Une problématique à résoudre a été le système de visée. En effet, l'IA doit tirer sur son ennemi, mais pas en direction de l'ennemi, mais en anticipation de son mouvement. Le cas simple de l'ennemi immobile était simple à gérer, par contre quand l'IA se déplace ainsi que sa cible, cela devient bien plus compliqué. Après d'âpre discussion sur la manière de faire, il s'avère qu'il s'agit d'un probléme mathématique assez simple, qui consiste à trouver l'intersection de 2 cercles. Mon ami Chriskang m'a sorti la résolution de ce problème de manière informatique, et l'IA touche sa cible très souvent désormais. A tel point, qu'à ce jour, avec la maniabilité du vaisseau joueur, en moins de 3 sec, on se faisait détruire. Quel efficacité.

Pas mal de balance sur les caractéristiques des armes et des vaisseaux sont à prévoir.

A ce jour, je planche sur le déplacement entre zones.

Le but de la prochaine version, est de créer une mission de bataille d'ampleur. Quand le joueur arrive dans la zone, une 50 taine de vaisseaux apparaîtront de 2 factions différentes, et essayeront de se détruire les uns les autres. Le but est de voir comment un grand nombre d'IA se comporte, et d'avoir un effet visuel intéressant pour le joueur.

De là, découleront sûrement d'autres comportements et caratéristiques : protection, aller à un point, défense, fuite, ...

Avec cela, je serai en mesure de créer une pléthore de missions, et de pouvoir refaire une petite séance de tests avec joueur.

mardi, octobre 2 2012

02 10 2012

Journal de bord du Capitaine de Frégate, Shimrod,

Après une pause de 5 semaines, où j'ai consacré du temps à un petit challenge (http://www.facebook.com/groups/423434084380089/), je reprends mes activités sur Shimstar.

Alors pour l'avancement, la partie "marchand" est opérationnelle. Elle comprend

* La possibilité d'aller voir un marchand
* d'avoir accès à une liste d'items à acheter
* de pouvoir acheter ou vendre des items

La partie minage est avancée, elle comprend :

* L'association de minerai à un asteroid
* La possibilité d'accéder à un menu de minage sur l'asteroid
* De collecter du minerai
* D'obtenir du minerai dans son inventaire

Je me lance aujourd'hui dans une nouvelle aventure que j'ai longtemps mis de côté, à savoir la partie "Intelligence Artificielle". En effet, au delà de tous les artifices, et possibilités du jeu, l'un des nerfs principaux de Shimstar reste le combat spatial. A ce jour, mes modèles principaux reste les jeux XWing et Tie Fighter. J'ai en image, ces missions où en arrivant dans la zone, on y trouve plein de vaisseaux à l'horizon, avec des tirs rouge et verts, et où tu participes à une bataille.

J'aimerai reproduire un peu cela. A ce jour, j'ai avancé sur la poursuite, où un vaisseau est capable de poursuivre une cible, et faire une manoeuvre d'évitement très simple. Les 2 prochains steps, seraient :

 * Tirer sur la cible pour tenter de la détruire
 * Créer un comportement de fuite

Concernant la fuite, une grosse question, est d'établir quelles sont les conditions de passer en mode fuite. Est ce qu'un tir suffit à obliger un NPC à se mettre en mode fuite, en dépit de son propre objectif de combat?

Avec ces briques, je voudrai créer une petite scène, où quand le joueur arrive dans une zone, il y a déjà, on va dire 20 NPCs présents. Au moment où il entre dans la zone, chaque NPC acquiert une cible (joueur ou autre NPC), et démarre la poursuite et la destruction. Le joueur essayant de survivre dans cette bataille.

En en discutant, pour rendre les choses pimentées, et "humaines", un certain nombre de comportement aléatoire vont devoir être inscrits dans le comportement des IAs :

 * changement radical de trajectoire (pour tenter de reprendre la cible depuis un autre angle)
 * changement de cible (lassitude, ou cible trop compliquée)
 * autres...

Voili, à bientôt les batailles spatiales dans shimstar

mardi, octobre 2 2012

02 10 2012

Journal de bord du Capitaine de Frégate, Shimrod,

Après une pause de 5 semaines, où j'ai consacré du temps à un petit challenge (http://www.facebook.com/groups/423434084380089/), je reprends mes activités sur Shimstar.

Alors pour l'avancement, la partie "marchand" est opérationnelle. Elle comprend :

-- La possibilité d'aller voir un marchand
-- d'avoir accès à une liste d'items à acheter
-- de pouvoir acheter ou vendre des items

La partie minage est avancée, elle comprend :

-- L'association de minerai à un asteroid
-- La possibilité d'accéder à un menu de minage sur l'asteroid
-- De collecter du minerai
-- D'obtenir du minerai dans son inventaire

Je me lance aujourd'hui dans une nouvelle aventure que j'ai longtemps mis de côté, à savoir la partie "Intelligence Artificielle".
En effet, au delà de tous les artifices, et possibilités du jeu, l'un des nerfs principaux de Shimstar reste le combat spatial.
A ce jour, mes modèles principaux reste les jeux XWing et Tie Fighter.
J'ai en image, ces missions où en arrivant dans la zone, on y trouve plein de vaisseaux à l'horizon, avec des tirs rouge et verts, et où tu participes à une bataille.

J'aimerai reproduire un peu cela. A ce jour, j'ai avancé sur la poursuite, où un vaisseau est capable de poursuivre une cible, et faire une manoeuvre d'évitement très simple. Les 2 prochains steps, seraient :

 -- Tirer sur la cible pour tenter de la détruire
 -- Créer un comportement de fuite

Concernant la fuite, une grosse question, est d'établir quelles sont les conditions de passer en mode fuite. Est ce qu'un tir suffit à obliger un NPC à se mettre en mode fuite, en dépit de son propre objectif de combat?

Avec ces briques, je voudrai créer une petite scène, où quand le joueur arrive dans une zone, il y a déjà, on va dire 20 NPCs présents. Au moment où il entre dans la zone, chaque NPC acquiert une cible (joueur ou autre NPC), et démarre la poursuite et la destruction. Le joueur essayant de survivre dans cette bataille.

En en discutant, pour rendre les choses pimentées, et "humaines", un certain nombre de comportement aléatoire vont devoir être inscrits dans le comportement des IAs :

 -- changement radical de trajectoire (pour tenter de reprendre la cible depuis un autre angle)
 -- changement de cible (lassitude, ou cible trop compliquée)
 -- autres...

Voili, à bientôt les batailles spatiales dans shimstar

lundi, août 6 2012

06 08 2012

Bonjour,

Shimstar n'est pas mort, ne vous inquiétez pas. LA version 0.2.7 est en cours de développement. Au delà des aspects techniques, je souhaite développer de nouvelles fonctionnalités, pour faire avancer le jeu. Je m'étais mis dans la perspective d'ajouter la possibilité de miner et de récolter. Pour cela, j'ai créé un nouveau type d'objet qui correspond aux outils de minage.

Je me suis dit alors, tiens pour pouvoir miner, cela serait bien d'avoir développé sa compétence en mine, et avoir un lien entre l'objet équipé et la compétence. Du coup, j'ai développé la relation entre équipement et compétence. Les objets non équipables sont rouges désormais, et une fenêtre de prérequis est affiché. Bien entendu, l'apprentissage des compétences est également opérationnel, afin de pouvoir équiper ces nouveaux items.

Maintenant que j'ai ces fonctionnalités, je me suis dit allons miner. Mais pour pouvoir miner, il faut s'équiper de l'outil adéquat. Et comment se le procurer?

Evidemment, je suis en train de développer, la vente et l'achat auprès de marchand.

Voilà cela fait pas mal de travail en cours, pour cela, cette release prend un peu de temps à venir.

C'est ambitieux, car cela représente beaucoup de nouvelles fonctionnalités, mais au final, le joueur sera heureux d'avoir la possibilité d'avoir des marques classiques qui montre un jeu plus complet.

J'ai déjà consacré 25h sur cette version. Le rythme est moins dense que pour la précédente version, s'expliquant sûrement par le fait qu'un nouvel héritier va bientôt arriver :D

Pour info, j'ai presque atteint les 20 000 lignes de code. 4000 lignes de code depuis Juin.

mercredi, juillet 11 2012

retour d'experience

Bonjour,

J'avais envie de faire un petit retour d'expérience sur le developpement de mon jeu. J'espere que cette contribution permettra à ceux qui aiment le developpement de jeu à se poser les bonnes questions et à poursuivre leur effort.

Après quelques premières expériences, sur des petits jeux (snake, asteroid, bomberman, shoot'hem up), je me suis tourné vers l'élaboration d'un jeu 3D. Mon but est de reproduire un morceau du jeu Eve Online, un mmorpg bien connu. Pourquoi ce choix, d'abord, car j'aime les jeux spatiaux. Ensuite, car c'est un créneau où il y a encore de la place pour s'exprimer. Enfin, car le nombre de modèle 3D pour produire un jeu, peut être relativement faible par rapport à un jeu med fan par exemple. Un vaisseau, 2 asteroids... et on est parti. Mon ambition n'est pas de sortir un jeu complet, car le travail est titanesque pour une seule personne, mais c'est surtout d'apprendre, et me faire une expérience sur ce type de jeu. Si cela abouti à un jeu, et que des joueurs peuvent venir y jouer, cela sera gratifiant évidemment.

Ayant une vie privée et un travail, cela pose quelques contraintes dans mon projet: -- temps alloué à cette activité : faible. -- ressource disponible : faible. De ce constat, des décisions sont à prendre. Je ne peux pas prendre d'engagement auprès d'une équipe, et leur imposer un rythme de travail, que je ne pourrai pas suivre moi même. Je ne peux que tenter d'intéresser des gens qui souhaitent participer à l'aventure de manière ponctuelle, apportant une pierre à la fois. Je m'entoure surtout de personne avec qui je peux discuter de gameplay, de gamedesign, pour élaborer les 1eres pierre du jeu (but du jeu, quels sont les mécanismes principaux, les choses qu'on aimerait voir). Tout est bon à prendre, on triera au fur et à mesure. Avoir de l'ambition. J'essaye également d'avoir une personne technique avec qui je peux discuter des manières de faire en terme d'algo, ou d'implémentation.

Le second choix est la technologie. Ayant de bonnes compétences en Java, C++ et python, le choix est vaste. Ce qui m'intéresse est de trouver un moteur graphique répondant à mes besoins, et si possible gratuit. Deux choix s'offrent à moi (parmi tant d'autres) : Ogre (C++) / Panda3d (python). Comme j'apprécie le python, car la productivité en terme de coding est plus élevé (syntaxe allégé, pas de compilation), j'opte pour un moteur permettant de coder en python.

Sur ce point, après mon retour d'expérience, il est clair que d'autres critères doivent venir alimenter le choix: -- possibilité de créer un executable joueur facilement (pour pouvoir distribuer votre jeu) -- technologie qui puisse être hébergé facilement (pour la partie serveur) sur un serveur commercial -- possibilité d'intégrer facilement des third party (gui, moteur physique, son, réseau,...) -- vie du moteur (communauté active o/n, release régulière avec patch, ...)

Première étape : montée en compétence sur la partie moteur graphique. Je passe un peu de temps à tester les fonctionnalités du moteur graphique, et de m'imprégner de ces mécanismes et de ces contraintes. La conception est fortement marquée par les contraintes du moteur.

Rapidement, je passe à l'étape de la mise en place de la partie réseau. Il est utopique de monter un jeu, et de greffer la partie réseau par dessus. La conception des classes, et du coding en général doit embarquer la partie réseau comme une contrainte, et donc doit être prise en compte au plus tôt.

Je commence à créer mon premier modèle de classe, avec les classes essentielles (user, character, ...). Je ne m'embête pas pour l'instant avec la persistance. Des fichiers xml me suffisent pour stocker de l'information. Mon but est d'aller vite est de monter un premier proove of concept.

Une fois que je me sens capable d'aller plus loin, je commence à travailler les concepts du jeu, et j'utilise un wiki pour structurer les différents éléments du jeu. Il est important de figer quelque part les idées principales, les principaux mécanismes de jeu. Parmi ceux là, je recommande ces axes de réflexion: -- Quels sont les buts du jeu atteignable? -- Quels sont les mécanismes de jeu que vous voulez proposer au joueur (PvP, crafting, trading, ...) -- Instance de jeu, ou monde global à tout le monde -- Quelles sont les incidences d'être tué? Qu'est ce que cela implique? Pour moi la gestion de la mort est un élément clef de réflexion. -- Quels sont les principes d'évolution (histoire, xp, personnelle) que vous souhaitez voir dans votre jeu, et comment se traduisent-ils concrétement?

Clairement, ces questions donnent une orientation forte au jeu, ainsi qu'à la conception des classes de code, et à l'interaction entre celles ci. Il est indispensable de s'arrêter dans le code, pour répondre à ces questions, et détailler les réponses.

Ensuite, je repars sur le développement, et je commets un grand nombre d'erreurs, et tombe confronté à un grand nombre de difficultés techniques. J'ai bien avancé sur le maniement du vaisseau et de quelques concepts de base. Je me rends compte que certains comportements sont durs à gérer à la main, je me dis qu'il me faut intégrer un moteur physique pour gérer les collisions, rebonds, mouvements liés à la gravitation. Je choisis donc ODE, qui est gratuit et bien connu. Ce fut ma 1ere erreur. Après avoir passé beaucoup de temps à l'appréhender et à le mettre en oeuvre, je me rends compte qu'il est extrémement lourd, mais aussi buggé. En discutant avec une autre équipe de dev, il me préconise bullet, qui est beaucoup plus léger et plus adapté au jeu. En effet ODE, a vraiment été développé pour de la simulation physique poussée. Mes besoins correspondent à 10% des fonctionnalités de ODE. Je passe un temps important en refactoring, pour passer à bullet. 3 mois pour passer à ODE, 2 mois pour passer à bullet. Mauvais choix.

Concernant le gui, mes 1eres fenetres utilisent la librairie native de panda. Les fenêtres sont approximatives. Je choisis de partir sur une librairie spécialisée bien connue : CEGUI. La prise en main de CEGUI, et la définition d'un thème (très lourd en CEGUI), et mes 1eres fenetre me prend 3 mois environ. Je me rends compte lors d'une itération, que je ne suis pas capable de générer un executable pour les joueurs avec Cegui en dépendances. Je tombe sur une autre libraire qui s'appelle librocket, plus légére, et surtout qui s'appuye sur des définitions html, et des classes css. 3 mois pour passer à cegui, 2 mois pour passer à librocket.

Depuis mon vaisseau qui avance dans l'espace et quelques fenêtres, j'ai passé plus de temps à réécrire du code, qu'à en écrire à proprement parler Il est difficile de garder la motivation dans ces cas là. Mais par chance j'y arrive.

Je décide de commencer à implémenter de réels concepts de jeu (multi connexion, mini PvP,...).

En parallèle je développe un updater de jeu. Je me rends compte que le jeu peut être très lourd, et que si à chaque patch les joueurs doivent télécharger un fichier de plusieurs centaines de mo, cela ne va pas le faire. Je crée donc un updater, avec un site hébergeant les fichiers, et leur version, pour ne télécharger que les fichiers updatés.

Je n'avais jamais vraiment été dans un jeu réseau. Premier problème technique : algo de nagle. Mes paquets s'entassent et ne sont pas envoyés au fil de l'eau mais en paquet. Du coup, le jeu rame. Beaucoup de sueur pour régler ces problèmes de performance. Après moults itérations, j'arrivent à un jeu avec de premiers résultats, et peu de fonctionnalités. Je me propose de l'essayer avec des joueurs par Internet (alors que toujours en réseau local). Premier constat: trouver un serveur pour héberger un jeu fait maison, autre que Php, c'est un peu l'enfer. Bon, je trouve une solution. Je lance le test. Une horreur, un lag monumental. -- ma BP ne permet qu'un upload limité. -- linux de base active l'algo de nagle. -- mes paquets ne sont pas optimisés. J'envoie de longues chaines de caractères au lieu des types concernés (un float converti en string peut faire 20/30 caractères, alors qu'envoyé en tant que float fera 4 octets. Effectivement dans un jeu réseau, l'optimisation des envois de paquet doit être très rigoureux. Le flux réseau dans un jeu en temps réel est très important, et le taux d'envoi est réglé chez moi à tous 1/4 de secondes, avec l'envoi de position de tous les joueurs et ennemis. Cela représente un traffic très important. D'où le choix pour certains de jeu, d'instancier, afin de limiter le flux réseau à une instance, qui peut être hébergé par un serveur dédié par exemple.

Grosse itération à optimiser le traffic réseau, et à trouver un serveur avec de la BP.

A ce jour, je redémarre avec des bases saines, et pour reprendre de la motivation, je m'attarde sur des concepts joueurs. Néanmoins, face à moi se dresse quelques grosses montagnes: -- Gestion du réseau à grand nombre (>10 joueurs) -- jeu sans thread, et je pense qu'il faudrait pouvoir séparer les différentes zones du jeu en terme de thread pour pouvoir assurer une continuité de réseau acceptable -- Contenu graphique assez limité, il va falloir trouver une bonne âme pour me préparer quelques éléments de jeu (vaisseau au minimum) -- Contenu de jeu limité (quêtes, items, zones, ...) C'est un travail énorme que de travailler sur le contenu même du jeu.

En parallèle, j'ai commencé à travailler sur un éditeur de contenu visuel, plutôt que de m'échiner à remplir la base de données à la main. C'est un travail encore supplémentaire, et le temps passé sur cet éditeur n'est pas un temps passé sur le jeu.

J'ai lu entre deux également, un bon article sur les 10 règles à suivre pour faire un jeu vidéo indie. Il y a par exemple, beaucoup d'équipes qui se battent et passent du temps sur des choses futiles, et qui ne sont que des éléments superficiels à mon sens (nom du jeu, histoire, ...), et cela me fait rire.

Ce que je conserve comme conseils: -- une histoire n'est pas même le commencement du jeu, mais un élément d'appui pour le joueur -- commencer par mettre en forme les concepts du jeu (mécanismes du jeu + buts) -- choisissez la technologie/moteur qui vous permettront d'arriver à ce but en prenant en compte les différents éléments (réseau, gui, base de données,...) même si tout n'est pas pensé parfaitement au départ, donnez vous une 1ere base qui vous lancera -- soyez respectueux du travail des autres et des contraintes des autres. Vous êtes amateurs. Prenez en compte ce facteur (compétences, résultats, timing, ...). -- prenez du temps à discuter avec d'autres groupes. Ils ont leur expérience, et la partageront. -- trouvez vous de quoi maintenir la motivation. C'est le nerf de la guerre. Faites des itérations pendant lesquelles vous avez un but à atteindre qui soit tangible -- soyez conscients des limites de votre exercice et donnez vous le bon objectif : faire un jeu consomme du temps, du talent, et beaucoup de ressources. -- attention de ne pas tomber dans le cercle de création de librairie interne, mais rester bien dans le but de créer un jeu. Pas trop de librairie générique, cela consomme un temps fou. Estimer le gain réel.

Merci pour votre lecture

jeudi, juin 7 2012

07 06 2012

J'ai prévu une session de test pour les possesseurs de windows, le 15 juin 21h. Cette phase permettra de valider les choix techniques, et le support du réseau.

A ce jour, une mission est accessible, et la possibilité de faire du PvP également. J'espère de cette session un feedback de la part des joueurs, et une direction vers laquelle me diriger.

J'ai une super pression pour avoir une version jouable avec le minimum de bugs pour le 15.

vendredi, mai 11 2012

11 05 2012

Bientôt la fin de cette release. Pour rappel, le but était de créer un client jouable par le joueur. Cela a passé par un certain nombre de migrations, et de choix d'outils. Le travail a été important. Pour estimer un peu le temps passé, depuis la mi avril, je comptabilise le temps passé, et j'arrive à 60h sur cette release depuis mi avril. Cela représente un temps de travail important.

Il me reste quelques petites choses à régler, et ensuite je vais me concentrer sur la création d'un package distribuable, et ouvrir une session de jeux à plusieurs. Ce qui le souhaitent seront conviés à cette phase de premiers tests, pour me faire leur commentaire, appréciation, insultes...

Ca y est j'ai dépassé le cap de 15000 lignes de code. Une évolution constante...

Parmi les fonctionnalités opérationnelles, on peut citer:

  • Création/suppression de compte/persos
  • Station :
   * gestion de l'inventaire
   * gestion du vaisseau
   * gestion des dialogues/missions
   * affichage des compétences
  • espace
   * déplacement/tir
   * chat
   * multijoueur + gestion de la mort
   * gestion des loots
   * ennemis + destruction ennemi
   * menu sur objet (asteroid, station,...)
   * collision
  • mise en place d'un updater
  * vérifie les mises à jour et les télécharge

A bientôt

jeudi, mai 3 2012

03 05 2012

Une étape de franchi dans la vie de shimstar. J'ai pu installer la partie serveur, sur mon serveur linux. Cela a demandé un peu de temps, car il a fallu installer toutes les dépendances requises, et préparer la BDD en fonction. Par contre définitivement, c'est un petit serveur, et j'ai une BP assez limitée dans mon petit village. Je n'espère pas de miracle. Il n'y a plus qu'à finaliser une première version du client pour valider la possibilité de jouer en multijoueur par Internet. Fun attitude en perspective.

Concernant le client, le plus dur est passé, je suis en train de fignoler quelques bugs liés à la migration d'architecture applicative. Mais j'espère que dans peu de temps, j'en serai revenu à un état correspondant à l'avant migration.

Mon objectif est de délivrer une première version du jeu, permettant quelques fonctions élémentaires, afin de permettre de tester les 1eres fonctionnalités, et surtout de valider que le multijoueur est possible.

A bientôt!

mercredi, avril 11 2012

11 04 2012

Bonjour,

Shimstar is still alive. En fait, l'autre jour bêtement, j'avais envie de mettre à disposition une première version du jeu auprès des joueurs, pour leur montrer quelque chose de concret. Et je me suis rendu compte qu'il y avait plein de choses qui ne permettaient pas de créer un executable à destination des joueurs. Du coup, j'ai du passer de la librairie CEgui pour le dessin des fenêtres à librocket.La prise en main de librocket + les bugs inhérents + le temps à passer à refaire toutes les fenêtres m'ont consommés un temps certain. J'ai également dû retirer toute la partie connexion base de données du côté du client, pour revenir à un système de communication réseau classique avec le serveur.

Dans le même temps, j'ai pas mal travailler sur l'éditeur, afin qu'il puisse sortir des fichiers xml contenant les templates des objets, et des zones (en terme d'objets statiques).

Enfin, afin de ne pas créer un executable énorme à télécharger, je me suis basé sur un prédicat qu'on retrouve dans différents jeux : un outil de mise à jour. Je suis donc en train de développer un petit executable, qui vérifie la version du jeu installé sur votre Pc, et qui fait le delta des fichiers à télécharger, pour faire les mises à jour sur votre PC. Les fichiers possibles à mettre à jour peuvent être : -- l'executable du jeu -- les fichiers images -- les modeles 3D -- ...

Cela permettra d'avoir la possibilité pour le joueur d'avoir des updates de quelques minutes, et non pas de re télécharger 400mo à chaque fois.

Du coup, c'est encore un élément technique qui ne fait pas avancer le jeu lui même, mais plutôt la possibilité d'y jouer. Je pense que j'aurai du en passer par là plus tôt, pour avoir moins de choses à refaire... mais bon, c'est en forgeant qu'on devient forgeron.

A bientôt donc

vendredi, janvier 27 2012

27 01 2012

Une nouvelle mission de terminer. Cette fois ci il s'agissait de détruire un certain type de pnj (vaisseaux). Vous pouvez désormais attaquer et détruire des vaisseaux, et ces actions sont comptabilisées pour vos quêtes. Un nouveau type de quête est donc implémenté. Par contre, les ennemis en cours ne font que patrouiller sans intelligence pour l'instant, ni réaction. La partie IA doit être développée dans une autre phase du projet.

J'ai également mis en place une fenêtre permettant de visualiser vos quêtes en cours, et finies.

Pour bien terminer ce step, il faut que j'implémente des "événements" liés aux quêtes. En effet, selon les quêtes actives dans une zone, il faut que certains types d'ennemis soient présents ou non, et qu'ils réapparaissent régulièrement jusqu'à atteinte de l'objectif de quête. Cette partie évènement n'est pas simple à mettre en oeuvre non plus, car à chaque fois qu'un joueur arrive il faut vérifier qu'il n'a pas une mission impactant la zone. Et quand il quitte la zone, les pnjs restent bien là, mais ils ne doivent plus repoper, si personne n'a plus la quête dans la zone.

Eventuellement, si plusieurs personnes ont la quête, il faut voir si l'événement ne doit pas être dimensionné par rapport aux nombres de personne. S'il y a 10 personnes qui ont la quête défendez la station, alors ne faut il pas 10 fois plus d'ennemis. Peut être pas 10 fois, mais sûrement un nombre différents selon que tu es un ou plusieurs.

En parallèle, je travaille toujours sur un éditeur, pour pouvoir créer du contenu simplement (PNJs, dialogue, missions, ...). Mais cela prend aussi beaucoup de temps.

Je vais également passer un certain temps à stabiliser un certain nombre de bugs, afin d'avoir une version finie de ces fonctionnalités.

A suivre

vendredi, janvier 20 2012

20 01 2012

Je me réveille dans la station, où je me suis fait "décongelé", après quelques jours de remise sur pied, Nina me contacte, et m'explique ce qui est arrivé à notre peuple. Etant sur une station de transit, elle m'envoie en mission dans une autre station, pour me mettre en service. Je dois apporter du matériel. Après quelques heurts en apprenant à piloter mon vaisseau, me voilà arrivé, j'apporte le matériel, et je suis même payé pour cela ... 100 crédits impériaux.

Et oui, voilà, j'ai mis en place une première mission. Assez simple, il faut transporter du matériel d'une zone à une autre. Un joueur peut donc maintenant prendre une quête et la compléter. Le jeu résout le fait que la mission soit effectivement finie (conditions remplies), et que le pnj est bien celui qui doit être vu à la fin. Le matériel est retiré de l'inventaire, et une récompense est octroyée.

POur l'instant, il s'agit d'argent. Plus tard, cela pourra être du matériel, de l'équipement, des points de réputation. Il me reste encore à gérer les prérequis d'apparition des missions (certains dialogues, certaines missions, niveau de réputation,...).

Prochaine mission à implémenter, aller détruire des vaisseaux. La résolution me semble bien moins simple, car il faut comptabiliser les vaisseaux détruits dans le temps.

Ensuite, il faut que je crée un panel permettant d'afficher le journal de mission. Et j'aurai bien avancé sur la partie mission.

En parallèle, je travaille sur un éditeur de contenu, me permettant de créer des nouveaux objets, de créer des pnjs, des dialogues et autres, car pour l'instant, c'est fait à la main directement en base de données, et c'est pas top.

A bientôt pour de nouvelles aventures

vendredi, janvier 13 2012

13 01 2012

Mettre en place un système de quête standard demande beaucoup de travail, car il y a vraiment beaucoup d'éléments constituant une quête. Je vais tenter de vous donner le détail de ce que je fais, pour vous montrer en quoi c'est compliqué.

Point de départ, définir qui donne la quête. Evidence. Pour une quête, j'ai choisi de présenter 3 dialogues, un dialogue avant d'avoir accepté la quête, un dialogue une fois acceptée, et un dialogue de fin de quête.

Au moment de l'affichage de la quête, il faut donc déterminer, si le joueur a déjà la quête ou non.

Je propose 3 boutons : accepter la quête, abandonner la quête et terminer la quête. Même combat.

Une mission se terminera à un moment, mais à qui dois je parler pour valider la quête. Une information supplémentaire à stocker, le pnj à qui je dois parler en fin de quête.

Eventuellement, le pnj peut me donner un ou plusieurs items en objet de quête, au démarrage de la quête. Encore un élément à stocker et à gérer. Sachant qu'il faudra que je note un moyen pour que le joueur ne fasse pas accepter, abandonner, accepter, abandonner, pour avoir 10000 fois le même item (j'en sens capable certains d'entre vous).

De la même manière, il faut stocker les éléments de récompenses. Sachant qu'ils peuvent de diverses formes (objet, argent, point de réputation). je n'ai pas encore travaillé sur cet aspect.

Enfin, et non pas des moindres, une mission peut comporte un ou plusieurs objectifs. Pour l'instant je travaille sur un objectif 'simple', qui est le transport d'une marchandise d'un point A à un point B. Il faut donc décrire cet objectif comme étant un type transport, avec la précision de l'item à transporter et son nombre, et le lieu de livraison.

Pour des quêtes plus "complexes", tuer X ennemis, il faudra également prévoir de stocker l'avancement de l'objectif (le joueur a tue 3 ennemis sur 10). Ensuite, il y a encore plus complexe, à savoir, des missions de type protection, où la définition de l'objectif me paraît encore moins simple à préciser.

jeudi, janvier 12 2012

12 01 2012

Mes premiers tests d'IA sont concluants. Je suis capable de produire une patrouille, et de déclencher une poursuite. Ce sont des éléments déterminants du jeu, et je suis assez content de les avoir mis en place. Il reste beaucoup de choses à faire autour de l'IA:

  • ajuster le déplacement, en ne faisant pas que suivre, mais en essayant d'être prédictif
  • ajouter des comportements spontanés d'évitement, ou permettant des variétés dans le vol (quart de tour, ...) pour ne pas avoir qu'un vol rectiligne
  • Tir
  • Fuite
  • ...

Je fais une petite pause sur le sujet, car il est assez technique et fastidieux, pour me plonger dans un autre sujet très complexe également, qui est la création/mise en place des missions/quêtes. Vous pouvez retrouver mes réflexions sur le sujet : Conception des missions.

A ce jour, j'ai commencé le développement des missions. Qu'ai je fait pour l'instant :

  • Le pnj peut proposer des missions
  • Le texte de la mission apparaît ainsi que les boutons correspondant
  • Le joueur peut accepter ou abandonner une mission

Voilà pour le début. Prochaine étape est de définir comment gérer/créer des objectifs à une mission, et déterminer comment savoir quand un objectif est atteint, et quand une mission peut être finie?

Une fois cela effectuée, une première mission simple sera proposée: transporter un objet d'un point à un autre. Une fois cela validé, je pense qu'on pourra imaginer une mission plus complexe, où il faudra détruire X IA pour finir la mission.

Au delà de la création du jeu, je vais partir également en développement d'un éditeur de jeu, afin de pouvoir faciliter la création d'éléments du jeu (zone, items, missions, pnj, ...). Du coup, je vais passer moins de temps sur le développement du jeu en lui même, que d'outils pour créer du contenu. Mais c'est un mal nécessaire pour moi avancer efficacement.

A bientot

samedi, janvier 7 2012

07 01 2012

Joyeuse et bonne année 2012!

Les vacances ont été bien chargées mais pas pour Shimstar. La vie privée me rattrappe :p

Bref, cela ne veut pas dire que cela n'a pas avancé. J'ai enfin réussi à reproduire une intelligence qui permet de patrouiller entre différents points définis, en utilisant les notions de physique de bullet (collision, évitement, poussée, accélération,...). Je suis en train d'intégrer ces éléments dans shimstar, non sans mal, il y a effectivement la partie réseau qui n'est pas simple à mettre en oeuvre. Néanmoins, cela ne devrait pas prendre trop de temps.

L'étape suivante, sera la poursuite et l'attaque d'un joueur. Cela va être bien palpitant. La partie Intelligence artificielle est vraiment un élément important du jeu, et je préfère bloquer l'avancement du jeu, pour débloquer un élément essentiel, et permettre que le jeu puisse être intéressant, et avoir un intérêt. Si j'arrive à faire cette étape avec un certain succès, je vais pouvoir continuer sur des parties plus orientées joueur, par exemple, les missions, la gestion de l'équipement et des compétences.

Pour ceux qui auraient loupés les nouveaux fonds de jeu que j'ai préparé ;

J'espere que vous aimez... Laissez moi vos commentaires!

- page 1 de 4