User prompt
Make the controls more consistent and stop screen scrolling
User prompt
Make the screen scroll slower
User prompt
Let's add the soundtrack
User prompt
Please add sound effects and music
Code edit (1 edits merged)
Please save this source code
User prompt
Rock & Hop: Riff Runner
Initial prompt
Let's make a platformer in which you play as an electric guitar the coins will be guitar picks and the obstacles are string cutters the death sounds will be a guitar sequel
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Guitar = Container.expand(function () { var self = Container.call(this); var guitarGraphics = self.attachAsset('guitar', { anchorX: 0.5, anchorY: 0.5 }); self.vx = 0; self.vy = 0; self.isJumping = false; self.canJump = true; self.gravity = 0.8; self.jumpForce = -20; self.moveSpeed = 10; self.hasWhammy = false; self.hasAmp = false; self.ampTimer = 0; self.whammyTimer = 0; self.jump = function () { if (self.canJump) { self.vy = self.jumpForce; self.isJumping = true; self.canJump = false; LK.getSound('jump').play(); LK.getSound('jump').play(); } }; self.update = function () { // Apply gravity self.vy += self.gravity; // Move guitar self.y += self.vy; // Update powerup timers if (self.hasAmp) { self.ampTimer--; if (self.ampTimer <= 0) { self.hasAmp = false; guitarGraphics.tint = 0xFFFFFF; } } if (self.hasWhammy) { self.whammyTimer--; if (self.whammyTimer <= 0) { self.hasWhammy = false; guitarGraphics.alpha = 1; } } }; self.activateAmplifier = function () { self.hasAmp = true; self.ampTimer = 300; // 5 seconds at 60fps guitarGraphics.tint = 0xFF00FF; // Change color to indicate amplified }; self.activateWhammy = function () { self.hasWhammy = true; self.whammyTimer = 300; // 5 seconds at 60fps guitarGraphics.alpha = 0.6; // Fade to indicate whammy bar protection }; self.reset = function () { self.vx = 0; self.vy = 0; self.isJumping = false; self.canJump = true; self.hasWhammy = false; self.hasAmp = false; guitarGraphics.tint = 0xFFFFFF; guitarGraphics.alpha = 1; }; return self; }); var GuitarPick = Container.expand(function () { var self = Container.call(this); var pickGraphics = self.attachAsset('guitarPick', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; // Move at the same speed as platforms self.active = true; self.collected = false; self.update = function () { if (self.active && !self.collected) { self.y += self.speed; // Rotation for nice visual effect pickGraphics.rotation += 0.02; // Remove if off-screen if (self.y > 2832) { self.active = false; } } }; self.collect = function () { self.collected = true; self.visible = false; LK.getSound('pickCollect').play(); LK.getSound('pickCollect').play(); }; self.reset = function () { self.active = true; self.collected = false; self.visible = true; }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; // Default platform speed self.active = true; self.update = function () { if (self.active) { self.y += self.speed; // Remove platform if it's off-screen if (self.y > 2832) { self.active = false; } } }; self.reset = function () { self.active = true; }; return self; }); var PowerUp = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'amplifier'; // Default to amplifier var powerupGraphics = self.attachAsset(self.type, { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; // Move at the same speed as platforms self.active = true; self.collected = false; self.update = function () { if (self.active && !self.collected) { self.y += self.speed; // Rotation for nice visual effect powerupGraphics.rotation += 0.01; // Remove if off-screen if (self.y > 2832) { self.active = false; } } }; self.collect = function () { self.collected = true; self.visible = false; LK.getSound('powerUp').play(); LK.getSound('powerUp').play(); }; self.reset = function () { self.active = true; self.collected = false; self.visible = true; }; return self; }); var StringCutter = Container.expand(function () { var self = Container.call(this); var cutterGraphics = self.attachAsset('stringCutter', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 7; // Slightly faster than platforms self.active = true; self.update = function () { if (self.active) { self.y += self.speed; // Simple animation cutterGraphics.rotation += 0.04; // Remove if off-screen if (self.y > 2832) { self.active = false; } } }; self.reset = function () { self.active = true; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x202020 }); /**** * Game Code ****/ // Game state variables var scrollSpeed = 5; var score = 0; var gameRunning = true; var difficulty = 1; var platformSpawnTimer = 0; var pickSpawnTimer = 0; var cutterSpawnTimer = 0; var powerupSpawnTimer = 0; var lastPlatformY = 0; // Arrays to hold game objects var platforms = []; var picks = []; var cutters = []; var powerups = []; // Set up background var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // Create player guitar var guitar = new Guitar(); guitar.x = 2048 / 2; guitar.y = 2732 / 2; game.addChild(guitar); // Create UI elements var scoreTxt = new Text2('SCORE: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Spawner functions function spawnPlatform() { var platform = new Platform(); platform.x = Math.random() * (2048 - 300) + 150; // Random position within screen bounds platform.y = -50; // Start above the screen // Track the Y-position for spawning objects on platforms lastPlatformY = platform.y; platforms.push(platform); game.addChild(platform); // Randomly decide if we should spawn a pick on this platform if (Math.random() < 0.5) { spawnPickOnPlatform(platform.x, platform.y); } // Randomly spawn a powerup (less frequently) if (Math.random() < 0.15) { spawnPowerupOnPlatform(platform.x, platform.y); } } function spawnPickOnPlatform(x, y) { var pick = new GuitarPick(); pick.x = x; pick.y = y - 50; // Position slightly above the platform picks.push(pick); game.addChild(pick); } function spawnPowerupOnPlatform(x, y) { var type = Math.random() < 0.5 ? 'amplifier' : 'whammyBar'; var powerup = new PowerUp(type); powerup.x = x; powerup.y = y - 70; // Position above the platform powerups.push(powerup); game.addChild(powerup); } function spawnCutter() { var cutter = new StringCutter(); cutter.x = Math.random() * (2048 - 100) + 50; // Random position cutter.y = -50; // Start above the screen cutters.push(cutter); game.addChild(cutter); } // Collision check functions function checkPlatformCollisions() { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; if (platform.active && guitar.vy > 0) { // Only check when falling if (guitar.intersects(platform)) { // Land on the platform guitar.y = platform.y - (platform.height / 2 + guitar.height / 2) + 10; guitar.vy = 0; guitar.isJumping = false; guitar.canJump = true; } } } } function checkPickCollisions() { for (var i = 0; i < picks.length; i++) { var pick = picks[i]; if (pick.active && !pick.collected && guitar.intersects(pick)) { pick.collect(); score += 10; scoreTxt.setText('SCORE: ' + score); } } } function checkCutterCollisions() { for (var i = 0; i < cutters.length; i++) { var cutter = cutters[i]; if (cutter.active && guitar.intersects(cutter)) { if (guitar.hasWhammy) { // Whammy bar protects from one hit guitar.hasWhammy = false; cutter.active = false; cutter.visible = false; } else { // Game over LK.getSound('guitarSqueal').play(); LK.getSound('guitarSqueal').play(); LK.effects.flashScreen(0xFF0000, 500); gameRunning = false; LK.showGameOver(); } } } } function checkPowerupCollisions() { for (var i = 0; i < powerups.length; i++) { var powerup = powerups[i]; if (powerup.active && !powerup.collected && guitar.intersects(powerup)) { powerup.collect(); if (powerup.type === 'amplifier') { guitar.activateAmplifier(); } else if (powerup.type === 'whammyBar') { guitar.activateWhammy(); } } } } function checkBoundaries() { // Don't let guitar go off the sides if (guitar.x < guitar.width / 2) { guitar.x = guitar.width / 2; } else if (guitar.x > 2048 - guitar.width / 2) { guitar.x = 2048 - guitar.width / 2; } // Game over if guitar falls off the bottom if (guitar.y > 2732 + guitar.height) { LK.getSound('guitarSqueal').play(); LK.getSound('guitarSqueal').play(); LK.effects.flashScreen(0xFF0000, 500); gameRunning = false; LK.showGameOver(); } } // Event handlers game.down = function (x, y, obj) { // Jump when tapping left half of screen if (x < 2048 / 2) { guitar.jump(); } // Move right when tapping right half else { guitar.x += guitar.moveSpeed * 5; } }; game.move = function (x, y, obj) { // No dragging implementation for now }; game.up = function (x, y, obj) { // Release handling }; // Update function game.update = function () { if (!gameRunning) { return; } // Increase difficulty over time if (LK.ticks % 600 === 0 && difficulty < 5) { difficulty += 0.5; scrollSpeed = 5 + difficulty; } // Update guitar guitar.update(); // Update platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); if (!platforms[i].active) { platforms[i].destroy(); platforms.splice(i, 1); } } // Update picks for (var i = picks.length - 1; i >= 0; i--) { picks[i].update(); if (!picks[i].active || picks[i].collected) { picks[i].destroy(); picks.splice(i, 1); } } // Update cutters for (var i = cutters.length - 1; i >= 0; i--) { cutters[i].update(); if (!cutters[i].active) { cutters[i].destroy(); cutters.splice(i, 1); } } // Update powerups for (var i = powerups.length - 1; i >= 0; i--) { powerups[i].update(); if (!powerups[i].active || powerups[i].collected) { powerups[i].destroy(); powerups.splice(i, 1); } } // Check collisions checkPlatformCollisions(); checkPickCollisions(); checkCutterCollisions(); checkPowerupCollisions(); checkBoundaries(); // Spawn objects platformSpawnTimer++; cutterSpawnTimer++; // Spawn platforms if (platformSpawnTimer > 60 / difficulty) { spawnPlatform(); platformSpawnTimer = 0; } // Spawn cutters if (cutterSpawnTimer > 120 / difficulty) { spawnCutter(); cutterSpawnTimer = 0; } // Update score based on survival time if (LK.ticks % 60 === 0) { score++; scoreTxt.setText('SCORE: ' + score); LK.setScore(score); } }; // Initial platform setup for (var i = 0; i < 5; i++) { var startingPlatform = new Platform(); startingPlatform.x = Math.random() * (2048 - 300) + 150; startingPlatform.y = 500 + i * 400; platforms.push(startingPlatform); game.addChild(startingPlatform); // Add a pick to some of the initial platforms if (Math.random() < 0.5) { var initialPick = new GuitarPick(); initialPick.x = startingPlatform.x; initialPick.y = startingPlatform.y - 50; picks.push(initialPick); game.addChild(initialPick); } } // Starting platform for player var homePlatform = new Platform(); homePlatform.x = 2048 / 2; homePlatform.y = 2732 / 2 + 150; platforms.push(homePlatform); game.addChild(homePlatform); // Place guitar on starting platform guitar.x = homePlatform.x; guitar.y = homePlatform.y - 150; // Start the game music LK.playMusic('rockTrack'); // Start the game music LK.playMusic('rockTrack');
===================================================================
--- original.js
+++ change.js
@@ -29,8 +29,9 @@
self.vy = self.jumpForce;
self.isJumping = true;
self.canJump = false;
LK.getSound('jump').play();
+ LK.getSound('jump').play();
}
};
self.update = function () {
// Apply gravity
@@ -98,8 +99,9 @@
self.collect = function () {
self.collected = true;
self.visible = false;
LK.getSound('pickCollect').play();
+ LK.getSound('pickCollect').play();
};
self.reset = function () {
self.active = true;
self.collected = false;
@@ -153,8 +155,9 @@
self.collect = function () {
self.collected = true;
self.visible = false;
LK.getSound('powerUp').play();
+ LK.getSound('powerUp').play();
};
self.reset = function () {
self.active = true;
self.collected = false;
@@ -309,8 +312,9 @@
cutter.visible = false;
} else {
// Game over
LK.getSound('guitarSqueal').play();
+ LK.getSound('guitarSqueal').play();
LK.effects.flashScreen(0xFF0000, 500);
gameRunning = false;
LK.showGameOver();
}
@@ -339,8 +343,9 @@
}
// Game over if guitar falls off the bottom
if (guitar.y > 2732 + guitar.height) {
LK.getSound('guitarSqueal').play();
+ LK.getSound('guitarSqueal').play();
LK.effects.flashScreen(0xFF0000, 500);
gameRunning = false;
LK.showGameOver();
}
@@ -457,5 +462,7 @@
// Place guitar on starting platform
guitar.x = homePlatform.x;
guitar.y = homePlatform.y - 150;
// Start the game music
+LK.playMusic('rockTrack');
+// Start the game music
LK.playMusic('rockTrack');
\ No newline at end of file
Blue Electric guitar flying v. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Electric guitar Amplifier. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Guitar pick. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Whammy bar. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
String cutters. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows