18/05/2009 Aucun commentaire

L’intégration continue et les méthodologies Agiles semblent de plus en plus intéresser Adobe ces dernières années. Après l’intégration officielle de FlexUnit dans les projets open-source managés par la firme, il semblerait qu’une prochaine étape importante soit sur le point d’être franchie.

En effet, en surveillant Confluence, le Wiki d’Adobe Open Source, une nouvelle catégorie, encore inaccessible par le listing des projets classique, a fait son apparition le 29 avril.

Il s’agit de Flex PMD !

Cet outil permet d’analyser du code source AS3/Flex pour y détecter des problèmes potentiels et des soucis de performance. Il s’agit, tout comme son homonyme PMD (pour Java), d’une solution d’audit et de monitoring de qualité de code automatisée.

Il s’agit là d’une grande avancée d’Adobe sur le chemin du développement flexible et des outils d’intégrations continue, que l’on ne peut que saluer. En plus, il semblerait que ce projet soit mis en place par Adobe France (Xavier Agnetti et Daniel Taborga ont tous deux contribués aux pages du Wiki).

Rien ne semble toutefois accessible au commun du mortel pour le moment, la page de téléchargement étant vide, et le SVN n’étant pas encore accessible en lecture. À surveiller !

[Edition: Le projet FNA sur Google Code contient ce qui semble être une pré-version de Flex PMD ici. ]

Categories: Code Tags:

07/04/2009 3 commentaires
Fractale de Mandelbrot

Les probabilités sont la clé de voûte d’un nombre incalculable de jeux. Même dans les systèmes totalement déterministes où le hasard n’existe pas, et où les règles sont statiques, l’imprévu met presque toujours son nez. Je pense que l’on peut même dire que c’est la surprise qui constitue le plat de résistance de l’amusement. Comme jeu où tout est prévisible, il y a le morpion. Et ça n’est drôle que contre un adversaire qui ne sait pas jouer.

Et qui dit imprévu, dit probabilités. Il y a plusieurs façons de mettre en place un système non-déterministe. La plus commune est l’intervention d’un être humain. Nous sommes des merveilleuses créatures dotées d’un schéma de réflexion si complexe qu’il suffit presque que les règles laissent une toute petite place à l’imaginaire pour qu’un jeu à deux devienne stratégique. Presque, car encore faut-il qu’il n’y aie pas d’issue trop évidente.

Un exemple facile serait les Échecs. Une série de règles simples offrant un large éventail de combinaisons, un terrain de jeu limité, mais des adversaires imaginatifs. Et une quasi infinité de parties différentes.

Dans les MMORPGs, et plus encore dans les jeux solos, l’imprévu se manifeste souvent de façon artificielle, par le biais de la génération de nombre pseudo-aléatoires. Pour insuffler un peu de chaos dans les mécaniques trop bien rodées, on décide souvent de transformer nos valeurs en plages. Voir de faire intervenir l’imprévu encore plus directement, en évaluant de temps en temps des conditions aléatoires pour déterminer si le Sort est intervenu.

Un cas frappant est celui des coups critiques. Depuis D&D, on simule une action particulièrement glorieuse du joueur en la portant sur son niveau d’interaction : le jet de dés. Dans les jeux modernes, le principe de réussite critique est très souvent présent. Plus rarement celui d’échec critique, j’y reviens.

C’est une bonne chose : si tout est suffisamment aléatoire pour ne pas pouvoir monter une stratégie autour d’un événement imprévisible, et si l’événement imprévisible favorise un joueur. En revanche, à mon sens, c’est une très mauvaise chose lorsque l’imprévu désavantage le joueur alors qu’il affronte un ennemi virtuel (donc, pas un autre joueur).

N’oublions pas que l’intérêt de tout système de gameplay est de servir le plaisir du joueur. Être surpris de sa propre puissance, c’est fun. C’est encourageant. C’est positif. Être surpris de la puissance de l’adversaire, c’est parfois frustrant, mais lorsque l’adversaire est humain, le sentiment d’injustice est faible : ça aurait pu être nous.

Par contre, lorsqu’il s’agit d’un ordinateur, le sentiment d’être abusé est très rapidement atteint. Comme dans le cas d’une intelligence artificielle (ainsi que décrit dans un excellent article paru récemment sur Gamasutra), les adversaires virtuels sont très vite soupçonnés des plus viles intentions, et cela encore plus lorsqu’il s’agit de hasard, en étant eux même les gardiens.

Il y a pire encore : les ratés aléatoires. Il n’existe pas de situation où un joueur prenne du plaisir à rater son coup par hasard. Surtout pas lorsqu’il n’est pas l’instrument de ce hasard (s’il tire les dés, il peut au moins se dire que c’est un peu de sa faute). Et décidément jamais lorsque c’est l’adversaire qui détermine ce hasard. Félicitations, vous avez réuni toutes les conditions pour effectuer cette action, et … ah, non, vous échouez. Pas de chance. Très amusant.

C’est pourtant un système récurent dans les jeux vidéos. Un peu moins en jeux de plateau ou en jeu de rôle papiers (une question de survie pour le MJ, probablement). Oui, il est logique que si l’on peut réussir quelque chose particulièrement bien, l’on puisse aussi le merder particulièrement fort. Mais qui a envie de ça ?

J’irai encore plus loin. Dans des systèmes aléatoires positifs (comme les coups critiques), le hasard est bien souvent situé en avant-plan. Le joueur peut difficilement compter sur un coup critique, mais il souhaite en faire. Ce genre de sensation est également présente sur les systèmes de répartitions de butins (le loot, quoi). Un élément aléatoire, l’espoir du joueur.

En soit, il ne s’agit pas forcément d’un mauvais système, mais il a la particularité de devenir très vite frustrant. L’aléatoire à cela de particulier qu’il est impossible pour le joueur de le digérer lorsqu’il ne le sert pas. À partir du moment où un facteur chance existe, ce facteur devrait servir le joueur, et son absence, ne pas le désavantager. Et la plupart des systèmes aléatoires ne font pas cela.

Récemment, Blizzard a mis en place discrètement, lors de la sortie de Wrath of the Lich King, un système aléatoire pipé, dans le cadre de la mécanique de calcul du droprate des objets de quêtes dans son MMORPG World of Warcraft. C’est un système qu’ils avaient déjà utilisé, selon l’article, pour le calcul des coups critiques sur Warcraft 3.

Le principe est tout simple : plus on échoue, plus on a de chance de réussir. Jusqu’à, éventuellement, ne plus faire intervenir la chance. Je trouve ça absolument brillant. Et qu’on ne me sorte pas l’éternel couplet « Blizzard n’a rien inventé » ou « c’était juste évident » : ailleurs, ce n’est bien trop souvent pas le cas.

Une solution d’implémentation toute simple consiste à piper son aléatoire. Par exemple, lorsque l’on devrait tirer un nombre entre 0 et 99, on tire un nombre entre n et 99 où n est le nombre d’échecs de suite précédent ce jet. Un échec étant un jet qui ne favorise pas le joueur.

Avec cette solution, on augmente le nombre de réussites totales sur un grand nombre de jets de 1%. Par contre, on diminue le nombre d’échecs d’affilés d’environ 70% : au lieu de faire en moyenne 290 échecs de suite sur 1000 jets, on n’en fait plus que 95 en moyenne. Par contre, le nombre de réussites de suite ne change pas : environ 1. En réalité, il évolue selon la même courbe que le nombre d’échecs de suite, mais les réussites étant bien plus rares que les échecs, l’impact de l’évolution est beaucoup plus réduit.

Ce genre de système « mémorisant » la malchance de joueur pour la minimiser représente à mon sens une énorme évolution dans les systèmes aléatoire, car il permet de palier à leur principal défaut : le sentiment d’injustice.

Un exemple de calcul de probabilités est disponible ici, en Python.

Categories: Conception Tags: , ,

11/02/2009 20 commentaires

Bon sang, ce qu’il est facile d’oublier les bases. Coder sans penser. Expliquer sans comprendre. Manger sans gouter. Ce que l’on fait quotidiennement tend vers l’habitude. L’habitude tend vers l’automatisme. L’automatisme implique l’absence de réflexion. L’absence de remise en question. Ainsi, celui qui pratique quotidiennement son art prend le risque de s’enfermer dans ses réflexes et dans ses certitudes. De cesser de se renouveler pour devenir un imitateur de lui même, un pastiche de celui qu’il était lorsqu’il doutait encore de lui.

La clé est là : douter de soi.

Aujourd’hui, on considère la confiance en soi comme primordiale pour vivre une existence épanouie. Cette confiance en soi est enseignée comme l’art de refouler ses doutes à propos de ses compétences, de faire taire la peur de l’échec, et de briser la crainte du jugement. On est bien loin de ce qu’enseignait Socrate au Vème siècle avant notre ère : « Ἓν οἶδα ὅτι οὐδὲν οἶδα« . Je sais que je ne sais rien.

Ce culte de l’auto-congratulation tend au narcissisme. Fini, l’acceptation de l’ignorance. Il est désormais honteux de douter de ses opinions, voir d’ignorer ce que l’on devrait savoir. Les questions servent à vérifier la conformité de la réponse de l’autre, et plus à se renseigner. L’accès au savoir est humiliant : les bibliothèques sont désormais des lieux de silence, et non de partage. Les amphithéâtres sont emplis de gens cherchant à prouver leur valeur, et non pas à l’acquérir. La culture est un pré-requis. Même lorsque l’on ignore tout de ce dont on nous parle, on secoue la tête d’un air approbateur. Et on ira chercher plus tard, sur Internet, à l’abri devant son écran et loin des regards indiscrets et des jugements d’autrui, le Graal de cette culture qui nous échappait. Ironiquement, la capacité à se remettre en question est quelque chose que l’on recherche chez les autres. À quoi bon avoir raison si l’on ne peut pas corriger les tords d’autrui ?

Cette culture de la certitude se ressent partout. Celui qui a peur est un faible. Celui qui doute est probablement un incompétent. Aujourd’hui, on n’apprend plus. On valide nos acquis. On ne découvre plus. On constate. On ne s’émerveille plus. On l’avait déjà vu sur YouTube.

Personnellement, je suis le dernier des incompétents. J’ai souvent du mal à l’accepter, car les habitudes de la société sont difficiles à éviter, mais c’est un fait. Chaque personne que je croise aurait des centaines de choses à m’apprendre. Chaque jour, j’ai l’impression d’être de plus en plus petit au milieu de ce brouhaha de savoir, de culture, de rhétorique, de politique, de science, d’art, de lettres, de pensées. J’ai appris à accepter l’idée que je mourrai ignare. Plus j’en apprend, et moins j’en sais. Alors tant pis.

Essayez donc, vous aussi, de ranger votre blason de convictions l’espace d’un instant, et de vous montrer, nu et fragile, tel que vous êtes, au reste du monde. Écoutez vos prochains comme s’ils distillaient par leur parole les secrets d’un art mystérieux. Ouvrez les yeux sur l’océan infini de votre ignorance, et nagez-y. On peut exister dans le doute.

C’était un petit billet d’humeur et de philosophie de comptoir, destiné à extérioriser toute mon incrédulité face à ces gens qui m’expliquent avec tant de verve leurs évidentes contradictions à la logique sous prétexte que « bon sang, tout le monde le sait ». Et le titre, c’est le serment du game-designer, à propos duquel je crains de constater, au fil de mes aventures vidéoludiques, qu’il se perd de plus en plus.

Désolé.

Categories: Hors sujet Tags:

05/02/2009 9 commentaires

Et paf. Parce que déjà, WordPress, c’est quand même autre chose à administrer, et aussi parce que l’ancien look commençait à me sortir un peu par les yeux.

Toutes mes confuses si des choses sont cassées. Les anciens chemins des flux RSS (des billets et des commentaires) sont redirigés vers les nouveaux, vous ne devriez donc pas avoir à mettre à jour votre aggrégateur. Et si vous ne souscrivez pas déjà au flux RSS de ce blog, n’hésitez plus : abonnez-vous !

Categories: Hors sujet Tags:

01/02/2009 5 commentaires
Dices

Raconter une histoire a toujours été un point clé dans les jeux vidéo depuis leur commencement, ou peu s’en faut. Un scénario habilement construit est un excellent outil pour plonger le joueur au sein du monde virtuel dans lequel on souhaite l’embarquer. L’immersion a besoin du ciment scénaristique pour naître. L’histoire nous permet également de justifier les objectifs donnés, de construire un fil rouge menant du début à la fin du jeu. Et évidemment, une histoire est un excellent générateur de sensations, de sentiments et d’émotions.

Categories: Conception Tags: , ,