# Danse, envoûtement, confusion — billet 60

Trois effets de combat, posés comme les autres sur une attaque, une arme ou
une capacité (onglet Effets du gestionnaire). Choix de l'auteur du 15/10/2026.

## Les deux champs neufs d'un effet

- **Animation imposée** (`animation`) : vide, ou `dance`. La cible danse.
- **Comportement** (`behavior`) : vide, `charm` (envoûtement) ou `confuse`
  (confusion). Avec `charm_ally_chance` (0–1, 0,5 par défaut) : la chance
  qu'un monstre envoûté attaque ses alliés, tirée à chaque application.

Miroir des trois côtés : `data_catalog.gd`, `config.php`, `app.js`.

## Danse endiablée (`frenzied_dance`, 2,5 s)

Règles de la paralysie : ni marche ni attaque. Le berimbau (`berimbau_dance`)
et la fête-surprise (`gesture_diversion`) dansent aussi. L'état d'animation
`dance` existe pour les monstres et le héros (visuels 2D et modèles 3D, repli
sur `idle`, en boucle). Le pont joue le clip `dance` du modèle ; sans clip, une
danse procédurale fait rebondir et balancer le seul visuel (`Bridge3D.
_apply_procedural_dance`), remis droit à la fin.

Clips : les quatre danses Mesh2Motion (CC0) — `Dance_Simple`,
`Dance_Body_Roll`, `Dance_Charleston`, `Dance_Reach_Hip` — transférées sur le
héros et les sept modèles humanoïdes (rat des quais et Ti-Gras, sirène,
écureuil, axolotl, raton, Gab, brute) par `tools/blender/humanoid_dances.py`.
Chaque fiche a tiré la sienne une fois (graine fixe par identifiant) ; on la
change dans sa fiche, état **Danse**. L'axolotl peut aussi prendre sa propre
`All_Night_Dance`. Les 44 monstres sans modèle et les squelettes d'animaux
dansent en procédural jusqu'à ce qu'on leur donne un clip.

## Envoûtement (`charmed`, 4 s)

- **Monstre**, selon le tirage : il vise le monstre vivant le plus proche
  (contact, coups, et ses tirs traversent le héros pour toucher les autres),
  ou il abandonne le combat et erre. Seul dans la salle, il erre. Les autres
  monstres gardent le héros pour cible. Fini l'effet, il revient au héros.
- **Héros** : ne peut plus frapper ; sa marche ne répond qu'à moitié et il
  glisse vers l'envoûteur (`enemy:<id>` de la source) : il freine, il ne fuit
  pas.

## Confusion (`confused`, 3 s)

- **Héros** : la direction demandée tourne d'un angle au hasard (jusqu'à
  180°), retiré toutes les 0,7 s. La visée n'est pas touchée.
- **Monstre** : il erre sur un cap tiré toutes les 0,7 s, et ses coups partent
  dans une direction au hasard.

## Contrôles

- `bridge_3d_check` `_run_dance` : le héros danse son clip, puis en
  procédural sans clip, figé comme paralysé, et revient droit.
- `behavior_effects` (`behavior_effects_check.gd`, sondes, hasard semé) :
  envoûté qui frappe son allié et épargne le héros, tir envoûté, retour au
  héros ; envoûté passif ; héros envoûté attiré et désarmé ; confusion du héros
  et d'un monstre.
- Tests PHP/JS : `combat_loadout_effects_*`.
- Données : `migrate_billet60_effects_20261015.py` (idempotente).

Limites : un souffle (explosion) tiré par un envoûté reste un souffle de
monstre et peut toucher le héros ; les créatures sans modèle ne dansent qu'en
procédural.
