Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
agi-game:specifications-resources [2021/05/24 15:29] – frater | agi-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's Adventure Game Interpreter | + | Au cœur de l'AGI (Adventure Game Interpreter) de Sierra se trouve le fichier " |
- | 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 | + | Les tableaux suivants présentent une liste de toutes les commandes |
+ | |||
+ | Les noms des commandes sont tirés des messages | ||
^ Opcode | ^ Opcode | ||
Ligne 253: | Ligne 258: | ||
- | ==== The header ==== | + | ==== le header ==== |
- | The header of each logic script | + | L' |
- | discussed at a later stage. | + | |
+ | Après cette date, une compression | ||
+ | |||
+ | Cette compression sera discutée ultérieurement. | ||
^ Offset | ^ Offset | ||
| 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' |
- | | 5-6 | Offset of logic code message | + | | 5-6 | Décalage de la section |
- | All text that can be printed to the screen from within a logic script | + | Tout le texte qui peut être imprimé à l' |
- | Example: KQ1. Room 2. | + | Exemple: KQ1. Room 2. |
< | < | ||
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' |
+ | |||
+ | 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 encountered. The // | + | À l' |
- | Example: KQ1, Room 2. | + | Exemple: KQ1, Room 2. |
<code C> | <code C> | ||
Ligne 298: | Ligne 312: | ||
</ | </ | ||
- | The above translates to: | + | que l'on peut traduire comme ci-dessous: |
<code C> | <code C> | ||
Ligne 304: | Ligne 318: | ||
</ | </ | ||
- | which tests whether | + | ce code test si le "flag" numero |
+ | Le '' | ||
< | < | ||
0x00 - 0x12 Condition codes. | 0x00 - 0x12 Condition codes. | ||
</ | </ | ||
+ | Lorsque l' | ||
- | 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 '' |
- | mode. The two bytes immediately following the second 0xFF determine how many bytes this // | + | |
- | us or the machine, does three things: | + | |
- | - Reads in the following two bytes. | + | Lorsque le deuxième '' |
- | - 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: | ||
</ | </ | ||
- | ==== The **else** | + | ==== la commande |
+ | |||
+ | L' | ||
+ | |||
+ | Cette caractéristique est importante et a causé un certain nombre de problèmes dans le passé. | ||
- | The **else** | + | Lorsqu' |
- | Here's an example: | + | voici un exemple: |
<code C> | <code C> | ||
Ligne 353: | Ligne 373: | ||
- | Usually you would expect the bracket | + | En général, on s' |
- | The **else** statements themselves are a lot like **if** statements except that they' | + | La situation est la même pour les structures |
- | ==== 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 '' |
- | Conditions can be one of the following | + | Seule la distance entre les crochets est donnée après le code '' |
+ | |||
+ | ==== Test de conditions ==== | ||
+ | |||
+ | Les conditions peuvent être de l'un des types suivants: | ||
< | < | ||
- | FF 07 05 FF One condition | + | FF 07 05 FF Une condition |
- | FF FD 07 05 FF | + | FF FD 07 05 FF |
- | FF 07 05 07 06 FF Multiple | + | FF 07 05 07 06 FF Plusieurs |
- | FF FC 07 05 07 06 FC FF Multiple | + | FF FC 07 05 07 06 FC FF Plusieurs |
FF FC 07 06 07 06 FC FD 07 08 FF Combination. | FF FC 07 06 07 06 FC FD 07 08 FF Combination. | ||
</ | </ | ||
- | These conditions | + | Ces conditions |
<code C> | <code C> | ||
Ligne 379: | Ligne 403: | ||
</ | </ | ||
- | If multiple boolean | + | Si plusieurs |
- | their values are ORed together. | + | |
+ | Si plusieurs | ||
+ | |||
+ | Le code '' | ||
- | 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 | + | Vous vous demandez peut-être comment l' |
- | Inside this file there is a table which contains four bytes for each AGI command and condition | + | |
+ | Cette information | ||
+ | |||
+ | Dans ce fichier, il y a un tableau qui contient quatre octets pour chaque commande | ||
+ | |||
+ | Ces quatre octets sont interprétés comme suit : | ||
^ Offset | ^ Offset | ||
- | | 0-1 | Pointer to implementation | + | | 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 | + | Le type de valeur des arguments |
< | < | ||
Ligne 400: | Ligne 431: | ||
</ | </ | ||
- | If the bit is set, argument | + | Si le bit est activé, l'argument |
+ | |||
+ | La fonction du bit 0 n'est pas connue, car aucune commande | ||
Examples: | Examples: | ||
- | * 0x80 Says that the commands first argument | + | * 0x80 Indique que le premier |
- | * 0x60 Says that the second and third arguments | + | * 0x60 Indique que les deuxième et troisième |
- | ==== The messages | + | ==== la section |
- | The messages | + | La section |
- | 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: | ||
</ | </ | ||
- | In the above example, the print statement is represented as: | + | Dans l' |
< | < | ||
Ligne 426: | Ligne 461: | ||
</ | </ | ||
- | The 0x08 is the number given to the string and corresponds to its position | + | Le '' |
- | The format | + | |
+ | Le format | ||
^ Offset | ^ Offset |