FI hypertexte « massivement » multijoueur sans temps réel

J’ai un vrai gros projet qui me trotte dans la tête, dont je connaît les concepts généraux, mais j’aimerais quelques conseils/idées pour avoir des mécanismes multijoueurs intéressants, si vous le voulez bien. Attention, le texte est (très) long. (Et je n’ai ne sais pas quand ce projet sera fini, ni même s’il se concrétisera, alors il se peut que tout ça soit inutile.)

Voilà : je veux écrire un moteur de fiction interactive à la StoryNexus/Fallen London, mais avec une plus grosse part multijoueur.

Pour ceux qui ne savent pas, Fallen London se joue de la façon qui suit. Chaque joueur possède un certain nombre de variables (appelées « qualités ») qui débloquent ou verrouillent des « étapes » (storylet en anglais). Chaque étape propose des options et quand le joueur en choisit une, ses qualités changent, ce qui débloque ou verrouille d’autres storylets et ainsi de suite. De multiples histoires de déroulent donc au fur et à mesure. Pour que ça n’aille pas trop vite, le joueur possède un certain nombre d’actions qui diminue à chaque choix, et qui reviennent après un temps d’attente.

Cependant, tout ceci, bien qu’en ligne, reste une expérience solo. Fallen London propose quand même certaines actions entre deux joueurs, comme offrir un objet, soigner les blessures ou attaquer. Dans ce cas, un message est envoyé au second joueur, qui accepte ou refuse la demande (ou bien elle est acceptée automatiquement, dans le cas d’une attaque-surprise par exemple).

Mais ça ne fonctionne pas comme dans un MUD : on ne voit pas les gens arriver, faire des actions, partir, tout ça en temps réel ; on ne peut pas discuter en temps réel avec les gens présents. Quand on veut interagir avec quelqu’un dans Fallen London, on choisit un contact dans la liste parmi ceux ayant les qualités requises, et un message est envoyé. Le second joueur verra le message — possiblement des jours plus tard —, l’acceptera, ou peut-être n’y répondra jamais et l’action n’aura jamais lieu.

Maintenant, j’aimerais qu’il y ait des interactions multijoueurs plus intéressantes qu’offrir un cadeau ou attaquer quelqu’un et on sait directement si on a gagné ou perdu (pas de stratégie ou quoi, c’est juste un lancer de dés). Mais je ne veux pas de temps réel, je veux que ça puisse se passer en différé, comme expliqué plus haut. Il faut que le joueur sente qu’il fait partie du monde, mais qu’il puisse aussi profiter des histoires qui peuvent se jouer en solo s’il ne veut pas faire du multijoueur.

Bon, en fait, il peut y avoir du temps réel, mais simplement pour créer des délais entre les événements. Par exemple, si un joueur fait tel choix, par exemple il fête l’anniversaire de son personnage en jeu, il recevra un message une (véritable) semaine plus tard pour lui dire qu’il vient de recevoir un cadeau d’un oncle lointain. Ça ajoute des surprises et ça rend le jeu plus vivant, mais ce n’est pas vraiment du temps réel ; c’est juste un délai.

Première chose, je pense virer le système de contact. À la place, le jeu proposera un certain nombre de personnes éligible prises au hasard. Comme ça, il y aura une barrière en moins et ça favorises des rencontres différentes. Dans Fallen London, je ne fais aucune action multijoueur et je me contente de l’expérience solo car je ne connais personne et ça ne m’intéresse pas trop de demander sur leur forum pour trouver des contacts. (Venez jouer à Fallen London avec moi, je suis tout seul ! :cry:)

Les joueurs pourraient aussi faire partie d’une faction (mais une seule), ce qui leur permettrait d’avoir des objets spéciaux. Pour avoir un objet provenant d’une faction qui n’est pas la sienne, il faut qu’un autre joueur le donne. Comme ça, ça favoriserait les échanges. (On peut aussi penser à un système d’enchères, mais ça encouragerait peut-être la compétition au détriment de l’entraide.)

Mais ensuite, que faire ?

J’ai pensé à des « efforts de guerre », où tous les joueurs doivent coopérer pour faire avancer une histoire. Par exemple, il faut apporter un million d’âmes à une porte pour qu’elle s’ouvre (tout le monde est comptabilisé : que ce soit une personne en donnant un million ou mille personnes en donnant mille chacun, la porte s’ouvre) ; une fois qu’elle est ouverte, tout le monde peut passer sans avoir à donner d’âmes et l’histoire peut continuer (on donne un petit achievement au passage pour tous ceux qui ont contribué, car cela n’arrivera qu’une seule fois dans toute l’histoire du jeu). On peut aussi penser un unique objet dans tout le monde du jeu (un seul joueur le possède), mais il faut le charger de l’essence de 500 personnes différentes, alors il faut faire passer l’objet de joueur en joueur. Le genre de trucs amusants, qui font se sentir important le joueur, sans que ce soit contraignant.

Pourrait-il y avoir l’équivalent de combats ou de donjons, mais en différé ? On pourrait faire du combat au tour par tour, mais il faudrait attendre que l’adversaire fasse son tour et ainsi de suite, alors le combat pourrait durer des jours (ce ne serait pas très amusant). Pour les donjons, les joueurs pourraient former un groupe, et chaque action de chaque joueur fait avancer le donjon. Tout le monde gagne dès que quelqu’un réussit l’action finale (du coup, ça ferait comme un mini effort de guerre, mais spécifique à un groupe et refaisable). Il pourrait y avoir un donjon où il faut allumer une torche, mais elle s’éteint au bout d’un certain temps (réel) après quoi il faut la rallumer…

On pourrait faire des trucs moins drôles comme un joueur qui est piégé à un endroit et il faut qu’un autre joueur l’en sorte, mais le premier pourrait rester bloqué indéfiniment…

Voilà, je n’ai pas beaucoup plus d’idées ! Ou bien ces histoires d’échanges d’objets et d’actions de groupes seraient suffisantes si elles sont bien utilisées et que les histoires sont intéressantes ? J’attends vos suggestions !

Désolé si c’était un peu long, mais c’est important. Il faut que je m’assure que la structure de la base de donnée soit bien dès le début, alors il faut que je spécifie tout avant de me lancer dans le code.

Merci !

En lisant FI hypertexte multijoueur, j’ai tout de suite pensé à Seltani (seltani.net/). Tu connais probablement ?

Cependant je n’ai toujours pas essayé ce jeu, alors j’ignore quel genre d’interactions il propose à part se déplacer dans son univers, examiner certains éléments… J’ignore aussi s’il incorpore une limite du nombre d’actions par période.

En tout cas, tu pourrais éventuellement te baser sur le moteur de jeu utilisé par Seltani et l’adapter à tes besoins : github.com/erkyrath/tworld

Oui, je connais Seltani. :slight_smile: Cependant, c’est exactement ce que je ne veux pas faire ; il y avait aussi les mots « sans temps réel » dans mon sujet. Seltani, si je me souviens bien, fonctionne exactement comme un MUD, sauf que ce sont des liens plutôt que des commandes.

Je veux vraiment un système comme Storynexus, où le jeu est divisé en morceaux d’histoires débloqués en fonction des variables du joueur. Il n’y aura pas de concept de personnes ou d’objets visibles dans le lieu actuel. Seulement quels histoires sont disponibles dans le lieu actuel (et quels joueurs ont les qualités requises dans le lieu actuel lorsqu’il faut choisir un partenaire pour une action multijoueur, mais seulement à ce moment-là).

Et puis, Seltani semble coder plein de choses à la main et je pense que ce serait bien trop difficile à adapter. Et il manque plein de choses dont j’ai besoin, donc ce serait y ajouter des fonctionnalités pas prévues au départ, ça ne ferait pas un beau code. Et Seltani est a moitié abandonné, me semble-t-il.

J’ai ce projet pour deux raisons.

La première, c’est que j’ai toujours voulu faire un jeu avec Storynexus, mais le système n’est plus développé et a donc des bugs qui ne seront jamais résolus (et il manquait certaines fonctionnalités spécifiques à mon projet).

La deuxième, c’est que je veux essayer un projet web qui pourra éventuellement être sur mon CV. J’'aimerais donc le faire moi-même pour apprendre, car je n’ai pas beaucoup d’expérience dans le développement web. Je compte utiliser le framework python Django, qui est vraiment bien et te donne l’impression que tu peux faire n’importe quel site, même si tu n’as jamais fait de développement web, et qui a exactement tout ce dont j’ai besoin. En plus, comme,il s’agit d’une compétence recherchée, ça ne me fera pas de mal d’apprendre.

Voilà que ce ça m’inspire (ça va être un peu long aussi) :

1/ L’idée d’avoir des objets créables par certaines personnes seulement devrait être centrale, je pense. En tout cas c’est toujours comme ça que j’ai imaginé les bases des mécaniques de socialisation dans ce genre de jeu (que je n’ai pas beaucoup pratiqué, juste un peu Ultima Online).
Objets par faction, oui, surtout si on développe un peu dans le genre :

  • Un objet de faction fabricable seul
  • Un objet de faction fabricable seulement à 2 (avec qqu’un d’autre de la faction)
  • Un objet de faction fabricable en groupe (nb de personnes min différent suivant la faction)

Mais aussi des objets liés à un métier, ou une classe suivant le système.
Dans UO on pouvait par exemple être charpentier et on était alors le seul à pouvoir fabriquer certains meubles que les autres joueurs pourraient mettre dans leur maison.
Mais même si on est dans du système plus AD&Desque, on peut bien supposer qu’un barde sera le seul à pouvoir fabriquer une flûte qui permet d’activer telle ou telle rencontre… ou bien une guerrière pourra fabriquer une massue

1-B/ Il peut s’agir de petits services. Par exemple, on doit aller voir des guerriers pour l’affûtage d’une lame. Des PNJs peuvent aussi le faire (pour ne pas bloquer le jeu complètement) mais contre une forte somme.

1-C/ Il peut s’agir de plus gros services : l’apprentissage.
Admettons que chaque classe/métier, et/ou chaque faction, fait démarrer les persos avec des compétences spécifiques.
On peut aussi imaginer des compétences rares attribués aléatoirement pour pimenter/corser le tout (mais attention à ne pas pousser les gens à jeter leurs nouveaux persos pour en recréer plein jusqu’à avoir la compétence ultime… ces compétences ne devraient être « découvertes » qu’après X heures de jeu pour qu’on soit déjà un peu attaché au personnage).

On peut donc avoir besoin d’une compétence qu’on n’a pas et qui :

  • soit peut être acquise auprès d’un PNJ peu compétent (qui mettra bcp de temps à nous l’enseigner)
  • soit peut être apprise auprès d’un PJ (qui nous l’enseignera plus vite)
    Comme avec les systèmes de jetons temporels évoqués pour Fallen London, on va voir son professeur régulièrement pour avancer sur une barre de progression représentant l’apprentissage de la compétence. Les premières étapes pourraient être rapprochées, puis quand on est presque au bout plus espacées.

2/ Attention aux mécaniques imposant d’utiliser tel ou tel joueur. Si qqu’un est en possession du livre des âmes que tout le monde doit se passer, mais que cette personne ne compte plus se connecter, ça va être gênant. Bien sûr, il y aurait au minimum un système qui enlève le livre des mains d’un joueur inactif trop longtemps… mais je pense que ce serait bien aussi d’intégrer une sorte de variable cachée (ou pas) indiquant le degré d’activité/connexion d’une personne. Plus on se connecte souvent/régulièrement on aura un score élevé, et certaines quêtes ne seront confiées qu’à des gens ayant au moins une certaine note.
Ce qui, combiné à un équivalent de l’XP, permet aussi de confier certaines quêtes complexes à des personnes impliquées dans le jeu et à l’aise dedans, pour ne pas non plus intimider de nouveaux joueurs qui veulent y aller doucement.

3/ Il pourrait y avoir des PNJs itinérants, qui restent tout de même un moment à chacune de leurs étapes. Seuls les joueurs qui les ont rencontré récemment pourront ainsi renseigner les autres sur leur emplacement actuel. Bien sûr, ça n’a de sens que sur un monde assez vaste.

4/ S’il y a plusieurs régions dans le jeu, chacune pourrait avoir sa monnaie. C’est à maniver avec précaution car ça peut compliquer bcp de choses aussi bien en programmation que dans la tête des joueurs et joueuses, mais ça pourrait aussi non seulement ajouter de la profondeur au monde mais aussi inciter à des échanges réguliers entre les habitants de différentes régions.

5/ Des tournois/jeux de villages pourraient attirer bcp de personnages en certains endroits du jeu à des dates précises, et tout le monde participerait alors à des épreuves de toute sorte ayant recours à un large panel de compétences.
Des épreuves solo, des duels, mais aussi des épreuves de groupe. Les interactions pour participer seraient limitées (s’inscrire à une épreuve et attendre que le matchmaking se fasse) ou plus ardues (monter une équipe de 5 pour pouvoir s’inscrire), mais dans tous les cas ça peut créer un peu de lien de remporter une épreuve difficile avec un petit groupe de personnes. Surtout si le fait d’avoir réussi l’épreuve octroie une médaille ou un titre visible de tt le monde.

6/ Il pourrait y avoir des rôles politiques ou administratifs, voire simplement honorifiques.
Certains rôles sont obtenus par élection (ça pourrait stimuler bcp l’univers en faisant naître des campagnes électorales).
D’autres rôles seraient obtenus par tirage au sort (dans la limite tout de même des personnes ayant un score de présence honorable).

Les rôles pourraient déjà rapporter un peu d’argent, mais surtout des capacités qui pousseraient les autres à venir nous voir. Par exemple, pour pouvoir acheter un permis/visa permettant d’accéder à une certaine zone, il faut aller voir tel représentent de l’état (et le visa pourrait avoir une durée d’X jours, donc la fois suivante on aurait à contacter une nouvelle personne fraîchement élue).
Le système électoral a l’avantage de donner beaucoup de spectacle, mais l’inconvénient de concentrer le pouvoir auprès d’une poignée de joueurs parmi les plus motivés/connectés. Donc mélanger avec des rôles à tirage au sort me paraît vraiment utile pour que tout le monde puisse sentir avoir une chance d’avoir un rôle intéressant.

Bien sûr, d’autres rôles pourraient aussi s’obtenir à travers des quêtes ou la réalisation d’un travail acharné sur X jours (tout les jours, se connecter et dépenser un jeton pour avancer sur la constitution d’un dossier complexe).
A ce moment, c’est simplement la personne qui réalise la quête en premier qui obtient le rôle au début du jeu, puis les autres sont sur liste d’attente. Le poste a un délai assez court et quand l’occupant le lâche on attribue le rôle à la personne suivante sur la liste.
Quand il y a trop de monde sur la liste la quête est temporairement désactivée, pour éviter qu’on ait une liste d’attente de plusieurs mois.

D’autres rôles, enfin, seraient attribués par des gens qui ont déjà obtenu un rôle important.
Mais ces rôles attribués ne pourraient par exemple pas être attribué deux fois de suite par la même personne à la même autre personne.

J’ajouterais ceci :
Les objets de classe ne seraient pas toujours forcément à fabriquer, ça pourrait être des objets récupérables dans le monde qu’on est le seul à pouvoir repérer (une guide de montagne pourra voir des champignons que les autres ne voient pas).

Ou bien ces cueillettes privées pourraient dépendre de compétences que l’on peut acquérir. Certains persos pourraient ainsi se spécialiser en récupération d’ingrédiens pour les revendres aux joueurs artisans.

Pour éviter qu’au bout de quelques mois une poignée de joueurs ne possède toutes les compétences et n’ai plus besoin de personne, on limite le nombre de compétences. Mais pas de manière brutale, car dire qu’on ne peut avoir que 10 compétences est certes acceptable, mais un poil frustrant, surtout si le nombre de compétences dispos augmente avec le développement du jeu.
Je verrais plutôt un système d’apprentissage de plus en plus long. Les premières compétences sont rapides à acquérir, mais au bout d’un moment une nouvelle compétence peut nécessiter des mois de travail (avec toujours le même nombre de jetons à consommer auprès d’un maître, mais de plus en plus espacés).

Merci pour ces réflexions intéressantes !

Cependant, vous le pensez peut-être trop en terme de RPG et moins en termes de « morceaux d’histoires ».

Le concept de base est hyper-simple. Des qualités (représentant l’inventaire du joueur ou son avancement dans le scénario par exemple) débloquent des bouts d’histoire, qui lorsqu’il sont joués modifient des qualités, qui débloquent d’autres bouts d’histoire, qui… Et c’est tout. Le multijoueur est un bonus (que j’aimerai rendre plus intéressant et en avant), ça doit pouvoir se jouer tout seul globalement, même si on raterait alors des trucs. Désolé si ça n’avait pas été clair (et jouez à Fallen London, vous comprendrez mieux et ça vaut le coup, même si à haut niveau le grind prend le dessus sur les histoires intéressantes).
Les autres fonctionnalités s’ajoutent sur cette base (donner un objet à un joueur revient à modifier ses qualités). Il y aura aussi des qualités liées au monde pour le rendre persistant, et d’autres petits trucs comme ça. Mais j’aimerais éviter les fonctionnalités plus avancées comme des groupes de jeu (pour faire un donjon) ou des guildes par exemple. Mais je peux quand même le faire si c’est requis.

Par exemple, le moteur de jeu n’aura pas de concept de PNJ. Bien sûr, on peut modéliser ça d’une autre façon : chaque interaction avec un personnage de l’histoire peut se faire sous forme de storylet.

Par exemple, une histoire, disponible uniquement dans la caserne, s’appellerait « Entraînement avec le maître d’armes » et proposerait les choix « Combat à l’épée » et « Tir à l’arc ». Chacun de ces choix augmenterait les qualités du joueur adéquates et nécessiterait certaines autres qualités (pièces d’or par exemple). On pourrait ajouter d’autres histoires pour des interactions différentes comme « Discuter avec le maître d’armes ».
On peut aussi utiliser des qualités représentant les relations avec les PNJ. Si le joueur à la qualité « Ami du maître d’armes » au niveau 5, alors ils sont assez proches et les leçons coûteront moins cher et le joueur pourra lui demander des choses plus personnelles.

Mais il n’y a pas d’objet « PNJ » en tant que tel.

Sinon, voici quelques réactions sans ordre particulier.

Quand je disais « faction », je pensais effectivement à plus large que ça comme « métier » ou « spécialisation ». Les services, c’est pas mal aussi (mais j’avais déjà donné l’exemple de soigner les blessures d’un autre joueur).

Le coup de l’apprentissage, ce n’est pas mal, mais encore une fois, je ne veux pas non plus faire un RPG avec mille compétences.

Pour le coup de l’objet à passer, je n’avais pas pensé au cas où une personne ne se reconnecterait pas, mais on peut facilement dire que le livre des âmes quitte son propriétaire s’il le garde trop longtemps, etc. C’était surtout un exemple du genre d’interaction sympathique qui ne demandent pas trop d’effort de la part d’un joueur individuel mais qui le font quand même se sentir important dans le jeu.

Pour des PNJ qui se baladent, je n’aime pas trop (et comme en plus il n’y a pas de concept de PNJ…). Et je ne veux pas que l’accent soit mis sur la géographie/l’exploration. Dans Fallen London, la ville n’est modélisé que par 16 endroits correspondant vaguement à des quartiers. Ça ne doit pas être un MUD avec des dizaines/centaines d’endroits ; les endroits serviront principalement à filtrer les histoires disponibles (car c’est ça le cœur du jeu).

Pour les événements. Fallen London organise tous les ans l’élection du maire (qui est un personne de l’histoire, pas un joueur). Il y a trois candidats, il faut en choisir un, et plus on participe à sa campagne (en faisant diverses actions), plus son candidat avance. Celui qui a eu le soutien le plus élevé gagne. Ce qui est bien, c’est que ça implique les joueur — dans un événement unique et mémorable de surcroît — et que ça fait avancer l’histoire globale.

Cependant, je ne suis pas chaud pour donner des rôles administratifs pour des joueurs. Ça ajouterais une dimension roleplay plus difficile à gérer et ça ne fonctionnera peut-être pas avec le type de jeu. Mais l’idée qu’une poignée de joueur ait des fonctions/objets/compétences qui permettent de faire plus de choses et donc que des personnes doivent leur demander des trucs peut être bien (mais après, la personne qui a un rôle important pourra être spammée…).

Merci en tout cas ! :smiley:

Ok, je vois mieux.

Dans une optique de bouts d’histoire, il pourrait du coup y avoir simplement un background généré automatique pour chaque PJ.
Et certaines histoires ne pourraient avancer (dans le cas d’une sorte d’enquête par exemple) que si on effectue une sorte d’action « interroger » sur un personnage qui possède un certain trait de background.

Par exemple pour enquêter sur Jack l’éventreur, il faut interroger au moins 5 personnes différentes ayant le trait « originaire d’un quartier populaire » ou qque chose dans le genre.

Alors que tout le monde sait que c’est un Hobbit franc-maçon…

Puis-je te demander :

  • Dans les « bouts d’histoire » dont tu parles, quel est le niveau d’interactivité ? Sont-ce juste des textes linéaires, du linéaire avec juste 1 ou 2 choix, des histoires Dont Vous Êtes Le Héros, ou de la fiction interactive ?

  • Je crois que la qualité du gameplay, vu le système décrit, dépendra surtout du thème choisi, et du contenu (je pense à SinDome par exemple, qui marche fort). Qu’en est-il du thème, de l’époque, du background ? Qui produit le contenu, les joueurs eux-mêmes peuvent-ils le faire en tant que joueur ?

En tout cas il y a un très bon filon à creuser ici.

J’ai eu une réflexion en lisant tout ça. On est toujours dans une seule mécanique, alors qu’on pourrait mélanger les genres. On peut imaginer un jeu avec des sections en Fragments d’Histoire à Débloquer, des sections Dont Vous Êtes Le Héros, des sections MUD, des sections TCG/CCG textuel, …etc. Bon enfin là je délire un peu. Restons sur ton idée.

Si tu veux étoffer ton CV, as-tu envisagé d’utiliser Nodejs ?

Sinon il y a des mécaniques très intéressantes dans le jeu Torn City. Peut-être une source d’inspiration ?