User prompt
ahora lo ultimo ponle musica efectos de sonido y que cuando un enmigo lo destruyan desaparezca y que cuando ganes el nivel pases al otro nivel mas dificil ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
ponlos mas cerca de la nave y mas grandes los enemigos
User prompt
bueno ahora pon todo por oleadas y que cada oleada sea mas dificil que la anterior y las naves enemigas un poco mas grandes y que se destuyan ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
me gusta pero cambia la nave que dispara por una que tenga un mejor diseño mas detallado
User prompt
Please fix the bug: 'ReferenceError: playerBody is not defined' in or related to this line: 'playerBody.alpha = 1;' Line Number: 334
User prompt
que sea un poco mas realista todo
User prompt
listo ahora necesito que generes toda la parte visual del juego la nave y los enemigos
Code edit (1 edits merged)
Please save this source code
User prompt
Galactic Strike Force
Initial prompt
quieres que me crees un juego como galaga con muchos efectos y explosiones
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
// Wave-based scaling
self.scaleFactor = enemyScaleFactor;
self.health = enemyHealthBase;
self.maxHealth = enemyHealthBase;
// Create realistic layered alien ship design with wave scaling
var enemyHull = self.attachAsset('enemyHull', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: self.scaleFactor,
scaleY: self.scaleFactor
});
var enemyArmor = self.attachAsset('enemyArmor', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.8,
scaleX: self.scaleFactor,
scaleY: self.scaleFactor
});
var leftWing = self.attachAsset('enemyWingLeft', {
anchorX: 0.5,
anchorY: 0.5,
x: -22 * self.scaleFactor,
y: 8 * self.scaleFactor,
scaleX: self.scaleFactor,
scaleY: self.scaleFactor
});
var rightWing = self.attachAsset('enemyWingRight', {
anchorX: 0.5,
anchorY: 0.5,
x: 22 * self.scaleFactor,
y: 8 * self.scaleFactor,
scaleX: self.scaleFactor,
scaleY: self.scaleFactor
});
var enemyCore = self.attachAsset('enemyCore', {
anchorX: 0.5,
anchorY: 0.5,
y: -3 * self.scaleFactor,
scaleX: self.scaleFactor,
scaleY: self.scaleFactor
});
var leftEngine = self.attachAsset('enemyEngine', {
anchorX: 0.5,
anchorY: 0.5,
x: -12 * self.scaleFactor,
y: 18 * self.scaleFactor
});
var rightEngine = self.attachAsset('enemyEngine', {
anchorX: 0.5,
anchorY: 0.5,
x: 12 * self.scaleFactor,
y: 18 * self.scaleFactor
});
var leftWeapon = self.attachAsset('enemyWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: -18 * self.scaleFactor,
y: 15 * self.scaleFactor
});
var rightWeapon = self.attachAsset('enemyWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: 18 * self.scaleFactor,
y: 15 * self.scaleFactor
});
// Advanced visual effects
self.glowTimer = 0;
self.hoverTimer = 0;
self.speed = 2;
self.direction = 1;
self.fireTimer = Math.random() * 120 + 60;
self.movePattern = 'formation';
self.startX = 0;
self.startY = 0;
self.update = function () {
if (self.movePattern === 'formation') {
self.x += self.speed * self.direction;
if (self.x > 2048 - 50 || self.x < 50) {
self.direction *= -1;
self.y += 30;
}
}
// Advanced visual effects
self.glowTimer += 0.15;
self.hoverTimer += 0.08;
// Pulsing core with intensity variation
var glowIntensity = 0.6 + Math.sin(self.glowTimer) * 0.4;
enemyCore.alpha = glowIntensity;
enemyCore.scaleX = 0.9 + Math.sin(self.glowTimer * 1.5) * 0.2;
enemyCore.scaleY = 0.9 + Math.sin(self.glowTimer * 1.5) * 0.2;
// Realistic engine effects with varying intensity
var enginePower = 0.7 + Math.sin(self.glowTimer * 2) * 0.3;
leftEngine.alpha = enginePower + Math.random() * 0.2;
rightEngine.alpha = enginePower + Math.random() * 0.2;
leftEngine.scaleY = 0.8 + enginePower * 0.4;
rightEngine.scaleY = 0.8 + enginePower * 0.4;
// Subtle hovering motion
var hoverOffset = Math.sin(self.hoverTimer) * 3;
enemyHull.y = hoverOffset;
enemyArmor.y = hoverOffset;
// Wing flex animation
leftWing.rotation = Math.sin(self.hoverTimer * 0.7) * 0.05;
rightWing.rotation = -Math.sin(self.hoverTimer * 0.7) * 0.05;
// Weapon charging effect
var weaponCharge = 0.8 + Math.sin(self.glowTimer * 3) * 0.2;
leftWeapon.alpha = weaponCharge;
rightWeapon.alpha = weaponCharge;
self.fireTimer--;
var currentFireChance = self.fireChance || 0.005;
if (self.fireTimer <= 0 && Math.random() < currentFireChance) {
self.fireTimer = Math.random() * (150 - wave * 5) + (80 - wave * 5);
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 30;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
self.takeDamage = function () {
self.health--;
// Damage visual effects
if (self.health > 0) {
LK.effects.flashObject(self, 0xff4444, 100);
// Tween damage shake effect
tween(self, {
x: self.x + 5
}, {
duration: 50,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
x: self.x - 5
}, {
duration: 50,
easing: tween.easeOut
});
}
});
// Visual damage indicators
var healthRatio = self.health / self.maxHealth;
enemyHull.alpha = 0.5 + healthRatio * 0.5;
enemyArmor.alpha = 0.4 + healthRatio * 0.4;
}
return self.health <= 0;
};
self.destroy = function () {
LK.getSound('enemyDestroy').play();
LK.effects.flashObject(self, 0xffffff, 200);
// Create multi-layered explosion effect
var explosion = game.addChild(LK.getAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
x: self.x,
y: self.y,
alpha: 0.9
}));
var explosionFlame = game.addChild(LK.getAsset('explosionFlame', {
anchorX: 0.5,
anchorY: 0.5,
x: self.x,
y: self.y,
alpha: 0.7
}));
// Create spark particles
for (var sparkCount = 0; sparkCount < 6; sparkCount++) {
var spark = game.addChild(LK.getAsset('explosionSpark', {
anchorX: 0.5,
anchorY: 0.5,
x: self.x + (Math.random() - 0.5) * 60,
y: self.y + (Math.random() - 0.5) * 60,
alpha: 1
}));
tween(spark, {
x: spark.x + (Math.random() - 0.5) * 200,
y: spark.y + (Math.random() - 0.5) * 200,
scaleX: 0.1,
scaleY: 0.1,
alpha: 0
}, {
duration: 400 + Math.random() * 200,
easing: tween.easeOut,
onFinish: function onFinish() {
spark.destroy();
}
});
}
tween(explosion, {
scaleX: 2.5,
scaleY: 2.5,
alpha: 0
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
explosion.destroy();
}
});
tween(explosionFlame, {
scaleX: 1.8,
scaleY: 1.8,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
explosionFlame.destroy();
}
});
// Random chance to drop power-up
if (Math.random() < 0.15) {
var powerUp = new PowerUp();
powerUp.x = self.x;
powerUp.y = self.y;
powerUps.push(powerUp);
game.addChild(powerUp);
}
var waveBonus = wave * 50;
var sizeBonus = Math.floor((self.scaleFactor - 1) * 100);
score += 100 + waveBonus + sizeBonus;
scoreTxt.setText('Score: ' + score);
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
// Create advanced fighter ship design with enhanced details
var playerHull = self.attachAsset('playerHull', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.3,
scaleY: 1.4
});
var playerArmor = self.attachAsset('playerArmor', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.95,
scaleX: 1.2,
scaleY: 1.3
});
// Enhanced wing design with better positioning
var leftWing = self.attachAsset('playerWingLeft', {
anchorX: 0.5,
anchorY: 0.5,
x: -35,
y: 8,
scaleX: 1.4,
scaleY: 1.2
});
var rightWing = self.attachAsset('playerWingRight', {
anchorX: 0.5,
anchorY: 0.5,
x: 35,
y: 8,
scaleX: 1.4,
scaleY: 1.2
});
// Enhanced cockpit design
var cockpit = self.attachAsset('playerCockpit', {
anchorX: 0.5,
anchorY: 0.5,
y: -20,
scaleX: 1.3,
scaleY: 1.5
});
// Improved engine positioning and scale
var leftEngine = self.attachAsset('playerEngine', {
anchorX: 0.5,
anchorY: 0.5,
x: -22,
y: 45,
scaleX: 1.2,
scaleY: 1.4
});
var rightEngine = self.attachAsset('playerEngine', {
anchorX: 0.5,
anchorY: 0.5,
x: 22,
y: 45,
scaleX: 1.2,
scaleY: 1.4
});
// Enhanced thrust effects with better positioning
var leftThrust = self.attachAsset('playerThrust', {
anchorX: 0.5,
anchorY: 0.5,
x: -22,
y: 65,
alpha: 0.9,
scaleX: 1.1,
scaleY: 1.6
});
var rightThrust = self.attachAsset('playerThrust', {
anchorX: 0.5,
anchorY: 0.5,
x: 22,
y: 65,
alpha: 0.9,
scaleX: 1.1,
scaleY: 1.6
});
// Enhanced weapon systems with better positioning
var leftWeapon = self.attachAsset('playerWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: -32,
y: 2,
scaleX: 1.2,
scaleY: 1.5
});
var rightWeapon = self.attachAsset('playerWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: 32,
y: 2,
scaleX: 1.2,
scaleY: 1.5
});
// Add additional detail elements for more realistic look
var centerWeapon = self.attachAsset('playerWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: -10,
scaleX: 0.8,
scaleY: 1.3
});
var leftWingTip = self.attachAsset('playerWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: -48,
y: 15,
scaleX: 0.6,
scaleY: 0.8,
rotation: 0.3
});
var rightWingTip = self.attachAsset('playerWeapon', {
anchorX: 0.5,
anchorY: 0.5,
x: 48,
y: 15,
scaleX: 0.6,
scaleY: 0.8,
rotation: -0.3
});
// Additional engine details
var leftEngineGlow = self.attachAsset('playerThrust', {
anchorX: 0.5,
anchorY: 0.5,
x: -22,
y: 40,
alpha: 0.4,
scaleX: 1.5,
scaleY: 0.8
});
var rightEngineGlow = self.attachAsset('playerThrust', {
anchorX: 0.5,
anchorY: 0.5,
x: 22,
y: 40,
alpha: 0.4,
scaleX: 1.5,
scaleY: 0.8
});
// Advanced visual effects
self.thrustTimer = 0;
self.weaponGlow = 0;
self.detailTimer = 0;
self.speed = 8;
self.fireRate = 0;
self.maxFireRate = 15;
self.lives = 3;
self.invulnerable = false;
self.powerUpType = 'normal';
self.powerUpTimer = 0;
self.update = function () {
if (self.fireRate > 0) {
self.fireRate--;
}
if (self.powerUpTimer > 0) {
self.powerUpTimer--;
if (self.powerUpTimer <= 0) {
self.powerUpType = 'normal';
}
}
// Handle invulnerability visual effect
if (self.invulnerable) {
var flickerAlpha = Math.sin(LK.ticks * 0.5) * 0.3 + 0.4;
playerHull.alpha = flickerAlpha;
playerArmor.alpha = flickerAlpha;
leftWing.alpha = flickerAlpha;
rightWing.alpha = flickerAlpha;
cockpit.alpha = flickerAlpha;
} else {
playerHull.alpha = 1;
playerArmor.alpha = 0.95;
leftWing.alpha = 1;
rightWing.alpha = 1;
cockpit.alpha = 1;
}
// Advanced animation timers
self.thrustTimer += 0.4;
self.weaponGlow += 0.2;
self.detailTimer += 0.1;
// Enhanced thrust effects with more realistic animation
var thrustIntensity = 0.8 + Math.sin(self.thrustTimer) * 0.2;
var thrustFlicker = 0.9 + Math.random() * 0.1;
var thrustVariation = 0.8 + Math.sin(self.thrustTimer * 1.5) * 0.2;
leftThrust.scaleY = thrustIntensity * 1.8 + Math.random() * 0.3;
rightThrust.scaleY = thrustIntensity * 1.8 + Math.random() * 0.3;
leftThrust.scaleX = 0.9 + Math.sin(self.thrustTimer * 2) * 0.15;
rightThrust.scaleX = 0.9 + Math.sin(self.thrustTimer * 2) * 0.15;
leftThrust.alpha = thrustFlicker * 0.95;
rightThrust.alpha = thrustFlicker * 0.95;
// Engine glow effects
leftEngineGlow.alpha = 0.3 + Math.sin(self.thrustTimer * 2) * 0.2;
rightEngineGlow.alpha = 0.3 + Math.sin(self.thrustTimer * 2) * 0.2;
leftEngineGlow.scaleX = 1.2 + Math.sin(self.thrustTimer * 1.8) * 0.3;
rightEngineGlow.scaleX = 1.2 + Math.sin(self.thrustTimer * 1.8) * 0.3;
// Enhanced hull vibration from engine power
var vibration = Math.sin(self.thrustTimer * 4) * 0.3;
var detailVibration = Math.sin(self.detailTimer * 6) * 0.2;
playerHull.y = vibration;
playerArmor.y = vibration + detailVibration;
// Wing flex animation
leftWing.rotation = Math.sin(self.detailTimer * 0.8) * 0.02;
rightWing.rotation = -Math.sin(self.detailTimer * 0.8) * 0.02;
// Enhanced weapon glow effects
var weaponIntensity = 0.9 + Math.sin(self.weaponGlow) * 0.1;
leftWeapon.alpha = weaponIntensity;
rightWeapon.alpha = weaponIntensity;
centerWeapon.alpha = weaponIntensity * 0.8;
leftWingTip.alpha = weaponIntensity * 0.6;
rightWingTip.alpha = weaponIntensity * 0.6;
// Weapon charging animation
var weaponCharge = 0.9 + Math.sin(self.weaponGlow * 2.5) * 0.1;
leftWeapon.scaleY = weaponCharge;
rightWeapon.scaleY = weaponCharge;
centerWeapon.scaleY = weaponCharge * 0.9;
// Enhanced power-up visual effects
if (self.powerUpType === 'spread') {
leftWing.tint = 0x00FF88;
rightWing.tint = 0x00FF88;
cockpit.tint = 0x88FF88;
playerArmor.tint = 0x44DD66;
// Enhanced pulsing effect for spread
var spreadPulse = 0.9 + Math.sin(self.weaponGlow * 2) * 0.15;
leftWeapon.scaleX = spreadPulse;
rightWeapon.scaleX = spreadPulse;
leftWingTip.alpha = spreadPulse * 0.8;
rightWingTip.alpha = spreadPulse * 0.8;
} else if (self.powerUpType === 'rapid') {
leftWing.tint = 0xFF4444;
rightWing.tint = 0xFF4444;
cockpit.tint = 0xFF8888;
playerArmor.tint = 0xDD6644;
// Enhanced rapid fire visual effect
var rapidPulse = 0.95 + Math.sin(self.weaponGlow * 4) * 0.05;
leftWeapon.alpha = rapidPulse;
rightWeapon.alpha = rapidPulse;
centerWeapon.alpha = rapidPulse * 0.9;
} else {
leftWing.tint = 0xFFFFFF;
rightWing.tint = 0xFFFFFF;
cockpit.tint = 0xFFFFFF;
playerArmor.tint = 0xFFFFFF;
}
};
self.takeDamage = function () {
if (self.invulnerable) return false;
self.lives--;
self.invulnerable = true;
self.alpha = 0.3;
LK.setTimeout(function () {
self.invulnerable = false;
self.alpha = 1;
}, 2000);
if (self.lives <= 0) {
return true; // Game over
}
return false;
};
self.fire = function () {
if (self.fireRate > 0) return;
self.fireRate = self.maxFireRate;
LK.getSound('shoot').play();
if (self.powerUpType === 'spread') {
// Enhanced spread shot with center bullet
for (var i = -1; i <= 1; i++) {
var bullet = new PlayerBullet();
bullet.x = self.x + i * 35;
bullet.y = self.y - 45;
bullet.speedX = i * 2.5;
playerBullets.push(bullet);
game.addChild(bullet);
}
} else if (self.powerUpType === 'rapid') {
// Enhanced rapid fire
self.maxFireRate = 5;
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 45;
playerBullets.push(bullet);
game.addChild(bullet);
} else {
// Enhanced normal shot from center weapon
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 45;
playerBullets.push(bullet);
game.addChild(bullet);
}
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 12;
self.speedX = 0;
self.update = function () {
self.y -= self.speed;
self.x += self.speedX;
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
// Create layered power-up design
var powerUpGlow = self.attachAsset('powerUpGlow', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.3
});
var powerUpRing = self.attachAsset('powerUpRing', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7
});
var powerUpCore = self.attachAsset('powerUpCore', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.bobTimer = 0;
self.glowTimer = 0;
self.type = ['spread', 'rapid', 'shield'][Math.floor(Math.random() * 3)];
// Enhanced color scheme based on type
if (self.type === 'spread') {
powerUpCore.tint = 0x00ff44;
powerUpRing.tint = 0x44ff88;
powerUpGlow.tint = 0x88ffaa;
} else if (self.type === 'rapid') {
powerUpCore.tint = 0xff4400;
powerUpRing.tint = 0xff8844;
powerUpGlow.tint = 0xffaa88;
} else {
powerUpCore.tint = 0x4400ff;
powerUpRing.tint = 0x8844ff;
powerUpGlow.tint = 0xaa88ff;
}
self.update = function () {
self.y += self.speed;
self.bobTimer += 0.15;
self.glowTimer += 0.25;
// Advanced floating animation
self.rotation = Math.sin(self.bobTimer) * 0.15;
var bobScale = 1 + Math.sin(self.bobTimer * 2) * 0.12;
self.scaleX = bobScale;
self.scaleY = bobScale;
// Layered rotation effects
powerUpRing.rotation = -self.rotation * 1.5;
powerUpCore.rotation = self.rotation * 0.8;
// Pulsing glow effect
var glowIntensity = 0.2 + Math.sin(self.glowTimer) * 0.15;
powerUpGlow.alpha = glowIntensity;
powerUpGlow.scaleX = 1.2 + Math.sin(self.glowTimer * 0.7) * 0.3;
powerUpGlow.scaleY = 1.2 + Math.sin(self.glowTimer * 0.7) * 0.3;
// Core pulsing
var coreIntensity = 0.9 + Math.sin(self.glowTimer * 1.5) * 0.1;
powerUpCore.alpha = coreIntensity;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
// Environmental effects
// Enhanced power-ups
// Enhanced explosion effects
// Player ship components - modern fighter design
// Enemy ship components - more realistic alien design
var player = null;
var playerBullets = [];
var enemies = [];
var enemyBullets = [];
var powerUps = [];
var score = 0;
var wave = 1;
var enemiesRemaining = 0;
var waveEnemyCount = 0;
var enemyScaleFactor = 1.0;
var enemyHealthBase = 1;
var dragNode = null;
var lastX = 0;
// Enhanced background effects
var stars = [];
var nebulas = [];
var plasmaEffects = [];
// Create realistic starfield
function createStarfield() {
// Create multiple layers of stars for depth
for (var i = 0; i < 100; i++) {
var star = game.addChild(LK.getAsset('star', {
anchorX: 0.5,
anchorY: 0.5,
x: Math.random() * 2048,
y: Math.random() * 2732,
alpha: 0.3 + Math.random() * 0.7
}));
star.speed = 0.5 + Math.random() * 1.5;
star.twinkle = Math.random() * Math.PI * 2;
stars.push(star);
}
// Create distant nebulas for atmosphere
for (var i = 0; i < 5; i++) {
var nebula = game.addChild(LK.getAsset('nebula', {
anchorX: 0.5,
anchorY: 0.5,
x: Math.random() * 2048,
y: Math.random() * 2732,
alpha: 0.08 + Math.random() * 0.12
}));
nebula.speed = 0.2 + Math.random() * 0.3;
nebula.drift = Math.random() * Math.PI * 2;
nebulas.push(nebula);
}
}
// Create ambient plasma effects
function createPlasmaEffect(x, y) {
var plasma = game.addChild(LK.getAsset('plasma', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y,
alpha: 0.6
}));
plasma.life = 60 + Math.random() * 120;
plasma.speedX = (Math.random() - 0.5) * 4;
plasma.speedY = (Math.random() - 0.5) * 4;
plasmaEffects.push(plasma);
}
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreTxt);
scoreTxt.x = 120; // Offset to avoid menu icon
var livesTxt = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF
});
livesTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(livesTxt);
var waveTxt = new Text2('Wave: 1', {
size: 60,
fill: 0xFFFFFF
});
waveTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(waveTxt);
// Initialize player
player = game.addChild(new Player());
player.x = 1024;
player.y = 2500;
// Progressive wave system with increasing difficulty
function spawnWave() {
enemiesRemaining = 0;
waveEnemyCount = 0;
// Calculate wave difficulty parameters
enemyScaleFactor = 1.8 + (wave - 1) * 0.25; // Ships get much larger, starting at 1.8x and growing 25% each wave
enemyHealthBase = Math.floor(1 + (wave - 1) * 0.5); // Health increases every 2 waves
var enemySpeed = 2 + (wave - 1) * 0.3; // Speed increases each wave
var fireChance = 0.005 + (wave - 1) * 0.002; // More frequent shooting
// Determine formation based on wave
var cols, rows, spacing;
if (wave <= 3) {
cols = 6 + wave;
rows = 2 + Math.floor(wave / 2);
spacing = Math.max(150, 200 - wave * 5); // Increased spacing for larger enemies
} else if (wave <= 6) {
cols = 8 + (wave - 3);
rows = 3 + Math.floor((wave - 3) / 2);
spacing = Math.max(140, 180 - wave * 3); // Increased spacing for larger enemies
} else {
cols = 10 + (wave - 6);
rows = 4 + Math.floor((wave - 6) / 3);
spacing = Math.max(130, 170 - wave * 2); // Increased spacing for larger enemies
}
var startX = (2048 - cols * spacing) / 2;
var startY = 400 - Math.min(wave * 10, 50); // Start much closer to player
for (var row = 0; row < rows; row++) {
for (var col = 0; col < cols; col++) {
var enemy = new Enemy();
enemy.x = startX + col * spacing;
enemy.y = startY + row * (100 * enemyScaleFactor); // Increased vertical spacing for larger enemies
enemy.startX = enemy.x;
enemy.startY = enemy.y;
enemy.speed = enemySpeed;
enemy.fireChance = fireChance;
enemies.push(enemy);
game.addChild(enemy);
enemiesRemaining++;
waveEnemyCount++;
}
}
// Add special effects for higher waves
if (wave >= 3) {
LK.effects.flashScreen(0x4444ff, 500);
}
if (wave >= 5) {
// Create warning plasma effects
for (var i = 0; i < 5; i++) {
createPlasmaEffect(Math.random() * 2048, Math.random() * 400);
}
}
waveTxt.setText('Wave: ' + wave + ' (' + waveEnemyCount + ' enemies)');
}
// Input handling
game.down = function (x, y, obj) {
dragNode = player;
lastX = x;
player.fire();
};
game.move = function (x, y, obj) {
if (dragNode) {
var deltaX = x - lastX;
dragNode.x += deltaX;
// Keep player on screen
if (dragNode.x < 40) dragNode.x = 40;
if (dragNode.x > 2008) dragNode.x = 2008;
lastX = x;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game loop
game.update = function () {
// Update realistic background effects
for (var i = stars.length - 1; i >= 0; i--) {
var star = stars[i];
star.y += star.speed;
star.twinkle += 0.1;
star.alpha = 0.3 + Math.sin(star.twinkle) * 0.4;
// Reset star position when it goes off screen
if (star.y > 2732 + 50) {
star.y = -50;
star.x = Math.random() * 2048;
}
}
for (var i = nebulas.length - 1; i >= 0; i--) {
var nebula = nebulas[i];
nebula.y += nebula.speed;
nebula.drift += 0.02;
nebula.x += Math.sin(nebula.drift) * 0.5;
nebula.alpha = 0.08 + Math.sin(nebula.drift * 0.5) * 0.04;
// Reset nebula position
if (nebula.y > 2732 + 100) {
nebula.y = -200;
nebula.x = Math.random() * 2048;
}
}
// Update plasma effects
for (var i = plasmaEffects.length - 1; i >= 0; i--) {
var plasma = plasmaEffects[i];
plasma.x += plasma.speedX;
plasma.y += plasma.speedY;
plasma.life--;
plasma.alpha = plasma.life / 120 * 0.6;
plasma.rotation += 0.05;
if (plasma.life <= 0) {
plasma.destroy();
plasmaEffects.splice(i, 1);
}
}
// Create ambient plasma effects occasionally
if (Math.random() < 0.02) {
createPlasmaEffect(Math.random() * 2048, Math.random() * 2732);
}
// Auto-fire for mobile
if (LK.ticks % 20 === 0) {
player.fire();
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY > -20 && bullet.y <= -20) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
var hit = false;
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
var destroyed = enemy.takeDamage();
if (destroyed) {
enemy.destroy();
enemies.splice(j, 1);
enemiesRemaining--;
}
bullet.destroy();
playerBullets.splice(i, 1);
hit = true;
break;
}
}
if (!hit) {
bullet.lastY = bullet.y;
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
// Remove bullets that go off screen
if (bullet.lastY < 2800 && bullet.y >= 2800) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
var gameOver = player.takeDamage();
livesTxt.setText('Lives: ' + player.lives);
bullet.destroy();
enemyBullets.splice(i, 1);
if (gameOver) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
} else {
bullet.lastY = bullet.y;
}
}
// Update power-ups
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
if (powerUp.lastY === undefined) powerUp.lastY = powerUp.y;
// Remove power-ups that go off screen
if (powerUp.lastY < 2800 && powerUp.y >= 2800) {
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
// Check collision with player
if (powerUp.intersects(player)) {
LK.getSound('powerUpPickup').play();
player.powerUpType = powerUp.type;
player.powerUpTimer = 600; // 10 seconds at 60fps
player.maxFireRate = player.powerUpType === 'rapid' ? 5 : 15;
LK.effects.flashObject(player, 0x00ffff, 500);
powerUp.destroy();
powerUps.splice(i, 1);
} else {
powerUp.lastY = powerUp.y;
}
}
// Check for wave completion
if (enemiesRemaining <= 0) {
wave++;
// Wave completion effects
LK.effects.flashScreen(0x00ff44, 800);
for (var i = 0; i < 8; i++) {
createPlasmaEffect(Math.random() * 2048, Math.random() * 300);
}
var delay = wave <= 3 ? 2000 : 3000; // Longer pause for harder waves
LK.setTimeout(function () {
spawnWave();
}, delay);
}
// Check win condition (increased to 10 waves for more gameplay)
if (wave > 10) {
LK.effects.flashScreen(0x00ff00, 1500);
LK.showYouWin();
}
};
// Initialize realistic background
createStarfield();
// Start the game
spawnWave();
LK.playMusic('bgMusic');
; ===================================================================
--- original.js
+++ change.js
@@ -710,34 +710,34 @@
function spawnWave() {
enemiesRemaining = 0;
waveEnemyCount = 0;
// Calculate wave difficulty parameters
- enemyScaleFactor = 1.0 + (wave - 1) * 0.15; // Ships get 15% larger each wave
+ enemyScaleFactor = 1.8 + (wave - 1) * 0.25; // Ships get much larger, starting at 1.8x and growing 25% each wave
enemyHealthBase = Math.floor(1 + (wave - 1) * 0.5); // Health increases every 2 waves
var enemySpeed = 2 + (wave - 1) * 0.3; // Speed increases each wave
var fireChance = 0.005 + (wave - 1) * 0.002; // More frequent shooting
// Determine formation based on wave
var cols, rows, spacing;
if (wave <= 3) {
cols = 6 + wave;
rows = 2 + Math.floor(wave / 2);
- spacing = Math.max(100, 140 - wave * 5);
+ spacing = Math.max(150, 200 - wave * 5); // Increased spacing for larger enemies
} else if (wave <= 6) {
cols = 8 + (wave - 3);
rows = 3 + Math.floor((wave - 3) / 2);
- spacing = Math.max(90, 120 - wave * 3);
+ spacing = Math.max(140, 180 - wave * 3); // Increased spacing for larger enemies
} else {
cols = 10 + (wave - 6);
rows = 4 + Math.floor((wave - 6) / 3);
- spacing = Math.max(80, 110 - wave * 2);
+ spacing = Math.max(130, 170 - wave * 2); // Increased spacing for larger enemies
}
var startX = (2048 - cols * spacing) / 2;
- var startY = 150 - Math.min(wave * 10, 50); // Start higher for later waves
+ var startY = 400 - Math.min(wave * 10, 50); // Start much closer to player
for (var row = 0; row < rows; row++) {
for (var col = 0; col < cols; col++) {
var enemy = new Enemy();
enemy.x = startX + col * spacing;
- enemy.y = startY + row * (60 * enemyScaleFactor);
+ enemy.y = startY + row * (100 * enemyScaleFactor); // Increased vertical spacing for larger enemies
enemy.startX = enemy.x;
enemy.startY = enemy.y;
enemy.speed = enemySpeed;
enemy.fireChance = fireChance;