Quiz jouable : budget de récompense, boîte à quiz, widget score
- Récompense d'une quête = budget MAXIMUM pour ses questions : la somme des points des "❓ Question" ne peut plus dépasser recompense_score (routes/quests/quest_dialogues.py à l'enregistrement des dialogues, quest_update.py si on abaisse la récompense sous ce qui est déjà réparti) — message d'erreur explicite (400) dans les deux sens, affiché via alert() côté éditeur (quest-editor.js), jamais enregistré silencieusement dans un état incohérent. - Nombre de choix par question plafonné à 4 (au lieu de 8). - Deux nouveaux widgets "🖥️ Interface" (mêmes fondations que "💬 Boîte de dialogue" — screens/rendering/dialogue_box_style.py, même panneau "🎨 Style") : - "❓ Boîte à quiz" : affiche la question et ses choix, sans pied (une question se résout au clic sur un choix, pas de "Suivant"). - "🏆 Score" : affiche en continu les points gagnés, TOUJOURS visible une fois posé (contrairement aux boîtes de dialogue/quiz, masquées par défaut). - Moteur d'exécution (static/js/play/dialogue-box-controller.js, refonte) : une conversation de quête alterne maintenant répliques (boîte de dialogue) et questions (boîte à quiz) selon le type de chaque ligne. Bonne réponse -> crédite le score (compteur runtime dédié, jamais lié au score du moteur document) et avance ; mauvaise réponse -> rien, la question reste affichée pour réessayer ; aucune boîte à quiz posée -> la question est ignorée plutôt que de bloquer la conversation. Le dialogue "en_cours" épuisé (donc, s'il contenait des questions, toutes répondues) fait passer la quête "terminee" (en mémoire seulement, comme le reste de ce système — voir accepter/ refuser une offre de quête) : le joueur peut alors quitter la scène normalement, ces widgets n'étant jamais des obstacles. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
e972acf9e6
commit
b5546df044
@@ -5,11 +5,14 @@ import db
|
||||
from .ensure_scene_schema import ensure_scene_schema
|
||||
|
||||
_DEFAULT_PERSONNAGE_DATA = {"source": "forge", "forge_character": "male-adventurer"}
|
||||
_KINDS = {"personnage", "decor", "fond", "dialogue_box"}
|
||||
# Widget d'interface (voir "🖥️ Interface", screens/rendering/dialogue_box_style.py) :
|
||||
# assez grand pour lire une réplique sans redimensionner, jamais confondu
|
||||
# visuellement avec un personnage/décor (128×128 par défaut).
|
||||
_KINDS = {"personnage", "decor", "fond", "dialogue_box", "quiz_box", "score_widget"}
|
||||
# Widgets d'interface (voir "🖥️ Interface", screens/rendering/dialogue_box_style.py) :
|
||||
# assez grands pour lire une réplique/question sans redimensionner,
|
||||
# jamais confondus visuellement avec un personnage/décor (128×128 par
|
||||
# défaut). "score_widget" reste petit — juste un nombre.
|
||||
_DIALOGUE_BOX_DEFAULT_SIZE = (320, 150)
|
||||
_QUIZ_BOX_DEFAULT_SIZE = (340, 240)
|
||||
_SCORE_WIDGET_DEFAULT_SIZE = (140, 50)
|
||||
|
||||
|
||||
def add_scene_object(slug, scene_id, kind="personnage", forge_character=None, background_slug=None):
|
||||
@@ -46,6 +49,10 @@ def add_scene_object(slug, scene_id, kind="personnage", forge_character=None, ba
|
||||
width, height = background["width"], background["height"]
|
||||
elif kind == "dialogue_box":
|
||||
width, height = _DIALOGUE_BOX_DEFAULT_SIZE
|
||||
elif kind == "quiz_box":
|
||||
width, height = _QUIZ_BOX_DEFAULT_SIZE
|
||||
elif kind == "score_widget":
|
||||
width, height = _SCORE_WIDGET_DEFAULT_SIZE
|
||||
conn = db.connect(slug)
|
||||
if kind == "fond":
|
||||
z_index = -1000
|
||||
|
||||
Reference in New Issue
Block a user