Différences entre les versions de « Daggerfall : Création de quêtes »

De Wiwiki
Aller à la navigation Aller à la recherche
m
m
Ligne 358 : Ligne 358 :


=Organisation d'une quête=
=Organisation d'une quête=
The source file created by the quest decompiler is divided into three parts:
*Quest preamble
*Qrc text blocks
*Quest resources and operation (Qbn)
which are discussed subsequently.
=Préambule d'une quête=
=Préambule d'une quête=
The quest preamble lays out the general requirements of the quest: who offers it, who can receive it, how it is started, etc. The purpose of this preamble is to collect the information required to fabricate a standard quest file name pattern. There are two ways to do so, concisely or verbosely.
Quest: pattern
where ''pattern'' is the desired quest file name pattern. For example
Quest:  b0c00y13
Alternately, the pattern can be inferred by the compiler from the following verbose descriptions. Case is insignificant.
StartsBy: [Letter | NPC]
Indicates whether the quest starts by the player character receiving a letter or by contacting an NPC (non-player character) in the game.
Questee: [Initiate | Member | Anyone]
Indicates what general relationship the PC must have with respect to the NPC / group that offers the quest.
Initiate Initial invitation to join
Member PC must be a member of this group
Anyone Anyone may be offered this quest
Questor: quest grantor or single letter key
The questor is the group, guild, or daedra prince which offers the quest. It can be specified by single letter key (as used by the quest file name pattern) or by the proper name of the group, taken from the following list:
{| border="1"
! Questor
! Key
! Ids[1]
! Questor
! Key
! Ids
! Questor
! Key
! Ids
|-
|Akatosh || D || 0 || Lady Azura || T || 0 || Peasant || A || 0-18
|-
|Arkay || E || 0 || Mage || N || 1-18 || Peryite || 5 || 0
|-
|Boethiah || U || 0 || Main || S || [2] || Royalty || R || 0-28
|-
|Brotherhood || L || 0-11 || Malacath || 8 || 0 || Sanguine || 7 || 0
|-
|Clavicus Vile || V || 0 || Mara || H || 0 || Sheogorath || 6 || 0
|-
|Dibella || F || 0 || Mehrunes Dagon || Y || 0 || Stendarr || I || 0
|-
|Fighter || M || 0-19 || Mephala || Z || 0 || Temple || C || 0-15
|-
|Hermaeus Mora || W || 0 || Merchant || K || 0-10 || Thief || O || 0-12
|-
|Hircine || X || 0 || Meridia || 1 || 0 || Vaernima || 9 || 0
|-
|Julianos || 0 || 0 || Molag Bal || 2 || 0 || Vampire || P || 0-10
|-
|Knight || B || 0-17 || Namira || 3 || 0 || Witch || Q || 0-8
|-
|Kynareth || G || 0 || Nocturnal || 4 || 0 || Zenithar || J || 0
|}
[1]See QuestId: below. CompUSA quests are included.
[2]Main story numbers in use are 1-22, 100-107, 500-503, 977, 988, and 999.
Again, case is not significant. Space, for those daedra princes with two names, is. Main refers to the main story quests.
Questor: Arkay
indicates a quest offered by the temple of Arkay, for example.
Repute: mm
The repute is the minimum repute the PC must have with respect to the group / prince offering the quest. It can also indicate a range of reputes for which the quest is offered.
If ''mm'' is strictly numeric, then it indicates the minimum repute the PC must have, with 0 being the smallest repute and 99 the largest.
Quests can be restricted to a particular decade of the PC's repute with the questor by writing the units digit as the letter x.
Repute: 3x
limits the quest to PCs whose repute is between 30 and 39 with the questor.
QuestId: nn
X-engine expects every quest associated with one of the questor groups to have a unique two-digit serial number assigned to it.
QuestId: 17
assigns 17 as the quest id in the file name pattern for the quest.
If the quest preamble describes a quest that already exists, the compiler will replace the original contents of that quest with the new contents from this source file.
If that quest does not already exist, the compiler will create a new Daggerfall quest for it.
Please see the table of guilds/questors for the quest ids already in use by the game.
Messages: aNumber
The quest compiler needs to know approximately how many message blocks will be recorded in the Qrc file before it begins processing. By default it reserves space for 50 message blocks. If the quest scenario supplies more than 50 messages, the compiler needs to be told the number of messages to expect with this directive.
The decompiler now automatically includes this directive when it decompiles a quest, as a convenience for recompiling quests. However, adding additional messages to existing quests may bump into the message count limit. The limit need not be exact, just more than enough.
AllowDupes:
Some existing quests from Bethesda have Qrc files that contain duplicate message block numbers. This is arguably wrong when you're creating a fresh quest, and the compiler normally smacks you if you try to do such a thing. But to allow the existing quests to recompile without trying to figure out which text block is the valid one--good luck--supplying this directive in the quest preamble will instruct the compiler not to whine if it finds message block numbers are being reused.
QuestDir: aDirectoryPath
You can tell the compiler where you want it to produce the qrc/qbn files by supplying the directory path name where you'd like them to go. By default, the compiler drops them in the same directory as the scenario source file.
QuestDir:  d:\games\dag\arena2
directs the compiler to the arena2 directory of my '''Daggerfall''' installation.
=Les blocs de texte du QRC=
=Les blocs de texte du QRC=
Every message displayed by a quest is assigned a serial number starting from 1000 and increasing. The first dozen numbers have stock behavior associated with them, and may be called for display automatically by the game engine during the quest, without an explicit trigger in the compiled quest script.
The text block section of the source file is announced by the directive:
Qrc:
The compiler will expect to find text message blocks thereafter in the source file, until it is told otherwise. Again, the case of the directive doesn't matter.
In the source file, the text composing a quest message is introduced by the ''Message:'' directive followed by the message number to assign to the text block.
The compiler accepts synonyms for the stock quest messages:
QuestorOffer:
Message: 1000
What the questor says when the PC makes contact for the quest. Although not enforced by the compiler, for quests started in person, this is likely a required message.
RefuseQuest:
Message: 1001
What the questor says when the PC refuses the quest offer. Again, while the compiler is silent about its omission, for quests started in person, this is likely a required message block.
AcceptQuest:
Message: 1002
What the questor says when the PC accepts the quest. Again, this block is likely expected for quests started in person.
QuestFailed:
Message: 1003
What the questor says until the PC completes the quest. Again, this block is likely expected for quests started in person.
QuestComplete:
Message: 1004
What the questor says when the PC completes the quest and returns. Again, this block is likely expected for quests started in person.
Note that certain quest actions will post this message automatically. See give pc / give pc nothing.
RumorsDuringQuest:
Message: 1005
Gives information that may come up during Any News? dialogs the PC has during the quest.
RumorsPostFailure:
Message: 1006
Gives information that may come up during Any News? dialogs the PC has after failing the quest. The X-engine eventually retires these after a suitable time lag.
RumorsPostSuccess:
Message: 1007
Gives information that may come up during Any News? dialogs the PC has after completing the quest. The X-engine eventually retires these after a suitable time lag.
QuestorPostSuccess:
Message: 1008
What the questor says to the PC in dialog after a successful quest. That is, when the PC chats with the questor through the dialog screen.
QuestorPostFailure:
Message: 1009
What the questor says to the PC in dialog after a failed quest. That is, when the PC chats through the dialog screen.
QuestLogEntry:
Message: 1010
The message inserted into the PC's log when the quest is accepted. Probably not used automatically.
QuestTimeLapse:
Message: 1045
Displayed when the PC fails to meet a quest with a dead-line. Probably not used automatically.
The quest author can create as many additional message blocks as the quest requires, although the compiler arbitrarily complains if you choose message numbers larger than 2100. 1000 message blocks isn't a quest, it's a whole game.
Since remembering what text is associated with a Qrc message number is tedious, the compiler will accept an arbitrary label in place of a message number. The compiler will automatically assign the next available message number to each message label you provide. And you can refer to the Qrc message by that label in the Qbn section of the quest file.
Message: NpcPeeved
What? I can't believe you took so long
for such a simple request!
You can mix labels with section numbering in different message blocks.
Following the ''Message:'' directive are the lines composing that message block. By default, left justification is used.
Text can be centered by using the ''<ce>'' tag at the beginning of the line to be centered.
An empty or blank line can be inserted by using the ''<nowiki><br></nowiki>'' tag for the content of a line.
A message block may be divided into subsections. When '''X-engine''' displays a subsectioned message block, it displays only one of the available subsections of that block at a time. The selected subsection is chosen at random from the subsections available for the block. The next time '''X-engine''' is asked to display that message block it repeats this process, and so may select a different subsection for display.
Subsectioning gives variety to the messages that appear when the PC performs the same quest more than once. Indeed, with clever use, the quests can appear quite different when coupled with the randomizing feature in the Qbn section. While there may be an upper bound on the number of subsections the '''X-engine''' can handle, there are existing quests with upwards of a dozen subsections each in several different message blocks.
Any message block can be subsectioned by using the ''<--->'' tag on a line to start a new subsection:
RumorsDuringQuest:
<ce>I heard that %ra is a complete loser.
              <--->
That %ra is after some loser's hide.
              <--->
<ce>Isn't %ra chasing after _questgiver_ for something?
The position of the tag on the line is irrelevant.
RumorsDuringQuest:
          <ce>I heard that %ra is a complete loser.
<--->
That %ra is after some loser's hide.
<--->
<ce>Isn't %ra chasing after _questgiver_ for something?
works just as well. The decompiler takes advantage of this to center the decompiled text as required.
Be careful of leaving blank lines between different quest message blocks unless you intend the message to display empty lines in the block. Generally, you want only one blank line between the end of one block and the next message block:
RumorsDuringQuest:
Very strange sounds come out of the _house_.
            <--->
_qgiver_'s house has really gone to Oblivion.
RumorsPostfailure:
Poor _qgiver_ has to hire an exterminator.
          <--->
It's going to cost _qgiver_ to clean that house.
==Les symboles du QRC==
==Les symboles du QRC==
=Ressources et opérations=
=Ressources et opérations=
Ligne 468 : Ligne 717 :
==Nocturnal's Quest==
==Nocturnal's Quest==
=Acknowledgments=
=Acknowledgments=
=Annexes du traducteur=

Version du 24 août 2012 à 09:52

Article en travaux
Article en travaux
Cet article est actuellement en travaux importants par abg depuis le 23/08/2012.
Contactez cette personne pour toute modification majeure de l'article
.
Si vous voulez participer directement à cet article vous pouvez créer une discussion (voir onglet discussion ci-dessus), ou utiliser le forum afin de coordonner vos interventions.

Le compilateur de quêtes Template, de Donald Tipton, est l'outil fondamental pour créer et modifier les quêtes daggerfalliennes.

Traduction commentée du document questing.html

Utiliser le décompilateur de quête

Vous pouvez examiner le contenu de n'importe quelle quête de Daggerfall. Les seules qui seront inaccessibles seront les quêtes ayant un fichier Qbn mais aucun fichier Qrc. Comme il n'y a pas de bonne méthode pour deviner les textes manquants, le décompilateur ne vous montrera pas le contenu de telles "erreurs". Certaines discordances semblent être liées à des incohérences de nommage (réputation, numéro de série de la quête...) entre QBN et QRC. (NDT : Normalement, depuis l'époque de D.Tipton, ces bugs ont été réparés...)

Le décompilateur est assez bavard, préférant autant que possible l'anglais de base. Bien qu'il ait ses propres idées à propos de la casse des caractères, ça n'a que peu d'importance autant pour lire la quête décompilée que pour la recompiler.

(NDT : La casse des caractères n'a aucune importance dans le code source)

Pour décompiler une quête, vous devez dire au décompilateur quelle quête vous intéresse, ainsi que où écrire le résultat de la décompilation.

template  -d  d:\game\dag\arena2\40c00y00.qbn  40c00y00.src

Où :

template est le nom du décompilateur.
-d est le switch de commande spécifiant une décompilation.
d:\game\dag\arena2\40c00y00.qbn est le chemin d'accès de la quête.
(Utilisez votre propre chemin d'accès menant jusqu'au dossier arena2 de votre installation de Daggerfall)
40c00y00.src est le fichier qui va recevoir la quête décompilée.

Si vous omettez cette destination, le compilateur décompilera la quête spécifiée dans le répertoire où se trouvent les fichiers qbn/qrc et nommera la quête décompilée avec l'extension .src

Vous pouvez ensuite modifier la quête en éditant le fichier .src avec un éditeur de texte. Si vous utilisez un traitement de texte, assurez vous bien qu'il laisse le texte en tant que ascii propre (pas de conversion de format) si vous voulez pouvoir recompiler la quête.

Utiliser le compilateur de quête

Pour compiler une quête, inversez le processus :

template 40c00y00.src

Où :

template est le nom du compilateur de quête.
40c00y00.src est le nom de la quête à compiler.

Par défaut, le compilateur créé les fichiers qbn/qrc dans le répertoire même où se trouve le fichier .src. Le compilateur va lister le source vers la sortie standard, ainsi que les éventuelles plaintes pour problèmes rencontrés en cours de route. Si la quête contient une quelconque erreur, la dernière ligne de sortie va le rappeler et vous inviter à revoir le source pour corriger les erreurs.

N'espérez pas que les fichiers qbn/qrc soient utilisables si le compilateur a trouvé des erreurs.

Vous pouvez demander une compilation "verbeuse" en incluant le switch -v:

template -v 40c00y00.src

Cela amènera le compilateur à réciter tout ce qu'il fait pour produire les fichiers qbn/qrc, incluant ses construction de syntaxe à partir des modèles sources (source patterns), ainsi que le code binaire émis pour constituer le fichier qbn.

(NDT : Le résultat est vraiment verbeux. Pensez à faire une redirection système pour lecture à tête reposée :

template -v 40c00y00.src >compilation.log

)

Additionnellement, le scénario de quête obtenu (NDT : La sortie de Template en mode "verbose") contient les informations requises pour utiliser le débogueur de quête de X-engine. Voir Utiliser le débogueur de X-Engine pour plus d'informations.

Diagnostics

The compiler/decompiler will complain from time to time about anomalies when it encounters them. Some errors are simply reflected from the underlying operating system and won't be covered here. In such cases, the compiler generally annotates the system complaint with its own spin.

Error messages usually begin with the tag qcomp: although the Qrc compiler sometimes complains using the tag qrc: if it is unable to access the Qrc file for some reason.

The source line containing the error will usually be listed prior to the error message complaining about it.

NN is an invalid Qbn section number. Only [0, 10] are allowed.

The compiler discovered it was asked to create a non-existent Qbn section. It usually indicates Windows has shot itself in the foot or allowed some other application to shoot the compiler in the foot.

_symbol_ appears in Qrc without mention in Qbn.

The compiler detected a quest symbol that was used in a Qrc message block, but which was never defined by a corresponding quest resource. This usually means that either the symbol is misspelt in the Qrc block or in the quest resource, but it can't tell you which one is suppose to be right. Misspelt Qrc symbols will crash the quest, or at best give the infamous BLANK text.

_symbol_ at &N is the wrong type of symbol for this operation.

Expected symbol type NN but found symbol type MM.

While reducing a qbn resource to its numeric form, the compiler discovered a usage which clashs with the type of operation being performed. For example

give pc _house_

can produce this error, since it isn't reasonable to install a quest location in the PC's inventory.

_symbol_ will be replaced by whatever resource the compiler is actually grieved about. NN and MM are Qbn section numbers.

_symbol_ has not been defined.

While reducing a Qbn resource to its numeric form, the compiler discovered it refers to a non-existant resource. _symbol_ is replaced by whatever text the compiler is actually grumbling about.

For example, defining an action to use an item resource without actually defining the item resource to be used can create this error condition. Mispelling an item's symbol can as well.

Bad DagText number NNNN (should be between 1000 and 2100).

An action in a quest task has specified a bogus Qrc text number. Bad DagText numbers can crash X-engine.

Buffer overrun.

While decompiling a Qrc file, the decompiler encountered a message block too large for its internal buffer area. The decompiler assumes every Qrc message block is smaller than about 1000 characters.

Cannot use a symbol for amount of gold reward.

An item gold directive tried to provide the amount of cash non-numerically. The compiler expects cash values to be numbers.

Cannot use same symbol with differing contexts.

Previous context is:

The compiler encountered an invalid symbol usage. The previous context is the resource definition which conflicts with the present resource definition. For example

Item _reward_ gold 10
_reward_ task:

would trigger a conflict because all item and task names must be unique.

Code parameter count must be in [1, 5].

The compiler discovered a Qbn template in its .src database with a suspicious number of operands defined. All known Qbn condition/responses take between 1 and 5 operands.

Could not convert the new size value.

A .src file containing a size: NN directive failed to convert NN Texte italiquewithout error.

Could not open aFileName for input.

The compiler was unable to access the file aFileName for input.

Could not open 'aFileName' for input.

The compiler/decompiler was unable to access the .src/.qbn file to operate on.

Hmmm, this quest doesn't seem to have anything to say.

('qcomp' would like some text to work with)

The compiler discovered that it would create an empty Qrc file, which doesn't seem very likely.

Implicit task gives template more than NN words.

A resource directive in the .src database has tried to install more arguments in a resource brick than are expected.

Line NNNN 'fragment'

At line NNNN of the quest source file, the compiler stumbled while analysing a fragment of that line. A complaint detailing the trouble it got into generally follows.

No command handler for Qbn section NN has been created yet.

The compiler discovered it was asked to create an unused Qbn section. Since all the known Qbn sections in use have handlers created for them, in practice this should not arise unless Windows is taking pot-shots again.

No command number; cannot convert template to Qbn section.

A command/directive template has been added to the compiler's .src database that does not properly define a Qbn resource. All well-defined resource directives must specify an index to the Qbn section as the first field of the template defining the resource.

No template matches this pattern.

The compiler could not locate a match for a resource directive in its .src data base.

Quest contains errors. Please review the output log.

One or more errors occurred during the processing of the quest source file. The Qrc/Qbn files for this quest will in general be unusable.

Quest: 'aFilePattern' doesn't follow the pattern for Daggerfall quest file names.

The Quest: directive used in the quest preamble does not follow the pattern for Daggerfall quest file names.

Seek to text offset barfed (NN != MM).

While positioning the Qrc file to process an existing message block, the decompiler discovered that the position requested did not match the position arrived at. This generally indicates someone else is trying to update the Qrc file at the same time the decompiler is trying to read it.

Source file has no extension.

While trying to infer the Qrc/Qbn file name from the source file name, the compiler discovered that no .src extension was present. For the nonce, the compiler relies on the .src extension for various internal reasons.

Stopping compilation because Qrc compile has failed.

Quest compilation proceeds in two parts. First the message blocks are assembled to produce a Qrc file. Then the quest resource definitions are assembled to produce a Qbn file. Each part will generally try to compile all of the statements associated with it so you can receive all the compiler's complaints en masse, so to speak. However, if the Qrc part did not compile successfully, the Qbn part notices this fact and doesn't start.

Template failed to assign an item.

One of the object templates has failed to assign a required parameter for that type of object. If you modify one of the compiler .src files (to define additional items perhaps) that change has offended the compiler somehow.

This clock doesn't have an associated timer task.

The compiler tried to assemble an action refering to a clock resource and discovered that no task had been created for that clock. X-engine expects every timer to have a task defined for it, even if there are no actions to associate with the task.

Too many Daggerfall variables. Symbol table size of NN is too small.

While compiling the Qrc message blocks, the compiler discovered the table it uses to track misspelt symbols was used up. This table can hold up to 1000 symbols, which ought to be adequate for ordinary quests.

Unable to create command output.

The compiler was unable to manufacture an argument brick for a quest resource. This usually indicates that system resources or memory are low.

Unable to determine the <parameter> (NN).

Quest resources (like NPCs, Foes, etc) have to be reduced to a numeric form for the X-engine. When the compiler tried to do so, it couldn't figure out how to represent the parameter as a number. This usually means you've mispelled a quest resource or used a quest resource that isn't present in the compiler's .src database. If you've made changes to the compiler's .src database, the field number where the mishap occured is given by NN. parameter spans the names of the qbn fields for all the Qbn record types.

Unable to determine the permanent site.

A quest Place resource has requested an unknown location as a permanent site. Either it didn't recognize the spelling for the permanent site, or the requested site isn't part of the permanent site database.

Unable to open aPathName for reading.

While constructing the quest resource database, the compiler encountered a .src file name which it could not access.

Unable to open qrc file aFileName.

While creating a new quest, the compiler was unable to access the Qrc file for writing.

Unable to open the decompiled file 'aFileName'.

While setting up to disassemble a quest, the decompiler was unable to access the source file aFileName when it tried to create it or reuse it.

Unable to open the qbn file 'aFileName'.

While setting up to disassemble a quest, the decompiler was unable to access the Qbn file aFileName.

Unable to position the qrc file to next message descriptor.

While decompiling an existing Qrc file, the decompiler was unable to scroll the file to the next message block that it expected to process. Unless you're having hard drive problems, this usually indicates a mutant Qrc file has been found.

Unable to rewind the qrc file.

While decompiling a quest, the decompiler discovered it could not reposition the Qrc file to its beginning.

Unable to write an empty qrc file header.

While creating a new quest, the compiler was unable to write the Qrc file preamble.

Unknown configuration directive.

While processing its configuration file (template.cfg) the compiler encountered an unknown configuration directive.

Unknown switch '-x'.

While analyzing the command line arguments, the compiler encountered an unrecognized switch or setting.

Unable to open qrc file aFileName.

While setting up to disassemble an existing quest, the decompiler discovered it was unable to open the Qrc file of the Qrc/Qbn pair.

Unresolved symbolic references.

The compiler was presented with a quest resource definition which did not completely replace all symbols with numeric values in the resource argument brick. There should be one or more preceding complaints detailing which bits could not be resolved.

Warning: &N did not resolve to a numeric value.

After performing all the symbolic resolutions correctly, the compiler detected that parameter N was still a non-numeric value. This usually means that one of the .src files in the compiler's data base has been edited to create a non-numeric template. Typing the letter O instead of the number 0 can cause this.

Warning: making system quest file.

The compiler discovered that the file name pattern for the quest indicates that a main-story quest is being produced. The interrelation between main-story quests and their global states isn't well-understood, so the risk of substantial changes having surprising side-effects is higher in these cases.

Warning: no command templates have been detected.

After processing its configuration file (template.cfg) the compiler detected that no quest resource operations have been included.

Warning: no item definitions have been detected.

After processing its configuration file (template.cfg) the compiler detected that no quest items were present in the resulting database.

Warning: template does not assign all parameter tokens.

Each quest resource is determined by an argument brick of parameter values required by the X-engine to describe that resource. The compiler discovered a command template that failed to provide values for all of the parameters required to describe the resource.

Warning: this configuration has no command template files.

After processing its configuration file (template.cfg) the compiler detected that no quest resource operations have been included.

Well, that didn't work.

After processing a configuration directive the compiler noticed that something was amiss. Generally there is a preceding complaint detailing the trouble.

Wrong number of command line arguments.

While processing the command line arguments, too many parameters were encountered.

Utiliser le débogueur de X-Engine

When creating new quests, it is helpful from time to time to see which steps of a quest have been taken, and which have not.

X-Engine has a cheat mode key to overlay the main view with the tasks of a quest to show which ones have been acted on.

To access the X-Engine debugger, edit z.cfg and include the line

cheatmode 1

in the file before starting Daggerfall.

After acquiring the quest you want to examine, you can use the apostrophe or single quote key (') in the main 3D view to overlay a display of the quest tasks on the main view, on an active quest by active quest basis. (NDT : Sur clavier azerty, la touche est "ù")

When the overlay is active, the name of the quest, along with the player position, is displayed at the bottom of the overlay. You may need to adjust the camera position to find a suitable contrast between the view background colors and the yellow letters of the overlay.

The apostrophe or single quote key (') will step the display through each active quest of the character. Each time the key is pressed, the tasks of the next active quest of the PC will be displayed, until the display finally returns to the first quest shown.

The quests are displayed in no particular order, so you will have to cycle through the open quests until the one you're interested in appears on the screen.

To clear the task overlay from the screen, press F9. If you have used the game's control panel to modify the behavior attached to F9, you may need to revert that assignment to enable F9 to clear the overlay display.

For each open quest, X-Engine displays a flag to indicate which steps of the quest have been taken, and which are as yet inactive.

Tasks are listed in the same order which the scenario declared them. But as a fail-safe check, the symbol name of each task is displayed in numerical form. Executed tasks are highlighted in dirty orange; unexecuted ones in yellow.

When you use the -v[erbose] option of the compiler program, the end of that listing will show the same numerical values which will appear in the X-Engine debug screen.

In addition, debugging information is added to the quest file which X-engine will access to provide symbols in the display overlay in place of raw numbers.

When -v is used to compile a quest, after cycling the display to that quest with the apostrophe (') key, you can use the semicolon (;) key to cycle through the various quest resource sections.

For items, persons, and foes, the world coordinates of the thing are displayed. If the thing hasn't yet been installed in the game world, its coordinates will be zero. If the thing is in the same vicinity as the PC (the current town or dungeon) it will be highlighted a dirty orange color, else displayed in yellow.

For clocks, the elapsed time and the alarm time are displayed in game minutes.

For randomly selected dungeons, whether the location has been revealed or not is available, as well as its world coordinates once it has been revealed. Note that even if the dungeon has already been revealed on the province map by an earlier quest, this display shows whether the present quest has revealed it or not. Other quest locations are never hidden, and so always appear on the world map.

And as before, without the debugging information, the state of the tasks of the quest is available, but now all the tasks have their names from the quest scenario source displayed too. Executed tasks are displayed in dirty orange, unexecuted ones in yellow.

Note that the compiler calls these symbols, while X-Engine calls them flags--they refer to the same task block in the quest scenario.

When X-Engine indicates a flag is true, this means that task is presently executing/has already executed. When X-Engine indicates a flag is false, this means that task has not been executed, or that the task has already been cleared so it may rerun when conditions are ripe.

Certain game conditions (e.g., daily from) are automatically rescheduled for execution each game world minute, and so always are reported as false, even though the task has executed.

Again, use the apostrophe (') or single quote key to cycle through the different open quests. Use the F9 to remove the task overlay from the screen.

Examiner une quête "live"

The quest decompiler engine can be used to examine the contents of an open quest in the player's logbook. In addition to the usual disassembled details, links to other saved game records for items, NPCs, and places are available, among other details. The native Linux decompiler supports date recovery, which is not available without the ATLAS package and isn't implemented under Dos.

To decompile a living quest, the desired quest must first be extracted from the saved game of interest. The TES2 tool will extract all the open quests with its -Q option.

C> tes2 -Q 3

extracts all the living quests in saved game slot 3 into the fictitious quest player.qbn. Each open quest is assigned an arbitrary serial number (1, 2, 3, ...) when the saved game is created. The serial numbers change whenever quests start up or stand down, and so must be determined in situ each time. The end of the regular TES2 report shows the serial numbers currently in use by open quests:


                          Active Quests
      (2)         s0000977                  (4)         S0000021             
      (6)         s0000012                  (3)         s0000999             

The gaps (2, 3, 4, 6) in the serial numbers are normal.

To examine the living state of quest 3, s0000999, use the SAVEQBN tool to extract quest 3 from player.qbn and feed the extracted quest to the decompiler using the -s switch instead of the usual -d switch:

C> saveqbn 3 <player.qbn >s0000999.qbn
C> template -s s0000999.qbn snapshot.src

where -s stands for sans Qrc. For example, from an unrelated living quest

--	Quest start-up:
	place item _I.01_ at _L.04_ 
--	exec: 1 (000b58c6) 09:42 Morndas, 7 of Mid Year, 405.
--	hash: 00644605 44ebfa04 00000000 00000000
	dialog link for person _victim_ 
--	exec: 1 (000b58c6) 09:42 Morndas, 7 of Mid Year, 405.
--	hash: 00000000 483b3e45 00000000 00000000

The exec tag gives the last time of access and whether the action has been accomplished yet. 0 generally means not performed while 1 indicates completed. Other states are possible, e.g. for letters as yet undelivered to the PC but already en route.

The hash tag lists the object identifiers for the four possible opcode operands. There will be an item record in the saved game with object id 0x00644605, a quest location with object id 0x44ebfa04, and an NPC record with id 0x483b3e45.

NPC and place object identifiers use the Daggerfall GPS notation. So this quest NPC's birthplace is somewhere in site 0x483b. ATLAS shows that 0x483b is Langpath, Anticlere. The specific lot number, 0x3e45, is tied to a quest location 0xfann by another record in the saved game. If the PC isn't presently in Langpath, that relation won't necessarily exist until the Langpath site has been rendered.

MAPS.BSA identifies the possible quest locations at a site with a special codex listing the lot numbers that correspond to quest locations. A quest site, whether in town or in a dungeon, is indexed by the special lot code 0xfann, where nn is the consecutive serial number of quest locations at a site (0xfa01, 0xfa02, ...). If the site is a dungeon, these correspond to the rooms which the teleport jump cheat links together.

The place 0x44eb is the Ruins of Ashsly Manor in Anticlere province, where the fourth teleport jump has been randomly assigned as the spot where the quest item will be hidden.

You can use the -s option to decompile just the Qbn portion of an ordinary quest file, but the resulting extra information is uniformly uninteresting.

Organisation d'une quête

The source file created by the quest decompiler is divided into three parts:

  • Quest preamble
  • Qrc text blocks
  • Quest resources and operation (Qbn)

which are discussed subsequently.

Préambule d'une quête

The quest preamble lays out the general requirements of the quest: who offers it, who can receive it, how it is started, etc. The purpose of this preamble is to collect the information required to fabricate a standard quest file name pattern. There are two ways to do so, concisely or verbosely.

Quest: pattern

where pattern is the desired quest file name pattern. For example

Quest:  b0c00y13

Alternately, the pattern can be inferred by the compiler from the following verbose descriptions. Case is insignificant.

StartsBy: [Letter | NPC]

Indicates whether the quest starts by the player character receiving a letter or by contacting an NPC (non-player character) in the game.

Questee: [Initiate | Member | Anyone]

Indicates what general relationship the PC must have with respect to the NPC / group that offers the quest.

Initiate 	Initial invitation to join
Member 		PC must be a member of this group
Anyone 		Anyone may be offered this quest

Questor: quest grantor or single letter key

The questor is the group, guild, or daedra prince which offers the quest. It can be specified by single letter key (as used by the quest file name pattern) or by the proper name of the group, taken from the following list:

Questor Key Ids[1] Questor Key Ids Questor Key Ids
Akatosh D 0 Lady Azura T 0 Peasant A 0-18
Arkay E 0 Mage N 1-18 Peryite 5 0
Boethiah U 0 Main S [2] Royalty R 0-28
Brotherhood L 0-11 Malacath 8 0 Sanguine 7 0
Clavicus Vile V 0 Mara H 0 Sheogorath 6 0
Dibella F 0 Mehrunes Dagon Y 0 Stendarr I 0
Fighter M 0-19 Mephala Z 0 Temple C 0-15
Hermaeus Mora W 0 Merchant K 0-10 Thief O 0-12
Hircine X 0 Meridia 1 0 Vaernima 9 0
Julianos 0 0 Molag Bal 2 0 Vampire P 0-10
Knight B 0-17 Namira 3 0 Witch Q 0-8
Kynareth G 0 Nocturnal 4 0 Zenithar J 0

[1]See QuestId: below. CompUSA quests are included. [2]Main story numbers in use are 1-22, 100-107, 500-503, 977, 988, and 999.

Again, case is not significant. Space, for those daedra princes with two names, is. Main refers to the main story quests.

Questor: Arkay

indicates a quest offered by the temple of Arkay, for example.

Repute: mm

The repute is the minimum repute the PC must have with respect to the group / prince offering the quest. It can also indicate a range of reputes for which the quest is offered.

If mm is strictly numeric, then it indicates the minimum repute the PC must have, with 0 being the smallest repute and 99 the largest.

Quests can be restricted to a particular decade of the PC's repute with the questor by writing the units digit as the letter x.

Repute: 3x

limits the quest to PCs whose repute is between 30 and 39 with the questor.

QuestId: nn

X-engine expects every quest associated with one of the questor groups to have a unique two-digit serial number assigned to it.

QuestId: 17

assigns 17 as the quest id in the file name pattern for the quest.

If the quest preamble describes a quest that already exists, the compiler will replace the original contents of that quest with the new contents from this source file.

If that quest does not already exist, the compiler will create a new Daggerfall quest for it.

Please see the table of guilds/questors for the quest ids already in use by the game.

Messages: aNumber

The quest compiler needs to know approximately how many message blocks will be recorded in the Qrc file before it begins processing. By default it reserves space for 50 message blocks. If the quest scenario supplies more than 50 messages, the compiler needs to be told the number of messages to expect with this directive.

The decompiler now automatically includes this directive when it decompiles a quest, as a convenience for recompiling quests. However, adding additional messages to existing quests may bump into the message count limit. The limit need not be exact, just more than enough.

AllowDupes:

Some existing quests from Bethesda have Qrc files that contain duplicate message block numbers. This is arguably wrong when you're creating a fresh quest, and the compiler normally smacks you if you try to do such a thing. But to allow the existing quests to recompile without trying to figure out which text block is the valid one--good luck--supplying this directive in the quest preamble will instruct the compiler not to whine if it finds message block numbers are being reused.

QuestDir: aDirectoryPath

You can tell the compiler where you want it to produce the qrc/qbn files by supplying the directory path name where you'd like them to go. By default, the compiler drops them in the same directory as the scenario source file.

QuestDir:  d:\games\dag\arena2

directs the compiler to the arena2 directory of my Daggerfall installation.

Les blocs de texte du QRC

Every message displayed by a quest is assigned a serial number starting from 1000 and increasing. The first dozen numbers have stock behavior associated with them, and may be called for display automatically by the game engine during the quest, without an explicit trigger in the compiled quest script.

The text block section of the source file is announced by the directive:

Qrc:

The compiler will expect to find text message blocks thereafter in the source file, until it is told otherwise. Again, the case of the directive doesn't matter.

In the source file, the text composing a quest message is introduced by the Message: directive followed by the message number to assign to the text block.

The compiler accepts synonyms for the stock quest messages:

QuestorOffer:
Message: 1000

What the questor says when the PC makes contact for the quest. Although not enforced by the compiler, for quests started in person, this is likely a required message.

RefuseQuest:
Message: 1001

What the questor says when the PC refuses the quest offer. Again, while the compiler is silent about its omission, for quests started in person, this is likely a required message block.

AcceptQuest:
Message: 1002

What the questor says when the PC accepts the quest. Again, this block is likely expected for quests started in person.

QuestFailed:
Message: 1003

What the questor says until the PC completes the quest. Again, this block is likely expected for quests started in person.

QuestComplete:
Message: 1004

What the questor says when the PC completes the quest and returns. Again, this block is likely expected for quests started in person.

Note that certain quest actions will post this message automatically. See give pc / give pc nothing.

RumorsDuringQuest:
Message: 1005

Gives information that may come up during Any News? dialogs the PC has during the quest.

RumorsPostFailure:
Message: 1006

Gives information that may come up during Any News? dialogs the PC has after failing the quest. The X-engine eventually retires these after a suitable time lag.

RumorsPostSuccess:
Message: 1007

Gives information that may come up during Any News? dialogs the PC has after completing the quest. The X-engine eventually retires these after a suitable time lag.

QuestorPostSuccess:
Message: 1008

What the questor says to the PC in dialog after a successful quest. That is, when the PC chats with the questor through the dialog screen.

QuestorPostFailure:
Message: 1009

What the questor says to the PC in dialog after a failed quest. That is, when the PC chats through the dialog screen.

QuestLogEntry:
Message: 1010

The message inserted into the PC's log when the quest is accepted. Probably not used automatically.

QuestTimeLapse:
Message: 1045

Displayed when the PC fails to meet a quest with a dead-line. Probably not used automatically.

The quest author can create as many additional message blocks as the quest requires, although the compiler arbitrarily complains if you choose message numbers larger than 2100. 1000 message blocks isn't a quest, it's a whole game.

Since remembering what text is associated with a Qrc message number is tedious, the compiler will accept an arbitrary label in place of a message number. The compiler will automatically assign the next available message number to each message label you provide. And you can refer to the Qrc message by that label in the Qbn section of the quest file.

Message: NpcPeeved
What? I can't believe you took so long
for such a simple request!

You can mix labels with section numbering in different message blocks.

Following the Message: directive are the lines composing that message block. By default, left justification is used.

Text can be centered by using the <ce> tag at the beginning of the line to be centered.

An empty or blank line can be inserted by using the <br> tag for the content of a line.

A message block may be divided into subsections. When X-engine displays a subsectioned message block, it displays only one of the available subsections of that block at a time. The selected subsection is chosen at random from the subsections available for the block. The next time X-engine is asked to display that message block it repeats this process, and so may select a different subsection for display.

Subsectioning gives variety to the messages that appear when the PC performs the same quest more than once. Indeed, with clever use, the quests can appear quite different when coupled with the randomizing feature in the Qbn section. While there may be an upper bound on the number of subsections the X-engine can handle, there are existing quests with upwards of a dozen subsections each in several different message blocks.

Any message block can be subsectioned by using the <---> tag on a line to start a new subsection:

RumorsDuringQuest:
<ce>I heard that %ra is a complete loser.
              <--->
That %ra is after some loser's hide.
              <--->
<ce>Isn't %ra chasing after _questgiver_ for something?

The position of the tag on the line is irrelevant.

RumorsDuringQuest:
         <ce>I heard that %ra is a complete loser.
<--->
That %ra is after some loser's hide.
<--->
<ce>Isn't %ra chasing after _questgiver_ for something?

works just as well. The decompiler takes advantage of this to center the decompiled text as required.

Be careful of leaving blank lines between different quest message blocks unless you intend the message to display empty lines in the block. Generally, you want only one blank line between the end of one block and the next message block:

RumorsDuringQuest:
Very strange sounds come out of the _house_.
           <--->
_qgiver_'s house has really gone to Oblivion.
RumorsPostfailure:
Poor _qgiver_ has to hire an exterminator.
         <--->
It's going to cost _qgiver_ to clean that house.

Les symboles du QRC

Ressources et opérations

Gérer l'écran de dialogue

Objets de quête

Objets de récompense

Artefacts

Autres objets

Quest Persons

Permanent NPC

Faction Type

Group Alliances

Faction Alliances

Quest Places

Permanent Sites

Local Sites

Remote Sites

Quest Clocks

Quest Enemies

Quest Condition/Responses

Quest conditions

Locating things in the game world

By the player's cash on hand

By the clock

Checking the PC's repute

Using items

Attacking foes

Locating the PC in the game world

Noticing player discards

Noticing spells cast

Noticing player levels

Noticing several things together

Checking faction repute

Checking faction availability

Quest Actions

add anNPC as questor

add anNPC face

add anNPC face saying nnnn

add dialog for item anItem

add dialog for person anNPC

add dialog for location aSite

add dialog for location aSite person anNPC item anItem

add dialog for location aSite item anItem

add dialog for person anNPC item anItem

add foe aFoe face

cast aSpell spell on aFoe

change repute with anNPC by nn

clear aTaskName ...

create aFoe every m minutes n times with k% success

create npc anNPC

create npc at aPlace

cure aDisease

destroy npc anNPC

dialog link for item anItem

dialog link for person anNPC

dialog link for location aSite

dialog link for location aSite person anNPC item anItem

dialog link for location aSite item anItem

dialog link for person anNPC item anItem

drop anNPC as questor

drop anNPC face

drop foe aFoe face

end quest

get item anItem

get item anItem from anNPC

give item anItem to anNPC

give pc anItem

give pc anItem notify nnnn

give pc nothing

hide npc anNPC

legal repute nn

level n completed

location aPlace magicNumber2 magicNumber3

log nnnn step i

make anItem permanent

make pc ill with aDisease

mute npc anNPC

pick one of aTaskName1 aTaskName2 aTaskName3 aTaskName4

place aFoe at aPlace

place anItem at aPlace

place anNPC at aPlace

play sound aSound every time1 minutes time2 times

play video magicNumber1

prompt nnnn yes aTaskName1 no aTaskName2

remove foe aFoe

remove log step n

restore anNPC

reveal aPlace

reveal aPlace in province aProvince# at magicNumber

rumor mill nnnn

say nnnn

send aFoe every m minutes n times with k% success

start quest nnnn mmmm

start task aTaskName

start timer aClock

stop timer aClock

take anItem from pc

teleport pc to aPlace

transfer pc inside aPlace province# magicNumber

Common pitfalls

Reusing Quest elements

cfg: aFileName

src: aFileName

Substitutions

macro aCommandPattern

Sample quests

Lady Brisienna

Nocturnal's Quest

Acknowledgments

Annexes du traducteur