User prompt
F 18 hornet som vän ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Jas Gripen 31 vän
User prompt
Kan du Ada SU 57 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Radera boss
User prompt
Boss på scor 10 000
User prompt
Visa spelarens hp
User prompt
Natt och dag ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Olika väder ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Gör så att man kan pasa spelet
User prompt
Gör tu 95 vapen bomber
User prompt
Kan du göra så att bomberna ser anolunda utt
User prompt
Tabort öar
User prompt
Tu 95 ska bara försöka trefa öarna med bomber
User prompt
Gör små öar
User prompt
Det ska finas små öra som bomberna sperengs när dom landar på ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Kan du göra så att tu 95 kan bomba marken
User prompt
För moln
User prompt
Tu 95 kan inte attakera spelaren
User prompt
Kan du göra så att fienden kan attackera spelaren
User prompt
Tu 95 ska vara med
User prompt
Su 27 och mig 29 ska Kina attakera
Code edit (1 edits merged)
Please save this source code
User prompt
JAS Gripen: Swedish Air Defense
Initial prompt
Fienden ska vara ryska flygplan och spelaren ska ha JAS Gripen
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
// Bomb now uses dark colored shape asset instead of tint
self.speed = 6;
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('tu95', {
anchorX: 0.5,
anchorY: 0.5
});
bossGraphics.scaleX = 2.5; // Make boss larger
bossGraphics.scaleY = 2.5;
bossGraphics.tint = 0xFF0000; // Red tint to distinguish from normal enemies
self.type = 'boss';
self.speed = 1.5;
self.active = true;
self.points = 5000; // High point value
self.hp = 20; // Boss has multiple hit points
self.maxHP = 20;
self.fireTimer = 0;
self.moveDirection = 1; // 1 for right, -1 for left
self.centerX = 1024; // Screen center
self.moveRange = 400; // How far from center boss moves
self.update = function () {
if (!self.active) return;
// Boss movement - move back and forth across screen
self.x += self.moveDirection * 2;
if (self.x > self.centerX + self.moveRange) {
self.moveDirection = -1;
} else if (self.x < self.centerX - self.moveRange) {
self.moveDirection = 1;
}
// Move down slowly
self.y += self.speed;
// Boss fires more frequently
self.fireTimer++;
if (self.fireTimer >= 30) {
// Fire every 0.5 seconds
// Fire 3 bombs in a spread pattern
for (var i = -1; i <= 1; i++) {
var bomb = new Bomb();
bomb.x = self.x + i * 80;
bomb.y = self.y + 50;
bomb.speed = 4; // Slightly slower bombs
bombs.push(bomb);
game.addChild(bomb);
}
self.fireTimer = 0;
}
};
return self;
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.alpha = 0.6;
self.speed = Math.random() * 1 + 0.5; // Random speed between 0.5-1.5
self.scaleX = self.scaleY = Math.random() * 0.8 + 0.6; // Random scale 0.6-1.4
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyAircraft = Container.expand(function (type) {
var self = Container.call(this);
var assetName = type || 'mig29';
var aircraftGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = assetName;
self.speed = 3;
self.active = true;
// Set point values based on aircraft type
if (self.type === 'mig29') {
self.points = 100;
self.speed = 3;
} else if (self.type === 'su27') {
self.points = 150;
self.speed = 2.5;
} else if (self.type === 'tu95') {
self.points = 200;
self.speed = 2;
}
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
bulletGraphics.tint = 0xFF4444; // Red tint for enemy bullets
self.speed = 8;
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
self.lifetime = 20; // frames
self.update = function () {
self.lifetime--;
self.alpha = self.lifetime / 20;
self.scaleX = self.scaleY = (20 - self.lifetime) / 10;
};
return self;
});
var GroundExplosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('groundExplosion', {
anchorX: 0.5,
anchorY: 0.5
});
explosionGraphics.alpha = 1;
explosionGraphics.scaleX = 0.2;
explosionGraphics.scaleY = 0.2;
self.active = true;
// Start animation immediately
tween(explosionGraphics, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
self.active = false;
}
});
return self;
});
var Missile = Container.expand(function () {
var self = Container.call(this);
var missileGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var PlayerGripen = Container.expand(function () {
var self = Container.call(this);
var gripenGraphics = self.attachAsset('gripen', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.active = true;
return self;
});
var Raindrop = Container.expand(function () {
var self = Container.call(this);
var dropGraphics = self.attachAsset('raindrop', {
anchorX: 0.5,
anchorY: 0.5
});
dropGraphics.alpha = 0.6;
self.speed = Math.random() * 8 + 12; // Random speed between 12-20
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Game variables
// Player aircraft - JAS Gripen (distinctive delta wing design)
// Enemy aircraft types
// Missiles
// Sound effects
var player;
var missiles = [];
var enemies = [];
var enemyBullets = [];
var bombs = [];
var explosions = [];
var waveNumber = 1;
var enemiesSpawned = 0;
var enemiesInWave = 5;
var spawnTimer = 0;
var missileTimer = 0;
var enemyFireTimer = 0;
var waveTimer = 0;
var clouds = [];
var cloudSpawnTimer = 0;
var groundExplosions = [];
var raindrops = [];
var rainSpawnTimer = 0;
var weatherIntensity = 0.3; // 0 = no rain, 1 = heavy rain
// Day/night cycle variables
var timeOfDay = 0; // 0 = night, 0.5 = dawn/dusk, 1 = day
var dayNightTimer = 0;
var dayNightCycleDuration = 1800; // 30 seconds for full cycle (60fps * 30)
var isTransitioning = false;
// Player health system
var playerHP = 3;
var maxHP = 3;
// Boss system
var boss = null;
var bossSpawned = false;
var bossSpawnScore = 10000;
// UI elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 120;
scoreTxt.y = 50;
LK.gui.topLeft.addChild(scoreTxt);
var hpTxt = new Text2('HP: 3/3', {
size: 60,
fill: 0xFF0000
});
hpTxt.anchor.set(0, 0);
hpTxt.x = 120;
hpTxt.y = 120;
LK.gui.topLeft.addChild(hpTxt);
var waveTxt = new Text2('Wave: 1', {
size: 50,
fill: 0xFFFFFF
});
waveTxt.anchor.set(1, 0);
waveTxt.y = 60; // Move wave text down to make room for pause button
LK.gui.topRight.addChild(waveTxt);
// Add pause button
var pauseTxt = new Text2('PAUSE', {
size: 40,
fill: 0xFFFFFF
});
pauseTxt.anchor.set(1, 0);
pauseTxt.x = -10;
pauseTxt.y = 10;
LK.gui.topRight.addChild(pauseTxt);
// Make pause text clickable
pauseTxt.down = function (x, y, obj) {
LK.pauseGame(); // Trigger the built-in pause functionality
};
// Initialize player
player = new PlayerGripen();
player.x = 1024; // Center horizontally
player.y = 2500; // Near bottom of screen
game.addChild(player);
// Initialize HP display
updateHP();
// Touch/mouse controls for player movement
var isDragging = false;
game.down = function (x, y, obj) {
isDragging = true;
player.x = x;
};
game.move = function (x, y, obj) {
if (isDragging && player.active) {
player.x = Math.max(60, Math.min(1988, x)); // Keep player on screen
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
// Spawn enemy function
function spawnEnemy() {
var enemyTypes = ['mig29', 'su27', 'tu95']; // Russian aircraft including Tu-95 bomber
var randomType = enemyTypes[Math.floor(Math.random() * enemyTypes.length)];
var enemy = new EnemyAircraft(randomType);
enemy.x = Math.random() * 1800 + 124; // Random X position across screen
enemy.y = -100; // Start above screen
// Adjust speed based on wave
enemy.speed += (waveNumber - 1) * 0.5;
enemies.push(enemy);
game.addChild(enemy);
enemiesSpawned++;
}
// Fire missile function
function fireMissile() {
if (!player.active) return;
var missile = new Missile();
missile.x = player.x;
missile.y = player.y - 70;
missiles.push(missile);
game.addChild(missile);
LK.getSound('missile_fire').play();
}
// Create explosion function
function createExplosion(x, y) {
var explosion = new Explosion();
explosion.x = x;
explosion.y = y;
explosions.push(explosion);
game.addChild(explosion);
LK.getSound('explosion').play();
}
// Create ground explosion function
function createGroundExplosion(x, y) {
var groundExplosion = new GroundExplosion();
groundExplosion.x = x;
groundExplosion.y = y;
groundExplosions.push(groundExplosion);
game.addChild(groundExplosion);
LK.getSound('explosion').play();
}
// Update score display
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
}
// Update wave display
function updateWave() {
waveTxt.setText('Wave: ' + waveNumber);
}
// Update HP display
function updateHP() {
hpTxt.setText('HP: ' + playerHP + '/' + maxHP);
if (playerHP <= 1) {
hpTxt.fill = 0xFF0000; // Red when low HP
} else if (playerHP <= 2) {
hpTxt.fill = 0xFFFF00; // Yellow when medium HP
} else {
hpTxt.fill = 0x00FF00; // Green when full HP
}
}
// Main game update loop
game.update = function () {
if (!player.active) return;
// Fire missiles automatically
missileTimer++;
if (missileTimer >= 20) {
// Fire every 20 ticks (3 times per second)
fireMissile();
missileTimer = 0;
}
// Spawn enemies
spawnTimer++;
var spawnRate = Math.max(60 - waveNumber * 5, 30); // Faster spawning each wave
if (spawnTimer >= spawnRate && enemiesSpawned < enemiesInWave) {
spawnEnemy();
spawnTimer = 0;
}
// Check if boss should spawn
if (!bossSpawned && LK.getScore() >= bossSpawnScore) {
boss = new Boss();
boss.x = 1024; // Center of screen
boss.y = -200; // Start above screen
game.addChild(boss);
bossSpawned = true;
// Flash screen to announce boss
LK.effects.flashScreen(0xFF0000, 500);
}
// Check for missile-enemy collisions
for (var m = missiles.length - 1; m >= 0; m--) {
var missile = missiles[m];
if (!missile.active) continue;
// Remove missiles that go off screen
if (missile.y < -50) {
missile.destroy();
missiles.splice(m, 1);
continue;
}
// Check collision with boss
if (boss && boss.active && missile.intersects(boss)) {
// Boss takes damage
boss.hp--;
createExplosion(missile.x, missile.y);
missile.destroy();
missiles.splice(m, 1);
LK.getSound('enemy_destroyed').play();
// Check if boss is defeated
if (boss.hp <= 0) {
createExplosion(boss.x, boss.y);
LK.setScore(LK.getScore() + boss.points);
updateScore();
boss.active = false;
boss.destroy();
boss = null;
// Flash screen for boss defeat
LK.effects.flashScreen(0x00FF00, 1000);
}
continue;
}
// Check collision with enemies
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (!enemy.active) continue;
if (missile.intersects(enemy)) {
// Create explosion
createExplosion(enemy.x, enemy.y);
// Award points
LK.setScore(LK.getScore() + enemy.points);
updateScore();
// Remove missile and enemy
missile.active = false;
enemy.active = false;
missile.destroy();
enemy.destroy();
missiles.splice(m, 1);
enemies.splice(e, 1);
LK.getSound('enemy_destroyed').play();
break;
}
}
}
// Update and check boss collision with player
if (boss && boss.active) {
// Remove boss if it goes off screen
if (boss.y > 2800) {
boss.destroy();
boss = null;
}
// Check collision with player
else if (boss.intersects(player)) {
// Boss collision does massive damage
playerHP = 0; // Boss kills player instantly
updateHP();
createExplosion(boss.x, boss.y);
createExplosion(player.x, player.y);
player.active = false;
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
// Update and check enemy collisions with player
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (!enemy.active) continue;
// Remove enemies that go off screen
if (enemy.y > 2800) {
enemy.destroy();
enemies.splice(e, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
// Take damage
playerHP--;
updateHP();
createExplosion(enemy.x, enemy.y);
enemy.active = false;
enemy.destroy();
enemies.splice(e, 1);
// Check if player is dead
if (playerHP <= 0) {
createExplosion(player.x, player.y);
player.active = false;
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
}
// Enemy firing system
enemyFireTimer++;
if (enemyFireTimer >= 90) {
// Fire every 1.5 seconds
if (enemies.length > 0) {
var randomEnemy = enemies[Math.floor(Math.random() * enemies.length)];
if (randomEnemy.active && randomEnemy.y > 200 && randomEnemy.y < 2000) {
if (randomEnemy.type === 'tu95') {
// Tu-95 drops bombs
var bomb = new Bomb();
bomb.x = randomEnemy.x;
bomb.y = randomEnemy.y + 50;
bombs.push(bomb);
game.addChild(bomb);
} else {
// Other aircraft fire bullets
var bullet = new EnemyBullet();
bullet.x = randomEnemy.x;
bullet.y = randomEnemy.y + 50;
enemyBullets.push(bullet);
game.addChild(bullet);
}
}
}
enemyFireTimer = 0;
}
// Update and check enemy bullets
for (var eb = enemyBullets.length - 1; eb >= 0; eb--) {
var bullet = enemyBullets[eb];
if (!bullet.active) continue;
// Remove bullets that go off screen
if (bullet.y > 2800) {
bullet.destroy();
enemyBullets.splice(eb, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
// Take damage
playerHP--;
updateHP();
createExplosion(bullet.x, bullet.y);
bullet.destroy();
enemyBullets.splice(eb, 1);
// Check if player is dead
if (playerHP <= 0) {
createExplosion(player.x, player.y);
player.active = false;
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
}
// Update and check bombs
for (var b = bombs.length - 1; b >= 0; b--) {
var bomb = bombs[b];
if (!bomb.active) continue;
// Remove bombs that go off screen
if (bomb.y > 2800) {
// Bomb hits ground - create explosion
createExplosion(bomb.x, bomb.y);
createGroundExplosion(bomb.x, bomb.y);
bomb.destroy();
bombs.splice(b, 1);
continue;
}
// Check collision with player
if (bomb.intersects(player)) {
// Take damage
playerHP--;
updateHP();
createExplosion(bomb.x, bomb.y);
bomb.destroy();
bombs.splice(b, 1);
// Check if player is dead
if (playerHP <= 0) {
createExplosion(player.x, player.y);
player.active = false;
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
}
// Update explosions
for (var ex = explosions.length - 1; ex >= 0; ex--) {
var explosion = explosions[ex];
if (explosion.lifetime <= 0) {
explosion.destroy();
explosions.splice(ex, 1);
}
}
// Check if wave is complete
if (enemiesSpawned >= enemiesInWave && enemies.length === 0) {
waveNumber++;
enemiesSpawned = 0;
enemiesInWave += 2; // More enemies each wave
updateWave();
// Brief pause between waves
waveTimer = 120; // 2 second pause
}
// Handle wave timer
if (waveTimer > 0) {
waveTimer--;
}
// Spawn clouds for background atmosphere
cloudSpawnTimer++;
if (cloudSpawnTimer >= 180) {
// Spawn cloud every 3 seconds
var cloud = new Cloud();
cloud.x = Math.random() * 2048; // Random X position across screen
cloud.y = -100; // Start above screen
clouds.push(cloud);
game.addChild(cloud);
cloudSpawnTimer = 0;
}
// Update and remove off-screen clouds
for (var c = clouds.length - 1; c >= 0; c--) {
var cloud = clouds[c];
if (cloud.y > 2800) {
// Remove when off screen
cloud.destroy();
clouds.splice(c, 1);
}
}
// Update and remove finished ground explosions
for (var ge = groundExplosions.length - 1; ge >= 0; ge--) {
var groundExplosion = groundExplosions[ge];
if (!groundExplosion.active) {
groundExplosion.destroy();
groundExplosions.splice(ge, 1);
}
}
// Weather system - spawn raindrops
rainSpawnTimer++;
var rainSpawnRate = Math.max(5 - Math.floor(weatherIntensity * 4), 1); // More frequent with higher intensity
if (rainSpawnTimer >= rainSpawnRate) {
// Spawn multiple raindrops based on intensity
var dropsToSpawn = Math.floor(weatherIntensity * 5) + 1;
for (var rd = 0; rd < dropsToSpawn; rd++) {
var raindrop = new Raindrop();
raindrop.x = Math.random() * 2048; // Random X position across screen
raindrop.y = -20; // Start above screen
raindrops.push(raindrop);
game.addChild(raindrop);
}
rainSpawnTimer = 0;
}
// Update and remove off-screen raindrops
for (var rd = raindrops.length - 1; rd >= 0; rd--) {
var raindrop = raindrops[rd];
if (raindrop.y > 2800) {
// Remove when off screen
raindrop.destroy();
raindrops.splice(rd, 1);
}
}
// Day/night cycle system
dayNightTimer++;
if (dayNightTimer >= dayNightCycleDuration / 4) {
// Update time every quarter cycle
dayNightTimer = 0;
var oldTimeOfDay = timeOfDay;
// Cycle through time: 0 -> 0.25 -> 0.5 -> 0.75 -> 1 -> 0.75 -> 0.5 -> 0.25 -> 0
if (timeOfDay >= 1) {
timeOfDay = 0.75;
} else if (timeOfDay >= 0.75) {
timeOfDay = 0.5;
} else if (timeOfDay >= 0.5) {
timeOfDay = 0.25;
} else if (timeOfDay >= 0.25) {
timeOfDay = 0;
} else {
timeOfDay = 0.25;
}
// Only transition if time changed and not already transitioning
if (oldTimeOfDay !== timeOfDay && !isTransitioning) {
isTransitioning = true;
var targetColor;
var transitionDuration = 3000; // 3 seconds for smooth transition
// Determine base color based on time of day
if (timeOfDay === 0) {
// Night - dark blue
targetColor = 0x191970; // Midnight blue
} else if (timeOfDay === 0.25) {
// Dawn/Early morning - purple-pink
targetColor = 0x4B0082; // Indigo
} else if (timeOfDay === 0.5) {
// Day - bright sky blue
targetColor = 0x87CEEB; // Sky blue
} else if (timeOfDay === 0.75) {
// Dusk/Evening - orange-red
targetColor = 0xFF4500; // Orange red
}
// Apply weather modifications to the base color
if (weatherIntensity > 0.6) {
// Heavy rain - make darker
if (timeOfDay === 0) targetColor = 0x0F0F23; // Darker night
else if (timeOfDay === 0.25) targetColor = 0x2F1B69; // Darker dawn
else if (timeOfDay === 0.5) targetColor = 0x4682B4; // Darker day
else if (timeOfDay === 0.75) targetColor = 0xB8460E; // Darker dusk
} else if (weatherIntensity > 0.4) {
// Medium rain - slightly darker
if (timeOfDay === 0) targetColor = 0x151560; // Slightly darker night
else if (timeOfDay === 0.25) targetColor = 0x3D2376; // Slightly darker dawn
else if (timeOfDay === 0.5) targetColor = 0x6495ED; // Slightly darker day
else if (timeOfDay === 0.75) targetColor = 0xD2691E; // Slightly darker dusk
}
// Smooth transition to new color
tween(game, {
backgroundColor: targetColor
}, {
duration: transitionDuration,
easing: tween.easeInOut,
onFinish: function onFinish() {
isTransitioning = false;
}
});
}
}
// Change weather intensity over time (less frequent than before)
if (LK.ticks % 900 === 0) {
// Every 15 seconds
weatherIntensity = Math.random() * 0.8 + 0.2; // Random intensity between 0.2-1.0
}
}; ===================================================================
--- original.js
+++ change.js
@@ -20,8 +20,56 @@
self.y += self.speed;
};
return self;
});
+var Boss = Container.expand(function () {
+ var self = Container.call(this);
+ var bossGraphics = self.attachAsset('tu95', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ bossGraphics.scaleX = 2.5; // Make boss larger
+ bossGraphics.scaleY = 2.5;
+ bossGraphics.tint = 0xFF0000; // Red tint to distinguish from normal enemies
+ self.type = 'boss';
+ self.speed = 1.5;
+ self.active = true;
+ self.points = 5000; // High point value
+ self.hp = 20; // Boss has multiple hit points
+ self.maxHP = 20;
+ self.fireTimer = 0;
+ self.moveDirection = 1; // 1 for right, -1 for left
+ self.centerX = 1024; // Screen center
+ self.moveRange = 400; // How far from center boss moves
+ self.update = function () {
+ if (!self.active) return;
+ // Boss movement - move back and forth across screen
+ self.x += self.moveDirection * 2;
+ if (self.x > self.centerX + self.moveRange) {
+ self.moveDirection = -1;
+ } else if (self.x < self.centerX - self.moveRange) {
+ self.moveDirection = 1;
+ }
+ // Move down slowly
+ self.y += self.speed;
+ // Boss fires more frequently
+ self.fireTimer++;
+ if (self.fireTimer >= 30) {
+ // Fire every 0.5 seconds
+ // Fire 3 bombs in a spread pattern
+ for (var i = -1; i <= 1; i++) {
+ var bomb = new Bomb();
+ bomb.x = self.x + i * 80;
+ bomb.y = self.y + 50;
+ bomb.speed = 4; // Slightly slower bombs
+ bombs.push(bomb);
+ game.addChild(bomb);
+ }
+ self.fireTimer = 0;
+ }
+ };
+ return self;
+});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
@@ -196,8 +244,12 @@
var isTransitioning = false;
// Player health system
var playerHP = 3;
var maxHP = 3;
+// Boss system
+var boss = null;
+var bossSpawned = false;
+var bossSpawnScore = 10000;
// UI elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
@@ -331,8 +383,18 @@
if (spawnTimer >= spawnRate && enemiesSpawned < enemiesInWave) {
spawnEnemy();
spawnTimer = 0;
}
+ // Check if boss should spawn
+ if (!bossSpawned && LK.getScore() >= bossSpawnScore) {
+ boss = new Boss();
+ boss.x = 1024; // Center of screen
+ boss.y = -200; // Start above screen
+ game.addChild(boss);
+ bossSpawned = true;
+ // Flash screen to announce boss
+ LK.effects.flashScreen(0xFF0000, 500);
+ }
// Check for missile-enemy collisions
for (var m = missiles.length - 1; m >= 0; m--) {
var missile = missiles[m];
if (!missile.active) continue;
@@ -341,8 +403,29 @@
missile.destroy();
missiles.splice(m, 1);
continue;
}
+ // Check collision with boss
+ if (boss && boss.active && missile.intersects(boss)) {
+ // Boss takes damage
+ boss.hp--;
+ createExplosion(missile.x, missile.y);
+ missile.destroy();
+ missiles.splice(m, 1);
+ LK.getSound('enemy_destroyed').play();
+ // Check if boss is defeated
+ if (boss.hp <= 0) {
+ createExplosion(boss.x, boss.y);
+ LK.setScore(LK.getScore() + boss.points);
+ updateScore();
+ boss.active = false;
+ boss.destroy();
+ boss = null;
+ // Flash screen for boss defeat
+ LK.effects.flashScreen(0x00FF00, 1000);
+ }
+ continue;
+ }
// Check collision with enemies
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (!enemy.active) continue;
@@ -363,8 +446,29 @@
break;
}
}
}
+ // Update and check boss collision with player
+ if (boss && boss.active) {
+ // Remove boss if it goes off screen
+ if (boss.y > 2800) {
+ boss.destroy();
+ boss = null;
+ }
+ // Check collision with player
+ else if (boss.intersects(player)) {
+ // Boss collision does massive damage
+ playerHP = 0; // Boss kills player instantly
+ updateHP();
+ createExplosion(boss.x, boss.y);
+ createExplosion(player.x, player.y);
+ player.active = false;
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1000);
+ return;
+ }
+ }
// Update and check enemy collisions with player
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (!enemy.active) continue;
Jasgripe 39 riktad upp. In-Game asset. 2d. High contrast. No shadows
Jas Gripen 39 riktad upp. In-Game asset. 2d. High contrast. No shadows
Mig 29. In-Game asset. 2d. High contrast. No shadows
Su 27 uppifrån. In-Game asset. 2d. High contrast. No shadows
Explosion. In-Game asset. 2d. High contrast. No shadows
Tu 95 uppifrån. In-Game asset. 2d. High contrast. No shadows
Moln. In-Game asset. 2d. High contrast. No shadows
Bomb. In-Game asset. 2d. High contrast. No shadows
Regn drope. In-Game asset. 2d. High contrast. No shadows
SU 57. In-Game asset. 2d. High contrast. No shadows