Personnages : toutes les animations, tous les personnages ; retrait de l'import de sprites personnalisés
Build and deploy / test-python (push) Successful in 1m50s
Build and deploy / test-js (push) Successful in 6s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

À la demande de l'utilisateur (validation de la refonte visuelle du
widget Personnage), deux ajustements :

- Bibliothèque de sprites Forge étendue aux 6 personnages du pack Kenney
  "Toon Characters" (aventurier/aventurière, personnage homme/femme,
  robot, zombie), avec TOUTES leurs poses (45 par personnage) plutôt que
  3 — regroupées en 31 animations nommées par personnage (poses
  numérotées type walk0..walk7 fusionnées en un seul cycle "walk", les
  autres restant des poses figées à une image). ~1,2 Mo au total,
  toujours un sous-ensemble curé du pack source (assets/characters/, non
  versionné) — HD/Parts/Tilesheet/Vector toujours exclus.
- Import de sprites personnalisés retiré pour le moment : plus de tuile
  "➕ Sprite personnalisé" dans la galerie d'ajout, plus de section
  d'import dans les propriétés d'un personnage — seuls les personnages
  Forge restent proposés. La résolution serveur de _personnage_data
  garde son support générique de la source "custom" (aucune migration
  requise si cette possibilité revient plus tard), mais plus aucune UI
  ne permet de la créer.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-08-31 07:38:22 +02:00
co-authored by Claude Sonnet 5
parent 9e076f8cf9
commit 5ead091c75
256 changed files with 97 additions and 151 deletions
+51 -25
View File
@@ -1,28 +1,54 @@
# ---------- Bibliothèque de sprites bundlée avec Forge (Phase 7) ----------
# ---------- Bibliothèque de sprites bundlée avec Forge (Phase 7/8) ----------
#
# Sous-ensemble curé (idle/marche/saut, pas les packs complets HD/Parts/
# Tilesheet/Vector — inutiles pour un jeu 2D web) des personnages "Toon
# Characters" de Kenney (CC0, voir static/characters/LICENSE-kenney.txt),
# copiés dans static/characters/<slug>/*.png. Un créateur qui veut ses
# propres sprites n'utilise pas ce catalogue : il uploade ses images (voir
# routes/uploads/upload_file.py) et colle leurs URLs directement dans la
# même zone de frames — voir #nf-action-sprite-fields dans
# screen_edit.html.
# Les 6 personnages "Toon Characters" de Kenney (CC0, voir
# static/characters/LICENSE-kenney.txt), copiés intégralement (toutes leurs
# poses) dans static/characters/<slug>/*.png depuis
# assets/characters/kenney_toon-characters/ (pack source, non versionné —
# seul ce sous-ensemble copié l'est). Un créateur qui veut ses propres
# sprites n'utilise pas ce catalogue — cette possibilité est retirée pour
# le moment (voir historique du plan), seuls ces personnages Forge sont
# disponibles.
CHARACTERS = {
"male-adventurer": "Aventurier",
"female-adventurer": "Aventurière",
"male-person": "Personnage (homme)",
"female-person": "Personnage (femme)",
"robot": "Robot",
"zombie": "Zombie",
}
# Regroupement des poses individuelles en animations nommées : les poses
# numérotées (ex. walk0..walk7) forment un cycle à plusieurs images, les
# autres sont des poses figées à une seule image. Mêmes noms de fichiers
# pour les 6 personnages (confirmé sur disque), donc une seule définition
# suffit pour tous.
_SEQUENCE_ANIMATIONS = {
"walk": 8, # cycle de marche
"run": 3, # course
"attack": 3, # attaque
"cheer": 2, # acclamation
"climb": 2, # escalade
"switch": 2, # bascule/actionner
}
_SINGLE_POSES = [
"idle", "jump", "fall", "duck", "hit", "back", "slide", "interact",
"kick", "side", "shove", "shoveBack", "talk", "attackKick", "hang",
"hold", "hurt", "behindBack", "down", "drag", "fallDown", "rope",
"show", "think", "wide",
]
def _animations_for(slug):
animations = {
name: [f"/static/characters/{slug}/{name}{i}.png" for i in range(count)]
for name, count in _SEQUENCE_ANIMATIONS.items()
}
for name in _SINGLE_POSES:
animations[name] = [f"/static/characters/{slug}/{name}.png"]
return animations
SPRITE_LIBRARY = {
"male-adventurer": {
"label": "Aventurier",
"animations": {
"idle": ["/static/characters/male-adventurer/idle.png"],
"marche": [f"/static/characters/male-adventurer/walk{i}.png" for i in range(8)],
"saut": ["/static/characters/male-adventurer/jump.png"],
},
},
"zombie": {
"label": "Zombie",
"animations": {
"idle": ["/static/characters/zombie/idle.png"],
"marche": [f"/static/characters/zombie/walk{i}.png" for i in range(8)],
"saut": ["/static/characters/zombie/jump.png"],
},
},
slug: {"label": label, "animations": _animations_for(slug)}
for slug, label in CHARACTERS.items()
}