Suite du guide expliquant comment modifier WW2 Time of Wrath. Au programme cette fois, les évènements. Vous trouverez les liens pour la version originelle, réalisée par « Doomtrader », sur le forum de Wastelands Interactive (vous retrouverez les précédentes parties de ce guide dans nos archives sur Time of Wrath).
***
Partie 10 : « Events » , les bases détaillées.
Pour suivre cette dixième partie du guide, je vous conseille de prendre la peine de consulter le fichier joint (en fin de document), il servira de référence. Je vais à présent essayer de vous expliquer chaque ligne ou section composant cet Event (évènement). Souhaitez-moi bonne chance…
Code:
<!–transfering PP from Poland to USSR–>
Ceci est un commentaire, invisible pour le moteur de jeu. Je l’utilise d’ordinaire pour décrire ce qui se passe dans la section suivante de l’Event.
Code:
<event eventID= »19001″
L’identificateur de l’Event (event ID). Dans un scénario, chaque Event nécessite d’avoir son identificateur propre. Afin de s’y retrouver, il est conseillé d’établir sa propre liste d’identificateurs et de lister tout ceux déjà utilisés.
Code:
countryID= »1″
L’identificateur décrivant quels pays seront concernés par l’Event. En d’autre termes, lesquels pourront faire ce choix en cliquant sur le bouton « OK ». Ici, la Pologne correspond au chiffre 1.
Code:
visibleByPlayer= »0″
Relative à la précédente, cette commande permet de masquer les Events réservés à l’I.A. ou de nature technique (influant en arrière-plan sur le gameplay). Étant invisible par nature, cet Event n’activera pas de pop-up en fin de tour, pas plus qu’il ne nécessitera d’intervention de la part du joueur.
Code:
oneTimeChecking= »1″>
Le moteur suit cette routine : il charge d’abord l’Event #1, puis vérifie que toutes les conditions sont remplies. Si tel n’est pas le cas, il passe ensuite à l’Event #2 et ainsi de suite, jusqu’à ce que toutes les conditions soient remplies, auquel cas il revient au début de la liste et recommence. Si pour cette valeur nous entrons 0, cela lui indique qu’il devra poursuivre la vérification pendant toute la durée du tour. Avec une valeur à 1, il n’effectuera la vérification qu’une seule fois avant d’être réinitialisé. Pour rappel, 1 signifie Vrai (True) et 0 Faux (False).
Code:
<title>ZID_19001_title</title>
Ceci est le Titre de l’Event. Dans cet exemple il s’agit d’un Tag (une étiquette) pouvant être trouvé dans la base de données textuelle non disponible pour les modifications mais pouvant être écrite en clair, directement dans le fichier. Le jeu peut utiliser et reconnaître tout type de fontes (caractères arabes et chinois inclus).
Code:
<description>ZID_19001_desc</description>
Le descriptif de l’Event. Encore une fois, cet exemple est un Tag mais vous pouvez utiliser du texte simple.
Code:
<beginDate day= »1″ month= »1″ year= »1946″/>
Les conditions chronologiques de l’Event ; ignorées si la date actuelle du scénario est antérieure à celle spécifiée.
Code:
<condition>
Cette commande ouvre la section contenant les conditions. Suivent les pré-requis nécessaires, devant être respectés. Par exemple, l’appartenance de tel hexagone ; la nature des relations avec tel pays ; la possession d’un certain nombre de points de production, et cetera. La liste détaillée des valeurs peut être consultée dans le fichier EVENT_ENGINE_MANUAL.txt du répertoire /data/events/.
Code:
<and>
Ceci est un opérateur logique déterminant que toutes les conditions doivent être vérifiées. Si l’une d’elles ne l’est pas, l’Event ne sera pas activé.
Code:
<!–Country is active–>
<expression>
<leftOperand method= »Country.IsActive » param0= »1″/>
<operator value= »equals »/>
<rightOperand constValue= »1″/>
</expression>
Le commentaire initial, comme vous pouvez le constater, définit la nature de cette condition. La méthode leftOperand vous permet de déterminer une condition. En l’occurrence, savoir si le pays choisi est actif. En d’autres termes, s’il est encore présent dans le jeu. Le paramètre 0 (param0) désigne l’identité du pays concerné. Ici, il s’agit de celui ayant l’ID égale à 1 donc la Pologne (liste issue du fichier countries.csv. La valeur du champ operator renseigne sur la nature de l’activation ; dans cet exemple, il s’agit d’une égalité vis à vis de l’autre valeur : rightOperand. Elle pourrait aussi bien être supérieure ou inférieure mais s’agissant de l’activation de pays, nous n’utiliserons pas ici de valeurs réelles mais un booléen (Vrai/Faux) et donc une égalité fera très bien l’affaire. RightOperand renseigne sur la valeur constante correspondant à notre demande précédente, à savoir si le pays concerné remplit la condition : éliminé ou non.
Code:
<!–Poland is commies–>
<expression>
<leftOperand method= »Country.GetAlliance » param0= »1″/>
<operator value= »equals »/>
<rightOperand constValue= »3″/>
</expression>
Les explications précédentes ayant été plutôt longues, je vais essayer de faire concis pour cette entrée : on définit ici si le pays correspondant à l’ID 1 (la Pologne) est membre de l’alliance correspondant à la variable 3, c’est à dire celle affectée au Komintern.
Code:
<!– Warsaw controlled by Commies–>
<expression>
<leftOperand method= »Hex.ControlledByAliance » param0= »153″ param1= »81″ param2= »3″/>
<operator value= »equals »/>
<rightOperand constValue= »1″/>
</expression>
Cette entrée est un peu plus complexe dans la mesure où elle fait appel à trois paramètres. Heureusement, vous pourrez en saisir la signification en vous référant au fichier suivant : EVENT_ENGINE_MANUAL.txt (faites-le dès à présent). En langage intelligible, la transcription serait la suivante (cette fois, essayons de la lire en commençant par la fin) : est-il Vrai (<rightOperand constValue= »1″/>) que le Komintern (param2= »3″) contrôle (leftOperand method= »Hex.ControlledByAliance ») l’hexagone 153/81 (param0= »153″ param1= »81″) ? Il peut en effet s’avérer utile d’écrire, juste au cas où, une condition vérifiant si Munich n’est plus sous le contrôle de l’Axe !
Code:
<!–Not at war wit USSR–>
<expression>
<leftOperand method= »Country.HasWarWithCountry » param0= »1″ param1= »3″/>
<operator value= »equals »/>
<rightOperand constValue= »0″/>
</expression>
La lecture du commentaire initial nous indique ici que nous avons affaire à une condition négative. Essayons de traduire ceci en clair : n’est-il pas Vrai <rightOperand constValue= »0″/>) que les pays ayant les ID 1 et 3 (param0= »1″ param1= »3″) sont en guerre (method= »Country.HasWarWithCountry ») ? J’espère que tout cela commence à prendre sens à vos yeux ?
Code:
<!–PP more than 20–>
<expression>
<leftOperand method= »Country.GetProductionPoints » param0= »1″/>
<operator value= »greater »/>
<rightOperand constValue= »20″/>
</expression>
Encore une nouveauté ! Nous allons commencer à tester des valeurs utilisées dans le jeu. Précisément ici, la quantité des points de production (PP). La transcription depuis la fin de cette séquence serait trop difficile à comprendre, aussi allons-nous commencer par le début : tester si le pays ayant l’ID 1 (param0= »1″) a un total de PP (<leftOperand method= »Country.GetProductionPoints ») plus grand (<operator value= »greater »/>) que 20 (<rightOperand constValue= »20″/>).
Code:
</and>
Voilà la commande permettant de fermer l’expression correspondant à l’opérateur logique ouvert précédemment. Tout ce qui se trouve entre ces deux commandes doit être confirmé par le moteur du jeu, comme expliqué au début.
Code:
</condition>
Idem avec cette commande terminant la section comprenant les conditions de l’Event, ouverte au-dessus. Tout ce qui y est inclus doit être vérifié.
Code:
<options>
Nous assumons à présent que toutes les conditions sont remplies et que l’Event ouvre une fenêtre pop-up à l’écran. Le joueur peut donc se voir proposer des actions que l’on appelle les Options. Leur nombre est théoriquement illimité dans le cadre des Events mais se résume généralement à une ou deux, exceptionnellement à plus de quatre.
Code:
<option optionID= »1″ chanceAI= »100″>
Ceci nous indique l’ID de l’option mise en œuvre, ainsi que la probabilité pour que l’I.A la choisisse. Dans ce cas précis, n’ayant qu’une seule option offerte, cette probabilité est égale à 100% de chances de la valider. Notez bien que la somme des probabilités pour toutes les options DOIT absolument être égale à 100 (NDLR – Exemple : deux options ; la première 75 et la seconde 25 ou bien 50/50, etc.).
Code:
<description>ZID_19001_op1</description>
Le nom affecté à l’option. Ici encore, issu d’un Tag de la base de données mais il pourrait s’agir de n’importe quel texte, à votre convenance (NDLR – respectant cependant les règles typographiques de la programmation donc sans espaces !).
Code:
<tooltip>ZID_19001_desc1</tooltip>
Ici le joueur se informé par un « Tooltip », des conséquences du choix de cette option. Du texte simple peut être utilisé.
Code:
<effects>
Cette commande ouvre la section dédiée aux « Effects ». Autrement dit, ce qu’il adviendra si le joueur opte pour cette option.
Code:
<!–Production point removed from Poland–>
<effect method= »Country.ChangeProductionPoints » param0= »1″ param1= »-15″ />
Le commentaire initial est assez clair pour décrire ce qui va survenir mais voyons tout de même cela plus en détails. La signification des paramètres peut également être trouvée dans le fichier EVENT_ENGINE_MANUAL.txt, sous la rubrique Conditions. Cette expression est donc destinée à dire au moteur du jeu qu’il faut modifier le total de PP (method= »Country.ChangeProductionPoints ») pour le pays ayant l’ID 1 (param0= »1″) d’une valeur de -15 (param1= »-15″). En clair, qu’il faut réduire de 15 points les PP de la Pologne.
Code:
<!–Production point added to USSR–>
<effect method= »Country.ChangeProductionPoints » param0= »3″ param1= »15″ />
Nous avons ici l’opposée de l’instruction précédente, ajoutant 15 PP à l’URSS.
Code:
</effects>
La fin de la section des Effects pour l’option.
Code:
</option>
Cette commande indique que la section consacrée à l’option est terminée.
Code:
</options>
Ici nous indiquons que toutes les sections dévolues aux options sont fermées. Peu importe leur nombre, cette commande doit figurer.
Code:
</event>
Pour conclure, la commande finale spécifiant la fin de l’Event proprement dit et le fait qu’un nouveau peut être vérifié.
- Note : le fichier exemple avec coloration de la syntaxe se trouve en pièce-jointe dans le forum officiel, ici.