diff --git a/routes/elements/element_add.py b/routes/elements/element_add.py index 12b7e017..5348eacd 100644 --- a/routes/elements/element_add.py +++ b/routes/elements/element_add.py @@ -28,11 +28,8 @@ def element_add(slug, screen_id): # Posé depuis la galerie "🎭 Personnages" (voir addPersonnageElement() # dans tree-panels.js) : remplace le personnage Forge par défaut # (male-adventurer, voir default_style_for_widget.py) par celui - # réellement cliqué, ou bascule sur une source "custom" vide si la - # tuile "➕ Sprite personnalisé" a été choisie. + # réellement cliqué. forge_character = request.form.get("forge_character") - if forge_character == "__custom__": - screens.set_personnage_data(slug, new_id, {"source": "custom", "animations": {}}) - elif forge_character and forge_character in screens.SPRITE_LIBRARY: + if forge_character and forge_character in screens.SPRITE_LIBRARY: screens.set_personnage_data(slug, new_id, {"source": "forge", "forge_character": forge_character}) return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, selected=new_id)) diff --git a/screens/labels/sprite_library.py b/screens/labels/sprite_library.py index a8452e04..5afd29c8 100644 --- a/screens/labels/sprite_library.py +++ b/screens/labels/sprite_library.py @@ -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//*.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//*.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() } diff --git a/static/characters/female-adventurer/attack0.png b/static/characters/female-adventurer/attack0.png new file mode 100644 index 00000000..0cd6965b Binary files /dev/null and b/static/characters/female-adventurer/attack0.png differ diff --git a/static/characters/female-adventurer/attack1.png b/static/characters/female-adventurer/attack1.png new file mode 100644 index 00000000..8605bc8f Binary files /dev/null and b/static/characters/female-adventurer/attack1.png differ diff --git a/static/characters/female-adventurer/attack2.png b/static/characters/female-adventurer/attack2.png new file mode 100644 index 00000000..64f42a2e Binary files /dev/null and b/static/characters/female-adventurer/attack2.png differ diff --git a/static/characters/female-adventurer/attackKick.png b/static/characters/female-adventurer/attackKick.png new file mode 100644 index 00000000..75cd19b7 Binary files /dev/null and b/static/characters/female-adventurer/attackKick.png differ diff --git a/static/characters/female-adventurer/back.png b/static/characters/female-adventurer/back.png new file mode 100644 index 00000000..1fe25e63 Binary files /dev/null and b/static/characters/female-adventurer/back.png differ diff --git a/static/characters/female-adventurer/behindBack.png b/static/characters/female-adventurer/behindBack.png new file mode 100644 index 00000000..da2c3bb8 Binary files /dev/null and b/static/characters/female-adventurer/behindBack.png differ diff --git a/static/characters/female-adventurer/cheer0.png b/static/characters/female-adventurer/cheer0.png new file mode 100644 index 00000000..ffb3629a Binary files /dev/null and b/static/characters/female-adventurer/cheer0.png differ diff --git a/static/characters/female-adventurer/cheer1.png b/static/characters/female-adventurer/cheer1.png new file mode 100644 index 00000000..94b02d15 Binary files /dev/null and b/static/characters/female-adventurer/cheer1.png differ diff --git a/static/characters/female-adventurer/climb0.png b/static/characters/female-adventurer/climb0.png new file mode 100644 index 00000000..e24757b6 Binary files /dev/null and b/static/characters/female-adventurer/climb0.png differ diff --git a/static/characters/female-adventurer/climb1.png b/static/characters/female-adventurer/climb1.png new file mode 100644 index 00000000..35fe64ba Binary files /dev/null and b/static/characters/female-adventurer/climb1.png differ diff --git a/static/characters/female-adventurer/down.png b/static/characters/female-adventurer/down.png new file mode 100644 index 00000000..65b00f83 Binary files /dev/null and b/static/characters/female-adventurer/down.png differ diff --git a/static/characters/female-adventurer/drag.png b/static/characters/female-adventurer/drag.png new file mode 100644 index 00000000..908189e3 Binary files /dev/null and b/static/characters/female-adventurer/drag.png differ diff --git a/static/characters/female-adventurer/duck.png b/static/characters/female-adventurer/duck.png new file mode 100644 index 00000000..4bc201ba Binary files /dev/null and b/static/characters/female-adventurer/duck.png differ diff --git a/static/characters/female-adventurer/fall.png b/static/characters/female-adventurer/fall.png new file mode 100644 index 00000000..3927219f Binary files /dev/null and b/static/characters/female-adventurer/fall.png differ diff --git a/static/characters/female-adventurer/fallDown.png b/static/characters/female-adventurer/fallDown.png new file mode 100644 index 00000000..04009cdc Binary files /dev/null and b/static/characters/female-adventurer/fallDown.png differ diff --git a/static/characters/female-adventurer/hang.png b/static/characters/female-adventurer/hang.png new file mode 100644 index 00000000..d9f03b28 Binary files /dev/null and b/static/characters/female-adventurer/hang.png differ diff --git a/static/characters/female-adventurer/hit.png b/static/characters/female-adventurer/hit.png new file mode 100644 index 00000000..0021e754 Binary files /dev/null and b/static/characters/female-adventurer/hit.png differ diff --git a/static/characters/female-adventurer/hold.png b/static/characters/female-adventurer/hold.png new file mode 100644 index 00000000..6f34cb14 Binary files /dev/null and b/static/characters/female-adventurer/hold.png differ diff --git a/static/characters/female-adventurer/hurt.png b/static/characters/female-adventurer/hurt.png new file mode 100644 index 00000000..77c69faa Binary files /dev/null and b/static/characters/female-adventurer/hurt.png differ diff --git a/static/characters/female-adventurer/idle.png b/static/characters/female-adventurer/idle.png new file mode 100644 index 00000000..21f40efe Binary files /dev/null and b/static/characters/female-adventurer/idle.png differ diff --git a/static/characters/female-adventurer/interact.png b/static/characters/female-adventurer/interact.png new file mode 100644 index 00000000..a483ba8b Binary files /dev/null and b/static/characters/female-adventurer/interact.png differ diff --git a/static/characters/female-adventurer/jump.png b/static/characters/female-adventurer/jump.png new file mode 100644 index 00000000..4ec8431e Binary files /dev/null and b/static/characters/female-adventurer/jump.png differ diff --git a/static/characters/female-adventurer/kick.png b/static/characters/female-adventurer/kick.png new file mode 100644 index 00000000..a0187fb0 Binary files /dev/null and b/static/characters/female-adventurer/kick.png differ diff --git a/static/characters/female-adventurer/rope.png b/static/characters/female-adventurer/rope.png new file mode 100644 index 00000000..113ef753 Binary files /dev/null and b/static/characters/female-adventurer/rope.png differ diff --git a/static/characters/female-adventurer/run0.png b/static/characters/female-adventurer/run0.png new file mode 100644 index 00000000..64b7def3 Binary files /dev/null and b/static/characters/female-adventurer/run0.png differ diff --git a/static/characters/female-adventurer/run1.png b/static/characters/female-adventurer/run1.png new file mode 100644 index 00000000..c9c2aaa0 Binary files /dev/null and b/static/characters/female-adventurer/run1.png differ diff --git a/static/characters/female-adventurer/run2.png b/static/characters/female-adventurer/run2.png new file mode 100644 index 00000000..56f9e163 Binary files /dev/null and b/static/characters/female-adventurer/run2.png differ diff --git a/static/characters/female-adventurer/shove.png b/static/characters/female-adventurer/shove.png new file mode 100644 index 00000000..6580551b Binary files /dev/null and b/static/characters/female-adventurer/shove.png differ diff --git a/static/characters/female-adventurer/shoveBack.png b/static/characters/female-adventurer/shoveBack.png new file mode 100644 index 00000000..61491285 Binary files /dev/null and b/static/characters/female-adventurer/shoveBack.png differ diff --git a/static/characters/female-adventurer/show.png b/static/characters/female-adventurer/show.png new file mode 100644 index 00000000..4f4d1653 Binary files /dev/null and b/static/characters/female-adventurer/show.png differ diff --git a/static/characters/female-adventurer/side.png b/static/characters/female-adventurer/side.png new file mode 100644 index 00000000..9bb2c962 Binary files /dev/null and b/static/characters/female-adventurer/side.png differ diff --git a/static/characters/female-adventurer/slide.png b/static/characters/female-adventurer/slide.png new file mode 100644 index 00000000..2419fa03 Binary files /dev/null and b/static/characters/female-adventurer/slide.png differ diff --git a/static/characters/female-adventurer/switch0.png b/static/characters/female-adventurer/switch0.png new file mode 100644 index 00000000..8e705b0a Binary files /dev/null and b/static/characters/female-adventurer/switch0.png differ diff --git a/static/characters/female-adventurer/switch1.png b/static/characters/female-adventurer/switch1.png new file mode 100644 index 00000000..7d2d62ca Binary files /dev/null and b/static/characters/female-adventurer/switch1.png differ diff --git a/static/characters/female-adventurer/talk.png b/static/characters/female-adventurer/talk.png new file mode 100644 index 00000000..68c15423 Binary files /dev/null and b/static/characters/female-adventurer/talk.png differ diff --git a/static/characters/female-adventurer/think.png b/static/characters/female-adventurer/think.png new file mode 100644 index 00000000..f6cac6af Binary files /dev/null and b/static/characters/female-adventurer/think.png differ diff --git a/static/characters/female-adventurer/walk0.png b/static/characters/female-adventurer/walk0.png new file mode 100644 index 00000000..92a61b39 Binary files /dev/null and b/static/characters/female-adventurer/walk0.png differ diff --git a/static/characters/female-adventurer/walk1.png b/static/characters/female-adventurer/walk1.png new file mode 100644 index 00000000..8ded0747 Binary files /dev/null and b/static/characters/female-adventurer/walk1.png differ diff --git a/static/characters/female-adventurer/walk2.png b/static/characters/female-adventurer/walk2.png new file mode 100644 index 00000000..fc50390c Binary files /dev/null and b/static/characters/female-adventurer/walk2.png differ diff --git a/static/characters/female-adventurer/walk3.png b/static/characters/female-adventurer/walk3.png new file mode 100644 index 00000000..595087f9 Binary files /dev/null and b/static/characters/female-adventurer/walk3.png differ diff --git a/static/characters/female-adventurer/walk4.png b/static/characters/female-adventurer/walk4.png new file mode 100644 index 00000000..dcf8468e Binary files /dev/null and b/static/characters/female-adventurer/walk4.png differ diff --git a/static/characters/female-adventurer/walk5.png b/static/characters/female-adventurer/walk5.png new file mode 100644 index 00000000..597428f0 Binary files /dev/null and b/static/characters/female-adventurer/walk5.png differ diff --git a/static/characters/female-adventurer/walk6.png b/static/characters/female-adventurer/walk6.png new file mode 100644 index 00000000..9c18bfab Binary files /dev/null and b/static/characters/female-adventurer/walk6.png differ diff --git a/static/characters/female-adventurer/walk7.png b/static/characters/female-adventurer/walk7.png new file mode 100644 index 00000000..5e111185 Binary files /dev/null and b/static/characters/female-adventurer/walk7.png differ diff --git a/static/characters/female-adventurer/wide.png b/static/characters/female-adventurer/wide.png new file mode 100644 index 00000000..6d8e5f4e Binary files /dev/null and b/static/characters/female-adventurer/wide.png differ diff --git a/static/characters/female-person/attack0.png b/static/characters/female-person/attack0.png new file mode 100644 index 00000000..8c5ac0ec Binary files /dev/null and b/static/characters/female-person/attack0.png differ diff --git a/static/characters/female-person/attack1.png b/static/characters/female-person/attack1.png new file mode 100644 index 00000000..6c7ba97f Binary files /dev/null and b/static/characters/female-person/attack1.png differ diff --git a/static/characters/female-person/attack2.png b/static/characters/female-person/attack2.png new file mode 100644 index 00000000..286c13ca Binary files /dev/null and b/static/characters/female-person/attack2.png differ diff --git a/static/characters/female-person/attackKick.png b/static/characters/female-person/attackKick.png new file mode 100644 index 00000000..fc7ffc3f Binary files /dev/null and b/static/characters/female-person/attackKick.png differ diff --git a/static/characters/female-person/back.png b/static/characters/female-person/back.png new file mode 100644 index 00000000..e526fd6b Binary files /dev/null and b/static/characters/female-person/back.png differ diff --git a/static/characters/female-person/behindBack.png b/static/characters/female-person/behindBack.png new file mode 100644 index 00000000..ccb30c55 Binary files /dev/null and b/static/characters/female-person/behindBack.png differ diff --git a/static/characters/female-person/cheer0.png b/static/characters/female-person/cheer0.png new file mode 100644 index 00000000..05f339da Binary files /dev/null and b/static/characters/female-person/cheer0.png differ diff --git a/static/characters/female-person/cheer1.png b/static/characters/female-person/cheer1.png new file mode 100644 index 00000000..96b6d2ad Binary files /dev/null and b/static/characters/female-person/cheer1.png differ diff --git a/static/characters/female-person/climb0.png b/static/characters/female-person/climb0.png new file mode 100644 index 00000000..3b274292 Binary files /dev/null and b/static/characters/female-person/climb0.png differ diff --git a/static/characters/female-person/climb1.png b/static/characters/female-person/climb1.png new file mode 100644 index 00000000..a3ec3745 Binary files /dev/null and b/static/characters/female-person/climb1.png differ diff --git a/static/characters/female-person/down.png b/static/characters/female-person/down.png new file mode 100644 index 00000000..c15ae11b Binary files /dev/null and b/static/characters/female-person/down.png differ diff --git a/static/characters/female-person/drag.png b/static/characters/female-person/drag.png new file mode 100644 index 00000000..68c23faa Binary files /dev/null and b/static/characters/female-person/drag.png differ diff --git a/static/characters/female-person/duck.png b/static/characters/female-person/duck.png new file mode 100644 index 00000000..352cf6d1 Binary files /dev/null and b/static/characters/female-person/duck.png differ diff --git a/static/characters/female-person/fall.png b/static/characters/female-person/fall.png new file mode 100644 index 00000000..1d788efd Binary files /dev/null and b/static/characters/female-person/fall.png differ diff --git a/static/characters/female-person/fallDown.png b/static/characters/female-person/fallDown.png new file mode 100644 index 00000000..f1413eb8 Binary files /dev/null and b/static/characters/female-person/fallDown.png differ diff --git a/static/characters/female-person/hang.png b/static/characters/female-person/hang.png new file mode 100644 index 00000000..baf04044 Binary files /dev/null and b/static/characters/female-person/hang.png differ diff --git a/static/characters/female-person/hit.png b/static/characters/female-person/hit.png new file mode 100644 index 00000000..823f573a Binary files /dev/null and b/static/characters/female-person/hit.png differ diff --git a/static/characters/female-person/hold.png b/static/characters/female-person/hold.png new file mode 100644 index 00000000..f2cc15e6 Binary files /dev/null and b/static/characters/female-person/hold.png differ diff --git a/static/characters/female-person/hurt.png b/static/characters/female-person/hurt.png new file mode 100644 index 00000000..1ce6fe74 Binary files /dev/null and b/static/characters/female-person/hurt.png differ diff --git a/static/characters/female-person/idle.png b/static/characters/female-person/idle.png new file mode 100644 index 00000000..ea8cbf46 Binary files /dev/null and b/static/characters/female-person/idle.png differ diff --git a/static/characters/female-person/interact.png b/static/characters/female-person/interact.png new file mode 100644 index 00000000..5a9f6ee9 Binary files /dev/null and b/static/characters/female-person/interact.png differ diff --git a/static/characters/female-person/jump.png b/static/characters/female-person/jump.png new file mode 100644 index 00000000..f5689641 Binary files /dev/null and b/static/characters/female-person/jump.png differ diff --git a/static/characters/female-person/kick.png b/static/characters/female-person/kick.png new file mode 100644 index 00000000..6b0240a0 Binary files /dev/null and b/static/characters/female-person/kick.png differ diff --git a/static/characters/female-person/rope.png b/static/characters/female-person/rope.png new file mode 100644 index 00000000..b5f62548 Binary files /dev/null and b/static/characters/female-person/rope.png differ diff --git a/static/characters/female-person/run0.png b/static/characters/female-person/run0.png new file mode 100644 index 00000000..23f293bb Binary files /dev/null and b/static/characters/female-person/run0.png differ diff --git a/static/characters/female-person/run1.png b/static/characters/female-person/run1.png new file mode 100644 index 00000000..03262b5a Binary files /dev/null and b/static/characters/female-person/run1.png differ diff --git a/static/characters/female-person/run2.png b/static/characters/female-person/run2.png new file mode 100644 index 00000000..890ee32d Binary files /dev/null and b/static/characters/female-person/run2.png differ diff --git a/static/characters/female-person/shove.png b/static/characters/female-person/shove.png new file mode 100644 index 00000000..6676ae13 Binary files /dev/null and b/static/characters/female-person/shove.png differ diff --git a/static/characters/female-person/shoveBack.png b/static/characters/female-person/shoveBack.png new file mode 100644 index 00000000..2597e6da Binary files /dev/null and b/static/characters/female-person/shoveBack.png differ diff --git a/static/characters/female-person/show.png b/static/characters/female-person/show.png new file mode 100644 index 00000000..706ddd91 Binary files /dev/null and b/static/characters/female-person/show.png differ diff --git a/static/characters/female-person/side.png b/static/characters/female-person/side.png new file mode 100644 index 00000000..32a23454 Binary files /dev/null and b/static/characters/female-person/side.png differ diff --git a/static/characters/female-person/slide.png b/static/characters/female-person/slide.png new file mode 100644 index 00000000..9082310b Binary files /dev/null and b/static/characters/female-person/slide.png differ diff --git a/static/characters/female-person/switch0.png b/static/characters/female-person/switch0.png new file mode 100644 index 00000000..833223a6 Binary files /dev/null and b/static/characters/female-person/switch0.png differ diff --git a/static/characters/female-person/switch1.png b/static/characters/female-person/switch1.png new file mode 100644 index 00000000..4290bbd3 Binary files /dev/null and b/static/characters/female-person/switch1.png differ diff --git a/static/characters/female-person/talk.png b/static/characters/female-person/talk.png new file mode 100644 index 00000000..d392ed52 Binary files /dev/null and b/static/characters/female-person/talk.png differ diff --git a/static/characters/female-person/think.png b/static/characters/female-person/think.png new file mode 100644 index 00000000..4dfa5fff Binary files /dev/null and b/static/characters/female-person/think.png differ diff --git a/static/characters/female-person/walk0.png b/static/characters/female-person/walk0.png new file mode 100644 index 00000000..71c45f49 Binary files /dev/null and b/static/characters/female-person/walk0.png differ diff --git a/static/characters/female-person/walk1.png b/static/characters/female-person/walk1.png new file mode 100644 index 00000000..ca17c38e Binary files /dev/null and b/static/characters/female-person/walk1.png differ diff --git a/static/characters/female-person/walk2.png b/static/characters/female-person/walk2.png new file mode 100644 index 00000000..4dadf837 Binary files /dev/null and b/static/characters/female-person/walk2.png differ diff --git a/static/characters/female-person/walk3.png b/static/characters/female-person/walk3.png new file mode 100644 index 00000000..1183f00b Binary files /dev/null and b/static/characters/female-person/walk3.png differ diff --git a/static/characters/female-person/walk4.png b/static/characters/female-person/walk4.png new file mode 100644 index 00000000..ec2a43f1 Binary files /dev/null and b/static/characters/female-person/walk4.png differ diff --git a/static/characters/female-person/walk5.png b/static/characters/female-person/walk5.png new file mode 100644 index 00000000..81471f58 Binary files /dev/null and b/static/characters/female-person/walk5.png differ diff --git a/static/characters/female-person/walk6.png b/static/characters/female-person/walk6.png new file mode 100644 index 00000000..08b061c2 Binary files /dev/null and b/static/characters/female-person/walk6.png differ diff --git a/static/characters/female-person/walk7.png b/static/characters/female-person/walk7.png new file mode 100644 index 00000000..537e8700 Binary files /dev/null and b/static/characters/female-person/walk7.png differ diff --git a/static/characters/female-person/wide.png b/static/characters/female-person/wide.png new file mode 100644 index 00000000..c4cf4fbf Binary files /dev/null and b/static/characters/female-person/wide.png differ diff --git a/static/characters/male-adventurer/attack0.png b/static/characters/male-adventurer/attack0.png new file mode 100644 index 00000000..5c5800d3 Binary files /dev/null and b/static/characters/male-adventurer/attack0.png differ diff --git a/static/characters/male-adventurer/attack1.png b/static/characters/male-adventurer/attack1.png new file mode 100644 index 00000000..da78c941 Binary files /dev/null and b/static/characters/male-adventurer/attack1.png differ diff --git a/static/characters/male-adventurer/attack2.png b/static/characters/male-adventurer/attack2.png new file mode 100644 index 00000000..5e72dc54 Binary files /dev/null and b/static/characters/male-adventurer/attack2.png differ diff --git a/static/characters/male-adventurer/attackKick.png b/static/characters/male-adventurer/attackKick.png new file mode 100644 index 00000000..306cbdc4 Binary files /dev/null and b/static/characters/male-adventurer/attackKick.png differ diff --git a/static/characters/male-adventurer/back.png b/static/characters/male-adventurer/back.png new file mode 100644 index 00000000..ed7b312e Binary files /dev/null and b/static/characters/male-adventurer/back.png differ diff --git a/static/characters/male-adventurer/behindBack.png b/static/characters/male-adventurer/behindBack.png new file mode 100644 index 00000000..4ad058de Binary files /dev/null and b/static/characters/male-adventurer/behindBack.png differ diff --git a/static/characters/male-adventurer/cheer0.png b/static/characters/male-adventurer/cheer0.png new file mode 100644 index 00000000..75d57732 Binary files /dev/null and b/static/characters/male-adventurer/cheer0.png differ diff --git a/static/characters/male-adventurer/cheer1.png b/static/characters/male-adventurer/cheer1.png new file mode 100644 index 00000000..01c9d526 Binary files /dev/null and b/static/characters/male-adventurer/cheer1.png differ diff --git a/static/characters/male-adventurer/climb0.png b/static/characters/male-adventurer/climb0.png new file mode 100644 index 00000000..2f08b053 Binary files /dev/null and b/static/characters/male-adventurer/climb0.png differ diff --git a/static/characters/male-adventurer/climb1.png b/static/characters/male-adventurer/climb1.png new file mode 100644 index 00000000..9a7f1364 Binary files /dev/null and b/static/characters/male-adventurer/climb1.png differ diff --git a/static/characters/male-adventurer/down.png b/static/characters/male-adventurer/down.png new file mode 100644 index 00000000..4bb858d9 Binary files /dev/null and b/static/characters/male-adventurer/down.png differ diff --git a/static/characters/male-adventurer/drag.png b/static/characters/male-adventurer/drag.png new file mode 100644 index 00000000..b152eac9 Binary files /dev/null and b/static/characters/male-adventurer/drag.png differ diff --git a/static/characters/male-adventurer/duck.png b/static/characters/male-adventurer/duck.png new file mode 100644 index 00000000..eb3e68a5 Binary files /dev/null and b/static/characters/male-adventurer/duck.png differ diff --git a/static/characters/male-adventurer/fall.png b/static/characters/male-adventurer/fall.png new file mode 100644 index 00000000..fe071717 Binary files /dev/null and b/static/characters/male-adventurer/fall.png differ diff --git a/static/characters/male-adventurer/fallDown.png b/static/characters/male-adventurer/fallDown.png new file mode 100644 index 00000000..9d60780b Binary files /dev/null and b/static/characters/male-adventurer/fallDown.png differ diff --git a/static/characters/male-adventurer/hang.png b/static/characters/male-adventurer/hang.png new file mode 100644 index 00000000..bf95f4d2 Binary files /dev/null and b/static/characters/male-adventurer/hang.png differ diff --git a/static/characters/male-adventurer/hit.png b/static/characters/male-adventurer/hit.png new file mode 100644 index 00000000..dd84b16f Binary files /dev/null and b/static/characters/male-adventurer/hit.png differ diff --git a/static/characters/male-adventurer/hold.png b/static/characters/male-adventurer/hold.png new file mode 100644 index 00000000..7b612caa Binary files /dev/null and b/static/characters/male-adventurer/hold.png differ diff --git a/static/characters/male-adventurer/hurt.png b/static/characters/male-adventurer/hurt.png new file mode 100644 index 00000000..b66f94ef Binary files /dev/null and b/static/characters/male-adventurer/hurt.png differ diff --git a/static/characters/male-adventurer/interact.png b/static/characters/male-adventurer/interact.png new file mode 100644 index 00000000..1945ccb6 Binary files /dev/null and b/static/characters/male-adventurer/interact.png differ diff --git a/static/characters/male-adventurer/kick.png b/static/characters/male-adventurer/kick.png new file mode 100644 index 00000000..b10bd035 Binary files /dev/null and b/static/characters/male-adventurer/kick.png differ diff --git a/static/characters/male-adventurer/rope.png b/static/characters/male-adventurer/rope.png new file mode 100644 index 00000000..763476e7 Binary files /dev/null and b/static/characters/male-adventurer/rope.png differ diff --git a/static/characters/male-adventurer/run0.png b/static/characters/male-adventurer/run0.png new file mode 100644 index 00000000..212ca94a Binary files /dev/null and b/static/characters/male-adventurer/run0.png differ diff --git a/static/characters/male-adventurer/run1.png b/static/characters/male-adventurer/run1.png new file mode 100644 index 00000000..ac28a283 Binary files /dev/null and b/static/characters/male-adventurer/run1.png differ diff --git a/static/characters/male-adventurer/run2.png b/static/characters/male-adventurer/run2.png new file mode 100644 index 00000000..7871abf7 Binary files /dev/null and b/static/characters/male-adventurer/run2.png differ diff --git a/static/characters/male-adventurer/shove.png b/static/characters/male-adventurer/shove.png new file mode 100644 index 00000000..d5757adc Binary files /dev/null and b/static/characters/male-adventurer/shove.png differ diff --git a/static/characters/male-adventurer/shoveBack.png b/static/characters/male-adventurer/shoveBack.png new file mode 100644 index 00000000..0b5cb2fb Binary files /dev/null and b/static/characters/male-adventurer/shoveBack.png differ diff --git a/static/characters/male-adventurer/show.png b/static/characters/male-adventurer/show.png new file mode 100644 index 00000000..cfad26e9 Binary files /dev/null and b/static/characters/male-adventurer/show.png differ diff --git a/static/characters/male-adventurer/side.png b/static/characters/male-adventurer/side.png new file mode 100644 index 00000000..9822d281 Binary files /dev/null and b/static/characters/male-adventurer/side.png differ diff --git a/static/characters/male-adventurer/slide.png b/static/characters/male-adventurer/slide.png new file mode 100644 index 00000000..a694a5d6 Binary files /dev/null and b/static/characters/male-adventurer/slide.png differ diff --git a/static/characters/male-adventurer/switch0.png b/static/characters/male-adventurer/switch0.png new file mode 100644 index 00000000..ceffedf1 Binary files /dev/null and b/static/characters/male-adventurer/switch0.png differ diff --git a/static/characters/male-adventurer/switch1.png b/static/characters/male-adventurer/switch1.png new file mode 100644 index 00000000..75eb11b1 Binary files /dev/null and b/static/characters/male-adventurer/switch1.png differ diff --git a/static/characters/male-adventurer/talk.png b/static/characters/male-adventurer/talk.png new file mode 100644 index 00000000..ad9a5f87 Binary files /dev/null and b/static/characters/male-adventurer/talk.png differ diff --git a/static/characters/male-adventurer/think.png b/static/characters/male-adventurer/think.png new file mode 100644 index 00000000..8dd4dceb Binary files /dev/null and b/static/characters/male-adventurer/think.png differ diff --git a/static/characters/male-adventurer/wide.png b/static/characters/male-adventurer/wide.png new file mode 100644 index 00000000..5876c38b Binary files /dev/null and b/static/characters/male-adventurer/wide.png differ diff --git a/static/characters/male-person/attack0.png b/static/characters/male-person/attack0.png new file mode 100644 index 00000000..dc535fd5 Binary files /dev/null and b/static/characters/male-person/attack0.png differ diff --git a/static/characters/male-person/attack1.png b/static/characters/male-person/attack1.png new file mode 100644 index 00000000..98e20fc2 Binary files /dev/null and b/static/characters/male-person/attack1.png differ diff --git a/static/characters/male-person/attack2.png b/static/characters/male-person/attack2.png new file mode 100644 index 00000000..a27ce5ec Binary files /dev/null and b/static/characters/male-person/attack2.png differ diff --git a/static/characters/male-person/attackKick.png b/static/characters/male-person/attackKick.png new file mode 100644 index 00000000..2b1d3699 Binary files /dev/null and b/static/characters/male-person/attackKick.png differ diff --git a/static/characters/male-person/back.png b/static/characters/male-person/back.png new file mode 100644 index 00000000..f77f3c9b Binary files /dev/null and b/static/characters/male-person/back.png differ diff --git a/static/characters/male-person/behindBack.png b/static/characters/male-person/behindBack.png new file mode 100644 index 00000000..443a9bb6 Binary files /dev/null and b/static/characters/male-person/behindBack.png differ diff --git a/static/characters/male-person/cheer0.png b/static/characters/male-person/cheer0.png new file mode 100644 index 00000000..029e7377 Binary files /dev/null and b/static/characters/male-person/cheer0.png differ diff --git a/static/characters/male-person/cheer1.png b/static/characters/male-person/cheer1.png new file mode 100644 index 00000000..eaf1d976 Binary files /dev/null and b/static/characters/male-person/cheer1.png differ diff --git a/static/characters/male-person/climb0.png b/static/characters/male-person/climb0.png new file mode 100644 index 00000000..e02ddbd2 Binary files /dev/null and b/static/characters/male-person/climb0.png differ diff --git a/static/characters/male-person/climb1.png b/static/characters/male-person/climb1.png new file mode 100644 index 00000000..ac998dd3 Binary files /dev/null and b/static/characters/male-person/climb1.png differ diff --git a/static/characters/male-person/down.png b/static/characters/male-person/down.png new file mode 100644 index 00000000..f3930e1c Binary files /dev/null and b/static/characters/male-person/down.png differ diff --git a/static/characters/male-person/drag.png b/static/characters/male-person/drag.png new file mode 100644 index 00000000..22dc09af Binary files /dev/null and b/static/characters/male-person/drag.png differ diff --git a/static/characters/male-person/duck.png b/static/characters/male-person/duck.png new file mode 100644 index 00000000..451512d5 Binary files /dev/null and b/static/characters/male-person/duck.png differ diff --git a/static/characters/male-person/fall.png b/static/characters/male-person/fall.png new file mode 100644 index 00000000..87efd14b Binary files /dev/null and b/static/characters/male-person/fall.png differ diff --git a/static/characters/male-person/fallDown.png b/static/characters/male-person/fallDown.png new file mode 100644 index 00000000..11a37a0d Binary files /dev/null and b/static/characters/male-person/fallDown.png differ diff --git a/static/characters/male-person/hang.png b/static/characters/male-person/hang.png new file mode 100644 index 00000000..5a8f0dae Binary files /dev/null and b/static/characters/male-person/hang.png differ diff --git a/static/characters/male-person/hit.png b/static/characters/male-person/hit.png new file mode 100644 index 00000000..4301beb6 Binary files /dev/null and b/static/characters/male-person/hit.png differ diff --git a/static/characters/male-person/hold.png b/static/characters/male-person/hold.png new file mode 100644 index 00000000..296645c1 Binary files /dev/null and b/static/characters/male-person/hold.png differ diff --git a/static/characters/male-person/hurt.png b/static/characters/male-person/hurt.png new file mode 100644 index 00000000..6a34297f Binary files /dev/null and b/static/characters/male-person/hurt.png differ diff --git a/static/characters/male-person/idle.png b/static/characters/male-person/idle.png new file mode 100644 index 00000000..a2c1142d Binary files /dev/null and b/static/characters/male-person/idle.png differ diff --git a/static/characters/male-person/interact.png b/static/characters/male-person/interact.png new file mode 100644 index 00000000..124ee030 Binary files /dev/null and b/static/characters/male-person/interact.png differ diff --git a/static/characters/male-person/jump.png b/static/characters/male-person/jump.png new file mode 100644 index 00000000..f50ce618 Binary files /dev/null and b/static/characters/male-person/jump.png differ diff --git a/static/characters/male-person/kick.png b/static/characters/male-person/kick.png new file mode 100644 index 00000000..7c8f7bfa Binary files /dev/null and b/static/characters/male-person/kick.png differ diff --git a/static/characters/male-person/rope.png b/static/characters/male-person/rope.png new file mode 100644 index 00000000..09629f88 Binary files /dev/null and b/static/characters/male-person/rope.png differ diff --git a/static/characters/male-person/run0.png b/static/characters/male-person/run0.png new file mode 100644 index 00000000..e46acc06 Binary files /dev/null and b/static/characters/male-person/run0.png differ diff --git a/static/characters/male-person/run1.png b/static/characters/male-person/run1.png new file mode 100644 index 00000000..6d0df801 Binary files /dev/null and b/static/characters/male-person/run1.png differ diff --git a/static/characters/male-person/run2.png b/static/characters/male-person/run2.png new file mode 100644 index 00000000..4ae63e59 Binary files /dev/null and b/static/characters/male-person/run2.png differ diff --git a/static/characters/male-person/shove.png b/static/characters/male-person/shove.png new file mode 100644 index 00000000..26143614 Binary files /dev/null and b/static/characters/male-person/shove.png differ diff --git a/static/characters/male-person/shoveBack.png b/static/characters/male-person/shoveBack.png new file mode 100644 index 00000000..3dec7e63 Binary files /dev/null and b/static/characters/male-person/shoveBack.png differ diff --git a/static/characters/male-person/show.png b/static/characters/male-person/show.png new file mode 100644 index 00000000..a0b8c0cd Binary files /dev/null and b/static/characters/male-person/show.png differ diff --git a/static/characters/male-person/side.png b/static/characters/male-person/side.png new file mode 100644 index 00000000..6c3622da Binary files /dev/null and b/static/characters/male-person/side.png differ diff --git a/static/characters/male-person/slide.png b/static/characters/male-person/slide.png new file mode 100644 index 00000000..f821e1fd Binary files /dev/null and b/static/characters/male-person/slide.png differ diff --git a/static/characters/male-person/switch0.png b/static/characters/male-person/switch0.png new file mode 100644 index 00000000..1225bd22 Binary files /dev/null and b/static/characters/male-person/switch0.png differ diff --git a/static/characters/male-person/switch1.png b/static/characters/male-person/switch1.png new file mode 100644 index 00000000..050aed2c Binary files /dev/null and b/static/characters/male-person/switch1.png differ diff --git a/static/characters/male-person/talk.png b/static/characters/male-person/talk.png new file mode 100644 index 00000000..e8cd5369 Binary files /dev/null and b/static/characters/male-person/talk.png differ diff --git a/static/characters/male-person/think.png b/static/characters/male-person/think.png new file mode 100644 index 00000000..36f0dfd9 Binary files /dev/null and b/static/characters/male-person/think.png differ diff --git a/static/characters/male-person/walk0.png b/static/characters/male-person/walk0.png new file mode 100644 index 00000000..59442ddb Binary files /dev/null and b/static/characters/male-person/walk0.png differ diff --git a/static/characters/male-person/walk1.png b/static/characters/male-person/walk1.png new file mode 100644 index 00000000..7695d380 Binary files /dev/null and b/static/characters/male-person/walk1.png differ diff --git a/static/characters/male-person/walk2.png b/static/characters/male-person/walk2.png new file mode 100644 index 00000000..42706c27 Binary files /dev/null and b/static/characters/male-person/walk2.png differ diff --git a/static/characters/male-person/walk3.png b/static/characters/male-person/walk3.png new file mode 100644 index 00000000..b4288653 Binary files /dev/null and b/static/characters/male-person/walk3.png differ diff --git a/static/characters/male-person/walk4.png b/static/characters/male-person/walk4.png new file mode 100644 index 00000000..ef67e603 Binary files /dev/null and b/static/characters/male-person/walk4.png differ diff --git a/static/characters/male-person/walk5.png b/static/characters/male-person/walk5.png new file mode 100644 index 00000000..8dac6789 Binary files /dev/null and b/static/characters/male-person/walk5.png differ diff --git a/static/characters/male-person/walk6.png b/static/characters/male-person/walk6.png new file mode 100644 index 00000000..1247269f Binary files /dev/null and b/static/characters/male-person/walk6.png differ diff --git a/static/characters/male-person/walk7.png b/static/characters/male-person/walk7.png new file mode 100644 index 00000000..74a6fc78 Binary files /dev/null and b/static/characters/male-person/walk7.png differ diff --git a/static/characters/male-person/wide.png b/static/characters/male-person/wide.png new file mode 100644 index 00000000..cc997f36 Binary files /dev/null and b/static/characters/male-person/wide.png differ diff --git a/static/characters/robot/attack0.png b/static/characters/robot/attack0.png new file mode 100644 index 00000000..9162469f Binary files /dev/null and b/static/characters/robot/attack0.png differ diff --git a/static/characters/robot/attack1.png b/static/characters/robot/attack1.png new file mode 100644 index 00000000..22d913fc Binary files /dev/null and b/static/characters/robot/attack1.png differ diff --git a/static/characters/robot/attack2.png b/static/characters/robot/attack2.png new file mode 100644 index 00000000..3db5c40c Binary files /dev/null and b/static/characters/robot/attack2.png differ diff --git a/static/characters/robot/attackKick.png b/static/characters/robot/attackKick.png new file mode 100644 index 00000000..90063206 Binary files /dev/null and b/static/characters/robot/attackKick.png differ diff --git a/static/characters/robot/back.png b/static/characters/robot/back.png new file mode 100644 index 00000000..2a805ebc Binary files /dev/null and b/static/characters/robot/back.png differ diff --git a/static/characters/robot/behindBack.png b/static/characters/robot/behindBack.png new file mode 100644 index 00000000..2bf2b333 Binary files /dev/null and b/static/characters/robot/behindBack.png differ diff --git a/static/characters/robot/cheer0.png b/static/characters/robot/cheer0.png new file mode 100644 index 00000000..2af2c291 Binary files /dev/null and b/static/characters/robot/cheer0.png differ diff --git a/static/characters/robot/cheer1.png b/static/characters/robot/cheer1.png new file mode 100644 index 00000000..acd42b52 Binary files /dev/null and b/static/characters/robot/cheer1.png differ diff --git a/static/characters/robot/climb0.png b/static/characters/robot/climb0.png new file mode 100644 index 00000000..65660437 Binary files /dev/null and b/static/characters/robot/climb0.png differ diff --git a/static/characters/robot/climb1.png b/static/characters/robot/climb1.png new file mode 100644 index 00000000..561ff18a Binary files /dev/null and b/static/characters/robot/climb1.png differ diff --git a/static/characters/robot/down.png b/static/characters/robot/down.png new file mode 100644 index 00000000..63365666 Binary files /dev/null and b/static/characters/robot/down.png differ diff --git a/static/characters/robot/drag.png b/static/characters/robot/drag.png new file mode 100644 index 00000000..2346ef60 Binary files /dev/null and b/static/characters/robot/drag.png differ diff --git a/static/characters/robot/duck.png b/static/characters/robot/duck.png new file mode 100644 index 00000000..ec30cea4 Binary files /dev/null and b/static/characters/robot/duck.png differ diff --git a/static/characters/robot/fall.png b/static/characters/robot/fall.png new file mode 100644 index 00000000..ecbe400b Binary files /dev/null and b/static/characters/robot/fall.png differ diff --git a/static/characters/robot/fallDown.png b/static/characters/robot/fallDown.png new file mode 100644 index 00000000..55e05b1b Binary files /dev/null and b/static/characters/robot/fallDown.png differ diff --git a/static/characters/robot/hang.png b/static/characters/robot/hang.png new file mode 100644 index 00000000..bad94ad3 Binary files /dev/null and b/static/characters/robot/hang.png differ diff --git a/static/characters/robot/hit.png b/static/characters/robot/hit.png new file mode 100644 index 00000000..92420fa4 Binary files /dev/null and b/static/characters/robot/hit.png differ diff --git a/static/characters/robot/hold.png b/static/characters/robot/hold.png new file mode 100644 index 00000000..243133ab Binary files /dev/null and b/static/characters/robot/hold.png differ diff --git a/static/characters/robot/hurt.png b/static/characters/robot/hurt.png new file mode 100644 index 00000000..b867b1d3 Binary files /dev/null and b/static/characters/robot/hurt.png differ diff --git a/static/characters/robot/idle.png b/static/characters/robot/idle.png new file mode 100644 index 00000000..00f95353 Binary files /dev/null and b/static/characters/robot/idle.png differ diff --git a/static/characters/robot/interact.png b/static/characters/robot/interact.png new file mode 100644 index 00000000..634ea319 Binary files /dev/null and b/static/characters/robot/interact.png differ diff --git a/static/characters/robot/jump.png b/static/characters/robot/jump.png new file mode 100644 index 00000000..d776d442 Binary files /dev/null and b/static/characters/robot/jump.png differ diff --git a/static/characters/robot/kick.png b/static/characters/robot/kick.png new file mode 100644 index 00000000..6ce13925 Binary files /dev/null and b/static/characters/robot/kick.png differ diff --git a/static/characters/robot/rope.png b/static/characters/robot/rope.png new file mode 100644 index 00000000..323b87fb Binary files /dev/null and b/static/characters/robot/rope.png differ diff --git a/static/characters/robot/run0.png b/static/characters/robot/run0.png new file mode 100644 index 00000000..85c5ac82 Binary files /dev/null and b/static/characters/robot/run0.png differ diff --git a/static/characters/robot/run1.png b/static/characters/robot/run1.png new file mode 100644 index 00000000..dcda018c Binary files /dev/null and b/static/characters/robot/run1.png differ diff --git a/static/characters/robot/run2.png b/static/characters/robot/run2.png new file mode 100644 index 00000000..7c2cc74e Binary files /dev/null and b/static/characters/robot/run2.png differ diff --git a/static/characters/robot/shove.png b/static/characters/robot/shove.png new file mode 100644 index 00000000..022292ff Binary files /dev/null and b/static/characters/robot/shove.png differ diff --git a/static/characters/robot/shoveBack.png b/static/characters/robot/shoveBack.png new file mode 100644 index 00000000..8744cc9a Binary files /dev/null and b/static/characters/robot/shoveBack.png differ diff --git a/static/characters/robot/show.png b/static/characters/robot/show.png new file mode 100644 index 00000000..189adaf1 Binary files /dev/null and b/static/characters/robot/show.png differ diff --git a/static/characters/robot/side.png b/static/characters/robot/side.png new file mode 100644 index 00000000..0b53e1da Binary files /dev/null and b/static/characters/robot/side.png differ diff --git a/static/characters/robot/slide.png b/static/characters/robot/slide.png new file mode 100644 index 00000000..89e0d106 Binary files /dev/null and b/static/characters/robot/slide.png differ diff --git a/static/characters/robot/switch0.png b/static/characters/robot/switch0.png new file mode 100644 index 00000000..b9fb174e Binary files /dev/null and b/static/characters/robot/switch0.png differ diff --git a/static/characters/robot/switch1.png b/static/characters/robot/switch1.png new file mode 100644 index 00000000..96afed67 Binary files /dev/null and b/static/characters/robot/switch1.png differ diff --git a/static/characters/robot/talk.png b/static/characters/robot/talk.png new file mode 100644 index 00000000..d34bdef7 Binary files /dev/null and b/static/characters/robot/talk.png differ diff --git a/static/characters/robot/think.png b/static/characters/robot/think.png new file mode 100644 index 00000000..5d642a9c Binary files /dev/null and b/static/characters/robot/think.png differ diff --git a/static/characters/robot/walk0.png b/static/characters/robot/walk0.png new file mode 100644 index 00000000..f913ebf1 Binary files /dev/null and b/static/characters/robot/walk0.png differ diff --git a/static/characters/robot/walk1.png b/static/characters/robot/walk1.png new file mode 100644 index 00000000..98a61ef5 Binary files /dev/null and b/static/characters/robot/walk1.png differ diff --git a/static/characters/robot/walk2.png b/static/characters/robot/walk2.png new file mode 100644 index 00000000..8da876d2 Binary files /dev/null and b/static/characters/robot/walk2.png differ diff --git a/static/characters/robot/walk3.png b/static/characters/robot/walk3.png new file mode 100644 index 00000000..2b264292 Binary files /dev/null and b/static/characters/robot/walk3.png differ diff --git a/static/characters/robot/walk4.png b/static/characters/robot/walk4.png new file mode 100644 index 00000000..6114e197 Binary files /dev/null and b/static/characters/robot/walk4.png differ diff --git a/static/characters/robot/walk5.png b/static/characters/robot/walk5.png new file mode 100644 index 00000000..06e0b61d Binary files /dev/null and b/static/characters/robot/walk5.png differ diff --git a/static/characters/robot/walk6.png b/static/characters/robot/walk6.png new file mode 100644 index 00000000..43dcb322 Binary files /dev/null and b/static/characters/robot/walk6.png differ diff --git a/static/characters/robot/walk7.png b/static/characters/robot/walk7.png new file mode 100644 index 00000000..3b16f00c Binary files /dev/null and b/static/characters/robot/walk7.png differ diff --git a/static/characters/robot/wide.png b/static/characters/robot/wide.png new file mode 100644 index 00000000..480558e0 Binary files /dev/null and b/static/characters/robot/wide.png differ diff --git a/static/characters/zombie/attack0.png b/static/characters/zombie/attack0.png new file mode 100644 index 00000000..70151c81 Binary files /dev/null and b/static/characters/zombie/attack0.png differ diff --git a/static/characters/zombie/attack1.png b/static/characters/zombie/attack1.png new file mode 100644 index 00000000..6bf8a464 Binary files /dev/null and b/static/characters/zombie/attack1.png differ diff --git a/static/characters/zombie/attack2.png b/static/characters/zombie/attack2.png new file mode 100644 index 00000000..90d940f1 Binary files /dev/null and b/static/characters/zombie/attack2.png differ diff --git a/static/characters/zombie/attackKick.png b/static/characters/zombie/attackKick.png new file mode 100644 index 00000000..02af20f8 Binary files /dev/null and b/static/characters/zombie/attackKick.png differ diff --git a/static/characters/zombie/back.png b/static/characters/zombie/back.png new file mode 100644 index 00000000..298c843c Binary files /dev/null and b/static/characters/zombie/back.png differ diff --git a/static/characters/zombie/behindBack.png b/static/characters/zombie/behindBack.png new file mode 100644 index 00000000..2b694eec Binary files /dev/null and b/static/characters/zombie/behindBack.png differ diff --git a/static/characters/zombie/cheer0.png b/static/characters/zombie/cheer0.png new file mode 100644 index 00000000..65ee3373 Binary files /dev/null and b/static/characters/zombie/cheer0.png differ diff --git a/static/characters/zombie/cheer1.png b/static/characters/zombie/cheer1.png new file mode 100644 index 00000000..be1c23ee Binary files /dev/null and b/static/characters/zombie/cheer1.png differ diff --git a/static/characters/zombie/climb0.png b/static/characters/zombie/climb0.png new file mode 100644 index 00000000..31b533a7 Binary files /dev/null and b/static/characters/zombie/climb0.png differ diff --git a/static/characters/zombie/climb1.png b/static/characters/zombie/climb1.png new file mode 100644 index 00000000..161de3ac Binary files /dev/null and b/static/characters/zombie/climb1.png differ diff --git a/static/characters/zombie/down.png b/static/characters/zombie/down.png new file mode 100644 index 00000000..4851f83e Binary files /dev/null and b/static/characters/zombie/down.png differ diff --git a/static/characters/zombie/drag.png b/static/characters/zombie/drag.png new file mode 100644 index 00000000..cd815042 Binary files /dev/null and b/static/characters/zombie/drag.png differ diff --git a/static/characters/zombie/duck.png b/static/characters/zombie/duck.png new file mode 100644 index 00000000..a32b2671 Binary files /dev/null and b/static/characters/zombie/duck.png differ diff --git a/static/characters/zombie/fall.png b/static/characters/zombie/fall.png new file mode 100644 index 00000000..5c7bc8af Binary files /dev/null and b/static/characters/zombie/fall.png differ diff --git a/static/characters/zombie/fallDown.png b/static/characters/zombie/fallDown.png new file mode 100644 index 00000000..7c82d9d2 Binary files /dev/null and b/static/characters/zombie/fallDown.png differ diff --git a/static/characters/zombie/hang.png b/static/characters/zombie/hang.png new file mode 100644 index 00000000..0ea31c04 Binary files /dev/null and b/static/characters/zombie/hang.png differ diff --git a/static/characters/zombie/hit.png b/static/characters/zombie/hit.png new file mode 100644 index 00000000..9e9d7d2d Binary files /dev/null and b/static/characters/zombie/hit.png differ diff --git a/static/characters/zombie/hold.png b/static/characters/zombie/hold.png new file mode 100644 index 00000000..ca5168c1 Binary files /dev/null and b/static/characters/zombie/hold.png differ diff --git a/static/characters/zombie/hurt.png b/static/characters/zombie/hurt.png new file mode 100644 index 00000000..69642885 Binary files /dev/null and b/static/characters/zombie/hurt.png differ diff --git a/static/characters/zombie/interact.png b/static/characters/zombie/interact.png new file mode 100644 index 00000000..5e927b76 Binary files /dev/null and b/static/characters/zombie/interact.png differ diff --git a/static/characters/zombie/kick.png b/static/characters/zombie/kick.png new file mode 100644 index 00000000..05caf740 Binary files /dev/null and b/static/characters/zombie/kick.png differ diff --git a/static/characters/zombie/rope.png b/static/characters/zombie/rope.png new file mode 100644 index 00000000..48ecbb6c Binary files /dev/null and b/static/characters/zombie/rope.png differ diff --git a/static/characters/zombie/run0.png b/static/characters/zombie/run0.png new file mode 100644 index 00000000..b1188714 Binary files /dev/null and b/static/characters/zombie/run0.png differ diff --git a/static/characters/zombie/run1.png b/static/characters/zombie/run1.png new file mode 100644 index 00000000..263bb3e3 Binary files /dev/null and b/static/characters/zombie/run1.png differ diff --git a/static/characters/zombie/run2.png b/static/characters/zombie/run2.png new file mode 100644 index 00000000..3fc74c91 Binary files /dev/null and b/static/characters/zombie/run2.png differ diff --git a/static/characters/zombie/shove.png b/static/characters/zombie/shove.png new file mode 100644 index 00000000..c7b0c700 Binary files /dev/null and b/static/characters/zombie/shove.png differ diff --git a/static/characters/zombie/shoveBack.png b/static/characters/zombie/shoveBack.png new file mode 100644 index 00000000..40a4012f Binary files /dev/null and b/static/characters/zombie/shoveBack.png differ diff --git a/static/characters/zombie/show.png b/static/characters/zombie/show.png new file mode 100644 index 00000000..0a4ed13f Binary files /dev/null and b/static/characters/zombie/show.png differ diff --git a/static/characters/zombie/side.png b/static/characters/zombie/side.png new file mode 100644 index 00000000..52a0224d Binary files /dev/null and b/static/characters/zombie/side.png differ diff --git a/static/characters/zombie/slide.png b/static/characters/zombie/slide.png new file mode 100644 index 00000000..cbcaf012 Binary files /dev/null and b/static/characters/zombie/slide.png differ diff --git a/static/characters/zombie/switch0.png b/static/characters/zombie/switch0.png new file mode 100644 index 00000000..a438aaec Binary files /dev/null and b/static/characters/zombie/switch0.png differ diff --git a/static/characters/zombie/switch1.png b/static/characters/zombie/switch1.png new file mode 100644 index 00000000..985517fd Binary files /dev/null and b/static/characters/zombie/switch1.png differ diff --git a/static/characters/zombie/talk.png b/static/characters/zombie/talk.png new file mode 100644 index 00000000..5408c129 Binary files /dev/null and b/static/characters/zombie/talk.png differ diff --git a/static/characters/zombie/think.png b/static/characters/zombie/think.png new file mode 100644 index 00000000..9de13c52 Binary files /dev/null and b/static/characters/zombie/think.png differ diff --git a/static/characters/zombie/wide.png b/static/characters/zombie/wide.png new file mode 100644 index 00000000..2cea902c Binary files /dev/null and b/static/characters/zombie/wide.png differ diff --git a/static/js/screen_edit/personnage-panel.js b/static/js/screen_edit/personnage-panel.js index f255f9ff..9a1cade8 100644 --- a/static/js/screen_edit/personnage-panel.js +++ b/static/js/screen_edit/personnage-panel.js @@ -3,7 +3,9 @@ // générique via #propsForm — chaque changement s'enregistre en AJAX vers // POST /game//elements//personnage (element_set_personnage_data.py), // qui renvoie les animations résolues pour relancer immédiatement l'aperçu -// animé (voir personnage-preview.js) sans recharger la page. +// animé (voir personnage-preview.js) sans recharger la page. L'import de +// sprites personnalisés est retiré pour le moment — seuls les personnages +// Forge (SPRITE_LIBRARY) sont proposés. function _personnageElementId() { var body = document.getElementById('personnagePanelBody'); @@ -29,83 +31,9 @@ function _savePersonnageData(data) { }); } -// ---------- Source Forge : changer de personnage ---------- function swapPersonnageCharacter(forgeCharacter) { document.querySelectorAll('#personnageGallerySwap .iconGalleryTile').forEach(function (tile) { tile.classList.toggle('selected', tile.getAttribute('onclick') === "swapPersonnageCharacter('" + forgeCharacter + "')"); }); _savePersonnageData({ source: 'forge', forge_character: forgeCharacter }); } - -// ---------- Source personnalisée : animations importées ---------- -function _collectPersonnageAnimations() { - var animations = {}; - document.querySelectorAll('#personnageAnimationsList .personnageAnimRow').forEach(function (row) { - var name = row.querySelector('.personnageAnimName').value.trim(); - if (!name) return; - var frames = Array.prototype.map.call(row.querySelectorAll('.personnageFrameThumb'), function (img) { return img.src; }); - animations[name] = frames; - }); - return animations; -} - -function _saveCustomAnimations() { - return _savePersonnageData({ source: 'custom', animations: _collectPersonnageAnimations() }); -} - -function addPersonnageAnimation() { - var list = document.getElementById('personnageAnimationsList'); - var row = document.createElement('div'); - row.className = 'personnageAnimRow box'; - row.style.marginBottom = '8px'; - row.style.padding = '8px'; - row.innerHTML = - '
' + - '' + - '' + - '
' + - '
' + - '' + - ''; - list.appendChild(row); -} - -function removePersonnageAnimation(btn) { - btn.closest('.personnageAnimRow').remove(); - _saveCustomAnimations(); -} - -// Délégation d'événements : les lignes d'animation sont ajoutées -// dynamiquement (addPersonnageAnimation ci-dessus), un bindage statique au -// chargement de la page ne les couvrirait pas. -document.addEventListener('change', function (ev) { - if (ev.target.classList.contains('personnageAnimName')) { - _saveCustomAnimations(); - } else if (ev.target.classList.contains('personnageFrameUpload')) { - var input = ev.target; - if (!input.files.length) return; - var row = input.closest('.personnageAnimRow'); - var framesWrap = row.querySelector('.personnageAnimFrames'); - var status = row.querySelector('.uploadStatus'); - status.textContent = 'Envoi en cours...'; - var uploads = Array.prototype.map.call(input.files, function (file) { - var data = new FormData(); - data.append('file', file); - return fetch('/game/' + GAME_SLUG + '/upload', { method: 'POST', body: data }).then(function (r) { return r.json(); }); - }); - Promise.all(uploads).then(function (results) { - results.forEach(function (json) { - if (!json.url) return; - var img = document.createElement('img'); - img.className = 'personnageFrameThumb'; - img.alt = ''; - img.style.cssText = 'width:32px; height:32px; object-fit:contain; background:var(--panel2); border-radius:4px;'; - img.src = json.url; - framesWrap.appendChild(img); - }); - status.textContent = results.every(function (j) { return j.url; }) ? 'Fichier(s) envoyé(s) ✓' : "Échec de l'envoi pour certains fichiers."; - input.value = ''; - _saveCustomAnimations(); - }); - } -}); diff --git a/static/js/screen_edit/tree-panels.js b/static/js/screen_edit/tree-panels.js index 4c9d224a..e89b12e3 100644 --- a/static/js/screen_edit/tree-panels.js +++ b/static/js/screen_edit/tree-panels.js @@ -193,9 +193,8 @@ function addIconElement(iconClass) { } // Phase 8 — galerie "🎭 Personnages" (panneau gauche) : mirror exact -// d'addIconElement() ci-dessus, "__custom__" pose un sprite personnalisé -// vide (voir element_add.py) dont les animations s'importent ensuite dans -// ses propriétés (panneau droit, personnage-panel.js). +// d'addIconElement() ci-dessus, pose un personnage Forge déjà configuré +// (voir element_add.py). function addPersonnageElement(forgeCharacter) { var form = document.createElement('form'); form.method = 'post'; diff --git a/templates/screen_edit.html b/templates/screen_edit.html index d41277f4..c0173cfa 100644 --- a/templates/screen_edit.html +++ b/templates/screen_edit.html @@ -53,11 +53,6 @@ {{ character.label }} {% endfor %} - {% if mode == 'add' %} - - {% endif %} {% endmacro %} @@ -159,16 +154,15 @@ + personnage DÉJÀ configuré (Kenney CC0, toutes ses animations), + animé immédiatement dans le canevas (voir personnage-preview.js) — + pas un élément générique à configurer ensuite dans la logique. + L'import de sprites personnalisés est retiré pour le moment. -->
🎭 Personnages
{{ render_personnage_gallery('add', 'personnageGalleryAdd') }} -

Personnage prêt à l'emploi (Kenney, licence libre CC0) ou "➕" pour un sprite personnalisé — importe ensuite tes propres images d'animation dans ses propriétés.

+

Personnage Kenney prêt à l'emploi (licence libre CC0), avec toutes ses animations.

@@ -899,36 +893,15 @@ {% if el.widget == 'personnage' %} + pas de controls génériques, juste le personnage Forge affiché. + Sauvegarde en AJAX (personnage-panel.js), jamais via #propsForm + (générique, utilisé par tous les autres widgets). L'import de + sprites personnalisés est retiré pour le moment. -->
🎭 Personnage -
- {% if personnage_data.source == 'custom' %} -

Sprite personnalisé — importe les images de chaque animation ("idle" recommandée, affichée par défaut).

-
- {% for anim_name, frames in (personnage_data.animations or {}).items() %} -
-
- - -
-
- {% for url in frames %} - - {% endfor %} -
- - -
- {% endfor %} -
- - {% else %} +

Personnage Forge — clique un autre pour en changer.

{{ render_personnage_gallery('swap', 'personnageGallerySwap', personnage_data.forge_character) }} - {% endif %}
{% endif %} diff --git a/tests/test_personnage_widget.py b/tests/test_personnage_widget.py index 818e2373..17525279 100644 --- a/tests/test_personnage_widget.py +++ b/tests/test_personnage_widget.py @@ -55,12 +55,16 @@ def test_add_personnage_with_specific_forge_character(client, game): assert data == {"source": "forge", "forge_character": "zombie"} -def test_add_custom_sprite_personnage(client, game): +def test_unknown_forge_character_falls_back_to_default(client, game): + """L'import de sprites personnalisés est retiré pour le moment (voir + element_add.py) : une valeur qui n'est pas une clé de SPRITE_LIBRARY + (ex. l'ancienne tuile "__custom__") est ignorée, l'élément garde le + personnage Forge par défaut plutôt que de démarrer sans animation.""" screen_id = _create_screen(client, game) el_id = _add_personnage(client, game, screen_id, forge_character="__custom__") el = screens.get_element(game, el_id) data = screens.resolve_personnage_data(el) - assert data == {"source": "custom", "animations": {}} + assert data == {"source": "forge", "forge_character": "male-adventurer"} def test_swap_forge_character_via_ajax_route(client, game): @@ -79,8 +83,12 @@ def test_swap_forge_character_via_ajax_route(client, game): def test_import_custom_animations_via_ajax_route(client, game): + """La résolution _personnage_data côté serveur gère toujours la source + "custom" (voir personnage_data.py) même si aucune UI ne permet plus de + la créer (retiré pour le moment) — vérifie que ce chemin reste correct + si réintroduit plus tard.""" screen_id = _create_screen(client, game) - el_id = _add_personnage(client, game, screen_id, forge_character="__custom__") + el_id = _add_personnage(client, game, screen_id, forge_character="male-adventurer") custom = {"source": "custom", "animations": {"idle": ["https://x/idle.png"], "marche": ["https://x/w0.png", "https://x/w1.png"]}} resp = client.post( f"/game/{game}/elements/{el_id}/personnage", @@ -98,7 +106,7 @@ def test_resolve_personnage_idle_frame_falls_back_to_first_animation(client, gam par ex.) doit quand même montrer QUELQUE CHOSE plutôt qu'une image cassée — retombe sur la première animation disponible.""" screen_id = _create_screen(client, game) - el_id = _add_personnage(client, game, screen_id, forge_character="__custom__") + el_id = _add_personnage(client, game, screen_id, forge_character="male-adventurer") client.post( f"/game/{game}/elements/{el_id}/personnage", data=json.dumps({"source": "custom", "animations": {"marche": ["https://x/w0.png"]}}), @@ -111,7 +119,22 @@ def test_resolve_personnage_idle_frame_falls_back_to_first_animation(client, gam def test_screen_edit_exposes_personnage_gallery_and_scripts(client, game): screen_id = _create_screen(client, game) html = client.get(f"/game/{game}/screens/{screen_id}/edit").get_data(as_text=True) - assert "male-adventurer" in html - assert "addPersonnageElement" in html or "personnageGallery" in html + for slug in screens.SPRITE_LIBRARY: + assert f"/static/characters/{slug}/idle.png" in html + assert "personnageGallery" in html + # L'import de sprites personnalisés est retiré pour le moment. + assert "Sprite personnalisé" not in html js = screen_edit_js_bundle() assert "addPersonnageElement" in js + assert "addPersonnageAnimation" not in js + + +def test_sprite_library_has_all_six_characters_with_all_animations(client, game): + assert set(screens.SPRITE_LIBRARY) == { + "male-adventurer", "female-adventurer", "male-person", + "female-person", "robot", "zombie", + } + for character in screens.SPRITE_LIBRARY.values(): + names = set(character["animations"]) + assert {"idle", "walk", "run", "jump", "attack"} <= names + assert len(character["animations"]["walk"]) == 8