User prompt
Ajoute ces nouveaux personnages au jeu "feĢe Lisa" : 1) Dogie -- le chien anti-chafeĢe -> apparition : une seule fois tout les niveaux Dogie est un ennemi du chafeĢe , qui apparaiĢt souvent pour faire des remarques droĢles et piquantes aĢ propos du chafeĢe ou preĢvenir lisa (le joueur) du comportement farceur du chafeĢe, Dogie apparaiĢt sur les plateformes d'arbres roses, puis quand lisa entre en collision avec lui, Un eĢcran de dialogue s'ouvre, dans lequel Dogie parle a lisa , Le message de Dogie est aleĢ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 droĢle et piquante a propos de son ennemis le chafeĢ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 feĢes ! Quand lisa entre en collision avec elle, Estella lui donnera de la poussieĢre de bulle d'eĢtoiles, ce qui implique que Estella donnera au joueur 50 LIPOINTS d'un type que le joueur aura choisis, Un eĢ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 disparaiĢ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 apparaiĢt sur les plateformes d'arbres roses, Et quand lisa entre en collision avec lui, Mazz lui vole 30 LIPOINTS d'un type aleĢatoire (de façon involontaire car mazz aime s'amuser aĢ cracher du jeu, ce qui brulle certains LIPOINTS au passage), un message s'affiche dans lequel le jeu preĢviens le joueur des LIPOINTS perdus et de ce qu'a fait mazz, le message disparaiĢ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 aĢ lire et moins petits
User prompt
Ajoute 30 autres questions possibles pour les jumelles, 40 autres devinette possibles ridicules pour le chafeĢe et 33 nouvelles propheĢtie chelou possible de Malicia
User prompt
Fait en sorte que les personnages fassent reĢellement tout ce que j'ai deĢcrit dans les conditions que j'ai deĢ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 speĢcifieĢ !!!
User prompt
Regles les probleĢmes et fait en sorte que Margot et les autres personnages apparaissent sur les plateformes en eĢtant de la meĢ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 FeĢe Lisa (ils apparaissent sur les plateformes sous certaines conditions et offrent leurs propres Cadeaux ou deĢfis) : 1) la feĢe Stella - la guide eĢtoileĢe ---> apparition sur les plateformes : une fois tout les 1000 lipoints collecteĢe apreĢs le niveau 10, lisa (le joueur), doit alors choisir entre deux chemins seĢpareĢs diffeĢrents sur la plateforme des arbres roses, une bulle magique de mysteĢre d'eĢtoile se situe sur un arbre de chacun des deux chemins, quand lisa (le joueur), choisit son chemin en appuyant sur une des fleĢches qui pointent vers chaque chemin, et quand lisa rentre en collision avec la bulle magique de mysteĢre d'eĢtoile d'un des deux chemins, le joueur gagne aleĢatoirement entre 20 et 50 LIPOINTS d'un type aleĢatoire , le jeu envoie un message informant le joueur de ce qu'il a gagner, ce message disparaiĢt au bout de 5 secondes 2) la feĢ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 aleĢatoire au joueur ! Le jeu affiche un message tenant au courant le joueur du type de LIPOINTS que Margot lui a offert , le message disparaiĢt au bout de 5 secondes! 3) Le ChafeĢe - le chat malicieux blagueurs des feĢes ---> Apparition : aleĢ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 chafeĢe, le chafeĢe lui pose une question de devinette ridicule, si le joueur reĢpond correctement, le chafeĢe lui offre un cadeau et le joueur gagne 40 LIPOINTS de n'importe quel type! Mais si le joueur reĢpond mal aĢ la devinette, le chafeĢe lui vole aleĢatoirement 15 LIPOINTS du destin ou 20 LIPOINTS des sucettes (selon son envie du moment mdr) 4) La sorcieĢ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 eĢ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 termineĢ, le joueur appuie sur ok, l'eĢcran de dialogue disparaiĢt et Malicia s'en va , lisa peut continuer sa route! 5) les jumelles humaines lylou et Sandra - deux enfants eĢmerveilleĢs par le monde des feĢes, elles te poseront des questions auxquelles tu devra reĢpondre sinceĢrement --> Apparition : une seule fois tout les 3 niveaux a partir du niveau 8, Quand lisa entre en collision avec les jumelles, un eĢcran sous forme de quizz, dans lequel les jumelles posent des questions s'ouvrira, et le joueur devra reĢpondre aux questions, Si le joueur fait une mauvais reĢponse, les jumelles en poseront toujours une plus dure, et cela jusqu'aĢ que le joueur reĢponde correctement aĢ la plus compliqueĢ deĢs questions (lol), Si le joueur reĢpond correctement aĢ la question, les jumelles le laisseront tranquille et lui offrirons meĢ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 deĢfis!
User prompt
Je veux personnaliseĢ le fond du jeu avec mon propre asset
User prompt
Fait en sorte que de nouveaux arbres soient toujours geĢneĢrer quand la feĢe avance
User prompt
Au pire ajoute des petits boutons de choix pour les quizz pour que le joueur choisisse la reĢponse quand il clique dessus
User prompt
Regles les probleĢme lieĢ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 probleĢme lieĢs au quizz
User prompt
Regles les problemes lieĢ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 diffeĢrente de chaque type dans le jeu, et que la question a laquelle le joueur doit reĢpondre est tireĢ au hasard a chaque fois, et ajoute aussi le systeĢme de niveau dans L'ui
Code edit (1 edits merged)
Please save this source code
User prompt
FeĢe Lisa - Magical Power Discovery
Initial prompt
CreĢe mon jeu "FeĢe Lisa", c'est un jeu destineĢ, dans lequel le joueur doit aider une feĢe (la feĢe Lisa), aĢ deĢcouvrir ses pouvoirs et rejoindre le monde des feĢes ! Voici la description des meĢcaniques, du gameplay et de comment se preĢsente le jeu : Le jeu est un jeu de plateforme (avec la plateforme qui avance fur a mesure que le joueur et sa feĢe avance sur la plateforme), Les plateformes repreĢsentent le monde vaste du monde des feĢes, la feĢe Lisa saute sur les plateformes (des arbres magiques roses), Le joueur deĢplace lisa d'un arbre a un autre en appuyant sur l'arbre ouĢ il veut que lisa se deĢplace, Des eĢleĢments de pouvoirs aleĢatoire apparaissent aleĢatoirement sur les arbres (bulles de lumieĢres, bulles du destin, bulles de l'ombre, bulles des sucettes, bulles des oceĢ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 deĢfis de test de pouvoir sont a faire : Pour les bulles de lumieĢres, le joueur doit faire en sorte que lisa reĢussisse a allumeĢ une lumieĢre juste par la force de sa penseĢe, En appuyant de façon reĢpeĢteĢe sur une icoĢne de lampe, Mais il y a seulement 30% de chance d'allumer avec succeĢs la lampe aĢ chaque appuie et lisa ne peut essayer seulement 3 fois par bulle de lumieĢre, si elle eĢchoue au bout de 3 essais, le joueur devra continuer la route sans gagner de points, car lisa n'aura pas trouveĢ son pouvoir !, Mais si elle reĢussit, le joueur gagne 5 LIPOINTS de lumieĢre (points qui servent aĢ lisa pour deĢcouvrir son pouvoir final et au joueur de monter en niveau), Pour les bulles du destin, c'est le meĢme principe, lorsque lisa entre en collision avec une bulle du destin, le joueur doit reĢpondre a une question simple de quizz sur la preĢdiction du destin d'un enfant de 5 ans (une question de preĢdiction aleĢatoire parmi 30 questions de preĢdiction diffeĢrentes disponibles dans le jeu), Si le joueur reĢpond correctement aĢ la preĢdiction, Il gagne 5 LIPOINTS du destin, et continue son aventure, Si le joueur reĢpond mal aĢ la preĢdiction (mauvaise reĢ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 reĢpeĢteĢe sur une icoĢne de soleil, le but est d'eĢteindre la lumieĢre ! Lisa n'a que 30% de chance d'eĢteindre la lumieĢre aĢ 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'eĢteint pas, le joueur et lisa continuent leur aventure sans gagner de LIPOINTS de l'ombre!, Mais si la lumieĢre est eĢteinte avec succeĢs, lisa et le joueur gagnent 5 LIPOINTS de l'ombre! MeĢme principe pour les bulles des sucettes, faut entrer en collision avec une bulle de sucette, puis reĢpondre aĢ une question de quizz sur les sucettes tire aleĢatoirement parmi une base de donneĢes de 35 questions sur les sucettes, si le joueur reĢpond correctement aĢ la question de quizz, il gagne 5 LIPOINTS des sucettes et continue son aventure avec lisa, S'il reĢpond mal, il continue son aventure mais ne gagne aucun LIPOINTS des sucettes Pour les bulles des oceĢans, meĢme principe, sauf qu'il doit reĢpondre a une question de culture geĢneĢrale sur les oceĢans au lieu de quizz sur les sucettes ! S'il reĢpond correctement, il gagne 5 LIPOINTS des oceĢans, Puis continue son aventure, S'il reĢpond mal, il continue son aventure sans rien, Il y a un systeĢ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 supeĢrieur double par rapport au niveau preĢceĢdent !, Le jeu se finit au niveau 50 , avec la deĢcouverte du pouvoir de lisa (Le pouvoir final est le pouvoir pour lequel le joueur a collecteĢ le plus de LIPOINTS) Le nombre de LIPOINTS de chaque type posseĢder par le joueur doit eĢtre afficheĢ dans L'ui
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ 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('Light Challenge'); self.instructionText.setText('Tap to light the lamps with willpower!'); // 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('Destiny Challenge'); var questions = ['What guides your path?', 'What is your greatest strength?', 'What do you seek most?']; var randomQuestion = questions[Math.floor(Math.random() * questions.length)]; self.instructionText.setText(randomQuestion + '\nTap to answer with your heart!'); }; self.setupShadowChallenge = function () { self.titleText.setText('Shadow Challenge'); self.instructionText.setText('Dim the bright sun with shadow magic!\nTap to cast shadows!'); }; self.setupLollipopChallenge = function () { self.titleText.setText('Lollipop Challenge'); var questions = ['What brings you joy?', 'What makes you smile?', 'What is your favorite treat?']; var randomQuestion = questions[Math.floor(Math.random() * questions.length)]; self.instructionText.setText(randomQuestion + '\nTap to share your sweetness!'); }; self.setupOceanChallenge = function () { self.titleText.setText('Ocean Challenge'); self.instructionText.setText('Feel the flow of ocean magic!\nTap to create waves!'); }; self.down = function (x, y, obj) { if (!self.isActive) return; self.attempts++; var success = false; // 30% success rate for action challenges if (self.challengeType === 'light' || self.challengeType === 'shadow' || self.challengeType === 'ocean') { success = Math.random() < 0.3; } else { // Quiz questions have 50% success rate success = Math.random() < 0.5; } if (success) { self.onSuccess(); } else { self.onFailure(); } }; self.onSuccess = function () { self.resultText.setText('Success! +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.attempts >= self.maxAttempts) { self.resultText.setText('Challenge Failed!'); self.resultText.fill = "#FF0000"; LK.getSound('fail').play(); LK.setTimeout(function () { self.closeChallenge(); }, 2000); } else { self.resultText.setText('Try again! (' + (self.maxAttempts - self.attempts) + ' attempts left)'); self.resultText.fill = "#FFFF00"; } }; self.closeChallenge = function () { self.isActive = false; activeChallenge = null; self.destroy(); isPaused = false; }; 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 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 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; }); /**** * 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; // Scrolling var scrollSpeed = 3; var cameraX = 0; // 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('Level: 1', { size: 36, fill: 0xFFFFFF }); levelText.anchor.set(0, 0); 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); // 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 += 'Light: ' + lipoints.light + '\n'; displayText += 'Destiny: ' + lipoints.destiny + '\n'; displayText += 'Shadow: ' + lipoints.shadow + '\n'; displayText += 'Lollipop: ' + lipoints.lollipop + '\n'; displayText += 'Ocean: ' + 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('Level: ' + 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; } // 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; // Spawn trees treeSpawnTimer++; if (treeSpawnTimer > 120) { var lastTree = trees[trees.length - 1]; if (lastTree && lastTree.x < cameraX + 2400) { var newX = lastTree.x + 300 + Math.random() * 200; var newY = 1900 + Math.random() * 400; createTree(newX, newY); } 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); } } }; // Initialize display updateLipointsDisplay(); levelText.setText('Level: ' + currentLevel);
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,391 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+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('Light Challenge');
+ self.instructionText.setText('Tap to light the lamps with willpower!');
+ // 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('Destiny Challenge');
+ var questions = ['What guides your path?', 'What is your greatest strength?', 'What do you seek most?'];
+ var randomQuestion = questions[Math.floor(Math.random() * questions.length)];
+ self.instructionText.setText(randomQuestion + '\nTap to answer with your heart!');
+ };
+ self.setupShadowChallenge = function () {
+ self.titleText.setText('Shadow Challenge');
+ self.instructionText.setText('Dim the bright sun with shadow magic!\nTap to cast shadows!');
+ };
+ self.setupLollipopChallenge = function () {
+ self.titleText.setText('Lollipop Challenge');
+ var questions = ['What brings you joy?', 'What makes you smile?', 'What is your favorite treat?'];
+ var randomQuestion = questions[Math.floor(Math.random() * questions.length)];
+ self.instructionText.setText(randomQuestion + '\nTap to share your sweetness!');
+ };
+ self.setupOceanChallenge = function () {
+ self.titleText.setText('Ocean Challenge');
+ self.instructionText.setText('Feel the flow of ocean magic!\nTap to create waves!');
+ };
+ self.down = function (x, y, obj) {
+ if (!self.isActive) return;
+ self.attempts++;
+ var success = false;
+ // 30% success rate for action challenges
+ if (self.challengeType === 'light' || self.challengeType === 'shadow' || self.challengeType === 'ocean') {
+ success = Math.random() < 0.3;
+ } else {
+ // Quiz questions have 50% success rate
+ success = Math.random() < 0.5;
+ }
+ if (success) {
+ self.onSuccess();
+ } else {
+ self.onFailure();
+ }
+ };
+ self.onSuccess = function () {
+ self.resultText.setText('Success! +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.attempts >= self.maxAttempts) {
+ self.resultText.setText('Challenge Failed!');
+ self.resultText.fill = "#FF0000";
+ LK.getSound('fail').play();
+ LK.setTimeout(function () {
+ self.closeChallenge();
+ }, 2000);
+ } else {
+ self.resultText.setText('Try again! (' + (self.maxAttempts - self.attempts) + ' attempts left)');
+ self.resultText.fill = "#FFFF00";
+ }
+ };
+ self.closeChallenge = function () {
+ self.isActive = false;
+ activeChallenge = null;
+ self.destroy();
+ isPaused = false;
+ };
+ 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 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 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;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var lisa;
+var trees = [];
+var bubbles = [];
+var activeChallenge = null;
+var isPaused = false;
+// Scrolling
+var scrollSpeed = 3;
+var cameraX = 0;
+// 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('Level: 1', {
+ size: 36,
+ fill: 0xFFFFFF
+});
+levelText.anchor.set(0, 0);
+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);
+// 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 += 'Light: ' + lipoints.light + '\n';
+ displayText += 'Destiny: ' + lipoints.destiny + '\n';
+ displayText += 'Shadow: ' + lipoints.shadow + '\n';
+ displayText += 'Lollipop: ' + lipoints.lollipop + '\n';
+ displayText += 'Ocean: ' + 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('Level: ' + 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;
+}
+// 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;
+ // Spawn trees
+ treeSpawnTimer++;
+ if (treeSpawnTimer > 120) {
+ var lastTree = trees[trees.length - 1];
+ if (lastTree && lastTree.x < cameraX + 2400) {
+ var newX = lastTree.x + 300 + Math.random() * 200;
+ var newY = 1900 + Math.random() * 400;
+ createTree(newX, newY);
+ }
+ 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);
+ }
+ }
+};
+// Initialize display
+updateLipointsDisplay();
+levelText.setText('Level: ' + currentLevel);
\ No newline at end of file
FeĢe. In-Game asset. 2d. High contrast. No shadows
Arbre magique rose. In-Game asset. 2d. High contrast. No shadows
Bulle de lumieĢ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'oceĢan. In-Game asset. 2d. High contrast. No shadows
Lampe torche. In-Game asset. 2d. High contrast. No shadows
Fond eĢcran sucette. In-Game asset. 2d. High contrast. No shadows
Fond d'eĢcran monde feĢerique. In-Game asset. 2d. High contrast. No shadows
fleĢche. In-Game asset. 2d. High contrast. No shadows
FeĢe stella. In-Game asset. 2d. High contrast. No shadows
FeĢe margot. In-Game asset. 2d. High contrast. No shadows
Chat feĢe. In-Game asset. 2d. High contrast. No shadows
La sorcieĢ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 mysteĢ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 feĢe. In-Game asset. 2d. High contrast. No shadows
Estella la dresseuse de pouvoirs. In-Game asset. 2d. High contrast. No shadows