User prompt
Add a music monster that drops monster bullets
User prompt
Add a sound asset when turbo instrument is hit
User prompt
Do not spawn bombs during turbo mode
User prompt
Do not spawn another turbo instrument during turbo mode
User prompt
Let turbo mode last for 5 seconds and then revert to single shot mode. Add a timer bar on the bottom left of screen during turbo mode āŖš” Consider importing and using the following plugins: @upit/tween.v1
User prompt
Add turbo bonus instrument that causes shooting to be in 3 speeadout lines not one āŖš” Consider importing and using the following plugins: @upit/tween.v1
User prompt
Shoot multiple time on long press
User prompt
Shoot when anywhere on the screen is tapped or clicked instead of shooting when mouth not open
User prompt
Move GUI in front of play area
User prompt
Move GUI area in front of HUD
User prompt
Put HUD in front of play area
User prompt
Change score text to bold and black ā Change level text to bold and black ā Change guitars hit text to bold and black
User prompt
Change score text to bold and black ā Change level text to bold and black ā Change timer text to bold and black ā Change guitars hit text to bold and black
User prompt
Change all text inside HUD to bold and black
User prompt
ā Change guitar hit counter text to bold and gray ā Change scores text to bold and gray
User prompt
ā Change level text to bold and black ā Change timer text to bold and black
User prompt
ā Change level text to bold and gray ā Change timer text to bold and gray
User prompt
Change all text withing HUD to bold and gray text color
User prompt
Put a sky blue background behind the top HUD with a 20px bottom margin
User prompt
Put a blue background behind the top HUD with a 20px bottom padding
User prompt
Put a light blue background behind the top HUD
User prompt
Increase spawn frequency of instruments as the levels increase
User prompt
Remove collission avoidance during guitar movement, instead let the instrument disappear on Collision with guitar
User prompt
Dont let instruments overlap guitars
User prompt
Dont let guitars overlap instruments
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); var facekit = LK.import("@upit/facekit.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -15; self.update = function () { self.y += self.speed; }; return self; }); var Guitar = Container.expand(function () { var self = Container.call(this); var guitarGraphics = self.attachAsset('guitar', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.points = 5; self.instrumentType = 'guitar'; self.update = function () { self.x += self.speed; }; return self; }); var Gun = Container.expand(function () { var self = Container.call(this); var gunGraphics = self.attachAsset('gun', { anchorX: 0.5, anchorY: 1 }); self.update = function () { if (facekit.mouthCenter.x > 0) { self.x = facekit.mouthCenter.x; } }; return self; }); var Instrument = Container.expand(function (type) { var self = Container.call(this); var instrumentGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.points = 1; self.instrumentType = type; self.lifespan = 180; // 3 seconds at 60fps self.update = function () { self.lifespan--; }; return self; }); var Particle = Container.expand(function (x, y, type) { var self = Container.call(this); var particleGraphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.x = x; self.y = y; // Random velocity var angle = Math.random() * Math.PI * 2; var speed = 5 + Math.random() * 10; self.vx = Math.cos(angle) * speed; self.vy = Math.sin(angle) * speed; // Random rotation speed self.rotationSpeed = (Math.random() - 0.5) * 0.3; // Lifetime self.lifetime = 1000; // 1 second // Initial scale self.scaleX = self.scaleY = 1; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var gun; var bullets = []; var guitars = []; var instruments = []; var particles = []; var level = 1; var guitarsHit = 0; var timeRemaining = 30; var guitarSpeed = 3; var instrumentSpawnRate = 120; var lastMouthOpen = false; var gameTimer; var spawnTimer = 0; var lives = 3; // Add HUD background var hudBackground = game.addChild(LK.getAsset('hudBg', { anchorX: 0, anchorY: 0 })); hudBackground.x = 0; hudBackground.y = 0; // Initialize gun gun = game.addChild(new Gun()); gun.x = 1024; gun.y = 2600; // Score display var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0x808080, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Level display var levelTxt = new Text2('Level: 1', { size: 60, fill: 0x000000, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); levelTxt.anchor.set(1, 0); levelTxt.x = -20; LK.gui.topRight.addChild(levelTxt); // Timer display - larger and more prominent var timerTxt = new Text2('30', { size: 120, fill: 0x000000, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); timerTxt.anchor.set(1, 0); timerTxt.x = -20; timerTxt.y = 80; LK.gui.topRight.addChild(timerTxt); // Guitars hit display var guitarsHitTxt = new Text2('Guitars: 0/3', { size: 60, fill: 0x808080, font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" }); guitarsHitTxt.anchor.set(0.5, 0); guitarsHitTxt.y = 100; LK.gui.top.addChild(guitarsHitTxt); // Lives display container var livesContainer = new Container(); livesContainer.x = -100; livesContainer.y = -100; LK.gui.bottomRight.addChild(livesContainer); // Create life icons var lifeIcons = []; for (var i = 0; i < 3; i++) { var lifeIcon = LK.getAsset('life', { anchorX: 0.5, anchorY: 0.5 }); lifeIcon.x = -i * 70; // Changed to position icons to the left lifeIcon.y = 0; lifeIcons.push(lifeIcon); livesContainer.addChild(lifeIcon); } // Start game timer gameTimer = LK.setInterval(function () { timeRemaining--; timerTxt.setText(timeRemaining.toString()); // Add color change when time is running out if (timeRemaining <= 10) { timerTxt.setStyle({ fill: 0xFF0000 }); } else { timerTxt.setStyle({ fill: 0x000000 }); } if (timeRemaining <= 0) { // Lose a life instead of game over lives--; // Remove a life icon if (lifeIcons.length > 0 && lives >= 0) { var removedLife = lifeIcons.pop(); removedLife.destroy(); } // Flash screen red to indicate life lost LK.effects.flashScreen(0xFF0000, 500); // Check if game over if (lives <= 0) { LK.showGameOver(); } else { // Reset timer for next life timeRemaining = 30; timerTxt.setText(timeRemaining.toString()); // Reset timer color timerTxt.setStyle({ fill: 0x000000 }); } } }, 1000); // Create particle explosion effect function createExplosion(x, y) { var particleCount = 15 + Math.floor(Math.random() * 10); for (var i = 0; i < particleCount; i++) { var particleType = Math.random() < 0.5 ? 'particle1' : 'particle2'; var particle = new Particle(x, y, particleType); particles.push(particle); game.addChild(particle); // Animate particle tween(particle, { scaleX: 0, scaleY: 0, alpha: 0 }, { duration: particle.lifetime, easing: tween.easeOut, onFinish: function onFinish() { // Particle will be cleaned up in update loop } }); } } // Play background music LK.playMusic('bgmusic'); game.update = function () { // Check neutral face (not mouth open) to shoot if (!facekit.mouthOpen && lastMouthOpen) { var newBullet = new Bullet(); newBullet.x = gun.x; newBullet.y = gun.y - 120; bullets.push(newBullet); game.addChild(newBullet); LK.getSound('shoot').play(); } lastMouthOpen = facekit.mouthOpen; // Spawn guitars if (LK.ticks % 180 === 0) { // Every 3 seconds var newGuitar = new Guitar(); newGuitar.x = -60; newGuitar.y = 500; // Moved lower to avoid HUD overlap newGuitar.speed = guitarSpeed; guitars.push(newGuitar); game.addChild(newGuitar); } // Spawn random instruments spawnTimer++; if (spawnTimer >= instrumentSpawnRate) { spawnTimer = 0; var types = ['drum', 'flute', 'piano', 'saxophone', 'bomb', 'xylophone', 'tuba', 'harp']; var type = types[Math.floor(Math.random() * types.length)]; var newInstrument = new Instrument(type); // Try to find a non-overlapping position var maxAttempts = 50; var attempts = 0; var validPosition = false; while (!validPosition && attempts < maxAttempts) { newInstrument.x = 300 + Math.random() * 1448; newInstrument.y = 500 + Math.random() * 1600; // Check if this position overlaps with existing instruments validPosition = true; for (var m = 0; m < instruments.length; m++) { var existingInstrument = instruments[m]; var dx = newInstrument.x - existingInstrument.x; var dy = newInstrument.y - existingInstrument.y; var distance = Math.sqrt(dx * dx + dy * dy); var minDistance = 300; // Increased minimum distance between instruments if (distance < minDistance) { validPosition = false; break; } } // If this is a bomb, also check overlap with guitars if (validPosition && type === 'bomb') { for (var n = 0; n < guitars.length; n++) { var guitar = guitars[n]; var dx = newInstrument.x - guitar.x; var dy = newInstrument.y - guitar.y; var distance = Math.sqrt(dx * dx + dy * dy); var minDistance = 300; // Same minimum distance for guitars if (distance < minDistance) { validPosition = false; break; } } } attempts++; } // Only add instrument if we found a valid position if (validPosition) { // Set special properties for bomb if (type === 'bomb') { newInstrument.points = -1; // Special marker for bomb newInstrument.instrumentType = 'bomb'; } instruments.push(newInstrument); game.addChild(newInstrument); } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; if (bullet.y < -20) { bullet.destroy(); bullets.splice(i, 1); continue; } // Check guitar collisions for (var j = guitars.length - 1; j >= 0; j--) { var guitar = guitars[j]; if (bullet.intersects(guitar)) { LK.setScore(LK.getScore() + guitar.points); scoreTxt.setText('Score: ' + LK.getScore()); guitarsHit++; guitarsHitTxt.setText('Guitars: ' + guitarsHit + '/3'); LK.getSound('guitarHit').play(); LK.effects.flashObject(guitar, 0xFFFFFF, 300); createExplosion(guitar.x, guitar.y); guitar.destroy(); guitars.splice(j, 1); bullet.destroy(); bullets.splice(i, 1); // Check level advancement if (guitarsHit >= 3) { level++; levelTxt.setText('Level: ' + level); guitarsHit = 0; guitarsHitTxt.setText('Guitars: 0/3'); timeRemaining = 30; guitarSpeed += 2; // Increase spawn frequency more aggressively: decrease by 30 instead of 20, with minimum of 30 instead of 60 instrumentSpawnRate = Math.max(30, instrumentSpawnRate - 30); } break; } } if (i < 0 || i >= bullets.length) continue; // Check instrument collisions for (var k = instruments.length - 1; k >= 0; k--) { var instrument = instruments[k]; if (bullet.intersects(instrument)) { // Handle bomb collision if (instrument.instrumentType === 'bomb') { lives--; // Remove a life icon if (lifeIcons.length > 0 && lives >= 0) { var removedLife = lifeIcons.pop(); removedLife.destroy(); } LK.effects.flashScreen(0xFF0000, 500); LK.getSound('bombHit').play(); if (lives <= 0) { LK.showGameOver(); } } else { // Normal instrument hit LK.setScore(LK.getScore() + instrument.points); scoreTxt.setText('Score: ' + LK.getScore()); // Play specific sound based on instrument type if (instrument.instrumentType === 'drum') { LK.getSound('drumHit').play(); } else if (instrument.instrumentType === 'flute') { LK.getSound('fluteHit').play(); } else if (instrument.instrumentType === 'piano') { LK.getSound('pianoHit').play(); } else if (instrument.instrumentType === 'saxophone') { LK.getSound('saxophoneHit').play(); } else if (instrument.instrumentType === 'xylophone') { LK.getSound('xylophoneHit').play(); } else if (instrument.instrumentType === 'tuba') { LK.getSound('tubaHit').play(); } else if (instrument.instrumentType === 'harp') { LK.getSound('harpHit').play(); } } LK.effects.flashObject(instrument, 0xFFFFFF, 300); createExplosion(instrument.x, instrument.y); instrument.destroy(); instruments.splice(k, 1); bullet.destroy(); bullets.splice(i, 1); break; } } } // Update guitars for (var i = guitars.length - 1; i >= 0; i--) { var guitar = guitars[i]; // Check for collisions with instruments and destroy them for (var q = instruments.length - 1; q >= 0; q--) { var instrument = instruments[q]; if (guitar.intersects(instrument)) { // Create explosion effect createExplosion(instrument.x, instrument.y); // Destroy the instrument instrument.destroy(); instruments.splice(q, 1); } } if (guitar.x > 2108) { guitar.destroy(); guitars.splice(i, 1); } } // Update instruments for (var i = instruments.length - 1; i >= 0; i--) { var instrument = instruments[i]; if (instrument.lifespan <= 0) { instrument.destroy(); instruments.splice(i, 1); } } // Update particles for (var i = particles.length - 1; i >= 0; i--) { var particle = particles[i]; // Update position particle.x += particle.vx; particle.y += particle.vy; // Apply gravity particle.vy += 0.5; // Apply rotation particle.rotation += particle.rotationSpeed; // Slow down horizontal movement particle.vx *= 0.98; // Remove dead particles if (particle.alpha <= 0) { particle.destroy(); particles.splice(i, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -120,9 +120,10 @@
gun.y = 2600;
// Score display
var scoreTxt = new Text2('Score: 0', {
size: 80,
- fill: 0xFFFFFF
+ fill: 0x808080,
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Level display
@@ -146,9 +147,10 @@
LK.gui.topRight.addChild(timerTxt);
// Guitars hit display
var guitarsHitTxt = new Text2('Guitars: 0/3', {
size: 60,
- fill: 0xFFFFFF
+ fill: 0x808080,
+ font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
});
guitarsHitTxt.anchor.set(0.5, 0);
guitarsHitTxt.y = 100;
LK.gui.top.addChild(guitarsHitTxt);
vertical bullet. In-Game asset. 2d. High contrast. No shadows
drum. In-Game asset. 2d. High contrast. No shadows
Guitar. In-Game asset. 2d. High contrast. No shadows
futuristic space cannon gun vertical top view. In-Game asset. 2d. High contrast. No shadows
piano. In-Game asset. 2d. High contrast. No shadows
saxophone. In-Game asset. 2d. High contrast. No shadows
red bomb. In-Game asset. 2d. High contrast. No shadows
xylophone. In-Game asset. 2d. High contrast. No shadows
gold musical note. In-Game asset. 3d. High contrast. No shadows
red musical note. In-Game asset. 3d. High contrast. No shadows
flute. In-Game asset. 3d. High contrast. No shadows
harp. In-Game asset. 3d. High contrast. No shadows
tuba. In-Game asset. 3d. High contrast. No shadows
Triple vertical bullet. In-Game asset. 3d. High contrast. No shadows
Music maestro monster head . 3d.. In-Game asset. High contrast. No shadows
Dark space background with stars
Bright green glowing musical note. In-Game asset. 3d. High contrast. No shadows
guitarHit
Sound effect
drumHit
Sound effect
fluteHit
Sound effect
pianoHit
Sound effect
saxophoneHit
Sound effect
xylophoneHit
Sound effect
shoot
Sound effect
bombHit
Sound effect
tubaHit
Sound effect
harpHit
Sound effect
turboHit
Sound effect
bgmusic
Music