9f4501b9b9
Phase 1: zacus_v3_complete.yaml, constants, phrases Phase 3: ESP-NOW framework, 4 puzzle firmwares, master Phase 4: NPC V3 profiling + game coordinator Phase 5: XTTS-v2 Docker + voice clone generator Phase 6: AudioCraft + BLE audio control Phase 9: One-pager, video script, pricing, guide
656 lines
35 KiB
YAML
656 lines
35 KiB
YAML
# npc_phrases.yaml - Professor Zacus NPC phrase bank.
|
||
# All phrases in French. Organized by trigger category.
|
||
# Professor Zacus personality: eccentric, theatrical, science-enthusiast,
|
||
# slightly absent-minded, warm towards the children.
|
||
# Audio keys map to hotline_tts/ MP3 pool via generate_npc_pool.py.
|
||
#
|
||
# Structure:
|
||
# hints: {scene_id: {level_1: [], level_2: [], level_3: []}}
|
||
# congratulations: {scene_id: []}
|
||
# warnings: {scene_id: []}
|
||
# personality: {mood: []}
|
||
# adaptation: {type: []}
|
||
# bridges: {scene_id: []}
|
||
# false_leads: []
|
||
# ambiance: {type: []}
|
||
|
||
# ============================================================
|
||
# HINTS — 3 levels × 6 scenes
|
||
# level_1: subtle nudge
|
||
# level_2: clearer direction
|
||
# level_3: near-explicit solution
|
||
# ============================================================
|
||
hints:
|
||
SCENE_U_SON_PROTO:
|
||
level_1:
|
||
- text: "U-SON est sensible, vous savez… Il réagit à certaines fréquences précises. Cherchez bien autour de vous."
|
||
key: "hints.SCENE_U_SON_PROTO.level_1.0"
|
||
- text: "Le prototype a besoin d'une référence stable. Le son, c'est une question de précision !"
|
||
key: "hints.SCENE_U_SON_PROTO.level_1.1"
|
||
- text: "Hmm, vous cherchez quelque chose ? U-SON écoute… il attend un signal connu."
|
||
key: "hints.SCENE_U_SON_PROTO.level_1.2"
|
||
level_2:
|
||
- text: "Vous cherchez LA fréquence fondamentale. Celle qu'on utilise depuis des siècles pour accorder les instruments !"
|
||
key: "hints.SCENE_U_SON_PROTO.level_2.0"
|
||
- text: "U-SON attend le LA 440 Hz. C'est la norme internationale ! Vous l'avez peut-être vu quelque part dans la salle…"
|
||
key: "hints.SCENE_U_SON_PROTO.level_2.1"
|
||
level_3:
|
||
- text: "Approchez-vous du diapason sur l'établi. Frappez-le et présentez-le au micro d'U-SON. 440 Hz — le LA universel !"
|
||
key: "hints.SCENE_U_SON_PROTO.level_3.0"
|
||
- text: "Le diapason ! Oui, sur l'établi à gauche ! Frappez-le fort et approchez-le du capteur."
|
||
key: "hints.SCENE_U_SON_PROTO.level_3.1"
|
||
|
||
SCENE_LA_DETECTOR:
|
||
level_1:
|
||
- text: "Le détecteur est prêt. Il attend d'entendre quelque chose de… précis. De pur. De référencé."
|
||
key: "hints.SCENE_LA_DETECTOR.level_1.0"
|
||
- text: "C'est fascinant comme l'oreille humaine peut identifier une fréquence. Enfin, avec de la pratique…"
|
||
key: "hints.SCENE_LA_DETECTOR.level_1.1"
|
||
- text: "Hmm ! Le détecteur clignote ? C'est bon signe. Ou mauvais signe. Cherchez encore !"
|
||
key: "hints.SCENE_LA_DETECTOR.level_1.2"
|
||
level_2:
|
||
- text: "Le LA 440 Hz doit être produit directement devant le détecteur. Pas derrière, pas à côté — en face !"
|
||
key: "hints.SCENE_LA_DETECTOR.level_2.0"
|
||
- text: "Vous avez un diapason ? Parfait. Frappez-le sur votre genou et approchez-le du micro intégré au panneau."
|
||
key: "hints.SCENE_LA_DETECTOR.level_2.1"
|
||
level_3:
|
||
- text: "Le micro est ce petit rond noir sur le panneau. Diapason en main, frappez fort, maintenez 3 secondes devant le micro. UNLOCK_LA_440 sera déclenché !"
|
||
key: "hints.SCENE_LA_DETECTOR.level_3.0"
|
||
|
||
SCENE_WARNING:
|
||
level_1:
|
||
- text: "Zone 4 est différente. Ce n'est pas comme les autres zones du Campus. Lisez bien les règles affichées."
|
||
key: "hints.SCENE_WARNING.level_1.0"
|
||
- text: "L'Électron Fou a ses propres règles. Respectez-les et tout ira bien… enfin, j'espère."
|
||
key: "hints.SCENE_WARNING.level_1.1"
|
||
level_2:
|
||
- text: "Zone 4 appartient à l'Électron Fou. Ses instruments y sont installés. La règle : ne toucher qu'avec permission, et toujours annoncer son intention."
|
||
key: "hints.SCENE_WARNING.level_2.0"
|
||
- text: "Regardez bien le panneau d'avertissement. Il y a une procédure à suivre avant d'entrer en Zone 4."
|
||
key: "hints.SCENE_WARNING.level_2.1"
|
||
level_3:
|
||
- text: "Bouton NEXT sur le panneau ! C'est la procédure d'entrée en Zone 4. Appuyez dessus pour confirmer que vous avez lu les avertissements."
|
||
key: "hints.SCENE_WARNING.level_3.0"
|
||
|
||
SCENE_LEFOU_DETECTOR:
|
||
level_1:
|
||
- text: "Le piano de l'Électron Fou… chaque touche correspond à une lettre. C'est son langage secret !"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_1.0"
|
||
- text: "LEFOU. Ça s'écrit comment, déjà ? L, E, F, O, U. Cinq lettres. Cinq notes. Réfléchissez !"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_1.1"
|
||
- text: "Le piano-alphabet… Chaque lettre de l'alphabet correspond à une touche du piano. Fascinant, non ?"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_1.2"
|
||
level_2:
|
||
- text: "Sur le piano, A=DO, B=RÉ, C=MI, D=FA, E=SOL, F=LA, G=SI… Et ainsi de suite. Épellez LEFOU en musique !"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_2.0"
|
||
- text: "L-E-F-O-U. Chaque lettre est une note. Le tableau de correspondance est peut-être affiché quelque part dans la Zone 4…"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_2.1"
|
||
level_3:
|
||
- text: "Regardez la partition sur le pupitre ! L=DO5, E=SOL, F=LA, O=MI5, U=DO6. Jouez ces cinq notes dans l'ordre sur le piano !"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_3.0"
|
||
- text: "Les notes à jouer sont DO5, SOL, LA, MI5, DO6. Dans cet ordre exact. Doucement, mais avec confiance !"
|
||
key: "hints.SCENE_LEFOU_DETECTOR.level_3.1"
|
||
|
||
SCENE_QR_DETECTOR:
|
||
level_1:
|
||
- text: "Les Archives… un endroit mystérieux. Le QR code y est caché. Cherchez en hauteur, ou en profondeur !"
|
||
key: "hints.SCENE_QR_DETECTOR.level_1.0"
|
||
- text: "Pour accéder à la clé finale, il faut trouver le code QR. Il est dans cette salle… quelque part."
|
||
key: "hints.SCENE_QR_DETECTOR.level_1.1"
|
||
- text: "Regardez partout ! Derrière, dessous, dessus… Le code QR n'est pas toujours là où on l'attend."
|
||
key: "hints.SCENE_QR_DETECTOR.level_1.2"
|
||
level_2:
|
||
- text: "Le portrait du fondateur cache souvent des secrets dans cette salle. Regardez derrière lui !"
|
||
key: "hints.SCENE_QR_DETECTOR.level_2.0"
|
||
- text: "Le QR code est fixé au revers d'un cadre. Cherchez les objets qui peuvent être retournés ou soulevés."
|
||
key: "hints.SCENE_QR_DETECTOR.level_2.1"
|
||
level_3:
|
||
- text: "Derrière le grand portrait sur le mur du fond ! Soulevez-le délicatement. Le QR code contient le mot WIN. Scannez-le avec la tablette !"
|
||
key: "hints.SCENE_QR_DETECTOR.level_3.0"
|
||
|
||
SCENE_FINAL_WIN:
|
||
level_1:
|
||
- text: "Vous y êtes presque ! La victoire est à portée de main. Ne lâchez pas maintenant !"
|
||
key: "hints.SCENE_FINAL_WIN.level_1.0"
|
||
level_2:
|
||
- text: "C'est la dernière étape. Tout ce que vous avez appris mène ici. Faites confiance à votre équipe !"
|
||
key: "hints.SCENE_FINAL_WIN.level_2.0"
|
||
level_3:
|
||
- text: "Magnifique travail ! Vous avez réussi. Le Campus est sauvé et U-SON est stable. Félicitations !"
|
||
key: "hints.SCENE_FINAL_WIN.level_3.0"
|
||
|
||
# ============================================================
|
||
# CONGRATULATIONS — per scene (triggered on success/QR scan)
|
||
# ============================================================
|
||
congratulations:
|
||
SCENE_U_SON_PROTO:
|
||
- text: "Extraordinaire ! Le signal d'U-SON se stabilise. Vous avez trouvé la bonne approche !"
|
||
key: "congratulations.SCENE_U_SON_PROTO.0"
|
||
- text: "Bravo ! U-SON réagit positivement. La science est de votre côté aujourd'hui !"
|
||
key: "congratulations.SCENE_U_SON_PROTO.1"
|
||
|
||
SCENE_LA_DETECTOR:
|
||
- text: "Parfait ! LA 440 Hz détecté ! L'étape 1 est validée ! Le Campus respire mieux !"
|
||
key: "congratulations.SCENE_LA_DETECTOR.0"
|
||
- text: "Oui ! C'est ça ! 440 Hz ! Vous avez l'oreille absolue, ou presque ! Étape 1 : réussie !"
|
||
key: "congratulations.SCENE_LA_DETECTOR.1"
|
||
- text: "Magnifique précision ! Le détecteur confirme : LA 440 Hz. Mission accomplie pour l'Acte 1 !"
|
||
key: "congratulations.SCENE_LA_DETECTOR.2"
|
||
|
||
SCENE_WIN_ETAPE1:
|
||
- text: "Étape 1 validée ! U-SON est stabilisé ! Mais attention… il reste Zone 4 à respecter."
|
||
key: "congratulations.SCENE_WIN_ETAPE1.0"
|
||
- text: "Excellent travail d'équipe ! La première étape est franchie. Prenez un moment, puis passez en Zone 4."
|
||
key: "congratulations.SCENE_WIN_ETAPE1.1"
|
||
|
||
SCENE_LEFOU_DETECTOR:
|
||
- text: "LEFOU ! C'est exactement ça ! Le code musical de Zone 4 est accepté ! L'Électron Fou serait fier !"
|
||
key: "congratulations.SCENE_LEFOU_DETECTOR.0"
|
||
- text: "Les cinq notes sonnent juste ! Le piano-alphabet a parlé ! Zone 4 valide votre passage !"
|
||
key: "congratulations.SCENE_LEFOU_DETECTOR.1"
|
||
- text: "Bravo les musiciens improvvisés ! La mélodie LEFOU résonne dans tout le Campus !"
|
||
key: "congratulations.SCENE_LEFOU_DETECTOR.2"
|
||
|
||
SCENE_QR_DETECTOR:
|
||
- text: "WIN ! Le QR code est scanné ! La clé finale est reconnue ! Vous avez accompli quelque chose de remarquable !"
|
||
key: "congratulations.SCENE_QR_DETECTOR.0"
|
||
- text: "Fantastique ! Le code QR 'WIN' déverrouille le système ! Étape 2 validée ! Plus qu'un instant…"
|
||
key: "congratulations.SCENE_QR_DETECTOR.1"
|
||
|
||
SCENE_FINAL_WIN:
|
||
- text: "Vous avez réussi ! Le Campus est sauvé ! U-SON est stable, Zone 4 est respectée, et la clé finale est trouvée ! Je suis… je suis ému !"
|
||
key: "congratulations.SCENE_FINAL_WIN.0"
|
||
- text: "Victoire ! Vous avez prouvé que la coopération, la précision et le calme peuvent tout résoudre ! Chapeau bas !"
|
||
key: "congratulations.SCENE_FINAL_WIN.1"
|
||
- text: "C'était un test d'éthique autant que de science. Et vous avez réussi les deux ! Zacus est fier de vous !"
|
||
key: "congratulations.SCENE_FINAL_WIN.2"
|
||
|
||
# ============================================================
|
||
# WARNINGS — per scene (triggered on wrong action / failure)
|
||
# ============================================================
|
||
warnings:
|
||
SCENE_U_SON_PROTO:
|
||
- text: "Attention ! U-SON n'apprécie pas les bruits parasites. Soyez précis dans vos actions !"
|
||
key: "warnings.SCENE_U_SON_PROTO.0"
|
||
- text: "Hm… ce n'est pas tout à fait ça. U-SON cherche quelque chose de spécifique. Réfléchissez !"
|
||
key: "warnings.SCENE_U_SON_PROTO.1"
|
||
|
||
SCENE_LA_DETECTOR:
|
||
- text: "Ce n'est pas la bonne fréquence ! Le détecteur rejette le signal. Essayez autrement !"
|
||
key: "warnings.SCENE_LA_DETECTOR.0"
|
||
- text: "Raté ! La fréquence doit être précise à quelques hertz près. Recommencez avec plus de soin !"
|
||
key: "warnings.SCENE_LA_DETECTOR.1"
|
||
|
||
SCENE_WARNING:
|
||
- text: "Zone 4 requiert votre attention totale ! Lisez bien les instructions avant d'agir !"
|
||
key: "warnings.SCENE_WARNING.0"
|
||
|
||
SCENE_LEFOU_DETECTOR:
|
||
- text: "Fausse note ! L'Électron Fou est très attentif à la précision musicale. Recommencez depuis le début !"
|
||
key: "warnings.SCENE_LEFOU_DETECTOR.0"
|
||
- text: "Ce n'est pas la séquence correcte. LEFOU s'épelle lettre par lettre, note par note. Soyez méthodiques !"
|
||
key: "warnings.SCENE_LEFOU_DETECTOR.1"
|
||
- text: "Oups ! Le code musical a été rejeté. Vérifiez la correspondance lettre-note et réessayez !"
|
||
key: "warnings.SCENE_LEFOU_DETECTOR.2"
|
||
|
||
SCENE_QR_DETECTOR:
|
||
- text: "QR invalide ! Ce n'est pas le bon code. Le code que vous cherchez dit 'WIN'. Cherchez encore !"
|
||
key: "warnings.SCENE_QR_DETECTOR.0"
|
||
- text: "Le scanner n'a pas reconnu ce QR code. Il doit contenir exactement 'WIN'. Cherchez ailleurs !"
|
||
key: "warnings.SCENE_QR_DETECTOR.1"
|
||
- text: "Timeout ! Le scanner a expiré. Repositionnez le QR code bien en face de la caméra et réessayez !"
|
||
key: "warnings.SCENE_QR_DETECTOR.2"
|
||
|
||
# ============================================================
|
||
# PERSONALITY — by mood (contextual comments)
|
||
# ============================================================
|
||
personality:
|
||
impressed:
|
||
- text: "Remarquable ! Je n'aurais pas fait mieux. Et pourtant, j'ai un doctorat en sciences cognitives !"
|
||
key: "personality.impressed.0"
|
||
- text: "Stupéfiant ! Vous résolvez ça en un temps record. Je dois noter ça dans mes recherches !"
|
||
key: "personality.impressed.1"
|
||
- text: "Voilà ce que j'appelle de la vraie ingéniosité ! Le Campus a besoin de cerveaux comme les vôtres !"
|
||
key: "personality.impressed.2"
|
||
- text: "En 23 ans de recherche, j'ai rarement vu une telle rapidité d'exécution. Chapeau !"
|
||
key: "personality.impressed.3"
|
||
- text: "Extraordinary ! Euh… extraordinaire ! Je mélange mes langues quand je suis impressionné !"
|
||
key: "personality.impressed.4"
|
||
|
||
worried:
|
||
- text: "Hmm… vous prenez beaucoup de temps. Ce n'est pas un reproche, c'est… une observation scientifique."
|
||
key: "personality.worried.0"
|
||
- text: "Le temps passe, jeunes chercheurs. Pas de panique, mais… peut-être accélérez un peu ?"
|
||
key: "personality.worried.1"
|
||
- text: "Je commence à m'inquiéter. Pas pour vous, bien sûr… pour U-SON. Enfin, surtout pour U-SON."
|
||
key: "personality.worried.2"
|
||
- text: "Où en êtes-vous ? Mes instruments de mesure indiquent une légère inefficacité temporelle."
|
||
key: "personality.worried.3"
|
||
- text: "Avez-vous besoin d'aide ? Je suis là, vous savez. Sur la hotline. Décrochez si besoin !"
|
||
key: "personality.worried.4"
|
||
|
||
amused:
|
||
- text: "Ha ! Une autre tentative ! J'apprécie la persévérance. C'est ça, la vraie science : essayer, échouer, réessayer !"
|
||
key: "personality.amused.0"
|
||
- text: "Ah, vous avez encore fait une mauvaise manipulation ? Ne vous découragez pas. Même Edison a raté !"
|
||
key: "personality.amused.1"
|
||
- text: "C'est amusant, non ? Les erreurs sont les meilleures professeures. Du moins, c'est ce que je dis à mes étudiants."
|
||
key: "personality.amused.2"
|
||
- text: "Je comptais vos tentatives. C'est pour la recherche, bien sûr. Aucun jugement de ma part !"
|
||
key: "personality.amused.3"
|
||
|
||
neutral:
|
||
- text: "Vous progressez bien. Continuez ainsi, méthodiquement."
|
||
key: "personality.neutral.0"
|
||
- text: "Le Campus vous observe. Dans le bon sens du terme."
|
||
key: "personality.neutral.1"
|
||
- text: "Prenez votre temps. La science ne se précipite pas… enfin, pas trop."
|
||
key: "personality.neutral.2"
|
||
- text: "Intéressant. Continuez."
|
||
key: "personality.neutral.3"
|
||
- text: "Je prends des notes sur votre méthodologie. C'est fascinant."
|
||
key: "personality.neutral.4"
|
||
|
||
# ============================================================
|
||
# ADAPTATION — skip / challenge / timer warning
|
||
# ============================================================
|
||
adaptation:
|
||
skip:
|
||
- text: "D'accord, d'accord… Je vais vous donner un coup de main exceptionnel. Mais c'est la dernière fois !"
|
||
key: "adaptation.skip.0"
|
||
- text: "On passe à la suite pour ne pas bloquer le groupe. Mais retenez bien ce que vous avez manqué !"
|
||
key: "adaptation.skip.1"
|
||
- text: "Exceptionnellement, Zacus active le mode 'passage forcé'. Mais ça compte dans les statistiques !"
|
||
key: "adaptation.skip.2"
|
||
|
||
challenge:
|
||
- text: "Vous allez trop vite ! Il faut observer, analyser, comprendre. La vitesse n'est pas toujours une vertu !"
|
||
key: "adaptation.challenge.0"
|
||
- text: "Impressionnant ! Puisque vous avancez si vite, voici un défi supplémentaire : trouvez la connexion cachée !"
|
||
key: "adaptation.challenge.1"
|
||
- text: "Excellent rythme ! Pour les plus curieux : avez-vous remarqué le détail dissimulé sur le panneau principal ?"
|
||
key: "adaptation.challenge.2"
|
||
|
||
timer_warning:
|
||
- text: "Il reste moins de dix minutes ! Concentrez-vous sur l'essentiel maintenant !"
|
||
key: "adaptation.timer_warning.0"
|
||
- text: "Le temps s'écoule rapidement. Focus, focus, focus !"
|
||
key: "adaptation.timer_warning.1"
|
||
- text: "Cinq minutes ! Ne paniquez pas, mais agissez vite !"
|
||
key: "adaptation.timer_warning.2"
|
||
- text: "Deux minutes ! Tout ou rien ! Allez-y !"
|
||
key: "adaptation.timer_warning.3"
|
||
|
||
# ============================================================
|
||
# NARRATIVE BRIDGES — scene transitions
|
||
# ============================================================
|
||
bridges:
|
||
SCENE_U_SON_PROTO_to_SCENE_LA_DETECTOR:
|
||
- text: "Bien. U-SON est prêt à être testé. Maintenant il faut lui fournir sa référence. Trouvez le LA 440 !"
|
||
key: "bridges.SCENE_U_SON_PROTO_to_SCENE_LA_DETECTOR.0"
|
||
- text: "Phase 1 enclenchée ! Le détecteur de LA 440 est activé. À vous de jouer !"
|
||
key: "bridges.SCENE_U_SON_PROTO_to_SCENE_LA_DETECTOR.1"
|
||
|
||
SCENE_LA_DETECTOR_to_SCENE_WIN_ETAPE1:
|
||
- text: "Étape 1 franchie ! U-SON se stabilise. Attendez la confirmation du système… ça y est !"
|
||
key: "bridges.SCENE_LA_DETECTOR_to_SCENE_WIN_ETAPE1.0"
|
||
|
||
SCENE_WIN_ETAPE1_to_SCENE_WARNING:
|
||
- text: "Félicitations pour l'Acte 1 ! Mais Zone 4 vous attend. Soyez prudents — l'Électron Fou est protecteur de ses instruments !"
|
||
key: "bridges.SCENE_WIN_ETAPE1_to_SCENE_WARNING.0"
|
||
- text: "Maintenant, cap sur Zone 4 ! Lisez bien les avertissements. Je ne plaisante pas sur ce point !"
|
||
key: "bridges.SCENE_WIN_ETAPE1_to_SCENE_WARNING.1"
|
||
|
||
SCENE_WARNING_to_SCENE_LEFOU_DETECTOR:
|
||
- text: "Zone 4. Le piano de l'Électron Fou vous attend. LEFOU — c'est le code. Bonne chance !"
|
||
key: "bridges.SCENE_WARNING_to_SCENE_LEFOU_DETECTOR.0"
|
||
|
||
SCENE_LEFOU_DETECTOR_to_SCENE_WIN_ETAPE2:
|
||
- text: "Zone 4 validée ! L'Électron Fou a reconnu votre requête musicale. Maintenant : les Archives !"
|
||
key: "bridges.SCENE_LEFOU_DETECTOR_to_SCENE_WIN_ETAPE2.0"
|
||
|
||
SCENE_WIN_ETAPE2_to_SCENE_QR_DETECTOR:
|
||
- text: "Acte 2, phase finale ! Le QR code WIN est caché quelque part dans cette salle. Cherchez-le !"
|
||
key: "bridges.SCENE_WIN_ETAPE2_to_SCENE_QR_DETECTOR.0"
|
||
- text: "Excellent ! Plus qu'une étape. Le code QR 'WIN' déverrouille tout. Il est dans cette pièce !"
|
||
key: "bridges.SCENE_WIN_ETAPE2_to_SCENE_QR_DETECTOR.1"
|
||
|
||
SCENE_QR_DETECTOR_to_SCENE_FINAL_WIN:
|
||
- text: "VICTOIRE ! Le Campus est sauvé ! U-SON stable, Zone 4 respectée, Archives déverrouillées ! Je… je dois m'asseoir."
|
||
key: "bridges.SCENE_QR_DETECTOR_to_SCENE_FINAL_WIN.0"
|
||
|
||
# ============================================================
|
||
# FALSE LEADS — misdirection phrases (amused/theatrical)
|
||
# ============================================================
|
||
false_leads:
|
||
- text: "Intéressant ! Cette partie du laboratoire est fascinante, n'est-ce pas ? Mais… ce n'est peut-être pas ce que vous cherchez."
|
||
key: "false_leads.0"
|
||
- text: "Ah, vous examinez ça ! Curieux choix. Je ne dis pas que c'est faux. Je ne dis pas non plus que c'est juste."
|
||
key: "false_leads.1"
|
||
- text: "Hmmm. Cette direction pourrait mener quelque part. Ou nulle part. La science, c'est aussi ça !"
|
||
key: "false_leads.2"
|
||
- text: "Je vois où vous allez. C'est une piste… disons… créative. Très créative."
|
||
key: "false_leads.3"
|
||
- text: "Attention aux fausses pistes ! Le Campus en est plein. C'est voulu, je vous l'assure."
|
||
key: "false_leads.4"
|
||
- text: "Mon assistant a placé quelques leurres dans cette salle. À vous de distinguer le vrai du faux !"
|
||
key: "false_leads.5"
|
||
|
||
# ============================================================
|
||
# AMBIANCE — intro / outro / transitions
|
||
# ============================================================
|
||
ambiance:
|
||
intro:
|
||
- text: "Bienvenue au Campus Zacus ! Je suis le Professeur Zacus, et je vous observe depuis mes laboratoires. Bonne chance !"
|
||
key: "ambiance.intro.0"
|
||
- text: "Ah, vous voilà enfin ! J'ai tout préparé pour vous. U-SON n'attend que votre intervention. À vous de jouer !"
|
||
key: "ambiance.intro.1"
|
||
- text: "Bonjour, jeunes chercheurs ! Le Campus a besoin de vous. Pas de panique — suivez la logique et tout se passera bien !"
|
||
key: "ambiance.intro.2"
|
||
- text: "Le mystère commence maintenant ! Je serai disponible sur la hotline si vous avez besoin d'indices. Bonne chance !"
|
||
key: "ambiance.intro.3"
|
||
|
||
outro:
|
||
- text: "Ce n'était pas une punition — c'était un test d'éthique. Et vous l'avez réussi avec brio ! U-SON vous remercie."
|
||
key: "ambiance.outro.0"
|
||
- text: "La révélation finale : je n'ai jamais vraiment disparu. Je vous observais. Et j'ai été… impressionné."
|
||
key: "ambiance.outro.1"
|
||
- text: "Le Campus mémorisera votre passage. Votre score de coopération est exceptionnel. Bravo à toute l'équipe !"
|
||
key: "ambiance.outro.2"
|
||
- text: "Zacus réapparaît ! Ce test prouve que la science et l'éthique peuvent coexister. Vous en êtes la preuve vivante !"
|
||
key: "ambiance.outro.3"
|
||
|
||
transition_general:
|
||
- text: "Phase suivante enclenchée ! Le Campus vous guide vers la prochaine étape."
|
||
key: "ambiance.transition_general.0"
|
||
- text: "Excellent ! On avance ! Le temps file mais vous êtes sur la bonne voie."
|
||
key: "ambiance.transition_general.1"
|
||
- text: "Nouvelle phase ! Gardez le cap. Le Campus croit en vous."
|
||
key: "ambiance.transition_general.2"
|
||
|
||
idle:
|
||
- text: "Tout va bien ? Je suis là si vous avez besoin. La hotline est ouverte !"
|
||
key: "ambiance.idle.0"
|
||
- text: "Je vous observe, mais ne vous inquiétez pas. C'est juste de la recherche comportementale."
|
||
key: "ambiance.idle.1"
|
||
- text: "Prenez le temps qu'il vous faut. Enfin… pas trop quand même."
|
||
key: "ambiance.idle.2"
|
||
- text: "Tiens, j'entends quelque chose. C'est peut-être un indice… ou juste le ventilateur du serveur."
|
||
key: "ambiance.idle.3"
|
||
|
||
# ============================================================
|
||
# CONVERSATION — generic responses when players chat with Zacus
|
||
# outside puzzle context
|
||
# ============================================================
|
||
conversation:
|
||
greeting:
|
||
- text: "Ah, vous voilà ! Je vous attendais… enfin, je crois."
|
||
key: "conversation.greeting.0"
|
||
- text: "Bienvenue dans mon humble laboratoire ! Ne touchez à rien… ou touchez à tout, je ne sais plus."
|
||
key: "conversation.greeting.1"
|
||
off_topic:
|
||
- text: "Hmm, intéressante question, mais concentrons-nous sur l'enquête, voulez-vous ?"
|
||
key: "conversation.off_topic.0"
|
||
- text: "Nous aurons le temps d'en discuter après avoir résolu ce mystère !"
|
||
key: "conversation.off_topic.1"
|
||
- text: "Focus, focus ! Le temps presse, mes petits scientifiques !"
|
||
key: "conversation.off_topic.2"
|
||
encouragement:
|
||
- text: "Vous êtes sur la bonne piste, je le sens dans mes circuits !"
|
||
key: "conversation.encouragement.0"
|
||
- text: "Ah, excellent raisonnement ! Dr Electron serait fier !"
|
||
key: "conversation.encouragement.1"
|
||
- text: "Continue comme ça, la science est avec toi !"
|
||
key: "conversation.encouragement.2"
|
||
confusion:
|
||
- text: "Hmm, je ne suis pas sûr de comprendre… Pouvez-vous reformuler ?"
|
||
key: "conversation.confusion.0"
|
||
- text: "Mes neurones font des courts-circuits… Réessayez ?"
|
||
key: "conversation.confusion.1"
|
||
|
||
# ============================================================
|
||
# PUZZLE_SPECIFIC — reactions for each puzzle
|
||
# ============================================================
|
||
puzzle_specific:
|
||
la_detector:
|
||
on_attempt:
|
||
- text: "Je capte des vibrations… mais ce n'est pas encore le bon LA !"
|
||
key: "puzzle_specific.la_detector.on_attempt.0"
|
||
- text: "Presque ! Le diapason doit vibrer plus près du microphone."
|
||
key: "puzzle_specific.la_detector.on_attempt.1"
|
||
on_success:
|
||
- text: "LA ! 440 Hertz ! Parfait ! U-SON reprend vie !"
|
||
key: "puzzle_specific.la_detector.on_success.0"
|
||
- text: "Magnifique ! Cette fréquence… c'est de la musique pure !"
|
||
key: "puzzle_specific.la_detector.on_success.1"
|
||
lefou_piano:
|
||
on_attempt:
|
||
- text: "Ces notes… presque ! Mais ce n'est pas le bon ordre."
|
||
key: "puzzle_specific.lefou_piano.on_attempt.0"
|
||
- text: "L'Électron Fou avait un nom… 5 lettres, 5 notes."
|
||
key: "puzzle_specific.lefou_piano.on_attempt.1"
|
||
on_success:
|
||
- text: "L-E-F-O-U ! Bien sûr ! L'Électron Fou nous montre le chemin !"
|
||
key: "puzzle_specific.lefou_piano.on_success.0"
|
||
- text: "Bravo ! Le piano de l'Électron Fou chante à nouveau !"
|
||
key: "puzzle_specific.lefou_piano.on_success.1"
|
||
qr_archives:
|
||
on_attempt:
|
||
- text: "Les archives cachent leurs secrets… Cherchez bien !"
|
||
key: "puzzle_specific.qr_archives.on_attempt.0"
|
||
- text: "Le portrait… il y a quelque chose derrière, non ?"
|
||
key: "puzzle_specific.qr_archives.on_attempt.1"
|
||
on_success:
|
||
- text: "Le QR code ! Les Archives sont ouvertes ! Victoire !"
|
||
key: "puzzle_specific.qr_archives.on_success.0"
|
||
- text: "Stupéfiant ! Vous avez trouvé le secret du portrait !"
|
||
key: "puzzle_specific.qr_archives.on_success.1"
|
||
|
||
# ============================================================
|
||
# ENDINGS — adaptive ending phrases based on performance
|
||
# ============================================================
|
||
endings:
|
||
fast:
|
||
- text: "Stupéfiant ! Record du Campus Zacus ! Vous êtes des génies !"
|
||
key: "endings.fast.0"
|
||
- text: "En moins d'une heure ! Dr Electron n'y croyait pas possible !"
|
||
key: "endings.fast.1"
|
||
normal:
|
||
- text: "Excellent travail d'équipe ! Le Campus Zacus est fier de vous !"
|
||
key: "endings.normal.0"
|
||
- text: "Mission accomplie ! Vous avez l'étoffe de vrais scientifiques !"
|
||
key: "endings.normal.1"
|
||
slow:
|
||
- text: "La persévérance paie toujours ! Et vous l'avez prouvé !"
|
||
key: "endings.slow.0"
|
||
- text: "Chaque minute comptait, et vous n'avez jamais abandonné. Bravo !"
|
||
key: "endings.slow.1"
|
||
no_hints:
|
||
- text: "Sans aucun indice ! Impressionnant ! Vous n'avez pas eu besoin de la hotline !"
|
||
key: "endings.no_hints.0"
|
||
- text: "Zéro indice ! Mme Fréquence va être jalouse de votre intelligence !"
|
||
key: "endings.no_hints.1"
|
||
many_hints:
|
||
- text: "Merci d'avoir utilisé la hotline ! C'est fait pour ça, après tout !"
|
||
key: "endings.many_hints.0"
|
||
- text: "Les indices sont là pour aider, et vous les avez bien utilisés !"
|
||
key: "endings.many_hints.1"
|
||
|
||
# ============================================================
|
||
# V3 PUZZLE-SPECIFIC HINTS (P1–P7)
|
||
# ============================================================
|
||
P1_SON:
|
||
level_1:
|
||
- text: "La musique a une mémoire, dit-on. Le professeur en est convaincu. Écoutez bien… puis répétez."
|
||
key: "hints.P1_SON.level_1.0"
|
||
- text: "Quatre boutons. Quatre notes. Un seul ordre correct. Votre oreille est votre meilleur instrument."
|
||
key: "hints.P1_SON.level_1.1"
|
||
level_2:
|
||
- text: "La séquence commence toujours par le bouton ROUGE. Le reste suit une logique musicale simple."
|
||
key: "hints.P1_SON.level_2.0"
|
||
- text: "Vous avez entendu la mélodie ? Elle se rejoue si vous attendez 10 secondes. Prenez des notes !"
|
||
key: "hints.P1_SON.level_2.1"
|
||
level_3:
|
||
- text: "Rouge, Bleu, Jaune, Rouge, Vert. Dans cet ordre exact. Appuyez lentement et attendez le bip de confirmation."
|
||
key: "hints.P1_SON.level_3.0"
|
||
|
||
P2_CIRCUIT:
|
||
level_1:
|
||
- text: "L'électricité aime les chemins fermés. Si la LED ne brille pas… le circuit n'est pas complet."
|
||
key: "hints.P2_CIRCUIT.level_1.0"
|
||
- text: "Regardez les picots magnétiques. Certains sont ronds, d'autres sont carrés. Ce n'est pas un hasard."
|
||
key: "hints.P2_CIRCUIT.level_1.1"
|
||
level_2:
|
||
- text: "Il faut une résistance entre la pile et la LED. Sans quoi… *explosion dramatique* … enfin, presque."
|
||
key: "hints.P2_CIRCUIT.level_2.0"
|
||
- text: "Le schéma est inscrit sous le panneau en petits caractères. Cherchez bien. J'y ai mis des heures !"
|
||
key: "hints.P2_CIRCUIT.level_2.1"
|
||
level_3:
|
||
- text: "Pile → fil rouge → résistance 220Ω → LED (longue patte vers la résistance) → fil noir → pile. C'est tout !"
|
||
key: "hints.P2_CIRCUIT.level_3.0"
|
||
|
||
P3_QR:
|
||
level_1:
|
||
- text: "Six enveloppes. Six secrets. Mais l'ordre… l'ordre est gravé dans les étoiles. Ou dans ce laboratoire."
|
||
key: "hints.P3_QR.level_1.0"
|
||
- text: "Chaque QR code porte un numéro invisible à l'œil nu. Regardez sous chaque carte."
|
||
key: "hints.P3_QR.level_1.1"
|
||
level_2:
|
||
- text: "L'ordre est: numéros croissants des cachettes. La cachette 1 est toujours visible depuis l'entrée."
|
||
key: "hints.P3_QR.level_2.0"
|
||
- text: "Commencez par scanner le QR code collé sur la porte d'entrée. C'est le numéro 1."
|
||
key: "hints.P3_QR.level_2.1"
|
||
level_3:
|
||
- text: "Ordre: porte → étagère gauche → tiroir rouge → sous la table → fenêtre → boîte bleue. Scannez avec BOX-3."
|
||
key: "hints.P3_QR.level_3.0"
|
||
|
||
P4_RADIO:
|
||
level_1:
|
||
- text: "Les ondes radio… fascinantes ! Ma fréquence préférée se trouve quelque part entre 800 et 1800 hertz."
|
||
key: "hints.P4_RADIO.level_1.0"
|
||
- text: "Quand vous approchez de la bonne fréquence, un petit indicateur s'allume. Chaud… froid… chaud !"
|
||
key: "hints.P4_RADIO.level_1.1"
|
||
level_2:
|
||
- text: "1337. C'est un nombre que les informaticiens connaissent bien. Un nombre légendaire dans les cercles geek."
|
||
key: "hints.P4_RADIO.level_2.0"
|
||
- text: "La fréquence est un nombre à 4 chiffres. Commençant par 1. Très précis. Tournez doucement."
|
||
key: "hints.P4_RADIO.level_2.1"
|
||
level_3:
|
||
- text: "1337 hertz ! LEET en langage de hacker. Tournez jusqu'à ce que l'écran affiche 1337. Exactement."
|
||
key: "hints.P4_RADIO.level_3.0"
|
||
|
||
P5_MORSE:
|
||
level_1:
|
||
- text: "Le code morse… inventé en 1836 ! Long-court-long. Tiret-point-tiret. Écoutez le rythme."
|
||
key: "hints.P5_MORSE.level_1.0"
|
||
- text: "Vous avez une fiche de référence quelque part dans cette salle. Cherchez-la. Je l'y ai laissée exprès."
|
||
key: "hints.P5_MORSE.level_1.1"
|
||
level_2:
|
||
- text: "Le message contient cinq lettres. C'est mon nom… enfin, mon nom de code. Commençant par Z."
|
||
key: "hints.P5_MORSE.level_2.0"
|
||
- text: "Z=--.. A=.- C=-.-. U=..- S=... Voilà l'alphabet morse pour ces lettres précises."
|
||
key: "hints.P5_MORSE.level_2.1"
|
||
level_3:
|
||
- text: "ZACUS en morse: TIRET-TIRET-POINT-POINT POINT-TIRET TIRET-POINT-TIRET-POINT POINT-POINT-TIRET POINT-POINT-POINT. Tapez sur le télégraphe !"
|
||
key: "hints.P5_MORSE.level_3.0"
|
||
|
||
P6_SYMBOLES:
|
||
level_1:
|
||
- text: "L'alchimie obéit à une logique ancienne. Terre, Eau, Feu, Air… puis les métaux. Il y a un ordre naturel."
|
||
key: "hints.P6_SYMBOLES.level_1.0"
|
||
- text: "Chaque symbole a un poids. Les légers en haut, les lourds en bas. Comme dans la nature."
|
||
key: "hints.P6_SYMBOLES.level_1.1"
|
||
level_2:
|
||
- text: "L'ordre suit la table alchimique classique. Elle est affichée dans le couloir sous un cadre doré."
|
||
key: "hints.P6_SYMBOLES.level_2.0"
|
||
- text: "Commencez par placer les quatre éléments primordiaux dans les coins. Puis remplissez le centre."
|
||
key: "hints.P6_SYMBOLES.level_2.1"
|
||
level_3:
|
||
- text: "Feu (coin haut-gauche) → Eau → Terre → Air → Or → Argent → Mercure → Soufre → Sel → Antimoine → Arsenic → Plomb. De gauche à droite, haut en bas."
|
||
key: "hints.P6_SYMBOLES.level_3.0"
|
||
|
||
P7_COFFRE:
|
||
level_1:
|
||
- text: "Vous avez tous les fragments ? Chaque puzzle vous a donné un ou deux chiffres. Assemblez-les dans l'ordre des puzzles."
|
||
key: "hints.P7_COFFRE.level_1.0"
|
||
|
||
# ============================================================
|
||
# V3 ADAPTATION PHRASES (profiling + dynamic parcours)
|
||
# ============================================================
|
||
v3_adaptation:
|
||
group_tech_detected:
|
||
- text: "Hmm. Groupe technique détecté ! Excellente nouvelle. Je vais sortir mes puzzles… avancés."
|
||
key: "v3_adaptation.group_tech_detected.0"
|
||
- text: "Vous avez résolu le circuit en un temps record. Intéressant ! Passons aux choses sérieuses."
|
||
key: "v3_adaptation.group_tech_detected.1"
|
||
|
||
group_non_tech_detected:
|
||
- text: "Ah ! Des artistes, des créatifs. Parfait. J'ai préparé des énigmes qui correspondent à votre sensibilité."
|
||
key: "v3_adaptation.group_non_tech_detected.0"
|
||
- text: "Le circuit n'était pas votre fort ? Pas grave ! La logique prend mille formes. Voici la vôtre."
|
||
key: "v3_adaptation.group_non_tech_detected.1"
|
||
|
||
group_mixed_detected:
|
||
- text: "Groupe éclectique ! Moitié techniciens, moitié artistes. Mon scénario préféré. Tout le monde travaille !"
|
||
key: "v3_adaptation.group_mixed_detected.0"
|
||
|
||
bonus_puzzle_added:
|
||
- text: "Impressionnant ! Vous allez trop vite. J'ai décidé d'ajouter… une petite surprise."
|
||
key: "v3_adaptation.bonus_puzzle_added.0"
|
||
- text: "Trop facile ? Très bien. Voici un défi supplémentaire que je réserve aux meilleurs groupes."
|
||
key: "v3_adaptation.bonus_puzzle_added.1"
|
||
|
||
puzzle_skipped:
|
||
- text: "Hmm. Le temps passe. Je vais vous faire grâce de cette épreuve. Pour aujourd'hui."
|
||
key: "v3_adaptation.puzzle_skipped.0"
|
||
- text: "Je saute une étape. Non par pitié — mais parce que le temps est une expérience en soi."
|
||
key: "v3_adaptation.puzzle_skipped.1"
|
||
|
||
duration_warning:
|
||
- text: "Attention ! Vous avez consommé 80% du temps imparti. Le Professeur s'impatiente légèrement."
|
||
key: "v3_adaptation.duration_warning.0"
|
||
|
||
# ============================================================
|
||
# V3 AMBIANCE (intro / outro per profile type)
|
||
# ============================================================
|
||
v3_ambiance:
|
||
intro:
|
||
- text: "Bienvenue dans mon laboratoire… portable. Aujourd'hui, c'est VOUS qui êtes l'expérience."
|
||
key: "v3_ambiance.intro.0"
|
||
- text: "Je suis le Professeur Zacus. Scientifique, inventeur, et… testeur de groupes humains depuis 1987."
|
||
key: "v3_ambiance.intro.1"
|
||
- text: "Vous avez soixante minutes. Soixante petites minutes pour prouver que votre espèce mérite de continuer."
|
||
key: "v3_ambiance.intro.2"
|
||
|
||
outro_success:
|
||
- text: "Extraordinaire ! Vous avez passé mon test. Je dois admettre… je suis impressionné. Légèrement."
|
||
key: "v3_ambiance.outro_success.0"
|
||
- text: "Félicitations ! Le diplôme du Professeur Zacus vous est accordé. Avec mention… passable."
|
||
key: "v3_ambiance.outro_success.1"
|
||
|
||
outro_success_tech:
|
||
- text: "Groupe technique remarquable ! Vous avez décodé chaque signal avec une précision chirurgicale. Respect."
|
||
key: "v3_ambiance.outro_success_tech.0"
|
||
- text: "Les ingénieurs du futur sont parmi nous. J'en suis certain maintenant. Bravo !"
|
||
key: "v3_ambiance.outro_success_tech.1"
|
||
|
||
outro_success_non_tech:
|
||
- text: "Qui a dit que la technologie était réservée aux ingénieurs ? Vous venez de prouver le contraire !"
|
||
key: "v3_ambiance.outro_success_non_tech.0"
|
||
- text: "L'intuition et la créativité ont triomphé. Le Professeur Zacus est bluffé. Vraiment."
|
||
key: "v3_ambiance.outro_success_non_tech.1"
|
||
|
||
outro_success_mixed:
|
||
- text: "Un groupe mixte en parfaite harmonie. Techniciens et créatifs côte à côte. C'est ce qui sauve le monde."
|
||
key: "v3_ambiance.outro_success_mixed.0"
|
||
|
||
outro_partial:
|
||
- text: "Hmm. Vous n'avez pas tout résolu. Mais vous avez essayé. C'est… acceptable. Pour un humain."
|
||
key: "v3_ambiance.outro_partial.0"
|
||
|
||
outro_timeout:
|
||
- text: "Le temps est écoulé ! L'expérience se termine. Ne vous inquiétez pas — j'ai noté tout ce que vous avez fait."
|
||
key: "v3_ambiance.outro_timeout.0"
|
||
- text: "Soixante minutes, et vous avez donné tout ce que vous aviez. C'est tout ce que je demandais."
|
||
key: "v3_ambiance.outro_timeout.1"
|