Outils pour utilisateurs

Outils du site


agi-game:specifications-resources

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
agi-game:specifications-resources [2021/05/24 15:29] frateragi-game:specifications-resources [2023/04/13 09:50] (Version actuelle) frater
Ligne 1: Ligne 1:
-===== AGI Specifications Resources : Logic resources =====+====== AGI Specifications Resources : Logic resources ======
  
 ==== Introduction ==== ==== Introduction ====
  
-At the heart of Sierra'Adventure Game Interpreter is the logic file. +Au cœur de l'AGI (Adventure Game Interpreter) de Sierra se trouve le fichier "logique".
-These files contain the code that makes up the game. Each room has a logic script that goes with it. This logic script governs what can take place in that room. Here is an example of what the programmer writes when a game is being created.+
  
-Example: KQ4. Room 7.+Ces fichiers contiennent le code qui compose le jeu. Chaque pièce est accompagnée d'un script logique. Ce script logique régit ce qui peut se passer dans cette salle.  
 + 
 +Voici un exemple de ce que le programmeur écrit lors de la création d'un jeu. 
 + 
 +Exemple: KQ4. Room 7.
  
 <code C> <code C>
Ligne 41: Ligne 44:
 ===== Command list and argument types ===== ===== Command list and argument types =====
  
-Following tables show a list of all AGI commands and their argument types. The command names have been taken from debug messages contained in some AGI games.+Les tableaux suivants présentent une liste de toutes les commandes AGI et de leurs types d'arguments 
 + 
 +Les noms des commandes sont tirés des messages de débogage contenus dans certains jeux AGI.
  
 ^  Opcode   ^ Command            Args    1      ^  2      3      4      5     ^ ^  Opcode   ^ Command            Args    1      ^  2      3      4      5     ^
Ligne 253: Ligne 258:
  
  
-==== The header ====+==== le header ====
  
-The header of each logic script is seven bytes in length for games before 1988. After this date compression seems to have been introduced and the header was subsequently alteredThis compression will be +L'entête (Header) de chaque script logique a une longueur de sept octets pour les jeux antérieurs à 1988. 
-discussed at a later stage.+ 
 +Après cette date, une compression semble avoir été introduite et l'en-tête a été modifié par la suite.  
 + 
 +Cette compression sera discutée ultérieurement.
  
 ^ Offset   ^ Command                                       ^ ^ Offset   ^ Command                                       ^
 | 0-1      | Signature (0x12--0x34)                        | | 0-1      | Signature (0x12--0x34)                        |
-| 2        | Vol number that the resource is contained in  +| 2        | Numéro du volume dans lequel la ressource est contenue 
-| 3-4      | Length of the resource without the header     +| 3-4      | Longueur de la ressource sans l'entête   
-| 5-6      | Offset of logic code message section          |+| 5-6      | Décalage de la section des messages du code logique          |
  
-All text that can be printed to the screen from within a logic script is stored in an encrypted form at the end of the logic script.+Tout le texte qui peut être imprimé à l'écran à partir d'un script logique est stocké sous une forme cryptée à la fin du script logique.
  
-Example: KQ1. Room 2.+Exemple: KQ1. Room 2.
  
 <code> <code>
Ligne 276: Ligne 284:
  
 ==== Opcodes === ==== Opcodes ===
-The logic code section starts immediately after the header and continues until the start of the message section has been reached. There are three sets of codes used in a logic script. Most codes will have between one and seven arguments inclusive. This is discussed later on. 
-The first set of codes is the AGI commands themselves listed in the previous tables, and they have the range 0x00--0xB6. 
  
-The second set of codes is as follows:+La section du code logique commence immédiatement après l'en-tête et se poursuit jusqu'au début de la section du message.  
 + 
 +Trois séries de codes sont utilisées dans un script logique.  
 + 
 +La plupart des codes ont entre un et sept arguments inclus. Nous y reviendrons plus loin. 
 + 
 +La première série de codes correspond aux commandes AGI elles-mêmes énumérées dans les tableaux précédents et se situe dans la plage 0x00--0xB6. 
 + 
 +La deuxième série de codes est la suivante :
  
 ^ Code  ^ Command               ^ ^ Code  ^ Command               ^
Ligne 287: Ligne 301:
 | FC    | **or**                | | FC    | **or**                |
  
-At present these are the only high value codes encounteredThe //if// and //or// codes are like bracketsi.e. the code will be at the start and the end of the section of codes that it refers toThe following example will illustrate this:+À l'heure actuelle, ce sont les seuls codes de grande valeur que l'on rencontreLes codes //if// et //or// sont comme des parenthèsesc'est-à-dire que le code sera au début et à la fin de la section de codes à laquelle il se réfèreL'exemple suivant l'illustre :
  
-Example: KQ1, Room 2.+Exemple: KQ1, Room 2.
  
 <code C> <code C>
Ligne 298: Ligne 312:
 </code> </code>
  
-The above translates to:+que l'on peut traduire comme ci-dessous:
  
 <code C> <code C>
Ligne 304: Ligne 318:
 </code> </code>
  
-which tests whether flag number is setThe 0xFF effectively switches the interpreter into a condition checking mode which leads us to the set of codes listed in tables+ce code test si le "flag" numero est actif. 
 +Le ''0xFF'' fait passer l'interpréteur en mode de vérification des conditions, ce qui nous amène à la série de codes énumérés dans les tableaux suivants
  
 <code> <code>
  0x00 - 0x12    Condition codes.  0x00 - 0x12    Condition codes.
 </code> </code>
 +Lorsque l'interprète rencontre un ''0xFF'', il interprète les valeurs de code suivantes comme étant dans la plage de codes de condition jusqu'à ce qu'il rencontre le ''0xFF'' suivant, ce qui le ramène en mode de commande AGI normal. normal de l'AGI. 
  
-When the interpreter encounters a 0xFF it will then interpret the following code values as being in the condition code range until it encounters the next 0xFF which switches it back into normal AGI command +Les deux octets qui suivent immédiatement le deuxième ''0xFF'' déterminent le nombre d'octets que dure cette instruction //if// avant que le //if// ne se termine.  
-mode. The two bytes immediately following the second 0xFF determine how many bytes this //if// statement lasts for before the //if// is ended.  When the second 0xFF is encountered the interpreter, be it +
-us or the machine, does three things:+
  
-  - Reads in the following two bytes. +Lorsque le deuxième ''0xFF'' est rencontré, l'interprète, que ce soit nous ou la machine, fait trois chosesl'interprète, que ce soit nous ou la machine, fait trois choses :
-  - Opens a bracket. +
-  - Switches to AGI command mode.+
  
-Example: KQ1, Room 2.+  - Il lit les deux octets suivants. 
 +  - Il ouvre une parenthèse. 
 +  - Il passe en mode de commande AGI. 
 + 
 +Exemple: KQ1, Room 2.
  
 <code C> <code C>
Ligne 331: Ligne 347:
 </code> </code>
  
-==== The **else** command and more on brackets ====+==== la commande **else** et plus sur les parenthèses ==== 
 + 
 +L'instruction **else** continue toujours après un bloc de crochets **if**.  
 + 
 +Cette caractéristique est importante et a causé un certain nombre de problèmes dans le passé. 
  
-The **else** statement will always continue after an **if** bracket block. This next feature is important and has caused a number of hassles in the past. When an **else** statement follows an **if**, then the bracket distance given after the **if** statement //will be three bytes longer// (this is a consequence of the way the interpreter handles **if** and **else** codes which is discussed later).+Lorsqu'une instruction **else** suit une instruction **if**, la distance entre les crochets après l'instruction **if** //sera plus longue de trois octets// (ceci est une conséquence de la manière dont l'interpréteur gère les codes **if** et **else**, ce qui est discuté plus loin).
  
-Here's an example:+voici un exemple:
  
 <code C> <code C>
Ligne 353: Ligne 373:
  
  
-Usually you would expect the bracket distance to be 0x0002 but in the above case it is clearly 0x0005 which illustrates the difference between a straight **if** statement and an **if..else** structure. The situation is the same for nested **if..else** structures.+En général, on s'attend à ce que la distance entre les crochets soit de 0x0002, mais dans le cas ci-dessus, elle est clairement de 0x0005, ce qui illustre la différence entre une instruction **if** directe et une structure **if..else**. 
  
-The **else** statements themselves are a lot like **if** statements except that they're test condition is given after the 0xFE code but is instead the inverse of the condition given by the above **if** statementOnly the bracket distance is given after the 0xFE code and then the AGI command clock that the **else** statement encompasses.+La situation est la même pour les structures **if..else** imbriquées.
  
-==== Test conditions ====+Les instructions **else** elles-mêmes ressemblent beaucoup aux instructions **if**, sauf que leur condition de test est donnée après le code ''0xFE'', mais est l'inverse de la condition donnée par l'instruction **if** ci-dessus. 
  
-Conditions can be one of the following types:+Seule la distance entre les crochets est donnée après le code ''0xFE'' et ensuite l'horloge de commande AGI que l'instruction **else** englobe. 
 + 
 +==== Test de conditions ==== 
 + 
 +Les conditions peuvent être de l'un des types suivants:
  
 <code> <code>
- FF 07 05 FF                         One condition testedie. isset(5) + FF 07 05 FF                         Une condition testéec'est-à-dire isset(5) 
- FF FD 07 05 FF                      One condition NOTedie. !isset(5) + FF FD 07 05 FF                      Une condition Inversée (NOT)c'est-à-dire !isset(5) 
- FF 07 05 07 06 FF                   Multiple conditions, ANDed+ FF 07 05 07 06 FF                   Plusieurs conditions, liée par un ET logique (AND)
- FF FC 07 05 07 06 FC FF             Multiple conditions ORed.+ FF FC 07 05 07 06 FC FF             Plusieurs conditions, liée par un OU logique (OR).
  FF FC 07 06 07 06 FC FD 07 08 FF    Combination.  FF FC 07 06 07 06 FC FD 07 08 FF    Combination.
 </code> </code>
  
-These conditions translate to:+Ces conditions se traduisent comme ceci:
  
 <code C> <code C>
Ligne 379: Ligne 403:
 </code> </code>
  
-If multiple boolean expressions are grouped togetherthen there respective values are ANDed togetherIf multiple boolean expressions are grouped together and then surrounded by a pair of 0xFC codes, then +Si plusieurs expressions booléennes sont regroupéesleurs valeurs respectives sont combinées ensemble par un ET logique (AND) 
-their values are ORed together.+ 
 +Si plusieurs expressions booléennes sont regroupées et entourées d'une paire de codes ''0xFC''leurs valeurs sont combinées. leurs valeurs sont combinées par un OU logique (OR). 
 + 
 +Le code ''0xFD'' ne s'applique qu'au code de condition suivant dont il inverse la valeur booléenne.
  
-The 0xFD code only applies to the following condition code whose boolean value it inverts. 
  
 ==== Arguments ==== ==== Arguments ====
-You may well be asking how the interpreter knows how many arguments each code has and what type of argument each argument isThis information is stored in ''agidata.ovl'' in the MS-DOS version.  +Vous vous demandez peut-être comment l'interpréteur sait combien d'arguments possède chaque code (ou fonction) et quel type d'argument est associé à chaque argument.  
-Inside this file there is table which contains four bytes for each AGI command and condition code. These four bytes are interpreted as follows:+ 
 +Cette information est stockée dans le fichier ''agidata.ovl'' de la version MS-DOS.  
 + 
 +Dans ce fichier, il y un tableau qui contient quatre octets pour chaque commande AGI et chaque code de condition 
 + 
 +Ces quatre octets sont interprétés comme suit :
  
 ^ Offset   ^ Description                     ^ ^ Offset   ^ Description                     ^
-| 0-1      | Pointer to implementation code  | +| 0-1      | Pointeur vers le code de mise en œuvre  | 
-| 2        | Number of arguments             | +| 2        | Numbre d'arguments             | 
-| 3        | Type of arguments               |+| 3        | Type d'arguments               |
  
-The type of arguments value is interpreted as follows:+Le type de valeur des arguments est interprété comme suit :
  
 <code> <code>
Ligne 400: Ligne 431:
 </code> </code>
  
-If the bit is set, argument is interpreted as a variable; otherwise the argument is interpreted as a numberIt is unknown what bit 0 does since no AGI command or AGI condition code has more than seven arguments.+Si le bit est activél'argument est interprété comme une variable ; sinon, l'argument est interprété comme un nombre 
 + 
 +La fonction du bit 0 n'est pas connue, car aucune commande AGI ni aucun code de condition AGI n'a plus de sept arguments.
  
 Examples: Examples:
  
-  * 0x80 Says that the commands first argument is a variable. +  * 0x80 Indique que le premier argument de la commande est une variable. 
-  * 0x60 Says that the second and third arguments are variable numbers.+  * 0x60 Indique que les deuxième et troisième arguments sont des nombres variables.
  
-==== The messages section ====+==== la section messages ====
  
-The messages section of a logic script contains all the strings that can be displayed by that logic script. These strings are encrypted by xor'ing every eleven bytes with the string "Avis Durgan".+La section des messages d'un script logique contient toutes les chaînes qui peuvent être affichées par ce script logique
  
-Example: KQ1, Room 2.+Ces chaînes sont cryptées par **XOR** tous les onze octets avec la chaîne "Avis Durgan"
 + 
 +Exemple: KQ1, Room 2.
  
 <code C> <code C>
Ligne 420: Ligne 455:
 </code> </code>
  
-In the above examplethe print statement is represented as:+Dans l'exemple ci-dessusl'instruction d'impression est représentée comme suit :
  
 <code> <code>
Ligne 426: Ligne 461:
 </code> </code>
  
-The 0x08 is the number given to the string and corresponds to its position in the list of strings at the end of the logic script.  +Le ''0x08'' est le numéro attribué à la chaîne et correspond à sa position dans la liste des chaînes à la fin du script logique.  
-The format of the message section is as follows:+ 
 +Le format de la section message est le suivant :
  
 ^ Offset   ^ Description                                                                                                                                                  ^ ^ Offset   ^ Description                                                                                                                                                  ^
agi-game/specifications-resources.1621862998.txt.gz · Dernière modification : 2021/05/24 15:29 de frater