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

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

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