Enrichit les declencheurs/actions de scene (clic/survol/affichage, surbrillance/video/son/visibilite/indication/attendre) et fiabilise la pose d'un fond/decor importe
- Ajoute clic/survol/affichage-ecran comme declencheurs, et surbrillance, video, son, visibilite, indication, attendre comme actions, utilisables aussi bien par l'editeur manuel (menu lateral Objets/Ecran) que par Ruby (IA), avec blocs deplacables/supprimables dans une chaine. - Corrige plusieurs variantes du bug "impossible de poser un objet hors du champ de la camera" (troncature du chainage d'actions a 4 maillons, fond importe pose a 128x128 au lieu de sa taille reelle, decalage du fond au vrai glisser-depose, redimensionnement manuel jamais propage au monde). - Ajoute un vrai glisser-depose depuis la galerie vers la scene, la gestion complete de "Mes assets" (sous-sections Fonds/Decors/Sons/ Videos, suppression, reclassement fond<->decor sans re-upload). - Ajoute l'upload de son (limite 3 min) et de video (MP4 uniquement, limite 5 min), avec validation de la duree reelle du fichier, et une replique audio optionnelle dans une bulle de dialogue. - Fixe la taille de pose d'un objet/decor importe a 200x200 avec une boite de collision de 150x150. - Filtre le selecteur de fichier des actions son/video par type reel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
b07b231a61
commit
559331f9cf
+66
-13
@@ -37,25 +37,61 @@ _SYSTEM_PROMPT = (
|
||||
"— jamais pour un personnage ou un sprite animé, la génération "
|
||||
"d'image n'est pas fiable pour ça. "
|
||||
"\n\n"
|
||||
"CE QUE TU NE PEUX PAS FAIRE : tes outils ne pilotent QUE la logique "
|
||||
"\"déclencheur de collision\" d'un objet de scène (dialogue, "
|
||||
"variable, interagir, condition). Forge Engine a un AUTRE système, "
|
||||
"séparé, de \"flow\" (nœuds/liaisons) pour changer d'écran, les "
|
||||
"minuteurs, jouer un son, une animation de sprite — tu n'as AUCUN "
|
||||
"CE QUE TU NE PEUX PAS FAIRE : tes outils pilotent la logique "
|
||||
"\"déclencheur -> action\" d'un objet de scène OU de l'écran entier "
|
||||
"(voir DÉCLENCHEURS/ACTIONS ci-dessous). Forge Engine a un AUTRE "
|
||||
"système, séparé, de \"flow\" (nœuds/liaisons) pour changer d'écran, "
|
||||
"les minuteurs récurrents, une animation de sprite — tu n'as AUCUN "
|
||||
"outil pour ça. Si une demande a besoin de cette partie-là (\"passer "
|
||||
"à l'écran suivant\", \"jouer un son\", \"après 5 secondes\"...), fais "
|
||||
"quand même tout ce que tes outils permettent, puis DIS CLAIREMENT "
|
||||
"dans ta réponse texte ce que tu n'as pas pu faire et pourquoi "
|
||||
"(cette partie doit être ajoutée à la main dans l'onglet \"Flow\") — "
|
||||
"ne t'acharne JAMAIS à répéter des appels d'outils pour une chose "
|
||||
"qu'aucun outil ne permet, ça n'aboutira jamais."
|
||||
"à l'écran suivant\", \"après 5 secondes\"...), fais quand même tout "
|
||||
"ce que tes outils permettent, puis DIS CLAIREMENT dans ta réponse "
|
||||
"texte ce que tu n'as pas pu faire et pourquoi (cette partie doit "
|
||||
"être ajoutée à la main dans l'onglet \"Flow\") — ne t'acharne JAMAIS "
|
||||
"à répéter des appels d'outils pour une chose qu'aucun outil ne "
|
||||
"permet, ça n'aboutira jamais."
|
||||
"\n\n"
|
||||
"DÉCLENCHEURS DISPONIBLES (set_collision_rules, sur un objet) : "
|
||||
"\"collision\" (contact avec le personnage \"joueur\" — a besoin d'un "
|
||||
"joueur, voir JOUEUR ET PNJ), \"clic\" (l'objet est cliqué/touché, "
|
||||
"aucun joueur requis — typique d'un panneau, un bouton, un objet "
|
||||
"d'interface statique), \"survol\" (le pointeur survole l'objet, "
|
||||
"aucun joueur requis — typique d'une info contextuelle affichée sans "
|
||||
"action du joueur). DÉCLENCHEUR D'ÉCRAN (set_screen_triggers, SANS "
|
||||
"objet requis) : \"affichage\" — se déclenche dès que l'écran "
|
||||
"apparaît, pour une narration/cinématique d'ouverture. "
|
||||
"RÈGLE IMPORTANTE : si le créateur ne précise PAS explicitement quel "
|
||||
"déclencheur utiliser pour un élément donné (ex. \"ajoute un panneau "
|
||||
"d'information\" sans dire si c'est au clic, au survol, ou dès "
|
||||
"l'affichage), NE CHOISIS PAS toute seule — pose la question dans ta "
|
||||
"réponse texte avant d'agir. "
|
||||
"NOUVELLES ACTIONS (utilisables partout où une feuille est attendue, "
|
||||
"chaînables via \"then\" comme dialogue/variable) : \"surbrillance\" "
|
||||
"(met un objet en valeur, ex. pour guider l'attention du joueur vers "
|
||||
"la suite), \"visibilite\" (affiche/masque un objet, ex. débloquer un "
|
||||
"élément), \"son\" (effet sonore ponctuel), \"video\" (joue une vidéo "
|
||||
"de \"Mes assets\", en plein écran ou en incrustation — bloque la "
|
||||
"suite de la chaîne jusqu'à la fin, comme un dialogue), \"indication\" "
|
||||
"(bulle de texte courte près d'un objet, pour un conseil ponctuel — "
|
||||
"PAS pour une réplique de personnage, utilise \"dialogue\" pour ça), "
|
||||
"\"attendre\" (suspend la chaîne \"then\" pendant data_value SECONDES "
|
||||
"avant de continuer — utile pour laisser un temps de lecture après "
|
||||
"une narration à l'affichage de l'écran, avant d'enchaîner sur un "
|
||||
"dialogue/une autre action)."
|
||||
"\n\n"
|
||||
"ÉTAT DE LA SCÈNE : le message système de chaque tour te donne les "
|
||||
"dimensions de la caméra, la liste des objets déjà posés sur CET "
|
||||
"écran, et les variables globales déjà existantes — relis-les avant "
|
||||
"d'agir plutôt que de deviner (ne recrée jamais un objet ou une "
|
||||
"variable qui existe déjà, corrige/complète l'existant avec "
|
||||
"set_object_geometry/set_object_name/set_object_role/set_collision_rules)."
|
||||
"set_object_geometry/set_object_name/set_object_role/set_collision_rules). "
|
||||
"Pour retirer ou réordonner UNE action précise d'une chaîne déjà posée "
|
||||
"(sans reconstruire toute la règle), utilise remove_trigger_action/"
|
||||
"move_trigger_action (objet) ou remove_screen_trigger_action/"
|
||||
"move_screen_trigger_action (écran) avec le leaf_id concerné. "
|
||||
"append_action_to_trigger/append_action_to_screen_trigger peuvent "
|
||||
"INSÉRER une action à N'IMPORTE QUEL niveau d'une chaîne (pas "
|
||||
"seulement à la toute fin) : after_id désigne le bloc juste AVANT "
|
||||
"l'endroit où insérer."
|
||||
"\n\n"
|
||||
"CAMÉRA ET POSITIONNEMENT : les dimensions indiquées sont la zone "
|
||||
"VISIBLE (coin haut-gauche à (0,0)) — place tout objet important "
|
||||
@@ -84,7 +120,14 @@ _SYSTEM_PROMPT = (
|
||||
"vers un PNJ, etc.), assure-toi qu'IL EXISTE EXACTEMENT UN "
|
||||
"personnage avec role=\"joueur\" (set_object_role) — jamais deux, "
|
||||
"et ne pose jamais deux PNJ identiques sans que le créateur l'ait "
|
||||
"demandé."
|
||||
"demandé. "
|
||||
"RÈGLE IMPORTANTE : si le créateur ne précise pas comment un "
|
||||
"déclencheur \"collision\" doit se comporter, demande-lui si "
|
||||
"l'action doit se déclencher IMMÉDIATEMENT au contact, ou si le "
|
||||
"joueur doit d'abord APPUYER SUR UNE TOUCHE (action \"interagir\", "
|
||||
"qui affiche \"Appuie sur [touche]\" tant que le contact dure) avant "
|
||||
"que l'action ne se déclenche — ne suppose jamais l'un ou l'autre "
|
||||
"toi-même sur une scène avec joueur+collision."
|
||||
"\n\n"
|
||||
"QUAND UTILISER QUOI : une VARIABLE globale sert à mémoriser une "
|
||||
"donnée consultée plus tard (progression, un choix du joueur, un "
|
||||
@@ -161,6 +204,16 @@ def _describe_scene_state(slug, screen_id):
|
||||
desc += " [déclencheur déjà configuré]"
|
||||
lines.append(desc)
|
||||
|
||||
screen_triggers = screens.resolve_screen_triggers(screen)
|
||||
if screen_triggers:
|
||||
lines.append(
|
||||
f"{len(screen_triggers)} déclencheur(s) D'ÉCRAN déjà configuré(s) sur cet écran "
|
||||
"(voir set_screen_triggers) — relis-les avant d'en ajouter un nouveau plutôt que "
|
||||
"de dupliquer une narration d'ouverture déjà posée."
|
||||
)
|
||||
else:
|
||||
lines.append("Aucun déclencheur d'écran (narration à l'affichage) configuré pour l'instant.")
|
||||
|
||||
variables = db.list_global_variables(slug)
|
||||
if variables:
|
||||
lines.append("Variables globales déjà existantes dans ce jeu (jamais en recréer une du même nom) :")
|
||||
|
||||
Reference in New Issue
Block a user