Faites réagir un profil de combat au combat avec des règles : une condition comme une vie basse ou un ennemi proche, et une action comme se replier, soigner, cibler quelqu'un ou finir le tour, avec chaque sujet, test, action et cible.
Les règles font réagir un profil à ce qui se passe pendant le combat : se replier quand la vie du personnage baisse, soigner un allié en difficulté, frapper en premier un monstre précis tant qu'il est là, prendre ses distances quand les ennemis se rapprochent. Chaque règle est une condition et une action, et la section Règles de l'éditeur les liste dans l'ordre.
"rules": [
{ "when": { "self.life": { "below": "30%" } }, "do": { "retreat": { "to": "outOfReach" } } },
{ "when": { "ally.life": { "below": "40%" } }, "do": { "heal": { "target": "lowestLifeAlly" } } }
]
Comment les règles s'appliquent
Avant chaque action du tour du personnage, le module vérifie la condition de chaque règle sur le combat tel qu'il est à cet instant : une règle peut donc commencer ou cesser de s'appliquer en plein tour. Une règle sans condition s'applique tout le temps.
Les règles s'appliquent aussi pendant le tour d'une invocation que le personnage contrôle, c'est alors l'invocation qui agit. Les sujets Personnage y lisent l'invocation, et Soi-même la désigne : Passer chaque tour passe donc aussi ses tours.
Il existe deux sortes de règles.
Les modificateurs changent la façon dont le module note un tour, et s'additionnent :
- chaque Cibler et chaque Éviter dont la condition est remplie s'applique ;
- parmi les règles de déplacement, Se replier, Approcher et Garder la distance, seule la première dont la condition est remplie s'applique.
Les actions imposées disent au personnage quoi faire ensuite : Lancer, Attaquer, Soigner, Booster et Terminer le tour. Les sorts de l'ouverture passent d'abord, puis ces règles, dans leur ordre. La première qui peut être jouée tout de suite devient la prochaine action du personnage, et le module joue librement la suite du tour. Une action qui ne peut pas être jouée, faute de PA, de cible à portée ou de la cible elle-même, est passée.
L'ordre compte donc pour les actions imposées : mettez la plus urgente en premier. Une règle « soigner quand un allié est bas » placée au-dessus de « attaquer l'ennemi avec le moins de vie » soigne d'abord chaque fois que les deux s'appliquent.
Actions
| Action | JSON | Réglages | Ce qu'elle fait |
|---|---|---|---|
| Lancer | cast |
spell : un sort, ou "weapon" (Arme ou mains nues dans l'éditeur), obligatoire. target : facultatif. |
Lance ce sort en premier, sur la cible quand il y en a une, sinon là où il fait le plus. |
| Attaquer | attack |
target : facultatif |
Attaque en premier, avec son meilleur sort de dégâts ou l'arme, sur la cible quand il y en a une. |
| Soigner | heal |
target : facultatif |
Soigne en premier, la cible quand il y en a une. |
| Booster | buff |
target : facultatif |
Lance un bonus en premier, sur la cible quand il y en a une. |
| Se replier | retreat |
to : À couvert (cover) ou Hors de portée (outOfReach) |
Finit ses tours loin du danger : À couvert, hors de la vue de tout ennemi quand il le peut, comme le positionnement Se cacher ; Hors de portée, là où le danger est le plus faible, comme Harceler. |
| Approcher | approach |
target : facultatif |
Finit ses tours près de la cible, ou de l'ennemi le plus proche quand il n'y en a pas. |
| Garder la distance | keepDistance |
min et max : des cases |
Finit ses tours entre min et max cases de l'ennemi le plus proche. max à 0 veut dire sans limite haute. |
| Cibler | focus |
target |
Frapper la cible compte deux fois plus. |
| Éviter | avoid |
spell : un sort, ou "weapon" (Arme ou mains nues dans l'éditeur). target : facultatif. |
Ne lance pas ce sort, et frapper la cible ne compte pour rien, tant que la règle s'applique. |
| Terminer le tour | endTurn |
after : des secondes, 0 par défaut |
Finit le tour sans agir, une fois ce nombre de secondes écoulé depuis son début. |
Terminer le tour est une action imposée comme les autres : quand c'est la première qui peut être jouée, le personnage ne fait rien d'autre dans ce tour. Son délai ne coûte jamais le tour : le module le termine au moins 2 secondes avant la fin du temps du tour, quoi que dise after. Une règle sans condition qui termine le tour, c'est ce qu'écrit Passer chaque tour au bout de (secondes) dans Jeu.
Cibles
La cible d'une règle désigne un combattant, recalculé à chaque décision.
| Cible | JSON | Le combattant |
|---|---|---|
| N'importe qui | Absente | Personne en particulier : le module choisit. |
| Soi-même | "self" |
Le personnage. |
| Ennemi avec le moins de vie | "lowestLifeEnemy" |
L'ennemi à qui il reste le moins de vie. |
| Allié avec le moins de vie | "lowestLifeAlly" |
L'allié à qui il reste le moins de vie, le personnage non compris. |
| Ennemi le plus proche | "closestEnemy" |
L'ennemi le plus proche du personnage. |
| Ennemi le plus dangereux | "mostDangerousEnemy" |
L'ennemi qui pourrait infliger le plus au personnage là où il se tient. |
| Un monstre | { "monster": 4109 } |
Un ennemi de ce monstre. |
| Une race | { "race": 137 } |
Un ennemi de cette race de monstres. |
{ "fighter": -2 } |
Seulement dans le JSON : un combattant du combat, par l'identifiant que le jeu lui donne. Surtout pour les scripts. |
Quand deux combattants sont à égalité, celui qui a le plus petit identifiant est pris. Une cible absente du combat, comme un monstre qui n'est pas là ou qui est mort, fait passer son tour à une action imposée.
Conditions
Une condition est remplie quand chacun de ses tests l'est. Dans l'éditeur, Seulement si ouvre la condition, Test ajoute un test, et Toutes, L'une et Pas ajoutent un groupe.
Sujets
Chaque test lit un sujet du combat. L'éditeur le nomme par qui et quoi, comme Personnage · PV.
| Sujet | JSON | Tests | Lit |
|---|---|---|---|
| Personnage · PV | self.life |
below, above |
La vie du personnage, en nombre ou en pourcentage de son maximum. |
| Personnage · Bouclier | self.shield |
below, above |
Ses points de bouclier, en nombre ou en pourcentage de sa vie maximale. |
| Personnage · PA | self.ap |
below, above |
Ses PA restants. |
| Personnage · PM | self.mp |
below, above |
Ses PM restants. |
| Personnage · Etats | self.state |
is |
S'il est dans cet état. |
| Ennemis · Etats | enemy.state |
is |
Si un ennemi est dans cet état. |
| Alliés · Etats | ally.state |
is |
Si un allié est dans cet état, le personnage non compris. |
| Alliés · PV | ally.life |
below, above |
Si la vie d'un allié est dans cette fourchette, le personnage non compris. |
| Ennemis · Nombre | enemies.count |
is, atLeast, atMost |
Combien d'ennemis sont en vie, invocations comprises. |
| Alliés · Nombre | allies.count |
is, atLeast, atMost |
Combien d'alliés sont en vie, invocations comprises, le personnage non compris. |
| Ennemis · Proches | enemies.within |
cells, puis atLeast, atMost |
Combien d'ennemis se tiennent à cells cases ou moins du personnage. |
| Alliés · Proches | allies.within |
cells, puis atLeast, atMost |
Combien d'alliés se tiennent à cells cases ou moins du personnage. |
| Ennemis · Monstre | enemy.monster |
is |
Si ce monstre fait partie des ennemis en vie. |
| Ennemis · Race | enemy.race |
is |
Si un monstre de cette race fait partie des ennemis en vie. |
| Combat · Tour global | fight.round |
is, atLeast, atMost |
Le tour global du combat. |
| Combat · Tours | fight.turn |
is, atLeast, atMost |
Combien de tours le personnage, ou l'invocation dont c'est le tour, a joués dans ce combat, celui en cours compris. |
| Cible · PV | target.life |
below, above |
Dans la condition d'un sort seulement : la vie du combattant sur lequel le sort est lancé. |
| Cible · Distance | target.distance |
below, above |
Dans la condition d'un sort seulement : à combien de cases se trouve ce combattant. |
Chaque sujet ne prend que les tests de sa ligne. Un test qu'il ne prend pas, comme below sur Ennemis · Nombre, un pourcentage sur Personnage · PA, Personnage · PM ou Cible · Distance, ou Proches sans À moins de (cases), est refusé à l'enregistrement, en le nommant.
Un sujet que cet Asterobot ne connaît pas n'est jamais rempli, et le profil affiche un avertissement à son sujet. Il en va de même des sujets Cible hors de la condition d'un sort.
Tests
| Test | JSON | Rempli quand |
|---|---|---|
| Sous | below |
La valeur est strictement plus petite. Un nombre, ou un pourcentage écrit en texte, comme "30%". |
| Au-dessus de | above |
La valeur est strictement plus grande. Un nombre ou un pourcentage. |
| Est | is |
La valeur est exactement celle-ci, ou, pour les états, les monstres et les races, celui-ci est là. |
| Au moins | atLeast |
Le nombre est celui-ci ou plus. |
| Au plus | atMost |
Le nombre est celui-ci ou moins. |
| À moins de (cases) | cells |
Pour Proches : la distance comptée, en cases. |
Un test avec plusieurs bornes les demande toutes : { "below": "60%", "above": "20%" } est rempli entre un cinquième et trois cinquièmes de la vie du personnage.
Groupes
| Groupe | JSON | Rempli quand |
|---|---|---|
| Toutes ces conditions | all |
Chaque condition de sa liste est remplie. |
| L'une de ces conditions | any |
Au moins une condition de sa liste est remplie. |
| Pas celle-ci | not |
Sa condition n'est pas remplie. |
Les groupes se placent dans une condition et peuvent contenir leurs propres groupes. Cette condition est remplie pendant les deux premiers tours globaux, ou quand un ennemi est dans l'état Affaibli (l'identifiant d'un état, choisi par son nom dans l'éditeur), tant que moins de 3 ennemis se tiennent à 2 cases ou moins :
"when": {
"any": [
{ "fight.round": { "atMost": 2 } },
{ "enemy.state": { "is": 42 } }
],
"not": { "enemies.within": { "cells": 2, "atLeast": 3 } }
}
Exemples
Finir les tours là où le danger est le plus faible tant que la vie du personnage est sous 30 % :
{ "when": { "self.life": { "below": "30%" } }, "do": { "retreat": { "to": "outOfReach" } } }
Garder en vie les alliés d'un soigneur d'abord :
{ "when": { "ally.life": { "below": "40%" } }, "do": { "heal": { "target": "lowestLifeAlly" } } }
Ne pas laisser les ennemis encercler le personnage :
{ "when": { "enemies.within": { "cells": 1, "atLeast": 2 } }, "do": { "keepDistance": { "min": 2 } } }
Frapper d'abord le Petit Gloot tant qu'il est dans le combat :
{ "when": { "enemy.monster": { "is": 4109 } }, "do": { "focus": { "target": { "monster": 4109 } } } }
Garder l'arme pour la fin du tour : pas de coup d'arme tant que le personnage a encore plus de 4 PA :
{ "when": { "self.ap": { "above": 4 } }, "do": { "avoid": { "spell": "weapon" } } }
Attendre 10 secondes et passer à partir du tour global 30, pour laisser filer un long combat :
{ "when": { "fight.round": { "atLeast": 30 } }, "do": { "endTurn": { "after": 10 } } }
Exemples de profils assemble des règles avec les autres réglages dans des profils entiers.