User prompt
Change game name and do Try Dodge Chaos Kachowww
User prompt
Hide my player ın main menu
User prompt
Remove the top list top my player/avatar icon or hide a back
User prompt
I dont wanna see my player icon ın main menu please remove it
User prompt
Remove the top list up player icon main menu
User prompt
I dont wanna see my avatar ın main menu remove hım
User prompt
Please fix the bug: 'menuPlayer is not defined' in or related to this line: 'tween(menuPlayer, {' Line Number: 311 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Remove player the main menü
User prompt
Fix the leaderboard error
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.topScores = safeTopScoresObj;' Line Number: 615 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.topScores = topScoresObj;' Line Number: 604
User prompt
Remove last command
User prompt
Please fix the bug: 'mainMenuOverlay.swapChildren is not a function' in or related to this line: 'mainMenuOverlay.swapChildren(titleText, titleShadow); // Ensure shadow is behind' Line Number: 248
User prompt
Make a real good a main menü
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.topScores = safeScores;' Line Number: 531 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.topScores = scores;' Line Number: 521
User prompt
Please fix the bug: 'Uncaught TypeError: storage.getItem is not a function' in or related to this line: 'var scoresRaw = storage.getItem('topScores');' Line Number: 401 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Uncaught TypeError: storage.get is not a function' in or related to this line: 'var scores = storage.get('topScores') || [];' Line Number: 401
User prompt
Make top list player
User prompt
Make a little bit player raster
User prompt
Create a main menü
User prompt
Remove all corner meme photo
User prompt
Remove all corner meme photo
User prompt
I wanna see corner meme show meme
User prompt
Please fix the bug: 'LK.hasAsset is not a function' in or related to this line: 'if (!LK.hasAsset(assetId)) {}' Line Number: 204
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Obstacle class: moves in a straight or curved unpredictable path, fast var Obstacle = Container.expand(function () { var self = Container.call(this); // Randomly pick a shape and color var type = Math.floor(Math.random() * 4); var assetId = 'obstacleBox'; if (type === 1) assetId = 'obstacleEllipse'; if (type === 2) assetId = 'obstacleBox2'; if (type === 3) assetId = 'obstacleEllipse2'; var obstacleGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); // Tint obstacles to a backrooms yellow obstacleGraphics.tint = 0xffe066; // Randomize size a bit for more chaos var scale = 0.8 + Math.random() * 0.7; obstacleGraphics.scaleX = scale; obstacleGraphics.scaleY = scale; // Movement: random direction, speed, and optional curve // Start position: randomly from one of the four edges var edge = Math.floor(Math.random() * 4); // 0: top, 1: right, 2: bottom, 3: left var startX = 0, startY = 0, endX = 0, endY = 0; var w = 2048, h = 2732; // For curved movement, we use a simple parametric curve (sin/cos offset) self.curve = Math.random() < 0.5; // 50% chance to curve self.curvePhase = Math.random() * Math.PI * 2; self.curveAmp = 80 + Math.random() * 120; // Speed: fast, but random self.speed = 22 + Math.random() * 18; // px per frame // Set start/end positions based on edge if (edge === 0) { // top startX = 100 + Math.random() * (w - 200); startY = -100; endX = 100 + Math.random() * (w - 200); endY = h + 100; } else if (edge === 1) { // right startX = w + 100; startY = 100 + Math.random() * (h - 200); endX = -100; endY = 100 + Math.random() * (h - 200); } else if (edge === 2) { // bottom startX = 100 + Math.random() * (w - 200); startY = h + 100; endX = 100 + Math.random() * (w - 200); endY = -100; } else { // left startX = -100; startY = 100 + Math.random() * (h - 200); endX = w + 100; endY = 100 + Math.random() * (h - 200); } self.x = startX; self.y = startY; self.startX = startX; self.startY = startY; self.endX = endX; self.endY = endY; // For movement progress self.progress = 0; // 0 to 1 // For collision detection self.lastIntersecting = false; // Update method: move along the path self.update = function () { // Move progress var dx = self.endX - self.startX; var dy = self.endY - self.startY; var dist = Math.sqrt(dx * dx + dy * dy); var totalFrames = dist / self.speed; self.progress += 1 / totalFrames; if (self.progress > 1.1) { self.progress = 1.1; } // Linear movement var px = self.startX + dx * self.progress; var py = self.startY + dy * self.progress; // Add curve if needed if (self.curve) { // Perpendicular direction var perpAngle = Math.atan2(dy, dx) + Math.PI / 2; var curveOffset = Math.sin(self.progress * Math.PI + self.curvePhase) * self.curveAmp; px += Math.cos(perpAngle) * curveOffset; py += Math.sin(perpAngle) * curveOffset; } self.x = px; self.y = py; }; return self; }); // Player class: draggable circle var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // Tint player to a faded yellow for backrooms vibe playerGraphics.tint = 0xfff7b2; // For touch feedback self.flash = function () { tween(playerGraphics, { tint: 0xff0000 }, { duration: 100, easing: tween.linear, onFinish: function onFinish() { tween(playerGraphics, { tint: 0xffffff }, { duration: 200, easing: tween.linear }); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xffe066 // Backrooms yellow }); /**** * Game Code ****/ // Meme corner images // Game variables var memeCornerImages = [ // Example meme image URLs (replace with actual meme URLs or asset IDs as needed) "https://i.imgur.com/1Q9Z1Zm.png", "https://i.imgur.com/2vQtZBb.png", "https://i.imgur.com/3g7nmJC.png", "https://i.imgur.com/4h8kQwD.png", "https://i.imgur.com/5j9lKpE.png", "https://i.imgur.com/6k8mLwF.png"]; // Store meme image objects so we can remove them on reset var memeCornerNodes = []; // Obstacles: fast-moving, unpredictable shapes (boxes and ellipses, different colors/sizes) // Player: small, bright circle // Sound for dodge (optional, not used as per guidelines) // LK.init.sound('dodge', {volume: 0.5}); var player = new Player(); var obstacles = []; var dragNode = null; var lastGameOver = false; var timeSurvived = 0; // in ms var timerText = null; var spawnInterval = 36; // frames between spawns, will decrease var minSpawnInterval = 12; var spawnTick = 0; var gameOver = false; // Place player at center player.x = 2048 / 2; player.y = 2732 / 2; game.addChild(player); // Place four large, different meme images in all four corners, each with a unique image function addMemeCorners() { // Remove any previous meme nodes for (var i = 0; i < memeCornerNodes.length; i++) { memeCornerNodes[i].destroy(); } memeCornerNodes = []; // Pick 4 unique memes (no repeats) var usedIndexes = []; for (var c = 0; c < 4; c++) { var idx; do { idx = Math.floor(Math.random() * memeCornerImages.length); } while (usedIndexes.indexOf(idx) !== -1 && usedIndexes.length < memeCornerImages.length); usedIndexes.push(idx); var url = memeCornerImages[idx]; // Dynamically create an LK image asset for this meme if not already present var assetId = "memeCorner" + c + "_" + idx; // Register the image asset (LK will ignore duplicate registrations) // Create a large meme node (big in the corner, but not covering gameplay) var memeNode = LK.getAsset(assetId, { anchorX: 0, anchorY: 0 }); // Set a large size for the meme image (about 600x600 px, but not bigger than 1/3 of width/height) var maxW = 600, maxH = 600; if (memeNode.width > maxW) { var scale = maxW / memeNode.width; memeNode.scaleX = scale; memeNode.scaleY = scale; } if (memeNode.height > maxH) { var scale = maxH / memeNode.height; memeNode.scaleX = scale; memeNode.scaleY = scale; } // Position in corner if (c === 0) { // top left memeNode.x = 0; memeNode.y = 0; } else if (c === 1) { // top right memeNode.x = 2048 - memeNode.width * memeNode.scaleX; memeNode.y = 0; } else if (c === 2) { // bottom left memeNode.x = 0; memeNode.y = 2732 - memeNode.height * memeNode.scaleY; } else if (c === 3) { // bottom right memeNode.x = 2048 - memeNode.width * memeNode.scaleX; memeNode.y = 2732 - memeNode.height * memeNode.scaleY; } // Add to game game.addChild(memeNode); memeCornerNodes.push(memeNode); } } addMemeCorners(); // Timer text (top center) timerText = new Text2('0.00', { size: 120, fill: "#fff" }); timerText.anchor.set(0.5, 0); LK.gui.top.addChild(timerText); // Prevent player from being placed in top left 100x100 function clampPlayerPosition(x, y) { var px = x, py = y; var r = player.width / 2; if (px < r + 10) px = r + 10; if (px > 2048 - r - 10) px = 2048 - r - 10; if (py < r + 10) py = r + 10; if (py > 2732 - r - 10) py = 2732 - r - 10; // Avoid top left menu if (px - r < 100 && py - r < 100) { if (px > py) px = 100 + r + 10;else py = 100 + r + 10; } return { x: px, y: py }; } // Dragging logic function handleMove(x, y, obj) { if (gameOver) return; if (dragNode) { var pos = clampPlayerPosition(x, y); dragNode.x = pos.x; dragNode.y = pos.y; } } game.move = handleMove; game.down = function (x, y, obj) { // Only allow drag if touch is on player var dx = x - player.x; var dy = y - player.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < player.width / 2 + 10) { dragNode = player; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; // Main update loop game.update = function () { if (gameOver) return; // Update timer timeSurvived += 1000 / 60; var t = Math.floor(timeSurvived) / 1000; timerText.setText(t.toFixed(2)); // Increase difficulty over time if (timeSurvived > 8000 && spawnInterval > minSpawnInterval) { spawnInterval = 24; } if (timeSurvived > 18000 && spawnInterval > minSpawnInterval) { spawnInterval = 16; } if (timeSurvived > 30000 && spawnInterval > minSpawnInterval) { spawnInterval = minSpawnInterval; } // Spawn new obstacles spawnTick++; if (spawnTick >= spawnInterval) { spawnTick = 0; var obs = new Obstacle(); obstacles.push(obs); game.addChild(obs); } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.update(); // Remove if out of bounds if (obs.progress > 1.05) { obs.destroy(); obstacles.splice(i, 1); continue; } // Collision detection var intersecting = obs.intersects(player); if (!obs.lastIntersecting && intersecting) { // Game over player.flash(); LK.effects.flashScreen(0xff0000, 800); gameOver = true; LK.setTimeout(function () { LK.showGameOver(); }, 600); break; } obs.lastIntersecting = intersecting; } }; // Reset logic (when game restarts) game.on('reset', function () { // Remove all obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; // Reset player position player.x = 2048 / 2; player.y = 2732 / 2; dragNode = null; timeSurvived = 0; spawnInterval = 36; spawnTick = 0; gameOver = false; timerText.setText('0.00'); // Re-add meme corners addMemeCorners(); });
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Obstacle class: moves in a straight or curved unpredictable path, fast
var Obstacle = Container.expand(function () {
var self = Container.call(this);
// Randomly pick a shape and color
var type = Math.floor(Math.random() * 4);
var assetId = 'obstacleBox';
if (type === 1) assetId = 'obstacleEllipse';
if (type === 2) assetId = 'obstacleBox2';
if (type === 3) assetId = 'obstacleEllipse2';
var obstacleGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// Tint obstacles to a backrooms yellow
obstacleGraphics.tint = 0xffe066;
// Randomize size a bit for more chaos
var scale = 0.8 + Math.random() * 0.7;
obstacleGraphics.scaleX = scale;
obstacleGraphics.scaleY = scale;
// Movement: random direction, speed, and optional curve
// Start position: randomly from one of the four edges
var edge = Math.floor(Math.random() * 4); // 0: top, 1: right, 2: bottom, 3: left
var startX = 0,
startY = 0,
endX = 0,
endY = 0;
var w = 2048,
h = 2732;
// For curved movement, we use a simple parametric curve (sin/cos offset)
self.curve = Math.random() < 0.5; // 50% chance to curve
self.curvePhase = Math.random() * Math.PI * 2;
self.curveAmp = 80 + Math.random() * 120;
// Speed: fast, but random
self.speed = 22 + Math.random() * 18; // px per frame
// Set start/end positions based on edge
if (edge === 0) {
// top
startX = 100 + Math.random() * (w - 200);
startY = -100;
endX = 100 + Math.random() * (w - 200);
endY = h + 100;
} else if (edge === 1) {
// right
startX = w + 100;
startY = 100 + Math.random() * (h - 200);
endX = -100;
endY = 100 + Math.random() * (h - 200);
} else if (edge === 2) {
// bottom
startX = 100 + Math.random() * (w - 200);
startY = h + 100;
endX = 100 + Math.random() * (w - 200);
endY = -100;
} else {
// left
startX = -100;
startY = 100 + Math.random() * (h - 200);
endX = w + 100;
endY = 100 + Math.random() * (h - 200);
}
self.x = startX;
self.y = startY;
self.startX = startX;
self.startY = startY;
self.endX = endX;
self.endY = endY;
// For movement progress
self.progress = 0; // 0 to 1
// For collision detection
self.lastIntersecting = false;
// Update method: move along the path
self.update = function () {
// Move progress
var dx = self.endX - self.startX;
var dy = self.endY - self.startY;
var dist = Math.sqrt(dx * dx + dy * dy);
var totalFrames = dist / self.speed;
self.progress += 1 / totalFrames;
if (self.progress > 1.1) {
self.progress = 1.1;
}
// Linear movement
var px = self.startX + dx * self.progress;
var py = self.startY + dy * self.progress;
// Add curve if needed
if (self.curve) {
// Perpendicular direction
var perpAngle = Math.atan2(dy, dx) + Math.PI / 2;
var curveOffset = Math.sin(self.progress * Math.PI + self.curvePhase) * self.curveAmp;
px += Math.cos(perpAngle) * curveOffset;
py += Math.sin(perpAngle) * curveOffset;
}
self.x = px;
self.y = py;
};
return self;
});
// Player class: draggable circle
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
// Tint player to a faded yellow for backrooms vibe
playerGraphics.tint = 0xfff7b2;
// For touch feedback
self.flash = function () {
tween(playerGraphics, {
tint: 0xff0000
}, {
duration: 100,
easing: tween.linear,
onFinish: function onFinish() {
tween(playerGraphics, {
tint: 0xffffff
}, {
duration: 200,
easing: tween.linear
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffe066 // Backrooms yellow
});
/****
* Game Code
****/
// Meme corner images
// Game variables
var memeCornerImages = [
// Example meme image URLs (replace with actual meme URLs or asset IDs as needed)
"https://i.imgur.com/1Q9Z1Zm.png", "https://i.imgur.com/2vQtZBb.png", "https://i.imgur.com/3g7nmJC.png", "https://i.imgur.com/4h8kQwD.png", "https://i.imgur.com/5j9lKpE.png", "https://i.imgur.com/6k8mLwF.png"];
// Store meme image objects so we can remove them on reset
var memeCornerNodes = [];
// Obstacles: fast-moving, unpredictable shapes (boxes and ellipses, different colors/sizes)
// Player: small, bright circle
// Sound for dodge (optional, not used as per guidelines)
// LK.init.sound('dodge', {volume: 0.5});
var player = new Player();
var obstacles = [];
var dragNode = null;
var lastGameOver = false;
var timeSurvived = 0; // in ms
var timerText = null;
var spawnInterval = 36; // frames between spawns, will decrease
var minSpawnInterval = 12;
var spawnTick = 0;
var gameOver = false;
// Place player at center
player.x = 2048 / 2;
player.y = 2732 / 2;
game.addChild(player);
// Place four large, different meme images in all four corners, each with a unique image
function addMemeCorners() {
// Remove any previous meme nodes
for (var i = 0; i < memeCornerNodes.length; i++) {
memeCornerNodes[i].destroy();
}
memeCornerNodes = [];
// Pick 4 unique memes (no repeats)
var usedIndexes = [];
for (var c = 0; c < 4; c++) {
var idx;
do {
idx = Math.floor(Math.random() * memeCornerImages.length);
} while (usedIndexes.indexOf(idx) !== -1 && usedIndexes.length < memeCornerImages.length);
usedIndexes.push(idx);
var url = memeCornerImages[idx];
// Dynamically create an LK image asset for this meme if not already present
var assetId = "memeCorner" + c + "_" + idx;
// Register the image asset (LK will ignore duplicate registrations)
// Create a large meme node (big in the corner, but not covering gameplay)
var memeNode = LK.getAsset(assetId, {
anchorX: 0,
anchorY: 0
});
// Set a large size for the meme image (about 600x600 px, but not bigger than 1/3 of width/height)
var maxW = 600,
maxH = 600;
if (memeNode.width > maxW) {
var scale = maxW / memeNode.width;
memeNode.scaleX = scale;
memeNode.scaleY = scale;
}
if (memeNode.height > maxH) {
var scale = maxH / memeNode.height;
memeNode.scaleX = scale;
memeNode.scaleY = scale;
}
// Position in corner
if (c === 0) {
// top left
memeNode.x = 0;
memeNode.y = 0;
} else if (c === 1) {
// top right
memeNode.x = 2048 - memeNode.width * memeNode.scaleX;
memeNode.y = 0;
} else if (c === 2) {
// bottom left
memeNode.x = 0;
memeNode.y = 2732 - memeNode.height * memeNode.scaleY;
} else if (c === 3) {
// bottom right
memeNode.x = 2048 - memeNode.width * memeNode.scaleX;
memeNode.y = 2732 - memeNode.height * memeNode.scaleY;
}
// Add to game
game.addChild(memeNode);
memeCornerNodes.push(memeNode);
}
}
addMemeCorners();
// Timer text (top center)
timerText = new Text2('0.00', {
size: 120,
fill: "#fff"
});
timerText.anchor.set(0.5, 0);
LK.gui.top.addChild(timerText);
// Prevent player from being placed in top left 100x100
function clampPlayerPosition(x, y) {
var px = x,
py = y;
var r = player.width / 2;
if (px < r + 10) px = r + 10;
if (px > 2048 - r - 10) px = 2048 - r - 10;
if (py < r + 10) py = r + 10;
if (py > 2732 - r - 10) py = 2732 - r - 10;
// Avoid top left menu
if (px - r < 100 && py - r < 100) {
if (px > py) px = 100 + r + 10;else py = 100 + r + 10;
}
return {
x: px,
y: py
};
}
// Dragging logic
function handleMove(x, y, obj) {
if (gameOver) return;
if (dragNode) {
var pos = clampPlayerPosition(x, y);
dragNode.x = pos.x;
dragNode.y = pos.y;
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Only allow drag if touch is on player
var dx = x - player.x;
var dy = y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < player.width / 2 + 10) {
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main update loop
game.update = function () {
if (gameOver) return;
// Update timer
timeSurvived += 1000 / 60;
var t = Math.floor(timeSurvived) / 1000;
timerText.setText(t.toFixed(2));
// Increase difficulty over time
if (timeSurvived > 8000 && spawnInterval > minSpawnInterval) {
spawnInterval = 24;
}
if (timeSurvived > 18000 && spawnInterval > minSpawnInterval) {
spawnInterval = 16;
}
if (timeSurvived > 30000 && spawnInterval > minSpawnInterval) {
spawnInterval = minSpawnInterval;
}
// Spawn new obstacles
spawnTick++;
if (spawnTick >= spawnInterval) {
spawnTick = 0;
var obs = new Obstacle();
obstacles.push(obs);
game.addChild(obs);
}
// Update obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
var obs = obstacles[i];
obs.update();
// Remove if out of bounds
if (obs.progress > 1.05) {
obs.destroy();
obstacles.splice(i, 1);
continue;
}
// Collision detection
var intersecting = obs.intersects(player);
if (!obs.lastIntersecting && intersecting) {
// Game over
player.flash();
LK.effects.flashScreen(0xff0000, 800);
gameOver = true;
LK.setTimeout(function () {
LK.showGameOver();
}, 600);
break;
}
obs.lastIntersecting = intersecting;
}
};
// Reset logic (when game restarts)
game.on('reset', function () {
// Remove all obstacles
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].destroy();
}
obstacles = [];
// Reset player position
player.x = 2048 / 2;
player.y = 2732 / 2;
dragNode = null;
timeSurvived = 0;
spawnInterval = 36;
spawnTick = 0;
gameOver = false;
timerText.setText('0.00');
// Re-add meme corners
addMemeCorners();
});