[SPOIL++]Cartographie du 7ème continent

Je suis en train de voir pour faire des rendus en direct avec vivagraph.js. C’est encore rudimentaire, mais à priori je devrais encore pouvoir avancer.

Voilà un résultat plus que primaire pour le rendu de la première carte du P&P, les couleurs sont rendues automatiquement pour les nœuds correspondant à des cartes. Les autres types de nœuds sont en bleu clair. Vu que c’est du SVG, je pense pouvoir rapidement améliorer le rendu et je vais tenter de rendre le tout interactif.

EDIT :
DefaultAvec un peu de tuning pour que ça corresponde plus à l’iconographie du jeu.

Pour une meilleure iconographie, tu pourrais éventuellement utiliser les images du site officiel ?
Dans le forum, avec la fonction “émoticones”, on a accès aux principales catégories de symboles. Un clic droit et hop, tu récupères les images pour ton usage privé.

DefaultC’est effectivement beaucoup plus joli !

Le crâne est pour les cartes aventure, le logo SP pour dire que ça vient du P&P. Les flèches indiquent la position de la carte à poser.

Et maintenant, j’arrive à rendre le tout un minimum dynamique :
https://www.youtube.com/watch?v=NvBD8hcr4d8

Aaaah ! Ca commence à ressembler à un truc compréhensible par un simple futur-utilisateur !
2 questions (si c’est déjà traité dans ton modèle) :
- Comment gères-tu les restrictions sur les actions ? (cadenas rouge, liseré rouge, coût à piocher avec nombre fixe ou avec X+)
- Comment gères-tu cartes liées par des numéros cachés, des modificateurs (drapeaux souvent dépendant d’une carte possédée en Main ou dans la Besace), ou même des pioches de carte suite à une énigme sans mécanisme déterminé ?

Enfin, outre l’intérêt de la modélisation, quelles fonctionnalités facilement accessibles prévois-tu de mettre en place pour exploiter la richesse de ton graph ?

Phoenixeux dit :Aaaah ! Ca commence à ressembler à un truc compréhensible par un simple futur-utilisateur !
2 questions (si c'est déjà traité dans ton modèle) :
- Comment gères-tu les restrictions sur les actions ? (cadenas rouge, liseré rouge, coût à piocher avec nombre fixe ou avec X+)
Je rajoute simplement des contraintes (des liens ou des attributs) mais pour simplifier, je vais également les mettre en attributs du nœud correspondant à l'action pour pouvoir faire le rendu directement à partir des attributs du nœud.
- Comment gères-tu cartes liées par des numéros cachés, des modificateurs (drapeaux souvent dépendant d'une carte possédée en Main ou dans la Besace), ou même des pioches de carte suite à une énigme sans mécanisme déterminé ?
Je rajoute des liens et pour la carte 008 du P&P, tu peux voir que j'ai fait un schéma (27 à 31 secondes sur la vidéo ci-dessus) qui permet de relier les noeuds cf cartes P1 et P10 qui sont les carte 001 et 008 du P&P (lien :HIDDEN puis :REPLACE).


Pour le radeau, c'est un peu plus complexe, je montre que la carte P38 (radeau) influence (liens :IF :THEN) la carte P9 (007)
Default

Pour la carte 016, toujours pareil, il suffit de créer un lien de type :ENIGME entre les cartes concernées
Default

Enfin, outre l'intérêt de la modélisation, quelles fonctionnalités facilement accessibles prévois-tu de mettre en place pour exploiter la richesse de ton graph ?

Je vais voir, sûrement rendre les type de liens plus explicites, représenter graphiquement les actions de manière automatique. Et après, je vais voir comment faire pour enrichir les requêtes possibles (chemin de la carte X à Y). Tout le problème étant de simplifier le graph tout en répondant à des questions complexes car le graph complet est assez indigeste. S'il y a des suggestions de questions intéressantes à représenter, je suis toute ouïe.
Pour l'instant, je pense à trois représentations :
- Une représentation "carte physique" qui montre toutes les interactions (en gros de trois type : Build pour contruire, Action pour une action, et Effect pour un effet de carte)
- Une réprésentation "interactions locales" pour les cartes exploration : comme ce qui est représenté sur la vidéo ci-dessus
- Une représentation "carte" pour une représentation du continent mais pour ça, j'ai des soucis de positionnement de nœuds non encore résolus.

Une représentation simple du graph complet juste pour le P&P, histoire montrer que sans filtre, c'est un peu incompréhensible :


Alors qu'un peu mieux filtré, c'est déjà moins brouillon :

(Au passage, ça montre le niveau de connectivité du graph qui est déjà ultra dense sur seulement le P&P !)

Merci pour tes explications claires (pour peu qu’on s’y connaisse un peu de logique informatique et/ou mathématique).
Ton travail est remarquablement structuré pour selon que tu sembles développer en itération, un problème après l’autre. C’est d’ailleurs pour ça que je t’ai posé la question de la finalité, des fois que l’exploitation du graph demande d’anticiper plus en amont le découpage attributs/liens/etc…
 

Eolindel dit : S’il y a des suggestions de questions intéressantes à représenter, je suis toute ouïe.

Pour l’instant, je pense à trois représentations :
- Une représentation “carte physique” qui montre toutes les interactions (en gros de trois type : Build pour contruire, Action pour une action, et Effect pour un effet de carte)
- Une réprésentation “interactions locales” pour les cartes exploration : comme ce qui est représenté sur la vidéo ci-dessus
- Une représentation “carte” pour une représentation du continent mais pour ça, j’ai des soucis de positionnement de nœuds non encore résolus.

Je ne suis pas tout à fait sûr de bien saisir les “vues” que tu proposes. J’attendrai ta 2ème vidéo. :wink:

Quelques questions d’utilisateur :
- Quel est le parcours le moins coûteux de AAA vers BBB, en considérant que j’ai crafté des raquettes pour la neige ?
- Quel est le parcours le moins risqué de AAA vers BBB (c’est à dire en minimisant la distance d’un point de Chasse) ?
- Pour un parcours de AAA vers BBB, indique-moi le nombre d’évènements aléatoires minimum (carte Exploration) et la moyenne de coût d’énergie imposé par ces évènements ?
- Affiche-moi les objets liés à la quête X et les terrains/Evènements associés le cas échéant.

C’est du vrac. Je me doute que c’est pas forcément judicieux. Mais c’est un premier jet, façon méthode itérative. ^^

Phoenixeux dit :Quelques questions d'utilisateur :

1 Quel est le parcours le moins coûteux de AAA vers BBB, en considérant que j'ai crafté des raquettes pour la neige ?
2 Quel est le parcours le moins risqué de AAA vers BBB (c'est à dire en minimisant la distance d'un point de Chasse) ?
3 Pour un parcours de AAA vers BBB, indique-moi le nombre d'évènements aléatoires minimum (carte Exploration) et la moyenne de coût d'énergie imposé par ces évènements ?
4 Affiche-moi les objets liés à la quête X et les terrains/Evènements associés le cas échéant.

1 ça doit être faisable même s'il faut être un peu malin je pense.
2 ça ce sera plus dur à faire, la notion de moins risqué étant assez complexe à définir.
3 ça ça devrait être facile
4 ça aussi je pense mais idem, si j'ai bien compris la quête peut débloquer un ensemble de terrains/cartes donc à priori toucher pas mal de cartes.

Je suis en train de refaire le système pour pouvoir simplifier les requêtes en dupliquant l'information  en mettant aussi en propriété les liens simples concernant les actions/constructions et effets. (nombre de cartes à tirer, type d'action, nombre de succès au minimum).

Mais pour le moment, je ré-écrit mon code pour qu'il soit un peu plus clair et me permette de faire des trucs qui ne marchent pas encore et ensuite je vais m'attaquer aux trois "vues" sus-citées. Il va surtout falloir que je travaille sur les cartes objets et actions pour lesquelles je n'ai pas encore trop géré l'affichage.

 

Très sympa ce projet je suis ça de loin :slight_smile:

Vu que j’ai reçu le jeu hier, j’ai pu commencer à faire la cartographie du jeu complet. J’en suis à une trentaine de carte répertoriées en environ 3h. Forcément, ça m’a pris beaucoup plus de temps pour amorcer la machine. Je pense que ça va me prendre 2 à 3 minutes en temps de croisière par carte.

J’ai traité uniquement les cartes aventure et exploration correspondant à ma partie en cours pour le moment. Je vais procéder comme ça jusqu’à avoir exploré au maximum le 7ème continent en jouant.

Spécialement pour toi, considère que tu possèdes la carte suivante dans ta besace :
 

Topographe

A chaque fois que vous relevez complètement une carte du jeu dans votre système de cartographie futuriste, vous pouvez entreprendre l’action suivante :

[Cadenas] [Action Observer] 1/0 :
Choisissez une carte de la défausse et mélangez-là dans votre deck d’Action.

Pour réaliser le suivi exact des cartes que tu as déjà relevées ou non, n’oublie pas la liste des cartes avec ID qui est téléchargeable sur le site officiel. :slight_smile:

C’est déjà plus ou moins ce que je fais. Mais je tiens à jour une liste des cartes déjà traitées.

Deuxième session, j’avance doucement, pour l’instant, j’en suis à 8,6 % des cartes répertoriées (mais répertorier les 001 fait vite avancer le compteur à moindre coût)). J’ai encore de petites modifications à faire à mon code pour améliorer les choses, mais je n’ai pas vu de grosses difficultés sur les cartes déjà répertoriées liées à des instructions trop difficiles à transcrire avec mon système.

La liste des cartes répertoriées est en tête du sujet.

Troisième session, le rendu de la carte totale commence à faire pleurer mon ordinateur.

Pour ceux qui avaient des doutes, le réseau est quand même archi bien maillé avec une structure complètement non linéaire.

J’en suis à 11,2% des cartes répertoriées.

11,2% et l’ordi couine ? Du genre prêt à planter après un ralentissement de 3h50 ? Ou juste un freeze qui choque la fluidité habituelle ? Ce serait dû aux images ou aux boucles dans ton code ?

En tout cas, ça donne plutôt bien ! (si tu as l’image HD sans refaire le rendu, je veux bien le lien)

2 remarques :
- A quoi correspondent les couleurs des cartes brunes ou rouges ?
- Un exemple de rendu possiblement intéressant : peux-tu afficher uniquement les cartes Terrain positionnées orthogonalement avec leur position réciproque (Nord/Sud/Est/Ouest) ?

Du genre ça a ralenti au moment du lancement mais avec mon ordi pas mal sollicité à côté et au final ça le fait. C’est une des forces de vivagraph.js : le moteur est plus rapide que D3.js et encore, il y a une option webgl mais je reste en svg que je maîtrise beaucoup plus pour la personnalisation du rendu.

Pour les couleurs, le marron qui tire sur l’orange (#aa4400) c’est les terrains, le marron “caca” (#a2786f) c’est les événements permanents et le jaune moutarde (#cbad39) c’est les événements temporaires. C’est pas très chouette mais c’était juste pour voir.

Pour le positionnement, je n’ai pas encore de solution pour forcer le positionnement relatif, j’aimerai bien le faire, mais si c’est le cas, il y aura des limitations avec les cartes multiples ayant le même numéro. Et je peux difficilement positionner de manière absolue toutes les cartes. J’ai fait des tentatives mais qui ne donnent rien pour le moment.


Pour l’image :
http://eolindel.free.fr/images/7th%20Continent_full.svg à enregistrer, chez moi firefox ne rend pas bien l’image du tout.

http://eolindel.free.fr/images/7th%20Continent_full.pdf le pdf qui est pas aussi joli que le rendu de base avec vivagraph et qui n’est pas dynamique mais qui donne une bonne idée de l’image

Mais l’image ne représente qu’un petit sous-ensemble des données il y pour l’instant 1400 noeuds avec 4900 attributs et 1800 relations entre ces noeuds qui sont de 24 types différents.

Je n’ai pas trop eu le temps de jouer cette semaine mais j’ai un peu avancé sur les cartes actions ce qui fait que j’en suis à 200 cartes tout pile répertoriées et donc 14,76% du jeu traité. J’espère pouvoir finir les cartes compétences de personnage et action dans le week-end mais c’est ambitieux.

Je mets à jour la liste des cartes dans le premier post.

Eolindel dit :[...] 1800 relations entre ces noeuds qui sont de 24 types différents.

C'est justement ce que j'étais en train de me demander : le nombre de types de relation.
Alimenter ton système demande d'être super attentif sur le type de lien utilisé, d'être suffisamment précis dans leur dénomination et de les appliquer à bon escient, tout ça sans pour autant multiplier à tout va des nouveaux types car les requêtes futures seront d'autant plus complexes à composer...

Par exemple, j'ai vu des liens de type [... HAS ...] (avoir/posséder en français).
Une carte possède une ressource (basique ou secondaire comme les algues ou les tombes, ce qui est déjà une distinction potentiellement embêtante). Mais dans le système, on a aussi vite fait d'utiliser un lien avec ce nom pour plein d'autres usages.

24 types me parait plutôt un bon équilibre (à la louche), ce qui est de bon augure pour tes choix... sauf si tu multiplies les usages pas assez finement. no
Merci pour l'image et bon courage pour ta session du week-end !

Forcément, la manière de symboliser les choses ne permet pas toujours de retranscrire les effets sous forme de graphe. Par exemple, pour le craft, le fait que s’il y a du bois ce soit -1 ou de l’os -2, c’est deux choses en parallèle alors que ça devrait être deux trucs linéaires.

DefaultIci, on ne sait pas si c’est la liane ou le bambou qui font le -3 par exemple, mais pour l’instant, je n’ai pas trouvé de manière simple de rendre les choses et je préfère être légèrement imprécis. Pareil, les SP ont été suffisamment inventifs pour que rendre compte de certains textes compliqués soit très difficile sous forme schématisée.

Du coup, je pense que je manque 5 à 10 % des détails mais il sera toujours possible d’améliorer les choses plus tard.

Après, les différents types de relations utilisés sont les suivants :

Links.push({‘hid’:‘ACTION’,‘properties’:{‘fr’:“Action”,‘en’:“Action”}});
Links.push({‘hid’:‘ACTION_TYPE_IS’,‘properties’:{‘fr’:“Type d’action”,‘en’:“Type of action”}});
Links.push({‘hid’:‘BUILD’,‘properties’:{‘fr’:“Construire”,‘en’:“Construire”}});
Links.push({‘hid’:‘CARD_NUMBER_IS’,‘properties’:{‘fr’:“Numéro de carte”,‘en’:“Card number”}});
Links.push({‘hid’:‘CARD_TRAIT_IS’,‘properties’:{‘fr’:“Facette de la carte”,‘en’:“Trait of card”}});
Links.push({‘hid’:‘CARD_TYPE_IS’,‘properties’:{‘fr’:“Type de carte”,‘en’:“Type of card”}});
Links.push({‘hid’:‘COMES_FROM’,‘properties’:{‘fr’:“Viens de”,‘en’:“Comes from”}});
Links.push({‘hid’:‘CONSTRAINT’,‘properties’:{‘fr’:“Contrainte”,‘en’:“Constraint”}});
Links.push({‘hid’:‘BANISH’,‘properties’:{‘fr’:‘Bannir et mettre une carte jaune de même numéro’,‘en’:‘Banish and put golden card’}});
Links.push({‘hid’:‘ENIGMA’,‘properties’:{‘fr’:“Énigme”,‘en’:“Enigma”}});
Links.push({‘hid’:‘FAILURE’,‘properties’:{‘fr’:“En cas d’échec”,‘en’:“If failure”}});
Links.push({‘hid’:‘HAS’,‘properties’:{‘fr’:“a la resource”,‘en’:“has the resource”}});
Links.push({‘hid’:‘HIDDEN’,‘properties’:{‘fr’:“Carte cachée”,‘en’:“Hidden card”}});
Links.push({‘hid’:‘IF’,‘properties’:{‘fr’:“Si”,‘en’:“If”}});
Links.push({‘hid’:“MOVE_TOGETHER”,‘properties’:{‘fr’:‘Aller collectivement’,‘en’:‘Go together’}});
Links.push({‘hid’:“MOVE”,‘properties’:{‘fr’:‘Mouvement’,‘en’:‘Movement’}});
Links.push({‘hid’:“MODIFIES”,‘properties’:{‘fr’:‘Changé par’,‘en’:‘Modified by’}});
Links.push({‘hid’:‘NB_CARDS’,‘properties’:{‘fr’:“Nombre de carte à prendre”,‘en’:“Number of cards to pick”}});
Links.push({‘hid’:‘NB_SUCCESS’,‘properties’:{‘fr’:“Nombre de succès à avoir”,‘en’:“Number of stars to get”}});
Links.push({‘hid’:‘PICK’,‘properties’:{‘fr’:“Prendre la carte”,‘en’:“Pick the card”}});
Links.push({‘hid’:‘PLACE’,‘properties’:{‘fr’:“Mettre la carte en jeu”,‘en’:“Place the card”}});
Links.push({‘hid’:‘POSITION’,‘properties’:{‘fr’:“Position”,‘en’:“Position”}});
Links.push({‘hid’:‘REPLACE’,‘properties’:{‘fr’:“Remplacer par une carte de même chiffre”,‘en’:“Replace by same number”}});
Links.push({‘hid’:‘REPLACE_BY’,‘properties’:{‘fr’:“Remplacer par la carte”,‘en’:“Replace by the card”}});
//Links.push({‘type’:‘RESOLVE’,‘properties’:{‘fr’:“Résoudre une carte exploration”,‘en’:“Resolve exploration card”}});
Links.push({‘hid’:‘SUCCESS’,‘properties’:{‘fr’:“En cas de succès”,‘en’:“If success”}});
Links.push({‘hid’:‘THEN’,‘properties’:{‘fr’:“Alors”,‘en’:“Then”}});
Links.push({‘hid’:‘TRIGGER’,‘properties’:{‘fr’:“Déclenche”,‘en’:“Triggers”}});
Links.push({‘hid’:‘USE’,‘properties’:{‘fr’:“Utiliser”,‘en’:“Use”}});
Links.push({‘hid’:‘ZONE_IS’,‘properties’:{‘fr’:“Zone correspondante”,‘en’:“Corresponding zone”}});

Je ne sais pas si tu connais l’UML (Langage de Modélisation Unifié) ni si son fonctionnement est reproductible dans ton système, mais intuitivement, pour les relations Objet-à-crafter et Ressource, je verrai un lien de dépendance comme ceci :


A un Objet donné, la Ressource fournie une Réduction de telle valeur.
Et on aurait ainsi pour une Ressource, tous les liens vers les Objets avec les Réductions associées.