# Ajouter un personnage custom !

## Étape 1: Création du fichier de config

```json
{
    "texture": {
      "hframes": 0,
      "vframes": 0,
      "scaleX": 0,
      "scaleY": 0,
      "offsetX": 0,
      "offsetY": 0
    },
    "animations": {
      "Idle": {
        "name": "Idle",
        "StartFrame": 0,
        "EndFrame": 0,
        "Loop": (true/false)
      },
      "Run": {
        "name": "Run",
        "StartFrame": 8,
        "EndFrame": 13,
        "Loop": true
      },
      "Hit": {
        "name": "Hit",
        "StartFrame": 144,
        "EndFrame": 148,
        "Loop": false
      },
      "Attack1": {
        "name": "Attack1",
        "StartFrame": 40,
        "EndFrame": 44,
        "damage": 2,
        "direction": "none",
        "Loop": false,
        "collision": {
          "position": [
            {
              "x": 0,
              "y": 0
            },
          ],
          "activeFrames": 2,
          "disabledFrames": 3
        }
      },
      
      "AirAttack1": {
        "name": "AirAttack1",
        "StartFrame": 64,
        "EndFrame": 68,
        "damage": 2,
        "direction": "down",
        "Loop": false,
        "collision": {
          "position": [
            {
              "x": 0,
              "y": 0
            },
          ],
          "activeFrames": 2,
          "disabledFrames": 4
        }
      }
      
```

* Commencer par créer un dossier "characters" dans le même dossier ou se trouve votre exécutable.
* Dans le dossier characters créer un sous-dossier avec le nom de votre personnage
* Dans ce dossier creer un sous-dossier nommé assets.
* Créer un fichier config.json et placer le dans le dossier que vous venez de créer et Récupérer le modèle de fichier de configuration ci-dessus.
* Placer dans le dossier '*assets*' l'icon qui apparaitera lors de la sélection de personnage. Nommez le icon.png.

## Étape 2: Configurer la texture de votre personnage

```json
 "texture": {
      "hframes": 0,
      "vframes": 0,
      "scaleX": 0,
      "scaleY": 0,
      "offsetX": 0,
      "offsetY": 0
    },
```

* Placer dans le dossier assets votre fichier png correspondant aux textures de votre personnage.
* Ce fichier devra être nommé sheet.png
* Compléter ensuite les valeurs de hframe (nombre d'animations en horizontale) et vframe (nombre d'animation en verticale).
* Ajouter une scale à votre personnage.
* Ajouter un offset à votre personnage.

<figure><img src="https://448431203-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgEh1bkVmWtCeQvjfXJts%2Fuploads%2FPjgiUjfvXplBbqtfBtQH%2Fdocs.png?alt=media&#x26;token=52193227-e5f2-4d63-9987-25564972b6cf" alt=""><figcaption><p>VFrames: 7, Hframes: 8</p></figcaption></figure>

* Pour que votre sheet.png soit correct il faut que toutes les frames ont une même taille.

## Étape 3: Gérer les animations

```json
 "animations": {
      "Idle": {
        "name": "Idle",
        "StartFrame": 0,
        "EndFrame": 0,
        "Loop": (true/false)
      },
      "Run": {
        "name": "Run",
        "StartFrame": 8,
        "EndFrame": 13,
        "Loop": true
      },
      "Hit": {
        "name": "Hit",
        "StartFrame": 144,
        "EndFrame": 148,
        "Loop": false
      },
      "Attack1": {
        "name": "Attack1",
        "StartFrame": 40,
        "EndFrame": 44,
        "damage": 2,
        "direction": "none",
        "Loop": false,
        "collision": {
          "position": [
            {
              "x": 0,
              "y": 0
            },
          ],
          "activeFrames": 2,
          "disabledFrames": 3
        }
      },      
      "AirAttack1": {
        "name": "AirAttack1",
        "StartFrame": 64,
        "EndFrame": 68,
        "damage": 2,
        "direction": "down",
        "Loop": false,
        "collision": {
          "position": [
            {
              "x": 0,
              "y": 0
            },
          ],
          "activeFrames": 2,
          "disabledFrames": 4
        }
      }
```

* Votre sheet.png devra contenir 10 animations:
  1. Hit
  2. Idle
  3. Jump
  4. Run
  5. Attack1, Attack2, Attack3
  6. AirAttack1, AirAttack2, AirAttack3

* Si vous ne mettez pas toute ce animations rien ne se passera lorque vous appuyerez sur le boutton correspondant.

* Il ya deux types d'animations, simples (Hit, Jump, Run, Idle) et les attaques.
  1. ```json
     Voici un Exemple d'animations simple.

       "Idle": {
         "name": "Idle",
         "StartFrame": 0, #Frame de début de l'animation
         "EndFrame": 0, #Frame de fin de l'animation
         "Loop": (true/false) #true si l'animation doit se jouer en boucle sinon false
       },
     ```

  2. ```json
     Voici un exemple d'attaque

     "attack1": {
       "name": "Attack1",
       "StartFrame": ,
       "EndFrame": ,
       "damage": , (Dégat de l'attaque)
       "direction": "none", #Direction dans laquelle l'adeversaire sera
                             projeté s'il est touché (none, right, left, up, down)
       "Loop": false,
       "collision": {
         "position": [ 
           { #Position en x, y de la hitbox d'une frame
             "x": 0,
             "y": 0
           },
           #Rajouter Les position de la hitbox pour chaque frames de l'animation.
         ],
         "activeFrames": 1, Frame à laquelle la hitbox est active
         "disabledFrames": 2 Frame à laquelle la hitbox se désactive
     }  
     ```

* Pour le bon fonctionnement de l'animations "*Hit"* (animations qui est joué lorsque le joueur est touché), elle devra contenir 5 frames et ne pas être joué en boucle ('loop': false).

* Le "name" de vos animations doit correspondre à la liste ci-dessus.

## DEBUG: Mode Training

Notre jeu propose un mode training qui permet aux joueurs de tester les différentes fonctionnalités du jeu et tester également leurs personnages.

Pour pouvoir y accédez-vous devez nommer votre personnage "debug" (Renommé le dossier de votre personnage en "debug")

Le mode training vous permettra:

* de tester la hitbox des animations de votre personnage.
* de ralentir le jeu afin d'avoir un meilleur aperçu des différentes hitbox.
