Avancé

Cette page explique le jeu avec des détails atroces. Si vous ne comprenez pas certains termes, c'est tout à fait compréhensible. Cette page préfère l'exactitude à la facilité de compréhension. La plupart des informations ici ne sont pas essentielles à connaître pour un joueur, mais lorsque cela est possible, des termes de programmation sont utilisés que vous pouvez rechercher sur Google ou interroger d'autres joueurs. Si vous souhaitez un aperçu plus accessible des mécanismes, consultez les bases.

## Configuration de l'équipe

Il existe 4 classes de robots. Dans sandbox, vous pouvez utiliser n'importe quelle configuration d'équipe, dans tournois cela peut être spécifié par le créateur du tournoi et dans tous les autres cas, une classe de bot ne peut représenter que 35 % de votre configuration, à l'exception des assauts, qui peuvent être jusqu'à 100% de votre équipe.

## Déterminisme

Gladiabots est un jeu déterministe et symétrique. Cela signifie que les cartes sont toujours symétriques (en rotation ou en miroir le long de l'axe central) et si les deux équipes ont la même configuration d'équipe et la même IA, le match sera toujours nul, les deux équipes exécutant exactement les mêmes actions et manquant/frappant exactement la même action. mêmes clichés.

## Tours

Gladiabots ressemble à un jeu en temps réel lorsque vous jouez, mais il s'agit en fait d'une simulation au tour par tour fonctionnant à 40 tours par seconde. Chaque bot a un ordre d'instanciation, décidé par la carte. Cela signifie que le premier bot de chaque équipe évaluera son IA avant le premier tour, le deuxième bot de chaque équipe évaluera ensemble avant un tour suivant, etc. Cela signifie en effet que deux alliés n'évaluent jamais leur IA avant le même tour, car les évaluations sont en effet échelonnées.

### Débogueur

Lorsque vous cliquez sur un bot pendant un match et regardez le débogueur, il y a une barre bleue en bas qui vous indiquera combien de tours il vous reste avant d'évaluer votre IA. Mettre le jeu en pause le mettra en pause entre les tours, APRÈS que l'évaluation de l'IA ait été exécutée pour tous les robots qui évaluent avant le tour suivant. Cela signifie que lorsque votre bot vient d'évaluer son IA, la barre bleue sera pleine. Si vous voulez vous assurer que vous faites une pause exactement après l'évaluation de l'IA d'un certain bot, avant que l'action ne soit exécutée, utilisez le bouton "suivant tick" avec ce bot sélectionné.

## Tiques

Un tick est généralement considéré comme la combinaison d’une évaluation de l’IA suivie de 10 tours (0,25 seconde) de simulation. Voici l'ordre des opérations effectuées dans un tick :

* L'IA est évaluée jusqu'à ce qu'une action valide soit trouvée
* L'action est transformée en instruction spécifique
* Pendant les 10 tours suivants, cette instruction est exécutée

## Nœuds

Une IA est une structure graphique construite à partir de nœuds et de connexions entre nœuds.

Les nœuds Action et Condition sont en fait des requêtes de recherche (peu différentes des requêtes SQL par exemple) qui sont exécutées. Les actions de marquage et de comptage s'exécuteront immédiatement, lors de l'évaluation de l'IA et les nœuds suivants pourront voir le résultat de leurs actions. Les actions sans comptage et sans marquage seront transformées en instructions à exécuter dans les 10 prochains tours.

Les connecteurs ne servent à rien d’autre que de vous permettre de diviser une ligne de connexion en plusieurs.

Les sous-IA reviennent fondamentalement à prendre les nœuds à l'intérieur et à les copier à l'endroit où se trouve le nœud sous-IA.

### Nombre de nœuds

En campagne, en matchs classés et en matchs privés, vous êtes autorisé à déployer 500 nœuds par bot. Dans le bac à sable, vous êtes autorisé à en déployer autant que vous le souhaitez et dans les tournois, vous êtes autorisé à en déployer autant que l'organisateur du tournoi le précise.

Les seuls nœuds qui comptent dans votre nombre de nœuds sont les actions et les conditions. Pour les sous-IA, chaque nœud de sous-IA placé ajoutera le sous-total du nœud de cette sous-IA à l'IA dans laquelle il est placé (donc si vous placez le même sous-IA deux fois, il sera compté deux fois).

## Évaluation

Lorsqu'une IA évalue, un parcours graphique en profondeur d'abord est lancé, en commençant au nœud racine. Les conditions et les actions peuvent échouer ou réussir. Les conditions d’échec empêcheront la traversée de le dépasser. Tout nœud n'est traversé qu'une seule fois, même si plusieurs connexions y sont connectées (mais cela reste important en raison de conditions d'échec invalidant l'une des connexions). Les enfants sont traversés dans le sens inverse des aiguilles d'une montre, en commençant dans le sens de 12 heures (vers le haut). Le comportement pour connecter des lignes qui sont exactement dans la même direction ou directement vers le haut n'est pas défini et ne doit pas être invoqué. Chaque fois qu'un nœud d'action sans marquage et sans comptage réussit, l'évaluation est immédiatement arrêtée et cette action est transformée en instruction.

### Débogueur

Le débogueur affichera les nœuds qui n'ont pas été traversés comme translucides et ceux qui ont réussi ou échoué comme opaques. Les nœuds réussis auront une coche verte, tandis que les nœuds échoués auront une croix rouge. De cette façon, vous pouvez procéder manuellement à l'évaluation et voir exactement ce qui s'est passé lors du tick précédent.

## Actions et conditions

Les actions et les conditions sont en fait des requêtes de recherche (qui ne sont pas différentes des requêtes SQL ou d'autres instructions de langage de requête) qui échouent ou réussissent et produisent un résultat. En conséquence, les conditions permettront à la traversée de passer, les actions de marquage et de comptage exécuteront immédiatement un changement d'état et les nœuds d'action arrêteront l'évaluation de l'IA et leur résultat sera une instruction exécutée dans les tours suivants. Chaque requête a une cible, des filtres cibles et un sélecteur d'ordre de tri cible ou un paramètre de seuil.

Des échecs sont produits lorsqu'une cible valide n'est pas trouvée, des résultats sont produits lorsqu'une cible valide est trouvée.

### Cibles

Les cibles sont un type de liste d'entités dans laquelle effectuer la recherche. Cela va des différentes cibles de robots aux ressources en passant par des entités spéciales telles que les champs de force. Chaque objet interactif sur la carte est une entité. Certaines entités figurent dans plusieurs listes d'entités, par exemple les robots ennemis figurent à la fois dans la liste des robots ennemis et dans la liste générale des robots.

### Filtres

Les filtres excluront les éléments d'une liste d'entités. Par exemple, le filtre « à courte distance de moi » exclura toutes les entités de la liste qui ne sont pas à courte portée de vous. Les filtres peuvent avoir différents combinateurs logiques : vous pouvez annuler un filtre spécifique ou choisir d'effectuer AND ou OR les conditions dans le même groupe de filtres. Différents groupes de filtres sont toujours combinés avec le combinateur AND (tout cela devient plus clair lorsque vous lisez le texte produit).

Les filtres examinent toujours les informations du tour précédent, sauf lorsqu'il s'agit de tags et de compteurs.

### Tri et Conditions

Les conditions ont un paramètre de seuil. Cela signifie que vous pouvez définir un seuil pour le nombre de résultats de recherche souhaités (par exemple, réussir uniquement lorsqu'au moins deux cibles sont trouvées). Le paramètre "existe" est exactement le même que le paramètre "> 0" et le paramètre "n'existe pas" est le même que le paramètre "= 0". Pour les paramètres de comparaison, vous pouvez comparer avec n’importe quel nombre ou n’importe quel compteur (c’est très puissant).

Les actions sélectionneront une seule des cibles et le feront en triant d'abord la liste des entités et en sélectionnant l'élément le plus important en fonction du sélecteur d'ordre de tri. Par exemple, les entités peuvent être triées selon leur proximité ou leur distance par rapport au centre. Si deux entités sont triées dans des positions égales (par exemple, à égale distance du centre), un tri secondaire est effectué, qui les triera en fonction de leur proximité avec le bot en cours d'évaluation.

## Instructions

Le résultat d’une action réussie sans marquage et sans comptage est une instruction à exécuter dans les tours suivants. Une instruction n’a qu’une cible et un type spécifiques. Cela signifie que les filtres et le tri ne sont calculés qu'au moment de l'évaluation et que l'instruction réelle continuera à cibler la même cible tout le temps (sauf si cette cible disparaît, comme avec un robot mourant/réapparaissant ou une ressource récupérée, auquel cas l'instruction ne fait rien à la place). Cela signifie également que si un robot sort de portée entre deux évaluations et que vous tirez sur des robots à portée, il continuera à tirer sur cette cible. De cette façon, il est possible pour un tireur d'élite de rater un tir. Autre exemple : si vous vous déplacez vers le bot le plus proche, mais que le bot le plus proche change entre les évaluations, il continuera à se déplacer vers le bot d'origine jusqu'à la prochaine évaluation.

Les types d'instructions suivants sont présents dans le jeu (pour toutes les entités qui sont des cibles valides) :

* Attendez
* Approcher une entité
* Fuir une entité
* Attaquez un ennemi
* Capturer une entité
* Marquer une ressource

### Interactions secondaires

Certaines actions génèrent des interactions secondaires immédiates de durée 0. En voici une liste :

* Il n'y a pas d'instruction « abandonner la ressource ». Au lieu de cela, l'action crée une instruction d'attente et une interaction secondaire de « suppression de ressource ».
* Lorsqu'une instruction « capturer une ressource » cible une ressource dans un rayon de 0,5 mètre, une interaction « ramasser la ressource » est créée
* Lorsqu'une instruction « attaquer l'ennemi » est générée après la période de visée correcte, une interaction secondaire « tirer » est générée

## Cas extrêmes

### Chance d'attaque et de coup

Les attaques passent par plusieurs phases : visée, tir et temps de recharge entre les volées de tirs. Chaque fois qu'un tir est prêt à être tiré, une interaction d'attaque sera générée au tour suivant, à condition que le robot reçoive toujours l'ordre d'attaquer. Cela signifie qu'en réalité, les robots tirent 1 tour APRÈS les tours de visée. Cela signifie qu'un tireur d'élite tirera au 121ème tour (ou 13ème tick), pas au douzième, mais que le deuxième tir aura lieu au 241ème tour (ou 25ème tick), car l'interaction secondaire du tir n'interfère pas avec l'attaque de ce tour. instruction.

La chance de coup est un pourcentage de coup aléatoire généré au moment de l'interaction avec le tir. Les balles se déplacent à 40 mètres par seconde. Cela signifie que même si l'ennemi se met hors de portée pendant le trajet de la balle, il frappera quand même. Dans le passé, le jeu utilisait un compteur de précision, mais ce n'est plus le cas, les chances de tir sont désormais entièrement aléatoires.

### Autres

* Au tout premier tour de jeu, tous les robots sont détectés comme exécutant l'instruction d'attente
* Si un robot se déplace vers un objet qu'il peut atteindre pendant le tick en cours, il s'y déplacera et restera inactif pour le reste du tick. Cette action sera toujours détectée comme un mouvement, même si l'unité a déjà commencé le tick à la destination et ne bouge pas du tout.
* Les 2 robots les plus proches pouvant se rapprocher sont limités par le modèle de collision. Le modèle de collision d'un bot est un cercle d'un rayon de 0,3 mètre pour Assault, Shotgun et Sniper et de 0,4 mètre pour Machinegun.
	+ À FAIRE : ajouter des informations sur les collisions : quand les robots peuvent-ils être poussés et par qui et quand ne le peuvent-ils pas ?
	+ À FAIRE : quand les robots peuvent-ils être poussés hors des champs de force ? Est-ce lorsque vous vous dirigez vers le champ de force au lieu du robot ?
* À FAIRE : Vérifier : si un robot attrape une ressource, il se déplacera vers cette ressource jusqu'à ce qu'elle se trouve dans la plage où il récupère ensuite la ressource et passe au repos. Lors du déplacement vers la ressource, il sera détecté comme se déplaçant vers la ressource. Cependant, au moment où il récupère la ressource, il sera détecté comme inactif à moins qu'il ne récupère la ressource à la toute fin d'un tick.
* Marquer avec une ressource suit des règles similaires à celles utilisées pour attraper une ressource, à la différence qu'elle se déplace vers la base au lieu d'une ressource.
* La capture et le score avec une ressource peuvent être effectués à 0,5 mètre de la ressource ou de la base.
* Si des robots de différentes équipes sont suffisamment proches pour récupérer la même ressource et essayer de le faire, ni l'un ni l'autre ne le fera et ils resteront inactifs.
* La visée et l'attaque sont détectées comme des attaques. Il n'y a aucun moyen de détecter la différence.
* Capturer une base est différent de s'y déplacer, car l'action s'arrête lorsque la base est plus proche qu'une certaine distance (À FAIRE : quelle est cette distance ? 1,5 mètre ?)
* Les ressources récupérées disparaissent des listes d'entités, mais conservent leurs balises
* Les ressources qui ont été abandonnées ne peuvent pas être récupérées par le même bot dans les 4 prochains ticks (TODO : est-ce que cela apparaît comme en attente ou en capture pendant cette période ?)
* Il n'y a pas d'instruction "tourner", les bots se déplaceront immédiatement dans l'autre sens (même si l'animation peut faire penser le contraire)