User prompt
Just delete the idea
User prompt
Make a start screen, but just with a start button
User prompt
Just delete the whole start screen
User prompt
so basically what should happen is I press the start button and it starts the game but it’s not working
User prompt
Make a start screen
User prompt
Make the game a little hard
User prompt
Make the slider a separate asset
User prompt
Replace the camera with a blue background
User prompt
Yes, but when the fireball is going, make it have less projectiles
User prompt
Make the fireball power up an asset
User prompt
I have an idea make a fireball power up and basically what it does is it shoots tiny fireball projectiles for about between five and 10 seconds and can kill obstacles
User prompt
OK, I have an idea. I want to make a power up called the fireball basically what it does is once you get it for about like five or 10 seconds you shoot, tiny fireball projectiles that instantly kill enemies or obstacles
User prompt
Do you know why just disable the the whole shop it’s not working out
User prompt
Can you just like disable that feature cause I don’t like it
User prompt
so thing isn’t working, so I have a new idea basically what I’m thinking is it keeps your score on top in the shop and see how much points you have earned in all and then when you go to select your skin, your player automatically goes to that ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
so basically it’s not working. Can you please fix it?
User prompt
OK so one thing I’ve noticed is when you’re in the menu and you’re trying to get skins and you have got this certain amount of skins to afford it. It does not let you I pressed on it and it doesn’t automatically give me it either.
User prompt
Create like new Skins in that menu and make them selectable to players that reach Eastern amount of points ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.getItem is not a function. (In 'storage.getItem('ownedSkins')', 'storage.getItem' is undefined)' in or related to this line: 'if (storage.getItem('ownedSkins')) {' Line Number: 339 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.get is not a function. (In 'storage.get('ownedSkins')', 'storage.get' is undefined)' in or related to this line: 'if (storage.get('ownedSkins')) {' Line Number: 339
User prompt
I like customize, so here’s my idea, idea what if there’s like a little circle in the top right of the screen so when you press on it and show you skins that you can buy for certain in the amount of points
User prompt
The collectible is still not reachable. If you make the bar longer I’ll be able to reach even the hardest Jesus.
User prompt
Hi, I want to change the game a little bit. I wanna give a control option a try where there’s just like a slider that you slide the player back-and-forth
Code edit (1 edits merged)
Please save this source code
User prompt
Face Dash: Smile Runner
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // Collectible class: moves downward, destroys itself off screen var Collectible = Container.expand(function () { var self = Container.call(this); var colAsset = self.attachAsset('collectible', { anchorX: 0.5, anchorY: 0.5 }); self.radius = colAsset.width / 2; self.speed = 12; // Will be set by game self.update = function () { self.y += self.speed; }; return self; }); // Fireball projectile: moves upward, destroys itself off screen or on hit var Fireball = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('skin_gold', { anchorX: 0.5, anchorY: 0.5, width: 60, height: 60 }); self.radius = asset.width / 2; self.speed = -36; // Fast upward self.update = function () { self.y += self.speed; }; return self; }); // FireballPowerup: when collected, enables fireball shooting for a duration var FireballPowerup = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('fireball_powerup', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 100 }); self.radius = asset.width / 2; self.speed = 12; self.update = function () { self.y += self.speed; }; return self; }); // Obstacle class: moves downward, destroys itself off screen var Obstacle = Container.expand(function () { var self = Container.call(this); var obsAsset = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.width = obsAsset.width; self.height = obsAsset.height; self.speed = 12; // Will be set by game self.update = function () { self.y += self.speed; }; return self; }); // Player class: follows face position, grows when mouth is open var Player = Container.expand(function () { var self = Container.call(this); var playerAsset = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.radius = playerAsset.width / 2; // For collision, always use self.x, self.y, and self.radius // Animate mouth open/close (scale up/down) self.setMouthOpen = function (open) { var targetScale = open ? 1.25 : 1.0; tween.stop(self, { scaleX: true, scaleY: true }); tween(self, { scaleX: targetScale, scaleY: targetScale }, { duration: 180, easing: tween.easeOut }); }; // For update, nothing needed (position is set by game) self.update = function () {}; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x3a7eea }); /**** * Game Code ****/ // Slider assets // Collectible: Green circle // Obstacle: Red rectangles // Character: The player avatar, a bright ellipse // Game area var GAME_W = 2048; var GAME_H = 2732; // --- Start Screen Overlay --- var startScreen = new Container(); var startBg = LK.getAsset('slider_bar', { anchorX: 0.5, anchorY: 0.5, x: GAME_W / 2, y: GAME_H / 2, width: 1200, height: 900 }); startBg.alpha = 0.92; startScreen.addChild(startBg); var titleText = new Text2("Cheese Dash!", { size: 180, fill: 0xFFF700 }); titleText.anchor.set(0.5, 0.5); titleText.x = GAME_W / 2; titleText.y = GAME_H / 2 - 260; startScreen.addChild(titleText); var subtitleText = new Text2("Collect cheese, avoid obstacles,\nget power-ups!", { size: 70, fill: 0xFFFFFF }); subtitleText.anchor.set(0.5, 0.5); subtitleText.x = GAME_W / 2; subtitleText.y = GAME_H / 2 - 80; startScreen.addChild(subtitleText); var playBtn = LK.getAsset('slider_knob', { anchorX: 0.5, anchorY: 0.5, x: GAME_W / 2, y: GAME_H / 2 + 180, width: 340, height: 180 }); startScreen.addChild(playBtn); var playText = new Text2("PLAY", { size: 100, fill: 0x3A7EEA }); playText.anchor.set(0.5, 0.5); playText.x = GAME_W / 2; playText.y = GAME_H / 2 + 180; startScreen.addChild(playText); game.addChild(startScreen); var gameStarted = false; // Block all game input until started var origGameDown = null; var origGameMove = null; var origGameUp = null; // Override game.down to handle start screen game.down = function (x, y, obj) { if (!gameStarted) { // Only respond if play button pressed var dx = x - playBtn.x; var dy = y - playBtn.y; // Use ellipse hit test for button var rx = playBtn.width / 2; var ry = playBtn.height / 2; if (dx * dx / (rx * rx) + dy * dy / (ry * ry) <= 1) { startScreen.visible = false; gameStarted = true; // Restore slider/game controls after start game.down = function (x, y, obj) { // Only start drag if touch is near knob var dx = x - sliderKnob.x; var dy = y - sliderKnob.y; if (dx * dx + dy * dy <= sliderKnobRadius * sliderKnobRadius * 1.2) { sliderDragging = true; // Move knob immediately sliderKnob.x = clampSliderKnobX(x); updatePlayerFromSlider(); } }; game.move = function (x, y, obj) { if (sliderDragging) { sliderKnob.x = clampSliderKnobX(x); updatePlayerFromSlider(); } }; game.up = function (x, y, obj) { sliderDragging = false; }; } return; } }; game.move = function (x, y, obj) { // Block move until started if (!gameStarted) return; }; game.up = function (x, y, obj) { // Block up until started if (!gameStarted) return; }; // Player setup var player = new Player(); player.x = GAME_W / 2; player.y = GAME_H * 0.8; player.scaleX = 1.0; player.scaleY = 1.0; game.addChild(player); // Apply selected skin if not default if (typeof selectedSkin !== 'undefined' && selectedSkin !== 'player') { player.removeChildren(); var newAsset = player.attachAsset(selectedSkin, { anchorX: 0.5, anchorY: 0.5 }); player.radius = newAsset.width / 2; } // Score display var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Arrays for obstacles, collectibles, fireballs, and powerups var obstacles = []; var collectibles = []; var fireballs = []; var fireballPowerups = []; // Fireball powerup state var fireballActive = false; var fireballTimer = 0; var fireballShootTicks = 0; // Game state var score = 0; var ticks = 0; var gameSpeed = 12; // Initial speed var spawnInterval = 60; // Frames between spawns (1 sec at 60fps) var collectibleInterval = 180; // Frames between collectibles // For collision detection function circleRectIntersect(cx, cy, cr, rx, ry, rw, rh) { // Find closest point to circle within rectangle var closestX = Math.max(rx - rw / 2, Math.min(cx, rx + rw / 2)); var closestY = Math.max(ry - rh / 2, Math.min(cy, ry + rh / 2)); var dx = cx - closestX; var dy = cy - closestY; return dx * dx + dy * dy < cr * cr; } function circleCircleIntersect(x1, y1, r1, x2, y2, r2) { var dx = x1 - x2; var dy = y1 - y2; var distSq = dx * dx + dy * dy; var rSum = r1 + r2; return distSq < rSum * rSum; } // Slider control variables var sliderBar = null; var sliderKnob = null; var sliderDragging = false; var sliderBarWidth = GAME_W; // Make the slider bar as wide as the game area var sliderBarHeight = 32; var sliderKnobRadius = 70; var sliderBarY = GAME_H - 220; // Place slider above bottom, visible on all screens // Create slider bar and knob using dedicated assets sliderBar = LK.getAsset('slider_bar', { anchorX: 0.5, anchorY: 0.5, x: GAME_W / 2, y: sliderBarY }); sliderKnob = LK.getAsset('slider_knob', { anchorX: 0.5, anchorY: 0.5, x: GAME_W / 2, y: sliderBarY }); sliderKnob.width = sliderKnobRadius * 2; sliderKnob.height = sliderKnobRadius * 2; game.addChild(sliderBar); game.addChild(sliderKnob); // Helper to clamp knob position function clampSliderKnobX(x) { // Allow knob to reach the very left and right edges of the bar var minX = sliderBar.x - sliderBarWidth / 2 + sliderKnobRadius; var maxX = sliderBar.x + sliderBarWidth / 2 - sliderKnobRadius; // If the knob is wider than the bar, clamp to center if (minX > maxX) { return sliderBar.x; } return Math.max(minX, Math.min(maxX, x)); } // Set initial knob position sliderKnob.x = GAME_W / 2; // Update player position from slider function updatePlayerFromSlider() { // Map knob X to player X, allowing player to reach the very left and right edges var minX = player.radius; var maxX = GAME_W - player.radius; var knobMinX = sliderBar.x - sliderBarWidth / 2 + sliderKnobRadius; var knobMaxX = sliderBar.x + sliderBarWidth / 2 - sliderKnobRadius; // If the knob is wider than the bar, set t to 0.5 (center) var t = knobMaxX === knobMinX ? 0.5 : (sliderKnob.x - knobMinX) / (knobMaxX - knobMinX); player.x = minX + t * (maxX - minX); // Player Y is fixed player.y = GAME_H * 0.8; } // Touch/mouse events for slider game.down = function (x, y, obj) { // Only start drag if touch is near knob var dx = x - sliderKnob.x; var dy = y - sliderKnob.y; if (dx * dx + dy * dy <= sliderKnobRadius * sliderKnobRadius * 1.2) { sliderDragging = true; // Move knob immediately sliderKnob.x = clampSliderKnobX(x); updatePlayerFromSlider(); } }; game.move = function (x, y, obj) { if (sliderDragging) { sliderKnob.x = clampSliderKnobX(x); updatePlayerFromSlider(); } }; game.up = function (x, y, obj) { sliderDragging = false; }; // Remove facekit control entirely // Spawning function spawnObstacle() { var obs = new Obstacle(); // Random X, avoid edges var margin = 80; obs.x = margin + Math.random() * (GAME_W - 2 * margin); obs.y = -obs.height / 2; obs.speed = gameSpeed; obstacles.push(obs); game.addChild(obs); } function spawnCollectible() { var col = new Collectible(); var margin = 80; col.x = margin + Math.random() * (GAME_W - 2 * margin); col.y = -col.radius; col.speed = gameSpeed; collectibles.push(col); game.addChild(col); } // Fireball powerup spawner (rare) function spawnFireballPowerup() { var p = new FireballPowerup(); var margin = 80; p.x = margin + Math.random() * (GAME_W - 2 * margin); p.y = -p.radius; p.speed = gameSpeed; fireballPowerups.push(p); game.addChild(p); } // Difficulty scaling function updateDifficulty() { // Every 7 points, increase speed and spawn rate (harder) var level = Math.floor(score / 7); gameSpeed = 14 + level * 2.5; // Start faster, scale faster spawnInterval = Math.max(18, 48 - level * 5); // Min ~0.3s, faster spawn } // Main update loop game.update = function () { if (!gameStarted) return; ticks++; // Slider control updatePlayerFromSlider(); // --- Fireball Powerup Spawning (rare, every 10 seconds) --- if (ticks % (60 * 10) === 0) { if (Math.random() < 0.7) { // 70% chance every 10s spawnFireballPowerup(); } } // Spawn obstacles if (ticks % spawnInterval === 0) { spawnObstacle(); } // Spawn collectibles if (ticks % collectibleInterval === 0) { spawnCollectible(); } // --- Fireball Powerup Update & Collision --- for (var fpi = fireballPowerups.length - 1; fpi >= 0; fpi--) { var p = fireballPowerups[fpi]; p.speed = gameSpeed; p.update(); // Collect powerup if (circleCircleIntersect(player.x, player.y, player.radius * player.scaleX, p.x, p.y, p.radius)) { fireballActive = true; // 5-10 seconds random duration fireballTimer = 60 * (5 + Math.floor(Math.random() * 6)); fireballShootTicks = 0; LK.effects.flashObject(player, 0xffa500, 400); p.destroy(); fireballPowerups.splice(fpi, 1); continue; } // Off screen if (p.y - p.radius > GAME_H + 100) { p.destroy(); fireballPowerups.splice(fpi, 1); } } // --- Fireball Powerup Timer & Shooting --- if (fireballActive) { fireballTimer--; fireballShootTicks++; // Shoot fireball every 18 frames (~3.3/sec, less projectiles) if (fireballShootTicks % 18 === 0) { var fb = new Fireball(); fb.x = player.x; fb.y = player.y - player.radius * player.scaleY - 30; fireballs.push(fb); game.addChild(fb); } if (fireballTimer <= 0) { fireballActive = false; } } // --- Fireball Update & Collision with Obstacles --- for (var fbi = fireballs.length - 1; fbi >= 0; fbi--) { var fb = fireballs[fbi]; fb.update(); var destroyed = false; // Remove if off screen if (fb.y + fb.radius < -100) { fb.destroy(); fireballs.splice(fbi, 1); continue; } // Check collision with obstacles for (var oi = obstacles.length - 1; oi >= 0; oi--) { var obs = obstacles[oi]; if (circleRectIntersect(fb.x, fb.y, fb.radius, obs.x, obs.y, obs.width, obs.height)) { // Destroy both fireball and obstacle obs.destroy(); obstacles.splice(oi, 1); fb.destroy(); fireballs.splice(fbi, 1); destroyed = true; break; } } if (destroyed) continue; } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.speed = gameSpeed; obs.update(); // Collision with player if (circleRectIntersect(player.x, player.y, player.radius * player.scaleX, obs.x, obs.y, obs.width, obs.height)) { // Flash screen, game over LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } // Off screen if (obs.y - obs.height / 2 > GAME_H + 100) { obs.destroy(); obstacles.splice(i, 1); } } // Update collectibles for (var j = collectibles.length - 1; j >= 0; j--) { var col = collectibles[j]; col.speed = gameSpeed; col.update(); // Collect if (circleCircleIntersect(player.x, player.y, player.radius * player.scaleX, col.x, col.y, col.radius)) { score += 1; LK.setScore(score); scoreTxt.setText(score); updateDifficulty(); // Update allTimePoints in storage if (!storage.allTimePoints) storage.allTimePoints = 0; storage.allTimePoints = storage.allTimePoints + 1; // Flash green LK.effects.flashObject(player, 0x7ed957, 300); col.destroy(); collectibles.splice(j, 1); // Win condition if (score >= 50) { LK.showYouWin(); return; } } // Off screen if (col.y - col.radius > GAME_H + 100) { col.destroy(); collectibles.splice(j, 1); } } }; // Initial score LK.setScore(0); scoreTxt.setText(0); // Place score text at top center, avoid top left 100x100 scoreTxt.y = 0; scoreTxt.x = 0; // Skin shop feature removed // No drag/move events needed; all control is via facekit // End of MVP
===================================================================
--- original.js
+++ change.js
@@ -106,13 +106,13 @@
/****
* Game Code
****/
-// Game area
-// Character: The player avatar, a bright ellipse
-// Obstacle: Red rectangles
-// Collectible: Green circle
// Slider assets
+// Collectible: Green circle
+// Obstacle: Red rectangles
+// Character: The player avatar, a bright ellipse
+// Game area
var GAME_W = 2048;
var GAME_H = 2732;
// --- Start Screen Overlay ---
var startScreen = new Container();
@@ -161,31 +161,55 @@
startScreen.addChild(playText);
game.addChild(startScreen);
var gameStarted = false;
// Block all game input until started
-var origGameDown = game.down;
-var origGameMove = game.move;
-var origGameUp = game.up;
+var origGameDown = null;
+var origGameMove = null;
+var origGameUp = null;
+// Override game.down to handle start screen
game.down = function (x, y, obj) {
if (!gameStarted) {
// Only respond if play button pressed
var dx = x - playBtn.x;
var dy = y - playBtn.y;
- if (dx * dx + dy * dy < playBtn.width / 2 * (playBtn.height / 2) * 0.8) {
+ // Use ellipse hit test for button
+ var rx = playBtn.width / 2;
+ var ry = playBtn.height / 2;
+ if (dx * dx / (rx * rx) + dy * dy / (ry * ry) <= 1) {
startScreen.visible = false;
gameStarted = true;
+ // Restore slider/game controls after start
+ game.down = function (x, y, obj) {
+ // Only start drag if touch is near knob
+ var dx = x - sliderKnob.x;
+ var dy = y - sliderKnob.y;
+ if (dx * dx + dy * dy <= sliderKnobRadius * sliderKnobRadius * 1.2) {
+ sliderDragging = true;
+ // Move knob immediately
+ sliderKnob.x = clampSliderKnobX(x);
+ updatePlayerFromSlider();
+ }
+ };
+ game.move = function (x, y, obj) {
+ if (sliderDragging) {
+ sliderKnob.x = clampSliderKnobX(x);
+ updatePlayerFromSlider();
+ }
+ };
+ game.up = function (x, y, obj) {
+ sliderDragging = false;
+ };
}
return;
}
- if (origGameDown) origGameDown(x, y, obj);
};
game.move = function (x, y, obj) {
+ // Block move until started
if (!gameStarted) return;
- if (origGameMove) origGameMove(x, y, obj);
};
game.up = function (x, y, obj) {
+ // Block up until started
if (!gameStarted) return;
- if (origGameUp) origGameUp(x, y, obj);
};
// Player setup
var player = new Player();
player.x = GAME_W / 2;