Code source.
https://github.com/HackTechDev/NetHack_MapEditor
nhmapedit — éditeur de cartes NetHack en mode terminal
Petit éditeur plein écran (Python 3 + curses, sans dépendance externe) pour
créer et modifier les cartes des niveaux spéciaux de NetHack 5.0 / 3.7.
Ces niveaux sont des scripts Lua (dat/*.lua) qui utilisent des.map(),
des.monster(), des.stair()…
Lancement
python3 nhmapedit.py # nouvelle carte 75x19
python3 nhmapedit.py mon_niveau.lua # ouvre (ou crée) un fichier
python3 nhmapedit.py --new 40x12 petit.lua
Il faut un terminal d'au moins 80x24 ; à partir d'environ 105 colonnes, une palette (outils et terrains) s'affiche à droite de la carte. Les cartes plus grandes que l'écran défilent.
Utilisation
Appuyez sur ? dans l'éditeur pour l'aide complète.
| Touche | Action |
|---|---|
Flèches, h j k l |
déplacer le curseur (Maj+flèches, PgPréc/PgSuiv, Début/Fin : rapide) |
. # - \| + S H { \ K } P W L Z I T F A C B x |
choisir ce terrain comme pinceau (et peindre si l'outil est le Pinceau) |
e |
pinceau « roche » (espace) |
1…8 |
outil : Pinceau, Ligne, Rectangle, Rectangle plein, Salle, Remplissage, Copier, Coller |
| Espace / Entrée | appliquer l'outil (outils à deux points : ancre puis tracé ; Échap annule) |
d |
crayon baissé : peint en se déplaçant |
a |
avance automatique après chaque caractère tapé (pratique pour « taper » une carte) |
m |
placer une entité : escalier, échelle, autel, monstre, objet, piège, porte, gravure |
r |
répéter la dernière entité placée sous le curseur |
Suppr, Retour arrière, z |
supprimer les entités sous le curseur |
i |
liste des entités (Entrée : y aller, e : modifier, d : supprimer) |
| Tab | afficher / masquer les entités |
p |
propriétés : taille, level_init, drapeaux, placement (halign/valign ou x,y), éclairage |
v |
vérifier la carte (largeur > 76, entités dans les murs, escaliers en double…) |
t |
tester : copie la carte dans le répertoire du jeu (voir plus bas) |
u / U (ou Ctrl-R) |
annuler / rétablir |
n, o, s, w |
nouveau, ouvrir, enregistrer, enregistrer sous (Tab complète les chemins) |
q |
quitter |
La souris est gérée : clic = déplacer le curseur et appliquer l'outil, glisser = peindre (Pinceau) ou tracer (Rectangle, Ligne, Salle…).
Les listes de monstres et d'objets se filtrent en tapant une partie du nom.
Une lettre seule (d, D…) donne un monstre aléatoire de cette classe, un
symbole seul (!, ?…) un objet aléatoire de cette classe. Les options Lua
supplémentaires se saisissent sous la forme peaceful=1, asleep=1 ou
buc="cursed", spe=2.
Fichiers existants
L'éditeur ouvre n'importe quel niveau de dat/ qui contient un des.map().
Il édite :
des.level_init()etdes.level_flags();- la première carte
des.map()du fichier ; - les entités à coordonnées fixes écrites après cette carte (escaliers, échelles, autels, monstres, objets, pièges, portes, gravures).
Tout le reste du script (régions, boucles, éléments aléatoires, autres
cartes…) est conservé tel quel à l'enregistrement. Un fichier ouvert puis
enregistré sans modification reste identique octet pour octet. Lors du
premier enregistrement, l'original est gardé sous fichier.lua~.
Les coordonnées des entités sont relatives à la carte, comme dans les scripts NetHack.
Tester un niveau dans NetHack
Appuyez sur t : l'éditeur écrit l'état actuel de la carte (même non
enregistré) dans le répertoire de données du jeu, sous le nom
nhme-<nom>.lua. Le préfixe nhme- évite qu'un niveau du jeu portant le
même nom, rangé dans nhdat, soit chargé à la place du vôtre. Ensuite :
- lancez le jeu en mode wizard :
nethack -D; - tapez
#wizloaddes, puis le nom indiqué (par ex.nhme-medusa-1).
Après une modification, appuyez de nouveau sur t et refaites
#wizloaddes, sans relancer le jeu.
Le répertoire du jeu est cherché dans $NHMAPEDIT_HACKDIR, puis
~/nh/install/games/lib/nethackdir, puis ../NetHack-5.0.0/playground.
S'il n'est trouvé dans aucun de ces endroits, l'éditeur le demande.
Pour remplacer un vrai niveau du jeu, mettez le fichier dans dat/ des
sources et recompilez/réinstallez (make install), ou référencez-le dans
dat/dungeon.lua.
Fichiers
nhmapedit.py: l'interface curses.nhlevel.py: le modèle de niveau, la lecture et l'écriture du Lua.gen_data.py: extrait des sources de NetHack les listes de monstres, d'objets et de pièges dansnhdata.json. À relancer si les sources changent :python3 gen_data.py [chemin/vers/NetHack-5.0.0].nhdata.json: les données générées (394 monstres, 422 objets, 24 pièges).
Licence
Le code de nhmapedit est distribué sous licence MIT (voir LICENSE).
nhdata.json est extrait des sources de NetHack (noms des monstres, objets
et pièges) et relève de la NetHack General Public License. NetHack est
Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985 et ses
contributeurs.