Touhou: Fading Illusion

Touhou: Fading Illusion

Not enough ratings
Guide de création de mods
By GiMark
Vous trouverez dans ce guide toutes les informations nécessaires à la création d'un mod simple.
   
Award
Favorite
Favorited
Unfavorite
Avant-propos
Bienvenue à vous, amateurs de modding ! Vous trouverez tout au long de ce guide les informations de base nécessaires à la création d'un mod. Avant que vous ne vous lanciez, nous vous recommandons de vous familiariser avec les règles concernant la création de contenu créé par les fans.

ATTENTION : L'outil de mise ou ligne de mod est pour le moment uniquement disponible pour les utilisateurs sur Windows.

NOTE : Les images dans le dossier "_game_resources" ainsi que certaines parties de ce guide peuvent contenir des spoilers.
Restrictions Relatives au Contenu
Exigences Émises par le Créateur de la Série Originale
Puisque Touhou: Fading Illusion est une création de fan basée sur l'univers de la série Touhou Project, vos mods devront également respecter les exigences demandées par le créateur de la série d'origine, ZUN. Plus précisément, vos mods NE doivent PAS inclure :
  • Tout contenu visant à détériorer la réputation de la série Touhou Project.

  • Tout contenu violant la propriété intellectuelle d'autres séries.

  • Tout contenu cherchant à confondre votre création de fan avec la série Touhou Project officielle.

  • Tout contenu extrait directement des jeux Touhou Project officiels.

  • Les scènes de fin des jeux Touhou Project officiels.

  • Tout contenu cherchant à faire la publicité de croyances personnelles en dehors du cadre de la fiction.

  • Tout contenu tiré d'autres créations de fan sans la permission de leurs auteurs.

  • Tout contenu à caractère sexuel considéré comme illégal.

  • Tout contenu cherchant à attiser la haine de groupes ou d'individus.

  • Toute photographie de ZUN lui-même sans sa permission.
Vous pouvez retrouver la liste complète des exigences sur ce site[touhou-project.news].

De plus, vos mods ne doivent pas contenir de code malveillant. Si vous ne souhaitez pas distribuer le code source publiquement, contactez-nous et nous vous permettrons de publier votre mod après avoir réalisé une revue de son code source. En commençant à créer un mod, vous confirmez avoir pris connaissance de cet avertissement et l'avoir accepté. En cas de violations de ces règles, nous nous réservons le droit de masquer ou bloquer votre mod.

Pour toute question, nous vous suggérons de nous contacter via le serveur Discord de notre équipe[discord.gg].
Premiers Pas
Bien, si les règles mentionnées ci-dessus vous conviennent, alors mettons-nous au travail. Il va tout d'abord vous falloir un bon éditeur de texte, car vous allez toucher à BEAUCOUP de texte et de code. Les fichiers ".rpy" avec lesquels vous allez devoir travailler peuvent être ouvert à l'aide du Bloc-notes standard fourni avec votre système, mais nous vous recommandons d'utiliser des outils plus avancés, tels que VS Code ou Notepad++. Tous deux sont gratuits et disponibles publiquement.

Après ça, assurez-vous que Touhou: Fading Illusion soit installé sur votre ordinateur, puis abonnez-vous au mod officiel qui vous aidera pour comprendre comment le code fonctionne et vous fournira les outils pour le mettre en ligne.
Création d'un Dossier pour le Mod
Ouvrez le dossier Steam ou SteamLibrary se trouvant sur le même disque que votre installation de Touhou: Fading Illusion, puis recherchez le dossier à l'emplacement "steamapps\workshop\content\2132480\3565758917". Ce dossier devrait apparaître dès le téléchargement de notre mod officiel.
Ne vous laissez pas intimider par les numéros dans le nom des dossiers – ceux-ci ne sont que des identifiants Steam, et vous en obtiendrez également un pour votre mod lors de sa création.

À l'intérieur du dossier de notre mod, ouvrez le dossier "_upload_app" puis lancez l'application. Dans l'application, entrez le nom de votre mod dans le menu de gauche puis cliquez sur le bouton "Create Item" dans le coin en bas à gauche. Suite à ça, un dossier destiné au contenu de votre mod apparaîtra dans le dossier WorkshopContent, accompagné d'un fichier nommé *nom de votre mod*.workshop.json dont nous allons avoir besoin (nous vous recommandons de le sauvegarder quelque part après l'avoir rempli).
Ouvrez ce fichier, copiez la valeur du champ "publishedfileid", puis créez un dossier du même nom dans le dossier "steamapps\workshop\content\2132480". Puisque les utilisateurs téléchargeront votre mod à ce même emplacement, le mieux est de le développer également à cet endroit. Créez les fichiers mod_info.rpy et script.rpy dans le dossier de votre mod, puis ouvrez le fichier mod_info.rpy correspondant dans le dossier de notre mod officiel à l'aide d'un éditeur de texte.
Information sur le Mod
Dans le fichier mod_info.rpy se trouve le code suivant :
init 99 python:
    tfi_official_mod_path = os.path.join(os.path.dirname(os.path.dirname(renpy.config.basedir)), "workshop/content/2132480/3565758917").replace("\\","/")
    global_game_mods["tfi_official_mod"] = {
      "start_scene": "tfi_official_mod_scene1",
      "description": _("This is a tutorial mod that also serves as a template for creating other mods. Open the folder steam/steamapps/workshop/content/2132480/3565758917 to look at the code and images in more detail."),
      "name": _("Tutorial mod"),
      "image": os.path.join(tfi_official_mod_path, "images/preview.png").replace("\\","/"),
    }
Pour votre mod, vous allez devoir copier ce code dans votre propre fichier mod_info.rpy avant de le modifier comme suit :
  • Remplacez tfi_official_mod dans global_game_mods["tfi_official_mod"] par un nom unique composé de caractères latins. Ceci est l'identifiant de votre mod au sein des fichiers du jeu, et afin d'éviter les conflits avec d'autres mods, nous vous recommandons d'écrire le nom de votre mod à l'air de caractères latins et de l'utiliser par la suite pour nommer vos variables et vos scènes.

  • Changez la valeur du champ start_scene – ceci est le nom de la première scène dans laquelle atterriront les joueurs après avoir lancé votre mod. Pour des raisons de simplicité, copiez le nom de votre mod mentionné ci-dessus et ajoutez "_scene1" à la fin, les noms des scènes devant également être uniques.

  • Les champs description et name contiennent les textes qui seront visibles par les utilisateurs dans le menu de sélection de mod intégré au jeu. Vous pouvez y écrire ce que vous souhaitez, mais gardez en tête que l'espace à l'écran est limité. Vous pouvez utiliser les balises {size} pour augmenter ou diminuer la taille du texte.
    "{size=+2}Ce texte est plus gros.{/size}"
    "{size=-2}Ce texte est plus petit.{/size}"

  • Le champ image contient l'image représentant votre mod et qui sera elle aussi affichée dans le menu de sélection de mod. Vous pouvez laisser ce champ vide, voire même le supprimer si vous n'avez pas d'image - auquel cas une image avec un point d'interrogation sera affichée à la place.

Finalement, vous devriez obtenir quelque chose comme ceci :

Une fois terminé avec le ficher mod_info.rpy, copiez le code du fichier script.rpy de notre mod officiel dans le votre. Examinons de plus près le code fourni.
Le bloc "init:"
Cette section contient des variables que vous allez devoir définir pour votre mod. Par exemple, la commande "define tfi_official_mod_dev = Character(_('TFI Main Dev'))" crée un nouveau personnage nommé "TFI Main Dev". Vous pouvez créer autant de personnages que vous le souhaitez, mais assurez-vous que le nom de variable pour chacun d'entre eux reste unique et n'entre pas en conflit avec les variables utilisées par le jeu ou par d'autres mods. Nous vous recommandons là aussi d'utiliser un préfixe unique à votre mod dans le nom des variables.

Si un personnage n'apparaît que brièvement, vous pouvez vous passer d'une variable et indiquer directement son nom avant chacune de ses lignes de dialogue.
"TFI Main Dev" "Hello!"
"TFI Player" "Hey!"
Le tableau ci-dessous liste les variables déjà utilisées par le jeu et dont vous pouvez vous servir si besoin. De nouvelles variables seront ajoutées à mesure que d'autres personnages seront introduits dans l'histoire.

Personnages Officiels de la Série

Name
Tag
Name
Tag
Name
Tag
Name
Tag
Name
Tag
Reimu
rei
Marisa
mar
Byakuren
byak
Rin
orin
Rinnosuke
korin
Yukari
yuk
Mokou
moko
Kanako
kan
Youmu
youmu
Sanae
san
Kasen
kas
Clownpiece
clown
Eirin
eirin
Reisen
reisen
Nazrin
naz
Satori
sat
Utsuho
okuu
Suwako
suwa
Komachi
koma
Eiki
eiki
Chen
chen
Ran
ran
Aya
aya
Yuugi
yuugi
Mima
mima
Mamizou
mami
Sumireko
sum
Meiling
mei
Kokoro
kokoro
Sakuya
sak
Koishi
koi
Remilia
remi
Mizuchi
mizu
Seija
seija
Flandre
flan
Hecatia
heca

Personnages Secondaires ou Originaux

Name
Tag
Name
Tag
Name
Tag
Name
Tag
Name
Tag
Girl
girl
Hitomu
hito
Bake-danuki
bake
Rabbit
usausa
Tengu
tengu
Kappa
kappa
Yamaraja
yamaraja
Itime-kozo
itime

La variable "tfi_official_mod_path" sert de raccourci vers le chemin menant au dossier de votre mod à partir de l'emplacement du dossier d'installation du jeu. Si vous utilisez vos propres images, cette variable vous sera bien utile. Il vous suffira de remplacer "tfi_official_mod" dans le nom de la variable par le nom de votre mod, comme précédemment, puis de mettre à jour le nom du dernier dossier dans le chemin "workshop/content/2132480/3565758917". Vous pouvez faire appel à tous les fichiers se trouvant dans le dossier "3565758917/_game_resourses" sans avoir besoin d'utiliser cette variable, du fait qu'ils fassent partie du jeu principal. Pour vos propres fichiers cependant, vous devrez l'inclure.
define mod_name_path = os.path.join(os.path.dirname(os.path.dirname(renpy.config.basedir)), "workshop/content/2132480/your_folder").replace("\\","/")
show image("[mod_name_path]/images/your_image1.png")
show image(Transform("images/backgrounds/hakurei_shrine_inter_d1.jpg", zoom=0.5))
Scènes et Lignes de Dialogues
Il est temps désormais de commencer une scène, définie par un label auquel vous devrez donner un nom unique. Jusqu'ici vous indiquiez la scène de départ en tant que "*votre mod*_scene1", remplacez maintenant le nom de ce label avec celui-ci.

Si tout est prêt, la seule chose restante est d'inventer puis d'écrire un scénario. Le texte devrait s'afficher à l'écran de manière à tenir à l'intérieur des boîtes de dialogue. Si l'identifiant d'un personnage est placé avant une ligne de dialogue, son nom s'affichera alors en plus du texte. Dans le cas contraire, seul le texte sera affiché.

Le jeu supporte également d'afficher les lignes de deux ou trois personnages simultanément. Il vous suffit pour cela d'ajouter (multiple = 2) ou (multiple = 3) à la droite d'une ligne :
rei "Bonne chance." (multiple = 2)
mar "À plus." (multiple = 2)
Images
Disons que vous avez maintenant écrit vos dialogues, mais qu'en est-il des images ? Elles sont un peu plus complexes à gérer. Nous vous recommandons de jeter un œil à la section sur le sujet dans la documentation de RenPy[www.renpy.org] si vous ne trouvez pas de réponse à vos questions dans les exemples ci-dessous.

Images de Fond et Images Statiques
Vous pouvez afficher une image à l'écran à l'aide de la commande show image("chemin vers l'image"). Puisque le jeu cible une résolution de 1920x1080 et que de nombreuses images sont crées avec une résolution supérieure, elles doivent ensuite être redimensionnées à l'aide de la commande Transform() avant de pouvoir être affichées. Nous réduisons les images d'un facteur de 0.5 pour les images de fond et certaines CGs, et de 0.6 pour les sprites, mais vous pouvez utiliser toute autre valeur selon vos besoins. Il est également recommandé d'utiliser la commande scene au tout début d'une scène, qui aura pour effet de replacer toutes les autres images.
scene image(Transform("images/backgrounds/human_village1_m.jpg", zoom=0.5))
show image(Transform(tfi_official_mod_reimu_happy, zoom=0.6))

Sprites Dynamiques
De plus, dans Touhou: Fading Illusion, nous utilisons certaines méthodes non-standard de RenPy afin d'optimiser le jeu ou d'ajouter de nouvelles possibilités. Entre autres, nous avons ajouté un calque supplémentaire où sont affichés les personnages.

Dans notre mod, vous pourrez remarquer le code suivant :
$ chars = 2
$ elems = 13
$ scale = 0.6

$ pict_ = [
["none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png",],
["none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png","none.png",],
]

$ pict_1 = [
[
"none.png",
"none.png",
"none.png",
"sprites/Sakuya/sak_body1.png",
"sprites/Sakuya/sak_body1_brow1.png",
"sprites/Sakuya/sak_body1_eyes1_d.png",
"sprites/Sakuya/sak_body1_mouth2.png",
"sprites/Sakuya/sak_body1_leftarm2.png",
"sprites/Sakuya/sak_body1_rightarm6.png",
"none.png",
"none.png",
"none.png",
"none.png",
],
[
"none.png",
"none.png",
"none.png",
"sprites/Nazrin/naz_body1.png",
"sprites/Nazrin/naz_body1_brow1.png",
"sprites/Nazrin/naz_body1_eyes5_f.png",
"sprites/Nazrin/naz_body1_mouth18.png",
"sprites/Nazrin/naz_body1_arms1.png",
"none.png",
"none.png",
"none.png",
"none.png",
"none.png",
],
]

$ xp = [111000, 111000, 111000]
$ yp = [-130, -130, -130]
$ copy()
show screen _Pers_ onlayer add_l
Ici, vous pouvez voir comment les sprites de Sakuya et Nazrin sont assemblés dans le code : nous utilisons des images superposées pour changer facilement les expressions faciales ou la position des mains. Avant d'indiquer des éléments spécifiques pour les sprites, vous devrez définir les variables chars (nombre de personnages), elems (nombre d'éléments), et scale (facteur de mise à l'échelle des sprites), ainsi qu'assigner des arrays similaires aux sprites de la variable pict_, mais avec des images "none.png".

Les positions des sprites sont définies à l'aide de deux variables – xp et yp qui contrôlent respectivement la position horizontale et verticale. Ces variables peuvent être assignées individuellement pour chaque sprite, par exemple xp[1] = …, ou pour tous les sprites à la fois en utilisant un array, par exemple xp = […, …, …].

De plus, cette méthode utilise des claques séparés pour l'affichage des sprites : "show screen _Pers_ onlayer add_l". Ce calque se trouve au-dessus du calque utilisé pour les autres images, et les sprites seront donc toujours affichés par-dessus toutes les autres images. Si vous souhaitez afficher une image par-dessus les sprites, vous devrez ajouter "onlayer add_l".

Tout ceci est cependant optionnel, et vous pouvez pré-assembler un unique sprite à partir de plusieurs couches, l'assigner à la variable pict_1 de la même façon, puis passer à un autre sprite, ou utiliser les méthodes standards de RenPy.

Le code ci-dessous montre des exemples pour changer des éléments d'un sprite ou pour afficher un sprite "complet" de Reimu en utilisant les fichiers du jeu.
$ pict_[0][4] = "sprites/Sakuya/sak_body1_brow3.png" # 4
$ pict_[0][5] = "sprites/Sakuya/sak_body1_eyes3_f.png" # 5
$ pict_[0][6] = "sprites/Sakuya/sak_body1_mouth6.png" # 6
$ pict_[0][7] = "sprites/Sakuya/sak_body1_leftarm3.png" # 7
$ pict_[0][8] = "sprites/Sakuya/sak_body1_rightarm1.png" # 8

$ pict_[1][4] = "sprites/Nazrin/naz_body1_brow3.png" # 4
$ pict_[1][5] = "sprites/Nazrin/naz_body1_eyes3_f.png" # 5
$ pict_[1][6] = "sprites/Nazrin/naz_body1_mouth10.png" # 6
$ pict_[1][7] = "sprites/Nazrin/naz_body1_leftarm1.png" # 7
$ pict_[1][8] = "sprites/Nazrin/naz_body1_rightarm4.png" # 8

hide image(Transform(tfi_official_mod_reimu_happy, zoom=0.6))

show image(Transform(tfi_official_mod_reimu_sad, zoom=0.6)):
    xalign 0.8
    yalign -0.1
with dissolve

Changements de Couleurs
Vous avez également la possibilité de changer les couleurs d'une image en utilisant la fonction blur() avec trois paramètres – teinte, luminosité, et saturation. Par exemple, blur(image, 320, 120, 100) réglera la teinte sur 320, la luminosité sur 120, et la saturation sur 100 pour cette image.
$ pict_[0][3] = blur("sprites/Sakuya/sak_body1.png", -10, -0.22, 0.9) # 3
$ pict_[0][4] = blur("sprites/Sakuya/sak_body1_brow3.png", -10, -0.22, 0.9) # 4
$ pict_[0][5] = blur("sprites/Sakuya/sak_body1_eyes3_f.png", -10, -0.22, 0.9) # 5
$ pict_[0][6] = blur("sprites/Sakuya/sak_body1_mouth6.png", -10, -0.22, 0.9) # 6
$ pict_[0][7] = blur("sprites/Sakuya/sak_body1_leftarm3.png", -10, -0.22, 0.9) # 7
$ pict_[0][8] = blur("sprites/Sakuya/sak_body1_rightarm1.png", -10, -0.22, 0.9) # 8
Effets
RenPy supporte différents effets visuels pour l'apparition ou la disparition des images. Vous avez peut-être remarqué que plusieurs des commandes dans les exemples donnés se terminent par "with dissolve". Ceci est utilisé pour que les images apparaissent ou disparaissent avec une animation de transition de 1 seconde. Il existe également une autre version, dissolve_f, qui ne dure quant à elle que 0,25 seconde et est utilisée lors du changement des éléments d'un sprite afin d'éviter de rallonger inutilement le temps de jeu. Vous pouvez créer vos propres transitions à l'aide d'une variable similaire :
define dissolve_five = Dissolve(5) # une transition de 5 secondes
Nous n'utilisons de manière générale que cela, mais vous pouvez utiliser d'autres effets qui s'appliquent de la même façon. Vous pouvez en lire davantage à ce sujet dans la documentation de RenPy[www.renpy.org].
Musique et Sons
Vous pouvez démarrer ou stopper la musique via les commandes renpy.music.play et renpy.music.stop. Après avoir indiqué le chemin du fichier, vous pouvez préciser le canal utilisé par la musique pour se jouer, ainsi qu'un effet pour adoucir le début ou la fin de la piste.
$ renpy.music.play("sounds/ambience/crowd_medium1.ogg", channel="music_2", synchro_start=True, fadein=2.0)
$ renpy.music.stop(channel="music_2", fadeout=1.5)
Il existe trois canaux pour la musique – music, music_1, and music_2, ainsi qu'un canal supplémentaire pour les sons occasionnels n'ayant besoin d'être joués qu'une seule fois – sound.
Choix
Nous avons modifié le menu standard pour les choix afin d'afficher non seulement les options possibles mais également les questions posées par le joueur. Pour afficher les questions, vous devez modifier la variable menu_question :
$ menu_question = _("Do you need an extra round?")

$ quick_menu = False
window hide dissolve

menu:
    with dissolve
    "Yes, please!":
      $ quick_menu = True
      window show dissolve
      jump tfi_official_mod_scene1
    "Nah, I got it.":
      $ quick_menu = True
      window show dissolve
Utiliser les Variables
Vous pouvez utiliser des variables pour, par exemple, suivre les choix effectués par le joueur. Les variables peuvent être du texte (= "one"), un nombre (= 1), or de la logique (= True), et vous pouvez les manipuler à l'aide de différentes conditions, telles que if ou for. Vous pouvez en apprendre plus au sujet des variables dans la section sur le sujet de la documentation de RenPy[www.renpy.org].
$ menu_question = _("Un ou deux ?")

menu:
    with dissolve
    "Un !":
      $ mod_name_player_choice = 1
      jump mod_name_scene_player_pick_one
    "Deux !":
      $ mod_name_player_choice = 2
      jump mod_name_scene_player_pick_two
if your_mod_condition == 2:
    jump destitute1_scene2_5
else:
    jump destitute1_scene1_5
Traductions
NOTE : Certains membres de notre équipe ont exprimé leur volonté de traduire, en plus du jeu principal, les mods qu'ils apprécient. Si vous êtes intéressés, vous pouvez prendre contact avec eux sur notre serveur Discord[discord.gg].

Si vous prévoyez de créer un mod disponible dans plusieurs langues, vous devrez générer des fichiers de traduction. Pour cela, il vous faudra télécharger RenPy 8.3.7[www.renpy.org], spécifier le chemin du jeu dans les options, et générer une traduction dans la langue souhaitée.
Vous pouvez traduire non seulement les dialogues mais également les variables et les noms des personnages : pour cela, mettez le texte entre des parenthèses _(...) lorsque vous déclarez la variable :
define tfi_official_mod_dev = Character(_('TFI Main Dev'))
Nous vous avertissons cependant que certaines variables peuvent causer des erreurs, et qu'il est donc recommandé de ne générer des fichiers de traduction que pour les lignes de dialogue, ce qui nécessite un identifiant de traduction, tandis que le texte traduisible est lui-même utilisé en tant qu'identifiant pour les variables.
# ligne traduisible
translate english prologue_scene_0_89ef4bf6:
    "Humanity has always been afraid of the unknown."

# variable traduisible
translate english strings:
    old "Продолжение следует..."
    new "To be continued..."
Après génération des fichiers, déplacez le dossier tl à l'intérieur du dossier de votre mod et remplissez les champs de traduction dans tous les nouveaux fichiers.
Nous vous recommandons également de créer un menu similaire au début de votre mod afin que les utilisateurs puissent savoir quelles sont les langues disponibles.
menu:
    with dissolve
    "{font=fonts/Merriweather-Regular.ttf}Я хочу играть на Русском{/font}":
      $ renpy.change_language("russian")
    "{font=fonts/Merriweather-Regular.ttf}I want to play in English{/font}":
      $ renpy.change_language("english")
    "{font=fonts/SourceHanSansCN-Regular.otf}{size=26}以简体中文开始{/size}{/font}":
      $ renpy.change_language("schinese")
    "{font=fonts/NotoSansJP-Regular.ttf}{size=26}日本語でプレイする{/size}{/font}":
      $ renpy.change_language("japanese")
Au moment de l'écriture de ce guide, le jeu supporte 9 langues différentes : Russe (russian), Anglais (english), Français (french), Espagnol (spanish), Portugais brésilien (portuguese), Chinois traditionnel (tchinese), Chinois simplifié (schinese), Coréen (korean), and Japonais (japanese). Si vous utilisez une langue dont l'alphabet ne correspond à aucune de ces langues, vous devrez inclure de nouvelles polices d'écriture dans votre mod.
Fonctionnalités Additionnelles
Utilisation de la Caméra
Puisque les personnages sont affichés sur un calque séparé, vous devrez déplacer celui-ci en même temps que le calque standard si vous voulez zoomer ou dézoomer.
camera:
    perspective True
    gl_depth True
    zpos -1100 xpos -375 ypos -380
    easein 3.0 zpos 0 xpos 0 ypos 0
show layer add_l:
    perspective True
    gl_depth True
    zpos -1100 xpos -375 ypos -380
    easein 3.0 zpos 0 xpos 0 ypos 0

Affichage de l'Heure et de la Date
Le jeu inclut une fonction pour afficher une fenêtre comprenant le lieu, la date et l'heure, si jamais votre histoire prévoit de diviser les scènes sur plusieurs heures ou jours.
$ date_place = _("Muenzuka")
$ date_date = _("17 avril 2018")
$ date_time = _("Soirée, quelques heures plus tard")
show screen date with dissolve

Écran de Chargement
Si "l'assemblage" ou les changements de couleurs des sprites sont conséquents, ils peuvent causer des délais en jeu, RenPy ayant besoin de temps pour traiter et placer toutes les images à l'écran. Pour rendre ces moments moins visibles, nous avons créé un écran de transition affichant le texte "Les filles commencent à prier...". Pour le déclencher, vous aurez besoin d'utiliser la commande show screen loading suivie par hide screen loading. Pour des transitions fluides, nous masquons puis affichons à nouveau les boîtes de dialogue à l'aide des commandes suivantes.
$ quick_menu = False
window hide dissolve

$ quick_menu = True
window show dissolve
Tester le Mod
Avant de publier votre mod, vous devez vous assurer qu'il fonctionne correctement. Le mode développeur pourra vous aider pour cela. Pour l'activer, ajoutez ce code à l'intérieur du bloc init :
define config.developer = True
define config.default_developer = True
Désormais, si vous appuyez sur les touches Shift + R, le jeu rechargera la scène au même moment à chaque fois que vous apporterez des modifications aux fichiers. Cela signifie que vous pourrez éditer votre code et voir immédiatement le résultat. Cependant, pensez à désactiver le mode développeur avant de publier votre mod.
Publier le Mod
Après avoir complété chacune de ces étapes, vous devrez :
1. Placer les fichiers du mod à l'intérieur du dossier mod de l'application de publication. N'oubliez pas l'image de prévisualisation qui doit être carrée et faire au moins 500x500 pixels.
2. Entrer toutes les informations nécessaires. Nous vous recommandons de déplacer le dossier _upload_app entier en dehors du dossier 2132480 afin d'éviter à l'avenir les conflits avec les fichiers d'autres mods.
3. Ajoutez un commentaire puis cliquez sur le bouton Submit. Toutes les informations entrées seront enregistrées dans votre fichier .workshop.json.

Si vous avez encore des questions, nous vous suggérons de les écrire en commentaire de ce guide afin que nous puissions le mettre à jour. Nous espérons que tout se passera bien pour vous, et bonne chance dans vos créations littéraires de qualité !