Ceci est la traduction française, faite pour ce site, du guide livré dans le produit : le fichier INSTALL.md de votre archive, en anglais. L’anglais fait référence : en cas de doute, c’est lui qui compte. Lire l’original en anglais
1. Les outils (environ 5 minutes la première fois)
- Installez Rokit (<https://github.com/rojo-rbx/rokit>), puis dans le dossier :
rokit install. Il récupère Rojo, Lune, StyLua, Selene, luau-lsp et uv aux uv synccrée l’environnement Python dont les outils se servent (.venv) à partir deuv.lock(Python 3.14). Un premier lancement télécharge les paquets : NON MESURÉ.- Vérifiez le paquet sur votre machine :
bash tools/check.sh. Il formate, analyse, vérifie les types, lance chaque suite de tests et les simulations d’équilibrage et construit
versions de rokit.toml. Un premier lancement télécharge six programmes : NON MESURÉ.
le place ; il doit finir par GATE GREEN (full). bash tools/check.sh --fast saute les simulations et la construction du place. Les deux sont chronométrés dans l’entrée du CHANGELOG du paquet pour cette version (les chiffres viennent d’un passage de la gate sur une copie marquée de ce paquet même).
2. Faites-le vôtre
Copiez sale/project.template.json en project.json (à la racine du dossier) et modifiez-le : mettez votre identifiant d’utilisateur Roblox dans creatorUserId (le nombre de l’adresse de votre profil), ou celui d’un groupe dans creatorGroupId si l’expérience appartient à un groupe ; les identifiants universe et place viennent à l’étape 8 (le Creator Dashboard les affiche une fois l’expérience créée). keyFile est le chemin du fichier qui contient votre clé d’API Open Cloud (étape 4). Rien d’autre dans le paquet ne nomme un propriétaire.
3. Jouez tout de suite, sans rien dessiner à partir de l’art
bash tools/build_place.sh écrit Wayfold.rbxl (Rojo le construit à partir de src/ et de default.project.json) ; ouvrez-le dans Roblox Studio et appuyez sur Play. La table, les tuiles et les ennemis ne sont pas dessinés ou le sont en formes simples (un identifiant d’asset à 0 ne dessine rien), l’interface de jeu, le tirage des tuiles, les vagues, la charte et les réglages fonctionnent. Une personne doit appuyer sur Play : NON MESURÉ.
4. Une clé d’API Open Cloud
Créez-en une dans le Creator Dashboard (Open Cloud > API Keys) avec les permissions de création d’assets (Assets : read, write) pour votre compte ou votre groupe. Mettez la clé, seule, dans un fichier texte hors du paquet (par exemple ~/.roblox_key), puis réglez la variable d’environnement ROBLOX_OPEN_CLOUD_KEY sur la clé, ou écrivez le chemin de ce fichier dans keyFile de project.json, ou passez --key-file FICHIER à n’importe quel outil d’envoi. Chaque outil prend la clé dans tools/project.py et nulle part ailleurs ; aucun ne l’affiche ni ne la copie.
5. Fabriquez l’art et envoyez-le (la longue étape)
Les modèles et les textures sont fabriqués par des scripts Blender (Blender 5.2 ; les commandes sont blender -b --factory-startup --python blender/scripts/<nom>.py, avec l’exécutable de Blender dans votre chemin ou écrit en entier). Chaque script écrit ses fichiers sous blender/out/ et ses entrées dans blender/manifest.json. Les temps du développeur, mesurés sur sa machine, sont dans la troisième colonne ; les autres sont NON MESURÉS.
| Script | Ce qu’il fabrique | Temps |
|---|---|---|
tiles.py, tiles_b.py | les tuiles de terrain (neuf sortes, 18 modèles avec leurs variantes et leurs morceaux de route), cuites dans les atlas TilesA et TilesB | tiles.py environ 30 s |
keep.py | le donjon et la porte (LandmarksA) | NON MESURÉ |
room.py, table.py | la pièce et la table sur laquelle repose le plateau, et ses accessoires (RoomA, TableA) | NON MESURÉ |
enemy.py, beasts.py, warden.py | les neuf ennemis, en trois atlas (WalkersA, BeastsA, WardenA) | NON MESURÉ |
tower.py | les modèles des dix tours (TowersT1, TowersT2) | NON MESURÉ |
soldier.py | les soldats du Picket (SoldiersA) | NON MESURÉ |
hero.py | le héros (HeroesA) : un maillage avec squelette de 23 os, une pose au repos, une marche et une course | environ 3 minutes |
fx.py, flow.py, dust.py, impacts.py, shots.py, shadow.py | les marques, le chevron de la route, la séquence d’images de poussière, les impacts, les tirs, l’ombre d’un ennemi volant | de quelques secondes à 1 minute chacun |
ui.py, glyphs.py | les atlas d’interface (UiA, UiB, UiC) et les glyphes de manette et de touches (UiG) | ui.py environ 1 minute |
Ensuite, envoyez, depuis le dossier du paquet : uv run python tools/upload_assets.py --dry-run liste ce qui partirait ; uv run python tools/upload_assets.py envoie chaque asset de blender/manifest.json qui n’a pas encore d’identifiant, et note les identifiants dans blender/uploaded.json sur votre machine. Roblox vérifie chaque envoi : envoyez par groupes d’une quinzaine (--only Nom1,Nom2) et lancez uv run python tools/upload_assets.py --status avant le groupe suivant ; un état qui n’est pas Approved est compté. Un modèle et ses cartes de texture partent ensemble (une nouvelle cuisson peut déplacer les îlots UV : --reupload Nom1,Nom2 les renvoie).
Les sons : uv run python tools/upload_audio.py --all envoie chaque son du jeu depuis assets/audio/ (les noms sont dans assets/audio/names.json), puis uv run python tools/upload_audio.py --status jusqu’à ce qu’aucun ne soit en attente. Pour les refabriquer, tools/synth_sounds.py, tools/synth_foley.py et tools/synth_music.py écrivent les fichiers (de quelques secondes à 10 s chacun, mesuré).
Pour finir, uv run python tools/setup_ids.py écrit chaque identifiant dans src/shared/Data/Ids.luau (le seul fichier qui nomme vos assets) et uv run python tools/gen_asset_meta.py écrit src/shared/Data/AssetMeta.luau. La durée de toute l’étape 5 dépend de la file de modération de Roblox et de votre connexion : NON MESURÉ.
6. Construisez les modèles dans Studio
Les modèles envoyés deviennent le ReplicatedStorage.Assets du place : ouvrez le place de l’étape 3 dans Studio et lancez dans la barre de commande require(game.ServerStorage.Tools.AssetBuilder).build() (il charge chaque modèle, rend à chaque pièce sa taille et sa place d’après le manifeste et habille une pièce cuite des cartes de son atlas). Enregistrez ensuite ReplicatedStorage.Assets sous assets/Assets.rbxm (clic droit > Save to File) et reconstruisez le place avec bash tools/build_place.sh. Le développeur fait cette étape avec une automatisation que le paquet ne contient pas ; à la main, elle est NON MESURÉE. tests/packs vérifie que les apparences de surface d’un modèle construit ont leurs paquets de textures ; si vous construisez les modèles vous-même, lancez la gate après l’étape pour voir ce qu’elle dit.
7. Produits et passes (facultatif)
Le jeu ne vend rien. Quand vous créez un produit de développeur ou un passe de jeu pour votre expérience, écrivez son identifiant dans Ids.products avec tools/setup_ids.py (ou à la main dans Ids.luau) et lisez-le avec Ids.product("nom") ; un identifiant à 0 cache l’article.
8. Publiez
Créez l’expérience dans le Creator Dashboard, écrivez ses identifiants universe et place dans project.json, et choisissez le nombre maximal de joueurs du place dans les paramètres du jeu de Studio si vous en voulez moins (chaque joueur qui arrive a sa propre table et sa propre partie, un serveur contient donc autant de parties qu’il a de joueurs ; un groupe de 4 au plus se forme sur invitation, et la façon dont un serveur Roblox se comporte avec 50 parties à la fois est NON MESURÉE). Publiez depuis Studio, ou avec uv run python tools/publish.py (il demande la même clé Open Cloud et la permission d’enregistrer une version du place ; lisez d’abord le texte de l’outil).
9. Régler l’équilibrage
Chaque nombre de réglage du jeu est dans src/shared/Data/Balance.luau ; CONFIG.md dit ce que signifie chaque bloc et quel autre fichier contient quoi. Après une modification, bash tools/check.sh --fast, et lune run tests/sim_bands joue les vraies règles à partir de graines fixes pour montrer si le bot expert gagne toujours dans les bandes que le développeur a choisies.
Si une étape échoue
- La gate échoue sur un paquet neuf : lisez la première ligne rouge ; chaque suite affiche son propre nom. Une gate verte sur la copie marquée de ce paquet chez le développeur
- Un envoi est refusé ou reste en attente : la modération ou les permissions de Roblox.
--statusaffiche l’état de chacun ; un asset refusé est refait avec son no Open Cloud API keyouno creator: étapes 2 et 4.- Le jeu se joue mais rien n’est dessiné : les identifiants sont toujours à 0. L’étape 5 se termine par
tools/setup_ids.py.
et rouge chez vous est un bogue du paquet : dites-le au vendeur, avec la ligne.
script et renvoyé avec --reupload NOM.