URL: https://linuxfr.org/users/bux-2/journaux/rolling-un-nouveau-jeu-libre Title: Rolling: un nouveau jeu libre Authors: bux Date: 2020年07月23日T12:13:54+02:00 License: CC By-SA Tags: jeu, jeu_libre, jeux_linux, jeu_vidéo, jeu_de_rôle, moteur_de_jeux et python Score: 50 Déjà deux ans de travail, il est temps de présenter le projet ! ![image principale](https://tracim.bux.fr/api/v2/public/guest-download/2d883e0d-e5fa-4338-aecf-0c69b79be1bb/Coffee_242.png) Petite vidéo disponible [ici](https://tracim.bux.fr/api/v2/public/guest-download/c15eb2a9-a104-4a0c-868f-2230e650c560/rolling1.webm) (2.47 MB, WEBM) # Qu'est-ce que c'est ? Tout d'abord, c'est un jeu. À la fois un jeu de gestion, d'aventure, de rôle et de coopération multi-joueurs. Vous incarnez un personnage qui devra, pour commencer, trouver à boire et à manger. Et ce, à chaque tour. Mais au delà de ces besoins de base ... il vous faudra assurer votre survie face aux autres joueurs. Car dans ce jeu, tout est permis. Du moins l'idée c'est d'en permettre un maximum ! Pour survivre, à vous de choisir comment: Construire et fortifier un village. Développer un réseau commercial. Payer des mercenaires. Ou encore, être payé par les villages pour les protégers. Êtres vous même les brigands ... Le jeu met à disposition les mécaniques nécessaires pour réaliser vos projets. Rolling est un jeu où on confie aux joueurs le soin de créer l'environnement, le contexte et les évènements du jeu. # Gameplay Rolling associe le tour-par-tour et le temps réel. A dates fixes, le "tour passe". Entre chaque passage de tour, vous êtes libre de faire jouer votre personnage en consommant ses "points d'actions" (qui se rechargent au passage de tour). Entre les passages de tour, vous pourrez: * Chercher, produire ou consommer de la nourriture/de l'eau * Déplacer votre personnage (sans consommer de points d'actions) dans la "zone" où il se trouve * Voyager vers d'autres zones (quitter votre zone pour une autre) * Fabriquer des outils, des armes, des vêtements, ... * Construire des bâtiments, des murs, des enceintes, des fours, etc * Relationner avec d'autres joueurs, créer/rejoindre des affinités pour se protéger mutuellement et partager ses biens * Définir ce que votre personnage protège, comme l'accès à un bâtiment, un endroit ... Lors du passage de tour, différentes opérations seront effectués par le serveur: * Calcul des pertes/gains de points de vies * Péremption/re-génération des ressources (la forêt pousse, les animaux se reproduisent, la viande faisande...) * Fonctionnement des bâtiments (un feu s'éteint si il n'a plus de bois à bruler) * Exécution des actions programmées Cela, dans un monde persistant et partagé entre tous les joueurs : ce que vous laissez trainer (une épée, votre nourriture, un cadavre...), ce que vous construisez, etc, les autres joueurs y auront accès. Une liste des fonctionnalités développées et à développer est disponible [ici](https://github.com/buxx/rolling#roadmap-fr). # Jeu de rôle Rolling est également un jeu de rôle : Votre personnage évoluera en connaissances et compétences. Vous pourrez proposer des quêtes, exprimer des besoins commerciaux, rédiger des histoires avec d'autres joueurs si vous avez l'âme d'un écrivain. Des outils de gestion, de création de quêtes et d'évènements seront mis à disposition des maîtres du jeu pour alimenter l'univers. Le serveur enregistrera un certains nombre de données comme les déplacements, les concentrations de populations, l'urbanisation, les affrontements... Afin de générer des cartes, des fils d'évènements racontant l'histoire de l'univers. Et lorsque votre personnage meurt, c'est terminé. Vous devrez recommencer avec un nouveau personnage ! # Comment se démarque Rolling Un jeu dont l'univers est construit par les joueurs. * Un monde persistant : chaque objet laissé au sol, construction effectuée ou cadavre laissé derrière vous fait partie de l’univers * Un mélange de jeux tour par tour et de temps réel * Pendant que vous ne jouez pas, votre personnage peut interagir : participer à une attaque, se défendre, faire des échanges commerciaux * Une grande liberté d'action * Multijoueurs # Serveur ## Univers configurable Le moteur que je développe permet de configurer et de faire fonctionner un univers issue de votre imagination, cela grâce à un maximum de configurations : * La carte du monde et des zones * Les objets et leurs caractéristiques * Les ressources * L'articulation des actions (voir un peu après pour plus de détails) * Les compétences/connaissances **Quelque exemples** Définition de la carte du monde: ``` ::LEGEND ~ SEA* ^ MOUNTAIN ፆ JUNGLE ∩ HILL ⡩ BEACH ⠃ PLAIN ::META SPAWN:RANDOM:BEACH, ::GEO ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~ፆ^ፆፆ~~~~~~~~~~~~ ~~~~~~~~ፆ^^^∩ፆ~~~~~~~~~~~ ~~~~~~~⡩ፆ∩∩∩∩⡩~~~~~~~~~~~ ~~~~~~⡩ፆፆ∩∩∩ፆፆ⡩~~~~~~~~~~ ~~~~~~⡩ፆፆፆፆፆፆፆ⡩~~~~~~~~~~ ~~~~~~⡩⠃⠃⠃ፆፆፆፆ⡩~~~~~~~~~~ ~~~~~~⡩⠃⠃⠃⠃⠃⠃⡩~~~~~~~~~~~ ~~~~~~~⡩⠃⠃⠃⠃⡩~~~~~~~~~~~~ ~~~~~~~~⡩⡩⡩⡩~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ ``` Définition d'une carte de zone (qui correspond a une coordonné sur la carte du monde). Ici toute petite pour servir d'illustration représentant une plage. C'est un octogone où chaque "bord" permet de se déplacer vers une autre zone: ``` ::GEO ⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩ʛ⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩ʛ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩ʛ⡩⡩⡩⡩⡩⡩⡩ʛ⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ʛ⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩ʛ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ʛ⡩⡩⡩⡩ ⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩⡩ ⡩###⡩⡩⡩#⡩⡩⡩###⡩⡩⡩#⡩⡩⡩ ~~##~~~~~~##~~~~~#~ ~~~~~~~~~~~~~#~~~ ~~~#~~~~~~~~~~~ ~~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~ ~~~~~~~ ``` **_Note_**: J'ai prévu d'abandonner le format "texte" pour celui de l'image où les tuiles seront représentés par des pixels de couleurs. Configuration de ressources : ``` [resources.BEACH_SAND] name = "Sable de plage" weight=1600.0 material="SANDY" unit = "L" clutter = 1.0 actions = ["DROP_RESOURCE", "MIX_RESOURCES", "TRANSFORM_RESOURCES_TO_RESOURCES"] [resources.PEBBLES] name = "Galets" weight=2000.0 material="LITTLE_OBJECT" unit = "L" clutter = 1.0 actions = ["DROP_RESOURCE", "MIX_RESOURCES", "TRANSFORM_RESOURCES_TO_RESOURCES"] ``` ![image inventaire](https://tracim.bux.fr/api/v2/public/guest-download/0094da94-ebb8-437a-a29e-d50fd13dcbfa/Coffee_243.png) Configuration d'objets: ``` [LITTLE_SKIN_CANTEEN] name = "Petite gourde de peau" filled_at = 0.0 filled_unity = "L" filled_capacity = 1.0 weight = 0.1 clutter = 1.0 actions = ["DROP_STUFF","FILL_STUFF","DRINK_STUFF","EMPTY_STUFF"] material_type = "OBJECT" classes = ["BOTTLE"] [LITTLE_SKIN_BAG] name = "Petit sac en peau" weight = 1200.0 clutter = 0.0 clutter_capacity = 5.0 actions = ["DROP_STUFF","USE_AS_BAG","NOT_USE_AS_BAG"] material_type = "OBJECT" is_bag = true classes = ["BAG", "LITTLE_BAG"] ``` Configuration d'actions: ``` [ACTIONS.COOK_LITTLE_GAME_WITH_SKIN] actions = ["TRANSFORM_STUFF_TO_RESOURCES"] required_one_of_stuff_ids = ["HARE", "RABBIT", "FOX", "MARTEN", "BOAR", "DEER"] required_all_stuff_ids = [] required_one_of_skill_ids = [] required_all_skill_ids = [] required_one_of_ability_ids = ["HEAT_UP_LOW_TEMP"] required_all_ability_ids = [] produce = [ {resource="COOKED_MEAT", coeff=0.3}, {resource="LITTLE_ANIMAL_SKIN", quantity=1.0} ] cost = 1 ``` ![image actions](https://tracim.bux.fr/api/v2/public/guest-download/47583fb5-700d-41d6-91e2-cfb4bcac8aed/Coffee_244.png) # Une base d'actions à étendre Comme abordé dans la partie précédente, le moteur met à disposition une série d'actions. Une partie est "fixe" et l'autre extensible par configuration. Les actions "fixes" à ce stade sont: * Les mécanismes de communications * Les mécanismes de commerces * Les mécanismes d'interractions avec les bâtiments * Les mécanismes d'interractions avec les autres joueurs (affinités/attaque/vol/tuer/prendre/donner/enseigner) * Les mécanismes de déplacements/voyages * Interaction avec des objets (remplir, vider, utiliser comme arme/bouclier/armure/sac) Les actions extensibles proposent un fonctionnement de base avec des modalités (ce sont celles-ci qui sont configurable). Ces actions peuvent être restreintes à certaines conditions (type de zone, compétences, possession d'objets): * Construction d'un bâtiment (modalités: ressources requises, durée de construction) * Chercher de la nourriture (modalités: ressources et quantités obtenus) * Chercher du matériel (modalités: ressources et quantités obtenus) * Transformer des ressources en un objet (modalités: ressources/objets et quantités) * Transformer un objet en un autre (modalités: objets et quantités) * Transformer une ressource en une autre (modalités: ressources et quantités) * Construire un objet sur la durée qui prendra plusieurs tours de jeu (modalités: objet/ressource et quantités) # API HTTP Le serveur propose son interface à travers une api HTTP. De cette manière, il est possible de scripter ce que l'on souhaite ou développer un client graphique différent. La documentation de cette api est générée d'après le code source et et visible [ici par exemple](http://s2.bux.fr:7431/doc/). ## Interfaces normalisées Le serveur communique au client graphique une [représentation structurée](https://github.com/buxx/rolling/blob/master/guilang/description.py) de l'interface qu'il doit afficher. Cela a des avantages : Le client implémente la manière d'afficher les interfaces une fois et le serveur peut ajouter de nouvelles interfaces sans que l'on doive mettre à jour le client graphique. Mais aussi des désavantages : Moins de souplesse quand il s'agit de donner une spécificité à un des écrans. # Graphismes Le serveur fournit au client graphique le nécessaire pour savoir quoi afficher dans son interface. A ce stade, j'ai réalisé une implémentation simpliste mais suffisante pour commencer à jouer. Une zone est donc composée d'une couleur de fond et d'une suite de tuiles de différents types que l'on représentera avec ces images: ![image tuiles1](https://tracim.bux.fr/api/v2/public/guest-download/5984c453-58bf-4ee7-880e-10f8047e26c8/S%C3%A9lection_310.png) Les objets / constructions / personnages sont également des images, appliqués par-dessus: ![image tuiles2](https://tracim.bux.fr/api/v2/public/guest-download/02ecd12c-6085-438e-af3d-6e83975fbbf4/S%C3%A9lection_311.png) La carte du monde suit ce même principe: ![image tuiles3](https://tracim.bux.fr/api/v2/public/guest-download/d6777067-5077-44ba-b1b3-c53ad6662ccb/S%C3%A9lection_312.png) ![image monde](https://tracim.bux.fr/api/v2/public/guest-download/93a9008d-7b8b-4558-b98b-8c0bed7af85a/Coffee_229.png) **Note**: je me pose sérieusement la question de passer à des tuiles de 32 pixels au lieu de 16 pixels. # Pourquoi développer ce projet et ce mode de jeu ? Plusieurs raisons m'ont poussé à démarrer ce projet. Premièrement, j'ai toujours fortement apprécié les jeux permettant de laisser libre cours à l'imagination du joueur. Ainsi que les jeux de rôles et les jeux de coopération. Aussi, il n'est pas possible pour tout le monde de pouvoir effectuer de "longues" sessions de jeux mais de ne pouvoir jouer que par de brefs moments. Alors je me suis lancé dans ce "mélange". Les jeux que l'on peut considérer comme des sources d'inspirations sont: [Dwarf Fortress](http://www.bay12games.com/dwarves/), [Fract](https://www.fract.org/), [Fallout](https://fr.wikipedia.org/wiki/Fallout_(jeu_vid%C3%A9o)), [Stronghold](https://fr.wikipedia.org/wiki/Stronghold_(jeu_vid%C3%A9o,_2001)). # La pile technique Le serveur est écrit en [python](https://www.python.org/) et utilise [aiohttp](https://docs.aiohttp.org/en/stable/). La base de données est en SQLite mais passera en Postresql dès qu'il faudra maintenir des scripts de migrations. L'api HTTP est présentée, configurée et documentée avec [hapic](https://github.com/algoo/hapic/) et [serpyco](https://gitlab.com/sgrignard/serpyco). Le clent graphique actuel est écrit en [Rust](https://www.rust-lang.org/) et utilse [Coffee](https://github.com/hecrj/coffee) comme librairie graphique. # À ce stade Au bout de ces deux ans de travail, une première version du jeu est enfin testable. Elle est limitée mais permet, selon moi, de pouvoir élargir un peu le spectre des "joueurs testeurs". Comme pour beaucoup de projets, l'aide de quiconque est la bienvenue ! Vous pouvez (détails sur comment contribuer [ici](https://github.com/buxx/rolling/blob/master/CONTRIBUTE.md)): * Tester, imaginer, proposer, jouer ! * J'ai cruellement besoin d'une aide "graphique", c'est pas mon fort ! * Développer le moteur, ajouter des objets/ressources/actions * Toute aide est bonne à prendre :) Quelque questions restent en suspens, peut-être auriez-vous de bon conseils: * Un aspect important est qu'un joueur n'ai qu'un seul personnage. Comment appliquer cette limitation efficacement ? Je n'ai pas trouvé d'autres solutions que d'exploiter des systèmes tiers comme Steam pouvant faire office "d'identificateur". Pas top pour la vie privée ... * J'utilise des tuiles de 16x16 pixels. Surtout parce que j'ai trouvé une suite gratuite sympa de cette taille. Mais je me pose vraiment la question de passer à du 32x32 pixels. Bien qu'il me faudrait quelqu'un pour faire quelque tuiles ! Qu'en pensez-vous ? * Le premier serveur de Rolling aura besoin d'un "univers" (fantastique ? médiéval ? post-apocalyptique ? steam-punk ?) si vous avez envie d'en être l'auteur, venez participer c'est possible ! # À vous de jouer * Discuter par mail sur la liste de _publipostage_ : [https://framalistes.org/sympa/info/rolling](https://framalistes.org/sympa/info/rolling) * Télécharger/Jouer: [https://redbricks.games/home/rolling-117](https://redbricks.games/home/rolling-117) * Proposer des fonctionnalités: [https://redbricks.games/home/rolling-117/bricks](https://redbricks.games/home/rolling-117/bricks) * Le code source du serveur: [https://github.com/buxx/rolling](https://github.com/buxx/rolling) * Le code source du Client graphique: [https://github.com/buxx/rollgui](https://github.com/buxx/rollgui) N'hésitez surtout pas à faire vos retours vos retours en commentaire, sur le site de [Redbricks](https://redbricks.games/home/rolling-117) (qui est également [libre et open source](https://gitlab.com/OtterWays/redbricks)) ou à laisser votre email sur [https://framalistes.org/sympa/info/rolling-news](https://framalistes.org/sympa/info/rolling-news) pour être tenu au courant de la prochaine phase de tests.

AltStyle によって変換されたページ (->オリジナル) /