PandaLabs

Un petit article pour vous expliquer la prise de conscience sur mon avancée sur 7WO. Le titre est pas anodin et on va parler un peu plus philosophico-spirituelo-économique que développement web et arithmétique… non j’déconne. Non j’déconnais pas pour le philosophico machin… c’est arithmétique qui était de trop.

Mais pourquoi j’avance pas ! Il me faut un fautif !

Ca fait plusieurs semaines que j’arrive pas à avancer sur 7WO (ceux qui l’auraient pas encore compris… ça veut dire 7 wonders online). Alors, j’me pose des questions, je cherche des excuses. Là, on est pas dans le cas de mon dernier billet où j’expliquais qu’une sous-estimation de la taille d’un projet se révélait être un élément de démotivation une fois qu’on comprend qu’on s’est gaufré sur son chiffrage.

7WO, j’ai pris tout de suite l’ampleur de l’entreprise, ça semblait évident et puis le jeu, je le connais bien, y a pas grand chose qui m’en échappe. Alors, j’ai analysé… et j’me suis dit qu’en fait : j’ai juste vu trop gros et que j’m’étais enfoncé dans le mauvais chemin. J’vais faire une analogie… t’es un bâtard de Link dans la forêt Kokiri et t’as les oreilles bouchées, ça arrive, à force de vivre à moitié à oualper dans la forêt des champignons poussent dans tes oreilles, c’est le parasitage mais tu le vis bien.

Du coup, tu l’entends pas Saria, ni le gamin paumé avec son ocarina à la con qui joue le même air depuis des plombes et chaque fois, à chaque intersection, tu prends la mauvaise. Bon, comme t’as lu le petit poucet, t’as jeté des cailloux au sol et tu sais comment rentrer chez toi. Et ça fait genre 12h que tu tournes en rond et tu te dis « soit j’persiste, Saria s’est pas refroidie, j’la trouve et… interdit au moins de 18 ans »… ou alors tu te dis « la prochaine fois, c’te biatch elle m’invite chez elle et pas à l’autre bout de la forêt ! Sal… » !

Dans tous les cas, ces 12 heures là, elles sont perdues, fichues, elles ne seront pas re-créditées.

Tout ça pour dire que sur 7WO, j’ai pris une succession de mauvaises décisions qui semblaient bonnes dans le contexte et où j’me suis dit « non mais, j’ai déjà fait ça, allez, on continue, j’vais pas perdre tout ça »… eh bah ce soir, je dis « oui, je vais perdre tout ça » et « recommencer ».

Les coûts irrécupérables, un biais cognitif bien salope !

Je vais pas vraiment rentrer dans les définitions hypers compliquées de biais cognitifs mais en gros :

  • Un biais … et bah c’est une déviation quoi, une dérive
  • Cognitif c’est un peu tout ce qui se rapporte à l’intelligence à la connaissance…

Et le tout, c’est quand ton crétin de cerveau (elle est pas de moi celle là, coucou David Louapre) te mind fuck ta race et qu’il joue sur les aversions, les craintes et autres conneries. S’embarquer et s’entêter dans la mauvaise voie, parce qu’on a trop investi : temps, argent, affect … bah c’est une très mauvaise décision. L’histoire du mec qui se paume en forêt mais qui a marqué le chemin de retour, ça vous parle direct « moi, je suis pas aussi con LOL ! Ca m’aurait soûlé au bout de 15 minutes je serais rentré chez moi »…

Et t’as raison gros, ça marche parce que l’investissement est mineur… mais mettons que t’as décidé de faire construire ta maison sur plan… à la base y en a pour 750k € et puis en creusant tu tombes sur des ruines anciennes, le projet prend du retard, en plus y a une ancienne décharge enterrée dans ta propriété va falloir assainir tout ça… au bout de deux ans t’as finalement claqué tes 750k € et pour finir ta baraque faudrait en allonger encore 250K… Tu fais quoi gros ? Tu te dis « j’suis plus à 250K près » (un joli petit T3 qui se respecte, neuf hein… t’es pas à la rue) et tu allonges avec peut-être d’autres embûches à terme ou alors tu te dis « bon, ben, j’accepte d’avoir perdu 750k € » … (Gourcuff, Olympique Lyonnais… c’est pas un coût irrécupérable ? TROLL XD)

Bref… David Louapre (que je cite deux fois, donc c’est que ce mec est important pour moi) a une super vidéo sur youtube qui parle de ça sur sa chaîne science étonnante et la vidéo doit être bah surement dans cet article (aucune idée, au dessus, au dessous… je sais pas surprise ) !

Verdict ! Il se passe quoi pour 7WO

Alors, ma grosse erreur c’est de m’être emporté sur mon objectif : prendre du plaisir avec une techno et réaliser quelque chose de sympa avec un peu de complexité. Après plusieurs dizaines d’heures, je suis encore bloqué sur le serveur de gestion des parties… parce que comme un connard, j’ai prévu de base un serveur qui gère plusieurs parties en simultanées, qui gérerait les connexions et déconnexions…

Et même si le challenge est hyper intéressant, j’ai pas le temps… j’ai pas la moitié des connaissances requises ni même la motivation pour aller aussi loin, sachant que l’objectif principal c’est WOH (walls of Hope… si t’as toujours pas capté les acronymes de mes projets, c’est que tu fais pas d’effort gros).

Donc qu’est-ce qui va se passer ?

  • On dégage le multi : un serveur va gérer une seule partie, en plus j’me demande si à terme avec des technos comme docker et tout, si ça devient pas plus simple de deployer plusieurs serveurs qui gèrent chacun une partie plutôt que de faire un énorme truc fourre tout xD
  • L’interface actuelle, qui me plaisait… mais alors pas du tout, elle saute…
  • On va très vite coder du 7WO

Qu’adviendra-t-il de tout le code ? J’vais récupérer ce qui est récupérable et je vais laisser de côté ce qui me sert plus… on repart sur des bases saines et puis voilà !

Donc, 7Wo… avancée totale : 0%

Expérience humaine : +1200xp

La bise !

 

PS : En fait, la vidéo est tout en haut, j’ai cliqué sur aperçu…

PSS : Ouais… mec, j’avais aucune idée d’où allaient s’afficher les trucs que je mets… t’as un soucis ?

PSSS : Moins de graine !

PSSSS : Mais pas ce soir ! J’peux pas écrire un billet et bosser… j’ai une non-vie bordel !

PSSSSS :  Si on merciait PandaFace pour le vol de son travail xD… Merciiiiiiiii

Sous-estimer un projet ou surestimer ses capacités

J’aurais peut-être du écrire un titre plus pute-à-click genre « 10 erreurs symptomatiques des développeurs, la 8e va vous faire uriner de plaisir »…

C’est un article un poil « slice of life » qui débarque parce que j’me suis rendu compte qu’on a souvent des excuses pour expliquer pourquoi les choses traînent parce que souvent, c’est notre cul qui est en jeu. Mais quand le projet n’appartient qu’à vous et que l’attente ne vient que de vous… là, c’est plus chaud.

J’vais pas me regarder dans la glace en me disant « hey, c’est pas ma faute… y avait apéro ». oh que oui, y avait apéro, mais pas que…

Un peu d’contexte ma p’tite dame

Comme vous le savez un peu, j’ai décidé de freiner les jobs freelance, j’avais envie de temps pour moi… rentrer le soir, bosser sur mes jeux, mes projets, ne rien foutre… me faire une soirée entière à mater des vidéos youtube de vulgarisation scientifique. Ca fait du bien. Parfois, j’envie ceux qui peuvent pas ramener du boulot chez eux… Genre t’es conseiller darty. t’as conseillé toute la journée, tu rentres chez toi le soir… tu vas pas essayer de convaincre ta femme d’acheter le frigo qu’elle possède déjà…

Bref… j’me suis pas fixé d’objectifs de temps ou de délais de livraison pour mes projets… même si je devrais, mais comme ça, j’y vais « au plaisir ».

Et là, j’avais « une petite idée en tête ». Avec un très bon pote, on joue à un très vieux rpg en ligne par navigateur… une sorte de Walls of Hope, en buggé de partout, plus maintenu, et où t’es passé de 10000 joueurs à 150. M’enfin, sur ce jeu, t’as la possibilité de reroll quand t’en as marre de ton perso. En gros, on te rend entre 90 et 100% de ton expérience accumulée et tu peux rebuild un personnage…

Et nous, on est des optimisateurs. Les mecs qui calculent toujours que chaque petit point d’XP est parti au bon endroit qu’il a influencé les bonnes mécaniques et qu’il y en a ni trop, ni pas assez. Et ça, jusqu’à y a « le début de cet article » (tu te doutes bien lecteur que je ferais pas un article si j’avais pas fini ça et que j’venais genre faire mes états d’âme)… parce que sinon, c’était tout en excel avec des calculs à la con… Bref j’ai décidé de développer « un builder pour ce jeu à la con »… que je nomme pas parce que d’une… j’veux pas y voir vos tronches et de deux… parce qu’il est nul et que j’veux pas faire de pub à ces enculés xD (non j’déconne, faut modérer le propos jeune homme).

T’inquiète poulet ! Ca va prendre 1 semaine grand max…

Cette maudite phrase… je le sais, tu le sais, on le sait tous… on l’a tous dit au moins une fois. J’me suis dit « j’vais y bosser 3 h par soir, à mon avis y en a pas pour plus de 10 heures et derrière ça, un peu de fignolage, d’interface… quelques tests et hop »…

En plus, tu te dis « le truc, je le connais par coeur, la techno je la maitrise… pas de tests ni unitaires ni fonctionnels… parce que ça va quoi, on s’en branle, tu sors pas une chemise avec boutons en or pour aller à un barbecue »… Bref… j’avais tablé sur 10 heures.

Je m’étais dit :

  • Création du répo git, on pose les base du angular et le gulp => 1h
  • il y aura 3 composants : les infos de base, les caracs principales et secondaires, les compétences => 3h par composant
  • j’héberge ça sur un sous domaine de pandalabs et basta…

Et bah la réalité est tout autre :

  • 49 commits (en moyenne, je commit dès que j’ai fini une fonctionnalité… que je découpe en gros en un bloc d’1h)
  • 14 putains de composants
  • j’héberge bien ça sur un sous domaine… ouf

Mais alors gros, qu’est-ce qui s’est passé ?

Il m’a fallu 10 jours, j’ai créé le repo le 20/05 et on est le 30… Alors j’y ai pas bossé chaque jour, mais en moyenne… j’y ai passé 5h / jour …donc on est sur x5 au niveau des estimations.

Qu’est-ce qui a bien pu se passer ?

  • L’excitation et l’engouement de faire un truc qui nous plait a tendance à nous masquer toute la partie cachée de l’Iceberg. Alerte Spoil… mais Frodon n’a pas trouvé l’anneau, monté la colline et jeté le bignou… non. Et bah là pareil. J’ai peut-être oublié que le builder sans l’étape de passage de niveaux ne servait à rien, que sans les objets intéressants du jeu le build était pas précis… et que du coup, j’ai fait un fichier JSON des 70 items les plus utiles de ce con de game… j’ai pas vu que j’passerais 2h à coder les passages de niveaux, que l’interface c’est pas mon métier et que je galérerais à avoir un truc un peu user-friendly
  • A mesure que je voyais que j’m’étais merdé dans mes estimations, la passion s’est barrée laissant place à une forme de « ah mais j’veux plus en fait, on arrête ? »… parce que pour bien faire, il faudrait faire plusieurs factory et services et que j’avais hyper la flemme… donc j’me retrouve avec un truc de 800 lignes imbitables parce que « j’avais plus du tout envie »…
  • Que du coup, j’ai cherché le réconfort dans des petites fonctionnalités triviales qui prenaient pas longtemps et qui servent pas à grand chose : un affix pour mon UI, un système de capture d’écran qui génère un canvas grâce au html généré…

Juste pour la déconne… les captures générées font 1900x8000px … il me faut 7 fois mon écran superposé pour afficher l’entièreté de l’interface généré … A quelle heure j’ai cru que ça prendrait 10h ? Tocard !

Qu’est-ce qu’il faut tirer de ça ?

Vous, pas grand chose : soit parce que vous êtes pas concernés, soit parce que vous vous pensez meilleurs, soit parce que vous êtes vraiment meilleurs… mais moi, j’me suis rendu compte que bosser pour soi à 100% ou un client… et bah c’est pareil.

Finalement, en tant que « mec qui veut que cette app tourne comme ça », j’avais des attentes et ce que je me livre, y a pas tout, j’ai la flemme, je dois refacto… Si j’m’étais considéré comme un client lambda, j’aurais posé mon cahier des charges, mes specs et j’aurais avancé intelligemment.

Et je pense, que ce genre de couilles, ça n’arrive pas seulement parce que je suis le client et le développeur… mais ça m’est déjà arrivé sur d’autres projets où j’ai considéré le besoin comme simple… « Ouais, c’est juste une page comme ça, avec un bouton qui fait ça, et quand le traitement est fait, il s’passe ça… » kikoolol trop simple, 2 jours… et ça en prend 10…

Bref, cet article est surement utile à 0.000000001% de mes contacts facebook… mais j’crois que tant qu’on s’est pas rendu compte de l’attente qu’on impose à ses clients quand on foire une estimation, on peut pas vraiment faire ce genre d’introspection. Alors, je l’ai faite pour vous…

Bisous !

EventManager pour NodeJs et AngularJs

Toujours dans mon avancée sur 7Wo, je me rappelle de mes premiers instants dans NodeJs et AngularJS il y a un peu plus d’un an… Est-ce que c’est si différent que ça ? Est-ce que c’est complémentaire ? Est-ce qu’AngularJS/NodeJS c’est vraiment du JS ?

Bon, alors, pour la dernière question : c’est un oui… j’disais ça pour déconner quoi.

Mais je voulais vous partager deux rapides snippets, l’un pour NodeJs et l’autre pour Angular…

Voici donc un petit EventManager. Pour angular, il permet de broadcaster des events et de les catcher via le $rootScope. C’est une bête factory utilisable un poil partout. Et côté Node, eh bah c’est exactement la même… en jouant simplement avec l’eventsEmitter.

Cet exemple démontre bien à quel point la logique derrière du JS server ou du JS client reste la même et qu’il ne faut pas en avoir peur.

Mais avant ça …

A quoi ça sert un EventManager ?

J’vais pas vous expliquer le fonctionnement de JavaScript, mais le truc parfois un peu chaud c’est que le code ne s’exécute pas forcément comme on le pense. Alors du coup, on fait usage de callback et ça devient un bordel. Les callacks incluent des callacks qui en incluent d’autres… et parfois on s’attend à récupérer quelque chose qui n’a pas encore été exécuté et là, c’est le merdier.

Moi, je préfère jouer avec les événements. Je fais un truc, je sais absolument pas quand il sera résolu (call à une API distante par exemple) mais j’veux pas figer mon utilisateur en attendant. Je place donc un Listener d’Event en mode « hey, dès que tu as fini, tu me le dis gros, comme ça, bah je finirais… » et du coup, je lance l’event dès que j’ai ce que je veux. Ma vie est belle, mon interface ne se fige pas et envoie du pâté.

Le truc, c’est que chaque fois que je veux notifier un event ou souscrire à un event, j’vais pas m’amuser à réinjecter toutes les librairies… D’où l’idée de centraliser tout ça dans un manager. Ce que je veux faire par exemple c’est : « supprimer une partie, quand c’est fait, informer les joueurs inscrits à cette partie qu’elle est supprimée, qu’ils doivent rafraîchir (automatiquement bien sûr) leur listes des parties et qu’ils sont disponibles pour s’inscrire à une autre »… Pour que tout ça fonctionne, je pose une notification au moment de déconnecter un joueur par exemple (ou à la fin de la partie, ou à la simple suppression de la partie… ça en fait des actions qui font la même chose à des moments différents) (ce qui supprime la partie… et qui du coup notifie les joueurs… blablabla)…

Je sais pas si c’est clair… on s’en fout à la limite, personne ne lira ça.

EventManager pour NodeJs

En gros, on charge les lib Node de gestion des Events. On créé des Events (objet availableEvents)  et on étend l’objet EventManager à l’aide de l’objet methods. Et voilà, nous avons des tonnes de EventManager.WHATEVER.subscribe/notify !

L’utilisation est très simple :

On souscrit à l’événement où on en a besoin. Quand le notify sera déclenché, on jouera le callback associé (ici onTimeoutConnection)

Et par exemple, dès qu’on supprime une connexion, on veut jouer le fameux callbback

C’est pratique, parce qu’on est dans deux fichiers différents, dans deux endroits probablement différent du code et on fait transiter les données nécessaires. Et je peux souscrire à des endroits différents pour le même event et jouer d’autres callbacks, où le même. On est dry, on est propre…

EventManager côté AngularJS

Exactement la même chose, avec la couche Angular

Et l’utilisation est exactement la même…

On souscrit

On exécute les suscribers :

Voilà… y a surement des solutions plus simples, et j’veux bien les connaître, mais ça, c’est déjà plutôt cool

La nécessité du Refactoring

Quand je me suis lancé avec NodeJs il y a bientôt 2 ans… j’ai tout de suite bossé sur de l’existant : des projets avec une structure, des specs déjà lockées. Projet après projet, je me suis trimbalé ce background.

Une des choses les plus importantes est « la structure du projet ». J’avais eu comme idée d’attaquer le vif du sujet rapidement et de m’y mettre : l’impatience. Du coup, j’ai pas vraiment réfléchi : features oriented façon DDD, une structure un peu plus classique façon symfony ?

Sur le coup, j’me suis dit, je verrais plus tard… et j’ai vu plus tard… cette semaine quoi xD ! Ca fait quelques temps, je dirais une bonne année que je vois les langages côté server (php, nodejs…) comme des média de fournir de l’information à plusieurs clients. En gros, j’ai arrêté avec les Twig, les Smarty, les Volt et les templates contenus dans une grosse app php… Y a du pour et y a du contre, mais en gros, maintenant je ne fais plus que des API et j’y plug des clients frontaux.

Les pour de cette approche :

  • 100% de la logique métier est là où elle doit être
  • Si demain j’bosse avec un dev frontend, il a pas besoin de connaître le langage… Je pars du principe que le dev web frontend a de sérieuses bases en HTML/CSS/Javascript et qu’il sait faire un call XHR et traiter la réponse.
  • Changer le front du jour au lendemain n’impacte plus que le front lui-même. Repensez aux anciens projets où vous utilisez votre petit MVC classique et où vos controllers gèrent des petites exceptions par ci par là pour de l’affichage spécifique… une gestion de paramètres en session pour un background avant que vous connaissiez le localstorage ou le sessionstorage des navigateurs … eh beh là, y a plus.
  • Les tasks runners font ce que vous faisiez avant : « comment j’vais faire pour injecter mes libs selon la page demandée ? et autres considérations relous, gestion des builds, de la compression … »
  • Beaucoup plus simple à gérer les ressources de l’architecture : dupliquer les fronts ou l’API et pas l’ensemble du projet…

Les moins pour cette approche :

  • Plus de projets … avant vous aviez un github avec le projet et tout dedans… là, vous avez un projet front, un projet api, un projet backend …
  • Il y a plus d’appels réseaux : avant vous faisiez vos requêtes, construisiez la vue et crachiez le tout à la gueule du client, maintenant vous crachez une vue vide, vous chargez les données (si vous avez des problèmes de perfs, ça peut être lent, très lent…) et vous remplissez. Y a des notions de gestion de l’asynchrone, plus d’efforts côté UI pour faire patienter l’user…
  • Une sécurisation plus complexe

Bref… ça se discute, mais au moins, moi ça me convient. Ca colle au principe de « Separation of concerns ».

Et donc, quand j’ai commencé le projet… j’ai pas vu de suite que la partie publisher/subscriber allait se comporter comme… une sorte d’API. Et pourtant, c’est ni plus ni moins qu’une grosse API… Eh bah qu’à cela ne tienne, j’ai tout revu.

Ca m’a pris pas mal de longues heures… mais c’est gratifiant.

Pourquoi la refacto, c’est gratifiant en fait ?

Y a un moment, quand tu regardes la gueule de ton projet et que tu te dis « génial, ce fichier fait 5500 lignes, c’est la classe »… moi ça me fait l’effet inverse « Mais… merde, qu’est-ce que j’ai foutu ? » Ensuite, tu regardes ta structure et tu te dis « si un gosse de 10 ans comprend pas sa place en la lisant… alors personne ne peut comprendre ». Bon, OK, un gosse de 20 ans… J’ai lu pas mal de bouquins sur « les bonnes pratiques » et la première chose que tu apprends, c’est que chacun a ses petites conventions et que chacune a ses pour et ses contres. Pour ma part, j’utilise la guideline JS d’airbnb, j’évite les fonctions de plus de 10 lignes, j’évite plus de 20 méthodes par fichier, j’évite les fonctions avec plus de 3 arguments, je ne mets que des commentaires utiles et je ne raconte pas ce qui est « induit »… Si ma fonction s’appelle « getGameByUserId » … je vois pas l’intérêt d’écrire « get a game with the user id »…

On nous enlèvera pas que dans le domaine du développement, il y a une part de philosophie des mathématiques. Attention, j’dis pas « toi, tu dois comprendre les équations différentielles »… à vomir… mais dans les maths, y a une forme d’esthétisme  : « comment trouver une belle façon de résoudre un problème ».

Genre par exemple, additionner tous les nombres de 1 à 100 … ça peut vous apparaître chiant. Y a ceux qui vont y aller comme des porcs et dire « ça fait 5050 » après 15 minutes de pianotage intensif sur la calculatrice… y a ceux qui vont faire un truc sur leur TI Basic avec une boucle for… et y a ceux qui vont remarquer que chaque extrémité fait 101 (1+100 + 2+99 + 3+98 … 50+51) … et de se dire que finalement, ce n’est que 50×101 … et que ça, ça claque quand tu expliques comment tu as trouvé le résultat en environ 3 secondes.

Eh bah… la refacto, c’est pareil. Te dire que tout ce bordel, ce n’est ni plus ni rien que l’application d’un pattern connu, c’est quand même cool.

Bref… j’ai refacto 100% du code de la partie serveur de 7 wonder Online. A la place d’un fichier socket de plusieurs centaines de lignes, j’ai adopté une approche par feature, que j’ai géré les événements avec une grosse factory d’events et que ça devient lisible, compréhensible et bien plus simple à maintenir.

Voilà… c’est tout !

Un petit historique de quelques commits de ces dernières semaines…

Avancée de Walls of Hope

Alors là, pour l’instant, j’en suis que j’ai complètement bouclé le cahier des charges. Je peux donc livrer en vrac les premières features qui seront présentes dans le jeu.

Comme je l’expliquais dans la page dédiée au projet, le joueur à la création va avoir le choix entre deux régions pour y incarner son survivant.

Où incarner son survivant ?

  • Dans la ville d’Esperanza, la ville humaine est en mauvaise position… Enfermée par des montagnes et des vagues d’hostilités, le besoin de reconquérir les zones proches de la ville pour ne pas finir assiégé devient primordial. Le joueur va évoluer dans une espèce de dictature très militaire où survivre pour redonner de l’espoir à l’humanité et se battre est le quotidien. En gros la ville n’est pas auto-suffisante et les joueurs doivent se préparer à la guerilla.
  • La ville d’Eden Prime est plus calme, plus pérenne. Et même si elle arrive à se suffire, elle a attisé l’envie de certains groupes d’humains peu scrupuleux. Résistant aux attaques de zombies comme elle peut, elle ne se bat pas que contre ces créatures sans âme… mais aussi contre des vrais humains qui désirent la dérober

Le gameplay pour les joueurs est le même, les régions seront équilibrées en terme de joueurs… J’avais envie de deux régions parce que 24h pour faire quelques actions… eh bah c’est super long et parfois frustrant. J’avais donc l’envie de proposer au joueur d’incarner un second personnage, mais je voulais éviter les abus. Donc deux cartes séparées où dans l’une le joueur joue un humain et dans l’autre un zombie.

Votre zombie sera donc incarné dans la région où n’est pas votre personnage. Votre but en tant que zombie c’est d’être l’intelligence artificielle qui va donner de l’opposition aux autres joueurs. Les zombies que vous combattez sont tous contrôlés par d’autres joueurs. Et quand vos zombis meurent, vous allez les faire revenir en encore plus fort… il est là le LOLZ (ou pas xD)

Une difficulté évolutive

Je vais livrer donc quelques infos à froid sur le gameplay

  • Un tour de jeu toutes les 18h. En gros, on gagne 1 point d’action toutes les 15 minutes et on peut en stocker 72. Donc, 18h de jeu pour stocker tous les points d’actions… à vous de voir si vous jouez tout d’un coup ou un peu tout le temps. Ces points d’action représentent ce qu’un survivant est capable de faire dans sa journée : toutes les actions ont un coût. Se déplacer, attaquer, améliorer la cité… et toutes les actions rapporteront de l’XP. Ce coût et cet expérience sont relatives à la complexité de la tâche et permettront de faire évoluer le personnage.
  • Un personnage est représenté par 6 caractéristiques classiques du jeu de rôle : force, dextérité, constitution, intelligence, astuce et perception (j’suis pas encore fixé sur tout, mais quelque chose comme ça) qui détermineront des caractéristiques secondaires, des compétences martiales, comme des compétences scientifiques et autre…
  • La vigueur d’un personnage est représentée par ses « points de vie »… Quand ils tombent à 0, le personnage est évacué et retourne en ville où il obtiendra un handicap permanent qui impactera sur ses caractéristiques. Perte d’un sens, perte d’un membre. A trois handicaps… la prochaine fois, c’est la mort et donc reroll obligatoire.
  • Différents objectifs et animations seront donnés par des PNJ (personnages non joueurs) qui seront là pour faire évoluer l’histoire. Au départ, je serais bien seul à cet tâche et peu à peu, je prendrais des gens qui ont envie… Mais il va falloir que je fasse pas mal d’outils, j’ai connu trop de jeux où l’animation n’avançait pas par manque d’outils.

Je vais commencer les développements dans très peu de temps. Déjà, ce week end je vais investir dans la licence de RPG Maker et acheter les sets graphiques dont j’ai besoin pour faire la carte. Ma compagne qui a un sacré coup de crayon se posera dans un avenir plutôt proche à des draw d’ambiance dont j’ai besoin pour penser mon interface.

Le premier module sera le module de création de compte et de personnage… Dès qu’il sera « OK », je le mettrais en ligne et il me permettra de faire participer à l’alpha/beta tout ceux qui se sont inscrits dessus et de les tenir au courant. L’interface sera pauvre au début, car je suis pas du tout webdesigner, et peu à peu, elle s’améliorera. Je vais surtout travailler les fonctionnalités.

Un projet qui tient dans le temps

A la différence de pas mal de jeux du genre qui ont été créé par des passionnés qui n’y connaissaient rien au web… je suis un passionné qui jouit (oh le coquin) de 14 ans (cette année) d’expérience dans le domaine du web. J’ai réalisé mon premier site à 17 ans. Je travaille avec des standards partagés dans le monde entier, sur des technologies fiables, puissantes, éprouvées en milieux professionnels.

On aura donc une API en Symfony 3, parce que je suis avant tout développeur PHP et que j’adore ce framework. Il y aura un framework parce qu’un jour, des gens m’aideront ou reprendront le projet et que c’est plus simple quand la façon de bosser est standardisée. La version de symfony montera en parallèle avec le projet, tout comme chacune des librairies. Je refuse de me retrouver à terme avec des composants deprecated ou même qui n’existent plus nulle part.

Côté front, on aura du Angular… je sais pas encore si ça sera du Angular 2 ou du 1.5+ qui a encore une 10 aine d’années à vivre. Ca dépendra si je trouve les composants qui me vont au moment de commencer.

Côté temps réel, on sera sur du NodeJS et du socket.io … sauf si je prends un provider de pubsub genre pubnub ou pusher… Maintenir un serveur supplémentaire au début, ça va me coûter surement plus cher que de passer par un de ces providers, donc j’vais me poser doucement dessus à l’occase.

Pour le côté APP mobile, j’vais pas faire dans le dev spécifique. J’vais voir à me faire chier avec Cordova pour embarquer une web view ou encore voir comment ils ont fait pour slack et skype web qui sont des versions embarquées de leur version web (à quelques composants…). J’ai vu que Microsoft a un truc pas mal aussi CodePush… donc à voir.

J’ai pas mal de problématiques à éclaircir : déploiement des différents composants : capistrano ou pas, firebase pour les frontaux (qui sont qu’un build de fichiers statiques)… comment protéger mon API pour que seuls mes frontaux requêtent dessus et pas d’autres gars… là à froid, j’y ai pas réfléchi.

Bref, un projet assez tentaculaire mais super intéressant à monter avec les technos actuelles.

Qu’est-ce que j’y gagne ?

Dans un premier temps, rien. J’y perdrais même dans un premier temps. L’infra me coûte actuellement 200€ / an et puis le temps que je vais y passer bah c’est pas rien. Mais ce n’est pas du temps perdu même si le projet venait à capoter ou si j’ai genre 20 joueurs… et bah j’aurais appris à bosser avec certaines technos.

Ce jeu, c’est un rêve que j’ai depuis des années, de longues années… j’ai appris mon métier pour arriver à aujourd’hui. J’ai déjà aidé sur d’anciens jeux, j’en avais développé un il y a 10 ans de ça que je n’ai jamais mis en ligne (c’était tellement mal fait en plus, OMG)… on avait commencé à mettre l’univers de mon ancien associé sous forme d’un jeu (il y a bientôt 8 ans de ça), mais ça n’avait pas abouti…

Aujourd’hui, j’y vais solo, avec mon expérience, mon envie et mon univers. Et des fonctionnalités freemium apparaîtront à terme, pas pour en vivre, pas pour « rentabiliser les coûts » mais pour améliorer le jeu… ça sera réinvesti en visibilité, en technologies… on verra bien, on y est pas. J’ai pas réfléchi au modèle freemium, mais le jeu sera un free to play et il sera impossible de gratter des avantages contre du pognon. Ca, c’est clair et net. Mais vu que les personnages sont mortels, j’proposerais peut-être aux joueurs qui doivent reroll de récupérer « une vie » contre un GET 27 <3

J’ai aussi envie de relier 3 mondes qui font parti de tout bon rôliste qui se respecte : le jeu, l’écriture et la lecture. J’ai envie qu’écrire et lire des aventures soit accessibles et soit un plaisir. Et j’ai encore plus envie que certains réalisent ce rêve de « publier un truc »… Même s’ils en vivront pas, même s’ils en deviendront peut-être pas « le nouvel auteur de SF Français »… j’ai envie de trouver un moyen de les aider dans cette démarche. C’est aussi pour ça que j’me lance dans l’écriture d’une pièce de théâtre… (on pourrait croire que j’prends des décisions random mais pas du tout… le mec réfléchit)

Bref… y a de l’envie, y a des idées, y a le temps… y a plus qu’à !

Bisous et bon week end xD

Avancée de 7 Wonders Online

Un premier petit point pour dire où j’en suis de 7 Wonders Online (au cas où le titre était pas explicite… c’est ça qu’on appelle du SEO, non ? :p)

Donc comme vous le savez, sur 7W, il y a 4 phases essentielles :

  • Distribution des merveilles
  • Les 3 ères
  • Les 3 résolutions des conflits
  • Le comptage des points

Le jeu va fonctionner de la manière suivante :

  • Les joueurs contactent le serveur de partie (host qui peut être un serveur distant ou un serveur local)
  • Les joueurs créés ou rejoignent une partie existante (non débutée bien entendu)
  • Quand les joueurs sont prêts, la partie se lance
  • Le reste est similaire au fonctionnement plateau du jeu

Alors où j’en suis ?

Je suis sur le lobby, le serveur de partie. Son but est d’hoster les parties et de connaître l’état de tout ce qui se passe, qui a quoi en main, à quel tour en est-on …

Ma grande problématique actuellement, c’est : chaque fois que je modifie un fichier core du serveur, je dois redémarrer le serveur pour qu’il prenne en compte la modification. Sachant que j’ai +/-150 cartes de jeux à gérer, les plateaux, les capacités spéciales… à chaque petite modif, je dois régénérer une partie de A à Z… faut que j’trouve en moyen de fixturiser une game… 🙁

L’interface du lobby est quant à elle terminée et l’interface de jeu sera très épurée… Il faut par contre que je trouve une représentation du plateau de 3 à 7 (oué, je zappe le mode 2 joueur)… parce que même si dans 7W, seulement les joueurs de droite et de gauche ont une influence sur toi… tu dois quand même garder une vision globale de la partie pour tenter d’emmerder un gars en face qui te colle trop en point de victoire.

Ce sont des petites problématiques techniques sympa sur lesquelles se poser. Donc voilà, ça avance !

Bon allez, j’ai barbecue là ! La bise.

J’écris une pièce de théâtre

Oui… non mais c’est pas du tout contre productif avec l’objectif d’avancer sur mes projets persos… Noooooooon… xD

Donc voilà, j’me suis chauffé, j’ai récemment vu quelques pièces de théâtre du poto Thierry François et j’me suis dit « Oh … ça se tente, non ? »

Donc sans aucune prétention, j’ai décidé d’aborder le côté Gaming au théâtre et d’essayer de tirer un truc marrant à partir d’un héros de jeu vidéo, un poil dépressif parce qu’au bout de 20 ans, les gens sont toujours pas foutus de connaître son nom.

Je vous tiendrais au jus quand c’est fini… dès fois qu’en 2018, vous avez l’idée de vous pointer au festival d’Avignon avec un truc improbable xD

Bisous les poulets !

PandaLabs ouvre ses portes

L’aventure continue. Je dis pas commence, parce qu’honnêtement, ça fait déjà deux ans que je suis sur « un peu tout ce qui tourne autour de ça »… Mais j’avais pas le temps, gavé de boulot le jour et un peu le soir. J’ai enfin réussi à me débarrasser de tout ce qui me retenait et du coup, on finit de construire le drakkar et on prend le large façon viking !

Donc en gros, PandaLabs, c’est quoi ? C’est mon petit garage, mon sous-sol à l’Américaine, là où Daddy s’enferme des heures pour séques…  faire des trucs. L’avantage des développeurs web, c’est qu’on a pas besoin de trucs qui prennent de la place, donc pas besoin de garage… J’y présente les projets sur lesquels je bosse et qui me tiennent à coeur. Pas des projets pour des clients, mais des projets persos, des trucs que j’veux faire. Je sais qu’il y a un peu d’attente de certains potos, vu que j’fais du teasing depuis de nombreux mois… donc ce site/blog est là aussi pour montrer que « hey les gars, ça avance ».

Concernant la partie blog, j’vais pas y parler de ma vie spécialement genre « aujourd’hui, j’ai mangé un poulet… il était vivant ! ». J’vais juste faire des annonces sur l’avancée des différents composants, sur certaines problématiques rencontrées et leurs évolutions. Pas de commantaires, j’ai pas envie de me faire chier avec de la modération, à me dire « pourquoi les gens commentent pas, ils sont où mes commentaires, mais pourquoi le monde est si cruel ».

Je partagerais mes publications sur facebook et puis, ben… c’est tout xD

Donc, bienvenue sur Pandalabs, j’espère que vous continuerez à suivre un peu l’avancée de tout ça.

La bise !