Créer une mission pas à pas (Komag)

Les zones
Les textures
La skybox
Eau et brouillard
Détails et optimisation
Le son
Les livres
Les scripts
Préparation de la mission
Objectifs - partie 1
Objectifs - partie 2
Mise au point finale et emballage
Appendices

Introduction
Comment installer l'éditeur
S'assurer que tout fonctionne
Fonctions de base
La première pièce (ou room)
Création d'un inventaire
La lumière
Les static meshes
Développement de la zone
Ai, patrouille et navmesh
Le butin
Les portes
Rampes, escalier et échelles

Sommaire détaillé


Objectifs - partie 1

(Komag -- tr : Stefan Key)

Attention ! Komag indique qu'il n'a pas terminé la rédaction de ce tutoriel, et qu'il peut donc contenir des erreurs.

Pré-objectifs

Avant de commencer, vérifiez le fichier user.ini (se trouvant dans le dossier de Thief3Edit). Si vous ne voyez pas ces lignes, rajoutez-les :
[Conversations]
SchemaChangesAllowed=true

Cela va vous permettre de faire les changements ci-dessous, qui vont vous permettre d’avoir des objectifs.

On va travailler avec les “Conversations”, ou une variante de scripts. Certaines conversations sont des dialogues d’Ai, mais pas celles que l’on va voir. Ce ne sont que des séries d’instructions que le jeu utilisera pour déclencher/suivre les objectifs.

On va mettre en place aussi des “TriggerScripts" pour aller avec les conversations.

Deux types d'objectifs

En premier lieu, quand on pense à des objectifs dans le jeu, cela se résume aux objectifs principaux comme voler un certain objet ou déclencher une action spécifique durant la mission

Mais il y a un autre type d’objectifs qui est déterminé par le niveau de difficulté. Comme par exemple, le pourcentage de butin requis, le nombre d’objets spéciaux à voler, etc…

Les méthodes pour mettre en place ces deux types d’objectifs sont bien différentes l’une de l’autre.

Nous allons paramétrer deux objectifs spécifiques, mais seul le premier sera visible tout d’abord. Le second objectif (s’échapper) apparaîtra quand le premier sera accompli.
- Voler la statuette de l’Aigle
- S’échapper par les égouts (caché)

On aura aussi quelques notes, la deuxième note apparaîtra à un certain moment, si c’est encore nécessaire.

Le plan

C’est une bonne idée de prévoir à l’avance ce que vous voulez faire avec vos objectifs. Rappelez-vous ce motto : une bonne préparation assure de bonnes performances.

Voici le plan un peu plus détaillé :

La mission sera très simple, le seul objectif que le joueur verra est celui de voler la statuette de l’aigle. Il y aura aussi une note précisant que ce sera facile et qu’il y a très peu de gardes.

Si le joueur fonce droit vers le coffre qui contient la statuette, il constatera en le touchant qu’il est verrouillé et «incrochetable».

Sur un bureau proche, le joueur pourra lire le journal d’un noble où il écrit qu’il a fait faire une serrure spéciale et qu’il a la clé toujours sur lui, qu’il passe la plupart de son temps dans la crypte familiale, pleurant la perte de ses trois fils. A ce moment-là, une nouvelle note apparaît racontant que le noble a toujours la clé sur lui et qu’il est peut-être dans la crypte.

Après que le joueur a trouvé la crypte, volé la clé du noble, est revenu pour ouvrir le coffre et prendre la statuette, l’objectif caché apparaît indiquant que la statuette est trop voyante dans la rue et qu’il devra revenir par les égouts.

Mais que se passerait-il si le joueur va d’abord dans la crypte et prend la clé avant de lire le journal ? Il serait idiot de faire apparaître la note indiquant où se trouve la clé plus tard. On devra indiquer que la note ne doit pas apparaître si le joueur a déjà la clé.

Enfin, lorsque le joueur retournera au starting point dans l’égout, le second objectif sera rempli et la mission finira. Mais il faut s’assurer que l’objectif ne se coche avant le vol, le joueur faisant des va-et-vient incessants sur le starting point.

Lancez T3Ed !

Charger des sauvegardes

Si vous avez suivi à la lettre ce tuto, vous avez sauvegardé la mission sous le nom “KomagTut.unr” sans aucun numéro (comme “KomagTut42.unr”, par ex).

Mais juste avant, vous avez sauvegardé AVEC un numéro. Quand vous chargez une map, vous chargez celle avec le dernier numéro, comme c’est exactement la même que celle sans numéro.

Ainsi vous êtes sûr que celle avec le numéro est toujours la plus récente ; vous ne vous embrouillez pas de savoir si la plus récente est celle qui est avec ou sans numéro.

C’est une bonne habitude à prendre, surtout dans les dernières étapes de création d’une mission. Toujours sauvegarder en premier avec un numéro pour les tests puis de sauvegarder sans numéro.

Si vous sauvegardez sans numéro et que tout à coup, vous vous souvenez que vous devez ajouter/éditer quelque chose, sauvegardez immédiatement après avec un numéro puis sans numéro. C’est une petite corvée mais ça vous épargnera des maux de têtes suite à de mauvaises manipulations de sauvegardes/d’édition.

Ajouter un objectif

Commençons par l’objectif “Voler cet objet”, pour nous, c’est “Volez la statuette de l’aigle”.

Sélectionnez “View” – “Level Properties” – “Properties” – “LevelInfo” – “Conversation Package”, puis tapez “KomagTut”.

Sélectionnez “View” – “Conversations” pour ouvrir le Conversation browser. (cela peut prendre un peu de temps, patientez un peu)

Trouvez et sélectionnez “PlayerGarrett” dans l’arborescence, puis faites un clic droit dessus et sélectionnez “Add Conversation”.

Dans “Conversation Name”, tapez “KomagTutObjectives”.

Mettez une coche à côté de “Remain in First Person”.

En bas, sur la gauche, cliquez sur le bouton “Add Map” et tapez “KomagTut” (le même que dans “Conversation Package”). Cliquez sur “Add Map” à droite. Puis sélectionnez “KomagTut” et cliquez sur “OK”.
Le nom de la map “KomagTut” apparaît dans la fenêtre “Usage”. Cliquez sur “OK”.

Sélectionnez la nouvelle conversation (sous la catégorie PlayerGarrett ).

Dans la grande fenêtre blanche à droite, faites un clic droit puis “Add” – “Goal”

Tapez le nom de l’objectif, un descriptif de l’item que vous voulez voler ; dans ce cas, “obj_StealHawkStatuette” ira très bien.
Toujours se souvenir exactement des noms des objectifs (écrivez-les quelque part), pour plus tard.

Laissez les sélections “Initial State” à “Pending” et “Objective”. Décochez l’option “Do this objective last”(ce n’est pas notre dernier objectif).

Ecrivez le texte de l’objectif (Goal text) que vous voulez. Il ne faut pas qu’il soit trop long, mais plus de trois mots aussi pour le rendre intéressant.
- “Volez la statuette” n’est pas terrible… alors que…
- “La soeur de votre ami Basso a toujours lorgné sur la statuette d’aigle en argent de Lord Bartholemew. Si vous vous en emparez pour lui offrir, vous pourrez peut-être retomber dans ses bonnes grâces.” …est bien meilleur !

Quand vous avez fini, cliquez “OK”. (un peu de temps, soyez patient.)

Encore des objectifs

Ajoutez un autre objectif :
- Appelez-le “obj_EscapeToSewer”
- Laissez la coche “Do this objective last” (c’est le dernier objectif)
- Mettez “Initial State” à “Hidden” et “Objective”.
- Dans “Goal Text”, tapez “La statuette de l’aigle est plus voyante et plus grande que vous ne le pensiez. Traverser les rues avec elle serait trop risqué, échappez-vous par les égouts.”

Ajoutez un autre objectif :
- Appelez-le “obj_NotePlan”
- Enlevez la coche de “Do this objective last”
- Mettez “Initial State” à “Pending” et “Note”
- Dans “Goal Text”, tapez “Un simple vol, peu ou pas de gardes et des ruelles bien sombres dans le quartier.”

Ajoutez un autre objectif :
- Appelez-le “obj_NoteKey”
- Enlevez la coche de “Do this objective last”
- Mettez “Initial State” à “Hidden” et “Note”
- Dans “Goal Text”, tapez “Bartholemew garde toujours la clé du coffre sur lui, il se trouve souvent dans la crypte familiale de sa propriété.”

Enfin, dans la fenêtre, faites un clic droit et sélectionnez “Add” – “End”.
Il faut que “End” soit tout en bas. Si vous rajoutez des objectifs plus tard, il faudra déplacer “End” pour qu’il soit tout en bas.

Dans le menu, faites :
- “File” – “Save”
- “File” – “Compile” (cliquez “Oui”).
- “File” – “Export Mission Objectives”

Fermez le “Conversation Editor”.

Script des objectifs

Il faut paramétrer la map pour que la conversation des objectifs fonctionne dès que la map commence.

Sélectionnez “PlayerStart” (lequel ? L’un ou l’autre ?), ajoutez “Properties” – “Scripts” – “TriggerScripts”, cliquez sur “Add” puis sur les “…” dans la liste.

Faites un nouveau script (soyez organisé, faites-le dans le dossier “KomagTut” !), nommez-le “ObjectivesStart”.

Dans “Conditions”, sélectionnez “Scripts” – “When map starts, arriving from a different map”.
Ne sélectionnez pas “Scripts” – “When map sim starts, either from travel, load, or launcher” ou “Player” – “When player starts map”, car ces conditions vont exécuter les scripts à chaque fois que la map commence, même après le chargement d’une sauvegarde ou autre, ce qui remettra les choses à zéro. Les scripts des objectifs ne doivent être lancés qu’une seule fois et c’est tout.

Dans “Actions”, sélectionnez “Conversations” – “Queue conversation [string] to play”

Cliquez sur “[String]” puis tapez (ou sélectionnez, s’il y est) le nom de la conversation que vous avez mis pour les objectifs, “KomagTutObjectives”.

Cliquez sur “OK” pour sortir du script editor. Le script manager étant toujours ouvert, sélectionnez le nouveau script créé. Puis cliquez “OK” en dessous pour fermer le Trigger Script Manager puis sauvegardez, compilez les scripts encore une fois (cela prend un peu de temps ; attendez la fin).

Dans les propriétés de “PlayerStart” sous Scripts, trouvez la ligne vierge du script indiquant “None” puis cliquez sur “Use” à droite. Le nom du nouveau script (“ObjectivesStart”) apparaît.

Tester et réparer

Pour tester les objectifs, il faut entrer dans notre map par une autre map, ce sont les conditions que vous avez mises dans le script. Il faut utiliser entry.gmp puis téléporter dans notre map, on la commence (“arriving from a different map”). Voilà pourquoi on a édité la map entry dans la partie Préparation de la mission.

Faites un Build, sauvegardez la map avec un numéro, puis en “KomagTut.unr”, exportez-la pour faire le gmp, fermez T3Ed, allez dans Thief3Edit\System, et exécutez T3.exe ou T3Main.exe.

Quand vous sélectionnez “New Game”, vous voyez l’objectif primaire et la note. Vous ne voyez pas l’objectif caché, ni l’autre note.

Si vous avez des cases vides et pas de texte d’objectifs, essayez ces solutions :
- Ouvrez le conversation editor (“View” – “Conversations”), puis sélectionnez votre conversation. Faites “File” – “Generate Schemas” (attendez une éternité pour la fin)
- Puis “File” – “Repair Schemas”, puis “OK”, ensuite “Yes”.
- Enfin, Save, Compile, et Export Mission Objectives une fois de plus.
- C’est un problème commun qui a plusieurs causes et qui apparaît de façons diverses.

Si cela ne marche toujours pas, essayez de demander de l’aide sur les forums Thief du ttlg.com ou du forum francophone.

Script pour prendre un objet

En jouant à votre map, vous avez sûrement remarqué que vous ne pouvez pas remplir l’objectif.

Ajoutez une statuette à la map si ce n’est pas déjà fait, “Actor Class Browser” – “WorldObj” – “InventoryObject” – “Loot”.

Sélectionnez-la et ajoutez la propriété “Scripts” – “TriggerScripts”. Dans la partie des nouveaux scripts, cliquez sur “Add” à droite, sur la liste, cliquez sur les “…” pour ouvrir le script manager.

Faites un nouveau script, appelez-le “HawkStatuetteStolen” ou “StatuetteTheft”, ou autre.
- Le nom n’est que pour vous, pour que vous sachiez ce que c’est ; il n’est pas obligatoire qu’il corresponde à un autre nom ou paramètre.
- L’idée est que le script sera exécuté quand le joueur prendra la statuette.

Dans “Conditions”, ajoutez “Frob” – “When I am frobbed by player”

Dans “Action”, ajoutez “Goals” – “Set Goal [String] to [Enum:eGoalState]”

Cliquez sur “[String]”, tapez le nom exact de votre premier objectif qui est “obj_StealHawkStatuette”

Cliquez sur “[Enum:eGoalState]” et sélectionnez “kGS_Success”. - Ce qui veut dire que lorsque vous prenez l’objet auquel le script est attaché (la statuette), votre objectif (Voler la statuette) sera atteint.

Ajoutez une autre Action à ce script, “Goals” – “Set Goal [String] to [Enum:eGoalState]”, mais cette fois, mettez “obj_EscapeToSewer” dans “[String]” qui est votre second objectif, puis mettez “[Enum:eGoalState]” à “kGS_Pending”.
Et en même temps, le second objectif apparaît (aller dans les égouts pour s’échapper).

Cliquez “OK”, sélectionnez le nouveau script, puis cliquez “OK” en dessous pour sauvegarder et fermer les scripts (et attendre…).

Dans les propriétés de la statuette, trouvez la nouvelle ligne du script, cliquez sur “Use” à droite, et le nom du nouveau script apparaît (“HawkStatuetteStolen” ou “StatuetteTheft”).

Faites un Build, sauvegardez avec un numéro, puis en tant que “KomagTut”, exportez, fermez l’éditeur, exécutez Thief3Edit/System/T3.exe et regardez si ça fonctionne.

Quand vous saisissez la statuette, le message “Objective Complete” apparaît avec le son «d’accomplissement». Vous avez aussi le “New Objective”. Jetez un coup d’œil à vos objectifs : le premier est coché et un nouveau a fait son apparition.

Script pour endroit spécial

Paramétrons le deuxième objectif, “S’échapper par les égouts”.
- Tout objectif ayant trait à rejoindre un endroit particulier doit être fait en utilisant des volumes.
- Vous devrez simplement paramétrer un volume avec un script qui se déclenchera dès que Garrett entrera dans le volume (il y a d’autres paramètres que vous pouvez choisir aussi, comme lorsqu’il sort du volume).

Ramenez le builder brush, donnez-lui la forme d’un cube de taille assez normale. Puis créez le volume en cliquant sur le cube bleu de la section «CSG operations» “Volume” puis sélectionnez “Volume” en haut de la liste.

Déplacez le builder brush très loin, sélectionnez le volume, placez-le près de la zone d’entrée de votre map (la fin du tunnel dans la partie égout).

Ce n’est pas nécessaire que le volume soit aligné, ne l’alignez pas avec les murs car il sera diffcile à sélectionner. Enfoncez cette petite zone de quelques pieds, peu importe si ses côtés dépassent un peu.

Sélectionnez le volume, ajoutez la propriété “Scripts” – “TriggerScripts”, faites “Add” pour ajouter un script, cliquez sur les “…”. Créez un nouveau script, nommez-le comme vous voulez (par ex. “SewersEscape”).
- Ajoutez la condition “Volumes” - “When linked volume(s) [LinkFlavor] are breached by [Enum:eObjectCategory]”.
- Changez le “[LinkFlavor]” à “[MYSELF]” et le “[Enum:eObjectCategory]” à “[Category_Player]”.
- Ajoutez la grande condition “Query if all goals are completed or cancelled, exclude hidden [Bool] ? include ‘do last’ goals [Bool] ?”.
- Changez le premier “[Bool]” à “[TRUE]” et le deuxième à “[FALSE]”
- Ajoutez l’action “Goals” - “End Mission [Bool] successfully” et mettez “[TRUE]”.
- Ajoutez l’action “Goals” – “Set goal [String] to [Enum:eGoalState]”.
- Changez le “[String]” à “obj_EscapeToSewer”, et changez “[Enum:eGoalState]” à “kGS_Success”.
- Ajoutez l’action “Scripts” – “Reset script conditions and actions”.

En ayant le nouveau script sélectionné, cliquez sur OK pour la sauvegarde puis exit le Trigger Script Manager (parientez…). Puis faites “Use” pour utiliser le script dans les propriétés du volume.

Faire en dernier

Dans le Conversation Editor, nous avons mis cet objectif à “Do this objective last” (Faire cet objectif en dernier). Mais ce paramètre seul ne suffit pas pour éviter les problèmes (le joueur peut atteindre l’objectif trop tôt).

Maintenant, grâce au script que nous avons mis en place, le paramètre “Do…last” peut fonctionner correctement. Une des conditions est de vérifier si tous les objectifs sont atteints (et de faire les actions, s’ils sont atteints) mais de ne pas vérifier si oui ou non un objectif de type “Do this objective last” est atteint. C’est sensé car comment voulez-vous terminer la mission si vous devez atteindre l’objectif «s’échapper» avant d’être autorisé à atteindre l’objectif “s’échapper” ?!?

Comme nous avons l’objectif “s’échapper” comme un objectif “do last”, le script lui permet d’être inachevé mais le script s’assurera que tout le reste est atteint et ENSUITE il fera les actions, une des actions est de mettre l’objectif “s’échapper” en “atteint”.

Tous les objectifs que vous avez mis dans le Conversation Editor apparaîtront dans l’ordre que vous leur avez donné, sauf le “Do this objective last” qui sera en dernier, même si vous l’avez entré en premier ou au milieu de la liste.

Essayez dans le jeu. Les objectifs marchent à merveille, après avoir volé la statuette, vous revenez vers l’égout et vous avez le message vous demandant si vous voulez terminer.
- Si vous dites non, vous pourrez aller vous balader ailleurs puis revenir et revoir le message (l’action “Reset” du script le fait répéter à l’infini…).
- Si vous dites oui, vous lirez le debriefing et vous sentirez la joie du travail bien fait !

Le flag system

Nous avons encore à paramétrer les notes et le couple «coffre verrouillé avec une clé».

Ajoutez un coffre, verrouillez-le, paramètrez-le pour qu’il corresponde à une certaine clé. Mettez la statuette à l’intérieur.

Ajoutez un nobleman (aristocrate avec une barbe, ou autre), attachez la clé à sa ceinture, faites-le patrouiller dans la crypte (agrandissez la zone de la crypte si nécessaire).

Allez dans “View” – “Global Variables” – “Flags”. Une fenêtre “Flag List” apparaît, elle est très simple, c’est une liste de flags utilisés dans les missions.
- Tout ce que vous pouvez faire ici, c’est “Add” (ajouter) ou “Delete” (effacer) des flags.
- Si vous allez faire une grande mission complexe ou une campagne, vous allez sûrement effacer tous les flags d’origine pour éclaircir votre plan de travail.
- Mais si vous n’allez faire qu’un, deux ou trois flags, laissez comme cela.

Tapez dans le champ tout en haut “KOMAG_KeyTaken” (ou autre chose) puis cliquez sur “Add” pour créer le nouveau flag.

Script sur la clé :
- “Conditions – “When I am frobbed by player”
- Actions – “Set flag [KOMAG_KeyTaken] to [TRUE] expires on map change [FALSE] expires on mission [1]”.

Script de la note, écrite dans le journal du noble :
- Conditions – “When I am frobbed by player”
- Conditions – “Query if flag [KOMAG_KeyTaken] is set to [FALSE]”
- Actions – “Set goal [obj_NoteKey] to [kGS_Success]

Cela vérifie le flag, s’il est faux alors il fait apparaître la nouvelle note. Mais si le flag est vrai (si la clé a déjà été volé), il ne fait rien.

Retour en haut

Tutoriels sur T3ed
t3ed.tutoriel.free.fr