nicmarti

map-generator

Génère des prompts enrichis pour cartes 2D fantasy avec validation world-keeper. Permet de créer des cartes de villes, régions, donjons et combats tactiques cohérents avec l'univers BFRPG.

nicmarti 24 3 Updated 4mo ago
GitHub

Install

npx skillscat add nicmarti/skills-weaver/map-generator

Install via the SkillsCat registry.

SKILL.md

Map Generator - Générateur de Cartes

Description

Génère des prompts enrichis pour cartes 2D fantasy avec validation world-keeper. Permet de créer des cartes de villes, régions, donjons et combats tactiques cohérents avec l'univers BFRPG.

Usage

Cette skill permet à Claude de créer des prompts de cartes géographiques cohérentes avec l'univers établi, en validant les noms de lieux et en appliquant les styles architecturaux appropriés pour chaque royaume.

Commands

# Générer un prompt de carte
sw-map generate <type> <name> [options]

# Valider un lieu
sw-map validate <name> [options]

# Lister les ressources
sw-map list [category]

# Afficher les types de cartes
sw-map types

Types de Cartes

City (Carte de Ville)

Vue aérienne détaillée d'une ville avec quartiers, POIs et infrastructure.

Options:

  • --scale: small, medium (défaut), large
  • --features: POIs additionnels (séparés par virgules)
  • --style: illustrated (défaut), dark_fantasy

Exemple:

sw-map generate city Cordova --features="Villa de Valorian"

Region (Carte Régionale)

Carte bird's eye view montrant multiple settlements, routes et terrain.

Options:

  • --scale: small, medium, large (défaut)
  • --terrain: Override du type de terrain

Exemple:

sw-map generate region "Côte Occidentale" --scale=large

Dungeon (Plan de Donjon)

Plan top-down avec salles, couloirs, pièges et grille.

Options:

  • --level: Niveau du donjon (1, 2, 3, etc.)
  • --features: Salles spéciales (séparées par virgules)

Exemple:

sw-map generate dungeon "La Crypte des Ombres" --level=1 --features="Salle du trône,Crypte"

Tactical (Carte Tactique)

Grille de combat avec terrain, couverture et élévation.

Options:

  • --terrain: forêt, montagne, plaine, marais, etc.
  • --scene: Description de la scène de combat
  • --features: Éléments spéciaux (ruisseau, pont, etc.)

Exemple:

sw-map generate tactical "Embuscade" --terrain=forêt --scene="Combat en forêt dense" --features="Ruisseau,Pont"

Options Communes

--kingdom=

Valide que le lieu appartient au royaume spécifié.

Royaumes valides: valdorine, karvath, lumenciel, astrene

--style=<style></h3> <p>Style visuel de la carte.</p> <p>Styles: illustrated (défaut), dark_fantasy</p> <h3>--output=<file></h3> <p>Sauvegarde le prompt dans un fichier JSON spécifique.</p> <h3>--dry-run</h3> <p>Prévisualise le prompt de base sans appeler l&#39;API Claude.</p> <h3>--generate-image</h3> <p>Génère aussi l&#39;image via fal.ai flux-2 (nécessite FAL_KEY).</p> <h3>--image-size=<size></h3> <p>Taille de l&#39;image générée.</p> <p>Tailles: square_hd, landscape_16_9 (défaut), portrait_16_9</p> <h3>--no-cache</h3> <p>Force la régénération du prompt en ignorant le cache.</p> <h2>Validation de Lieux</h2> <pre><code class="language-bash" data-language="bash"># Valider un lieu existant sw-map validate Cordova # Valider avec royaume attendu sw-map validate &quot;Port-Nouveau&quot; --kingdom=valdorine # Obtenir des suggestions si le lieu n&#39;existe pas sw-map validate &quot;Cordov&quot; --suggest</code></pre><h2>Lister les Ressources</h2> <pre><code class="language-bash" data-language="bash"># Types de cartes disponibles sw-map list types # Royaumes disponibles sw-map list kingdoms # Tous les lieux documentés sw-map list locations # Cités seulement sw-map list cities # Cités d&#39;un royaume spécifique sw-map list cities --kingdom=valdorine</code></pre><h2>Styles Architecturaux par Royaume</h2> <h3>Valdorine</h3> <ul> <li>Style: Maritime, influences italiennes</li> <li>Couleurs: Bleu et or</li> <li>Architecture: Ports, toits en tuiles colorées</li> </ul> <h3>Karvath</h3> <ul> <li>Style: Militariste, influences germaniques</li> <li>Couleurs: Rouge et noir</li> <li>Architecture: Forteresses, murailles épaisses</li> </ul> <h3>Lumenciel</h3> <ul> <li>Style: Religieux, influences latines</li> <li>Couleurs: Blanc et or</li> <li>Architecture: Cathédrales, monastères</li> </ul> <h3>Astrène</h3> <ul> <li>Style: Mélancolique, influences nordiques</li> <li>Couleurs: Gris et argent</li> <li>Architecture: Pierre météorisée, simplicité</li> </ul> <h2>Cache et Performance</h2> <p>Les prompts enrichis sont automatiquement mis en cache dans:</p> <pre><code class="language-plaintext" data-language="plaintext">data/maps/&lt;nom&gt;_&lt;type&gt;_&lt;scale&gt;_prompt.json</code></pre><p>Le cache réduit significativement les appels API. Utilisez <code>--no-cache</code> pour forcer la régénération.</p> <h2>Génération d&#39;Images</h2> <p>Avec <code>--generate-image</code>, la skill génère aussi l&#39;image via fal.ai:</p> <pre><code class="language-bash" data-language="bash">sw-map generate city Cordova --generate-image --image-size=landscape_16_9</code></pre><p>Images sauvegardées dans:</p> <pre><code class="language-plaintext" data-language="plaintext">data/maps/&lt;nom&gt;_&lt;type&gt;_&lt;scale&gt;_&lt;model&gt;.png</code></pre><p>Modèle utilisé: <code>fal-ai/flux-2</code> (haute qualité pour cartes détaillées)</p> <h2>Prérequis</h2> <ul> <li><strong>ANTHROPIC_API_KEY</strong>: Requis pour enrichissement AI (Claude Haiku 3.5)</li> <li><strong>FAL_KEY</strong>: Requis pour génération d&#39;images (optionnel)</li> </ul> <h2>Exemples d&#39;Utilisation</h2> <h3>Workflow Typique: Carte de Ville</h3> <pre><code class="language-bash" data-language="bash"># 1. Valider que le lieu existe sw-map validate Cordova # 2. Générer le prompt (avec cache) sw-map generate city Cordova --features=&quot;Taverne du Voile Écarlate,Docks&quot; # 3. Générer l&#39;image sw-map generate city Cordova --generate-image</code></pre><h3>Workflow: Plan de Donjon</h3> <pre><code class="language-bash" data-language="bash"># 1. Générer prompt niveau 1 sw-map generate dungeon &quot;La Crypte des Ombres&quot; --level=1 --dry-run # 2. Générer avec image sw-map generate dungeon &quot;La Crypte des Ombres&quot; --level=1 --generate-image</code></pre><h3>Workflow: Carte Tactique</h3> <pre><code class="language-bash" data-language="bash"># 1. Générer avec scène sw-map generate tactical &quot;Embuscade&quot; \ --terrain=forêt \ --scene=&quot;Combat contre des bandits en forêt dense&quot; \ --features=&quot;Ruisseau,Pont de bois,Rochers&quot; \ --generate-image --image-size=square_hd</code></pre><h2>Intégration avec Agents</h2> <h3>dungeon-master</h3> <p>Le dungeon-master peut invoquer cette skill pour:</p> <ul> <li>Créer des cartes de lieux visités</li> <li>Illustrer des donjons explorés</li> <li>Générer des cartes tactiques pour combats importants</li> </ul> <h3>world-keeper</h3> <p>Le world-keeper valide automatiquement:</p> <ul> <li>Existence des lieux dans geography.json</li> <li>Cohérence des noms avec les conventions du royaume</li> <li>Styles architecturaux appropriés</li> </ul> <h2>Formats de Sortie</h2> <h3>Prompt JSON</h3> <pre><code class="language-json" data-language="json">{ &quot;prompt&quot;: &quot;Cette carte montre la ville portuaire de Cordova...&quot;, &quot;map_type&quot;: &quot;city&quot;, &quot;location_name&quot;: &quot;Cordova&quot;, &quot;kingdom&quot;: &quot;valdorine&quot;, &quot;features&quot;: [&quot;Taverne du Voile Écarlate&quot;], &quot;style_hints&quot;: &quot;aerial view, maritime Italian style, blue/gold colors&quot;, &quot;enriched_at&quot;: &quot;2025-01-15T10:30:00Z&quot; }</code></pre><h3>Métadonnées Image</h3> <ul> <li>URL: Lien temporaire fal.ai</li> <li>LocalPath: Chemin fichier local</li> <li>Dimensions: Largeur x hauteur</li> <li>Prompt: Prompt utilisé</li> </ul> <h2>Notes d&#39;Implémentation</h2> <ul> <li><strong>Validation automatique</strong>: Tous les noms de lieux sont vérifiés contre geography.json</li> <li><strong>Fuzzy matching</strong>: Suggestions basées sur similarité Levenshtein</li> <li><strong>Enrichissement AI</strong>: Claude Haiku 3.5 enrichit les prompts de base avec détails visuels</li> <li><strong>Guidelines</strong>: 400+ lignes de directives pour prompts optimaux</li> <li><strong>Longueur cible</strong>: 100-200 mots (sweet spot: 150)</li> </ul> <h2>Troubleshooting</h2> <h3>Lieu non trouvé</h3> <pre><code class="language-bash" data-language="bash">✗ Lieu &quot;Cordov&quot; non trouvé dans geography.json Vouliez-vous dire ? - Cordova (Valdorine) - Port-de-Lune (Valdorine)</code></pre><p><strong>Solution</strong>: Utilisez <code>--suggest</code> pour voir les suggestions complètes.</p> <h3>API Key manquante</h3> <pre><code class="language-plaintext" data-language="plaintext">Error: creating enricher: ANTHROPIC_API_KEY environment variable not set</code></pre><p><strong>Solution</strong>: Définissez <code>export ANTHROPIC_API_KEY=&quot;votre_clé&quot;</code></p> <h3>Prompt trop court/long</h3> <p>Le système valide automatiquement que les prompts font 80-250 mots et régénère si nécessaire.</p> <h2>Voir Aussi</h2> <ul> <li><strong>image-generator</strong>: Génération d&#39;illustrations fantasy</li> <li><strong>name-location-generator</strong>: Génération de noms de lieux cohérents</li> <li><strong>world-keeper</strong>: Agent de cohérence géographique</li> </ul>