# Déroulement d'un combat

L'ensemble des configurations se trouve dans config\versus.py

# Initialisation

On considère que un personnage de class Voleur aura toujours l'initiative et commencera donc le combat. Pour ce qui concerne les autres entités personnage/ennemi, on effectue un jet sur l'attribut DEX (Dexterity). Ceux qui réussissent le mieux leur test passent devant.

# Phase d'un joueur

Chaque joueur dispose d'un certain nombre d'action (définie par numberOfAction) . Ce dernier dispose de 2 action basic qui sont Attack et Move et s'il est Mage, il dispose d'une capacité supplémentaire qui est Sort. Il est intéressant de noter que chaque action du joueur réduit de 1 son nombre d'action pour le tour.

# Attaquer

Tout abord s'il le joueur n'as pas d'arme , on considère qu'il tape à main nue et que ce dernier a une distance TOUCH_HAND de rayon et fait des dégâts de DMG_ANY_WEAPON.

Il peut avoir une arme sélectionnée, qui peut être distinguée par 2 types : sword et arc.

Avec le type sword, un cercle se dessine autour du player définissant la porté de l'arme, puis nous devons sélectionner un ennemi. Si ce dernier se trouve hors de portée, dommage une action est consommé. Mais si l'ennemie se trouve à portée, un lancer de STR est effectué pour determiné s'il l'attaque touche.

Avec le type arc, on considère que l'on peut tirer de n'importe où mais un malus proportionnel à la distance s'applique sur le lancer de DEX

dist = self.distance(player, self.selectEnemy)
scope = player.weapon.scope
if scope < dist:
    malus = -((dist - scope) // TILESIZE) * MALUS_ARC

# Se déplacer

Créer un cercle de rayon DISTANCE_MOVE puis on sélectionne une position dans le cercle. Le personnage se déplace automatique grace à la fonction de pathfinding.

# Lancer un sort

Chaque utilisation de sort a un coût en mana, et chaque sort pose au sol une zone d'effet qui rend des point de vie pour les sort de type heal et les autres des dégâts.

Un même sort peut appliquer des zones qui ont une valeur d'action différente (heal/dommage) car le sort fait comme les armes et possède une caractéristique xdz (x dé de valeur z)

# Phase des ennemis

# Décision

En combat, les ennemis fuient systématiquement si ils leur restent peu de vie. Sinon, si les ennemis sont à portée (attack_range) d'un joueur, ils vont attaquer, sinon ils vont se déplacer vers ce joueur.

# Déplacement

Les ennemis vont suivre le chemin le plus court trouvé par l'algorithme de pathfinding A* vers le joueur en vue et suivre ce chemin de manière presque linéaire avec une vitesse speed.

# Attaque

Les ennemis utilisent leur pouvoir spécial s'ils en possèdent un et qu'il s'est écoulé un certain nombre de tour depuis le début du combat ou la dernière fois qu'ils l'ont utilisé (cooldown). Sinon, une attaque simple va être lancée commme pour un joueur.