Code edit (1 edits merged)
Please save this source code
User prompt
otra cosa cuando pierdo una y sigo teniendo tres vidas igual game over aunque tenga 2 vidas mas
User prompt
quiero que la dificultad se seleccione antes de jugar, quiero que las pregunta de cada dificultad se van incrementando dependiendo del nivel y que sean dificiles
User prompt
🏅 SISTEMA DE DIFICULTAD ESCALONADA Fácil (Luz de Aprendiz): conocimiento superficial, contenido jugado comúnmente. Media (Sabio del Núcleo): requiere experiencia jugando múltiples temporadas. Difícil (Archivo Negro): exige haber leído lore, conectado eventos entre temporadas. Extrema (Oscuridad Interior): conecta frases cifradas, símbolos, detalles no explicados directamente en el juego.
User prompt
hazlo con preguntas actualizadas al 02/7/2025
User prompt
cuando quiero seleccionar una respuesta no me deja le doy click y nada
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'wordWrap')' in or related to this line: 'self.questionText.style.wordWrap = true;' Line Number: 116
Code edit (1 edits merged)
Please save this source code
User prompt
El Archivo del Guardián
Initial prompt
🎮 Nombre del juego: “El Archivo del Guardián” Tagline: "El conocimiento es la luz que vence a la Oscuridad." 🕹️ Tipo de Juego Modo de juego: Trivia en solitario. Estilo: Por rondas con niveles de dificultad. Formato: Consola (CLI), Escritorio (GUI simple) o incluso archivo ejecutable .exe. ⚙️ Mecánica de Juego 🔹 Estructura básica El jugador responde a preguntas una por una. Hay varias categorías que escalan en dificultad: Historia General Armas y Armaduras Lore Profundo Actividades y Raids Preguntas tipo acertijo Cada ronda contiene entre 5 y 10 preguntas. Cada respuesta correcta suma puntos. Si fallas, puedes perder puntos o tener penalizaciones. 🔥 Modo "Desafío del Guardián" Este es el modo difícil diseñado para jugadores hardcore: Una sola vida: Si fallas una pregunta, terminas el juego. Sin pistas, sin tiempo visible. Las preguntas son encriptadas o indirectas. Ejemplo: “Mi voz se escuchó en las profundidades de la Luna, y fui testigo de la caída de Crota. ¿Quién soy?” Respuesta: Eris Morn 🧠 Tipos de Preguntas 1. Trivia clásica Opción múltiple, 4 respuestas. 2. Identificación por texto Pregunta sin opciones. Ejemplo: “¿Qué significa el nombre 'Xûr' en la lengua de los Nueve?” 3. Cifrado simbólico (modo avanzado) Usas símbolos de la colmena o vex (representados por texto en ASCII) que debes descifrar. Ejemplo: ⚙️ Código Vex: ΔΘψΣ Traducción: "Red" (pista a Red Legion o Redrix) 4. Lore de libro Basado en grimoire, registros o textos oficiales. Ejemplo: “¿Qué palabra susurró Savathûn al final de la Temporada de los Perdidos que alteró el curso del ritual?” 5. Perk Challenge Te dicen un perk y debes decir qué arma podía tenerlo en X temporada. “¿Qué arma legendaria introducida en la Temporada 17 podía tener el perk Incandescente?” 🧩 Estructura de dificultad Fase 1: Iniciado del Archivo Preguntas simples sobre personajes, armas conocidas y actividades básicas. Fase 2: Criptarca Errante Entra el lore más profundo, misiones exóticas específicas, eventos de temporada. Fase 3: Vidente Preguntas indirectas, con citas, frases oscuras, conexiones entre personajes y eventos. Fase 4: Archivo Prohibido Preguntas imposibles para los que no han leído grimoire o no siguieron temporadas específicas. 🏅 Sistema de Logros Rangos internos (guardados localmente, sin conexión): 0–20 pts: Portador de la Luz 21–50 pts: Discípulo de Osiris 51–75 pts: Devorador de Sabiduría 76–100 pts: Leyenda del Archivo Puedes desbloquear modos especiales si alcanzas ciertos puntajes: Modo Oscuridad: todas las preguntas se invierten lógicamente (deben deducirse con pistas falsas). Modo Cronómetro: 5 segundos por pregunta, sin volver atrás.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var OptionButton = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.optionText = new Text2('', {
size: 36,
fill: 0xFFFFFF
});
self.optionText.anchor.set(0.5, 0.5);
self.addChild(self.optionText);
self.correctIndicator = null;
self.wrongIndicator = null;
self.isCorrect = false;
self.index = 0;
self.setOption = function (text, index, isCorrect) {
self.optionText.setText(text);
self.index = index;
self.isCorrect = isCorrect;
};
self.showResult = function (correct) {
if (correct) {
self.correctIndicator = self.attachAsset('correctIndicator', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
} else {
self.wrongIndicator = self.attachAsset('wrongIndicator', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
}
};
self.down = function (x, y, obj) {
if (!game.canAnswer) return;
game.checkAnswer(self.index);
};
return self;
});
var ProgressDisplay = Container.expand(function () {
var self = Container.call(this);
var barBg = self.attachAsset('progressBar', {
anchorX: 0,
anchorY: 0.5
});
self.progressFill = self.attachAsset('progressFill', {
anchorX: 0,
anchorY: 0.5,
scaleX: 0
});
self.progressText = new Text2('Question 1/10', {
size: 32,
fill: 0xFFFFFF
});
self.progressText.anchor.set(0.5, 0.5);
self.progressText.x = 800;
self.progressText.y = -40;
self.addChild(self.progressText);
self.setProgress = function (current, total) {
self.progressText.setText('Question ' + current + '/' + total);
var progress = current / total;
tween(self.progressFill, {
scaleX: progress
}, {
duration: 500,
easing: tween.easeOut
});
};
return self;
});
var QuestionDisplay = Container.expand(function () {
var self = Container.call(this);
var bg = self.attachAsset('questionBg', {
anchorX: 0.5,
anchorY: 0.5
});
self.questionText = new Text2('', {
size: 48,
fill: 0xFFFFFF
});
self.questionText.anchor.set(0.5, 0.5);
self.addChild(self.questionText);
self.setQuestion = function (text) {
self.questionText.setText(text);
// Word wrap for long questions
self.questionText.style.wordWrap = true;
self.questionText.style.wordWrapWidth = 1600;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0a0a0f
});
/****
* Game Code
****/
// Game state variables
var currentPhase = 0; // 0: Initiate, 1: Cryptarch, 2: Seer, 3: Forbidden
var currentQuestion = 0;
var score = 0;
var lives = 3;
var questionsPerRound = 10;
var canAnswer = true;
var guardianMode = false;
var darknessMode = false;
var timerMode = false;
var timerCount = 0;
// UI Elements
var questionDisplay = null;
var optionButtons = [];
var progressDisplay = null;
var scoreText = null;
var phaseText = null;
var livesText = null;
var modeIndicator = null;
// Question Database
var questions = {
0: [
// Initiate
{
q: "What is the primary currency in the game?",
options: ["Glimmer", "Bright Dust", "Legendary Shards", "Silver"],
correct: 0
}, {
q: "How many character classes are there?",
options: ["2", "3", "4", "5"],
correct: 1
}, {
q: "What is the maximum light level cap?",
options: ["1000", "1500", "1810", "2000"],
correct: 2
}],
1: [
// Cryptarch
{
q: "Which exotic hand cannon fires solar rounds that explode?",
options: ["Thorn", "Ace of Spades", "Sunshot", "The Last Word"],
correct: 2
}, {
q: "What is the name of the Vanguard Titan?",
options: ["Zavala", "Ikora", "Cayde-6", "Shaxx"],
correct: 0
}],
2: [
// Seer
{
q: "In which expansion did the Darkness arrive?",
options: ["Forsaken", "Shadowkeep", "Beyond Light", "The Witch Queen"],
correct: 2
}, {
q: "What are the worm gods' names collectively known as?",
options: ["The Five", "The Hive Pantheon", "The Virtuous Worms", "The Formless One"],
correct: 1
}],
3: [
// Forbidden
{
q: "What is the true name of the Witness?",
options: ["Unknown", "The First Knife", "The Final Shape", "Nezarec"],
correct: 0
}, {
q: "Which paracausal force predates both Light and Darkness?",
options: ["The Veil", "The Traveler", "The Nine", "None exist"],
correct: 3
}]
};
var phaseNames = ["Archive Initiate", "Wandering Cryptarch", "Seer", "Forbidden Archive"];
var rankNames = ["Light Bearer", "Disciple of Osiris", "Wisdom Devourer", "Archive Legend"];
function initializeGame() {
// Question display
questionDisplay = game.addChild(new QuestionDisplay());
questionDisplay.x = 1024;
questionDisplay.y = 600;
// Option buttons
for (var i = 0; i < 4; i++) {
var button = game.addChild(new OptionButton());
button.x = 520 + i % 2 * 1000;
button.y = 1200 + Math.floor(i / 2) * 200;
optionButtons.push(button);
}
// Progress display
progressDisplay = game.addChild(new ProgressDisplay());
progressDisplay.x = 224;
progressDisplay.y = 2400;
// Score text
scoreText = new Text2('Score: 0', {
size: 64,
fill: 0xFFFFFF
});
scoreText.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreText);
// Phase text
phaseText = new Text2(phaseNames[0], {
size: 48,
fill: 0x5EB3FF
});
phaseText.anchor.set(0.5, 0);
phaseText.y = 100;
LK.gui.top.addChild(phaseText);
// Lives text
livesText = new Text2('Lives: ❤❤❤', {
size: 40,
fill: 0xFF6B6B
});
livesText.anchor.set(0, 0);
livesText.x = 120;
LK.gui.topLeft.addChild(livesText);
// Load saved progress
score = storage.highScore || 0;
guardianMode = storage.guardianUnlocked || false;
darknessMode = storage.darknessUnlocked || false;
timerMode = storage.timerUnlocked || false;
// Start game
loadQuestion();
LK.playMusic('ambient');
}
function loadQuestion() {
canAnswer = true;
currentQuestion++;
if (currentQuestion > questionsPerRound) {
// Phase complete
if (currentPhase < 3) {
currentPhase++;
currentQuestion = 1;
LK.getSound('levelup').play();
phaseText.setText(phaseNames[currentPhase]);
tween(phaseText, {
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(phaseText, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.easeIn
});
}
});
} else {
// Game complete
checkAchievements();
return;
}
}
progressDisplay.setProgress(currentQuestion, questionsPerRound);
// Get random question from current phase
var phaseQuestions = questions[currentPhase];
var questionData = phaseQuestions[Math.floor(Math.random() * phaseQuestions.length)];
// Apply darkness mode
if (darknessMode) {
questionDisplay.setQuestion("NOT: " + questionData.q);
} else {
questionDisplay.setQuestion(questionData.q);
}
// Set options
for (var i = 0; i < 4; i++) {
optionButtons[i].setOption(questionData.options[i], i, i === questionData.correct);
}
// Timer mode
if (timerMode) {
timerCount = 300; // 5 seconds * 60 fps
}
}
function checkAnswer(selectedIndex) {
if (!canAnswer) return;
canAnswer = false;
var correct = optionButtons[selectedIndex].isCorrect;
// Darkness mode inverts correct answers
if (darknessMode) {
correct = !correct;
}
if (correct) {
LK.getSound('correct').play();
optionButtons[selectedIndex].showResult(true);
score += (currentPhase + 1) * 5;
scoreText.setText('Score: ' + score);
LK.setScore(score);
// Check for unlocks
if (score >= 30 && !guardianMode) {
guardianMode = true;
storage.guardianUnlocked = true;
LK.getSound('unlock').play();
showUnlockMessage("Guardian's Challenge Unlocked!");
}
if (score >= 50 && !darknessMode) {
darknessMode = true;
storage.darknessUnlocked = true;
LK.getSound('unlock').play();
showUnlockMessage("Darkness Mode Unlocked!");
}
if (score >= 70 && !timerMode) {
timerMode = true;
storage.timerUnlocked = true;
LK.getSound('unlock').play();
showUnlockMessage("Timer Mode Unlocked!");
}
} else {
LK.getSound('wrong').play();
optionButtons[selectedIndex].showResult(false);
lives--;
updateLives();
if (guardianMode || lives <= 0) {
LK.showGameOver();
return;
}
}
// Save high score
if (score > (storage.highScore || 0)) {
storage.highScore = score;
}
// Next question after delay
LK.setTimeout(function () {
// Clear indicators
for (var i = 0; i < 4; i++) {
if (optionButtons[i].correctIndicator) {
optionButtons[i].correctIndicator.destroy();
optionButtons[i].correctIndicator = null;
}
if (optionButtons[i].wrongIndicator) {
optionButtons[i].wrongIndicator.destroy();
optionButtons[i].wrongIndicator = null;
}
}
loadQuestion();
}, 1500);
}
function updateLives() {
var hearts = '';
for (var i = 0; i < lives; i++) {
hearts += '❤';
}
livesText.setText('Lives: ' + hearts);
}
function showUnlockMessage(message) {
var unlockText = new Text2(message, {
size: 72,
fill: 0xFFD700
});
unlockText.anchor.set(0.5, 0.5);
unlockText.x = 1024;
unlockText.y = 1366;
unlockText.alpha = 0;
game.addChild(unlockText);
tween(unlockText, {
alpha: 1,
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
LK.setTimeout(function () {
tween(unlockText, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
unlockText.destroy();
}
});
}, 2000);
}
});
}
function checkAchievements() {
var rank = 0;
if (score >= 21) rank = 1;
if (score >= 51) rank = 2;
if (score >= 76) rank = 3;
var achievementText = new Text2('Rank: ' + rankNames[rank], {
size: 96,
fill: 0xFFD700
});
achievementText.anchor.set(0.5, 0.5);
achievementText.x = 1024;
achievementText.y = 1366;
game.addChild(achievementText);
if (score >= 100) {
LK.showYouWin();
} else {
LK.setTimeout(function () {
LK.showGameOver();
}, 3000);
}
}
game.update = function () {
if (timerMode && timerCount > 0 && canAnswer) {
timerCount--;
if (timerCount <= 0) {
// Time's up - wrong answer
canAnswer = false;
lives--;
updateLives();
LK.getSound('wrong').play();
if (guardianMode || lives <= 0) {
LK.showGameOver();
} else {
LK.setTimeout(function () {
loadQuestion();
}, 1000);
}
}
}
};
// Initialize the game
initializeGame(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,427 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var OptionButton = Container.expand(function () {
+ var self = Container.call(this);
+ var bg = self.attachAsset('optionButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.optionText = new Text2('', {
+ size: 36,
+ fill: 0xFFFFFF
+ });
+ self.optionText.anchor.set(0.5, 0.5);
+ self.addChild(self.optionText);
+ self.correctIndicator = null;
+ self.wrongIndicator = null;
+ self.isCorrect = false;
+ self.index = 0;
+ self.setOption = function (text, index, isCorrect) {
+ self.optionText.setText(text);
+ self.index = index;
+ self.isCorrect = isCorrect;
+ };
+ self.showResult = function (correct) {
+ if (correct) {
+ self.correctIndicator = self.attachAsset('correctIndicator', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.7
+ });
+ } else {
+ self.wrongIndicator = self.attachAsset('wrongIndicator', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ alpha: 0.7
+ });
+ }
+ };
+ self.down = function (x, y, obj) {
+ if (!game.canAnswer) return;
+ game.checkAnswer(self.index);
+ };
+ return self;
+});
+var ProgressDisplay = Container.expand(function () {
+ var self = Container.call(this);
+ var barBg = self.attachAsset('progressBar', {
+ anchorX: 0,
+ anchorY: 0.5
+ });
+ self.progressFill = self.attachAsset('progressFill', {
+ anchorX: 0,
+ anchorY: 0.5,
+ scaleX: 0
+ });
+ self.progressText = new Text2('Question 1/10', {
+ size: 32,
+ fill: 0xFFFFFF
+ });
+ self.progressText.anchor.set(0.5, 0.5);
+ self.progressText.x = 800;
+ self.progressText.y = -40;
+ self.addChild(self.progressText);
+ self.setProgress = function (current, total) {
+ self.progressText.setText('Question ' + current + '/' + total);
+ var progress = current / total;
+ tween(self.progressFill, {
+ scaleX: progress
+ }, {
+ duration: 500,
+ easing: tween.easeOut
+ });
+ };
+ return self;
+});
+var QuestionDisplay = Container.expand(function () {
+ var self = Container.call(this);
+ var bg = self.attachAsset('questionBg', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.questionText = new Text2('', {
+ size: 48,
+ fill: 0xFFFFFF
+ });
+ self.questionText.anchor.set(0.5, 0.5);
+ self.addChild(self.questionText);
+ self.setQuestion = function (text) {
+ self.questionText.setText(text);
+ // Word wrap for long questions
+ self.questionText.style.wordWrap = true;
+ self.questionText.style.wordWrapWidth = 1600;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x0a0a0f
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var currentPhase = 0; // 0: Initiate, 1: Cryptarch, 2: Seer, 3: Forbidden
+var currentQuestion = 0;
+var score = 0;
+var lives = 3;
+var questionsPerRound = 10;
+var canAnswer = true;
+var guardianMode = false;
+var darknessMode = false;
+var timerMode = false;
+var timerCount = 0;
+// UI Elements
+var questionDisplay = null;
+var optionButtons = [];
+var progressDisplay = null;
+var scoreText = null;
+var phaseText = null;
+var livesText = null;
+var modeIndicator = null;
+// Question Database
+var questions = {
+ 0: [
+ // Initiate
+ {
+ q: "What is the primary currency in the game?",
+ options: ["Glimmer", "Bright Dust", "Legendary Shards", "Silver"],
+ correct: 0
+ }, {
+ q: "How many character classes are there?",
+ options: ["2", "3", "4", "5"],
+ correct: 1
+ }, {
+ q: "What is the maximum light level cap?",
+ options: ["1000", "1500", "1810", "2000"],
+ correct: 2
+ }],
+ 1: [
+ // Cryptarch
+ {
+ q: "Which exotic hand cannon fires solar rounds that explode?",
+ options: ["Thorn", "Ace of Spades", "Sunshot", "The Last Word"],
+ correct: 2
+ }, {
+ q: "What is the name of the Vanguard Titan?",
+ options: ["Zavala", "Ikora", "Cayde-6", "Shaxx"],
+ correct: 0
+ }],
+ 2: [
+ // Seer
+ {
+ q: "In which expansion did the Darkness arrive?",
+ options: ["Forsaken", "Shadowkeep", "Beyond Light", "The Witch Queen"],
+ correct: 2
+ }, {
+ q: "What are the worm gods' names collectively known as?",
+ options: ["The Five", "The Hive Pantheon", "The Virtuous Worms", "The Formless One"],
+ correct: 1
+ }],
+ 3: [
+ // Forbidden
+ {
+ q: "What is the true name of the Witness?",
+ options: ["Unknown", "The First Knife", "The Final Shape", "Nezarec"],
+ correct: 0
+ }, {
+ q: "Which paracausal force predates both Light and Darkness?",
+ options: ["The Veil", "The Traveler", "The Nine", "None exist"],
+ correct: 3
+ }]
+};
+var phaseNames = ["Archive Initiate", "Wandering Cryptarch", "Seer", "Forbidden Archive"];
+var rankNames = ["Light Bearer", "Disciple of Osiris", "Wisdom Devourer", "Archive Legend"];
+function initializeGame() {
+ // Question display
+ questionDisplay = game.addChild(new QuestionDisplay());
+ questionDisplay.x = 1024;
+ questionDisplay.y = 600;
+ // Option buttons
+ for (var i = 0; i < 4; i++) {
+ var button = game.addChild(new OptionButton());
+ button.x = 520 + i % 2 * 1000;
+ button.y = 1200 + Math.floor(i / 2) * 200;
+ optionButtons.push(button);
+ }
+ // Progress display
+ progressDisplay = game.addChild(new ProgressDisplay());
+ progressDisplay.x = 224;
+ progressDisplay.y = 2400;
+ // Score text
+ scoreText = new Text2('Score: 0', {
+ size: 64,
+ fill: 0xFFFFFF
+ });
+ scoreText.anchor.set(1, 0);
+ LK.gui.topRight.addChild(scoreText);
+ // Phase text
+ phaseText = new Text2(phaseNames[0], {
+ size: 48,
+ fill: 0x5EB3FF
+ });
+ phaseText.anchor.set(0.5, 0);
+ phaseText.y = 100;
+ LK.gui.top.addChild(phaseText);
+ // Lives text
+ livesText = new Text2('Lives: ❤❤❤', {
+ size: 40,
+ fill: 0xFF6B6B
+ });
+ livesText.anchor.set(0, 0);
+ livesText.x = 120;
+ LK.gui.topLeft.addChild(livesText);
+ // Load saved progress
+ score = storage.highScore || 0;
+ guardianMode = storage.guardianUnlocked || false;
+ darknessMode = storage.darknessUnlocked || false;
+ timerMode = storage.timerUnlocked || false;
+ // Start game
+ loadQuestion();
+ LK.playMusic('ambient');
+}
+function loadQuestion() {
+ canAnswer = true;
+ currentQuestion++;
+ if (currentQuestion > questionsPerRound) {
+ // Phase complete
+ if (currentPhase < 3) {
+ currentPhase++;
+ currentQuestion = 1;
+ LK.getSound('levelup').play();
+ phaseText.setText(phaseNames[currentPhase]);
+ tween(phaseText, {
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(phaseText, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeIn
+ });
+ }
+ });
+ } else {
+ // Game complete
+ checkAchievements();
+ return;
+ }
+ }
+ progressDisplay.setProgress(currentQuestion, questionsPerRound);
+ // Get random question from current phase
+ var phaseQuestions = questions[currentPhase];
+ var questionData = phaseQuestions[Math.floor(Math.random() * phaseQuestions.length)];
+ // Apply darkness mode
+ if (darknessMode) {
+ questionDisplay.setQuestion("NOT: " + questionData.q);
+ } else {
+ questionDisplay.setQuestion(questionData.q);
+ }
+ // Set options
+ for (var i = 0; i < 4; i++) {
+ optionButtons[i].setOption(questionData.options[i], i, i === questionData.correct);
+ }
+ // Timer mode
+ if (timerMode) {
+ timerCount = 300; // 5 seconds * 60 fps
+ }
+}
+function checkAnswer(selectedIndex) {
+ if (!canAnswer) return;
+ canAnswer = false;
+ var correct = optionButtons[selectedIndex].isCorrect;
+ // Darkness mode inverts correct answers
+ if (darknessMode) {
+ correct = !correct;
+ }
+ if (correct) {
+ LK.getSound('correct').play();
+ optionButtons[selectedIndex].showResult(true);
+ score += (currentPhase + 1) * 5;
+ scoreText.setText('Score: ' + score);
+ LK.setScore(score);
+ // Check for unlocks
+ if (score >= 30 && !guardianMode) {
+ guardianMode = true;
+ storage.guardianUnlocked = true;
+ LK.getSound('unlock').play();
+ showUnlockMessage("Guardian's Challenge Unlocked!");
+ }
+ if (score >= 50 && !darknessMode) {
+ darknessMode = true;
+ storage.darknessUnlocked = true;
+ LK.getSound('unlock').play();
+ showUnlockMessage("Darkness Mode Unlocked!");
+ }
+ if (score >= 70 && !timerMode) {
+ timerMode = true;
+ storage.timerUnlocked = true;
+ LK.getSound('unlock').play();
+ showUnlockMessage("Timer Mode Unlocked!");
+ }
+ } else {
+ LK.getSound('wrong').play();
+ optionButtons[selectedIndex].showResult(false);
+ lives--;
+ updateLives();
+ if (guardianMode || lives <= 0) {
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Save high score
+ if (score > (storage.highScore || 0)) {
+ storage.highScore = score;
+ }
+ // Next question after delay
+ LK.setTimeout(function () {
+ // Clear indicators
+ for (var i = 0; i < 4; i++) {
+ if (optionButtons[i].correctIndicator) {
+ optionButtons[i].correctIndicator.destroy();
+ optionButtons[i].correctIndicator = null;
+ }
+ if (optionButtons[i].wrongIndicator) {
+ optionButtons[i].wrongIndicator.destroy();
+ optionButtons[i].wrongIndicator = null;
+ }
+ }
+ loadQuestion();
+ }, 1500);
+}
+function updateLives() {
+ var hearts = '';
+ for (var i = 0; i < lives; i++) {
+ hearts += '❤';
+ }
+ livesText.setText('Lives: ' + hearts);
+}
+function showUnlockMessage(message) {
+ var unlockText = new Text2(message, {
+ size: 72,
+ fill: 0xFFD700
+ });
+ unlockText.anchor.set(0.5, 0.5);
+ unlockText.x = 1024;
+ unlockText.y = 1366;
+ unlockText.alpha = 0;
+ game.addChild(unlockText);
+ tween(unlockText, {
+ alpha: 1,
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 500,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ LK.setTimeout(function () {
+ tween(unlockText, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ unlockText.destroy();
+ }
+ });
+ }, 2000);
+ }
+ });
+}
+function checkAchievements() {
+ var rank = 0;
+ if (score >= 21) rank = 1;
+ if (score >= 51) rank = 2;
+ if (score >= 76) rank = 3;
+ var achievementText = new Text2('Rank: ' + rankNames[rank], {
+ size: 96,
+ fill: 0xFFD700
+ });
+ achievementText.anchor.set(0.5, 0.5);
+ achievementText.x = 1024;
+ achievementText.y = 1366;
+ game.addChild(achievementText);
+ if (score >= 100) {
+ LK.showYouWin();
+ } else {
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 3000);
+ }
+}
+game.update = function () {
+ if (timerMode && timerCount > 0 && canAnswer) {
+ timerCount--;
+ if (timerCount <= 0) {
+ // Time's up - wrong answer
+ canAnswer = false;
+ lives--;
+ updateLives();
+ LK.getSound('wrong').play();
+ if (guardianMode || lives <= 0) {
+ LK.showGameOver();
+ } else {
+ LK.setTimeout(function () {
+ loadQuestion();
+ }, 1000);
+ }
+ }
+ }
+};
+// Initialize the game
+initializeGame();
\ No newline at end of file