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 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
// 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 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);
// 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);
}
// 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 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 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 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)) {
// Game over
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)) {
// Game over
createExplosion(player.x, player.y);
player.active = false;
bullet.destroy();
enemyBullets.splice(eb, 1);
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)) {
// Game over
createExplosion(player.x, player.y);
player.active = false;
bomb.destroy();
bombs.splice(b, 1);
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);
}
}
// Change weather intensity over time
if (LK.ticks % 600 === 0) {
// Every 10 seconds
weatherIntensity = Math.random() * 0.8 + 0.2; // Random intensity between 0.2-1.0
// Apply weather visual effects to background
var bgTint = 0x87CEEB; // Default sky blue
if (weatherIntensity > 0.6) {
// Heavy rain - darker sky
bgTint = 0x4682B4;
} else if (weatherIntensity > 0.4) {
// Medium rain - slightly darker
bgTint = 0x6495ED;
}
// Tween background color change
tween(game, {
backgroundColor: bgTint
}, {
duration: 2000,
easing: tween.easeInOut
});
}
}; ===================================================================
--- original.js
+++ change.js
@@ -138,8 +138,23 @@
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
****/
@@ -149,13 +164,13 @@
/****
* Game Code
****/
-// Sound effects
-// Missiles
-// Enemy aircraft types
-// Player aircraft - JAS Gripen (distinctive delta wing design)
// Game variables
+// Player aircraft - JAS Gripen (distinctive delta wing design)
+// Enemy aircraft types
+// Missiles
+// Sound effects
var player;
var missiles = [];
var enemies = [];
var enemyBullets = [];
@@ -170,8 +185,11 @@
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
// UI elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
@@ -461,5 +479,50 @@
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);
+ }
+ }
+ // Change weather intensity over time
+ if (LK.ticks % 600 === 0) {
+ // Every 10 seconds
+ weatherIntensity = Math.random() * 0.8 + 0.2; // Random intensity between 0.2-1.0
+ // Apply weather visual effects to background
+ var bgTint = 0x87CEEB; // Default sky blue
+ if (weatherIntensity > 0.6) {
+ // Heavy rain - darker sky
+ bgTint = 0x4682B4;
+ } else if (weatherIntensity > 0.4) {
+ // Medium rain - slightly darker
+ bgTint = 0x6495ED;
+ }
+ // Tween background color change
+ tween(game, {
+ backgroundColor: bgTint
+ }, {
+ duration: 2000,
+ easing: tween.easeInOut
+ });
+ }
};
\ No newline at end of file
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