Code edit (9 edits merged)
Please save this source code
User prompt
on tick check herobullets size. if size is larger than 200% its original size, then change the herobullet color to orange.
Code edit (2 edits merged)
Please save this source code
User prompt
while increaseing size if size is bigger than 200% original size change bullet color to orange
User prompt
As you calculate the `sizeMultiplier` based on the `holdDuration`, also implement a flickering effect by adjusting the `alpha` property of the bullet
User prompt
Within the `LK.on('tick', function () {...})` event handler, check if there is a bullet currently being held and increasing in size (i.e., if `currentBullet` is not null and `holdTime` has been initiated
User prompt
if enemy killes is enemy boss, then it should give more points
User prompt
enemy boss should award more points on kill
Code edit (5 edits merged)
Please save this source code
User prompt
increase herobullet opacity when it increases its size
User prompt
dim herobullet when not shot
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
when hero bullet size is bigger than 200% its original size, change color to orange
User prompt
set herobuulelt color to olight blue
User prompt
hero bullet should also flicker before it is shot
User prompt
herobullet should flicker when it is increasing its size
User prompt
change bulletGraphics.tint to orange
Code edit (2 edits merged)
Please save this source code
User prompt
when herobullet size is bigger than 150% its original size, change color to red
Code edit (2 edits merged)
Please save this source code
User prompt
herobullets can use 2 different assets depending on the situation
Code edit (2 edits merged)
Please save this source code
User prompt
herobullet should not keep still while holding touch. it should move in front of the hero the same way the hero moves.
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'id')' in this line: 'if (size > 150 && this.asset.id !== 'superHeroBullet') {' Line Number: 50
var SuperHeroBullet = Container.expand(function () {
var self = Container.call(this);
self.createAsset('superHeroBullet', 'Super Hero Bullet Graphics', .5, .5);
});
var EnemyBoss = Container.expand(function (hero) {
var self = Container.call(this);
var bossGraphics = self.createAsset('enemyBoss', 'Enemy Boss Graphics', .5, .5);
bossGraphics.tint = Math.random() * 0xFFFFFF;
self.speedY = 3;
self.hero = hero;
self.lifebar = self.createAsset('lifebar', 'Boss Lifebar', .5, 0);
self.lifebar.y = -self.lifebar.height - 170;
self.lifebar.x -= 10;
self.life = 500;
self.move = 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);
self.x += Math.cos(angle) * self.speedY;
self.y += Math.sin(angle) * self.speedY;
self.lifebar.scale.x = self.life / 500;
if (self.life <= 0) {
self.destroy();
}
};
self.shoot = function () {};
self.on('tick', function () {
self.move();
self.shoot();
});
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var trail = LK.getAsset('trail', 'Trail Graphics', 0.5, 0.5);
var cloudGraphics = self.createAsset('cloud', 'Cloud Graphics', 0.5, 0.5);
self.speedY = 1;
self.move = function () {
var cloudSpeed = 3.5;
self.y += cloudSpeed;
if (self.y > 2732) {
self.y = -cloudGraphics.height;
}
};
});
var HeroBullet = Container.expand(function (hero) {
var self = Container.call(this);
var bulletGraphics;
self.updateGraphics = function () {
var size = Math.max(this.width, this.height) * this.scale.x;
if (size > 150 && this.asset && this.asset.id !== 'superHeroBullet') {
this.removeChild(this.asset);
this.asset = this.createAsset('superHeroBullet', 'Super Hero Bullet Graphics', .5, .5);
this.addChild(this.asset);
} else if (size <= 150 && !(this.asset instanceof HeroBullet)) {
this.removeChild(this.asset);
this.asset = this.createAsset('heroBullet', 'Hero Bullet Graphics', .5, .5);
this.addChild(this.asset);
}
};
bulletGraphics = self.createAsset('heroBullet', 'Hero Bullet Graphics', .5, .5);
self.addChild(bulletGraphics);
self.speed = -1.5;
self.damage = 1;
self.flicker = true;
self.flickerSpeed = 0.5;
self.flickerMinAlpha = 0.3;
self.flickerMaxAlpha = 0.7;
self.move = function () {
self.x += self.speedX * self.scale.x * self.scale.x;
self.y += self.speedY * self.scale.y * self.scale.y;
self.updateGraphics();
self.rotation = hero.rotation + Math.PI / 2;
self.damage = self.scale.x * self.scale.y;
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));
}
}
};
LK.setTimeout(function () {
self.destroy();
}, 2000);
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.createAsset('enemyBullet', 'Enemy Bullet Graphics', .5, .5);
self.speed = 3;
self.move = function () {
self.y += self.speed;
};
});
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.createAsset('hero', 'Hero character', .5, .5);
var trail = self.createAsset('trail', 'Trail Graphics', 1, 0.5);
trail.rotation = Math.PI / 4;
trail.y = heroGraphics.height / 2 - 80;
trail.x = -heroGraphics.width / 2 + 30;
trail.flicker = true;
trail.flickerSpeed = 0.1;
trail.flickerMinAlpha = 0.3;
trail.flickerMaxAlpha = 0.7;
LK.on('tick', function () {
if (trail.flicker) {
trail.alpha += trail.flickerSpeed;
if (trail.alpha < trail.flickerMinAlpha || trail.alpha > trail.flickerMaxAlpha) {
trail.flickerSpeed *= -1;
trail.alpha = Math.max(trail.flickerMinAlpha, Math.min(trail.alpha, trail.flickerMaxAlpha));
}
}
});
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 Enemy = Container.expand(function (hero) {
var self = Container.call(this);
var enemyGraphics = self.createAsset('enemy', 'Enemy character', .5, .5);
self.speedY = 2;
self.hero = hero;
self.lifebar = self.createAsset('lifebar', 'Enemy Lifebar', .5, 0);
self.lifebar.y = -self.lifebar.height - 100;
self.life = 100;
self.move = 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 Background = Container.expand(function () {
var self = Container.call(this);
var bg1 = self.createAsset('background', 'Game Background 1', 0, 0);
var bg2 = self.createAsset('background', 'Game Background 2', 0, 0);
bg1.width = bg2.width = 2048;
bg1.height = bg2.height = 2732;
bg2.y = -2732;
self.addChild(bg1);
self.addChild(bg2);
self.move = function () {
bg1.y += 1;
bg2.y += 1;
if (bg1.y >= 2732) bg1.y = -2732;
if (bg2.y >= 2732) bg2.y = -2732;
};
});
var Game = Container.expand(function () {
var self = Container.call(this);
var enemies = [];
var enemiesSpawnedCount = 0;
var particles = [];
var background = self.addChild(new Background());
background.alpha = 0.3;
self.spawnEnemy = function () {
var enemy;
if (enemiesSpawnedCount % 10 === 0 && enemiesSpawnedCount !== 0) {
enemy = new EnemyBoss(hero);
enemy.scale.x *= 1.1 * (1 + enemiesSpawnedCount / 100);
enemy.scale.y *= 1.1 * (1 + enemiesSpawnedCount / 100);
enemy.speedY *= 1.1 * (1 + enemiesSpawnedCount / 100);
enemy.life *= 1.1 * (1 + enemiesSpawnedCount / 100);
} else {
enemy = new Enemy(hero);
}
enemy.x = Math.random() * 2048;
enemy.y = -enemy.height;
enemies.push(enemy);
self.addChild(enemy);
enemiesSpawnedCount++;
};
var enemySpawnTicker = 0;
LK.on('tick', function () {
var spawnRate = Math.max(30, 120 - Math.floor(LK.ticks / 3600));
if (enemySpawnTicker++ % spawnRate === 0) {
self.spawnEnemy();
}
});
stage.on('up', function (obj) {
if (currentBullet) {
var pos = obj.event.getLocalPosition(self);
var dx = pos.x - hero.x;
var dy = pos.y - hero.y;
var angle = Math.atan2(dy, dx);
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();
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;
}
currentBullet.rotation = hero.rotation;
currentBullet.flicker = true;
currentBullet.flickerSpeed = 0.5;
currentBullet.flickerMinAlpha = 0.3;
currentBullet.flickerMaxAlpha = 0.7;
}
});
var currentBullet = null;
var holdTime = 0;
var hero;
hero = self.addChild(new Hero());
hero.rotation = -Math.PI / 2;
stage.on('down', function (obj) {
var pos = obj.event.getLocalPosition(self);
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;
self.addChild(currentBullet);
holdTime = LK.ticks;
});
stage.on('move', function (obj) {
var pos = obj.event.getLocalPosition(self);
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 < 3; i++) {
var cloud = new Cloud();
cloud.alpha = 0.49;
cloud.x = Math.random() * 2048;
cloud.y = Math.random() * -2732;
clouds.push(cloud);
self.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.topCenter.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 () {
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 < heroBullets.length; i++) {
if (heroBullets[i]) heroBullets[i].move();
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 = 10 + Math.floor(LK.ticks / 3600);
LK.setScore(LK.getScore() + scoreIncrement);
scoreTxt.setText(LK.getScore().toString());
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();
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();
if (enemies[i].y > 2732) {
enemies[i].destroy();
enemies.splice(i, 1);
i--;
}
}
clouds.forEach(function (cloud) {
cloud.move();
});
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.