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
(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.
Tutoriels sur T3ed
t3ed.tutoriel.free.fr