{% 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 %}

{% 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

Boîte de dialogue/quiz : gérées automatiquement par le moteur (voir l'onglet "Quêtes") — position et style réglables une fois posées. Score : affiche en continu les points gagnés.

{% if game.onboarding_type != 'rpg' %} {% endif %}
{% if world_width > screen.scene_width or world_height > screen.scene_height %}
{% endif %} {% for o in objects %}
{{ o.rendered_html|safe }}
{% if o.id == selected_id and o.kind not in ('fond', 'dialogue_box', 'quiz_box', 'score_widget') %}
{% 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.

{% if game.onboarding_type != 'rpg' %}

É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 %} {{ 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 %}
{% 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 %} {% set _WIDGET_ICONS = {'dialogue_box': '💬', 'quiz_box': '❓', 'score_widget': '🏆'} %} {% set _WIDGET_LABELS = {'dialogue_box': 'Boîte de dialogue', 'quiz_box': 'Boîte à quiz', 'score_widget': 'Score'} %}

{{ obj.name or ('Personnage' if obj.kind == 'personnage' else _WIDGET_LABELS.get(obj.kind, 'Décor')) }}

{% if obj.kind != 'dialogue_box' %}
Informations
{% endif %}
Position & taille (pixels)
{% if obj.kind in ('dialogue_box', 'quiz_box', 'score_widget') %}
Style
{% endif %} {% if obj.kind not in ('fond', 'dialogue_box', 'quiz_box', 'score_widget') %}
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 %}