{% extends "base.html" %} {% block title %}{{ screen.name }} — {{ game.name }}{% endblock %} {% block content_class %}content-builder{% endblock %} {% block body_class %}builderBody{% endblock %} {% block extra_head %} {% endblock %} {% block content %}

🎮 Jeu 2D — scène à taille fixe ({{ screen.scene_width }}×{{ screen.scene_height }} px).

{% set obj = objects|selectattr("id", "equalto", selected_id)|first if selected_id else none %}
⋮⋮ Objets de cette scène
▶️ Jouer depuis le début
🎭 Personnages
{% for slug_c, character in sprite_library_families %} {% endfor %}

Personnage Kenney (licence libre CC0) ou animal Forge, avec toutes ses animations — les variantes de couleur d'un animal se choisissent depuis le panneau de propriétés.

{% if background_library %}
🏞️ Images de fond
{% for slug_b, background in background_library.items() %} {% endfor %}

Posée à sa taille réelle (souvent plus grande que la scène) — un seul fond par scène recommandé, la caméra le suit en défilant.

{% endif %}
🖥️ Interface

Affiche automatiquement le dialogue de la quête en cours (voir l'onglet "🗺️ Quêtes") — position et style réglables une fois posée.

{% for o in objects %}
{{ o.rendered_html|safe }}
{% if o.id == selected_id and o.kind not in ('fond', 'dialogue_box') %}
{% endif %}
{% endfor %}

Glisse pour déplacer, tire le coin pour redimensionner, clique pour sélectionner. Positions en pixels (scène à taille fixe).

🧩 Collision

Pour chaque objet (jamais le joueur lui-même), choisis ce qui doit se passer à son contact — la carte se construit au fil de tes choix, comme des pièces qui s'emboîtent.

🗺️ Quêtes

Titre, objectif, récompense, statut, résultat — clique sur une ligne pour écrire son enchaînement de dialogue.

Événements personnalisés

{% if custom_events %} {% for ev in custom_events %}
{% endfor %}
{% for ev in custom_events %} {% endfor %}
NomDescriptionUtilisé par
{{ ev.name }} {% set usages = custom_event_usages.get(ev.id, []) %} {% if usages %} {% for u in usages %} {{ '🔔' if u.role == 'ecoute' else '📣' }} {{ u.screen_name }}{{ ' (modèle)' if u.is_template else '' }}{{ ', ' if not loop.last else '' }} {% endfor %} {% else %} Inutilisé {% endif %}
{% else %}

Aucun événement pour l'instant — crée le premier ci-dessus.

{% endif %}
⋮⋮ Propriétés
{% if not selected_id or not obj %}
Sélectionne un objet (sur la scène ou dans la liste) pour voir et modifier ses propriétés ici.
{% else %}

{{ '🏃' if obj.kind == 'personnage' else ('💬' if obj.kind == 'dialogue_box' else '🖼️') }} {{ obj.name or ('Personnage' if obj.kind == 'personnage' else ('Boîte de dialogue' if obj.kind == 'dialogue_box' else 'Décor')) }}

{% if obj.kind != 'dialogue_box' %}
ℹ️ Informations
{% endif %}
Position & taille (pixels)
{% if obj.kind == 'dialogue_box' %}
🎨 Style
{% endif %} {% if obj.kind not in ('fond', 'dialogue_box') %}
🧱 Collision

Taille/décalage réglés par rapport au centre de l'objet — laisse la taille par défaut (celle de l'objet) si son image n'a pas de marge inutile.

{% endif %} {% if obj.kind == 'personnage' %}
🎭 Personnage

Personnage Forge — clique un autre pour en changer.

{% for slug_c, character in sprite_library_families %} {% endfor %}
{% set current_character = sprite_library.get(personnage_data.forge_character) %} {% if current_character and current_character.get('family') %}

Variantes de {{ current_character.family_label }} :

{% for slug_c, character in sprite_library.items() if character.get('family') == current_character.family %} {% endfor %}
{% endif %}
🕹️ Commandes

Ce personnage se déplace et s'anime automatiquement avec ces touches, sans rien à poser dans la logique. Clique un champ puis appuie sur la touche voulue.

{% endif %} {% endif %}
{% endblock %}