User prompt
Play the game according to your own settings, make it fun but a little difficult, and adjust the jumping accordingly, but make it beautiful.
User prompt
Reduce jump by 1x
User prompt
The game should be difficult but not that hard, the jump is tripled
User prompt
It is not possible to jump more or
User prompt
It is not possible to jump more or
User prompt
Let the game go from coding to difficulty and have sections, 1 is very easy, 2 is easy, 3 is difficult and so on, and have sections and difficulty on top.
User prompt
Please fix the bug: 'TypeError: LK.effects.shake is not a function' in or related to this line: 'LK.effects.shake(game, 12, 120);' Line Number: 106
User prompt
Please fix the bug: 'TypeError: LK.effects.shakeScreen is not a function' in or related to this line: 'LK.effects.shakeScreen(12, 120);' Line Number: 106
User prompt
Let the jipping be better, let the game be more fun and give a fun feeling like in that game.
Code edit (1 edits merged)
Please save this source code
User prompt
Dash of Geometry
Initial prompt
Let it be like geometry dash, let it be very beautiful and have a menu screen with lots of effects.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Particle class for jump/dash effects var Particle = Container.expand(function () { var self = Container.call(this); var p = self.attachAsset('particle', { anchorX: 0.5, anchorY: 0.5 }); self.life = 30 + Math.random() * 20; self.vx = (Math.random() - 0.5) * 16; self.vy = -8 - Math.random() * 8; self.alpha = 1; self.update = function () { self.x += self.vx; self.y += self.vy; self.vy += 1.2; self.life--; self.alpha -= 0.03; if (self.life <= 0 || self.alpha <= 0) { self.destroy(); } }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var cube = self.attachAsset('playerCube', { anchorX: 0.5, anchorY: 1 }); self.width = cube.width; self.height = cube.height; self.velY = 0; self.isGrounded = false; self.jumpPower = -62; // Balanced jump: high but not too floaty self.gravity = 3.7; // Slightly stronger gravity for snappier feel self.alive = true; self.jumpQueued = false; // For jump effect self.jumpEffect = function () { tween(self, { scaleX: 1.2, scaleY: 0.8 }, { duration: 80, easing: tween.cubicOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 120, easing: tween.cubicIn }); } }); }; // Called every tick self.update = function () { if (!self.alive) return; // Gravity self.velY += self.gravity; self.y += self.velY; // Clamp to ground if (self.y > groundY) { if (!self.isGrounded && Math.abs(self.velY) > 10) { // Only trigger on real landings, not just standing // Enhanced squash and stretch on landing for beauty tween(self, { scaleX: 1.32, scaleY: 0.62 }, { duration: 70, easing: tween.elasticOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 140, easing: tween.cubicIn }); } }); // Screen feedback effect (flash as shake is not available) LK.effects.flashScreen(0x00eaff, 120); // Landing particles for (var i = 0; i < 8; i++) { var p = new Particle(); p.x = self.x; p.y = groundY + 10; p.vx = (Math.random() - 0.5) * 18; p.vy = -6 - Math.random() * 6; p.alpha = 0.7 + Math.random() * 0.3; particles.push(p); game.addChild(p); } } self.y = groundY; self.velY = 0; self.isGrounded = true; } else { self.isGrounded = false; } // Jump if queued if (self.jumpQueued && self.isGrounded) { self.velY = self.jumpPower; self.isGrounded = false; self.jumpQueued = false; // Extra squash before jump for beauty and juice tween(self, { scaleX: 1.18, scaleY: 0.82 }, { duration: 48, easing: tween.cubicOut, onFinish: function onFinish() { self.jumpEffect(); } }); // Burst of particles for jump for (var i = 0; i < 10; i++) { var p = new Particle(); p.x = self.x; p.y = self.y - self.height / 2; p.vx = (Math.random() - 0.5) * 22; p.vy = -10 - Math.random() * 12; p.alpha = 1; particles.push(p); game.addChild(p); } } }; // Call to queue a jump self.jump = function () { // Allow jumping at any height as long as player is grounded and alive if (self.isGrounded && self.alive) { self.jumpQueued = true; } }; // Call on death self.die = function () { self.alive = false; // Big screen feedback effect (flash as shake is not available) LK.effects.flashScreen(0xff2d55, 400); // Particle burst for (var i = 0; i < 24; i++) { var p = new Particle(); p.x = self.x; p.y = self.y - self.height / 2; p.vx = (Math.random() - 0.5) * 32; p.vy = -12 - Math.random() * 18; p.alpha = 1; particles.push(p); game.addChild(p); } tween(self, { rotation: Math.PI * 2, alpha: 0 }, { duration: 600, easing: tween.cubicIn }); }; return self; }); // Obstacle (spike) class var Spike = Container.expand(function () { var self = Container.call(this); var spike = self.attachAsset('spike', { anchorX: 0.5, anchorY: 1 }); self.width = spike.width; self.height = spike.height; self.speed = 22; self.update = function () { self.x -= self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c2a }); /**** * Game Code ****/ // Music // Particle (small circle) // Background effect (ellipse) // Obstacle (spike) // Ground platform // Main player cube // Game constants var groundY = 2200; var playerStartX = 420; var playerStartY = groundY; var gameSpeed = 22; var spikeMinGap = 420; var spikeMaxGap = 820; var spikeTimer = 0; var spikeGap = 0; var score = 0; var isGameActive = false; var particles = []; var spikes = []; var bgEllipses = []; var lastTick = 0; // Background ellipses for visual effect for (var i = 0; i < 3; i++) { var bg = LK.getAsset('bgEllipse', { anchorX: 0.5, anchorY: 0.5, x: 1024 + (i - 1) * 900, y: 1200 + i * 200, scaleX: 1.2 + i * 0.2, scaleY: 1.1 + i * 0.1, alpha: 0.18 + i * 0.07 }); game.addChild(bg); bgEllipses.push(bg); } // Ground var ground = LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 0, y: groundY }); game.addChild(ground); // Player var player = new Player(); player.x = playerStartX; player.y = playerStartY; game.addChild(player); // Score text var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Section/difficulty display var sectionNames = ["Very Easy", "Easy", "Medium", "Hard", "Very Hard", "Impossible"]; var sectionThresholds = [0, 5, 12, 20, 26, 30]; // Score at which each section starts var currentSection = 0; var sectionTxt = new Text2('Section: Very Easy', { size: 80, fill: 0xFFD700 }); sectionTxt.anchor.set(0.5, 0); sectionTxt.x = 1024; sectionTxt.y = 120; LK.gui.top.addChild(sectionTxt); // Animated title for menu var titleTxt = new Text2('Dash of Geometry', { size: 160, fill: 0x00EAFF }); titleTxt.anchor.set(0.5, 0.5); titleTxt.x = 1024; titleTxt.y = 900; titleTxt.alpha = 1; LK.gui.center.addChild(titleTxt); // Tap to start text var tapTxt = new Text2('Tap to Start', { size: 80, fill: 0xFFFFFF }); tapTxt.anchor.set(0.5, 0.5); tapTxt.x = 1024; tapTxt.y = 1200; tapTxt.alpha = 0.8; LK.gui.center.addChild(tapTxt); // Animate menu texts tween(titleTxt, { y: 820 }, { duration: 900, easing: tween.elasticOut }); tween(tapTxt, { alpha: 1 }, { duration: 800, easing: tween.cubicInOut }); // Hide score at menu scoreTxt.visible = false; sectionTxt.visible = false; // Start game function function startGame() { // Remove menu LK.gui.center.removeChild(titleTxt); LK.gui.center.removeChild(tapTxt); // Reset state isGameActive = true; score = 0; scoreTxt.setText(score); scoreTxt.visible = true; sectionTxt.visible = true; // Reset player player.x = playerStartX; player.y = playerStartY; player.velY = 0; player.alive = true; player.rotation = 0; player.alpha = 1; player.scaleX = 1; player.scaleY = 1; // Remove spikes for (var i = spikes.length - 1; i >= 0; i--) { spikes[i].destroy(); spikes.splice(i, 1); } // Remove particles for (var i = particles.length - 1; i >= 0; i--) { particles[i].destroy(); particles.splice(i, 1); } // Reset spike timer spikeTimer = 0; currentSection = 0; sectionTxt.setText("Section: " + sectionNames[0]); spikeMinGap = 470; spikeMaxGap = 820; spikeGap = spikeMinGap + Math.random() * (spikeMaxGap - spikeMinGap); // Play music LK.playMusic('bgmusic', { fade: { start: 0, end: 1, duration: 1200 } }); } // End game function function endGame() { isGameActive = false; player.die(); LK.effects.flashScreen(0xff2d55, 600); LK.stopMusic(); LK.setTimeout(function () { LK.showGameOver(); }, 900); } // Particle spawn on jump function spawnJumpParticles(x, y) { for (var i = 0; i < 8; i++) { var p = new Particle(); p.x = x; p.y = y + 40; particles.push(p); game.addChild(p); } } // Particle spawn on score function spawnScoreParticles(x, y) { for (var i = 0; i < 12; i++) { var p = new Particle(); p.x = x; p.y = y; p.vx = (Math.random() - 0.5) * 24; p.vy = -12 - Math.random() * 10; p.alpha = 1; particles.push(p); game.addChild(p); } } // Main game update game.update = function () { // Animate background ellipses for (var i = 0; i < bgEllipses.length; i++) { var bg = bgEllipses[i]; bg.x -= 0.7 + i * 0.2; if (bg.x < -400) { bg.x = 2048 + 400; } } // Menu animation if (!isGameActive) { // Pulse tap text tapTxt.alpha = 0.7 + 0.3 * Math.sin(LK.ticks / 20); titleTxt.rotation = Math.sin(LK.ticks / 60) * 0.04; return; } // Player update player.update(); // Spikes update for (var i = spikes.length - 1; i >= 0; i--) { var s = spikes[i]; s.update(); // Remove off-screen spikes if (s.x < -s.width) { s.destroy(); spikes.splice(i, 1); continue; } // Collision with player if (player.alive && player.intersects(s)) { endGame(); return; } // Score when passed if (!s.scored && s.x + s.width / 2 < player.x - player.width / 2) { s.scored = true; score++; scoreTxt.setText(score); spawnScoreParticles(player.x, player.y - player.height / 2); // Update section/difficulty if needed for (var sec = sectionThresholds.length - 1; sec >= 0; sec--) { if (score >= sectionThresholds[sec]) { if (currentSection !== sec) { currentSection = sec; sectionTxt.setText("Section: " + sectionNames[sec]); // Optional: flash section text for feedback tween(sectionTxt, { alpha: 0.2 }, { duration: 80, onFinish: function onFinish() { tween(sectionTxt, { alpha: 1 }, { duration: 180 }); } }); } break; } } // Adjust spike gap for difficulty if (currentSection === 0) { spikeMinGap = 470; spikeMaxGap = 820; } else if (currentSection === 1) { spikeMinGap = 370; spikeMaxGap = 700; } else if (currentSection === 2) { spikeMinGap = 290; spikeMaxGap = 600; } else if (currentSection === 3) { spikeMinGap = 210; spikeMaxGap = 480; } else if (currentSection === 4) { spikeMinGap = 140; spikeMaxGap = 340; } else { spikeMinGap = 90; spikeMaxGap = 220; } // Win condition if (score >= 30) { LK.effects.flashScreen(0x00eaff, 800); LK.showYouWin(); return; } } } // Particles update for (var i = particles.length - 1; i >= 0; i--) { var p = particles[i]; p.update(); if (p.life <= 0 || p.alpha <= 0) { p.destroy(); particles.splice(i, 1); } } // Spawn spikes spikeTimer += gameSpeed; if (spikeTimer > spikeGap) { spikeTimer = 0; spikeGap = spikeMinGap + Math.random() * (spikeMaxGap - spikeMinGap); var s = new Spike(); s.x = 2048 + s.width / 2; s.y = groundY; s.scored = false; spikes.push(s); game.addChild(s); } }; // Tap to jump or start game.down = function (x, y, obj) { if (!isGameActive) { startGame(); } else { player.jump(); } }; // Prevent drag game.move = function (x, y, obj) {}; // On game over, show menu again LK.on('gameover', function () { // Show menu LK.gui.center.addChild(titleTxt); LK.gui.center.addChild(tapTxt); scoreTxt.visible = false; sectionTxt.visible = false; tween(titleTxt, { y: 900 }, { duration: 600, easing: tween.elasticOut }); tween(tapTxt, { alpha: 1 }, { duration: 600, easing: tween.cubicInOut }); }); // On win, show menu again LK.on('youwin', function () { LK.gui.center.addChild(titleTxt); LK.gui.center.addChild(tapTxt); scoreTxt.visible = false; sectionTxt.visible = false; tween(titleTxt, { y: 900 }, { duration: 600, easing: tween.elasticOut }); tween(tapTxt, { alpha: 1 }, { duration: 600, easing: tween.cubicInOut }); });
===================================================================
--- original.js
+++ change.js
@@ -39,10 +39,10 @@
self.width = cube.width;
self.height = cube.height;
self.velY = 0;
self.isGrounded = false;
- self.jumpPower = -76; // Doubled jump power for higher jumps
- self.gravity = 3.2;
+ self.jumpPower = -62; // Balanced jump: high but not too floaty
+ self.gravity = 3.7; // Slightly stronger gravity for snappier feel
self.alive = true;
self.jumpQueued = false;
// For jump effect
self.jumpEffect = function () {
@@ -72,21 +72,21 @@
// Clamp to ground
if (self.y > groundY) {
if (!self.isGrounded && Math.abs(self.velY) > 10) {
// Only trigger on real landings, not just standing
- // Squash and stretch on landing
+ // Enhanced squash and stretch on landing for beauty
tween(self, {
- scaleX: 1.25,
- scaleY: 0.7
+ scaleX: 1.32,
+ scaleY: 0.62
}, {
- duration: 60,
- easing: tween.cubicOut,
+ duration: 70,
+ easing: tween.elasticOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
- duration: 120,
+ duration: 140,
easing: tween.cubicIn
});
}
});
@@ -114,14 +114,14 @@
if (self.jumpQueued && self.isGrounded) {
self.velY = self.jumpPower;
self.isGrounded = false;
self.jumpQueued = false;
- // Extra squash before jump for juice
+ // Extra squash before jump for beauty and juice
tween(self, {
- scaleX: 1.35,
- scaleY: 0.7
+ scaleX: 1.18,
+ scaleY: 0.82
}, {
- duration: 60,
+ duration: 48,
easing: tween.cubicOut,
onFinish: function onFinish() {
self.jumpEffect();
}
@@ -334,10 +334,10 @@
// Reset spike timer
spikeTimer = 0;
currentSection = 0;
sectionTxt.setText("Section: " + sectionNames[0]);
- spikeMinGap = 520;
- spikeMaxGap = 900;
+ spikeMinGap = 470;
+ spikeMaxGap = 820;
spikeGap = spikeMinGap + Math.random() * (spikeMaxGap - spikeMinGap);
// Play music
LK.playMusic('bgmusic', {
fade: {
@@ -444,25 +444,25 @@
}
}
// Adjust spike gap for difficulty
if (currentSection === 0) {
- spikeMinGap = 520;
- spikeMaxGap = 900;
- } else if (currentSection === 1) {
- spikeMinGap = 420;
+ spikeMinGap = 470;
spikeMaxGap = 820;
- } else if (currentSection === 2) {
- spikeMinGap = 340;
+ } else if (currentSection === 1) {
+ spikeMinGap = 370;
spikeMaxGap = 700;
- } else if (currentSection === 3) {
- spikeMinGap = 260;
+ } else if (currentSection === 2) {
+ spikeMinGap = 290;
spikeMaxGap = 600;
- } else if (currentSection === 4) {
- spikeMinGap = 180;
+ } else if (currentSection === 3) {
+ spikeMinGap = 210;
spikeMaxGap = 480;
+ } else if (currentSection === 4) {
+ spikeMinGap = 140;
+ spikeMaxGap = 340;
} else {
- spikeMinGap = 120;
- spikeMaxGap = 320;
+ spikeMinGap = 90;
+ spikeMaxGap = 220;
}
// Win condition
if (score >= 30) {
LK.effects.flashScreen(0x00eaff, 800);