Aller au contenu






Photo

Les Pompes Du Patron

Posté par abg , dans Daggerfall modding 24 juillet 2012 · 810 visite(s)

Daggerfall quêtes modding template
Les Pompes Du Patron Pourquoi ce titre idiot ? La réponse est à la fin...

Je dois dire que je trouve extrêmement confortable ce travail n'impliquant que des outils légers et en maniant des fichiers de quelques Ko. C'est très rafraichissant quand on a connu les usines à gaz des TESC/GECK et autres CK.
En contre-partie, Daggerfall ne permet pas la finesse de travail autorisée par les nouveaux jeux. On ne passera pas l'après-midi, par exemple, à aligner des couverts sur une table. Du moins pas à ce stade (il faudrait hacker d'autres fichiers).
On se concentre sur l'essentiel, sur l'histoire, qu'il s'agisse d'une péripétie insignifiante ou qu'il s'agisse d'une grande aventure épique !

Maintenant que nous avons décrypté le nommage des fichiers quêtes (voir le billet précédent), nous pouvons réserver un identifiant pour une nouvelle quête.
Ce sera M0C00Y24
  • M0 car c'est une quête de la Guilde des Guerriers
  • C  car tout le monde peut l'obtenir, membres ou non
  • 00 car elle ne pose pas un seuil de réputation
  • Y  car elle est remise de façon standard par un donneur de quête
  • 24 car j'ai arbitrairement choisi ce numéro, revendiqué par aucune quête, packs connus inclus

Image IPB


Nous pouvons commencer à éditer le fichier source. Comme c'est du texte brut, n'importe quel éditeur de texte conviendra.
M0C00Y24.src

Les commentaires sont précédés de deux signes "-"
-- Ceci est un commentaire

Un source template se compose de 3 grandes sections :
  • Un en-tête
  • La section "QRC:" contenant l'ensemble des textes maniés par la quête (demande initiale, entrées journal, dialogues, lettres et notes, messages affichés à l'écran...)
  • La section "QRN:" qui décrit la logique de la quête.
Un en-tête de quête

-- Quest: C:\Jeux\DAGGER~1\arena2\M0C00Y24.Qbn.
-- StartsBy: NPC
-- Questee: anyone
-- Questor: fighter
-- Repute: 0
-- QuestId: 24

-- Pompes & Poivrots

Messages: 61
Quest: M0C00Y24

Les premières lignes (commentées) sont parfaitement optionnelles. Elles ne font que reprendre les informations déjà contenues dans le nom de fichier. Elles sont aussi automatiquement générées par Template lorsqu'on désassemble une quête.

La ligne "Messages: xx" est une réservation nécessaire à Template. Elle lui indique combien notre quête comportera de panneaux de messages (et autres dialogues). Il ne faut donc pas hésiter sur-évaluer ce nombre.

La section QRC:

Contient donc les messages.
Ceux-ci sont numérotés à partir de 1000 (convention). Certains de ces numéros sont réservés à des fonctions standards dans la quête. Chaque bloc est suivi d'une ligne vide.

QuestorOffer:  [1000]
L'offre initiale. Souvent une sorte de teasing

RefuseQuest:  [1001]
Ce que dit le "questor" (donneur de quête) si on lui répond non

AcceptQuest:  [1002]
Le PJ a dit oui. Généralement on met là les instructions de quête.

QuestFail: [1003]
Un message s'affichant si la quête est un échec (souvent par time-out), lorsqu'on retourne voir le questor.
(nb : Il y a une erreur dans questing.html. C'est bien "QuestFail" et non "Questfailed"...)

QuestComplete: [1004]
Le message de félicitations du questor, lorsqu'on retourne le voir

RumorsDuringQuest: [1005]
Des rumeurs apparaissant en dialoguant avec les PNJs, sous le topic "Infos ? / Any news ?"

RumorsPostfailure: [1006]
La même chose mais après un échec de quête

RumorsPostSuccess: [1007]
Toujours les rumeurs, mais cette fois vous avez réussi. Daggerfall accorde une bonne place à ces potins de la rue, echos des aventures du PJ. C'est même une grande force du jeu que cette capacité à commenter les faits et gestes du PJ...

QuestorPostSuccess: [1008]
Le "greeting" du questor, qu'il vous servira lors de vos prochaines rencontres, dans la fenêtre de dialogue.

QuestorPostFailure: [1009]
Le "greeting" du questor. Mais cette fois il n'est généralement pas content.

QuestLogEntry: [1010]
La première entrée journal. En général elle récapitule les tâches à accomplir et les informations initiales. L'usage est de commencer par un placeholder %qdt afin de dater l'entrée journal.
QuestLogEntry: 	[1010]
%qdt
_questgiver_, de la Guilde des Guerriers de __questgiver_ m'a demandé de détruire la liche _monster_,
au fond de son repaire de _donjon_.
Elle fait cailler le lait des élevages des alentours...
J'ai _delai_ jours pour accomplir cette tâche.

QuestTimeLapse: [1045]
Un panneau de texte s'affichant lorsque le délai de la quête est écoulé. Peu de quêtes l'utilisent mais ça peut être un enjolivement utile...

On peut après cela créer autant d'entrées supplémentaires qu'on le souhaite. Template en supporte jusqu'à 1100, mais c'est une limitation arbitraire (au-delà, dit Donald Tipton, ce n'est plus une quête mais un nouveau jeu !)
Message: 1020

Message: 1030

...etc.
Template accepte plusieurs formulations :
- On peut se contenter de numéroter :
Message: 1010
%qdt
J'ai une petite course a faire pour _questgiver_.
Je dois aller chercher ses bottes !
Il les a oublie a _bistro_.

Message: 1015
C'est donc ici que le patron a perdu ses bottes.
Je dois les récuperer...
- On peut créer des étiquettes arbitraires :
Colere:	 1050
<ce>Vous êtes un imbécile %pcn !
- On peut même oublier le numérotage. Dans ce cas Template le reconstitue en incrémentant de 1 à chaque nouveau message
Final:
<ce>Gloire à vous %pcn, pour avoir vaincu le _monster_ malfaisant !

Recompense:
<ce>Voici la récompense qui vous avez été promise : _reward_ pièces d'or !
<ce>Ne dépensez pas tout à la fois...

Veuillez juste sauter une ligne entre chaque message.

La balise <ce> sert à centrer un texte dans une boîte de dialogue.
Les textes peuvent comporter différents "placeholder" comme :
%pcn : le nom complet du PJ
%ra : sa race
%qdt : la date du jour
Le jeu en reconnaît un grand nombre, des plus utiles aux plus anecdotiques comme :
%jok : Une plaisanterie piochée au hasard dans la banque de dialogues générale du jeu (fichier arena2/text.rsc)
ou
%god : Une divinité aléatoire

Liste de ces variables : http://www.uesp.net/...uide#Appendix_A

Enfin, chaque panneau de texte peut proposer plusieurs variantes. Le jeu choisira (au hasard) quelle variante utiliser. C'est un bon moyen pour améliorer la rejouabilité d'une quête.
On sépare alors les variantes par une ligne <--->. Comme ceci :
RumorsDuringQuest: [1005]
Cet imbecile de _questgiver_ a encore perdu ses grolles !
<--->
_questgiver_ est un poivrot notoire. Un jour on le retrouvera noyé dans un fosse !

La section QRC: de ma quête idiote du jour :

Spoiler

La section QBN:

Et c'est là que ça devient nettement plus compliqué !

Cette section se subdivise elle-même en deux sous parties :
  • La déclaration des ressources
  • Les opérations logiques
Les ressources comprennent la réservation des éléments requis pour la quête. Nous y déclarerons des choses telles que
  • Les PNJs impliqués
  • Les objets de quête
  • Les lieux
  • La déclaration des "horloges" pour mesurer le temps (ce qui nous servira par exemple à clôturer la quête si le PJ a trop lambiné, ou bien encore à "scheduler" un PNJ, à déclencher toutes sortes d’événements à retardement...)
Pour les besoins de ma quête (aller chercher les bottes que le patron a oublié à l'auberge), j'ai besoin de définir cinq ressources ou "symboles" :
Person _questgiver_ group Questor male

Place _bistro_ local tavern

Item _grolles_ boots
Item _recompense_ gold range 20 to 20

Clock _delai_ 1.00:00 0 flag 1 range 0 1
Un donneur de quête
Un lieu local où placer l'objet de quête
Un objet de quête
Une récompense (proportionnellement aussi mesquine que la quête est insignifiante)
Un timer qui ici servira à définir le délai accordé au PJ pour accomplir la quête.

Je n'ai pas encore su définir si le donneur de quête devait obligatoirement appartenir au groupe "questor"...
L'endroit : Comme on ne souhaite pas envoyer le PJ au diable vauvert, on le choisi comme "local" (dans la ville courante).
Si nous avions voulu envoyer le joueur à perpette :
Place _bistro_ remote tavern
Ou pire :
Place _bistro_ remote dungeon
Voir même (Mais là ça devient vache...) :
Place _bistro_ permanent DirenniTower

(Notez que la liste des lieux "permanents" est relativement courte, elle ne contient que des lieux liés à la MQ de Daggerfall. Donald Tipton donne cependant une astuce pour l'étendre dans cet article.)

Daggerfall utilise, pour nommer les symboles, une convention assez astucieuse :
_pnj_ : (un seul underscores) renvoie au nom d'un pnj
__pnj_ : (deux underscores) donne le nom du bâtiment où il habite par défaut (si la quête ne le déplace pas par la suite)
___pnj_ : (trois underscores) donne le nom de la ville
____pnj_ : (quatre underscores) donne le nom de la province
=pnj_ : la courte description visuelle (issue du fichier arena2/flats.cfg)
==pnj_ : la classe du PNJ.

Ce systéme de poupées russes peut s'utiliser pour tous les symboles. Par exemple :
Place _bistro_ remote tavern
définit un bâtiment. Mais en l'écrivant sous la forme
__bistro_, j'obtiens la donnée parente, à savoir le nom de la ville où se trouve le bâtiment...


Après la déclaration des symboles ressources, vient la partie du source consacré aux tâches que devra gérer la quête :
--	Quest start-up:
-- Ces quatres premières lignes n'ont pas à être encapsulées dans un symbôle de tâche
-- Ce sont 4 actions inconditionnelles qui seront automatiquement exécutées au démarrage de la quête.
-- La dernière ligne ligne déclenche la première tâche à surveiller

	start timer _delai_
	log 1010 step 0
	place _grolles_ at _bistro_
	pc at _bistro_ set _michemin_

--	Taches que doit accomplir le PJ

_michemin_ task:
	say 1020

_delai_ task:
	end quest

_questdone_ task:
	toting _grolles_ and _questgiver_ clicked
	give pc _recompense_
	end quest


Chaque tâche est définie par un nom suivi du mot-clef "task:"
Par exemple :
_questdone_ task:
	toting _grolles_ and _questgiver_ clicked
	give pc _recompense_
	end quest
Peut se lire comme :
La tâche _questdone_ consiste en :
  • se pointer devant le questor en trimballant les bottes
  • recevoir la récompense
  • clôturer la quête.
end quest
provoque le grand coup de balai final : les symboles _ressources_ sont détruits (les pnjs disparaissent, les objets de quête, sauf l'or, sont détruits (sauf si on les a rendu permanent, ce qui heureusement possible notamment pour les quêtes d'artefacts !)...

Toute tâche est exprimée de façon positive et en considérant qu'elle sera exécuté une fois lorsque les conditions sont remplis. Ici les conditions sont exprimées par la ligne :
	toting _grolles_ and _questgiver_ clicked

Ce canevas de quête insignifiante peut se réutiliser bien entendu pour toutes sortes de choses. A commencer par des scénarios de quêtes plus épiques : "Retrouver la dent de lait de Sainte Vertudine, relique sacrée perdue au fond du repaire de la Morkitu, liche bien connue." s'écrirait exactement de la même manière !

En pièces jointes, la quête du jour (Pompes&Poivrots) et celle du billet précédent (Trois diablotins et un tonneau de bière).
Installation : Balancez les fichiers *.qrc et *.qbn dans votre dossier arena2. C'est tout !

Fichier(s) joint(s)






Mise à jour des fichiers joints :
- Correction d'une petite coquille dans la quête des trois diablotins
- Ajout de "lisezmoi.txt"
- Support des caractères accentués (PFD0.27 et ultérieur)

Ancestral Ghost
31 juil. 2012 - 16:53
Hum, très intéressant, il faudra que je test ça un de ces jours.

Les Terres Cendres : Présentation

Image attachée

Les Terres Cendres est le blog dédiés aux anciens TES. On y trouve notamment les informations sur divers projets :


Le Projet French Daggerfall : Traduction en français de Daggerfall.


Le projet DaggerfallSetup : Installation de Daggerfall sur PC.


Le projet ArenaSetup : Installation d'Arena sur PC.

Derniers billets

Derniers visiteurs

  • Photo
    pac_na
    04 juil. 2018 - 09:48
  • Photo
    Azgarmoth
    04 juin 2018 - 07:28
  • Photo
    Svartalfar
    01 juin 2018 - 23:30
  • Photo
    Nehluxhes
    19 avril 2018 - 23:21
  • Photo
    Kilfronia
    04 avril 2018 - 00:37