Outils pratiques by Crayona

Avatar de l’utilisateur
Llaria
Messages : 6707
Inscription : 05 juin 2017, 18:20

Outils pratiques by Crayona

Message par Llaria »

1.outil pour manipuler les IDs des objets 3d
2.outils et processus des cartes 2D
3. outil pour supprimer les lumières erronées ("bad lights")
4. outil pour copier des régions rectangulaires


Crayona a écrit :J'ai créé un script simple pour changer les numéros des objets dans une carte, disponible dans el-misc-tools à github: elm-change-object-id.py

Un exemple d'utilisation:

Code : Tout sélectionner

$ cd dossier_de_donnees/maps
$ elm-change-object-id.py -d 1_trepont.elm.gz | less
(trouver l'objet à changer)
$ elm-change-object-id.py 1_trepont.elm.gz -o 63 -n 200
mesh 63:{"./3dobjects/house2.e3d" @ 74,154 [37.23,77.23,0.00] b=0} set to ID 200
  swapped with mesh 200:{"./3dobjects/road3.e3d" @ 35,68 [17.51,34.18,0.02] b=0}
created backup copy dossier_de_donnees/maps/1_trepont.elm.gz-20141221_204458.bak
wrote dossier_de_données/maps/1_trepont.elm.gz
Les objets dans un fichier elm sont mis dans un tableau linéaire; la position d'un objet dans le tableau est son numéro d'identification (ID). Donc pour changer le ID d'un objet le script échange la position de l'objet actuelle avec la position d'un autre objet. Si le nouveau ID dépasse le nombre total des objets dans le tableau, des objets factices (qui ne seront pas affichés par le client) sont ajoutés pour remplir les éspaces.
N'hésitez pas à m'envoyer un MP si vous avez des projets, des questions ou autre.
Merci de ne pas envoyer de MP à Llariarith ;) la réponse risque fort de tarder.

Avatar de l’utilisateur
Llaria
Messages : 6707
Inscription : 05 juin 2017, 18:20

Re: Outils pratiques by Crayona

Message par Llaria »

Crayona a écrit :Les scripts utilisés pour la création automatique des cartes 2D sont disponibles sur github: le-2d-map-pack

J'ai aussi mis en ligne les images de base nécessaires: base_images-le184_20140525.tar.xz (14.20 Mo)

Les scripts qui génèrent les images ont besoin de:
  • bash, awk, sed, bc
  • Perl
  • ImageMagick
  • elm2pov.pl
  • elmhdr
  • elm-draw-tiles
  • elm-render-notes
Ces quatres derniers se trouvent dans el-misc-tools.

Pour faciliter la modification des marques, j'ai créé un logiciel, elm-annotate, également disponible dans el-misc-tools.

Finalement il faut gimp (je conseille la version 2.8) pour les images de base, et surtout les continents.
Crayona a écrit :En faisant cette collection de logiciels je voulais remplir certains besoins:
  • Que les cartes 2D soient facilement mise à jour lorsque les cartes 3D changent.
  • Que toute erreur trouvée soit facilement corrigée.
  • Que les données nécessaires saisies par les humains soient minimisées et non répétées.
  • Que toute action répétitive soit automatisée, et que l'automation ne refasse que le nécessaire touché par les changements.
  • Que le système soit facilement adapté aux nouvelles idées.
En tenant compte de ceci les composants sont faits de façon modulaire et chacun n'est pas très compliqué en lui-même. Les données sont transmises de l'un à l'autre; voici un schéma approximatif du flux:
Image

Le script regenerate_all.sh dirige la création et régénération des cartes 2D, continents, et la légende, une fois que les images PNG de base existent. Le fichier input_maps.txt liste les cartes 3D à traiter, et leurs options de rendu.

Il faut que le dossier des cartes 3D soit accessible; on peut modifier la variable map_dir dans les scripts, mais c'est probablement plus commode de créer un symlink dans le dossier où on les exécute:

Code : Tout sélectionner

$ ln -s ton_dossier_des_données_du_jeu/maps maps
Plus de détails dans la suite.

Crayona a écrit :Les images de base paper.xcf, grid.xcf, et legend_paper.xcf ont été faites avec gimp.

Faire des jolis graphismes est difficile, surtout si l'on n'a pas eu la formation requise. Pour la création de l'image du papier, j'ai suivi les instructions fournies dans ce tutoriel "How To Create An Old Paper Texture In Gimp 2.8" [anglais] par johnnybevo.

Pour la bordure et quadrillage j'ai adapté des techniques du tutorial "Making Map Borders in GIMP" [anglais] par Arsheesh, trouvé sur le site excellent Cartographers' Guild [anglais]. Je le conseille vivement si vous vous intéressez à la création de cartes et le design graphique.

Les images saisies paper.png, grid.png, et legend_paper.png ont été créées avec la fonction exporter (export) de gimp.

Crayona a écrit :Le logiciel elm-render-notes lit les marques créées avec elm-annotate et en fait une image des étiquettes fantasie pour les cartes finales.

La compilation nécessite Pango et Cairo:

Code : Tout sélectionner

$ cd el-misc-tools/elm-render-notes
$ make
$ cp elm-render-notes /usr/local/bin   # ou où vous voulez
$ chmod a+rx /usr/local/bin/elm-render-notes
Les fichiers de marques (1_illumen-notes.txt par exemple) sont des fichiers texte UTF-8. Je voulais qu'ils soient aussi facile à éditer avec un éditeur texte qu'avec elm-annotate, et souvent un éditeur suffit pour les petits changements si l'on connaît les coordonnées particulières.

La police utilisée est Black Chancery, trouvée sur le site utile dafont. (Aussi à jeter un œil, si ce genre de chose vous intéresse.)

Chaque ligne dans un fichier de marques est de la forme:

Code : Tout sélectionner

X,Y SYMBOLE
X,Y sont les coordonnées des cases marchables comme utilisées dans le jeu. SYMBOLE peut être "=" et le titre de la carte, ou "." et un nom d'un trait géographique, ou ">" et le nom abérgé d'une carte accesible de là, ou finalement une lettre qui correspond à un cercle coloré:

Code : Tout sélectionner

  w - blanc  - temples
  l - rouge  - vendeurs de livres
  o - orange - tavernes
  r - jaune  - magie et runes
  m - vert   - magasins centraux
  t - cyan   - portails
  f - violet - forgerons
  p - rose   - herboristes
  d - brun   - dépôts
  a - gris   - apothicaires
L'option -n sur la ligne de commande décrit également le format, et l'option -l affiche la liste des abréviations possibles.
Crayona a écrit :Le plus exigeant c'est la création des cartes de continents. Malheureusement les cartes 3D actuelles ne s'emboîtent pas exactement, et parfois pas du tout, ce qui nécessite beaucoup de réglage à la main pour faire l'image finale. Les étapes en gros:
  1. Redimensionner les cartes 2D rendues render_map-*.png avec make_continent_parts.sh produisant les pièces part-*.png.
  2. Importer les pièces dans gimp (Open as Layers) comme un group des couches nommé parts (parts-*.xcf).
  3. Positionner les pièces.
  4. Créer le fond d'eau.
  5. Combler les éspaces entre les régions (couche fill).
  6. Retoucher les bords, chemins, etc. (couche fix).
  7. Lancer gimp-export-elm-bounds-fr.py (via Filters/Utility/Export ELM...).
  8. Mettre à jour les coordonnées d'encadrements dans mapinfo.lst avec update_mapinfo_lst.pl.
  9. Fusionner les pièces et l'eau et ajouter la bordure et texture de papier (merged-*.xcf).
  10. Exporter l'image comme merged-*.png.
  11. Créer les marques avec elm-annotate. (Les coordonnées sont de 0 à 1023, +x = est, +y = nord.)
  12. Et finalement lancer regenerate_all.sh pour compléter la carte finale.
Pour installer le script gimp-export-elm-bounds-fr.py comme un plugin de gimp, mettez-le dans ~/.gimp-2.8/plug-ins et changez les permissions pour que le fichier soit exécutable (chmod u+x).


Voilà, maintenant vous devriez avoir la plupart des connaissances requises pour créer vous-mêmes la collection des cartes 2D si jamais besoin. Je sais que j'avais passé un peu rapidement sur quelques détails, si vous avez des questions, ou quelque chose ne fonctionne pas, ou vous avez des idées pour améliorer le processus, n'hésitez pas à laisser un message dans ce fil.
N'hésitez pas à m'envoyer un MP si vous avez des projets, des questions ou autre.
Merci de ne pas envoyer de MP à Llariarith ;) la réponse risque fort de tarder.

Avatar de l’utilisateur
Llaria
Messages : 6707
Inscription : 05 juin 2017, 18:20

Re: Outils pratiques by Crayona

Message par Llaria »

Crayona a écrit :Voici un script python3 pour trouver et supprimer toutes les lumières non valables dans une carte: elm-remove-bad-lights.py

Exemple d'utilisation:

Code : Tout sélectionner

$ cd données_du_jeu/maps
$ elm-remove-bad-lights.py -l 2_fenegor.elm.gz
(liste des lumières eronées)
$ elm-remove-bad-lights.py 2_fenegor.elm.gz
2_fenegor.elm.gz: removed 7 bad lights
2_fenegor.elm.gz: backup saved to 2_fenegor.elm.gz-20140406_164215.bak
$ elm-remove-bad-lights.py *.elm.gz
(etc.)
Par défaut une sauvegarde est créée si quelque chose est modifiée, cette fonction peut être désactivée avec l'option -N.

Une lumière est "erronée" si elle ne se trouve pas dans le pavé droit qui inclut la région rectangulaire de la carte, plus 10 unités à chaque côté et avec 100 unités de hauteur, ou si ses valeurs de couleurs RGB ne sont pas dans l'intervalle (-1, 1000).

En cas de bogues n'hésitez pas de laisser un message dans ce fil ou à github.
N'hésitez pas à m'envoyer un MP si vous avez des projets, des questions ou autre.
Merci de ne pas envoyer de MP à Llariarith ;) la réponse risque fort de tarder.

Avatar de l’utilisateur
Llaria
Messages : 6707
Inscription : 05 juin 2017, 18:20

Re: Outils pratiques by Crayona

Message par Llaria »

Crayona a écrit :Voici un petit outil qui peut copier tout objet, terrain, nivelage, etc., d'une région rectangulaire d'une carte, à une autre carte (ou bien la même).

el-copy-map.py

Il faut python 3 pour pouvoir le lancer.

Un exemple:

Code : Tout sélectionner

$ cd maps
$ cp 1_grottes.elm.gz copy_test.elm.gz
$ el-copy-map.py 1_grottes.elm.gz -s 0,0,120,120 copy_test.elm.gz -d 120,0
$ cd ..
$ ./mapedit.x86.linux.bin
(regardez copy_test.elm.gz dans l'éditeur)
Pour le moment ce n'est pas très sophistiqué, mais il devrais respecter les codes numeriques des objets au moins. Si vous trouvez des erreurs ou si vous auriez des idées sur comment l'améliorer, ne hésitez pas de laisser un message dans ce fil ou à github.

zacard a écrit :Bravo et surtout merci!

Outil très efficace d'après mes premiers tests! Pour les non initiés je précise:

On met le petit fichier qui va bien "el-copy-map.py" dans le dossier maps
./el-copy-map.py cartesource.elm.gz -s xmin,ymin,xmax,ymax cartedestination.elm.gz -d xmin,ymin
xmin, ymin=coin inférieur gauche de la zone à copier( ou d'insertion)...xmax,ymax le coin supérieur droit
Pour copier une partie de carte sur la même carte : cartesource.elm.gz sera également cartedestination.elm.gz


Pas de souci de nivelage , pas de souci de modification des IDobjet existants... Chapeau bas!
On notera que le collage de la nouvelle partie de map n’écrase pas l'existant ce qui peut permettre l'insertion d'objets, lumière,etc...

Deux premières suggestions:

Serait il possible de pouvoir saisir plusieurs coordonnées de destination (pour coller/repeter la zone plusieurs fois) sous le format el-copy-map.py [-h] [-s x0,y0,x1,y1] [-d1 x,y] [-d2 x,y] [-d3 x,y] ....?
Est il possible de prévoir une option d’écrasement de la destination?
Crayona a écrit :J'ai fait les changements, il est maintenant possible de mettre l'option -d plusieurs fois, ainsi que supprimer avec l'option -r.
N'hésitez pas à m'envoyer un MP si vous avez des projets, des questions ou autre.
Merci de ne pas envoyer de MP à Llariarith ;) la réponse risque fort de tarder.

Répondre