Éditeur de map
Construire une map directement dans le jeu, seul ou à plusieurs en temps réel, la tester en un clic et la publier sur le Workshop. Aucun logiciel externe n'est nécessaire.
Ouvrir l'éditeur
- Créer → Maps → Nouvelle map : choisis un nom, un départ (sol plat en herbe de 200 × 200 m, ou vide) et le mode d'édition.
- Créer → Maps : toutes les maps de tes addons activés. ÉDITER ouvre une de tes maps ; pour une map du Workshop, ÉDITER UNE COPIE crée d'abord une copie locale (les maps téléchargées ne sont jamais modifiées).
Chaque nouvelle map est rangée dans un addon local : addons/<nom>/maps/<nom>.pcmap, avec son addon.json. Elle apparaît ensuite dans Jouer → Créer une partie et Explorer → Cartes.
Modes d'édition
| Mode | Effet |
|---|---|
| Solo | Tu édites seul. |
| Amis | Crée un lobby Steam (amis uniquement, 8 éditeurs). Invite avec le bouton à côté de Enregistrer, ou tes amis rejoignent depuis Multijoueur (la partie s'affiche avec « (édition) »). |
| IP | Comme Amis mais sans Steam : les autres rejoignent par Multijoueur → Par IP. |
Contrôles
Inspirés d'Unreal et d'Unity. Les touches de déplacement suivent leur position sur le clavier : sur AZERTY, voler se fait avec ZQSD.
| Action | Contrôle |
|---|---|
| Voler | Clic droit maintenu + ZQSD (QWERTY : WASD), A / E pour descendre / monter, Maj pour accélérer, molette pour régler la vitesse |
| Avancer / reculer, glisser la vue | Molette ; clic molette maintenu |
| Sélectionner | Clic ; Ctrl ou Maj + clic pour ajouter ; glisser pour un rectangle de sélection ; Ctrl+A pour tout |
| Déplacer / tourner / redimensionner | Z / E / R (QWERTY : W / E / R), puis tirer une poignée |
| Cadrer la sélection | F (ou double-clic dans la liste) |
| Supprimer, dupliquer | Suppr ; Ctrl+D |
| Copier / coller sous la souris | Ctrl+C / Ctrl+V |
| Annuler / rétablir | Ctrl+Z / Ctrl+Y (chaque éditeur a son propre historique) |
| Enregistrer | Ctrl+S |
| Arrêter de poser / désélectionner | Échap |
Poignées et aimant
- Déplacer : flèches pour un axe, petits carrés pour un plan, point central pour bouger face à la caméra.
- Tourner : un anneau par axe, autour du centre de la sélection.
- Échelle : modifie la taille des blocs et des volumes d'eau (pas des props). Tirer un axe garde la face opposée en place ; le cube central agrandit dans toutes les directions.
- Monde / Local : oriente les poignées selon les axes du monde ou ceux de l'objet.
- Aimant : aligne les positions et tailles sur la grille (de 0,0625 à 8 m) et les rotations sur un pas d'angle (5° à 90°).
Contenu
Blocs
Formes redimensionnables pour monter sols, murs, rampes et escaliers sans Blender, comme les brushes de Hammer. Leur collision est exacte et ils sont statiques en jeu.
| Forme | Détails |
|---|---|
| Cube | Pavé de la taille indiquée. |
| Rampe | Plan incliné qui monte vers −X (tourne-la pour l'orienter). |
| Cylindre | Diamètre = taille X et Z, hauteur = taille Y (X ≠ Z donne un cylindre ovale). |
| Escalier | Marches pleines qui montent vers −Z ; le nombre de marches se règle dans l'inspecteur. |
Matériaux : Dev gris, Dev orange, Dev sombre, Dev bleu (grilles façon Source), Béton, Briques, Planches, Métal, Carrelage, Herbe, Terre, Sable. Les textures sont procédurales et suivent le monde : un bloc agrandi ne déforme pas sa texture. Teinte colore le matériau, Échelle texture agrandit le motif.
Props et décor
Tous les props du menu de spawn (intégrés et packs de modèles), à poser de deux façons (boutons en haut de l'onglet) :
- Prop physique : en jeu, c'est un vrai prop appartenant au monde. Il ne compte pas dans la limite des joueurs et ne peut pas être annulé avec Z. Figé au départ le laisse immobile jusqu'à ce qu'un joueur le libère au physgun.
- Décor : élément fixe de la map, avec une collision exacte (on peut entrer dans un bâtiment, passer sous une arche). Il ne peut pas être attrapé. Son réglage Collision peut aussi valoir Celle du modèle (légère) : les formes de
props.json, sinon une enveloppe convexe par pièce du modèle (bien plus rapide pour un gros groupe de petites pièces), ou Aucune (purement visuel ; dans l'éditeur on peut toujours le sélectionner). Dans le.pcmap:"collision": "exact" | "model" | "none"("exact"si absent).
Dossiers : la liste est rangée par pack. À la racine : PhysiCore (les props intégrés au jeu), Véhicules (intégrés et d'addons), puis un dossier par addon de modèles (son titre, celui de addon.json). Dans un pack, un sous-dossier par catégorie de son props.json (le début commun avec le nom du pack est retiré : « Modern City — Enseignes » devient Enseignes) ; les modèles sans catégorie sont posés directement dans le pack, et ceux cachés du menu de spawn ("hidden": true : variantes de carte, copies mises à l'échelle…) sont regroupés à la fin dans Cachés (décor). ‹ Retour remonte d'un dossier ; l'info-bulle d'un dossier donne son nom complet et son nombre de modèles. La recherche, elle, cherche dans tous les dossiers (nom, mots-clés, catégorie) et l'info-bulle de chaque résultat indique son pack et sa catégorie.
Le bouton Workshop ouvre les packs de modèles du Workshop : abonne-toi, et les modèles apparaissent dans la liste une fois téléchargés. Pour créer tes propres modèles, voir l'éditeur de modèles.
Entités
| Entité | En jeu | Réglages |
|---|---|---|
| Point d'apparition | Les joueurs apparaissent sur l'un d'eux au hasard. Sans point, au centre de la map. | — |
| Lumière | Lumière ponctuelle. | couleur, intensité, portée, ombres, statique |
| Spot | Cône de lumière (posé vers le bas par défaut). | couleur, intensité, portée, angle, ombres, statique |
| Volume d'eau | Eau où l'on nage ; la surface est le haut du volume. | taille |
| Zone interdite aux PNJ | Invisible en jeu : retirée du navmesh, les PNJ n'y marchent pas. Onglet Monde → Voir le navmesh des PNJ montre en vert où ils peuvent aller. | taille |
| Point nommé | Invisible : un repère (spawn d'équipe, objectif…) que le Lua lit avec map.GetPoints. | nom, catégorie |
| Zone déclencheur | Invisible : appelle les hooks TriggerStartTouch / TriggerEndTouch quand on y entre ou sort. | nom, taille, catégorie |
| Entité scriptée | Une entité Lua créée au lancement de la map. | nom, classe, propriétés clé = valeur |
Les trois dernières servent aux gamemodes : la liste Classes d'entités sous les boutons montre les classes des gamemodes installés et des addons activés, et la case Afficher les zones déclencheurs les cache pour cliquer à travers. Tout est expliqué, avec l'API Lua, dans Points, zones et entités de map.
Terrain
L'onglet Terrain (panneau de gauche) ajoute un sol naturel à sculpter, peindre et planter, dessiné par le plugin Terrain3D (TokisanGames). Créer un terrain pose un terrain plat de 512 × 512 m au centre de la map, avec ses textures et sa végétation prêtes à l'emploi.
Une map peut avoir jusqu'à 8 terrains, listés en haut de l'onglet : les outils agissent sur celui qui est sélectionné. Chacun a son nom, ses textures, sa végétation et ses zones. Ils peuvent être à des endroits différents ou superposés (une île flottante au-dessus d'une vallée : perce le terrain du dessus avec Trous pour lui donner sa forme).
- Nouveau crée un terrain là où regarde la caméra ; Renommer ; Supprimer ce terrain (en bas de l'onglet).
- Déplacer décale tout le terrain sélectionné (relief, peinture et végétation) de X, Y, Z mètres : X et Z au mètre près (l'espacement de la grille du terrain), Y librement. Les morceaux de zone que le décalage laisse vides deviennent des trous. Annulable.
| Outil | Effet | Avec Ctrl |
|---|---|---|
| Monter / Creuser | Monte ou creuse le sol sous le pinceau. | L'inverse. |
| Aplatir | Amène le sol à la Hauteur choisie. | Ctrl+clic : prend la hauteur du sol cliqué. |
| Lisser | Adoucit les bosses et les falaises. | |
| Peindre / Mélanger | Peint la texture choisie ; Mélanger la fond peu à peu avec celle du sol. | |
| Trous | Perce le terrain (grottes, tunnels, sous-sols) : un trou n'a ni image ni collision. | Rebouche. |
| Végétation | Disperse le modèle choisi (taille, variation de taille). | Arrache toutes les plantes dans le cercle, quel que soit le modèle. |
| Zones | Agrandit le terrain d'une zone de 256 × 256 m là où on clique, même hors du terrain (256 zones au maximum : 4 × 4 km). | Retire la zone. |
- Clic gauche maintenu pour utiliser l'outil, cercle blanc = taille du pinceau (rouge quand Ctrl inverse l'outil). Échap ou un nouveau clic sur l'outil revient à la sélection. Réglages : Taille (m), Force, Douceur du bord. Un coup de pinceau s'annule en une fois (Ctrl+Z).
- Textures : 8 textures de base (herbe, sol de forêt, terre, sol rocailleux, roche, sable, neige, gravier ; CC0, Poly Haven) et Importer… pour ajouter un PNG ou JPG (32 au maximum). Une normal map posée à côté du fichier (« herbe_normal.png ») est prise automatiquement. Échelle règle la répétition de la texture. Retirer enlève la dernière de la liste (les autres gardent leur place sur le sol).
- Végétation : arbres feuillus, sapins, buissons, fougères, rochers et pierres moussues (CC0, Poly Haven, allégés avec 3 niveaux de détail), et Modèle d'addon… pour planter n'importe quel modèle d'un pack de modèles. Collision par modèle : Tronc (on bute sur le tronc), Forme entière (rochers) ou Aucune (herbes, buissons). Un modèle d'addon s'affiche jusqu'à 32 m par défaut ; dans le fichier
.terrain, sa clérange(mètres, 10 à 2000) change cette distance (maps converties : herbe 100 m, arbres 600 m…). - Le terrain a des collisions (joueurs, props, véhicules), fait de l'ombre et entre dans le navmesh des PNJ. Il n'entre pas dans l'éclairage précalculé : il reçoit le soleil en temps réel.
- À plusieurs, chaque coup de pinceau apparaît en direct chez tous les éditeurs.
- Supprimer le terrain le retire de la map (annulable).
Routes
L'onglet Routes (panneau de gauche) dessine des routes point par point, générées par le plugin Road Generator (TheDuckCow) : voies avec marquages, bas-côtés, carrefours, collisions. Tracer une route, puis :
- Clic sur le sol : pose un point ; chaque clic suivant prolonge la route, qui passe en courbe par les points. Échap ou un clic sur le dernier point termine la route ; Échap une seconde fois quitte l'outil.
- Clic sur une route existante : à son bout, on la prolonge ; au milieu (sur un point ou n'importe où sur la chaussée), un carrefour est créé et la nouvelle route en part. Pendant un tracé, cliquer une route la raccorde (bout à bout, ou carrefour au milieu) et termine le tracé. Un carrefour accepte plusieurs branches (en T, en croix…).
- Chaque clic s'annule séparément (Ctrl+Z) et apparaît en direct chez les autres éditeurs.
Réglages des nouvelles routes : nombre de voies dans chaque sens (0 dans un sens : sens unique), largeur d'une voie, bas-côtés, revêtement (asphalte, béton, pavés, gravier, terre ; textures CC0 Poly Haven), marquages au sol (asphalte), courbure et aplatir le terrain dessous. Appliquer aux routes sélectionnées les donne à toute la route (d'un carrefour ou d'un bout à l'autre) des points sélectionnés.
- Les points de route sont des objets (disques jaunes dans l'éditeur, invisibles en jeu) : on les sélectionne, déplace (la route suit en direct), règle dans l'inspecteur ou supprime (ses voisins sont alors reliés). Par défaut un point s'oriente tout seul entre ses voisins ; décoche Orientation automatique pour utiliser sa rotation.
- Avec un terrain, il est aplani sous la route (bords adoucis) quand on la pose ou la déplace, dans la même étape d'annulation. Le terrain n'est pas remis comme avant quand on déplace ou supprime une route ensuite : Ctrl+Z le fait.
- Une route en sens unique ne se raccorde pas directement à une route à double sens (le plugin ne dessine pas ce morceau) : passe par un carrefour.
- En jeu, les routes ont des collisions (joueurs, véhicules, props), sont toujours chargées et font partie du navmesh. Elles n'entrent pas dans l'éclairage précalculé.
Monde
L'onglet Monde (panneau de droite) règle l'heure du soleil (0 à 24 h, nuit avant 6 h et après 18 h), sa direction, son intensité et sa couleur, les couleurs du ciel, la quantité de nuages (0 : ciel dégagé, 1 : couvert ; ils dérivent avec le vent et leur détail suit l'option graphique « Nuages » du joueur), la lumière ambiante, le brouillard et le brouillard volumétrique (qui respecte l'option graphique du joueur).
Ciel panoramique
Dans l'onglet Monde, Ciel panoramique remplace le ciel calculé et ses nuages par une image. La liste propose Aucun (ciel calculé) et les images des dossiers materials/skybox/ de tes addons activés (fichier — addon) : images équirectangulaires (proportions 2:1), en .png, .jpg, .webp ou .hdr. Rotation du panorama (°) (0 à 360) le tourne autour de l'axe vertical. Le panorama suit la luminosité du jour et de la nuit (heure du soleil).
La map enregistre "sky_texture": "addon:<clé de l'addon>/materials/skybox/<fichier>" et "sky_rotation" dans environment. Les joueurs doivent avoir l'addon de l'image : ajoute-le aux dépendances Workshop de la map. Une image absente sur la machine apparaît comme (introuvable) dans la liste, et le ciel calculé est affiché. En Lua : env.SetSkyTexture.
Éclairage précalculé
Une lumière cochée Statique (décochée par défaut) ne sera plus une vraie lumière en jeu : sa lumière est calculée une fois sur les blocs de la map, avec des ombres douces et un rebond (un mur rouge éclaire en rouge à côté de lui). Une map peut ainsi avoir des milliers de lumières sans les faire calculer à chaque image. Les lumières qui doivent clignoter, bouger ou être éteintes par un script restent dynamiques.
- Coche Statique sur les lumières qui ne bougent pas.
- Onglet Monde → Éclairage précalculé : choisis la qualité (Brouillon : pixels de lumière de 50 cm, très rapide ; Normale : 25 cm ; Haute : 12 cm, ombres plus douces, plus long) et si le soleil et le ciel sont aussi précalculés (ombres douces du soleil, intérieurs vraiment sombres). Décoché, le soleil et la lumière du ciel restent en temps réel.
- Calculer l'éclairage : la map est enregistrée, puis le calcul tourne en arrière-plan (barre de progression, bouton Annuler) pendant que tu continues à éditer. Lance Tester pour voir le résultat.
- Seuls les blocs reçoivent la lumière précalculée. Le décor importé, les props, les joueurs, les PNJ et les véhicules sont éclairés par les 16 lumières statiques et les 8 spots les plus proches de la caméra (de vraies lumières sans ombres, qui ignorent les blocs), par le soleil et par la lumière ambiante. Le décor fait quand même de l'ombre aux blocs pendant le calcul.
- Une map sans blocs (une ville importée, faite uniquement de décor) se calcule aussi : il n'y a rien à éclairer, mais ses lumières statiques passent alors à ce système économique au lieu d'être de vraies lumières. Avec beaucoup de décor, la préparation du calcul peut prendre quelques minutes.
- Si tu modifies la map ensuite (blocs, décor, lumières statiques, soleil ou ciel), l'éclairage est marqué pas à jour : en jeu, les lumières statiques redeviennent alors de vraies lumières jusqu'au prochain calcul.
- Le calcul est enregistré à côté de la map : dossier
maps/<map>_lighting/(lighting.jsonet des imagespage_0.png…). Il fait partie de l'addon : il part avec la map sur le Workshop et dans le FastDL. Supprimer l'efface. - Seul l'hôte d'une session d'édition peut lancer le calcul.
Navmesh des PNJ
Le navmesh dit aux PNJ où ils peuvent marcher. Onglet Monde → Navmesh des PNJ :
- Calculer le navmesh enregistre la map puis calcule le navmesh en arrière-plan (barre de progression, Annuler), à partir des blocs, du décor, des props figés, du terrain et des zones interdites aux PNJ. Il est enregistré à côté de la map (
maps/<map>.navmesh) et chargé instantanément en jeu. - Voir le navmesh l'affiche en vert.
- Après une modification du sol, du terrain ou du décor, il est marqué pas à jour : les PNJ utilisent l'ancien tant qu'il n'est pas recalculé.
- Sans navmesh enregistré (ou après Supprimer), il est calculé au lancement de la map, comme pour les cartes intégrées : les PNJ marchent tout droit en attendant.
- En jeu, les props figés posés par les joueurs mettent quand même le navmesh à jour autour d'eux.
Fusionner en un modèle
Comme le Merge Actors d'Unreal Engine : sélectionne plusieurs objets Décor et blocs (les props, lumières et entités sont ignorés), puis clique sur Fusionner en un modèle… sous l'inspecteur. Ça crée un vrai modèle 3D (.glb) rangé dans un pack de modèles : moins d'objets dans la map et moins de surfaces à dessiner, donc une map plus légère. La fenêtre affiche ce qu'il y a avant (objets, triangles, matériaux, surfaces) et ce qu'il y aura après.
| Réglage | Effet |
|---|---|
| Nom du modèle | Nom dans l'onglet Props. Le fichier prend ce nom (models/<nom>.glb, avec _2, _3… s'il existe déjà). |
| Addon de modèles | Un de tes addons locaux (celui de la map en premier) ou Nouvel addon… (créé avec le nom donné). L'addon est activé s'il ne l'était pas. |
| Catégorie | Dossier dans l'onglet Props (Fusions par défaut). |
| Matériaux | Garder les matériaux d'origine : une surface par matériau, textures d'origine copiées dans le .glb, aucune perte de qualité. Tout précalculer dans une seule texture (atlas) : toutes les surfaces sont dépliées et peintes dans une nouvelle texture ; il ne reste qu'une surface (plus une pour le feuillage découpé et une pour le verre s'il y en a). |
| Taille de la texture | 256 à 4096 pixels de côté. Le message de fin donne la densité obtenue (pixels par mètre) : si elle est trop faible, prends une texture plus grande ou fusionne moins d'objets à la fois. |
| Normal map, Rugosité et métal, Émission | Textures précalculées en plus de la couleur (l'émission seulement si un matériau émet de la lumière). Le relief des blocs (joints des briques…) devient une normal map. |
| Marge autour des morceaux | Pixels remplis autour de chaque morceau de l'atlas (1 à 16, 4 par défaut) : évite les liserés au loin. |
| Format des images | PNG (sans perte) ou JPEG (bien plus léger). Une texture avec transparence reste en PNG. |
| Point d'origine | Centre au ras du bas (par défaut), centre de la sélection, position du premier objet sélectionné ou origine de la map. |
| Collision | Exacte (chaque triangle, on peut entrer dans les bâtiments), une boîte par objet d'origine (légère, 32 objets au plus, sinon exacte), une enveloppe convexe (très légère, pour un tas de rochers) ou aucune. |
| Retirer les faces cachées | Retire les faces collées l'une contre l'autre entre deux objets (deux blocs posés côte à côte, une caisse posée au sol) et celles qui sont à l'intérieur d'un bloc cube d'un autre objet. |
| Remplacer les objets dans la map | Coché (par défaut) : les objets d'origine sont retirés et le nouveau modèle posé à leur place, en décor, et sélectionné. Ctrl+Z remet les objets d'origine. Décoché : la map ne change pas, le modèle est juste ajouté à l'onglet Props. |
| Visible dans le menu de spawn | Décoché par défaut : le modèle est caché du menu de spawn en jeu ("hidden": true dans props.json) mais reste dans l'onglet Props de l'éditeur (Cachés (décor)). |
- La fusion tourne en arrière-plan : barre de progression en haut de la vue, bouton Annuler, et tu continues à éditer pendant ce temps. La géométrie est préparée sur un autre cœur du processeur et l'atlas est dessiné par la carte graphique, un morceau par image : le jeu ne se fige pas. Si les objets fusionnés sont modifiés, déplacés ou supprimés avant la fin, la map n'est pas modifiée (le modèle reste dans l'onglet Props).
- Les blocs n'ont pas de fichier de texture : leur surface est toujours précalculée dans une texture, même en mode « garder les matériaux ». Les matériaux qui ne sont pas des matériaux standard deviennent une couleur unie. Le modèle fusionné est du décor : il ne reçoit pas l'éclairage précalculé des blocs.
- Les modèles animés deviennent fixes ; les lumières et effets qu'ils contiennent ne sont pas repris. Les niveaux de détail du nouveau modèle sont créés automatiquement au chargement, comme pour tout modèle importé.
- Le modèle fusionné contient une copie des modèles d'origine : publie l'addon où il est rangé avec la map (ou rends la map dépendante de cet addon), et vérifie que les licences des modèles d'origine permettent de les redistribuer.
- Seul l'hôte d'une session d'édition peut fusionner (le modèle va dans ses addons). Au plus 4 millions de triangles par fusion.
- Le nouveau modèle se règle ensuite comme les autres dans l'éditeur de modèles (son entrée de
props.json: catégorie, mot-cléfusion, matière béton, figé, collisionshapesouconvex).
Grandes maps
En jeu, une map .pcmap est optimisée toute seule, sans rien changer à la façon de la construire :
- Regroupement : la map est découpée en zones de 128 m. Dans chaque zone, les blocs de même matériau forment un seul maillage, les décors identiques sont dessinés ensemble et toutes les collisions sont réunies.
- Distance d'affichage : les petits objets disparaissent en fondu au loin, les grands plus loin, les très grands (sols, gros bâtiments) jamais. Chaque bloc, décor ou lumière a un champ Distance d'affichage (0 = automatique) ; l'onglet Monde règle le maximum de la map. Les lumières s'éteignent en fondu, leurs ombres d'abord. Le joueur règle aussi Configuration → Graphismes → Distance d'affichage (maps créées).
- Occultation : les grands murs, sols et toits en cube cachent ce qui est derrière eux, qui n'est alors pas dessiné.
- Chargement en arrière-plan : avant de construire la map (en créant ou en rejoignant une partie, en changeant de map, en ouvrant l'éditeur), ses modèles et leurs textures sont lus en parallèle sur plusieurs cœurs pendant que l'écran de chargement continue de tourner et les compte (« Chargement des modèles de la carte : 120 / 448 »). Puis la map est construite un peu à chaque image (« Construction de la carte : 42 % ») : le jeu ne se fige jamais, même pour une ville de 15 000 objets.
- Textures partagées et compressées : une image utilisée par plusieurs modèles
.gltf(un atlas de textures commun) n'est chargée qu'une fois, et les textures des modèles sont compressées pour la carte graphique (4 à 8 fois moins de mémoire vidéo). La compression prend du temps au premier chargement d'une map ; elle est gardée sur le disque (dossiercache/texturesdes données du jeu ; menu principal → Configuration → Cache pour le vider) et les chargements suivants sont rapides. - Niveaux de détail : les modèles importés de plus de 600 triangles reçoivent des versions simplifiées, utilisées au loin.
- Navmesh des PNJ (onglet Monde, activé par défaut) : décoché, la map ne calcule pas de navmesh (chargement plus rapide) et les PNJ restent sur place (ils tournent, visent et se battent quand même).
- Chargement par zones (onglet Monde, activé par défaut) : chaque joueur ne charge que les zones autour de lui, au fil de ses déplacements. Le serveur garde toute la map (la physique et les PNJ en ont besoin). Les points d'apparition, l'eau et les très grands blocs sont toujours chargés.
Ouverture dans l'éditeur : l'écran de chargement de l'éditeur suit les mêmes étapes, sans jamais figer le jeu : Chargement des modèles (lus en parallèle), Construction de la carte (quelques centaines d'objets par image, « 3 200 / 14 751 objets »), Construction du terrain s'il y en a un, puis Miniatures des props : toutes les images de l'onglet Props sont préparées pendant le chargement (lues depuis le cache disque cache/icons, ou dessinées puis gardées pour les fois suivantes), si bien que l'onglet s'ouvre sans à-coup. La première ouverture après l'installation d'un gros pack de modèles est plus longue (chaque nouvelle miniature est dessinée une fois, par lots dont les modèles sont lus en parallèle puis relâchés s'ils ne servent pas à la map). Un modèle de plus de 256 Mo sur le disque (fichiers .bin compris) n'a pas de miniature mais un carré gris : le charger pour une image de 128 pixels prenait des gigaoctets de mémoire. Un co-éditeur qui rejoint la session passe par les mêmes étapes ; les modifications faites par les autres pendant son chargement sont appliquées à la fin.
Dans l'éditeur, tout reste chargé et modifiable ; Voir les objets lointains (onglet Monde) affiche aussi ce que la distance d'affichage cache en jeu. Le cadre Poids de la map compte les objets, les triangles, les lumières en temps réel (avec ombres) et les lumières statiques, les modèles différents et les props physiques, en orange puis en rouge quand ça devient lourd, avec un conseil.
Édition à plusieurs
- L'hôte possède la map : chaque modification est envoyée à l'hôte, vérifiée, puis appliquée chez tout le monde dans le même ordre.
- Chaque éditeur a une couleur : tu vois la caméra des autres (avec leur nom) et ce qu'ils ont sélectionné, encadré à leur couleur. Leurs déplacements s'affichent en direct.
- Seul l'hôte enregistre le fichier. Les autres peuvent Fichier → Enregistrer une copie pour garder la map chez eux.
- Si deux personnes modifient le même objet en même temps, la dernière modification gagne.
Tester
TESTER (hôte uniquement) lance la map telle qu'elle est, sans l'enregistrer, pour tous les éditeurs : joueurs, physgun, toolgun, props physiques et scripts Lua des addons activés. Dans le menu pause (Échap), Retour à l'éditeur ramène tout le monde dans l'éditeur ; la map revient exactement à son état d'avant le test.
Le début du test affiche l'écran de chargement pendant que la map de jeu se construit (« Construction de la carte : 60 % ») ; un éditeur dont la map n'est pas encore prête reste immobile jusqu'à la fin, pour ne pas tomber à travers le sol. Au retour, l'écran de chargement s'affiche aussi le temps de reconstruire les terrains.
Enregistrer et publier
- Ctrl+S ou Enregistrer (le point « • » signale des modifications non enregistrées).
- Fichier → Publier sur le Workshop… enregistre puis ouvre l'outil de publication : choisis l'addon de la map. Voir Publier un addon.
- Miniature : Fichier → Prendre la photo (ou cadrage automatique, ou une image du PC). Sans photo, une photo automatique de la map est prise à la publication. Voir Miniature.
Pour jouer une map, pas besoin qu'elle soit installée chez les autres : le serveur leur envoie la map. Seuls les props venant d'addons doivent être installés (sinon cube ERROR), d'où l'intérêt de publier les addons utilisés.
Le format .pcmap
À côté du .pcmap, une map peut avoir : <map>.terrain (les terrains, binaire : en-tête PCTERRAIN2, taille, puis les données compressées en zstd : pour chaque terrain son nom, ses textures, sa végétation et ses zones de 256 m avec leurs cartes de hauteur, de peinture et de couleur ; les fichiers PCTERRAIN1 d'avant, à un seul terrain, se lisent toujours), <map>.navmesh (le navmesh calculé, en-tête PCNAV1) et le dossier <map>_lighting/ (l'éclairage précalculé). Ce sont aussi de simples données, vérifiées à la lecture, jamais des ressources Godot. Le serveur envoie le terrain aux joueurs avec la map.
Les routes sont dans le .pcmap, en objets road_point (champs lanes_fwd, lanes_rev, lane_width, shoulder, surface, markings, curve, auto_dir, flatten, et les liens next / prior : l'id du point suivant ou précédent, ou d'un carrefour) et road_intersection. Deux points sont reliés quand les deux liens concordent (A.next = B et B.prior = A) ; un point dont un lien vise un carrefour en est une branche.
Le .pcmap est un fichier JSON lisible. Il ne contient que des données, jamais de scènes ni de scripts : une map du Workshop ne peut pas exécuter de code. Tout ce qui est lu (fichier ou réseau) est vérifié : types inconnus ignorés, valeurs bornées, 20 000 objets au maximum.
{
"format": "physicore-map",
"version": 1,
"name": "Ma map",
"environment": {
"sun_time": 14.0, "sun_heading": 210.0, "sun_energy": 1.2, "sun_color": "fff7ebff",
"sky_top": "5285d1ff", "sky_horizon": "b8cce0ff", "ground_color": "404540ff",
"clouds": 0.4, "sky_texture": "", "sky_rotation": 0.0,
"ambient_energy": 1.0, "fog": false, "fog_density": 0.01, "fog_color": "b3bfd1ff",
"volumetric_fog": false
},
"objects": [
{ "id": "3612e24a5b87e096", "type": "block", "name": "Sol",
"pos": [0, -0.5, 0], "rot": [0, 0, 0],
"shape": "box", "size": [200, 1, 200], "material": "grass",
"color": "ffffffff", "tile": 4.0, "steps": 8 },
{ "id": "837554eafdf21bf7", "type": "spawn", "name": "Point d'apparition",
"pos": [0, 0, 0], "rot": [0, 0, 0] },
{ "id": "a1b2c3d4e5f60718", "type": "prop", "name": "Caisse en bois",
"pos": [3, 0.45, 2], "rot": [0, 45, 0],
"model": "builtin:crate", "frozen": true, "color": "ffffffff" }
]
}
| Champ | Description |
|---|---|
id | Identifiant unique (texte) |
type | block, prop, static (décor), spawn, light_point, light_spot, water, point, trigger, entity |
pos / rot | Position en mètres ; rotation en degrés (ordre Y, X, Z) |
shape, size, material, tile, steps | Blocs : forme (box, ramp, cylinder, stairs), taille en mètres (0,05 à 2000), matériau (dev_grey, dev_orange, dev_dark, dev_blue, concrete, bricks, planks, metal, tiles, grass, dirt, sand), échelle de texture, nombre de marches |
model, frozen | Props et décor (model seulement) : identifiant du prop (voir Identifiants de props), figé au départ |
color | Teinte (blocs, props) ou couleur de lumière, en hexadécimal RRGGBBAA |
energy, range, angle, shadows, static | Lumières : intensité, portée (m), angle du spot (°), ombres, précalculée (voir Éclairage précalculé) |
size | Eau : taille du volume ; zone déclencheur : taille de la boîte (0,1 à 2000) |
tag, class, keyvalues | Points et zones : catégorie ; entités scriptées : classe et propriétés. Voir Dans le fichier .pcmap |