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 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
}];
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: 24,
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: 20,
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();
}, 3000);
};
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();
}, 3000);
};
self.showResultMessage = function (message, color) {
var resultText = self.riddleContainer.addChild(new Text2(message, {
size: 26,
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: 24,
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: 24,
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: 24,
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 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 !"];
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: 24,
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: 20,
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: 20,
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.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 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) {
var magicBubble = game.addChild(new Container());
var bubbleGraphics = magicBubble.attachAsset('magicBubble', {
anchorX: 0.5,
anchorY: 0.5
});
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);
};
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);
tween(messageContainer, {
alpha: 0
}, {
duration: 5000,
onFinish: function onFinish() {
messageContainer.destroy();
}
});
};
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
}];
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: 24,
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: 20,
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();
}, 3000);
};
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: 24,
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 margotSpawnCounter = 0;
var chafeeCanSpawn = false;
var chafeeSpawned = false;
var maliciaSpawnCounter = 0;
var maliciaSpawnedThisCycle = 0;
var twinsSpawnCounter = 0;
// 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) * 1000;
if (currentTotalLipoints >= stellaThreshold + 1000 && stellaSpawnTracker < stellaThreshold + 1000) {
stellaSpawnTracker = stellaThreshold + 1000;
game.createStella();
}
}
// 2. Margot - every 2 levels
if (currentLevel >= 2 && currentLevel > margotSpawnCounter * 2) {
margotSpawnCounter = Math.floor(currentLevel / 2);
game.createMargot();
}
// 3. ChafƩe - randomly once every 4 levels starting from level 12
if (currentLevel >= 12) {
var chafeeLevel = Math.floor((currentLevel - 12) / 4) * 4 + 12;
if (currentLevel >= chafeeLevel && !chafeeSpawned && Math.random() < 0.02) {
// 2% chance per update
chafeeSpawned = true;
game.createChafee();
}
// Reset chafee spawn flag every 4 levels
if (currentLevel > chafeeLevel + 3) {
chafeeSpawned = false;
}
}
// 4. Malicia - twice every 4 levels starting from level 19
if (currentLevel >= 19) {
var maliciaCycle = Math.floor((currentLevel - 19) / 4);
var currentCycle = Math.floor((currentLevel - 19) / 4);
if (maliciaCycle > Math.floor(maliciaSpawnCounter / 2) && maliciaSpawnedThisCycle < 2 && Math.random() < 0.01) {
maliciaSpawnedThisCycle++;
if (maliciaSpawnedThisCycle >= 2) {
maliciaSpawnCounter = currentCycle * 2 + 2;
maliciaSpawnedThisCycle = 0;
}
game.createMalicia();
}
}
// 5. Twins - once every 3 levels starting from level 8
if (currentLevel >= 8) {
var twinsLevel = Math.floor((currentLevel - 8) / 3) * 3 + 8;
if (currentLevel >= twinsLevel && currentLevel > twinsSpawnCounter * 3 + 8) {
twinsSpawnCounter = Math.floor((currentLevel - 8) / 3);
game.createTwins();
}
}
};
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);
};
// Start background music
LK.playMusic('background');
; ===================================================================
--- original.js
+++ change.js
@@ -1702,8 +1702,32 @@
}
}
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();
@@ -1828,34 +1852,39 @@
}
};
game.createStella = function () {
var stella = game.addChild(new Stella());
- stella.x = cameraX + 2048 + Math.random() * 200;
- stella.y = 1900 + Math.random() * 300;
+ var position = findSuitablePlatform();
+ stella.x = position.x;
+ stella.y = position.y;
characters.push(stella);
};
game.createMargot = function () {
var margot = game.addChild(new Margot());
- margot.x = cameraX + 2048 + Math.random() * 200;
- margot.y = 1900 + Math.random() * 300;
+ var position = findSuitablePlatform();
+ margot.x = position.x;
+ margot.y = position.y;
characters.push(margot);
};
game.createChafee = function () {
var chafee = game.addChild(new Chafee());
- chafee.x = cameraX + 2048 + Math.random() * 200;
- chafee.y = 1900 + Math.random() * 300;
+ var position = findSuitablePlatform();
+ chafee.x = position.x;
+ chafee.y = position.y;
characters.push(chafee);
};
game.createMalicia = function () {
var malicia = game.addChild(new Malicia());
- malicia.x = cameraX + 2048 + Math.random() * 200;
- malicia.y = 1900 + Math.random() * 300;
+ var position = findSuitablePlatform();
+ malicia.x = position.x;
+ malicia.y = position.y;
characters.push(malicia);
};
game.createTwins = function () {
var twins = game.addChild(new Twins());
- twins.x = cameraX + 2048 + Math.random() * 200;
- twins.y = 1900 + Math.random() * 300;
+ var position = findSuitablePlatform();
+ twins.x = position.x;
+ twins.y = position.y;
characters.push(twins);
};
// Start background music
LK.playMusic('background');
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