User prompt
At the you win! window that Final Score isnt true. Fix it.
User prompt
Move taptostart animation 50px left
User prompt
Move gamename asset 160px up
User prompt
Move gamename asset 200px up
User prompt
Move gamename asset 60px up
User prompt
Please fix the bug: 'TypeError: Cannot use 'in' operator to search for 'scaleX' in null' in or related to this line: 'tween(tapToStartAsset, {' Line Number: 752 βͺπ‘ Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make a animation at starting screen βͺπ‘ Consider importing and using the following plugins: @upit/tween.v1
User prompt
Make both YOUR SCORE: lines font bold
User prompt
Change YOUR SCORE: font
User prompt
Please fix the bug: 'Timeout.tick error: e9c71a is not defined' in or related to this line: 'scoreText = new Text2('YOUR SCORE: ' + finalScore, {' Line Number: 541
Code edit (1 edits merged)
Please save this source code
User prompt
Move FinalScreenAsset asset 26px up
User prompt
Move FinalScreenAsset asset 26px up
User prompt
Move both YOUR SCORE: Lines 20px down
User prompt
Move both YOUR SCORE: Lines 15px down
User prompt
Move FinalScreenAsset asset 46px up
User prompt
Move FinalScreenAsset asset 26px up
User prompt
Move FinalScreenAsset asset 26px up
User prompt
Move FinalScreenAsset asset 26px up
User prompt
Move FinalScreenAsset asset 19px up
User prompt
Move FinalScreenAsset asset 19px up
User prompt
time 30 seconds but at beggining screen it show 45 secons. Fix i
User prompt
Move FinalScreenAsset 9px up
User prompt
Donw show the hearts at What asset screen and youwinWoman screen
User prompt
at youwinWoman screen move YOUR SCORE: to bottom of the screen
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Woman character class
var Woman = Container.expand(function () {
var self = Container.call(this);
// State: 'happy', 'angry', 'surprised'
self.state = 'happy';
// Attach face (default: happy)
self.face = self.attachAsset('happyWoman', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach mouth
self.mouth = self.attachAsset('mouth', {
anchorX: 0.5,
anchorY: 0.5,
x: -15,
// move 3.75mm left (35px left from center, 5mm right from previous)
// centered horizontally, but offset slightly left
y: 40 // move up 1cm (40px from woman's center)
});
// Animate mouth open/close
self.mouthTalking = false;
self.mouthTween = null;
self.setState = function (state) {
if (self.state === state) {
return;
}
self.state = state;
// Remove old face
self.face.destroy();
// Add new face
var faceId = 'happyWoman';
if (state === 'angry') {
faceId = 'angryWoman';
}
if (state === 'surprised') {
faceId = 'surprisedWoman';
}
self.face = self.attachAsset(faceId, {
anchorX: 0.5,
anchorY: 0.5
});
// Keep mouth on top
if (self.mouth && typeof self.mouth.parent !== "undefined" && self.mouth.parent !== null) {
if (typeof self.mouth.parent.removeChild === "function") {
self.mouth.parent.removeChild(self.mouth);
}
}
self.addChild(self.mouth);
};
self.startTalking = function () {
if (self.mouthTalking) {
return;
}
self.mouthTalking = true;
animateMouth();
};
self.stopTalking = function () {
self.mouthTalking = false;
if (self.mouthTween) {
tween.stop(self.mouth);
self.mouthTween = null;
}
// Reset mouth to closed
self.mouth.scaleY = 1;
};
function animateMouth() {
if (!self.mouthTalking) {
return;
}
// Open
self.mouthTween = tween(self.mouth, {
scaleY: 2
}, {
duration: 120,
easing: tween.easeIn,
onFinish: function onFinish() {
// Close
self.mouthTween = tween(self.mouth, {
scaleY: 1
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
// Repeat if still talking
animateMouth();
}
});
}
});
}
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf0f0f0
});
/****
* Game Code
****/
// New asset: 'background' (light gray, editable later)
// New asset: 'What' (placeholder, 400x400, editable later)
// Heart (for lives)
// Mouth (Ellipse for talking)
// Surprised Woman (Yellow Square)
// Angry Woman (Purple Square)
// Happy Woman (Red Square)
// Questions and answers
var questions = [{
text: "Do you know why you are here?",
answers: [{
text: "Yes",
correct: false
}, {
text: "Of course, baby!",
correct: false
}, {
text: "Who am I?",
correct: true
}]
}, {
text: "Do you think I donβt know who you are?",
answers: [{
text: "The Thunderstorm?",
correct: false
}, {
text: "A helpless servant?",
correct: false
}, {
text: "A curious caterpillar?",
correct: true
}]
}, {
text: "Are you curious about me?",
answers: [{
text: "No, about who I am!",
correct: true
}, {
text: "No, about my fate!",
correct: false
}, {
text: "Yes!",
correct: false
}]
}, {
text: "What are you trying to understand?",
answers: [{
text: "Who I am",
correct: true
}, {
text: "The Quantum Theory",
correct: false
}, {
text: "Meaning of life",
correct: false
}]
}, {
text: "Are you a valuable person?",
answers: [{
text: "Am I a person?",
correct: true
}, {
text: "Shine like a diamond",
correct: false
}, {
text: "I am the ONE!",
correct: false
}]
}, {
text: "Who's playing you in this game?",
answers: [{
text: "Someone acting like me",
correct: true
}, {
text: "A finger on a screen",
correct: false
}, {
text: "You, cunning trickster!",
correct: false
}]
}, {
text: "Are you a human?",
answers: [{
text: "Who man?",
correct: true
}, {
text: "I am BATMAN!",
correct: false
}, {
text: "I am a chicken salad",
correct: false
}]
}, {
text: "Are you kidding me?",
answers: [{
text: "No!",
correct: true
}, {
text: "You are god damn right!",
correct: false
}, {
text: "I am the Joker!",
correct: false
}]
}, {
text: "Where do you think you began?",
answers: [{
text: "I may not have started",
correct: true
}, {
text: "In a hospital",
correct: false
}, {
text: "at Camp Nou",
correct: false
}]
}];
// Shuffle answers for each question
function shuffle(arr) {
for (var i = arr.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
return arr;
}
// Randomly select 5 questions from the available questions
var selectedQuestions = shuffle(questions.slice()).slice(0, 5);
questions = selectedQuestions;
for (var i = 0; i < questions.length; i++) {
questions[i].answers = shuffle(questions[i].answers.slice());
}
// Game state
var currentQuestion = 0;
var hearts = 3;
var maxHearts = 3;
var woman = null;
var answerButtons = [];
var questionText = null;
var heartIcons = [];
var angryTimeout = null;
var surprisedShown = false;
var gameTimer = 30; // Timer in seconds
var timerText = null;
var gameEnded = false;
var showingStartScreen = true;
var startingWomanAsset = null;
var gameNameAsset = null;
var finalScore = 0;
var scoreText = null;
// Layout constants
var womanCenterX = 2048 / 2;
var womanCenterY = 900;
var questionY = 1500;
var answerStartY = 1750;
var answerSpacing = 220;
// Add background asset (behind all elements)
var backgroundAsset = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0,
x: 2048 / 2,
y: 0
});
game.addChild(backgroundAsset);
// Add woman character
woman = new Woman();
game.addChild(woman);
woman.x = womanCenterX;
woman.y = womanCenterY;
// Add hearts (below answer buttons, centered)
for (var h = 0; h < maxHearts; h++) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5
});
// Place below answer buttons, centered horizontally
// Place hearts in a row, centered at 2048/2, below last answer button
var totalWidth = (maxHearts - 1) * 200;
heart.x = 2048 / 2 - totalWidth / 2 + h * 200;
heart.y = answerStartY + 3 * answerSpacing + 150; // 150px below last answer button (moved down 50px)
game.addChild(heart);
heartIcons.push(heart);
}
// Add question text
questionText = new Text2('', {
size: 120,
fill: 0xffffff,
font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
});
questionText.anchor.set(0.5, 0);
questionText.x = 2048 / 2;
questionText.y = questionY;
game.addChild(questionText);
// Add timer text in top right corner
timerText = new Text2('0:30', {
size: 80,
fill: 0xFFFFFF,
font: "Impact,'Comic Sans MS','Marker Felt','Chalkboard SE',fantasy"
});
timerText.anchor.set(1, 0); // Right-aligned, top
timerText.x = -50; // 50px from right edge (relative to topRight)
timerText.y = 50; // 50px from top
LK.gui.topRight.addChild(timerText);
// Answer button class
function createAnswerButton(idx) {
var btn = new Container();
// Button background
var bg = btn.attachAsset('box', {
width: 900,
height: 160,
color: 0x000000,
anchorX: 0.5,
anchorY: 0.5
});
// Button text
var txt = new Text2('', {
size: 70,
fill: 0xffffff
});
txt.anchor.set(0.5, 0.5);
txt.x = 0;
txt.y = 0;
btn.addChild(txt);
// Position
btn.x = 2048 / 2;
btn.y = answerStartY + idx * answerSpacing + 100;
// Store for later
btn.bg = bg;
btn.txt = txt;
btn.idx = idx;
// Add to game
game.addChild(btn);
// Touch/click handler
btn.down = function (x, y, obj) {
handleAnswer(idx);
};
return btn;
}
// Create answer buttons
for (var i = 0; i < 3; i++) {
var btn = createAnswerButton(i);
answerButtons.push(btn);
}
// Update hearts display
function updateHearts() {
for (var i = 0; i < heartIcons.length; i++) {
heartIcons[i].alpha = i < hearts ? 1 : 0.2;
}
}
// Show question and answers
function showQuestion() {
if (currentQuestion >= questions.length) {
// Show surprised woman
showSurprised();
return;
}
var q = questions[currentQuestion];
questionText.setText(q.text);
for (var i = 0; i < 3; i++) {
var ans = q.answers[i];
answerButtons[i].txt.setText(ans ? ans.text : '');
answerButtons[i].visible = !!ans;
answerButtons[i].bg.color = 0xf0f0f0;
}
// Woman happy
woman.setState('happy');
woman.startTalking();
// Stop talking after 1.2s
LK.setTimeout(function () {
woman.stopTalking();
}, 1200);
}
// Handle answer selection
function handleAnswer(idx) {
if (gameEnded || currentQuestion >= questions.length) {
return;
}
var q = questions[currentQuestion];
var ans = q.answers[idx];
if (!ans) {
return;
}
// Disable buttons for now
for (var i = 0; i < 3; i++) {
answerButtons[i].down = null;
}
if (ans.correct) {
// Correct: progress
answerButtons[idx].bg.color = 0x83de44; // green
woman.setState('happy');
woman.startTalking();
LK.setTimeout(function () {
woman.stopTalking();
currentQuestion++;
showQuestion();
// Re-enable buttons
for (var i = 0; i < 3; i++) {
answerButtons[i].down = function (i) {
return function (x, y, obj) {
handleAnswer(i);
};
}(i);
}
}, 900);
} else {
// Wrong: lose heart, angry woman, flash
answerButtons[idx].bg.color = 0xff3b3b; // red
hearts--;
updateHearts();
woman.setState('angry');
woman.startTalking();
LK.effects.flashObject(woman, 0x8e44ad, 300);
// After 3s, return to happy or end game
if (angryTimeout) {
LK.clearTimeout(angryTimeout);
}
angryTimeout = LK.setTimeout(function () {
woman.stopTalking();
if (hearts <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
woman.setState('happy');
// Re-enable buttons
for (var i = 0; i < 3; i++) {
answerButtons[i].down = function (i) {
return function (x, y, obj) {
handleAnswer(i);
};
}(i);
}
}, 3000);
}
}
// Show surprised woman (win)
function showSurprised() {
if (surprisedShown) {
return;
}
surprisedShown = true;
gameEnded = true; // Stop timer when winning
// Remove mouth if present and parent is not undefined/null
if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) {
if (typeof woman.mouth.parent.removeChild === "function") {
woman.mouth.parent.removeChild(woman.mouth);
}
}
// Show only surprisedWoman face
woman.setState('surprised');
// Calculate final score
var heartPoints = hearts * 100;
var timePoints = gameTimer * 125;
finalScore = heartPoints + timePoints;
// Add 'What' asset under surprisedWoman
var whatAsset = LK.getAsset('What', {
anchorX: 0.5,
anchorY: 0.5,
x: womanCenterX,
y: womanCenterY + 600 + 300 + 300 // move 6cm (300px) + 6cm (300px) further down to be under surprisedWoman asset
});
game.addChild(whatAsset);
// Add score text under What asset
scoreText = new Text2('YOUR SCORE: ' + finalScore, {
size: 150,
fill: 0xFFD700,
font: "Impact,'Comic Sans MS','Marker Felt','Chalkboard SE',fantasy"
});
scoreText.anchor.set(0.5, 0);
scoreText.x = womanCenterX;
scoreText.y = womanCenterY + 600 + 300 + 300 + 200; // 200px below What asset
game.addChild(scoreText);
// Remove 'What' asset after 3s (when game finishes)
LK.setTimeout(function () {
if (whatAsset && typeof whatAsset.destroy === "function") {
whatAsset.destroy();
}
if (scoreText && typeof scoreText.destroy === "function") {
scoreText.destroy();
}
}, 3000);
// After 3 seconds, show youwinWoman (no mouth)
LK.setTimeout(function () {
// Remove mouth if present (defensive)
if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) {
if (typeof woman.mouth.parent.removeChild === "function") {
woman.mouth.parent.removeChild(woman.mouth);
}
}
// Show FinalScreenAsset under youwinWoman
var finalScreenAsset = LK.getAsset('FinalScreenAsset', {
anchorX: 0.5,
anchorY: 0.5,
x: womanCenterX,
y: womanCenterY + 600 + 250 + 400 + 100 - 9 - 19 - 19 - 26 - 26 // move 5cm (250px) + 8cm (400px) + 2cm (100px) further down under youwinWoman asset, then 9px up, then 19px up, then 19px up again, then 26px up, then 26px up again
});
game.addChild(finalScreenAsset);
// Add score text at bottom of screen
var youWinScoreText = new Text2('YOUR SCORE: ' + finalScore, {
size: 150,
fill: 0xFFD700,
font: "Impact,'Comic Sans MS','Marker Felt','Chalkboard SE',fantasy"
});
youWinScoreText.anchor.set(0.5, 1); // Bottom-center anchor
youWinScoreText.x = womanCenterX;
youWinScoreText.y = 2732 - 100; // 100px from bottom of screen
game.addChild(youWinScoreText);
// Swap to youwinWoman face (add asset if not present)
if (woman.face) {
woman.face.destroy();
}
woman.face = woman.attachAsset('youwinWoman', {
anchorX: 0.5,
anchorY: 0.5,
y: -100
});
}, 3000);
// Hide answer buttons
for (var i = 0; i < 3; i++) {
answerButtons[i].visible = false;
}
// Hide hearts
for (var i = 0; i < heartIcons.length; i++) {
heartIcons[i].visible = false;
}
// Show message (optional, can be blank)
questionText.setText("");
// After 3 seconds, show youwinWoman (no mouth)
LK.setTimeout(function () {
// Remove mouth if present (defensive)
if (woman.mouth && typeof woman.mouth.parent !== "undefined" && woman.mouth.parent !== null) {
if (typeof woman.mouth.parent.removeChild === "function") {
woman.mouth.parent.removeChild(woman.mouth);
}
}
// Swap to youwinWoman face (add asset if not present)
if (woman.face) {
woman.face.destroy();
}
woman.face = woman.attachAsset('youwinWoman', {
anchorX: 0.5,
anchorY: 0.5,
y: -100
});
// After 5 more seconds, finish the game
LK.setTimeout(function () {
LK.showYouWin();
}, 5000);
}, 3000);
}
// Timer countdown function
function updateTimer() {
if (gameEnded || showingStartScreen) {
return;
}
gameTimer--;
var minutes = Math.floor(gameTimer / 60);
var seconds = gameTimer % 60;
var timeString = minutes + ':' + (seconds < 10 ? '0' : '') + seconds;
timerText.setText(timeString);
if (gameTimer <= 0) {
gameEnded = true;
questionText.setText("Time is up!");
woman.setState('angry');
LK.effects.flashScreen(0xff0000, 1000);
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
}
// Timer interval will be started after starting screen
var timerInterval = null;
var tapToStartAsset = null;
var tapToStartText = null;
// Show starting screen first
function showStartingScreen() {
// Create starting woman asset
startingWomanAsset = LK.getAsset('startingWoman', {
anchorX: 0.5,
anchorY: 0.5,
x: womanCenterX,
y: womanCenterY
});
game.addChild(startingWomanAsset);
// Create game name asset
gameNameAsset = LK.getAsset('GameName', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 - 400,
y: womanCenterY + 400 + 360 + 360 + 200
});
game.addChild(gameNameAsset);
// Create tap to start asset
tapToStartAsset = LK.getAsset('taptostart', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 400 + 80 + 89,
y: womanCenterY + 400 + 360 + 360 + 200 + 200 - 60 - 80
});
game.addChild(tapToStartAsset);
// Hide game elements during start screen
woman.visible = false;
questionText.visible = false;
for (var i = 0; i < answerButtons.length; i++) {
answerButtons[i].visible = false;
}
for (var i = 0; i < heartIcons.length; i++) {
heartIcons[i].visible = false;
}
}
// Function to start the game
function startGame() {
if (!showingStartScreen) {
return;
}
// Remove starting screen assets
if (startingWomanAsset) {
startingWomanAsset.destroy();
startingWomanAsset = null;
}
if (gameNameAsset) {
gameNameAsset.destroy();
gameNameAsset = null;
}
if (tapToStartAsset) {
tapToStartAsset.destroy();
tapToStartAsset = null;
}
if (tapToStartText) {
tapToStartText.destroy();
tapToStartText = null;
}
// Show game elements
woman.visible = true;
questionText.visible = true;
timerText.visible = true;
for (var i = 0; i < answerButtons.length; i++) {
answerButtons[i].visible = true;
}
for (var i = 0; i < heartIcons.length; i++) {
heartIcons[i].visible = true;
}
showingStartScreen = false;
// Start the actual game
updateHearts();
showQuestion();
// Start timer countdown
timerInterval = LK.setInterval(updateTimer, 1000);
}
// Add tap to start functionality
game.down = function (x, y, obj) {
if (showingStartScreen) {
startGame();
}
};
// Initial state - show starting screen
showStartingScreen();
// Make sure answer buttons are re-enabled after each question
for (var i = 0; i < 3; i++) {
answerButtons[i].down = function (i) {
return function (x, y, obj) {
handleAnswer(i);
};
}(i);
}
// No dragging or move events needed for this game
// No update loop needed ===================================================================
--- original.js
+++ change.js
@@ -503,9 +503,9 @@
var finalScreenAsset = LK.getAsset('FinalScreenAsset', {
anchorX: 0.5,
anchorY: 0.5,
x: womanCenterX,
- y: womanCenterY + 600 + 250 + 400 + 100 - 9 - 19 - 19 - 26 // move 5cm (250px) + 8cm (400px) + 2cm (100px) further down under youwinWoman asset, then 9px up, then 19px up, then 19px up again, then 26px up
+ y: womanCenterY + 600 + 250 + 400 + 100 - 9 - 19 - 19 - 26 - 26 // move 5cm (250px) + 8cm (400px) + 2cm (100px) further down under youwinWoman asset, then 9px up, then 19px up, then 19px up again, then 26px up, then 26px up again
});
game.addChild(finalScreenAsset);
// Add score text at bottom of screen
var youWinScoreText = new Text2('YOUR SCORE: ' + finalScore, {
Delete the mouth. Woman have no mouth. Just same skin color.
An anime womans mouth. Just mouth.. In-Game asset. 2d. High contrast. No shadows
Fill it red. Its a red rectangle. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Delete the mouth. Woman have no mouth. Just same skin color.
Make her shy and seksier
Show her from a little further away and make a victory sign with her hand and smiley face
same photo but make a victory sign with her hand and smile
Same style bu write: DON'T YOU KNOW WHO YOU ARE
Write "TAP TO START" with a comic font. In-Game asset. 2d. High contrast. No shadows
Write comics style What? in golden color. In-Game asset. 2d. High contrast. No shadows
make same heath like a woman
delete blacks