User prompt
Ajoute ces nouveaux personnages au jeu "fée Lisa" : 1) Dogie -- le chien anti-chafée -> apparition : une seule fois tout les niveaux Dogie est un ennemi du chafée , qui apparaît souvent pour faire des remarques drôles et piquantes à propos du chafée ou prévenir lisa (le joueur) du comportement farceur du chafée, Dogie apparaît sur les plateformes d'arbres roses, puis quand lisa entre en collision avec lui, Un écran de dialogue s'ouvre, dans lequel Dogie parle a lisa , Le message de Dogie est aléatoire parmis tout ses 65 remarques et messages qu'il peut dire, Le joueur doit appuyer sur ok pour fermer le dialogue et continuer sa route, Le message de Dogie est toujours drôle et piquante a propos de son ennemis le chafée et ses blagues "pourris" 2) Estella --- la dresseuse de pouvoirs ----> apparition : une seule fois tout les 3 nouveaux a partir du niveau 21 Estella apparait sur les plateformes des arbres roses, Elle est toujours en train de dresser de nouveaux pouvoirs pour les futures fées ! Quand lisa entre en collision avec elle, Estella lui donnera de la poussière de bulle d'étoiles, ce qui implique que Estella donnera au joueur 50 LIPOINTS d'un type que le joueur aura choisis, Un écran de choix s'ouvre ,dans lequel le joueur doit choisir quel type de LIPOINTS il veut que Estella lui donne, entre les 5 types de LIPOINTS du jeu , Mais attention, il ne peut faire qu'un seul choix par apparition de Estella! Quand le joueur a fait son choix, il gagne les LIPOINTS correspondant, Estella disparaît et le joueur doit continuer son chemin 3) Mazz le dragon ---- le cracheur de feu -> apparition : une fois tout les 2 niveaux a partir du niveau 24 Mazz le dragon apparaît sur les plateformes d'arbres roses, Et quand lisa entre en collision avec lui, Mazz lui vole 30 LIPOINTS d'un type aléatoire (de façon involontaire car mazz aime s'amuser à cracher du jeu, ce qui brulle certains LIPOINTS au passage), un message s'affiche dans lequel le jeu préviens le joueur des LIPOINTS perdus et de ce qu'a fait mazz, le message disparaît au bout de 10 secondes ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Fait en sorte que les textes du jeu (quizz, dialogues,) soient plus facile à lire et moins petits
User prompt
Ajoute 30 autres questions possibles pour les jumelles, 40 autres devinette possibles ridicules pour le chafée et 33 nouvelles prophétie chelou possible de Malicia
User prompt
Fait en sorte que les personnages fassent réellement tout ce que j'ai décrit dans les conditions que j'ai décrit ! ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Fait en sorte que les personnages n'apparaissent qu'une fois dans les conditions que j'ai spécifié !!!
User prompt
Regles les problèmes et fait en sorte que Margot et les autres personnages apparaissent sur les plateformes en étant de la même taille que lisa
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'spawnCharacters')' in or related to this line: 'self.spawnCharacters();' Line Number: 1810
User prompt
Ajoute ces personnages au jeu Fée Lisa (ils apparaissent sur les plateformes sous certaines conditions et offrent leurs propres Cadeaux ou défis) : 1) la fée Stella - la guide étoilée ---> apparition sur les plateformes : une fois tout les 1000 lipoints collectée après le niveau 10, lisa (le joueur), doit alors choisir entre deux chemins séparés différents sur la plateforme des arbres roses, une bulle magique de mystère d'étoile se situe sur un arbre de chacun des deux chemins, quand lisa (le joueur), choisit son chemin en appuyant sur une des flèches qui pointent vers chaque chemin, et quand lisa rentre en collision avec la bulle magique de mystère d'étoile d'un des deux chemins, le joueur gagne aléatoirement entre 20 et 50 LIPOINTS d'un type aléatoire , le jeu envoie un message informant le joueur de ce qu'il a gagner, ce message disparaît au bout de 5 secondes 2) la fée Margot - sœur de lisa -> Apparition sur les plateformes : une fois tout les 2 niveaux Quand lisa entre en collision avec Margot, Margot donne 25 LIPOINTS cadeaux de n'importe quel type aléatoire au joueur ! Le jeu affiche un message tenant au courant le joueur du type de LIPOINTS que Margot lui a offert , le message disparaît au bout de 5 secondes! 3) Le Chafée - le chat malicieux blagueurs des fées ---> Apparition : aléatoire, le joueur a une chance de le croiser qu'une seule fois tout les 4 niveaux et seulement a partir du niveau 12, Quand lisa entre en collision avec le chafée, le chafée lui pose une question de devinette ridicule, si le joueur répond correctement, le chafée lui offre un cadeau et le joueur gagne 40 LIPOINTS de n'importe quel type! Mais si le joueur répond mal à la devinette, le chafée lui vole aléatoirement 15 LIPOINTS du destin ou 20 LIPOINTS des sucettes (selon son envie du moment mdr) 4) La sorcière Malicia --- la fabriquante de potions bizzares qui essaye de deviner ton future pouvoir ---> Apparition : deux fois tout les 4 niveaux a partir du niveau 19 Quand lisa entre en collision avec Malicia, un écran de dialogue s'ouvre dans lequel Malicia parle a lisa en essayant de lui proposer ses recettes de potions bizzares a base de trucs chelous et essaye de deviner le futur pouvoir de lisa, le joueur doit lire ces dialogues, et appuyer sur suivant pour chaque bulle de dialogue, puis lorsque le dialogue est terminé, le joueur appuie sur ok, l'écran de dialogue disparaît et Malicia s'en va , lisa peut continuer sa route! 5) les jumelles humaines lylou et Sandra - deux enfants émerveillés par le monde des fées, elles te poseront des questions auxquelles tu devra répondre sincèrement --> Apparition : une seule fois tout les 3 niveaux a partir du niveau 8, Quand lisa entre en collision avec les jumelles, un écran sous forme de quizz, dans lequel les jumelles posent des questions s'ouvrira, et le joueur devra répondre aux questions, Si le joueur fait une mauvais réponse, les jumelles en poseront toujours une plus dure, et cela jusqu'à que le joueur réponde correctement à la plus compliqué dès questions (lol), Si le joueur répond correctement à la question, les jumelles le laisseront tranquille et lui offrirons même 6 LIPOINTS de sucettes! Implante tout ces personnages et leurs assets dans le jeu! ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Ajoute plus de questions de quizz a chaque type de défis!
User prompt
Je veux personnalisé le fond du jeu avec mon propre asset
User prompt
Fait en sorte que de nouveaux arbres soient toujours générer quand la fée avance
User prompt
Au pire ajoute des petits boutons de choix pour les quizz pour que le joueur choisisse la réponse quand il clique dessus
User prompt
Regles les problème liés aux quizz!
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'var localPos = self.toLocal(globalPos);' Line Number: 173
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toGlobal')' in or related to this line: 'var globalPos = obj.parent.toGlobal(obj.position);' Line Number: 167
User prompt
Regles les problème liés au quizz
User prompt
Regles les problemes liés au quizz, et ajoute une musique de fond en boucle au jeu
User prompt
Affiche le niveau du joueur a un endroit visible dans L'ui
User prompt
Fait en sorte que les questions de quizz soient en français et qu'ils y est 30 a 35 questions différente de chaque type dans le jeu, et que la question a laquelle le joueur doit répondre est tiré au hasard a chaque fois, et ajoute aussi le système de niveau dans L'ui
Code edit (1 edits merged)
Please save this source code
User prompt
Fée Lisa - Magical Power Discovery
Initial prompt
Crée mon jeu "Fée Lisa", c'est un jeu destiné, dans lequel le joueur doit aider une fée (la fée Lisa), à découvrir ses pouvoirs et rejoindre le monde des fées ! Voici la description des mécaniques, du gameplay et de comment se présente le jeu : Le jeu est un jeu de plateforme (avec la plateforme qui avance fur a mesure que le joueur et sa fée avance sur la plateforme), Les plateformes représentent le monde vaste du monde des fées, la fée Lisa saute sur les plateformes (des arbres magiques roses), Le joueur déplace lisa d'un arbre a un autre en appuyant sur l'arbre où il veut que lisa se déplace, Des éléments de pouvoirs aléatoire apparaissent aléatoirement sur les arbres (bulles de lumières, bulles du destin, bulles de l'ombre, bulles des sucettes, bulles des océans), le joueur doit faire en sorte que lisa rentre en collision avec les bulles de pouvoirs, a chaque fois que lisa rentre en collision avec une bulle , des mini défis de test de pouvoir sont a faire : Pour les bulles de lumières, le joueur doit faire en sorte que lisa réussisse a allumé une lumière juste par la force de sa pensée, En appuyant de façon répétée sur une icône de lampe, Mais il y a seulement 30% de chance d'allumer avec succès la lampe à chaque appuie et lisa ne peut essayer seulement 3 fois par bulle de lumière, si elle échoue au bout de 3 essais, le joueur devra continuer la route sans gagner de points, car lisa n'aura pas trouvé son pouvoir !, Mais si elle réussit, le joueur gagne 5 LIPOINTS de lumière (points qui servent à lisa pour découvrir son pouvoir final et au joueur de monter en niveau), Pour les bulles du destin, c'est le même principe, lorsque lisa entre en collision avec une bulle du destin, le joueur doit répondre a une question simple de quizz sur la prédiction du destin d'un enfant de 5 ans (une question de prédiction aléatoire parmi 30 questions de prédiction différentes disponibles dans le jeu), Si le joueur répond correctement à la prédiction, Il gagne 5 LIPOINTS du destin, et continue son aventure, Si le joueur répond mal à la prédiction (mauvaise réponse), Lisa continue son chemin et le joueur ne gagne aucun LIPOINTS du destin Pour les bulles de l'ombre, quand le joueur (lisa), rentre en collision avec une bulle de l'ombre, le joueur doit appuyer de façon répétée sur une icône de soleil, le but est d'éteindre la lumière ! Lisa n'a que 30% de chance d'éteindre la lumière à chaque fois que le joueur appuie sur le soleil et n'a que 3 essais! Si au bout des 3 essais, le soleil ne s'éteint pas, le joueur et lisa continuent leur aventure sans gagner de LIPOINTS de l'ombre!, Mais si la lumière est éteinte avec succès, lisa et le joueur gagnent 5 LIPOINTS de l'ombre! Même principe pour les bulles des sucettes, faut entrer en collision avec une bulle de sucette, puis répondre à une question de quizz sur les sucettes tire aléatoirement parmi une base de données de 35 questions sur les sucettes, si le joueur répond correctement à la question de quizz, il gagne 5 LIPOINTS des sucettes et continue son aventure avec lisa, S'il répond mal, il continue son aventure mais ne gagne aucun LIPOINTS des sucettes Pour les bulles des océans, même principe, sauf qu'il doit répondre a une question de culture générale sur les océans au lieu de quizz sur les sucettes ! S'il répond correctement, il gagne 5 LIPOINTS des océans, Puis continue son aventure, S'il répond mal, il continue son aventure sans rien, Il y a un système de niveaux (jusqu'au niveau 50) Le joueur monte de niveaux en accumulant des LIPOINTS de tout type confondu, Il doit avoir 10 LIPOINTS de n'importe quel type pour passer au niveau 2, et a chaque fois le nombre de LIPOINTS a avoir pour monter au niveau supérieur double par rapport au niveau précédent !, Le jeu se finit au niveau 50 , avec la découverte du pouvoir de lisa (Le pouvoir final est le pouvoir pour lequel le joueur a collecté le plus de LIPOINTS) Le nombre de LIPOINTS de chaque type posséder par le joueur doit être affiché dans L'ui
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Chafee = Container.expand(function () { var self = Container.call(this); var chafeeGraphics = self.attachAsset('chafee', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.riddles = [{ question: "Je miaule mais je ne suis pas un chat, j'ai des ailes mais je ne vole pas. Qui suis-je ?", answers: ["Un oiseau", "Le Chafée", "Un dragon", "Un papillon"], correct: 1 }, { question: "Qu'est-ce qui est invisible mais fait du bruit quand on le casse ?", answers: ["Le vent", "Le silence", "Un rêve", "Une bulle"], correct: 1 }, { question: "Je grandis en vieillissant mais je rapetisse en tombant. Qui suis-je ?", answers: ["Une bougie", "Un arbre", "La lune", "Une ombre"], correct: 0 }, { question: "Qu'est-ce qui a quatre pattes le matin, deux à midi et trois le soir, mais n'est pas un humain ?", answers: ["Un centaure malade", "Une chaise qui se transforme", "Mon cousin Gribouille", "Un sphinx paresseux"], correct: 2 }, { question: "Pourquoi les poissons ne jouent-ils jamais au poker ?", answers: ["Ils ont peur de l'eau", "Ils n'ont pas de poches", "Ils montrent toujours leurs écailles", "Ils préfèrent le bridge"], correct: 2 }, { question: "Que dit un escargot quand il croise une limace ?", answers: ["Regarde, un nudiste !", "Tu as perdu ta maison ?", "Salut cousin sans coquille !", "Dépêche-toi !"], correct: 0 }, { question: "Combien de chats faut-il pour visser une ampoule ?", answers: ["Aucun, ils préfèrent le noir", "Sept, un pour tenir et six pour tourner", "Deux, mais comment ils rentrent dedans ?", "Un seul, mais il faut qu'il soit motivé"], correct: 2 }, { question: "Qu'est-ce qui est jaune et qui attend ?", answers: ["Jonathan Bananier", "Un citron patient", "Le soleil en retard", "Mon petit-déjeuner"], correct: 0 }, { question: "Pourquoi les plongeurs plongent-ils toujours en arrière ?", answers: ["Parce qu'en avant ils tombent dans le bateau", "C'est plus joli", "Ils sont timides", "Pour faire des bulles"], correct: 0 }, { question: "Qu'est-ce qui est petit, vert et qui monte et descend ?", answers: ["Un petit pois dans un ascenseur", "Un martien qui fait du sport", "Une olive qui danse", "Mon voisin malade"], correct: 0 }, { question: "Comment appelle-t-on un chat tombé dans un pot de peinture le jour de Noël ?", answers: ["Un chat-mallow", "Un chat-pin de Noël", "Un chat-touillé", "Un chat-grin"], correct: 1 }, { question: "Que dit un tapis quand il se lève ?", answers: ["J'ai mal au dos", "Oula, j'suis tout froissé !", "Bonjour parquet !", "Il était temps !"], correct: 1 }, { question: "Pourquoi les poules pondent-elles des œufs ?", answers: ["Parce que si elles les jetaient, ils se casseraient", "Elles n'ont pas le choix", "C'est leur hobby", "Pour embêter les renards"], correct: 0 }, { question: "Qu'est-ce qui est transparent et qui sent la carotte ?", answers: ["Un pet de lapin", "Un fantôme gourmand", "De l'eau de carotte", "L'haleine de Bugs Bunny"], correct: 0 }, { question: "Comment fait-on pour allumer un barbecue sous l'eau ?", answers: ["Avec un briquet étanche", "On ne peut pas, idiot !", "Avec du feu liquide", "En demandant à Aquaman"], correct: 1 }, { question: "Qu'est-ce qui est rouge et qui sourit dans un coin ?", answers: ["Une tomate heureuse", "Un clown coincé", "Une fraise qui regarde la télé", "Mon nez après un rhume"], correct: 0 }, { question: "Pourquoi les elephants ont-ils une excellente mémoire ?", answers: ["Parce qu'ils racontent de bonnes histoires", "Ils ne peuvent pas oublier leur poids", "Ils écrivent tout", "Sinon ils oublieraient où ils ont mis leur trompe"], correct: 3 }, { question: "Qu'est-ce qui est pire qu'une girafe avec un mal de gorge ?", answers: ["Un mille-pattes avec des ampoules", "Un hippopotame qui fait régime", "Une baleine qui a le hoquet", "Moi quand j'ai faim"], correct: 0 }, { question: "Comment appelle-t-on un boomerang qui ne revient pas ?", answers: ["Un boomewrong", "Un bâton", "Un boomerang paresseux", "Un boomerang en vacances"], correct: 1 }, { question: "Qu'est-ce qui a des dents mais ne mange jamais ?", answers: ["Un requin végétarien", "Une scie", "Mon grand-père", "Un piano souriant"], correct: 1 }, { question: "Pourquoi les abeilles ont-elles des cheveux collants ?", answers: ["Elles utilisent du honey-shampooing", "Elles transpirent du miel", "C'est de la cire", "Elles ne se lavent jamais"], correct: 0 }, { question: "Qu'est-ce qui tombe mais ne se fait jamais mal ?", answers: ["La pluie", "Un parachutiste expert", "Mon moral le lundi", "Les feuilles d'automne"], correct: 0 }, { question: "Comment appelle-t-on un chien qui n'a pas de pattes ?", answers: ["On ne l'appelle pas, on va le chercher", "Un chien saucisse", "Roulette", "Un chat déguisé"], correct: 0 }, { question: "Qu'est-ce qui est invisible et sent l'ail ?", answers: ["L'haleine d'un vampire", "Un pet d'italien", "L'air de la cuisine", "Mon ami invisible"], correct: 0 }, { question: "Pourquoi les bananes portent-elles de la crème solaire ?", answers: ["Pour ne pas peler", "Elles sont à la plage", "Elles sont coquettes", "C'est leur peau naturelle"], correct: 0 }, { question: "Qu'est-ce qui crie plus fort qu'un cochon qu'on égorge ?", answers: ["Deux cochons qu'on égorge", "Un cochon avec un mégaphone", "Ma voisine qui regarde le foot", "Un micro qui larsen"], correct: 0 }, { question: "Comment fait-on pour qu'un canard marche sur la tête ?", answers: ["On retourne l'étang", "On lui met les pattes en l'air", "On lui demande poliment", "Impossible, ils ont le vertige"], correct: 0 }, { question: "Qu'est-ce qui a un chapeau mais pas de tête ?", answers: ["Un champignon", "Un épouvantail sans tête", "Une bouteille chic", "Mon cousin Albert"], correct: 0 }, { question: "Pourquoi les pingouins ne volent-ils pas ?", answers: ["Ils ont peur du mal des transports", "Leurs ailes sont trop petites", "Ils n'ont pas de permis", "Ils préfèrent nager"], correct: 1 }, { question: "Qu'est-ce qui court mais n'a pas de jambes ?", answers: ["L'eau", "Le temps", "Mon nez quand j'ai un rhume", "Toutes ces réponses"], correct: 3 }, { question: "Comment appelle-t-on un dinosaure qui dort ?", answers: ["Un dodo-saure", "Un dinoronfle", "Un paresseux-rex", "Un fossile fatigué"], correct: 0 }, { question: "Qu'est-ce qui est blanc et noir et rouge partout ?", answers: ["Un zèbre qui rougit", "Un journal", "Un pingouin qui saigne du nez", "Ma conscience"], correct: 1 }, { question: "Pourquoi les chauves se lavent-ils le visage avec du shampooing ?", answers: ["Ils ne savent pas où s'arrêtent les cheveux", "C'est plus économique", "Ils sont confus", "Par habitude"], correct: 0 }, { question: "Qu'est-ce qui a six pattes et qui vole ?", answers: ["Trois oiseaux attachés ensemble", "Un insecte", "Un avion avec des pattes", "Mon imagination"], correct: 1 }, { question: "Comment appelle-t-on un combat entre un chat et un chien ?", answers: ["Un miaule-ment", "Une bataille d'animaux", "Un chat-hu", "Un bordel monstre"], correct: 2 }, { question: "Qu'est-ce qui grandit mais ne vieillit jamais ?", answers: ["Les mensonges", "Les dettes", "L'ignorance", "Mes cheveux dans les oreilles"], correct: 0 }, { question: "Pourquoi les vampires ne vont-ils jamais à la plage ?", answers: ["Ils ont peur de bronzer", "Le sable rentre dans leur cercueil", "L'ail de mer", "Ils préfèrent les piscines"], correct: 0 }, { question: "Qu'est-ce qui a des ailes mais ne vole pas et nage mais n'a pas d'eau ?", answers: ["Un poulet dans un aquarium vide", "Un pingouin", "Mon rêve de voler", "Une poule qui fait de la natation"], correct: 1 }, { question: "Comment fait-on pour rendre un mouchoir complètement carré ?", answers: ["On le plie bien", "On le découpe", "On lui raconte une blague nulle", "Impossible, il sera toujours rond des coins"], correct: 2 }, { question: "Qu'est-ce qui monte et descend mais ne bouge jamais ?", answers: ["La température", "L'escalier", "Mon humeur", "Le prix de l'essence"], correct: 1 }, { question: "Pourquoi est-ce qu'on dit que l'argent n'a pas d'odeur ?", answers: ["Parce qu'il est enrhumé", "Il se lave souvent", "C'est faux, ça sent l'avarice", "Il porte du déodorant"], correct: 2 }, { question: "Qu'est-ce qui se casse dès qu'on le nomme ?", answers: ["Le silence", "La vaisselle de ma mère", "Un secret", "Mon cœur quand on m'ignore"], correct: 0 }]; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.startRiddle(); } }; self.startRiddle = function () { isPaused = true; self.currentRiddle = self.riddles[Math.floor(Math.random() * self.riddles.length)]; // Create riddle UI self.riddleContainer = game.addChild(new Container()); self.riddleContainer.x = 1024; self.riddleContainer.y = 1366; // Background var bg = self.riddleContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 1.0 })); bg.alpha = 0.9; bg.tint = 0x9400D3; // Title var titleText = self.riddleContainer.addChild(new Text2('Le Chafée - Chat Malicieux', { size: 36, fill: 0xFFFFFF })); titleText.anchor.set(0.5, 0.5); titleText.y = -150; // Question var questionText = self.riddleContainer.addChild(new Text2(self.currentRiddle.question, { size: 32, fill: 0xFFFFFF })); questionText.anchor.set(0.5, 0.5); questionText.y = -80; // Answer buttons self.answerButtons = []; for (var i = 0; i < self.currentRiddle.answers.length; i++) { var buttonContainer = self.riddleContainer.addChild(new Container()); buttonContainer.x = 0; buttonContainer.y = -20 + i * 50; buttonContainer.answerIndex = i; var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.15 })); buttonBg.tint = 0xDDA0DD; buttonBg.alpha = 0.8; var buttonText = buttonContainer.addChild(new Text2(i + 1 + '. ' + self.currentRiddle.answers[i], { size: 26, fill: 0x000000 })); buttonText.anchor.set(0.5, 0.5); buttonContainer.down = function (x, y, obj) { this.alpha = 0.7; var container = this; LK.setTimeout(function () { container.alpha = 1; }, 100); if (container.answerIndex === self.currentRiddle.correct) { self.onCorrectAnswer(); } else { self.onWrongAnswer(); } }; self.answerButtons.push(buttonContainer); } }; self.onCorrectAnswer = function () { var randomType = bubbleTypes[Math.floor(Math.random() * bubbleTypes.length)]; lipoints[randomType] += 40; updateLipointsDisplay(); checkLevelUp(); self.showResultMessage('Bravo ! Le Chafée t\'offre 40 LIPOINTS de ' + randomType + ' !', 0x00FF00); LK.getSound('success').play(); LK.setTimeout(function () { self.closeRiddle(); }, 5000); }; self.onWrongAnswer = function () { var stolenType = Math.random() < 0.5 ? 'destiny' : 'lollipop'; var stolenAmount = stolenType === 'destiny' ? 15 : 20; if (lipoints[stolenType] >= stolenAmount) { lipoints[stolenType] -= stolenAmount; } else { lipoints[stolenType] = 0; } updateLipointsDisplay(); self.showResultMessage('Dommage ! Le Chafée te vole ' + stolenAmount + ' LIPOINTS de ' + stolenType + ' !', 0xFF0000); LK.getSound('fail').play(); LK.setTimeout(function () { self.closeRiddle(); }, 5000); }; self.showResultMessage = function (message, color) { var resultText = self.riddleContainer.addChild(new Text2(message, { size: 32, fill: color })); resultText.anchor.set(0.5, 0.5); resultText.y = 120; }; self.closeRiddle = function () { if (self.riddleContainer) { self.riddleContainer.destroy(); } isPaused = false; self.destroy(); characters.splice(characters.indexOf(self), 1); }; return self; }); var Challenge = Container.expand(function (type) { var self = Container.call(this); var challengeGraphics = self.attachAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5 }); challengeGraphics.alpha = 0.9; self.challengeType = type; self.attempts = 0; self.maxAttempts = 3; self.isActive = true; // Challenge text self.titleText = self.addChild(new Text2('', { size: 40, fill: 0xFFFFFF })); self.titleText.anchor.set(0.5, 0.5); self.titleText.y = -120; self.instructionText = self.addChild(new Text2('', { size: 24, fill: 0xFFFFFF })); self.instructionText.anchor.set(0.5, 0.5); self.instructionText.y = -60; self.resultText = self.addChild(new Text2('', { size: 30, fill: 0xFFFFFF })); self.resultText.anchor.set(0.5, 0.5); self.resultText.y = 100; self.setupChallenge = function () { switch (self.challengeType) { case 'light': self.setupLightChallenge(); break; case 'destiny': self.setupDestinyChallenge(); break; case 'shadow': self.setupShadowChallenge(); break; case 'lollipop': self.setupLollipopChallenge(); break; case 'ocean': self.setupOceanChallenge(); break; } }; self.setupLightChallenge = function () { self.titleText.setText('Défi de la Lumière'); self.instructionText.setText('Appuie pour allumer les lampes par la force de ta pensée !'); // Create lamps self.lamps = []; for (var i = 0; i < 3; i++) { var lamp = self.addChild(LK.getAsset('lamp', { anchorX: 0.5, anchorY: 0.5 })); lamp.x = (i - 1) * 80; lamp.y = 20; lamp.lit = false; self.lamps.push(lamp); } }; self.setupDestinyChallenge = function () { self.titleText.setText('Défi du Destin'); self.currentQuestion = destinyQuestions[Math.floor(Math.random() * destinyQuestions.length)]; self.instructionText.setText(self.currentQuestion.question); self.instructionText.y = -100; // Create answer buttons self.answerButtons = []; for (var i = 0; i < self.currentQuestion.answers.length; i++) { // Create button container var buttonContainer = self.addChild(new Container()); buttonContainer.x = 0; buttonContainer.y = -20 + i * 60; buttonContainer.answerIndex = i; // Create button background shape var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.2 })); buttonBg.tint = 0xE6E6FA; // Light lavender background buttonBg.alpha = 0.8; // Create button text var buttonText = buttonContainer.addChild(new Text2(i + 1 + '. ' + self.currentQuestion.answers[i], { size: 28, fill: 0x000000 })); buttonText.anchor.set(0.5, 0.5); // Add click handler to button container buttonContainer.down = function (x, y, obj) { // Visual feedback this.alpha = 0.7; var container = this; LK.setTimeout(function () { container.alpha = 1; }, 100); // Process answer if (container.answerIndex === self.currentQuestion.correct) { container.children[0].tint = 0x00FF00; // Green for correct self.onSuccess(); } else { container.children[0].tint = 0xFF0000; // Red for incorrect self.onFailure(); } }; self.answerButtons.push(buttonContainer); } self.isQuizChallenge = true; }; self.setupShadowChallenge = function () { self.titleText.setText('Défi de l\'Ombre'); self.instructionText.setText('Éteins le soleil brillant avec la magie de l\'ombre !\nAppuie pour créer des ombres !'); }; self.setupLollipopChallenge = function () { self.titleText.setText('Défi des Sucettes'); self.currentQuestion = lollipopQuestions[Math.floor(Math.random() * lollipopQuestions.length)]; self.instructionText.setText(self.currentQuestion.question); self.instructionText.y = -100; // Create answer buttons self.answerButtons = []; for (var i = 0; i < self.currentQuestion.answers.length; i++) { // Create button container var buttonContainer = self.addChild(new Container()); buttonContainer.x = 0; buttonContainer.y = -20 + i * 60; buttonContainer.answerIndex = i; // Create button background shape var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.2 })); buttonBg.tint = 0xFFB6C1; // Light pink background buttonBg.alpha = 0.8; // Create button text var buttonText = buttonContainer.addChild(new Text2(i + 1 + '. ' + self.currentQuestion.answers[i], { size: 28, fill: 0x000000 })); buttonText.anchor.set(0.5, 0.5); // Add click handler to button container buttonContainer.down = function (x, y, obj) { // Visual feedback this.alpha = 0.7; var container = this; LK.setTimeout(function () { container.alpha = 1; }, 100); // Process answer if (container.answerIndex === self.currentQuestion.correct) { container.children[0].tint = 0x00FF00; // Green for correct self.onSuccess(); } else { container.children[0].tint = 0xFF0000; // Red for incorrect self.onFailure(); } }; self.answerButtons.push(buttonContainer); } self.isQuizChallenge = true; }; self.setupOceanChallenge = function () { self.titleText.setText('Défi des Océans'); self.currentQuestion = oceanQuestions[Math.floor(Math.random() * oceanQuestions.length)]; self.instructionText.setText(self.currentQuestion.question); self.instructionText.y = -100; // Create answer buttons self.answerButtons = []; for (var i = 0; i < self.currentQuestion.answers.length; i++) { // Create button container var buttonContainer = self.addChild(new Container()); buttonContainer.x = 0; buttonContainer.y = -20 + i * 60; buttonContainer.answerIndex = i; // Create button background shape var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.2 })); buttonBg.tint = 0x87CEEB; // Sky blue background buttonBg.alpha = 0.8; // Create button text var buttonText = buttonContainer.addChild(new Text2(i + 1 + '. ' + self.currentQuestion.answers[i], { size: 28, fill: 0x000000 })); buttonText.anchor.set(0.5, 0.5); // Add click handler to button container buttonContainer.down = function (x, y, obj) { // Visual feedback this.alpha = 0.7; var container = this; LK.setTimeout(function () { container.alpha = 1; }, 100); // Process answer if (container.answerIndex === self.currentQuestion.correct) { container.children[0].tint = 0x00FF00; // Green for correct self.onSuccess(); } else { container.children[0].tint = 0xFF0000; // Red for incorrect self.onFailure(); } }; self.answerButtons.push(buttonContainer); } self.isQuizChallenge = true; }; self.down = function (x, y, obj) { if (!self.isActive) return; // Handle action challenges (light, shadow) - quiz challenges now handle clicks through individual button handlers if (self.challengeType === 'light' || self.challengeType === 'shadow') { self.attempts++; var success = Math.random() < 0.3; if (success) { self.onSuccess(); } else { self.onFailure(); } } }; self.onSuccess = function () { self.resultText.setText('Réussi ! +5 LIPOINTS'); self.resultText.fill = "#00FF00"; LK.getSound('success').play(); // Award LIPOINTS lipoints[self.challengeType] += 5; updateLipointsDisplay(); checkLevelUp(); LK.setTimeout(function () { self.closeChallenge(); }, 2000); }; self.onFailure = function () { if (self.isQuizChallenge || self.attempts >= self.maxAttempts) { self.resultText.setText('Défi Échoué !'); self.resultText.fill = "#FF0000"; LK.getSound('fail').play(); LK.setTimeout(function () { self.closeChallenge(); }, 2000); } else { self.resultText.setText('Réessaie ! (' + (self.maxAttempts - self.attempts) + ' essais restants)'); self.resultText.fill = "#FFFF00"; } }; self.closeChallenge = function () { self.isActive = false; activeChallenge = null; self.destroy(); isPaused = false; }; return self; }); var Dogie = Container.expand(function () { var self = Container.call(this); var dogieGraphics = self.attachAsset('dogie', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.remarks = ["Attention Lisa ! Le Chafée prépare encore une de ses blagues pourries !", "Tu savais que le Chafée collectionne les devinettes ratées ? Il en a des millions !", "Le Chafée m'a dit qu'il connaît la blague la plus nulle du monde... Je pense qu'il dit vrai !", "Méfie-toi, Lisa ! Le Chafée a encore inventé une énigme qui ne rime à rien !", "Le Chafée pense qu'il est drôle, mais même les pierres bâillent quand il raconte ses blagues !", "Tu veux entendre la pire blague du Chafée ? Non ? Tu as raison, garde tes oreilles !", "Le Chafée m'a demandé si je trouvais ses blagues amusantes... J'ai fait le mort !", "Lisa, si le Chafée te pose une devinette, prépare-toi à perdre quelques neurones !", "Le Chafée croit qu'il est un génie de l'humour... Moi je dis qu'il est un génie du ridicule !", "Attention ! Le Chafée a encore trouvé une énigme dans un paquet de céréales !", "Le Chafée m'a dit qu'il écrit un livre de blagues... Je pense qu'il devrait plutôt écrire des excuses !", "Tu sais pourquoi je n'aime pas le Chafée ? Parce que ses blagues me donnent mal aux oreilles !", "Le Chafée prétend connaître 1000 devinettes... Dommage qu'aucune ne soit drôle !", "Lisa, le Chafée va sûrement te raconter sa blague préférée... Prends tes jambes à ton cou !", "Le Chafée pense qu'il peut me faire rire avec ses énigmes... Il se trompe de planète !", "Méfie-toi du Chafée ! Il cache ses blagues pourries partout dans la forêt !", "Le Chafée m'a demandé si je voulais entendre sa nouvelle devinette... J'ai dit ouaf, c'est NON !", "Lisa, le Chafée collectionne aussi les mauvaises blagues qu'il n'a pas encore inventées !", "Le Chafée croit qu'il est le roi de l'humour... Moi je dis qu'il est plutôt le roi des nouilles !", "Attention ! Le Chafée prépare encore un de ses quiz impossibles !", "Le Chafée m'a dit qu'il avait une devinette géniale... Je lui ai dit d'aller voir un docteur !", "Tu veux savoir le secret du Chafée ? Il invente ses blagues en dormant... Et ça se voit !", "Lisa, si le Chafée te demande ton avis sur ses blagues, dis-lui que tu es muette !", "Le Chafée pense qu'il va devenir célèbre avec ses énigmes... Célèbre pour les mauvaises raisons !", "Méfie-toi ! Le Chafée a encore lu un livre de devinettes pour enfants de 3 ans !", "Le Chafée m'a proposé de devenir son assistant... J'ai préféré rester avec ma dignité !", "Lisa, le Chafée va te dire qu'il connaît LA blague du siècle... Ne l'écoute pas, il ment !", "Le Chafée croit que ses énigmes sont mystérieuses... Elles sont surtout incompréhensibles !", "Attention ! Le Chafée a trouvé de nouvelles devinettes dans un magazine de 1982 !", "Le Chafée m'a dit qu'il allait révolutionner l'humour... J'ai dit qu'il ferait mieux de commencer par l'apprendre !", "Lisa, le Chafée va sûrement te poser une énigme sur les chaussettes... C'est son truc bizarre !", "Le Chafée pense qu'il est plus malin que moi... Mais même une sardine est plus drôle que lui !", "Méfie-toi du Chafée ! Il cache ses blagues ratées sous les feuilles mortes !", "Le Chafée m'a demandé si je connaissais une bonne blague... Je lui ai dit de se regarder dans un miroir !", "Lisa, le Chafée collectionne les devinettes comme moi je collectionne les os... Mais au moins mes os sont utiles !", "Le Chafée croit qu'il peut m'impressionner avec ses énigmes... Il ferait mieux d'essayer avec une méduse !", "Attention ! Le Chafée prépare encore une de ses questions sans réponse logique !", "Le Chafée m'a dit qu'il était le maître des devinettes... Je lui ai dit qu'il était plutôt le maître des catastrophes !", "Lisa, si le Chafée te propose un duel de blagues, cours plus vite que moi quand je vois le vétérinaire !", "Le Chafée pense que ses énigmes sont profondes... Elles sont surtout profondément ennuyeuses !", "Méfie-toi ! Le Chafée a encore inventé une devinette en mélangeant deux blagues ratées !", "Le Chafée m'a proposé de tester ses nouvelles énigmes... J'ai préféré aller chez le toiletteur !", "Lisa, le Chafée va te dire qu'il connaît le secret de l'humour... Son secret c'est de ne pas en avoir !", "Le Chafée croit qu'il peut me rendre fou avec ses devinettes... Il y est presque arrivé !", "Attention ! Le Chafée a trouvé un livre de blagues dans une poubelle... Et ça se sent !", "Le Chafée m'a demandé mon avis sur sa dernière énigme... Je lui ai dit qu'elle était parfaite... pour faire fuir les mouches !", "Lisa, le Chafée va sûrement te raconter l'histoire de la blague qui n'a pas de fin... Comme toutes les siennes !", "Le Chafée pense qu'il est l'Einstein de l'humour... Moi je pense qu'il est plutôt l'Einstein de la bêtise !", "Méfie-toi du Chafée ! Il prépare encore une énigme à base de fromage qui pue !", "Le Chafée m'a dit qu'il allait m'apprendre l'humour... Je lui ai dit que j'étais allergique !", "Lisa, le Chafée collectionne les devinettes comme moi je collectionne les puces... En moins utile !", "Le Chafée croit qu'il peut m'émouvoir avec ses blagues... Il m'émeut... de pitié !", "Attention ! Le Chafée a encore mélangé une devinette avec une recette de cuisine !", "Le Chafée m'a proposé d'écrire un livre ensemble... 'Les pires blagues du monde' ça vous dit ?", "Lisa, si le Chafée te demande de deviner quelque chose, dis-lui que tu devines qu'il va dire n'importe quoi !", "Le Chafée pense que ses énigmes sont des œuvres d'art... Des œuvres d'art moderne très très moderne !", "Méfie-toi ! Le Chafée a encore trouvé une devinette dans un paquet de chips vide !", "Le Chafée m'a dit qu'il connaissait la réponse à tout... Sauf à la question 'Comment être drôle ?' !", "Lisa, le Chafée va te poser une énigme sur les escargots... C'est son obsession du moment !", "Le Chafée croit qu'il peut me faire pleurer de rire... Il me fait pleurer c'est sûr, mais pas de rire !", "Attention ! Le Chafée prépare encore une de ses devinettes à rallonge sans queue ni tête !", "Le Chafée m'a demandé si j'aimais les surprises... Je lui ai dit que ses blagues m'avaient vacciné contre !", "Lisa, le Chafée va sûrement te dire qu'il a inventé l'humour... Ne le crois pas, il a juste inventé l'anti-humour !", "Le Chafée pense qu'il est le plus drôle de la forêt... Il a raison : il est tellement pas drôle que c'en est drôle !", "Méfie-toi du Chafée ! Il cache ses énigmes ratées dans des boîtes à chaussures !", "Le Chafée m'a proposé de devenir son public... J'ai dit que j'étais déjà occupé à être un chien !", "Lisa, le dernier conseil de Dogie : si le Chafée commence une phrase par 'Tu connais celle-là ?', cours très très vite !"]; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.startDialogue(); } }; self.startDialogue = function () { isPaused = true; // Choose a random remark var randomRemark = self.remarks[Math.floor(Math.random() * self.remarks.length)]; // Create dialogue UI self.dialogueContainer = game.addChild(new Container()); self.dialogueContainer.x = 1024; self.dialogueContainer.y = 1366; // Background var bg = self.dialogueContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.3, scaleY: 0.8 })); bg.alpha = 0.9; bg.tint = 0x8B4513; // Brown color for dog // Title var titleText = self.dialogueContainer.addChild(new Text2('Dogie - Le Chien Anti-Chafée', { size: 32, fill: 0xFFFFFF })); titleText.anchor.set(0.5, 0.5); titleText.y = -120; // Dialogue text self.dialogueText = self.dialogueContainer.addChild(new Text2(randomRemark, { size: 30, fill: 0xFFFFFF })); self.dialogueText.anchor.set(0.5, 0.5); self.dialogueText.y = -20; // OK button self.okButton = self.dialogueContainer.addChild(new Container()); self.okButton.x = 0; self.okButton.y = 80; var okBg = self.okButton.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.15 })); okBg.tint = 0x32CD32; var okText = self.okButton.addChild(new Text2('OK', { size: 26, fill: 0x000000 })); okText.anchor.set(0.5, 0.5); self.okButton.down = function () { self.closeDialogue(); }; }; self.closeDialogue = function () { if (self.dialogueContainer) { self.dialogueContainer.destroy(); } isPaused = false; self.destroy(); characters.splice(characters.indexOf(self), 1); }; return self; }); var Estella = Container.expand(function () { var self = Container.call(this); var estellaGraphics = self.attachAsset('estella', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.startPowerChoice(); } }; self.startPowerChoice = function () { isPaused = true; // Create choice UI self.choiceContainer = game.addChild(new Container()); self.choiceContainer.x = 1024; self.choiceContainer.y = 1366; // Background var bg = self.choiceContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 1.0 })); bg.alpha = 0.9; bg.tint = 0x9370DB; // Purple color for Estella // Title var titleText = self.choiceContainer.addChild(new Text2('Estella - Dresseuse de Pouvoirs', { size: 32, fill: 0xFFD700 })); titleText.anchor.set(0.5, 0.5); titleText.y = -150; // Instructions var instructText = self.choiceContainer.addChild(new Text2('Je t\'offre 50 LIPOINTS de poussière d\'étoiles !\nChoisis le type de pouvoir à renforcer :', { size: 28, fill: 0xFFFFFF })); instructText.anchor.set(0.5, 0.5); instructText.y = -80; // Create choice buttons for each LIPOINT type var choices = [{ type: 'light', name: 'Lumière', color: 0xFFFF00 }, { type: 'destiny', name: 'Destin', color: 0x9370DB }, { type: 'shadow', name: 'Ombre', color: 0x2F4F4F }, { type: 'lollipop', name: 'Sucettes', color: 0xFF69B4 }, { type: 'ocean', name: 'Océans', color: 0x1E90FF }]; for (var i = 0; i < choices.length; i++) { var choice = choices[i]; var buttonContainer = self.choiceContainer.addChild(new Container()); buttonContainer.x = 0; buttonContainer.y = -20 + i * 40; buttonContainer.choiceType = choice.type; var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.15 })); buttonBg.tint = choice.color; buttonBg.alpha = 0.8; var buttonText = buttonContainer.addChild(new Text2(choice.name + ' (+50)', { size: 26, fill: 0x000000 })); buttonText.anchor.set(0.5, 0.5); buttonContainer.down = function (x, y, obj) { this.alpha = 0.7; var container = this; LK.setTimeout(function () { container.alpha = 1; }, 100); self.grantPower(container.choiceType); }; } }; self.grantPower = function (chosenType) { // Give 50 LIPOINTS of chosen type lipoints[chosenType] += 50; updateLipointsDisplay(); checkLevelUp(); // Show confirmation message var confirmText = self.choiceContainer.addChild(new Text2('Parfait ! Tu as reçu 50 LIPOINTS de ' + chosenType + ' !', { size: 28, fill: 0x00FF00 })); confirmText.anchor.set(0.5, 0.5); confirmText.y = 120; LK.getSound('success').play(); LK.setTimeout(function () { self.closeChoice(); }, 3000); }; self.closeChoice = function () { if (self.choiceContainer) { self.choiceContainer.destroy(); } isPaused = false; self.destroy(); characters.splice(characters.indexOf(self), 1); }; return self; }); var Lisa = Container.expand(function () { var self = Container.call(this); var lisaGraphics = self.attachAsset('lisa', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.isJumping = false; self.onGround = false; self.update = function () { // Apply gravity if (!self.onGround) { self.velocityY += 0.8; } self.y += self.velocityY; // Check collision with trees self.onGround = false; for (var i = 0; i < trees.length; i++) { var tree = trees[i]; if (self.intersects(tree) && self.velocityY > 0) { self.y = tree.y - tree.height / 2 - self.height / 2; self.velocityY = 0; self.onGround = true; self.isJumping = false; break; } } // Fall off screen check if (self.y > 2732 + 100) { resetLisaPosition(); } }; self.jump = function () { if (self.onGround && !self.isJumping) { self.velocityY = -18; self.isJumping = true; self.onGround = false; LK.getSound('jump').play(); } }; return self; }); var Malicia = Container.expand(function () { var self = Container.call(this); var maliciaGraphics = self.attachAsset('malicia', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.dialogues = ["Ah, Lisa ! Je vois dans mes cristaux que tu as un grand destin...", "Mes potions magiques à base d'écorce de licorne et de bave de dragon pourraient t'aider !", "Hmm... Je sens que tu développeras bientôt le pouvoir de parler aux étoiles !", "Cette potion violette à base de pétales de roses éternelles révèlera ta vraie nature !", "Les astres me disent que ton futur pouvoir sera... spectaculaire !", "Veux-tu que je te prépare une potion à base de champignons phosphorescents ?", "J'ai ici une recette secrète avec des plumes de phoenix et du miel d'abeilles dorées...", "Ton aura me dit que tu maîtriseras bientôt la magie des éléments !", "Les nuages violets me murmurent que tu découvriras le secret des chaussettes qui dansent toutes seules !", "Ma boule de cristal à paillettes prédit que tu parleras couramment le langage des cuillères enchantées !", "Je vois dans le marc de café de licorne que tu deviendras l'amie des nuages grognons !", "Mes cartes en écorce de dragon annoncent que tu contrôleras l'art de faire pousser des arbres à bonbons !", "L'écho de ma grotte magique révèle que tu sauras transformer les larmes en perles de lune !", "Ma potion à base de rires de gnomes indique que tu maîtriseras le pouvoir de faire chanter les pierres !", "Les vapeurs de ma marmite aux algues cosmiques prévoient que tu ouvriras des portails vers le pays des chaussettes perdues !", "Je sens dans l'air parfumé aux pets de fées que tu développeras le don de comprendre les disputes des fourchettes !", "Ma baguette en bois de réglisse magique vibre : tu sauras invoquer des pluies de gâteaux au chocolat !", "Les écailles de poisson-lune dans ma main révèlent que tu commanderas une armée de brosses à dents rebelles !", "Mon pendule en dent de mammouth rose prédit que tu découvriras la recette du parfum qui rend invisible aux moustiques !", "La fumée violette de mes herbes chelou annonce que tu parleras aux fantômes de pizzas mangées !", "Mes runes gravées sur des croûtes de fromage magique prédisent que tu chevaucheras des licornes à rayures !", "L'esprit de ma théière hantée murmure que tu posséderas le pouvoir de faire rougir les tomates !", "Ma boussole qui pointe vers les rêves bizarres indique que tu créeras des arc-en-ciel carrés !", "Les bulles de ma potion aux larmes de crocodile végétarien révèlent que tu sauras réparer les cœurs brisés avec du scotch magique !", "Mon miroir qui ment toujours prédit que tu ne découvriras jamais comment apprivoiser les chats-dragons volants !", "Les plumes de mes coqs à trois pattes annoncent que tu maîtriseras l'art de faire fondre les regards méchants !", "Ma casserole en métal d'étoile filante vibre : tu ouvriras une école pour enseigner aux papillons à chanter !", "Les cailloux colorés de ma rivière enchantée prédisent que tu inventeras le premier parapluie anti-cauchemars !", "Mon livre qui s'écrit tout seul révèle que tu découvriras pourquoi les chaussettes disparaissent dans la machine à laver !", "La poudre de mes escargots lumineux annonce que tu parleras couramment la langue des bulles de savon !", "Ma loupe qui grossit les émotions prédit que tu sauras transformer les disputes en batailles de chatouilles !", "Les pétales de mes roses qui poussent à l'envers révèlent que tu commanderas une flotte de bateaux en papier géants !", "Mon sablier rempli de poussière de comètes indique que tu posséderas le don de faire pleurer de joie les nuages !", "La mélodie de ma harpe en cheveux d'ange prédit que tu créeras des ponts en rayons de soleil solidifiés !", "Mes billes qui roulent vers l'avenir annoncent que tu sauras convaincre les montagnes de changer de place !", "Mon collier en perles de rosée magique vibre : tu découvriras le secret pour faire pousser des fleurs qui sonnent comme des cloches !", "Les échos de ma caverne qui rit toute seule révèlent que tu maîtriseras l'art de peindre avec des rayons de lune !", "Ma baguette qui ne marche qu'à l'envers prédit que tu ouvriras un café pour les fantômes timides !", "Les vapeurs de ma potion aux sourires d'enfants indiquent que tu sauras faire danser les étoiles en formation !", "Mon chapeau pointu qui change de couleur selon l'humeur annonce que tu parleras aux esprit des vieilles chaussures !", "La mousse magique de mon chaudron révèle que tu créeras des nuages-coussins pour les anges fatigués !", "Mes lunettes qui voient dans le passé des objets prédisent que tu découvriras l'histoire secrète de chaque grain de sable !"]; self.currentDialogueIndex = 0; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.startDialogue(); } }; self.startDialogue = function () { isPaused = true; self.currentDialogueIndex = 0; self.showDialogue(); }; self.showDialogue = function () { // Create dialogue UI self.dialogueContainer = game.addChild(new Container()); self.dialogueContainer.x = 1024; self.dialogueContainer.y = 1366; // Background var bg = self.dialogueContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.3, scaleY: 0.8 })); bg.alpha = 0.9; bg.tint = 0x4B0082; // Title var titleText = self.dialogueContainer.addChild(new Text2('Malicia - Sorcière aux Potions Bizarres', { size: 32, fill: 0x9370DB })); titleText.anchor.set(0.5, 0.5); titleText.y = -120; // Dialogue text self.dialogueText = self.dialogueContainer.addChild(new Text2(self.dialogues[self.currentDialogueIndex], { size: 30, fill: 0xFFFFFF })); self.dialogueText.anchor.set(0.5, 0.5); self.dialogueText.y = -20; // Next button if (self.currentDialogueIndex < self.dialogues.length - 1) { self.nextButton = self.dialogueContainer.addChild(new Container()); self.nextButton.x = 0; self.nextButton.y = 80; var nextBg = self.nextButton.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.15 })); nextBg.tint = 0x32CD32; var nextText = self.nextButton.addChild(new Text2('Suivant', { size: 26, fill: 0x000000 })); nextText.anchor.set(0.5, 0.5); self.nextButton.down = function () { self.nextDialogue(); }; } else { // OK button for final dialogue self.okButton = self.dialogueContainer.addChild(new Container()); self.okButton.x = 0; self.okButton.y = 80; var okBg = self.okButton.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.15 })); okBg.tint = 0xFF6347; var okText = self.okButton.addChild(new Text2('OK', { size: 26, fill: 0x000000 })); okText.anchor.set(0.5, 0.5); self.okButton.down = function () { self.closeDialogue(); }; } }; self.nextDialogue = function () { self.currentDialogueIndex++; self.dialogueContainer.destroy(); self.showDialogue(); }; self.closeDialogue = function () { if (self.dialogueContainer) { self.dialogueContainer.destroy(); } isPaused = false; self.destroy(); characters.splice(characters.indexOf(self), 1); }; return self; }); var Margot = Container.expand(function () { var self = Container.call(this); var margotGraphics = self.attachAsset('margot', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.giveGift(); } }; self.giveGift = function () { var randomType = bubbleTypes[Math.floor(Math.random() * bubbleTypes.length)]; lipoints[randomType] += 25; updateLipointsDisplay(); checkLevelUp(); self.showGiftMessage(randomType); LK.getSound('success').play(); LK.setTimeout(function () { self.destroy(); characters.splice(characters.indexOf(self), 1); }, 5000); }; self.showGiftMessage = function (type) { var messageContainer = game.addChild(new Container()); messageContainer.x = lisa.x; messageContainer.y = lisa.y - 100; var messageText = messageContainer.addChild(new Text2('Margot, ta sœur, t\'offre 25 LIPOINTS de ' + type + ' !', { size: 28, fill: 0xFF69B4 })); messageText.anchor.set(0.5, 0.5); tween(messageContainer, { alpha: 0 }, { duration: 5000, onFinish: function onFinish() { messageContainer.destroy(); } }); }; return self; }); var Mazz = Container.expand(function () { var self = Container.call(this); var mazzGraphics = self.attachAsset('mazz', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.breatheFire(); } }; self.breatheFire = function () { // Choose random LIPOINT type to burn var burnableTypes = []; for (var type in lipoints) { if (lipoints[type] > 0) { burnableTypes.push(type); } } if (burnableTypes.length === 0) { // No LIPOINTS to burn self.showMessage('Mazz crache du feu mais tu n\'as pas de LIPOINTS à brûler !'); } else { var randomType = burnableTypes[Math.floor(Math.random() * burnableTypes.length)]; var stolenAmount = Math.min(30, lipoints[randomType]); lipoints[randomType] -= stolenAmount; updateLipointsDisplay(); var typeName = randomType === 'light' ? 'lumière' : randomType === 'destiny' ? 'destin' : randomType === 'shadow' ? 'ombre' : randomType === 'lollipop' ? 'sucettes' : 'océans'; self.showMessage('Mazz s\'amuse à cracher du feu ! Il a brûlé ' + stolenAmount + ' LIPOINTS de ' + typeName + ' par accident !'); } LK.setTimeout(function () { self.destroy(); characters.splice(characters.indexOf(self), 1); }, 10000); }; self.showMessage = function (message) { var messageContainer = game.addChild(new Container()); messageContainer.x = lisa.x; messageContainer.y = lisa.y - 100; var messageBg = messageContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 0.3 })); messageBg.tint = 0xFF4500; // Orange-red for fire messageBg.alpha = 0.9; var messageText = messageContainer.addChild(new Text2(message, { size: 28, fill: 0xFFFFFF })); messageText.anchor.set(0.5, 0.5); // Add fire effect animation tween(messageBg, { scaleX: 1.1, scaleY: 0.35 }, { duration: 500, easing: tween.easeInOut }); tween(messageBg, { scaleX: 1.0, scaleY: 0.3 }, { duration: 500, easing: tween.easeInOut }); LK.setTimeout(function () { messageContainer.destroy(); }, 10000); }; return self; }); var PowerBubble = Container.expand(function (type) { var self = Container.call(this); var bubbleAsset = type + 'Bubble'; var bubbleGraphics = self.attachAsset(bubbleAsset, { anchorX: 0.5, anchorY: 0.5 }); self.bubbleType = type; self.collected = false; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.collected && self.intersects(lisa)) { self.collected = true; LK.getSound('collect').play(); startChallenge(self.bubbleType); self.destroy(); bubbles.splice(bubbles.indexOf(self), 1); } }; return self; }); var Stella = Container.expand(function () { var self = Container.call(this); var stellaGraphics = self.attachAsset('stella', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.pathChosen = false; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.showPathChoice(); } }; self.showPathChoice = function () { isPaused = true; // Create path choice UI self.pathContainer = game.addChild(new Container()); self.pathContainer.x = 1024; self.pathContainer.y = 1366; // Background var bg = self.pathContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 0.8 })); bg.alpha = 0.9; // Title var titleText = self.pathContainer.addChild(new Text2('Fée Stella - Guide Étoilée', { size: 36, fill: 0xFFD700 })); titleText.anchor.set(0.5, 0.5); titleText.y = -120; // Instructions var instructText = self.pathContainer.addChild(new Text2('Choisis ton chemin mystérieux !', { size: 28, fill: 0xFFFFFF })); instructText.anchor.set(0.5, 0.5); instructText.y = -60; // Left path button var leftPath = self.pathContainer.addChild(new Container()); leftPath.x = -120; leftPath.y = 20; var leftArrow = leftPath.addChild(LK.getAsset('arrow', { anchorX: 0.5, anchorY: 0.5 })); leftArrow.rotation = Math.PI; var leftText = leftPath.addChild(new Text2('Chemin\nde Gauche', { size: 24, fill: 0xFFFFFF })); leftText.anchor.set(0.5, 0.5); leftText.y = 50; leftPath.down = function () { self.chooseLeftPath(); }; // Right path button var rightPath = self.pathContainer.addChild(new Container()); rightPath.x = 120; rightPath.y = 20; var rightArrow = rightPath.addChild(LK.getAsset('arrow', { anchorX: 0.5, anchorY: 0.5 })); var rightText = rightPath.addChild(new Text2('Chemin\nde Droite', { size: 24, fill: 0xFFFFFF })); rightText.anchor.set(0.5, 0.5); rightText.y = 50; rightPath.down = function () { self.chooseRightPath(); }; }; self.chooseLeftPath = function () { self.createMagicBubble(-100); self.closePath(); }; self.chooseRightPath = function () { self.createMagicBubble(100); self.closePath(); }; self.createMagicBubble = function (offsetX) { // Find a suitable tree platform for the magic bubble var suitableTrees = []; for (var i = 0; i < trees.length; i++) { var tree = trees[i]; if (tree.x > self.x && tree.x < self.x + 800) { suitableTrees.push(tree); } } var targetTree = null; if (suitableTrees.length > 0) { // Choose tree based on path direction if (offsetX < 0) { // Left path - choose leftmost suitable tree targetTree = suitableTrees[0]; for (var j = 1; j < suitableTrees.length; j++) { if (suitableTrees[j].x < targetTree.x) { targetTree = suitableTrees[j]; } } } else { // Right path - choose rightmost suitable tree targetTree = suitableTrees[0]; for (var j = 1; j < suitableTrees.length; j++) { if (suitableTrees[j].x > targetTree.x) { targetTree = suitableTrees[j]; } } } } var magicBubble = game.addChild(new Container()); var bubbleGraphics = magicBubble.attachAsset('magicBubble', { anchorX: 0.5, anchorY: 0.5 }); if (targetTree) { magicBubble.x = targetTree.x; magicBubble.y = targetTree.y - targetTree.height / 2 - 40; } else { magicBubble.x = self.x + offsetX; magicBubble.y = self.y - 60; } magicBubble.collected = false; // Sparkle effect tween(bubbleGraphics, { rotation: Math.PI * 2 }, { duration: 2000, easing: tween.linear }); magicBubble.update = function () { this.x -= scrollSpeed; if (!this.collected && this.intersects(lisa)) { this.collected = true; self.giveReward(); this.destroy(); } }; magicBubbles.push(magicBubble); }; self.giveReward = function () { var rewardAmount = 20 + Math.floor(Math.random() * 31); // 20-50 LIPOINTS var randomType = bubbleTypes[Math.floor(Math.random() * bubbleTypes.length)]; lipoints[randomType] += rewardAmount; updateLipointsDisplay(); checkLevelUp(); self.showRewardMessage(rewardAmount, randomType); LK.getSound('success').play(); }; self.showRewardMessage = function (amount, type) { var messageContainer = game.addChild(new Container()); messageContainer.x = lisa.x; messageContainer.y = lisa.y - 100; var messageText = messageContainer.addChild(new Text2('Stella t\'offre ' + amount + ' LIPOINTS de ' + type + ' !', { size: 28, fill: 0xFFD700 })); messageText.anchor.set(0.5, 0.5); LK.setTimeout(function () { messageContainer.destroy(); }, 5000); }; self.closePath = function () { if (self.pathContainer) { self.pathContainer.destroy(); } isPaused = false; self.destroy(); characters.splice(characters.indexOf(self), 1); }; return self; }); var Tree = Container.expand(function () { var self = Container.call(this); var treeGraphics = self.attachAsset('tree', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { self.x -= scrollSpeed; }; return self; }); var Twins = Container.expand(function () { var self = Container.call(this); var twinsGraphics = self.attachAsset('twins', { anchorX: 0.5, anchorY: 0.5 }); self.encountered = false; self.questions = [{ question: "Quelle est ta couleur préférée ?", answers: ["Rouge", "Bleu", "Vert", "Jaune"], difficulty: 1 }, { question: "Si tu pouvais avoir un super-pouvoir, lequel choisirais-tu ?", answers: ["Voler", "Lire les pensées", "Devenir invisible", "Contrôler le temps"], difficulty: 2 }, { question: "Dans un monde parfait, que ferais-tu en premier ?", answers: ["Aider tous les animaux", "Découvrir de nouveaux mondes", "Créer de la beauté", "Rassembler tous les peuples"], difficulty: 3 }, { question: "Quel est ton animal préféré ?", answers: ["Chat", "Chien", "Oiseau", "Poisson"], difficulty: 1 }, { question: "Que fais-tu quand tu es triste ?", answers: ["Je pleure", "Je me cache", "Je parle à quelqu'un", "Je dessine"], difficulty: 1 }, { question: "Quelle est ta saison favorite ?", answers: ["Printemps", "Été", "Automne", "Hiver"], difficulty: 1 }, { question: "Où aimerais-tu voyager ?", answers: ["À la plage", "En montagne", "Dans l'espace", "Sous l'océan"], difficulty: 2 }, { question: "Quel métier te fait rêver ?", answers: ["Docteur", "Astronaute", "Artiste", "Enseignant"], difficulty: 2 }, { question: "Comment préfères-tu apprendre ?", answers: ["En lisant", "En écoutant", "En pratiquant", "En imaginant"], difficulty: 2 }, { question: "Quelle est ta plus grande peur ?", answers: ["Le noir", "Les monstres", "Être seul", "L'échec"], difficulty: 3 }, { question: "Si tu trouvais un trésor, que ferais-tu ?", answers: ["Le garder", "Le partager", "Le cacher", "L'échanger"], difficulty: 2 }, { question: "Quel livre aimerais-tu écrire ?", answers: ["Une aventure", "Une histoire d'amour", "Un livre de magie", "Une encyclopédie"], difficulty: 3 }, { question: "Comment résous-tu les problèmes ?", answers: ["Seul", "Avec de l'aide", "En réfléchissant longtemps", "Rapidement"], difficulty: 3 }, { question: "Quel est ton rêve le plus fou ?", answers: ["Devenir célèbre", "Sauver le monde", "Découvrir un nouveau pays", "Parler aux animaux"], difficulty: 3 }, { question: "Que collectionnes-tu ?", answers: ["Des pierres", "Des autocollants", "Des livres", "Des souvenirs"], difficulty: 1 }, { question: "Comment te vois-tu dans 10 ans ?", answers: ["Heureux", "Riche", "Célèbre", "Sage"], difficulty: 3 }, { question: "Quel est ton jeu préféré ?", answers: ["Cache-cache", "Jeux vidéo", "Sports", "Jeux de société"], difficulty: 1 }, { question: "Quelle invention aimerais-tu créer ?", answers: ["Un robot", "Une machine volante", "Un remède magique", "Un téléporteur"], difficulty: 3 }, { question: "Comment exprimes-tu tes émotions ?", answers: ["Par des mots", "Par l'art", "Par la musique", "Par le silence"], difficulty: 2 }, { question: "Quel don aimerais-tu avoir ?", answers: ["Guérir les gens", "Prédire l'avenir", "Comprendre les animaux", "Voler"], difficulty: 2 }, { question: "Comment organises-tu ta chambre ?", answers: ["Très rangée", "Un peu désordonnée", "Créative", "Pratique"], difficulty: 1 }, { question: "Quelle langue aimerais-tu parler ?", answers: ["Le langage des dauphins", "Le langage des arbres", "Le langage des étoiles", "Toutes les langues"], difficulty: 2 }, { question: "Si tu étais invisible pour une journée ?", answers: ["J'aiderais les gens", "J'explorerais", "Je ferais des blagues", "J'apprendrais des secrets"], difficulty: 2 }, { question: "Quel élément représente ton âme ?", answers: ["Le feu", "L'eau", "La terre", "L'air"], difficulty: 3 }, { question: "Comment voudrais-tu être rappelé ?", answers: ["Comme quelqu'un de gentil", "Comme un héros", "Comme un génie", "Comme un ami fidèle"], difficulty: 3 }, { question: "Quelle serait ta maison idéale ?", answers: ["Dans les arbres", "Sous l'eau", "Dans les nuages", "Sous terre"], difficulty: 2 }, { question: "Quel message voudrais-tu transmettre au monde ?", answers: ["Soyez gentils", "Suivez vos rêves", "Protégez la nature", "Aimez-vous les uns les autres"], difficulty: 3 }, { question: "Comment choisis-tu tes amis ?", answers: ["Par le cœur", "Par les intérêts communs", "Par la loyauté", "Par le hasard"], difficulty: 2 }, { question: "Quelle serait ta devise ?", answers: ["Jamais abandonner", "Toujours sourire", "Aider les autres", "Rester curieux"], difficulty: 3 }, { question: "Si tu pouvais changer une chose dans le monde ?", answers: ["Arrêter la pollution", "Éliminer la tristesse", "Donner de la magie à tous", "Créer la paix"], difficulty: 3 }, { question: "Quel trait de caractère te définit le mieux ?", answers: ["La générosité", "La curiosité", "Le courage", "La créativité"], difficulty: 2 }, { question: "Comment veux-tu passer ton temps libre ?", answers: ["En créant", "En explorant", "En aidant", "En rêvant"], difficulty: 2 }, { question: "Quelle serait ta baguette magique idéale ?", answers: ["En bois d'étoile", "En cristal de lune", "En branche d'arbre ancien", "En rayon de soleil"], difficulty: 2 }, { question: "Quel est ton plus grand talent caché ?", answers: ["Faire rire", "Écouter", "Imaginer", "Comprendre"], difficulty: 2 }, { question: "Comment vois-tu l'avenir de l'humanité ?", answers: ["Plein d'espoir", "Technologique", "Magique", "Uni"], difficulty: 3 }]; self.currentQuestionIndex = 0; self.wrongAnswers = 0; self.update = function () { self.x -= scrollSpeed; // Check collision with Lisa if (!self.encountered && self.intersects(lisa)) { self.encountered = true; self.startQuiz(); } }; self.startQuiz = function () { isPaused = true; self.currentQuestionIndex = 0; self.wrongAnswers = 0; self.showQuestion(); }; self.showQuestion = function () { // Create quiz UI self.quizContainer = game.addChild(new Container()); self.quizContainer.x = 1024; self.quizContainer.y = 1366; // Background var bg = self.quizContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.2, scaleY: 1.0 })); bg.alpha = 0.9; bg.tint = 0xFF1493; // Title var titleText = self.quizContainer.addChild(new Text2('Lylou et Sandra - Les Jumelles Curieuses', { size: 30, fill: 0xFFFFFF })); titleText.anchor.set(0.5, 0.5); titleText.y = -150; // Question var currentQuestion = self.questions[self.currentQuestionIndex]; var questionText = self.quizContainer.addChild(new Text2(currentQuestion.question, { size: 30, fill: 0xFFFFFF })); questionText.anchor.set(0.5, 0.5); questionText.y = -80; // Answer buttons self.answerButtons = []; for (var i = 0; i < currentQuestion.answers.length; i++) { var buttonContainer = self.quizContainer.addChild(new Container()); buttonContainer.x = 0; buttonContainer.y = -20 + i * 50; buttonContainer.answerIndex = i; var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.15 })); buttonBg.tint = 0xFFB6C1; buttonBg.alpha = 0.8; var buttonText = buttonContainer.addChild(new Text2(i + 1 + '. ' + currentQuestion.answers[i], { size: 26, fill: 0x000000 })); buttonText.anchor.set(0.5, 0.5); buttonContainer.down = function (x, y, obj) { this.alpha = 0.7; var container = this; LK.setTimeout(function () { container.alpha = 1; }, 100); self.processAnswer(container.answerIndex); }; self.answerButtons.push(buttonContainer); } }; self.processAnswer = function (answerIndex) { // For the twins, any answer can be "wrong" to make it harder var isCorrect = Math.random() < 0.6; // 60% chance of being "correct" if (isCorrect || self.currentQuestionIndex >= self.questions.length - 1) { self.onSuccess(); } else { self.wrongAnswers++; self.onWrongAnswer(); } }; self.onSuccess = function () { lipoints.lollipop += 6; updateLipointsDisplay(); checkLevelUp(); self.showResultMessage('Bravo ! Les jumelles t\'offrent 6 LIPOINTS de sucettes !', 0x00FF00); LK.getSound('success').play(); LK.setTimeout(function () { self.closeQuiz(); }, 5000); }; self.onWrongAnswer = function () { if (self.currentQuestionIndex < self.questions.length - 1) { self.showResultMessage('Les jumelles veulent une question plus difficile !', 0xFFFF00); LK.setTimeout(function () { self.currentQuestionIndex++; self.quizContainer.destroy(); self.showQuestion(); }, 2000); } else { // If we've run out of questions, they have to accept the last answer self.onSuccess(); } }; self.showResultMessage = function (message, color) { var resultText = self.quizContainer.addChild(new Text2(message, { size: 30, fill: color })); resultText.anchor.set(0.5, 0.5); resultText.y = 120; }; self.closeQuiz = function () { if (self.quizContainer) { self.quizContainer.destroy(); } isPaused = false; self.destroy(); characters.splice(characters.indexOf(self), 1); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var lisa; var trees = []; var bubbles = []; var activeChallenge = null; var isPaused = false; var characters = []; var magicBubbles = []; // Character spawn tracking var stellaSpawnTracker = 0; var stellaSpawned = false; var margotSpawnCounter = 0; var margotSpawned = false; var chafeeCanSpawn = false; var chafeeSpawned = false; var chafeeCurrentCycle = -1; var maliciaSpawnCounter = 0; var maliciaSpawnedThisCycle = 0; var maliciaCurrentCycle = -1; var twinsSpawnCounter = 0; var twinsSpawned = false; // New character spawn tracking var dogieSpawnCounter = 0; var dogieSpawned = false; var estellaSpawnCounter = 0; var estellaSpawned = false; var mazzSpawnCounter = 0; var mazzSpawned = false; // Scrolling var scrollSpeed = 3; var cameraX = 0; // Quiz questions databases in French var destinyQuestions = [{ question: "Quel sera ton plus grand rêve dans la vie ?", answers: ["Devenir célèbre", "Aider les autres", "Découvrir le monde", "Créer quelque chose de beau"], correct: 1 }, { question: "Quelle couleur représente le mieux ton avenir ?", answers: ["Rouge passion", "Bleu sérénité", "Vert nature", "Jaune soleil"], correct: 2 }, { question: "Quel animal te guidera dans ta destinée ?", answers: ["Un chat mystérieux", "Un chien fidèle", "Un oiseau libre", "Un dauphin sage"], correct: 3 }, { question: "Dans quel endroit trouveras-tu ton bonheur ?", answers: ["En montagne", "Au bord de la mer", "Dans une forêt", "Dans une grande ville"], correct: 1 }, { question: "Quel pouvoir magique aimerais-tu avoir ?", answers: ["Lire dans les pensées", "Voler dans le ciel", "Parler aux animaux", "Contrôler le temps"], correct: 2 }, { question: "Quelle est ta plus grande peur à surmonter ?", answers: ["Le noir", "Les araignées", "Être seul(e)", "L'échec"], correct: 3 }, { question: "Quel métier feras-tu plus tard ?", answers: ["Médecin", "Artiste", "Enseignant", "Aventurier"], correct: 0 }, { question: "Combien d'enfants auras-tu ?", answers: ["Aucun", "Un ou deux", "Trois ou quatre", "Beaucoup"], correct: 1 }, { question: "Dans combien de pays voyageras-tu ?", answers: ["Moins de 5", "Entre 5 et 10", "Entre 10 et 20", "Plus de 20"], correct: 2 }, { question: "À quel âge trouveras-tu l'amour ?", answers: ["Avant 20 ans", "Entre 20 et 30 ans", "Entre 30 et 40 ans", "Après 40 ans"], correct: 1 }, { question: "Quelle sera ta plus grande réussite ?", answers: ["Professionnelle", "Familiale", "Artistique", "Sportive"], correct: 1 }, { question: "Quel trésor découvriras-tu ?", answers: ["De l'or", "Des diamants", "Un livre magique", "Une carte secrète"], correct: 2 }, { question: "Quelle planète visiteras-tu en premier ?", answers: ["Mars", "Venus", "Jupiter", "Saturne"], correct: 0 }, { question: "Quel super-héros deviendras-tu ?", answers: ["Captain Courage", "Wonder Wisdom", "Magic Master", "Super Smile"], correct: 1 }, { question: "Quelle invention créeras-tu ?", answers: ["Une machine à bonheur", "Un téléporteur", "Une potion magique", "Un robot ami"], correct: 0 }, { question: "Quel monstre amical rencontreras-tu ?", answers: ["Un dragon gentil", "Une licorne dorée", "Un géant souriant", "Une fée malicieuse"], correct: 1 }, { question: "Quelle étoile éclairera ton chemin ?", answers: ["L'étoile polaire", "Une étoile filante", "L'étoile du berger", "Une constellation magique"], correct: 3 }, { question: "Quel don développeras-tu ?", answers: ["Le chant", "La danse", "La peinture", "La cuisine"], correct: 2 }, { question: "Quelle surprise t'attend demain ?", answers: ["Un cadeau", "Une nouvelle amitié", "Une découverte", "Une aventure"], correct: 1 }, { question: "Quel sera ton animal de compagnie ?", answers: ["Un chat magique", "Un chien volant", "Un lapin parlant", "Un oiseau chanteur"], correct: 0 }, { question: "Dans quel château vivras-tu ?", answers: ["Un château de glace", "Un château de nuages", "Un château sous-marin", "Un château dans les arbres"], correct: 3 }, { question: "Quel fruit magique goûteras-tu ?", answers: ["Une pomme dorée", "Une poire argentée", "Une fraise géante", "Un raisin arc-en-ciel"], correct: 0 }, { question: "Quelle danse apprendras-tu ?", answers: ["La danse des étoiles", "La danse des fleurs", "La danse des vagues", "La danse du vent"], correct: 1 }, { question: "Quel livre magique liras-tu ?", answers: ["Le livre des secrets", "Le livre des rêves", "Le livre du temps", "Le livre des souhaits"], correct: 3 }, { question: "Quelle potion prépareras-tu ?", answers: ["Potion de courage", "Potion de sagesse", "Potion de joie", "Potion d'amitié"], correct: 2 }, { question: "Quel véhicule magique conduiras-tu ?", answers: ["Un tapis volant", "Une voiture nuage", "Un bateau-étoile", "Un train-arc-en-ciel"], correct: 0 }, { question: "Quelle couronne porteras-tu ?", answers: ["Couronne de fleurs", "Couronne d'étoiles", "Couronne de cristal", "Couronne de lumière"], correct: 1 }, { question: "Quel jardin secret découvriras-tu ?", answers: ["Jardin de roses", "Jardin de papillons", "Jardin de cristaux", "Jardin de musique"], correct: 2 }, { question: "Quelle magie maîtriseras-tu ?", answers: ["Magie des éléments", "Magie des émotions", "Magie des saisons", "Magie des rêves"], correct: 3 }, { question: "Quel cadeau recevras-tu ?", answers: ["Une baguette magique", "Un collier enchanté", "Des bottes de sept lieues", "Un miroir parlant"], correct: 0 }, { question: "Quelle pierre précieuse guidera ta destinée ?", answers: ["Diamant de vérité", "Rubis d'amour", "Émeraude d'espoir", "Saphir de sagesse"], correct: 2 }, { question: "Quel élément naturel résonne avec ton âme ?", answers: ["Le feu passionné", "L'eau fluide", "La terre stable", "L'air libre"], correct: 1 }, { question: "Dans quelle époque aurais-tu vécu ?", answers: ["L'Égypte antique", "Le Moyen Âge", "La Renaissance", "L'époque moderne"], correct: 2 }, { question: "Quel mystère résoudras-tu ?", answers: ["L'Atlantide perdue", "Les pyramides", "Les crop circles", "Le triangle des Bermudes"], correct: 0 }, { question: "Quelle est ta mission secrète ?", answers: ["Protéger la nature", "Sauver les animaux", "Découvrir des trésors", "Unir les peuples"], correct: 3 }, { question: "Quel talent caché possèdes-tu ?", answers: ["Télépathie", "Clairvoyance", "Guérison", "Prémonition"], correct: 1 }, { question: "Dans quel royaume magique appartiens-tu ?", answers: ["Royaume des nuages", "Royaume des océans", "Royaume des forêts", "Royaume des étoiles"], correct: 3 }, { question: "Quel sera ton compagnon de route ?", answers: ["Un phoenix", "Un dragon blanc", "Une licorne", "Un loup argenté"], correct: 2 }, { question: "Quelle légende incarneras-tu ?", answers: ["Le héros courageux", "La sage protectrice", "L'explorateur intrépide", "Le guérisseur bienveillant"], correct: 1 }, { question: "Quel secret de l'univers découvriras-tu ?", answers: ["L'origine des étoiles", "Le langage des planètes", "La musique des sphères", "La danse du cosmos"], correct: 2 }, { question: "Quelle transformation t'attend ?", answers: ["Devenir immortel", "Acquérir la sagesse absolue", "Maîtriser tous les éléments", "Comprendre tous les langages"], correct: 1 }, { question: "Quel cadeau apporteras-tu au monde ?", answers: ["La paix éternelle", "La joie infinie", "L'amour universel", "La sagesse divine"], correct: 2 }, { question: "Dans quel temple trouveras-tu la vérité ?", answers: ["Temple du soleil", "Temple de la lune", "Temple des étoiles", "Temple du cœur"], correct: 3 }, { question: "Quelle prophétie se réalisera grâce à toi ?", answers: ["Le retour de la lumière", "L'harmonie des éléments", "La réconciliation des mondes", "L'éveil de la conscience"], correct: 3 }, { question: "Quel héritage laisseras-tu ?", answers: ["Un royaume prospère", "Une œuvre d'art éternelle", "Une découverte révolutionnaire", "Un exemple d'amour"], correct: 3 }]; var lollipopQuestions = [{ question: "Quelle est la saveur de sucette la plus populaire ?", answers: ["Fraise", "Pomme", "Cerise", "Orange"], correct: 0 }, { question: "De quelle couleur est une sucette à la menthe ?", answers: ["Rouge", "Jaune", "Verte", "Bleue"], correct: 2 }, { question: "Combien de calories contient une petite sucette ?", answers: ["20-30", "50-60", "80-90", "100-110"], correct: 0 }, { question: "Dans quel pays a été inventée la sucette ?", answers: ["France", "États-Unis", "Angleterre", "Allemagne"], correct: 1 }, { question: "Quel est l'ingrédient principal d'une sucette ?", answers: ["Chocolat", "Sucre", "Miel", "Sirop"], correct: 1 }, { question: "Comment appelle-t-on une sucette géante ?", answers: ["Mega-pop", "Super-sucette", "Lolly géante", "Maxi-pop"], correct: 0 }, { question: "Quelle forme ont la plupart des sucettes ?", answers: ["Carrée", "Triangulaire", "Ronde", "Ovale"], correct: 2 }, { question: "Combien de temps faut-il pour finir une sucette moyenne ?", answers: ["5 minutes", "15 minutes", "30 minutes", "1 heure"], correct: 1 }, { question: "Quelle sucette change de couleur en la léchant ?", answers: ["Rainbow pop", "Color-pop", "Magic pop", "Change-pop"], correct: 2 }, { question: "Quel animal trouve-t-on sur certaines sucettes ?", answers: ["Chat", "Chien", "Coq", "Tous"], correct: 3 }, { question: "Quelle sucette fait du bruit ?", answers: ["Whistle pop", "Sound pop", "Music pop", "Noise pop"], correct: 0 }, { question: "Dans quel film voit-on des sucettes magiques ?", answers: ["Charlie et la chocolaterie", "Harry Potter", "Shrek", "Frozen"], correct: 0 }, { question: "Quelle est la plus grosse sucette du monde ?", answers: ["1 kg", "5 kg", "10 kg", "37 kg"], correct: 3 }, { question: "Combien de saveurs peut avoir une sucette arc-en-ciel ?", answers: ["3", "5", "7", "10"], correct: 2 }, { question: "Quel goût bizarre peut avoir une sucette ?", answers: ["Pizza", "Fromage", "Poisson", "Tous"], correct: 3 }, { question: "Quelle sucette est bonne pour la gorge ?", answers: ["Au miel", "Au citron", "À l'eucalyptus", "Toutes"], correct: 3 }, { question: "Comment s'appelle le bâton de la sucette ?", answers: ["Stick", "Tige", "Bâtonnet", "Tous"], correct: 3 }, { question: "Quelle sucette peut exploser en bouche ?", answers: ["Pop rocks", "Bubble pop", "Crack pop", "Bang pop"], correct: 0 }, { question: "Dans quelle décennie les sucettes sont devenues populaires ?", answers: ["1920", "1940", "1960", "1980"], correct: 1 }, { question: "Quelle forme de sucette est la plus rigolote ?", answers: ["Dinosaure", "Voiture", "Fleur", "Toutes"], correct: 3 }, { question: "Combien coûte une sucette classique ?", answers: ["0,50€", "1€", "2€", "5€"], correct: 0 }, { question: "Quelle sucette a un goût piquant ?", answers: ["Piment", "Poivre", "Gingembre", "Toutes"], correct: 3 }, { question: "Dans quel magasin trouve-t-on le plus de sucettes ?", answers: ["Boulangerie", "Confiserie", "Supermarché", "Pharmacie"], correct: 1 }, { question: "Quelle sucette brille dans le noir ?", answers: ["Glow pop", "Fluo pop", "Light pop", "Bright pop"], correct: 0 }, { question: "Combien de sucettes mange un enfant par mois ?", answers: ["2-3", "5-6", "10-12", "15-20"], correct: 1 }, { question: "Quelle sucette a plusieurs couches ?", answers: ["Layer pop", "Multi pop", "Gobstopper", "Stack pop"], correct: 2 }, { question: "Quel est le problème avec les sucettes ?", answers: ["Caries", "Mal au ventre", "Taches", "Tous"], correct: 3 }, { question: "Quelle sucette fond le plus vite ?", answers: ["Au chocolat", "Au caramel", "Aux fruits", "À la glace"], correct: 3 }, { question: "Combien de sucettes sont vendues par jour dans le monde ?", answers: ["1 million", "10 millions", "100 millions", "1 milliard"], correct: 2 }, { question: "Quelle sucette a été inventée par accident ?", answers: ["Sucette classique", "Chupa Chups", "Dum Dum", "Blow Pop"], correct: 0 }, { question: "Dans quelle saison mange-t-on le plus de sucettes ?", answers: ["Printemps", "Été", "Automne", "Hiver"], correct: 1 }, { question: "Quelle sucette peut servir de sifflet ?", answers: ["Whistle pop", "Sound stick", "Music lolly", "Sing pop"], correct: 0 }, { question: "Combien de temps peut se conserver une sucette ?", answers: ["1 semaine", "1 mois", "6 mois", "2 ans"], correct: 3 }, { question: "Quelle est la sucette la plus célèbre ?", answers: ["Chupa Chups", "Lollipop", "Dum Dum", "Blow Pop"], correct: 0 }, { question: "Quel âge a la plus vieille sucette retrouvée ?", answers: ["50 ans", "100 ans", "500 ans", "4000 ans"], correct: 3 }, { question: "Quelle sucette a une surprise à l'intérieur ?", answers: ["Surprise pop", "Chupa Chups Melody", "Wonder Ball", "Kinder pop"], correct: 2 }, { question: "Combien de léchouilles faut-il pour finir un Chupa Chups ?", answers: ["144", "252", "364", "500"], correct: 2 }, { question: "Quelle sucette contient de la vitamine C ?", answers: ["Citron", "Orange", "Tous les agrumes", "Toutes"], correct: 2 }, { question: "Quel est le record du monde de la plus petite sucette ?", answers: ["1mm", "3mm", "5mm", "1cm"], correct: 0 }, { question: "Quelle sucette peut changer de température ?", answers: ["Ice pop", "Fire pop", "Thermo pop", "Magic temp"], correct: 2 }, { question: "Dans quel pays mange-t-on le plus de sucettes ?", answers: ["USA", "Japon", "Brésil", "Mexique"], correct: 3 }, { question: "Quelle sucette a été créée pour les astronautes ?", answers: ["Space pop", "Galaxy lolly", "Astro candy", "Zero-G pop"], correct: 0 }, { question: "Combien de sucettes peut-on faire avec 1kg de sucre ?", answers: ["50", "100", "200", "300"], correct: 1 }, { question: "Quelle sucette contient des insectes comestibles ?", answers: ["Cricket pop", "Ant lolly", "Scorpion candy", "Toutes"], correct: 3 }, { question: "Quel goût de sucette est le plus rare ?", answers: ["Bacon", "Ail", "Wasabi", "Durian"], correct: 3 }, { question: "Combien de temps faut-il pour fabriquer une sucette ?", answers: ["30 secondes", "2 minutes", "5 minutes", "10 minutes"], correct: 1 }, { question: "Quelle sucette peut servir de thermomètre ?", answers: ["Thermo pop", "Temp lolly", "Heat candy", "Fever pop"], correct: 0 }, { question: "Dans quelle usine produit-on le plus de sucettes ?", answers: ["Chupa Chups Espagne", "Perfetti Van Melle", "Tootsie Pop USA", "Haribo Allemagne"], correct: 0 }, { question: "Quelle sucette coûte le plus cher au monde ?", answers: ["Or 24 carats", "Diamant lolly", "Truffe pop", "Caviar candy"], correct: 0 }, { question: "Combien de sucettes sont jetées chaque jour ?", answers: ["1 million", "5 millions", "10 millions", "50 millions"], correct: 2 }, { question: "Quelle sucette aide à arrêter de fumer ?", answers: ["Nicotine pop", "Fresh lolly", "Stop candy", "Quit pop"], correct: 0 }, { question: "Quel animal ne peut pas manger de sucettes ?", answers: ["Chien", "Chat", "Oiseau", "Tous"], correct: 3 }, { question: "Combien de bactéries y a-t-il sur une sucette léchée ?", answers: ["1000", "10000", "100000", "1 million"], correct: 3 }, { question: "Quelle sucette contient de l'alcool ?", answers: ["Champagne pop", "Vodka lolly", "Whisky candy", "Toutes"], correct: 3 }, { question: "Dans quel musée peut-on voir des sucettes géantes ?", answers: ["Musée des bonbons", "Smithsonian", "Louvre", "British Museum"], correct: 0 }]; var oceanQuestions = [{ question: "Quel est le plus grand océan du monde ?", answers: ["Atlantique", "Indien", "Pacifique", "Arctique"], correct: 2 }, { question: "Combien d'océans y a-t-il sur Terre ?", answers: ["3", "4", "5", "6"], correct: 2 }, { question: "Quel animal est le plus gros de l'océan ?", answers: ["Requin", "Baleine bleue", "Pieuvre géante", "Raie manta"], correct: 1 }, { question: "À quelle profondeur peut-on trouver la fosse des Mariannes ?", answers: ["5000m", "8000m", "11000m", "15000m"], correct: 2 }, { question: "Quel pourcentage de la Terre est couvert par les océans ?", answers: ["50%", "60%", "70%", "80%"], correct: 2 }, { question: "Comment s'appelle le mouvement de l'eau dans l'océan ?", answers: ["Vague", "Courant", "Marée", "Tous"], correct: 3 }, { question: "Quel poisson peut voler au-dessus de l'eau ?", answers: ["Poisson-volant", "Thon", "Sardine", "Maquereau"], correct: 0 }, { question: "Quelle est la température de l'eau au fond de l'océan ?", answers: ["0°C", "4°C", "10°C", "20°C"], correct: 1 }, { question: "Combien de sel contient l'eau de mer ?", answers: ["1%", "3.5%", "7%", "10%"], correct: 1 }, { question: "Quel animal peut changer de couleur sous l'eau ?", answers: ["Poisson-clown", "Pieuvre", "Étoile de mer", "Crabe"], correct: 1 }, { question: "Comment respire un dauphin ?", answers: ["Avec des branchies", "Par la peau", "Avec des poumons", "Par la bouche"], correct: 2 }, { question: "Quelle est la vitesse d'un tsunami ?", answers: ["50 km/h", "200 km/h", "500 km/h", "800 km/h"], correct: 3 }, { question: "Combien d'espèces marines sont encore inconnues ?", answers: ["50%", "70%", "80%", "95%"], correct: 2 }, { question: "Quel requin est le plus dangereux ?", answers: ["Requin blanc", "Requin tigre", "Requin marteau", "Tous égaux"], correct: 0 }, { question: "À quelle profondeur la lumière disparaît-elle ?", answers: ["100m", "200m", "500m", "1000m"], correct: 3 }, { question: "Combien pèse une baleine bleue ?", answers: ["50 tonnes", "100 tonnes", "150 tonnes", "200 tonnes"], correct: 2 }, { question: "Quel est l'animal le plus intelligent de l'océan ?", answers: ["Dauphin", "Pieuvre", "Baleine", "Tous"], correct: 3 }, { question: "Comment les poissons voient-ils sous l'eau ?", answers: ["En noir et blanc", "En couleurs", "Flou", "Très net"], correct: 1 }, { question: "Quelle tortue vit le plus longtemps ?", answers: ["Tortue verte", "Tortue imbriquée", "Tortue luth", "Tortue caouanne"], correct: 0 }, { question: "Combien de temps peut retenir sa respiration une baleine ?", answers: ["10 minutes", "30 minutes", "1 heure", "2 heures"], correct: 3 }, { question: "Quel corail construit des récifs ?", answers: ["Corail dur", "Corail mou", "Corail noir", "Tous"], correct: 0 }, { question: "À quelle vitesse nage un thon ?", answers: ["20 km/h", "40 km/h", "70 km/h", "100 km/h"], correct: 2 }, { question: "Combien d'eau les océans contiennent-ils ?", answers: ["1 milliard de litres", "1 trillion de litres", "1 quintillion de litres", "Impossible à mesurer"], correct: 2 }, { question: "Quel animal produit des perles ?", answers: ["Huître", "Moule", "Coquille Saint-Jacques", "Toutes"], correct: 3 }, { question: "Comment les baleines communiquent-elles ?", answers: ["Par des cris", "Par des chants", "Par des gestes", "Toutes"], correct: 3 }, { question: "Quel poisson a des dents très pointues ?", answers: ["Piranha", "Barracuda", "Requin", "Tous"], correct: 3 }, { question: "À quelle profondeur vivent les poissons des abysses ?", answers: ["1000m", "2000m", "4000m", "6000m+"], correct: 3 }, { question: "Combien d'œufs pond une tortue de mer ?", answers: ["10-20", "50-100", "100-200", "200-300"], correct: 2 }, { question: "Quel mammifère marin a une défense ?", answers: ["Morse", "Narval", "Phoque", "Tous"], correct: 1 }, { question: "Comment s'appelle le bébé de la baleine ?", answers: ["Baleineau", "Petit", "Veau", "Tous"], correct: 0 }, { question: "Quelle algue peut devenir très grande ?", answers: ["Kelp", "Varech", "Fucus", "Toutes"], correct: 0 }, { question: "Combien de cœurs a une pieuvre ?", answers: ["1", "2", "3", "4"], correct: 2 }, { question: "Quel poisson peut survivre hors de l'eau ?", answers: ["Poisson-chat", "Anguille", "Mudskipper", "Tous"], correct: 3 }, { question: "À quelle température gèle l'eau de mer ?", answers: ["-2°C", "0°C", "2°C", "4°C"], correct: 0 }, { question: "Combien de plastique y a-t-il dans les océans ?", answers: ["1 million de tonnes", "8 millions de tonnes", "50 millions de tonnes", "150 millions de tonnes"], correct: 3 }, { question: "Quel est l'animal marin le plus rapide ?", answers: ["Dauphin", "Espadon", "Requin mako", "Marlins"], correct: 1 }, { question: "Combien de tentacules a une méduse ?", answers: ["4", "8", "Variable", "Infini"], correct: 2 }, { question: "Quel poisson produit de l'électricité ?", answers: ["Anguille électrique", "Raie torpille", "Poisson-chat électrique", "Tous"], correct: 3 }, { question: "À quelle profondeur vit le poisson le plus profond ?", answers: ["5000m", "7000m", "8000m", "11000m"], correct: 3 }, { question: "Combien de dents peut avoir un requin dans sa vie ?", answers: ["1000", "10000", "25000", "50000"], correct: 2 }, { question: "Quel est le plus petit poisson de l'océan ?", answers: ["Gobie nain", "Poisson-lanterne", "Anchois", "Sardine"], correct: 0 }, { question: "Combien de kilomètres parcourt une baleine par an ?", answers: ["5000 km", "15000 km", "25000 km", "50000 km"], correct: 2 }, { question: "Quel pourcentage de l'océan a été exploré ?", answers: ["5%", "20%", "50%", "80%"], correct: 0 }, { question: "Combien d'années peut vivre une tortue marine ?", answers: ["50 ans", "100 ans", "150 ans", "200 ans"], correct: 2 }, { question: "Quel animal marin a le cerveau le plus développé ?", answers: ["Dauphin", "Cachalot", "Pieuvre", "Orque"], correct: 1 }, { question: "À quelle vitesse remonte une bulle d'air dans l'océan ?", answers: ["1 m/s", "5 m/s", "10 m/s", "Variable"], correct: 3 }, { question: "Combien de litres d'eau filtre une baleine bleue par jour ?", answers: ["1000 L", "10000 L", "100000 L", "1 million L"], correct: 3 }, { question: "Quel est le prédateur du grand requin blanc ?", answers: ["Orque", "Cachalot", "Aucun", "L'homme"], correct: 0 }, { question: "Combien de plancton une baleine mange-t-elle par jour ?", answers: ["100 kg", "1 tonne", "4 tonnes", "10 tonnes"], correct: 2 }, { question: "Quel poisson peut changer de sexe ?", answers: ["Poisson-clown", "Mérou", "Labre", "Tous"], correct: 3 }, { question: "À quelle distance peut-on entendre le chant des baleines ?", answers: ["10 km", "100 km", "1000 km", "10000 km"], correct: 2 }, { question: "Combien de fois son poids une étoile de mer peut-elle régénérer ?", answers: ["1 fois", "2 fois", "5 fois", "Entièrement"], correct: 3 }, { question: "Quel est l'âge de la plus vieille créature marine ?", answers: ["200 ans", "500 ans", "1000 ans", "4000 ans"], correct: 3 }, { question: "Combien de pression subit un poisson à 10000m ?", answers: ["100 fois", "500 fois", "1000 fois", "1100 fois"], correct: 3 }, { question: "Quel pourcentage d'oxygène produit l'océan ?", answers: ["30%", "50%", "70%", "90%"], correct: 2 }]; // LIPOINTS system var lipoints = storage.lipoints || { light: 0, destiny: 0, shadow: 0, lollipop: 0, ocean: 0 }; var currentLevel = storage.currentLevel || 1; var totalLipoints = storage.totalLipoints || 0; // UI elements var levelText = new Text2('Niveau: 1', { size: 36, fill: 0xFFFFFF }); levelText.anchor.set(1, 0); levelText.x = -20; levelText.y = 20; LK.gui.topRight.addChild(levelText); var lipointsText = new Text2('', { size: 24, fill: 0xFFFFFF }); lipointsText.anchor.set(1, 0); lipointsText.y = 50; LK.gui.topRight.addChild(lipointsText); // Add custom background var backgroundImage = game.addChild(LK.getAsset('customBackground', { anchorX: 0, anchorY: 0, scaleX: 1, scaleY: 1 })); backgroundImage.x = 0; backgroundImage.y = 0; // Make sure background is behind all other elements game.setChildIndex(backgroundImage, 0); // Initialize Lisa lisa = game.addChild(new Lisa()); lisa.x = 300; lisa.y = 2000; // Create initial trees function createTree(x, y) { var tree = game.addChild(new Tree()); tree.x = x; tree.y = y; trees.push(tree); return tree; } // Create starting platform createTree(300, 2200); createTree(600, 2100); createTree(900, 2000); createTree(1200, 2150); // Bubble types var bubbleTypes = ['light', 'destiny', 'shadow', 'lollipop', 'ocean']; function createBubble() { if (bubbles.length < 3) { var randomType = bubbleTypes[Math.floor(Math.random() * bubbleTypes.length)]; var bubble = game.addChild(new PowerBubble(randomType)); bubble.x = 2200 + Math.random() * 400; bubble.y = 1800 + Math.random() * 400; bubbles.push(bubble); } } function resetLisaPosition() { lisa.x = 300; lisa.y = 2000; lisa.velocityY = 0; lisa.onGround = false; } function startChallenge(type) { if (activeChallenge) return; isPaused = true; activeChallenge = game.addChild(new Challenge(type)); activeChallenge.x = 1024; activeChallenge.y = 1366; activeChallenge.setupChallenge(); } function updateLipointsDisplay() { var displayText = 'LIPOINTS:\n'; displayText += 'Lumière: ' + lipoints.light + '\n'; displayText += 'Destin: ' + lipoints.destiny + '\n'; displayText += 'Ombre: ' + lipoints.shadow + '\n'; displayText += 'Sucettes: ' + lipoints.lollipop + '\n'; displayText += 'Océans: ' + lipoints.ocean; lipointsText.setText(displayText); // Save to storage storage.lipoints = lipoints; } function checkLevelUp() { totalLipoints = lipoints.light + lipoints.destiny + lipoints.shadow + lipoints.lollipop + lipoints.ocean; var requiredPoints = 10 * Math.pow(2, currentLevel - 1); if (totalLipoints >= requiredPoints && currentLevel < 50) { currentLevel++; levelText.setText('Niveau: ' + currentLevel); storage.currentLevel = currentLevel; storage.totalLipoints = totalLipoints; // Check for game completion if (currentLevel >= 50) { var highestType = getHighestLipointType(); LK.setTimeout(function () { LK.showYouWin(); }, 1000); } } } function getHighestLipointType() { var highest = 0; var highestType = 'light'; for (var type in lipoints) { if (lipoints[type] > highest) { highest = lipoints[type]; highestType = type; } } return highestType; } function findSuitablePlatform() { // Find a tree platform ahead of Lisa that's suitable for character placement var minX = cameraX + 1000; // Spawn ahead of current view var maxX = cameraX + 2500; // But not too far ahead var suitableTrees = []; for (var i = 0; i < trees.length; i++) { var tree = trees[i]; if (tree.x >= minX && tree.x <= maxX) { suitableTrees.push(tree); } } if (suitableTrees.length > 0) { var chosenTree = suitableTrees[Math.floor(Math.random() * suitableTrees.length)]; return { x: chosenTree.x, y: chosenTree.y - chosenTree.height / 2 - 40 // Position on top of tree }; } // Fallback to random position if no suitable trees found return { x: cameraX + 2048 + Math.random() * 200, y: 1900 + Math.random() * 300 }; } // Game controls game.down = function (x, y, obj) { if (activeChallenge) return; lisa.jump(); }; // Game update loop var treeSpawnTimer = 0; var bubbleSpawnTimer = 0; game.update = function () { if (isPaused) return; // Update camera following Lisa cameraX = lisa.x - 400; // Update background position for parallax scrolling effect if (backgroundImage) { backgroundImage.x = cameraX * 0.3; // Slower parallax movement } // Spawn trees treeSpawnTimer++; if (treeSpawnTimer > 60) { // Spawn more frequently var lastTree = trees[trees.length - 1]; var rightmostX = cameraX + 2048; // Right edge of screen // Always ensure there are trees ahead of Lisa while (!lastTree || lastTree.x < rightmostX + 800) { var newX = lastTree ? lastTree.x + 250 + Math.random() * 150 : rightmostX + 300; var newY = 1900 + Math.random() * 400; var newTree = createTree(newX, newY); lastTree = newTree; // Prevent infinite loop - maximum 3 trees per update if (trees.length > 0 && trees[trees.length - 1].x > rightmostX + 1200) break; } treeSpawnTimer = 0; } // Spawn bubbles bubbleSpawnTimer++; if (bubbleSpawnTimer > 180) { createBubble(); bubbleSpawnTimer = 0; } // Clean up off-screen trees for (var i = trees.length - 1; i >= 0; i--) { if (trees[i].x < cameraX - 300) { trees[i].destroy(); trees.splice(i, 1); } } // Clean up off-screen bubbles for (var i = bubbles.length - 1; i >= 0; i--) { if (bubbles[i].x < cameraX - 300) { bubbles[i].destroy(); bubbles.splice(i, 1); } } // Clean up off-screen characters for (var i = characters.length - 1; i >= 0; i--) { if (characters[i].x < cameraX - 300) { characters[i].destroy(); characters.splice(i, 1); } } // Clean up off-screen magic bubbles for (var i = magicBubbles.length - 1; i >= 0; i--) { if (magicBubbles[i].x < cameraX - 300) { magicBubbles[i].destroy(); magicBubbles.splice(i, 1); } } // Character spawning logic game.spawnCharacters(); }; // Initialize display updateLipointsDisplay(); levelText.setText('Niveau: ' + currentLevel); // Character spawning function game.spawnCharacters = function () { // 1. Stella - every 1000 lipoints after level 10 if (currentLevel >= 10) { var currentTotalLipoints = lipoints.light + lipoints.destiny + lipoints.shadow + lipoints.lollipop + lipoints.ocean; var stellaThreshold = Math.floor(currentTotalLipoints / 1000); if (stellaThreshold > stellaSpawnTracker && !stellaSpawned) { stellaSpawnTracker = stellaThreshold; stellaSpawned = true; game.createStella(); // Reset spawn flag when reaching next threshold LK.setTimeout(function () { stellaSpawned = false; }, 10000); // Reset after 10 seconds to ensure one spawn per threshold } } // 2. Margot - every 2 levels if (currentLevel >= 2) { var margotLevelThreshold = Math.floor(currentLevel / 2); if (margotLevelThreshold > margotSpawnCounter && !margotSpawned) { margotSpawnCounter = margotLevelThreshold; margotSpawned = true; game.createMargot(); // Reset spawn flag when level increases LK.setTimeout(function () { if (Math.floor(currentLevel / 2) > margotLevelThreshold) { margotSpawned = false; } }, 3000); } } // 3. Chafée - randomly once every 4 levels starting from level 12 if (currentLevel >= 12) { var chafeeCycle = Math.floor((currentLevel - 12) / 4); if (chafeeCycle > chafeeCurrentCycle) { chafeeCurrentCycle = chafeeCycle; chafeeSpawned = false; // Reset for new cycle } if (!chafeeSpawned && Math.random() < 0.02) { // 2% chance per update, only once per cycle chafeeSpawned = true; game.createChafee(); } } // 4. Malicia - twice every 4 levels starting from level 19 if (currentLevel >= 19) { var maliciaCycle = Math.floor((currentLevel - 19) / 4); if (maliciaCycle > maliciaCurrentCycle) { maliciaCurrentCycle = maliciaCycle; maliciaSpawnedThisCycle = 0; // Reset for new cycle } if (maliciaSpawnedThisCycle < 2 && Math.random() < 0.01) { // 1% chance per update, maximum twice per cycle maliciaSpawnedThisCycle++; game.createMalicia(); } } // 5. Twins - once every 3 levels starting from level 8 if (currentLevel >= 8) { var twinsLevelThreshold = Math.floor((currentLevel - 8) / 3); if (twinsLevelThreshold > twinsSpawnCounter && !twinsSpawned) { twinsSpawnCounter = twinsLevelThreshold; twinsSpawned = true; game.createTwins(); // Reset spawn flag when level threshold increases LK.setTimeout(function () { if (Math.floor((currentLevel - 8) / 3) > twinsLevelThreshold) { twinsSpawned = false; } }, 3000); } } // 6. Dogie - once every level if (currentLevel >= 1) { if (currentLevel > dogieSpawnCounter && !dogieSpawned) { dogieSpawnCounter = currentLevel; dogieSpawned = true; game.createDogie(); // Reset spawn flag when level increases LK.setTimeout(function () { if (currentLevel > dogieSpawnCounter) { dogieSpawned = false; } }, 3000); } } // 7. Estella - once every 3 levels starting from level 21 if (currentLevel >= 21) { var estellaLevelThreshold = Math.floor((currentLevel - 21) / 3); if (estellaLevelThreshold > estellaSpawnCounter && !estellaSpawned) { estellaSpawnCounter = estellaLevelThreshold; estellaSpawned = true; game.createEstella(); // Reset spawn flag when level threshold increases LK.setTimeout(function () { if (Math.floor((currentLevel - 21) / 3) > estellaLevelThreshold) { estellaSpawned = false; } }, 3000); } } // 8. Mazz - once every 2 levels starting from level 24 if (currentLevel >= 24) { var mazzLevelThreshold = Math.floor((currentLevel - 24) / 2); if (mazzLevelThreshold > mazzSpawnCounter && !mazzSpawned) { mazzSpawnCounter = mazzLevelThreshold; mazzSpawned = true; game.createMazz(); // Reset spawn flag when level threshold increases LK.setTimeout(function () { if (Math.floor((currentLevel - 24) / 2) > mazzLevelThreshold) { mazzSpawned = false; } }, 3000); } } }; game.createStella = function () { var stella = game.addChild(new Stella()); var position = findSuitablePlatform(); stella.x = position.x; stella.y = position.y; characters.push(stella); }; game.createMargot = function () { var margot = game.addChild(new Margot()); var position = findSuitablePlatform(); margot.x = position.x; margot.y = position.y; characters.push(margot); }; game.createChafee = function () { var chafee = game.addChild(new Chafee()); var position = findSuitablePlatform(); chafee.x = position.x; chafee.y = position.y; characters.push(chafee); }; game.createMalicia = function () { var malicia = game.addChild(new Malicia()); var position = findSuitablePlatform(); malicia.x = position.x; malicia.y = position.y; characters.push(malicia); }; game.createTwins = function () { var twins = game.addChild(new Twins()); var position = findSuitablePlatform(); twins.x = position.x; twins.y = position.y; characters.push(twins); }; game.createDogie = function () { var dogie = game.addChild(new Dogie()); var position = findSuitablePlatform(); dogie.x = position.x; dogie.y = position.y; characters.push(dogie); }; game.createEstella = function () { var estella = game.addChild(new Estella()); var position = findSuitablePlatform(); estella.x = position.x; estella.y = position.y; characters.push(estella); }; game.createMazz = function () { var mazz = game.addChild(new Mazz()); var position = findSuitablePlatform(); mazz.x = position.x; mazz.y = position.y; characters.push(mazz); }; // Start background music LK.playMusic('background'); ;
===================================================================
--- original.js
+++ change.js
@@ -561,8 +561,207 @@
isPaused = false;
};
return self;
});
+var Dogie = Container.expand(function () {
+ var self = Container.call(this);
+ var dogieGraphics = self.attachAsset('dogie', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.encountered = false;
+ self.remarks = ["Attention Lisa ! Le Chafée prépare encore une de ses blagues pourries !", "Tu savais que le Chafée collectionne les devinettes ratées ? Il en a des millions !", "Le Chafée m'a dit qu'il connaît la blague la plus nulle du monde... Je pense qu'il dit vrai !", "Méfie-toi, Lisa ! Le Chafée a encore inventé une énigme qui ne rime à rien !", "Le Chafée pense qu'il est drôle, mais même les pierres bâillent quand il raconte ses blagues !", "Tu veux entendre la pire blague du Chafée ? Non ? Tu as raison, garde tes oreilles !", "Le Chafée m'a demandé si je trouvais ses blagues amusantes... J'ai fait le mort !", "Lisa, si le Chafée te pose une devinette, prépare-toi à perdre quelques neurones !", "Le Chafée croit qu'il est un génie de l'humour... Moi je dis qu'il est un génie du ridicule !", "Attention ! Le Chafée a encore trouvé une énigme dans un paquet de céréales !", "Le Chafée m'a dit qu'il écrit un livre de blagues... Je pense qu'il devrait plutôt écrire des excuses !", "Tu sais pourquoi je n'aime pas le Chafée ? Parce que ses blagues me donnent mal aux oreilles !", "Le Chafée prétend connaître 1000 devinettes... Dommage qu'aucune ne soit drôle !", "Lisa, le Chafée va sûrement te raconter sa blague préférée... Prends tes jambes à ton cou !", "Le Chafée pense qu'il peut me faire rire avec ses énigmes... Il se trompe de planète !", "Méfie-toi du Chafée ! Il cache ses blagues pourries partout dans la forêt !", "Le Chafée m'a demandé si je voulais entendre sa nouvelle devinette... J'ai dit ouaf, c'est NON !", "Lisa, le Chafée collectionne aussi les mauvaises blagues qu'il n'a pas encore inventées !", "Le Chafée croit qu'il est le roi de l'humour... Moi je dis qu'il est plutôt le roi des nouilles !", "Attention ! Le Chafée prépare encore un de ses quiz impossibles !", "Le Chafée m'a dit qu'il avait une devinette géniale... Je lui ai dit d'aller voir un docteur !", "Tu veux savoir le secret du Chafée ? Il invente ses blagues en dormant... Et ça se voit !", "Lisa, si le Chafée te demande ton avis sur ses blagues, dis-lui que tu es muette !", "Le Chafée pense qu'il va devenir célèbre avec ses énigmes... Célèbre pour les mauvaises raisons !", "Méfie-toi ! Le Chafée a encore lu un livre de devinettes pour enfants de 3 ans !", "Le Chafée m'a proposé de devenir son assistant... J'ai préféré rester avec ma dignité !", "Lisa, le Chafée va te dire qu'il connaît LA blague du siècle... Ne l'écoute pas, il ment !", "Le Chafée croit que ses énigmes sont mystérieuses... Elles sont surtout incompréhensibles !", "Attention ! Le Chafée a trouvé de nouvelles devinettes dans un magazine de 1982 !", "Le Chafée m'a dit qu'il allait révolutionner l'humour... J'ai dit qu'il ferait mieux de commencer par l'apprendre !", "Lisa, le Chafée va sûrement te poser une énigme sur les chaussettes... C'est son truc bizarre !", "Le Chafée pense qu'il est plus malin que moi... Mais même une sardine est plus drôle que lui !", "Méfie-toi du Chafée ! Il cache ses blagues ratées sous les feuilles mortes !", "Le Chafée m'a demandé si je connaissais une bonne blague... Je lui ai dit de se regarder dans un miroir !", "Lisa, le Chafée collectionne les devinettes comme moi je collectionne les os... Mais au moins mes os sont utiles !", "Le Chafée croit qu'il peut m'impressionner avec ses énigmes... Il ferait mieux d'essayer avec une méduse !", "Attention ! Le Chafée prépare encore une de ses questions sans réponse logique !", "Le Chafée m'a dit qu'il était le maître des devinettes... Je lui ai dit qu'il était plutôt le maître des catastrophes !", "Lisa, si le Chafée te propose un duel de blagues, cours plus vite que moi quand je vois le vétérinaire !", "Le Chafée pense que ses énigmes sont profondes... Elles sont surtout profondément ennuyeuses !", "Méfie-toi ! Le Chafée a encore inventé une devinette en mélangeant deux blagues ratées !", "Le Chafée m'a proposé de tester ses nouvelles énigmes... J'ai préféré aller chez le toiletteur !", "Lisa, le Chafée va te dire qu'il connaît le secret de l'humour... Son secret c'est de ne pas en avoir !", "Le Chafée croit qu'il peut me rendre fou avec ses devinettes... Il y est presque arrivé !", "Attention ! Le Chafée a trouvé un livre de blagues dans une poubelle... Et ça se sent !", "Le Chafée m'a demandé mon avis sur sa dernière énigme... Je lui ai dit qu'elle était parfaite... pour faire fuir les mouches !", "Lisa, le Chafée va sûrement te raconter l'histoire de la blague qui n'a pas de fin... Comme toutes les siennes !", "Le Chafée pense qu'il est l'Einstein de l'humour... Moi je pense qu'il est plutôt l'Einstein de la bêtise !", "Méfie-toi du Chafée ! Il prépare encore une énigme à base de fromage qui pue !", "Le Chafée m'a dit qu'il allait m'apprendre l'humour... Je lui ai dit que j'étais allergique !", "Lisa, le Chafée collectionne les devinettes comme moi je collectionne les puces... En moins utile !", "Le Chafée croit qu'il peut m'émouvoir avec ses blagues... Il m'émeut... de pitié !", "Attention ! Le Chafée a encore mélangé une devinette avec une recette de cuisine !", "Le Chafée m'a proposé d'écrire un livre ensemble... 'Les pires blagues du monde' ça vous dit ?", "Lisa, si le Chafée te demande de deviner quelque chose, dis-lui que tu devines qu'il va dire n'importe quoi !", "Le Chafée pense que ses énigmes sont des œuvres d'art... Des œuvres d'art moderne très très moderne !", "Méfie-toi ! Le Chafée a encore trouvé une devinette dans un paquet de chips vide !", "Le Chafée m'a dit qu'il connaissait la réponse à tout... Sauf à la question 'Comment être drôle ?' !", "Lisa, le Chafée va te poser une énigme sur les escargots... C'est son obsession du moment !", "Le Chafée croit qu'il peut me faire pleurer de rire... Il me fait pleurer c'est sûr, mais pas de rire !", "Attention ! Le Chafée prépare encore une de ses devinettes à rallonge sans queue ni tête !", "Le Chafée m'a demandé si j'aimais les surprises... Je lui ai dit que ses blagues m'avaient vacciné contre !", "Lisa, le Chafée va sûrement te dire qu'il a inventé l'humour... Ne le crois pas, il a juste inventé l'anti-humour !", "Le Chafée pense qu'il est le plus drôle de la forêt... Il a raison : il est tellement pas drôle que c'en est drôle !", "Méfie-toi du Chafée ! Il cache ses énigmes ratées dans des boîtes à chaussures !", "Le Chafée m'a proposé de devenir son public... J'ai dit que j'étais déjà occupé à être un chien !", "Lisa, le dernier conseil de Dogie : si le Chafée commence une phrase par 'Tu connais celle-là ?', cours très très vite !"];
+ self.update = function () {
+ self.x -= scrollSpeed;
+ // Check collision with Lisa
+ if (!self.encountered && self.intersects(lisa)) {
+ self.encountered = true;
+ self.startDialogue();
+ }
+ };
+ self.startDialogue = function () {
+ isPaused = true;
+ // Choose a random remark
+ var randomRemark = self.remarks[Math.floor(Math.random() * self.remarks.length)];
+ // Create dialogue UI
+ self.dialogueContainer = game.addChild(new Container());
+ self.dialogueContainer.x = 1024;
+ self.dialogueContainer.y = 1366;
+ // Background
+ var bg = self.dialogueContainer.addChild(LK.getAsset('challengeBox', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.3,
+ scaleY: 0.8
+ }));
+ bg.alpha = 0.9;
+ bg.tint = 0x8B4513; // Brown color for dog
+ // Title
+ var titleText = self.dialogueContainer.addChild(new Text2('Dogie - Le Chien Anti-Chafée', {
+ size: 32,
+ fill: 0xFFFFFF
+ }));
+ titleText.anchor.set(0.5, 0.5);
+ titleText.y = -120;
+ // Dialogue text
+ self.dialogueText = self.dialogueContainer.addChild(new Text2(randomRemark, {
+ size: 30,
+ fill: 0xFFFFFF
+ }));
+ self.dialogueText.anchor.set(0.5, 0.5);
+ self.dialogueText.y = -20;
+ // OK button
+ self.okButton = self.dialogueContainer.addChild(new Container());
+ self.okButton.x = 0;
+ self.okButton.y = 80;
+ var okBg = self.okButton.addChild(LK.getAsset('challengeBox', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.3,
+ scaleY: 0.15
+ }));
+ okBg.tint = 0x32CD32;
+ var okText = self.okButton.addChild(new Text2('OK', {
+ size: 26,
+ fill: 0x000000
+ }));
+ okText.anchor.set(0.5, 0.5);
+ self.okButton.down = function () {
+ self.closeDialogue();
+ };
+ };
+ self.closeDialogue = function () {
+ if (self.dialogueContainer) {
+ self.dialogueContainer.destroy();
+ }
+ isPaused = false;
+ self.destroy();
+ characters.splice(characters.indexOf(self), 1);
+ };
+ return self;
+});
+var Estella = Container.expand(function () {
+ var self = Container.call(this);
+ var estellaGraphics = self.attachAsset('estella', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.encountered = false;
+ self.update = function () {
+ self.x -= scrollSpeed;
+ // Check collision with Lisa
+ if (!self.encountered && self.intersects(lisa)) {
+ self.encountered = true;
+ self.startPowerChoice();
+ }
+ };
+ self.startPowerChoice = function () {
+ isPaused = true;
+ // Create choice UI
+ self.choiceContainer = game.addChild(new Container());
+ self.choiceContainer.x = 1024;
+ self.choiceContainer.y = 1366;
+ // Background
+ var bg = self.choiceContainer.addChild(LK.getAsset('challengeBox', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.2,
+ scaleY: 1.0
+ }));
+ bg.alpha = 0.9;
+ bg.tint = 0x9370DB; // Purple color for Estella
+ // Title
+ var titleText = self.choiceContainer.addChild(new Text2('Estella - Dresseuse de Pouvoirs', {
+ size: 32,
+ fill: 0xFFD700
+ }));
+ titleText.anchor.set(0.5, 0.5);
+ titleText.y = -150;
+ // Instructions
+ var instructText = self.choiceContainer.addChild(new Text2('Je t\'offre 50 LIPOINTS de poussière d\'étoiles !\nChoisis le type de pouvoir à renforcer :', {
+ size: 28,
+ fill: 0xFFFFFF
+ }));
+ instructText.anchor.set(0.5, 0.5);
+ instructText.y = -80;
+ // Create choice buttons for each LIPOINT type
+ var choices = [{
+ type: 'light',
+ name: 'Lumière',
+ color: 0xFFFF00
+ }, {
+ type: 'destiny',
+ name: 'Destin',
+ color: 0x9370DB
+ }, {
+ type: 'shadow',
+ name: 'Ombre',
+ color: 0x2F4F4F
+ }, {
+ type: 'lollipop',
+ name: 'Sucettes',
+ color: 0xFF69B4
+ }, {
+ type: 'ocean',
+ name: 'Océans',
+ color: 0x1E90FF
+ }];
+ for (var i = 0; i < choices.length; i++) {
+ var choice = choices[i];
+ var buttonContainer = self.choiceContainer.addChild(new Container());
+ buttonContainer.x = 0;
+ buttonContainer.y = -20 + i * 40;
+ buttonContainer.choiceType = choice.type;
+ var buttonBg = buttonContainer.addChild(LK.getAsset('challengeBox', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 0.8,
+ scaleY: 0.15
+ }));
+ buttonBg.tint = choice.color;
+ buttonBg.alpha = 0.8;
+ var buttonText = buttonContainer.addChild(new Text2(choice.name + ' (+50)', {
+ size: 26,
+ fill: 0x000000
+ }));
+ buttonText.anchor.set(0.5, 0.5);
+ buttonContainer.down = function (x, y, obj) {
+ this.alpha = 0.7;
+ var container = this;
+ LK.setTimeout(function () {
+ container.alpha = 1;
+ }, 100);
+ self.grantPower(container.choiceType);
+ };
+ }
+ };
+ self.grantPower = function (chosenType) {
+ // Give 50 LIPOINTS of chosen type
+ lipoints[chosenType] += 50;
+ updateLipointsDisplay();
+ checkLevelUp();
+ // Show confirmation message
+ var confirmText = self.choiceContainer.addChild(new Text2('Parfait ! Tu as reçu 50 LIPOINTS de ' + chosenType + ' !', {
+ size: 28,
+ fill: 0x00FF00
+ }));
+ confirmText.anchor.set(0.5, 0.5);
+ confirmText.y = 120;
+ LK.getSound('success').play();
+ LK.setTimeout(function () {
+ self.closeChoice();
+ }, 3000);
+ };
+ self.closeChoice = function () {
+ if (self.choiceContainer) {
+ self.choiceContainer.destroy();
+ }
+ isPaused = false;
+ self.destroy();
+ characters.splice(characters.indexOf(self), 1);
+ };
+ return self;
+});
var Lisa = Container.expand(function () {
var self = Container.call(this);
var lisaGraphics = self.attachAsset('lisa', {
anchorX: 0.5,
@@ -757,8 +956,85 @@
});
};
return self;
});
+var Mazz = Container.expand(function () {
+ var self = Container.call(this);
+ var mazzGraphics = self.attachAsset('mazz', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.encountered = false;
+ self.update = function () {
+ self.x -= scrollSpeed;
+ // Check collision with Lisa
+ if (!self.encountered && self.intersects(lisa)) {
+ self.encountered = true;
+ self.breatheFire();
+ }
+ };
+ self.breatheFire = function () {
+ // Choose random LIPOINT type to burn
+ var burnableTypes = [];
+ for (var type in lipoints) {
+ if (lipoints[type] > 0) {
+ burnableTypes.push(type);
+ }
+ }
+ if (burnableTypes.length === 0) {
+ // No LIPOINTS to burn
+ self.showMessage('Mazz crache du feu mais tu n\'as pas de LIPOINTS à brûler !');
+ } else {
+ var randomType = burnableTypes[Math.floor(Math.random() * burnableTypes.length)];
+ var stolenAmount = Math.min(30, lipoints[randomType]);
+ lipoints[randomType] -= stolenAmount;
+ updateLipointsDisplay();
+ var typeName = randomType === 'light' ? 'lumière' : randomType === 'destiny' ? 'destin' : randomType === 'shadow' ? 'ombre' : randomType === 'lollipop' ? 'sucettes' : 'océans';
+ self.showMessage('Mazz s\'amuse à cracher du feu ! Il a brûlé ' + stolenAmount + ' LIPOINTS de ' + typeName + ' par accident !');
+ }
+ LK.setTimeout(function () {
+ self.destroy();
+ characters.splice(characters.indexOf(self), 1);
+ }, 10000);
+ };
+ self.showMessage = function (message) {
+ var messageContainer = game.addChild(new Container());
+ messageContainer.x = lisa.x;
+ messageContainer.y = lisa.y - 100;
+ var messageBg = messageContainer.addChild(LK.getAsset('challengeBox', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ scaleX: 1.0,
+ scaleY: 0.3
+ }));
+ messageBg.tint = 0xFF4500; // Orange-red for fire
+ messageBg.alpha = 0.9;
+ var messageText = messageContainer.addChild(new Text2(message, {
+ size: 28,
+ fill: 0xFFFFFF
+ }));
+ messageText.anchor.set(0.5, 0.5);
+ // Add fire effect animation
+ tween(messageBg, {
+ scaleX: 1.1,
+ scaleY: 0.35
+ }, {
+ duration: 500,
+ easing: tween.easeInOut
+ });
+ tween(messageBg, {
+ scaleX: 1.0,
+ scaleY: 0.3
+ }, {
+ duration: 500,
+ easing: tween.easeInOut
+ });
+ LK.setTimeout(function () {
+ messageContainer.destroy();
+ }, 10000);
+ };
+ return self;
+});
var PowerBubble = Container.expand(function (type) {
var self = Container.call(this);
var bubbleAsset = type + 'Bubble';
var bubbleGraphics = self.attachAsset(bubbleAsset, {
@@ -1277,8 +1553,15 @@
var maliciaSpawnedThisCycle = 0;
var maliciaCurrentCycle = -1;
var twinsSpawnCounter = 0;
var twinsSpawned = false;
+// New character spawn tracking
+var dogieSpawnCounter = 0;
+var dogieSpawned = false;
+var estellaSpawnCounter = 0;
+var estellaSpawned = false;
+var mazzSpawnCounter = 0;
+var mazzSpawned = false;
// Scrolling
var scrollSpeed = 3;
var cameraX = 0;
// Quiz questions databases in French
@@ -2191,8 +2474,52 @@
}
}, 3000);
}
}
+ // 6. Dogie - once every level
+ if (currentLevel >= 1) {
+ if (currentLevel > dogieSpawnCounter && !dogieSpawned) {
+ dogieSpawnCounter = currentLevel;
+ dogieSpawned = true;
+ game.createDogie();
+ // Reset spawn flag when level increases
+ LK.setTimeout(function () {
+ if (currentLevel > dogieSpawnCounter) {
+ dogieSpawned = false;
+ }
+ }, 3000);
+ }
+ }
+ // 7. Estella - once every 3 levels starting from level 21
+ if (currentLevel >= 21) {
+ var estellaLevelThreshold = Math.floor((currentLevel - 21) / 3);
+ if (estellaLevelThreshold > estellaSpawnCounter && !estellaSpawned) {
+ estellaSpawnCounter = estellaLevelThreshold;
+ estellaSpawned = true;
+ game.createEstella();
+ // Reset spawn flag when level threshold increases
+ LK.setTimeout(function () {
+ if (Math.floor((currentLevel - 21) / 3) > estellaLevelThreshold) {
+ estellaSpawned = false;
+ }
+ }, 3000);
+ }
+ }
+ // 8. Mazz - once every 2 levels starting from level 24
+ if (currentLevel >= 24) {
+ var mazzLevelThreshold = Math.floor((currentLevel - 24) / 2);
+ if (mazzLevelThreshold > mazzSpawnCounter && !mazzSpawned) {
+ mazzSpawnCounter = mazzLevelThreshold;
+ mazzSpawned = true;
+ game.createMazz();
+ // Reset spawn flag when level threshold increases
+ LK.setTimeout(function () {
+ if (Math.floor((currentLevel - 24) / 2) > mazzLevelThreshold) {
+ mazzSpawned = false;
+ }
+ }, 3000);
+ }
+ }
};
game.createStella = function () {
var stella = game.addChild(new Stella());
var position = findSuitablePlatform();
@@ -2227,7 +2554,28 @@
twins.x = position.x;
twins.y = position.y;
characters.push(twins);
};
+game.createDogie = function () {
+ var dogie = game.addChild(new Dogie());
+ var position = findSuitablePlatform();
+ dogie.x = position.x;
+ dogie.y = position.y;
+ characters.push(dogie);
+};
+game.createEstella = function () {
+ var estella = game.addChild(new Estella());
+ var position = findSuitablePlatform();
+ estella.x = position.x;
+ estella.y = position.y;
+ characters.push(estella);
+};
+game.createMazz = function () {
+ var mazz = game.addChild(new Mazz());
+ var position = findSuitablePlatform();
+ mazz.x = position.x;
+ mazz.y = position.y;
+ characters.push(mazz);
+};
// Start background music
LK.playMusic('background');
;
\ No newline at end of file
Fée. In-Game asset. 2d. High contrast. No shadows
Arbre magique rose. In-Game asset. 2d. High contrast. No shadows
Bulle de lumière. In-Game asset. 2d. High contrast. No shadows
Bulle du destin. In-Game asset. 2d. High contrast. No shadows
Bulle de l'ombre. In-Game asset. 2d. High contrast. No shadows
Bulle de sucette. In-Game asset. 2d. High contrast. No shadows
Bulle de l'océan. In-Game asset. 2d. High contrast. No shadows
Lampe torche. In-Game asset. 2d. High contrast. No shadows
Fond écran sucette. In-Game asset. 2d. High contrast. No shadows
Fond d'écran monde féerique. In-Game asset. 2d. High contrast. No shadows
flèche. In-Game asset. 2d. High contrast. No shadows
Fée stella. In-Game asset. 2d. High contrast. No shadows
Fée margot. In-Game asset. 2d. High contrast. No shadows
Chat fée. In-Game asset. 2d. High contrast. No shadows
La sorcière Malicia. In-Game asset. 2d. High contrast. No shadows
Petite fille soeurs jumelles. In-Game asset. 2d. High contrast. No shadows
Bulle magique de mystère. In-Game asset. 2d. High contrast. No shadows
Mazz le dragon. In-Game asset. 2d. High contrast. No shadows
Chien avec des ailes de fée. In-Game asset. 2d. High contrast. No shadows
Estella la dresseuse de pouvoirs. In-Game asset. 2d. High contrast. No shadows