User prompt
Small still doesn't fit the floor, it just is floating
User prompt
Still doesn't fit the floor, it just is floating
User prompt
Make player character small version have it's own hitbox
User prompt
Make multiple copies of bg be there so loops more natural
User prompt
Re-add bg movement code
User prompt
Make it cover whole in-between the 2 and not move it stays there
User prompt
Make it cover whole in-between the 2 and not move it stays there
User prompt
Resize this into a bg in middle of floor and ceiling
User prompt
Add random spike and orb powerup patterns for each play! Orb makes player smaller and jump higher for 5 jumps. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Change hitboxes to be like the models here
User prompt
Add bg music loop
Code edit (1 edits merged)
Please save this source code
User prompt
Cave Runner
Initial prompt
Geometry Dash recreation. Don't call it geometry Rush, also cave bg
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var CeilingSegment = Container.expand(function () { var self = Container.call(this); var ceilingGraphics = self.attachAsset('ceiling', { anchorX: 0, anchorY: 1 }); self.speed = -8; self.update = function () { self.x += self.speed; }; return self; }); var GroundSegment = Container.expand(function () { var self = Container.call(this); var groundGraphics = self.attachAsset('ground', { anchorX: 0, anchorY: 0 }); self.speed = -8; self.update = function () { self.x += self.speed; }; return self; }); var Obstacle = Container.expand(function () { var self = Container.call(this); var obstacleGraphics = self.attachAsset('spike', { anchorX: 0.5, anchorY: 1.0 }); self.speed = -8; self.update = function () { self.x += self.speed; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.gravity = 0.8; self.jumpPower = -16; self.isGrounded = false; self.groundY = 2400; self.jump = function () { if (self.isGrounded) { self.velocityY = self.jumpPower; self.isGrounded = false; LK.getSound('jump').play(); } }; self.update = function () { // Apply gravity self.velocityY += self.gravity; self.y += self.velocityY; // Ground collision if (self.y >= self.groundY) { self.y = self.groundY; self.velocityY = 0; self.isGrounded = true; } // Ceiling collision if (self.y <= 200) { self.y = 200; self.velocityY = 0; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c1810 }); /**** * Game Code ****/ var player; var obstacles = []; var groundSegments = []; var ceilingSegments = []; var gameSpeed = 8; var obstacleSpawnTimer = 0; var groundSpawnTimer = 0; var ceilingSpawnTimer = 0; var distance = 0; var isGameRunning = true; // Score display var scoreTxt = new Text2('Distance: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Create player player = game.addChild(new Player()); player.x = 400; player.y = 2400; // Initialize ground segments for (var i = 0; i < 15; i++) { var groundSeg = new GroundSegment(); groundSeg.x = i * 200; groundSeg.y = 2500; groundSegments.push(groundSeg); game.addChild(groundSeg); } // Initialize ceiling segments for (var i = 0; i < 15; i++) { var ceilingSeg = new CeilingSegment(); ceilingSeg.x = i * 200; ceilingSeg.y = 100; ceilingSegments.push(ceilingSeg); game.addChild(ceilingSeg); } function spawnObstacle() { var obstacle = new Obstacle(); obstacle.x = 2200; obstacle.y = 2500; obstacles.push(obstacle); game.addChild(obstacle); } function spawnGroundSegment() { var groundSeg = new GroundSegment(); groundSeg.x = 2200; groundSeg.y = 2500; groundSegments.push(groundSeg); game.addChild(groundSeg); } function spawnCeilingSegment() { var ceilingSeg = new CeilingSegment(); ceilingSeg.x = 2200; ceilingSeg.y = 100; ceilingSegments.push(ceilingSeg); game.addChild(ceilingSeg); } function resetGame() { isGameRunning = false; LK.getSound('death').play(); LK.effects.flashScreen(0xff0000, 500); LK.setTimeout(function () { LK.showGameOver(); }, 500); } function checkCollisions() { if (!isGameRunning) return; // Check obstacle collisions for (var i = 0; i < obstacles.length; i++) { var obstacle = obstacles[i]; if (player.intersects(obstacle)) { resetGame(); return; } } } game.down = function (x, y, obj) { if (isGameRunning) { player.jump(); } }; game.update = function () { if (!isGameRunning) return; // Update distance distance += gameSpeed; LK.setScore(Math.floor(distance / 10)); scoreTxt.setText('Distance: ' + Math.floor(distance / 10)); // Spawn obstacles obstacleSpawnTimer++; if (obstacleSpawnTimer >= 90) { spawnObstacle(); obstacleSpawnTimer = 0; } // Spawn ground segments groundSpawnTimer++; if (groundSpawnTimer >= 25) { spawnGroundSegment(); groundSpawnTimer = 0; } // Spawn ceiling segments ceilingSpawnTimer++; if (ceilingSpawnTimer >= 25) { spawnCeilingSegment(); ceilingSpawnTimer = 0; } // Remove off-screen obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obstacle = obstacles[i]; if (obstacle.x < -100) { obstacle.destroy(); obstacles.splice(i, 1); } } // Remove off-screen ground segments for (var i = groundSegments.length - 1; i >= 0; i--) { var groundSeg = groundSegments[i]; if (groundSeg.x < -300) { groundSeg.destroy(); groundSegments.splice(i, 1); } } // Remove off-screen ceiling segments for (var i = ceilingSegments.length - 1; i >= 0; i--) { var ceilingSeg = ceilingSegments[i]; if (ceilingSeg.x < -300) { ceilingSeg.destroy(); ceilingSegments.splice(i, 1); } } // Check collisions checkCollisions(); // Increase difficulty over time if (LK.ticks % 600 === 0 && gameSpeed < 12) { gameSpeed += 0.5; } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,228 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var CeilingSegment = Container.expand(function () {
+ var self = Container.call(this);
+ var ceilingGraphics = self.attachAsset('ceiling', {
+ anchorX: 0,
+ anchorY: 1
+ });
+ self.speed = -8;
+ self.update = function () {
+ self.x += self.speed;
+ };
+ return self;
+});
+var GroundSegment = Container.expand(function () {
+ var self = Container.call(this);
+ var groundGraphics = self.attachAsset('ground', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ self.speed = -8;
+ self.update = function () {
+ self.x += self.speed;
+ };
+ return self;
+});
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var obstacleGraphics = self.attachAsset('spike', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.speed = -8;
+ self.update = function () {
+ self.x += self.speed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityY = 0;
+ self.gravity = 0.8;
+ self.jumpPower = -16;
+ self.isGrounded = false;
+ self.groundY = 2400;
+ self.jump = function () {
+ if (self.isGrounded) {
+ self.velocityY = self.jumpPower;
+ self.isGrounded = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += self.gravity;
+ self.y += self.velocityY;
+ // Ground collision
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.velocityY = 0;
+ self.isGrounded = true;
+ }
+ // Ceiling collision
+ if (self.y <= 200) {
+ self.y = 200;
+ self.velocityY = 0;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2c1810
+});
+
+/****
+* Game Code
+****/
+var player;
+var obstacles = [];
+var groundSegments = [];
+var ceilingSegments = [];
+var gameSpeed = 8;
+var obstacleSpawnTimer = 0;
+var groundSpawnTimer = 0;
+var ceilingSpawnTimer = 0;
+var distance = 0;
+var isGameRunning = true;
+// Score display
+var scoreTxt = new Text2('Distance: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Create player
+player = game.addChild(new Player());
+player.x = 400;
+player.y = 2400;
+// Initialize ground segments
+for (var i = 0; i < 15; i++) {
+ var groundSeg = new GroundSegment();
+ groundSeg.x = i * 200;
+ groundSeg.y = 2500;
+ groundSegments.push(groundSeg);
+ game.addChild(groundSeg);
+}
+// Initialize ceiling segments
+for (var i = 0; i < 15; i++) {
+ var ceilingSeg = new CeilingSegment();
+ ceilingSeg.x = i * 200;
+ ceilingSeg.y = 100;
+ ceilingSegments.push(ceilingSeg);
+ game.addChild(ceilingSeg);
+}
+function spawnObstacle() {
+ var obstacle = new Obstacle();
+ obstacle.x = 2200;
+ obstacle.y = 2500;
+ obstacles.push(obstacle);
+ game.addChild(obstacle);
+}
+function spawnGroundSegment() {
+ var groundSeg = new GroundSegment();
+ groundSeg.x = 2200;
+ groundSeg.y = 2500;
+ groundSegments.push(groundSeg);
+ game.addChild(groundSeg);
+}
+function spawnCeilingSegment() {
+ var ceilingSeg = new CeilingSegment();
+ ceilingSeg.x = 2200;
+ ceilingSeg.y = 100;
+ ceilingSegments.push(ceilingSeg);
+ game.addChild(ceilingSeg);
+}
+function resetGame() {
+ isGameRunning = false;
+ LK.getSound('death').play();
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 500);
+}
+function checkCollisions() {
+ if (!isGameRunning) return;
+ // Check obstacle collisions
+ for (var i = 0; i < obstacles.length; i++) {
+ var obstacle = obstacles[i];
+ if (player.intersects(obstacle)) {
+ resetGame();
+ return;
+ }
+ }
+}
+game.down = function (x, y, obj) {
+ if (isGameRunning) {
+ player.jump();
+ }
+};
+game.update = function () {
+ if (!isGameRunning) return;
+ // Update distance
+ distance += gameSpeed;
+ LK.setScore(Math.floor(distance / 10));
+ scoreTxt.setText('Distance: ' + Math.floor(distance / 10));
+ // Spawn obstacles
+ obstacleSpawnTimer++;
+ if (obstacleSpawnTimer >= 90) {
+ spawnObstacle();
+ obstacleSpawnTimer = 0;
+ }
+ // Spawn ground segments
+ groundSpawnTimer++;
+ if (groundSpawnTimer >= 25) {
+ spawnGroundSegment();
+ groundSpawnTimer = 0;
+ }
+ // Spawn ceiling segments
+ ceilingSpawnTimer++;
+ if (ceilingSpawnTimer >= 25) {
+ spawnCeilingSegment();
+ ceilingSpawnTimer = 0;
+ }
+ // Remove off-screen obstacles
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obstacle = obstacles[i];
+ if (obstacle.x < -100) {
+ obstacle.destroy();
+ obstacles.splice(i, 1);
+ }
+ }
+ // Remove off-screen ground segments
+ for (var i = groundSegments.length - 1; i >= 0; i--) {
+ var groundSeg = groundSegments[i];
+ if (groundSeg.x < -300) {
+ groundSeg.destroy();
+ groundSegments.splice(i, 1);
+ }
+ }
+ // Remove off-screen ceiling segments
+ for (var i = ceilingSegments.length - 1; i >= 0; i--) {
+ var ceilingSeg = ceilingSegments[i];
+ if (ceilingSeg.x < -300) {
+ ceilingSeg.destroy();
+ ceilingSegments.splice(i, 1);
+ }
+ }
+ // Check collisions
+ checkCollisions();
+ // Increase difficulty over time
+ if (LK.ticks % 600 === 0 && gameSpeed < 12) {
+ gameSpeed += 0.5;
+ }
+};
\ No newline at end of file