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

mardi, avril 19 2011

19 Avril 2011

Un pas de plus... Cette soirée fut riche. Premièrement, j'ai commencé la mise en place de la gestion du cache pour les chargements des éléments graphiques. Au début, je chargeais les modèles à la volée, au moment où j'en avais besoin. Selon les modèles, cela déclenchait des lags de 0.1 secondes à 3-4 secondes, où l'écran se figeait tout simplement. Et là, le drame sur la connexion réseau, qui ne répondait plus ... etcetc... Ca c'est fait, et doit être continué.

J'ai, ce soir, installé les librairies panda sur mon serveur nux. Car je soupçonne des problèmes de gestion de thread, et de décalage de traitements, quand je lance et mon serveur et mon client sur mon portable.

Voilà un peu mes logs timerclient=262.9543088985#NPC0#Point3(475.041, 302.576, 519.284)#Point3(479.211, 316.416, 532.999) timerserver=263.777198131

Position sur le serveur (NPC0Point3(833.226, 378.106, 662.786)), et on voit dans l'envoi du client que la position de contact est Point3(475.041, 302.576, 519.284).

Rien à voir...

Je pense que mon pb de collision vient de cela. Mes vaisseaux ne sont pas du tout au même endroit sur le client et le serveur. Le client peut tirer tout ce qu'il veut, et toucher visuellement, le serveur ne voit aucune collision, car il n'y en a effectivement pas selon ses propres coordonnées....

Cela sent très bon tout ça... J'ai enfin la piste du pourquoi! La résolution devrait être efficace et rapide maintenant...

Avant cela, j'ai un peu de code à modifier car, côté serveur, j'ai des chemins windows relatifs, que mon nux ne comprend pas... bizarre non?

dimanche, avril 17 2011

17 04 2011

Cool, le forum fonctionne bien. J'ai 2 contributeurs actifs, qui me font bien cogiter. Merci à eux. Je n'ai pas eu beaucoup de temps à passer sur le dev, le beau temps y étant pour beaucoup. Préparation du potager!

J'ai également mis en place un serveur SVN. Pour les gens intéressés, laisser moi un commentaire, je vous donnerai l'adresse, si vous voulez consulter les sources.

Il me reste toujours ce bugs de collision à gérer. Je fais une dernière tentative, en espérant que cela sera la bonne. Sinon, je changerai complétement mon fusil d'épaule, et le client gérera un maximum de choses, en faisant pas mal de pirouettes pour que le serveur soit à jour avec les bonnes données. Mais j'ai ma petite idée là dessus, pour bien synchroniser les clients et le serveur...

Je vous tiens au courant!

mercredi, avril 6 2011

06 04 2011

Un sérieux concurrent Black Prophecy.

Aie Aie Aie

mardi, avril 5 2011

05 04 2011

Quelques news.

Je suis en pleine galère sur la gestion des collisions entre les tirs des joueurs et les vaisseaux. Autant la gestion des collisions entre asteroid et tirs de joueur, c'est ok, autant j'ai des soucis avec les NPCs. Bon en essayant de trouver une solution, j'ai pu corrigé quelques bugs sur le chat, mais aussi sur la gestion réseau multi joueurs. J'ai lancé plusieurs instances sur le mon pc, et le serveur en même temps. Bon, j'avoue cela rame à donf. Mon portable n'est pas prévu pour simuler un serveur réel. Mais bon, j'ai pu faire quelques tests, et après quelques corrections, je vois l'autre joueur évolué dans l'espace dans les directions correspondant à l'autre fenêtre.

Donc ça c'est pas mal. Au moins, la partie multi est opérationnel.

Me reste ce fichu bug sur la gestion des tirs sur les ennemis. Une fois que je saurai détecté qu'un tir touche au but, je n'aurai plus beaucoup de frein, pour avancer correctement ce jeu. Malgré tout, je vois encore quelques soucis techniques. Notamment, il va falloir que je gère les collisions entre les objets et un comportement par rapport à cela (rebonds + dommage...).

Allez j'y retourne!

jeudi, mars 31 2011

31/01/2011

BOnjour,

juste un petit mot pour dire que j'ai mis en place un petit forum, pour les questions sur le game design que vous auriez :Shimstar Forum.

Quelques premières questions sont apparus sur l'évolution du personnage, la gestion de la mort...

dimanche, mars 27 2011

27 03 2011

Un problème de moins, voire deux. Après recentralisation de tout un tas de choses au niveau du serveur, j'étais confronté à de nouveaux problèmes et quelques bugs. Le premier était un problème de lag latency. Quand le client tirait, il fallait parfois 8/9 secondes avant que le serveur ait l'information. Un conseil, ayait 2 threads qui gèrent l'un la réception des données, et son traitement, et l'autre l'envoi de données. Pour le coup, j'en avais 2 aussi, mais dans le traitement de données, pour des raisons pratiques, il m'arrivait d'envoyer aussi des données aux autres joueurs. Il s'avère qu'en faisant cela, on crée un congestion dans le flux réseau, et que l'envoi se passe plutôt bien, mais on ne reçoit plus rien. J'ai donc rendu asynchrone l'envoi d'information. J'ai créé une liste de messages à envoyer, qui est ensuite utilisé par le 2nd thread.

2e point, la gestion des collisions. Le serveur doit rester le référent sur la localisation des objets dans l'espace. J'ai donc repassé la gestion des collisions niveau serveur. Bon c'était un peu la cata, et je n'arrivais à rien. Quelques bugs corrigés, j'ai maintenant mes tirs qui atteignent les astéroids, et je fais apparaître les explosions. Sauf que, elles apparaissent parfois dans l'asteroid ou derrière. Je vais donc remettre une gestion des collisions niveau client également, afin d'avoir un motif plus précis sur l'analyse des collisions, et ainsi pouvoir faire apparaître les explosions au bon endroit.

Next step... collision inter vaisseau...

mardi, mars 1 2011

01 03 2011

Maintenant que les problématiques réseau sont résolues (enfin j'espère, il va falloir pousser un peu plus les tests), il faut que je réembarque pas mal de code au niveau du serveur. Code initialement mis au niveau du client pour des facilités de test, et aussi en espérant pouvoir décharger le serveur. Il est clair maintenant que le serveur doit demeurer le garant des données.

Il faut donc que je rapatrie toute la partie collision côté serveur. Pour faciliter le tri, et le travail du serveur, je vais tenter de déclarer un gestionnaire de collision par zone, pour que les collisions au sein d'une zone (asteroide, vaisseau, tir,...) soit géré localement à la zone. Cela permettrait éventuellement de pouvoir dispatcher le travail sur plusieurs serveurs dans le futur... qui sait?

En même temps je suis tombé sur un article, et apparemment CEGUI, cette librairie permettant de faire des gui un peu sympas, a été rebuildé, pour permettre le bind avec du code Python. Ce qui veut dire que je peux potentiellement l'appeler depuis mon jeu python, et proposer probablement un GUI plus sympa qu'aujourd'hui. Il est clair que je galère pour positionner les objets, et réussir à les aligner est toujours une galère monumentale. Malgré tout, je ne partirai pas sur la partie GUI tant qu'une première version ne sera pas jouable. Si je repars dans la refonte des fenêtres, cela va me prendre un temps considérable, juste pour avoir du "plus beau". A voir si les joueurs sont reboutés par la finition....

jeudi, février 24 2011

chat ok

Ca y est, j'ai finalisé un petit chat. Fonctionnalités de base, saisir un texte, l'envoyer au réseau, l'afficher avec le nom du joueur, mettre une couleur en fonction du type de message ou du canal. On ne peut pas encore choisir les canaux, ni les canaux d'affichage, mais la structure est prête au cas où... Une petite correction à prévoir, car le chat ne supporte pas les accentués....

chat

Le réseau semble aussi opérationnel! J'envoie la position des ennemis, et elle est bien interprétée.

Cela fait longtemps, aller un petit décompte de lignes:

server : 2330

client : 4463

jeudi, février 24 2011

IA + chat

Ca y est, j'ai repris les rennes de la chose. Une grosse problématique dans les jeux réseaux et de réussir à envoyer toutes les informations aux joueurs, et que chaque client ait des données à jour par rapport au serveur. Si les données sont envoyées de manière séquentielle et permanentes, le réseau est saturé, et le client n'a pas le temps de traiter tous les messages. Le client se met à ramer.

Dans un premier temps, j'avais déporté le calcul des IA sur le client, afin d'obtenir quelque chose de fluide. Mais malheureusement, on se retrouvait avec des décalages importants entre le client et le serveur. Du coup, une fois par seconde, j'envoyais la position de référence calculée et stockée sur le serveur. Conséquence : les vaisseaux faisaient des bonds en arrière.

J'ai donc lu un certain nombre d'articles sur le sujet pour affiner ma compréhension de la chose. Par exemple, j'envoie désormais les positions des ennemis une fois tous les 1/6e de seconde. Mais ce n'est pas sans conséquence. En une fraction de seconde, le rafraîchissement de l'écran se fait un grand nombre de fois, et cela a pour conséquence qu'on voit le vaisseau ennemi bondir d'un point à un autre. Sans compter sa rotation qui se fait de manière saccadée également.

Un mot magique m'a été glissé à ce moment là : interpolation. Il faut que j'ajoute un calcul savant, pour qu'entre 2 envois de position, je calcule les positions intermédiaires pour donner un mouvement fluide. Ce n'est pas très compliqué à mon sens, mais cela demande un peu de travail. Une fois ce travail effectué, je pense que la partie réseau sera en grande partie résolue. Il me restera à retester le lancement de plusieurs clients.

Pour l'instant, pour me divertir, je me suis lancé dans la création d'une petite interface de chat. Petit supplément qui rendra le jeu plus convivial.

Il me reste une todo list (), somme toute importante avant de rendre la chose disponible pour une première alpha test fermée.

vendredi, janvier 21 2011

I'll be back

Salut,

pfff que le temps passe vite. Un petit mot pour dire que ce n'est pas fini, mais que j'ai beaucoup moins de temps personnel.

Nouvelle tâche en cours, l'élaboration de l'intelligence artificielle des NPCs. Après un premier test avec une librairie, je m'attaque à l'élaboration manuelle de cette pseudo intelligence. Quelques idées émergent: AIshimstar.png

lundi, juillet 19 2010

Voilà bien longtemps...

Voilà bien longtemps que je n'ai touché à ce beau projet. Il faut dire que mon temps est franchement partagé. Ma petite famille est fort gourmande:p

J'ai de nouveau envie de mettre la main dans du code. Bonne nouvelle!!!

Par contre, il est vrai que projet est titanesque et je me demande toujours quand je m'y remet par où commencer. Une chance, c'est que le code m'a l'air pas trop mal écrit, car j'arrive facilement, et ce malgré des mois d'interruptions, à remettre les mains dans le cambouis.

En fait, l'une des parties, et qui va être essentielle, va être de créer et développer des Intelligences Artificielles. Je pense que ce seront des scripts semi intelligents dans un premier temps, vu mes compétences en IA. Mais c'est vrai que je rechigne à m'y mettre, car je n'ai pas du tout d'expérience, et que cela me parait énorme comme travail vu de loin. D'autant que c'est vraiment une pierre angulaire, car finalement avec un vaisserau on aime friter de nouveaux ennemis qui réagissent un minimum. D'ailleurs à ce sujet, je pense qu'il va falloir trouver un moyen de les rendre difficile mais pas trop, pour garder une jouabilité pour les plus novices.

J'ai encore pas mal de petits points à revoir, corriger, améliorer également avant de m'attaquer à de nouveaux gros chantiers. J'ai commencé à revoir des petits bugs, à améliorer la gestion de certaines fenêtres. En fait, je vais essayer de finaliser tous les points en cours, pour qu'il soit, non pas parfait, mais d'une jouabilité certaine. Si les fonctions existantes fonctionnent, cela permettra d'avoir un socle sur lequel je pourrai agréger de nouvelles fonctionnalités, sans me dire à chaque fois, zut, il me manque ceci cela, et devoir à chaque fois repartir sur d'autres éléments, et m'écarter des fonctionnalités prévues au départ.

Voilà, tout cela pour dire que cela repart peu à peu.

Si vous avez de bonnes idées...

mardi, mars 23 2010

23 03 2010

Hello,

Voilà 2 nouveaux screens pour vos yeux, la gestion de l'équipement avec des images venus d'un autre jeu (je n'en suis pas fier, mais en attendant, histoire que le look soit plus convivial, j'espère qu'un graphiste sera tenté par l'histoire dans quelques temps), et la gestion d'un arbre de compétences.

Vaisseau compétences

lundi, mars 22 2010

22-03-2010

Bonjour,

Voilà de longs moments que je n'ai pas fait une petite bafouille. Le projet continue de vivre. J'ai un fils qui me prend beaucoup de temps en ce moment et avec plaisir.

Bref. En tout cas, cela continue d'avancer. Les fonctionnalités sont de plus en plus longues à développer, et sont moins rapidement démonstratives qu'au début. Autant pour faire une petite maquette, cela a été rapide, autant maintenant pour implémenter les règles du jeu, il faut faire du code, et du côté serveur et du côté client.

Quoi de neuf donc? J'ai commencé l'arbre des compétences. L'idée est qu'une compétence s'apprend le long du temps. Chaque compétence a une durée d'apprentissage selon le niveau. C'est un apprentissage temps réel. Pour les compétences bas niveau, il faudra par exemple 3h pour apprendre une compétence au premier niveau. Je vais voir si cela est viable et intéressant. Cela change des XPs, et du bashage de monstre à gogos. En tout cas, l'interface est faite, de choix de compétences, l'arbre des compétences, la validation au niveau serveur, la sauvegarde de la progression. Ce fut un gros chantier et il manque encore quelques règles de gestion. Néanmoins, le fond est là. La prochaine étape sera d'utiliser ces compétences lors des actions, ou l'utilisation d'équipement, afin d'obtenir des bonus, ou au contraire ne pas pouvoir effectuer l'action.

A côté de cela, je refonds pas mal l'interface, afin qu'elle soit moins brouillonne et plus "pro".

La prochaine fois j'essayerai d'apporter quelques screens

Nombre de lignes:

client: 3969

Server:1923

mercredi, mars 10 2010

10 03 2010

Et hop! Je continue d'avancer. il est vrai que je n'avance pas aussi vite que je le voudrai. Néanmoins cela avance. J'ai passé un peu de temps à consolider l'existant, à factoriser le code, et à corriger les bugs. Finalement comme le code commence à grossir sérieusement, si la base n'est pas stable ...

Bref. En tout cas, j'ai ajouté des marchands afin de vendre/Acheter, et équiper son vaisseau. J'ai également ajouté des portails afin de voyager de zone en zone. J'ai encore un certain nombre de règles de voyage à créer, mais cela fonctionne.

En parallèle, je pense que je vais commencer un/des éditeurs. Effectivement, c'est marrant de mettre à la main des paramétrages, mais je ne vais pas pouvoir continuer comme cela. Je vais faire un éditeur pour créer des missions en premier lieu. Cela permettra également, de donner cet éditeur à d'autres personnes qui ne sont pas informaticiennes pour créer de nouvelles missions. Je vais sûrement créer un éditeur de zone également.

Bon voilà..... En avant!

Compteur:

Client : 3673

Server : 1704

dimanche, février 28 2010

28 02 2010

Oh yeah... J'ai dépassé la barre psychologique des 5000 lignes!

Quoi de neuf, cette fois ci?

Désormais les fenêtres d'infos, les petites fenêtres sont déplaçables. Cela a l'air bête, mais je n'avais pas trouvé de moyen technique facile pour le faire. Grâce au forum de Panda, j'ai pu trouver des exemples, où des gens ont tenté de créer des GUI un peu plus sexy que ce qui est proposé en natif. Donc voilà, peut être que si le besoin s'en trouve, je les rendrai également redimensionnable.

Quoi d'autre? J'ai ajouté la gestion de marchand dans la base. Ils proposent des items par catégorie, pas toutes, cela dépend du marchand, et vous pouvez désormais acheter de nouveaux items pour équiper votre vaisseau. Je vais ajouter rapidement la possibilité de revendre également.

Désormais, quand on détruit un vaisseau, cela laisse des détritus. Ces détritus seront "recyclable". Il faut que j'établisse quelques règles de gestion sur ce qu'on peut récupérer sur un vaisseau détruit : Composants directement, ou matériaux. Pour cela, il va falloir équiper le vaisseau d'un équipement spécialisé dans le recyclage. Ensuite, le marchand prendra tout son intérêt :p hey hey.

Marchand

Je vais faire un peu de refactoring également sur le code, car je me rends compte que certaines parties ne sont pas assez évolutives. Typiquement, quand je modifie le template d'un vaisseau, il n'est pas répercuté dans le profil du joueur qui le possède.

Un ami à moi m'a donné de riches idées sur l'établissement de l'IA. Apparemment il existe des algorithmes "génétiques" qui donnent des résultats incroyables, et très performant. De ce que j'ai compris, c'est que chaque élément de contexte est valorisé (puissance, rapidité, situation, nombre de vaisseaux dans l'espace,...). La somme de ces éléments de contexte donne une valeur, et cette valeur ensuite est comparé à une attitude, et à des objectifs. En fonction de tout cela, l'IA réagit dans une certaine direction. Mais ce n'est pas figé. Chaque nouvel élément de contexte revalorise son attitude et ses décisions. Cela permet de gérer des situations complexes et inattendues, et permet également de gérer des intelligences de groupe.

J'étais partie dans le scriptage de tous comportements possibles avec des gros "if" imbriqués pour gérer informatiquement chaque situation en fonction de chaque attitude. Cela aurait donné des pages et des pages de scripting très laborieuse, et mécanique, pour donner des résultats invariants, et peu réalistes.

La création d'une IA par algo génétique, introduit une part d'aléatoire, et de variation importante dans le comportement, qui peut éviter d'avoir toujours les mêmes comportements, et surtout d'avoir des comportements subtilement différents quand une situation différente apparaît. Cela paraît assez confus comme cela, mais je pense que le résultat sera probant. Par contre, il va me falloir un peu de temps pour assimiler ces concepts, et les mettre en oeuvre, et ensuite du temps pour paramétriser toutes les variables inhérentes au jeu.

Un exemple concret, serait un groupe d'IA qui patrouille. Le premier repère un joueur dans son radar. Il vérifie son contexte, et comme il est en mode aggressif, il va directement en direction du joueur. Les autres, voyant un un contre un, enverront un 2e vaisseau en renfort. Si la situation dégènére ils pourront éventuellement tous y aller, ou plutôt battre en retraite, pour aller chercher de l'aide ou se mettre à couvert d'une base. Tous ne pourront pas réagir de la même manière en fonction d'un rôle. Mais l'important, est que même lors du combat, ils pourront changer de cible, pour atteindre des cibles plus critiques, ou plus faciles, ou fuir.

C'est important, ce système de réévaluation, car il permet de ne pas avoir un acharnement thérapeutique contre toute attente, ou raison logique. Si l'IA se trouve isolée, elle va essayer de retrouver ses camarades, pour être couverte, ou va fuir par exemple, et pas s'acharner sur le joueur.

BOn voilà beaucoup de travail en perspective en tout cas

Décompte:

client : 3497

Server : 1843

mercredi, février 24 2010

24 02 2010

Vivement la 5000e ligne de code!

Petit point sur la situation: Chose promise chose due!

Vous pouvez désormais consulter votre vaisseau dans la base. Vous verrez une image de votre vaisseau avec les emplacements possibles à équiper.

Chaque emplacement peut être équipé d'un ou plusieurs types d'équipement. Exemple, à l'arrière, vous ne pouvez y mettre qu'un moteur.

Par défaut vous avez un équipement sur la plupart des emplacements. Vous pouvez cliquer sur un emplacement pour en modifier l'équipement, ou retirer un équipement.

Vous verrez mes grands talents de graphistes, qui consistent en un carré rouge avec un W et un chiffre, pour signifier une arme et son niveau. lol.

Equipement vaisseau

Bien entendu, vous pouvez aussi consulter votre inventaire. En cliquant sur un objet, vous en aurez les caractéristiques.

Vous avez également une notion d'encombrement qui apparait et qui est dépendant des unités de stockage équipés, et des objets que vous avez dans votre inventaire.

De la même manière vous avez une notion d'énergie consommée pour vos équipements équipés, qui est à mettre en relation avec l'énergie produite par les différents équipements de type réacteur dont vous avez équipé votre vaisseau.

voilà un bon début. Prochaine étape: Quand vous détruisez un vaisseau il vous laisse potentiellement des matériaux et des équipements recyclable à partir de ses déchets.

Il faut mettre une probabilité qu'il reste un élément récupérable ou non dans l'épave, mettre en place un équipement de type recycleur à équiper sur votre vaisseau. Gérer la récupération, et la mise dans l'inventaire, avec les problématiques d'espace de stockage...

C'est un bon sujet pour la prochaine fois déjà.

Ensuite, on verra pour mettre en place un PNJ de type marchand...

lignes de code :

Client : 3119

server : 1378

jeudi, février 18 2010

18 02 2010

Je prends quelques instants pour vous dire que mon activité s'est sensiblement réduit. Je passe pas mal de temps entre le boulot et mon fils, et j'ai un peu moins de temps pour ShimStar que lorsque j'étais en vacances. Etrange? non?

Bon en tout cas, cela continue d'avancer. Comme promis j'équipe un vaisseau (bientôt les images!). Pour un vaisseau donné, dans la station, j'affiche sa "photo" stylisée en arrière plan, et selon la définition du vaisseau, j'affiche des petits carrés aux différents endroits du vaisseau (haut, bas, milieu, gauche et droite), indiquant les "lieux" d'équipement.

Chaque slot d'équipement selon sa définition ne pourra être équipé que par un type ou plusieurs types d'équipement. A l'arrière on retrouve pour ce premier type de vaisseau que la possibilité de mettre un moteur. Au centre, plutôt des réacteurs d'énergie, et de l'électronique (radar, ...).

Aujourd'hui j'affiche donc ce plan de vaisseau et l'équipement qu'il contient à un instant T. Bon vous verrez les icones d'équipement ne sont pas belles (carré monochrome avec une lettre dessus). Malheureusement autant mes compétences de développement sont au top, autant mes talents de graphistes n'ont jamais existé.

S'il y a des volontaires, je suis preneur.

Prochaine étape, pouvoir remplir ces slots avec un équipement se trouvant dans l'inventaire, suivant les règles de gestion présentées plus haut. Pour cela, il faut donc que je définisse le concept d'inventaire et l'implémente. Suite à cela, il faudra bien entendu sauvegarder au niveau du server cet inventaire, et l'équipement effectué sur le vaisseau.

Ensuite, il faudra que je fasse en sorte, que lors du jeu, ces notions d'équipement soient bien prise en compte. Certaines choses sont en dur actuellement, telle la distance du radar.

A bientot

lundi, février 15 2010

15 02 2010

Une bonne nouvelle! Ca y est mais soucis réseaux sont en grande partie résolu. Je pense qu'il faudra que je fasse du refactoring à un moment donné, afin d'optimiser la chose, mais je tiens le bon bout.

Un problème en amenant un autre, je me retrouve avec beaucoup de choses à résoudre. Plus j'avance, plus les choses se ramifient et se démultiplient.

Il va falloir que je trouve un moyen de m'organiser et me donner des buts à atteindre.

Un petit point de situation, histoire de démontrer que ce jeu avance. Sur les basiques, vous pouvez lancer le jeu, créer un nouveau compte, vous connecter, créer un personnage, le sélectionner. Vous arrivez ensuite dans une station spatiale, où vous pouvez choisir des missions à effectuer, et sortir de la station. Une fois dans l'espace, vous pouvez vous déplacer librement. Vous verrez autour de vous un grand nombre d'astéroids. Vous avez en bas à gauche un radar, qui indique la position d'autres joueurs, des ennemis et des astéroids. Vous pouvez tirer sur les ennemis et les détruire, et éventuellement réaliser une mission. Vous pourrez alors aller chercher votre récompense, et finir la quête. Toujours dans l'espace, vous pouvez faire un click droit sur les astéroids et la base, afin d'avoir des informations (peu pertinentes pour l'instant à part la distance, et la possibilité d'avoir un bouton entrer pour la station spatiale). Concernant les ennemis, ils arriveront si vous avez la 1ere quete, et ils se mettent en mode patrouille entre 3 points. Si jamais vous leur tirer dessus, ils se mettent en mode poursuite et vous suivront. Ils ne tirent pas pour l'instant. Le jeu est bien entendu multijoueur, et vous pouvez vous y connecter à plusieurs. Vos informations sont sauvegardées d'une connexion à une autre au niveau du serveur.

J'espère que cela vous donnera envie :p

Pour la suite, je vais changer un peu de périmètre, afin de varier un peu les plaisirs.

Je vais passer à l'équipement du vaisseau. Dans une station, on pourra changer l'équipement de son vaisseau. Sur l'écran correspondant, on verra afficher un "plan" du vaisseau. Sur ce plan, on verra des cases "équipables" -- slots. Chaque slot est spécialisé ou standard. En effet, certains endroits du vaisseau ne peuvent être équipés que par certains équipements. L'arrière du vaisseau est dévolu par exemple au moteur, le centre à des équipements généraux (radar, boucliers, énergie,...), et les parties extérieures aux armes.

Chaque équipement nécessite un certain quota d'énergie pour être actif. On ne pourra pas équiper un vaisseau qu'avec des équipements consommant trop d'énergies. Il faudra penser à acheter un vaisseau plus grand, pour y accueillir plus de cellules d'énergies donc plus d'équipements. Pour reprendre des concepts chers à certain(e)s, finalement le lot d'équipement sera le "build" du vaisseau.

Pour pouvoir faire tout cela, il faut que je crée la notion d'inventaire du joueur, la notion de stock dans la station spatiale, que je crée la fenêtre d'équipement, que je définisse pour un vaisseau son "plan" et les slots. Que je définisse également pour ce vaisseau la gestion de son équipement. Idéalement, cela conduira aussi à lancer la gestion d'un marchand (achat de nouveaux équipements).

Voilà une bonne masse de travail à venir. Pas trop de réseau, surtout de la conception. Bon courage à moi!

lignes de code : Client : 2645 server : 1007

samedi, février 13 2010

13 / 02 / 2010

Que de soucis!

Quel expérience étonnante ce jeu. Il est vrai que la librairie Panda assiste tellement sur des points techniques qui m'ont fait hérissés les cheveux sur la tête dans d'autres contextes, qu'on arrive vite à des réels problèmes de conception, et non pas à des soucis de second ordre.

Mon gros problème à ce jour est vraiment le calibrage du réseau. Il est évident que les joueurs et le serveur doivent partager un ensemble de données (position des uns des autres, déplacement, actions, ...).

Le problème concerne les données en temps réel. Je me rends bien compte qu'il n'est pas possible de donner à chacun en temps réel toutes les informations concernant les uns les autres. Le flux de données devient énorme, et continu.

En une seconde, chaque joueur va recevoir entre 10 et 20 positions pour un vaisseau. Imaginons que vous avez 10 vaisseaux dans la zone, vous êtes alors en train de traiter 100 informations secondes.

Le problème n'est pas tant la quantité, bien que cette quantité soit non négligeable, car le jeu en lui même n'est pas juste une machine à traiter des flux réseaux, mais à résoudre énormément de choses de manière synchrones (gestion des collisions, souris, ...).

Le problème est aussi la synchronisation de ces informations. Le serveur peut très bien être capable d'envoyer un flux de 20 messages secondes pour une même entité, alors que le client lui n'est capable de traiter que 5 de ces messages secondes.

Nous nous retrouvons donc dans une situation, où les messages vont s'accumuler et seront traités avec un retard cumulé de plus en plus important. La conséquence est que les vaisseaux seront affichés en décalage temporel d'autant. Une simple rotation peut être affichée avec 5 sec de retard. Imaginons alors les manoeuvres d'évitement, où les engagements sur des positions périmées.

Une solution pourrait être de donner un temps de péremption au message, et de ne traiter que les messages non périmés. L'expérience pourrait être menée, mais le problème reste qu'il faut quand même parser chaque message pour sortir cette date de péremption, et qu'il faut quand même itérer sur chacun des messages.

Une solution préconisée, et connue est l'extrapolation. Au lieu d'envoyer un flux de données continu, le server envoie par fréquence plus espacée, cette même information, afin de ne pas noyer le client sous l'information qu'il n'est pas capable de traiter de toute façon.

Par contre, le server fournit plus d'informations, que simplement la position et la direction. La vitesse par exemple, ou la cible.

Ainsi le client, pourra calculer les prochains mouvements comme le fait le server. Ces calculs sont plus rapides que le traitement d'un message réseau. Pour être sûr d'être en phase avec le server, le server envoie la position réelle et les quelques informations de comportement, au client toutes les secondes par exemple.

C'est une sorte de synchronisation, et d'arbitrage.

Le flux réseau est très largement réduit, et on obtient quelque chose de plus fluide, même si ce n'est pas l'exact réalité. C'est pour cela que dans certains jeux en ligne (MMO par ex), on a parfois des "lags" ou des personnages qui subitement changent d'emplacement. Le calcul de la trajectoire, et l'emplacement réel étaient désynchronisés.

Dans la conception, il faut ensuite être clair sur qui possède la référence, et à qui est dévolu certains calculs?

Ce petit "lag" peut être perçu comme injuste par les joueurs mais sont la conséquences des limites d'un traitement déjà lourd.

Je pense qu'il faut sacrifier le "réalisme", et une modélisation informatique "parfaite" pour une fluidité beaucoup plus agréable pour le joueur.

Je me rends compte qu'il est utopique de mettre côté serveur l'ensemble des calculs et de faire profiter des résultats aux joueurs.

Chaque client devra effectuer ses propres calculs de déplacement, collision en doublon avec les autres, et le server, afin de limiter le flux réseau.

L'aventure continue néanmoins.

Je suis désolé pour l'instant tout cela est très informatique. J'espère dans la semaine qui arrive mettre un terme à ce gros problème, et pouvoir passer à des éléments de game design, et pouvoir parler de problèmes plus parlant.

lignes de code :

Client : 2446

server : 997

mercredi, février 10 2010

10 - 02 -2010

Bonne nouvelle! J'ai résolu un certain nombre de problématique réseau. Un certain nombre de personnes connaissent mon ego fait sur mesure, donc je me permet de me féliciter.

Quoi donc à l'ordre du jour. Cela paraît bête, mais en gros plusieurs personnes peuvent désormais se connecter dans une même zone et se voir. En effet, un joueur peut voir désormais évoluer un autre joueur dans son espace. Il le voit se déplacer et pivoter. Cela n'a pas été excessivement difficile, mais a réclamé une mise en oeuvre assez longue, pour avoir quelque chose d'assez stable. Comme je vous l'ai déjà raconté, le plus ardu est d'effectuer les tests. Entre le serveur, et plusieurs clients simultanés, les sources d'erreurs n'apparaissent pas toujours où on les attend, et une petite inattention, fait planter l'ensemble du système en cours de test, et on doit tout relancer. Cela crée pas mal de temps perdu. Enfin, voilà. Cela ouvre la voie au reste en tout cas. Puisque je suis sur la partie réseau, je continue sur cette voie, afin de débrouissaler un maximum, et résoudre certains points cruciaux pour la suite. En effet, le server doit se charger d'être le gardien de la cohérence du système, et de fournir toutes les informations au joueur. Je suis donc en train de créer une classe "Monde" qui va charger les différentes zones, et les gérer. Pour chaque zone, la zone va vérifier les missions que les joueurs ont, afin de voir s'il y a des événements dans la zone, et les "jouer". Chaque zone a aussi le contrôle des personnages non joueurs (ennemis,...). Cette intelligence artificielle est gérée en central, et ces informations sont retransmises aux joueurs.

Bon encore quelques grosses heures de travail, avant de passer à autre chose. Il faut que je continue à transformer tout ce que j'ai fait au niveau local, en machine réseau, pour que le jeu soit définitivement multijoueur.

Il va falloir que je me trouve dans quelques temps, de bonne âmes pour me rejoindre. J'aurai besoin de level designer (une personne créant des zones (placement des astéroides, des événements, ...)), une personne créant des missions, un designer 3D pour faire des objets de toute sorte (vaisseau, station, asteroid, ...), un dessinateur 2D (faire les images des équipements, des têtes de perso, des images d'intérieur, ...), un graphiste pour me faire le design des fenêtres (bouton, cadre de fenêtre, placement des éléments de fenêtres, ...). Si vous connaissez ce genre de personnes, ou si vous êtes vous mêmes intéressés, faites vous connaître.

lignes de code : Client : 2345 server : 576

- page 3 de 4 -