User prompt
play ha when shooting
User prompt
play explosion when enemy is destroyed
User prompt
play haaaa when touch is held and stop playing it and play ha when released.
User prompt
play ha when shot is done
User prompt
add a small trail to player shoot
User prompt
Please fix the bug: 'ReferenceError: heroGraphics is not defined' in or related to this line: 'currentBullet.y = hero.y - heroGraphics.height / 2;' Line Number: 451
User prompt
Please fix the bug: 'ReferenceError: heroGraphics is not defined' in or related to this line: 'currentBullet.y = hero.y - heroGraphics.height / 2;' Line Number: 451
User prompt
mvoe bullet spawn to the top of the player not the center
Code edit (1 edits merged)
Please save this source code
User prompt
move player 400 pixels down
User prompt
remove player trail
User prompt
remove effect of player moving in on game start
User prompt
add alpha to trail sot that it blend with player
User prompt
Please fix the bug: 'ReferenceError: utils is not defined' in or related to this line: 'self.tint = utils.rgb2hex([self.alpha, self.alpha, self.alpha]);' Line Number: 176
User prompt
mae trail particle better
User prompt
plaer trail shoudl have alpha
User prompt
trail particle for player should look like from more to less
User prompt
create a new separate asset for the bullet trail
User prompt
bullet positionn should not have been moved to the bottom of the player
User prompt
player trail should be attached to the bottom of the player not the center
User prompt
player trail should move in the oposite direction the player is facing
User prompt
play ha on shot
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'global')' in or related to this line: 'hero.y -= step;' Line Number: 458
User prompt
use a different trail particle for hero and for bullet
User prompt
trail is only blinking, want to make it more like an emmiter that emits particles as a player trail
/****
* Classes
****/
var Background = Container.expand(function () {
var self = Container.call(this);
var bg1 = self.attachAsset('background', {});
var bg2 = self.attachAsset('background', {});
bg1.width = bg2.width = 2048;
bg1.height = bg2.height = 2732;
bg2.y = -2732;
self.addChild(bg1);
self.addChild(bg2);
self._move_migrated = function () {
bg1.y += 1;
bg2.y += 1;
if (bg1.y >= 2732) {
bg1.y = -2732;
}
if (bg2.y >= 2732) {
bg2.y = -2732;
}
};
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var trail = LK.getAsset('trail', {
anchorX: 0.5,
anchorY: 0.5
});
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedY = 1;
self._move_migrated = function () {
var cloudSpeed = 3.5;
self.y += cloudSpeed;
if (self.y > 2732) {
self.y = -cloudGraphics.height;
}
};
});
var Enemy = Container.expand(function (hero) {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speedY = 2;
self.hero = hero;
self.lifebar = self.attachAsset('lifebar', {
anchorX: 0.5
});
self.lifebar.y = -self.lifebar.height - 100;
self.life = 100;
self._move_migrated = function () {
var dx = this.hero.x - this.x;
var dy = this.hero.y - this.y;
var angle = Math.atan2(dy, dx);
var speedMultiplier = 1 + Math.floor(LK.ticks / 7200);
self.x += (Math.cos(angle) * self.speedY + Math.sin(LK.ticks / 60) * 5) * speedMultiplier;
self.y += Math.sin(angle) * self.speedY * speedMultiplier;
self.lifebar.scale.x = self.life / 100;
};
});
var EnemyBoss = Container.expand(function (hero) {
var self = Container.call(this);
var bossGraphics = self.attachAsset('enemyBoss', {
anchorX: 0.5,
anchorY: 0.5
});
bossGraphics.tint = 0xFFFFFF * (0.5 + Math.random() * 0.5);
self.speedY = 3;
self.hero = hero;
self.lifebar = self.attachAsset('lifebar', {
anchorX: 0.5
});
self.lifebar.y = -self.lifebar.height - 170;
self.lifebar.x -= 10;
self.life = 500;
self._move_migrated = function () {
var dx = this.hero.x - this.x + (Math.random() - 0.5) * 100;
var dy = this.hero.y - this.y + (Math.random() - 0.5) * 100;
var angle = Math.atan2(dy, dx);
var newX = self.x + Math.cos(angle) * self.speedY + Math.sin(LK.ticks / 60) * 5;
var newY = self.y + Math.sin(angle) * self.speedY;
newX = Math.max(bossGraphics.width / 2, Math.min(newX, 2048 - bossGraphics.width / 2));
newY = Math.max(bossGraphics.height / 2, Math.min(newY, 2732 - bossGraphics.height / 2));
self.x = newX;
self.y = newY;
self.lifebar.scale.x = self.life / 500;
if (self.life <= 0) {
// Add explosion effect
var explosion = new Explosion(self.x, self.y);
game.addChild(explosion);
self.destroy();
}
};
self.shoot = function () {};
self.on('tick', function () {
self._move_migrated();
self.shoot();
});
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self._move_migrated = function () {
self.y += self.speed;
};
});
var EngineParticle = Container.expand(function (x, y, color) {
var self = Container.call(this);
var particleGraphics = self.attachAsset('trailParticle', {
anchorX: 0.5,
anchorY: 0.5
});
particleGraphics.tint = color;
self.x = x;
self.y = y;
self.speedX = (Math.random() - 0.5) * 1;
self.speedY = (Math.random() - 0.5) * 1;
self.alpha = 1;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.alpha -= 0.02;
if (self.alpha <= 0) {
self.destroy();
}
};
});
var Explosion = Container.expand(function (x, y) {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = x;
self.y = y;
self.scale.set(0.1);
self.alpha = 1;
// Animate explosion
self.update = function () {
self.scale.x += 0.1;
self.scale.y += 0.1;
self.alpha -= 0.05;
if (self.alpha <= 0) {
self.destroy();
}
};
});
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
self.trailParticles = [];
self.emitTrailParticle = function () {
var particle = new EngineParticle(self.x, self.y, 0xf4e006);
self.trailParticles.push(particle);
game.addChild(particle);
};
LK.on('tick', function () {
self.emitTrailParticle();
for (var i = self.trailParticles.length - 1; i >= 0; i--) {
if (self.trailParticles[i].alpha <= 0) {
self.trailParticles.splice(i, 1);
}
}
});
self.movementDirection = 1;
self.movementSpeed = 0.5;
self.movementRange = 100;
self.originalX = 2048 / 2;
self.x = self.originalX;
self.updateMovement = function () {
self.x += self.movementDirection * self.movementSpeed;
if (self.x < self.originalX - self.movementRange || self.x > self.originalX + self.movementRange) {
self.movementDirection *= -1;
}
};
});
var HeroBullet = Container.expand(function (hero) {
var self = Container.call(this);
self.bulletGraphics = self.attachAsset('heroBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.creationTick = LK.ticks;
self.bulletGraphics.tint = 0x6EC1E4;
self.speed = -1.5;
self.damage = 1;
self.isShot = false;
self.flickerSpeed = 0.7;
self.flickerMinAlpha = 0.5;
self.flickerMaxAlpha = 1;
self._move_migrated = function () {
self.x += self.speedX * self.scale.x * self.scale.x;
self.y += self.speedY * self.scale.y * self.scale.y;
self.rotation += LK.ticks * 0.01;
var engineParticle = new EngineParticle(self.x, self.y, self.bulletGraphics.tint);
game.addChild(engineParticle);
self.damage = self.scale.x * self.scale.y;
var holdDuration = (LK.ticks - self.creationTick) % 240;
if (holdDuration < 120) {
var sizeMultiplier = 1 + holdDuration / 40;
} else {
var sizeMultiplier = 4 - (holdDuration - 120) / 40;
}
self.scale.x = self.scale.y = Math.max(1, sizeMultiplier);
if (self.flicker) {
self.alpha += self.flickerSpeed;
if (self.alpha <= self.flickerMinAlpha || self.alpha >= self.flickerMaxAlpha) {
self.flickerSpeed *= -1;
}
self.alpha = Math.max(self.flickerMinAlpha, Math.min(self.alpha, self.flickerMaxAlpha));
}
};
});
var Particle = Container.expand(function (x, y, color) {
var self = Container.call(this);
var particleGraphics = self.attachAsset('trailParticle', {
anchorX: 0.5,
anchorY: 0.5
});
particleGraphics.tint = color;
self.x = x;
self.y = y;
self.speedX = (Math.random() - 0.5) * 2;
self.speedY = (Math.random() - 0.5) * 2;
self.alpha = 1;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
self.alpha -= 0.02;
if (self.alpha <= 0) {
self.destroy();
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var getReadyMessage = new Text2('Get Ready!', {
size: 200,
fill: '#ffffff',
align: 'center'
});
getReadyMessage.anchor.set(0.8, 0.8);
getReadyMessage.x = 2048 / 2;
getReadyMessage.y = 2732 / 3 - 100;
getReadyMessage.alpha = 0;
LK.gui.addChild(getReadyMessage);
var fadeInInterval = LK.setInterval(function () {
getReadyMessage.alpha += 0.05;
if (getReadyMessage.alpha >= 1) {
LK.clearInterval(fadeInInterval);
}
}, 1000 / 60);
var getSetMessage = new Text2('(tap or hold for super shot!)', {
size: 50,
fill: '#ffffff',
align: 'center'
});
getSetMessage.anchor.set(0.8, 0.8);
getSetMessage.x = 2048 / 2 - 90;
getSetMessage.y = getReadyMessage.y + 100;
LK.gui.addChild(getSetMessage);
LK.setTimeout(function () {
var fadeOutInterval = LK.setInterval(function () {
getReadyMessage.alpha -= 0.05;
if (getReadyMessage.alpha <= 0) {
LK.clearInterval(fadeOutInterval);
getReadyMessage.destroy();
}
}, 1000 / 60);
getSetMessage.destroy();
}, 3000);
var enemies = [];
var enemiesSpawnedCount = 0;
var background = game.addChild(new Background());
background.alpha = 0.3;
game.spawnEnemy = function () {
var enemy;
if (enemiesSpawnedCount % 10 === 0 && enemiesSpawnedCount !== 0) {
enemy = new EnemyBoss(hero);
enemy.scale.x *= 1 * (1 + enemiesSpawnedCount / 100);
enemy.scale.y *= 1 * (1 + enemiesSpawnedCount / 100);
enemy.speedY *= 1 * (1 + enemiesSpawnedCount / 100);
enemy.life *= 1 * (0.5 + enemiesSpawnedCount / 100);
} else {
enemy = new Enemy(hero);
}
enemy.x = Math.random() * 2048;
enemy.y = -enemy.height;
enemies.push(enemy);
game.addChild(enemy);
enemiesSpawnedCount++;
};
var enemySpawnTicker = 0;
LK.on('tick', function () {
// Update explosions
for (var i = 0; i < game.children.length; i++) {
if (game.children[i] instanceof Explosion) {
game.children[i].update();
}
}
var spawnRate = Math.max(30, 120 - Math.floor(LK.ticks / 3600));
if (enemySpawnTicker++ % spawnRate === 0) {
game.spawnEnemy();
}
});
game.on('up', function (x, y, obj) {
if (currentBullet) {
var pos = game.toLocal(obj.global);
var dx = pos.x - hero.x;
var dy = pos.y - hero.y;
var angle = Math.atan2(dy, dx);
currentBullet.isShot = true;
currentBullet.speedX = Math.cos(angle) * 15;
currentBullet.speedY = Math.sin(angle) * 15;
hero.rotation = angle;
heroBullets.push(currentBullet);
currentBullet = null;
}
});
LK.on('tick', function () {
hero.updateMovement();
background._move_migrated();
if (currentBullet) {
var holdDuration = LK.ticks - holdTime;
var sizeMultiplier = Math.max(1, 1 + Math.abs(Math.sin(holdDuration / 60)) * 3);
if (currentBullet.scale.x < sizeMultiplier) {
currentBullet.scale.x = sizeMultiplier;
currentBullet.scale.y = sizeMultiplier;
if (currentBullet.bulletGraphics.width * currentBullet.scale.x > 150) {
currentBullet.bulletGraphics.tint = 0xFFA500;
}
}
currentBullet.flicker = true;
var flickerAmount = Math.abs(Math.sin(LK.ticks / 30)) * (currentBullet.flickerMaxAlpha - currentBullet.flickerMinAlpha);
currentBullet.alpha = currentBullet.flickerMinAlpha + flickerAmount;
if (currentBullet.flicker) {
currentBullet.alpha += currentBullet.flickerSpeed;
if (currentBullet.alpha <= currentBullet.flickerMinAlpha || currentBullet.alpha >= currentBullet.flickerMaxAlpha) {
currentBullet.flickerSpeed *= -1;
}
currentBullet.alpha = Math.max(currentBullet.flickerMinAlpha, Math.min(currentBullet.alpha, currentBullet.flickerMaxAlpha));
}
currentBullet.rotation = hero.rotation;
currentBullet.x = hero.x;
currentBullet.y = hero.y - hero.height / 2 - currentBullet.height / 2 - 10;
currentBullet.flickerSpeed = 0.1;
currentBullet.flickerMinAlpha = 0.3;
currentBullet.flickerMaxAlpha = 1;
}
});
var currentBullet = null;
var holdTime = 0;
var hero;
hero = game.addChild(new Hero());
hero.rotation = -Math.PI / 2;
var touchActive = false;
game.on('down', function (x, y, obj) {
if (!touchActive) {
touchActive = true;
var pos = game.toLocal(obj.global);
var dx = pos.x - hero.x;
var dy = pos.y - hero.y;
var angle = Math.atan2(dy, dx);
hero.rotation = angle;
currentBullet = new HeroBullet(hero);
currentBullet.x = hero.x;
currentBullet.y = hero.y - hero.height / 2 - currentBullet.height / 2 - 10;
currentBullet.rotation = hero.rotation;
game.addChild(currentBullet);
if (game.scale.x > 2 && game.scale.y > 2) {
bulletGraphics.tint = 0xFFA500;
}
holdTime = LK.ticks;
}
});
game.on('up', function (x, y, obj) {
touchActive = false;
});
game.on('move', function (x, y, obj) {
var pos = game.toLocal(obj.global);
var dx = pos.x - hero.x;
var dy = pos.y - hero.y;
var angle = Math.atan2(dy, dx);
hero.rotation = angle;
});
var enemies = [];
var heroBullets = [];
var enemyBullets = [];
var clouds = [];
var particles = [];
for (var i = 0; i < 2; i++) {
var cloud = new Cloud();
cloud.alpha = 0.3;
cloud.x = Math.random() * 2048;
cloud.y = Math.random() * -2732;
clouds.push(cloud);
game.addChildAt(cloud, 1);
}
var scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff",
dropShadow: true,
dropShadowColor: "#000000",
dropShadowBlur: 4,
dropShadowAngle: Math.PI / 6,
dropShadowDistance: 6
});
LK.gui.top.addChild(scoreTxt);
var isGameOver = false;
hero.x = 2048 / 2;
hero.y = 2732 - 280;
LK.setTimeout(function () {
var startPosition = hero.y;
var endPosition = startPosition - 500;
var duration = 120;
var step = (startPosition - endPosition) / duration;
var currentStep = 0;
var moveHero = function moveHero() {
if (currentStep < duration) {
hero.y -= step;
currentStep++;
} else if (currentStep < duration * 2) {
hero.y += step;
currentStep++;
} else {
hero.y = startPosition;
LK.clearInterval(heroMoveInterval);
}
};
var heroMoveInterval = LK.setInterval(moveHero, 1000 / 60);
}, 0);
LK.on('tick', function () {
for (var i = 0; i < game.children.length; i++) {
if (game.children[i] instanceof Particle || game.children[i] instanceof EngineParticle) {
game.children[i].update();
}
}
for (var i = 0; i < hero.trailParticles.length; i++) {
hero.trailParticles[i].update();
}
for (var i = 0; i < heroBullets.length; i++) {
if (heroBullets[i]) {
heroBullets[i]._move_migrated();
}
for (var j = 0; j < enemies.length; j++) {
if (heroBullets[i] && heroBullets[i].intersects(enemies[j])) {
enemies[j].life -= heroBullets[i].damage * 10;
if (enemies[j].life <= 0) {
var scoreIncrement = enemies[j] instanceof EnemyBoss ? 50 : 10;
scoreIncrement += Math.floor(LK.ticks / 3600);
LK.setScore(LK.getScore() + scoreIncrement);
scoreTxt.setText(LK.getScore().toString());
// Add explosion effect
var explosion = new Explosion(enemies[j].x, enemies[j].y);
game.addChild(explosion);
enemies[j].destroy();
enemies.splice(j, 1);
}
heroBullets[i].destroy();
heroBullets.splice(i, 1);
break;
}
}
if (heroBullets[i] && heroBullets[i].y < -50) {
heroBullets[i].destroy();
heroBullets.splice(i, 1);
i--;
i--;
}
}
for (var i = 0; i < enemyBullets.length; i++) {
enemyBullets[i]._move_migrated();
if (enemyBullets[i].y > 2732 + 50) {
enemyBullets[i].destroy();
enemyBullets.splice(i, 1);
}
}
for (var i = 0; i < enemies.length; i++) {
if (enemies[i].intersects(hero)) {
isGameOver = true;
break;
}
}
for (var i = 0; i < enemies.length; i++) {
enemies[i]._move_migrated();
if (enemies[i].y > 2732) {
enemies[i].destroy();
enemies.splice(i, 1);
i--;
}
}
clouds.forEach(function (cloud) {
cloud._move_migrated();
});
if (isGameOver) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
});
Goku arms doing kamehameha. seen from above. 8-bit. Cartoon. In game asset. No shadow Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit. Cartoon. Orange energy ball. . In game asset. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
rotate image 45 degrees
8-bit. cartoon. white energy ball. gradieint. transparent. in game asset. flicker. shoot. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit. cartoon. front view. flying final boss. white. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.