/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Enemy var Enemy = Container.expand(function () { var self = Container.call(this); self.type = 1; // 1,2,3 self.hp = 1; self.shootTimer = 0; self.pattern = 0; // 0: straight, 1: sine, 2: zigzag self.baseX = 0; self.baseY = 0; self.t = 0; self.speed = 4; self.scoreValue = 10; self.asset = null; self.init = function (type, pattern) { self.type = type; self.pattern = pattern; if (type === 1) { self.asset = self.attachAsset('enemy1', { anchorX: 0.5, anchorY: 0.5 }); self.hp = 1; self.scoreValue = 10; } else if (type === 2) { self.asset = self.attachAsset('enemy2', { anchorX: 0.5, anchorY: 0.5 }); self.hp = 2; self.scoreValue = 20; } else if (type === 3) { self.asset = self.attachAsset('enemy3', { anchorX: 0.5, anchorY: 0.5 }); self.hp = 3; self.scoreValue = 40; } self.width = self.asset.width; self.height = self.asset.height; self.baseX = self.x; self.baseY = self.y; self.t = 0; self.shootTimer = 0; self.speed = 4 + type; }; self.update = function () { self.t += 1; // Movement patterns if (self.pattern === 0) { // Straight down self.y += self.speed; } else if (self.pattern === 1) { // Sine wave self.y += self.speed; self.x = self.baseX + Math.sin(self.t / 20) * 180; } else if (self.pattern === 2) { // Zigzag self.y += self.speed; self.x = self.baseX + (self.t % 60 < 30 ? -80 : 80); } }; // Flash when hit self.flash = function () { tween(self.asset, { tint: 0xffffff }, { duration: 80, onFinish: function onFinish() { tween(self.asset, { tint: self.type === 1 ? 0xff3b3b : self.type === 2 ? 0xffe14d : 0x7bff7b }, { duration: 120 }); } }); }; return self; }); // Enemy Bullet var EnemyBullet = Container.expand(function () { var self = Container.call(this); var bullet = self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 18; self.dx = 0; self.dy = 1; self.update = function () { self.x += self.dx * self.speed; self.y += self.dy * self.speed; }; return self; }); // Player Bullet var PlayerBullet = Container.expand(function () { var self = Container.call(this); var bullet = self.attachAsset('playerBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -32; self.update = function () { self.y += self.speed; }; return self; }); // Player Ship var PlayerShip = Container.expand(function () { var self = Container.call(this); var ship = self.attachAsset('playerShip', { anchorX: 0.5, anchorY: 0.5 }); self.width = ship.width; self.height = ship.height; self.speed = 22; self.shootCooldown = 0; self.powerLevel = 1; // 1: single, 2: double, 3: triple self.invincible = 0; // frames left of invincibility // Flash when hit self.flash = function () { tween(ship, { tint: 0xffff00 }, { duration: 100, onFinish: function onFinish() { tween(ship, { tint: 0x33c1ff }, { duration: 200 }); } }); }; return self; }); // Powerup var Powerup = Container.expand(function () { var self = Container.call(this); var asset = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.type = 1; // 1: power, 2: shield self.update = function () { self.y += 10; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Music // Sounds // Powerup // Bullets // Enemy types // Ship (player) // Game state variables var player = null; var playerBullets = []; var enemies = []; var enemyBullets = []; var powerups = []; var dragNode = null; var lastMoveX = 0; var lastMoveY = 0; var scoreTxt = null; var level = 1; var waveTimer = 0; var nextPowerupScore = 30; var gameOver = false; var lastIntersecting = false; var invincibleTimer = 0; // Set background color game.setBackgroundColor(0x0a0a1a); // Score display scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Initialize player player = new PlayerShip(); player.x = 2048 / 2; player.y = 2732 - 200; game.addChild(player); // Start music LK.playMusic('bgmusic'); // Touch controls game.down = function (x, y, obj) { // Only allow drag if touch is on lower 1/3 of screen if (y > 2732 * 0.6) { dragNode = player; lastMoveX = x; lastMoveY = y; } }; game.up = function (x, y, obj) { dragNode = null; }; function handleMove(x, y, obj) { if (dragNode === player) { // Clamp to screen var minX = player.width / 2 + 20; var maxX = 2048 - player.width / 2 - 20; var minY = 2732 * 0.6; var maxY = 2732 - player.height / 2 - 20; player.x = Math.max(minX, Math.min(maxX, x)); player.y = Math.max(minY, Math.min(maxY, y)); } } game.move = handleMove; // Fire player bullets function firePlayerBullets() { if (player.shootCooldown > 0) return; var b; if (player.powerLevel === 1) { b = new PlayerBullet(); b.x = player.x; b.y = player.y - player.height / 2 - 10; playerBullets.push(b); game.addChild(b); } else if (player.powerLevel === 2) { b = new PlayerBullet(); b.x = player.x - 32; b.y = player.y - player.height / 2 - 10; playerBullets.push(b); game.addChild(b); b = new PlayerBullet(); b.x = player.x + 32; b.y = player.y - player.height / 2 - 10; playerBullets.push(b); game.addChild(b); } else if (player.powerLevel >= 3) { b = new PlayerBullet(); b.x = player.x; b.y = player.y - player.height / 2 - 10; playerBullets.push(b); game.addChild(b); b = new PlayerBullet(); b.x = player.x - 48; b.y = player.y - player.height / 2 - 10; playerBullets.push(b); game.addChild(b); b = new PlayerBullet(); b.x = player.x + 48; b.y = player.y - player.height / 2 - 10; playerBullets.push(b); game.addChild(b); } LK.getSound('shoot').play(); player.shootCooldown = 10; // frames } // Spawn enemy wave function spawnWave() { var n = 4 + Math.floor(level * 0.7); var margin = 180; var spacing = (2048 - margin * 2) / (n - 1); var y0 = -100; for (var i = 0; i < n; i++) { var e = new Enemy(); // Evolve enemy types and patterns as level increases var type = 1; var pattern = 0; if (level >= 3 && Math.random() < 0.4) type = 2; if (level >= 7 && Math.random() < 0.25) type = 3; if (level >= 2 && Math.random() < 0.3) pattern = 1; if (level >= 5 && Math.random() < 0.2) pattern = 2; e.init(type, pattern); e.x = margin + i * spacing; e.y = y0 - Math.random() * 120; e.baseX = e.x; e.baseY = e.y; enemies.push(e); game.addChild(e); } } // Spawn powerup function spawnPowerup() { var p = new Powerup(); p.x = 200 + Math.random() * (2048 - 400); p.y = -60; // Evolve powerup type if (level >= 5 && Math.random() < 0.5) { p.type = 2; // shield } else { p.type = 1; // power } powerups.push(p); game.addChild(p); } // Main update loop game.update = function () { if (gameOver) return; // Player shooting if (player.shootCooldown > 0) player.shootCooldown--; if (LK.ticks % 6 === 0) firePlayerBullets(); // Player invincibility if (player.invincible > 0) { player.invincible--; if (player.invincible === 0) { tween(player, { alpha: 1 }, { duration: 200 }); } } // Update player bullets for (var i = playerBullets.length - 1; i >= 0; i--) { var b = playerBullets[i]; b.update(); if (b.y < -60) { b.destroy(); playerBullets.splice(i, 1); continue; } // Collision with enemies for (var j = enemies.length - 1; j >= 0; j--) { var e = enemies[j]; if (b.intersects(e)) { e.hp--; e.flash(); if (e.hp <= 0) { LK.setScore(LK.getScore() + e.scoreValue); scoreTxt.setText(LK.getScore()); LK.getSound('explosion').play(); e.destroy(); enemies.splice(j, 1); } b.destroy(); playerBullets.splice(i, 1); break; } } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { var e = enemies[i]; e.update(); // Enemy shoots if (level >= 2 && LK.ticks % (60 - Math.min(level * 2, 40)) === 0 && Math.random() < 0.5) { var eb = new EnemyBullet(); eb.x = e.x; eb.y = e.y + e.height / 2 + 10; // Aim at player var dx = player.x - e.x; var dy = player.y - e.y; var len = Math.sqrt(dx * dx + dy * dy); if (len > 0) { eb.dx = dx / len; eb.dy = dy / len; } enemyBullets.push(eb); game.addChild(eb); LK.getSound('enemyShoot').play(); } // Remove if off screen if (e.y > 2732 + 100) { e.destroy(); enemies.splice(i, 1); } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var eb = enemyBullets[i]; eb.update(); if (eb.y > 2732 + 60 || eb.x < -60 || eb.x > 2048 + 60) { eb.destroy(); enemyBullets.splice(i, 1); continue; } // Collision with player if (player.invincible === 0 && eb.intersects(player)) { player.flash(); player.invincible = 60; tween(player, { alpha: 0.5 }, { duration: 100 }); LK.effects.flashScreen(0xff0000, 400); LK.showGameOver(); gameOver = true; return; } } // Update powerups for (var i = powerups.length - 1; i >= 0; i--) { var p = powerups[i]; p.update(); if (p.y > 2732 + 60) { p.destroy(); powerups.splice(i, 1); continue; } // Collision with player if (p.intersects(player)) { LK.getSound('powerup').play(); if (p.type === 1) { // Power up: increase powerLevel if (player.powerLevel < 3) player.powerLevel++; } else if (p.type === 2) { // Shield: invincibility player.invincible = 180; tween(player, { alpha: 0.5 }, { duration: 100 }); } p.destroy(); powerups.splice(i, 1); } } // Spawn new wave if all enemies gone if (enemies.length === 0 && waveTimer <= 0) { spawnWave(); level++; waveTimer = 60; } if (waveTimer > 0) waveTimer--; // Spawn powerup at score milestones if (LK.getScore() >= nextPowerupScore) { spawnPowerup(); nextPowerupScore += 40 + Math.floor(level * 10); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,448 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Enemy
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ self.type = 1; // 1,2,3
+ self.hp = 1;
+ self.shootTimer = 0;
+ self.pattern = 0; // 0: straight, 1: sine, 2: zigzag
+ self.baseX = 0;
+ self.baseY = 0;
+ self.t = 0;
+ self.speed = 4;
+ self.scoreValue = 10;
+ self.asset = null;
+ self.init = function (type, pattern) {
+ self.type = type;
+ self.pattern = pattern;
+ if (type === 1) {
+ self.asset = self.attachAsset('enemy1', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.hp = 1;
+ self.scoreValue = 10;
+ } else if (type === 2) {
+ self.asset = self.attachAsset('enemy2', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.hp = 2;
+ self.scoreValue = 20;
+ } else if (type === 3) {
+ self.asset = self.attachAsset('enemy3', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.hp = 3;
+ self.scoreValue = 40;
+ }
+ self.width = self.asset.width;
+ self.height = self.asset.height;
+ self.baseX = self.x;
+ self.baseY = self.y;
+ self.t = 0;
+ self.shootTimer = 0;
+ self.speed = 4 + type;
+ };
+ self.update = function () {
+ self.t += 1;
+ // Movement patterns
+ if (self.pattern === 0) {
+ // Straight down
+ self.y += self.speed;
+ } else if (self.pattern === 1) {
+ // Sine wave
+ self.y += self.speed;
+ self.x = self.baseX + Math.sin(self.t / 20) * 180;
+ } else if (self.pattern === 2) {
+ // Zigzag
+ self.y += self.speed;
+ self.x = self.baseX + (self.t % 60 < 30 ? -80 : 80);
+ }
+ };
+ // Flash when hit
+ self.flash = function () {
+ tween(self.asset, {
+ tint: 0xffffff
+ }, {
+ duration: 80,
+ onFinish: function onFinish() {
+ tween(self.asset, {
+ tint: self.type === 1 ? 0xff3b3b : self.type === 2 ? 0xffe14d : 0x7bff7b
+ }, {
+ duration: 120
+ });
+ }
+ });
+ };
+ return self;
+});
+// Enemy Bullet
+var EnemyBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bullet = self.attachAsset('enemyBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 18;
+ self.dx = 0;
+ self.dy = 1;
+ self.update = function () {
+ self.x += self.dx * self.speed;
+ self.y += self.dy * self.speed;
+ };
+ return self;
+});
+// Player Bullet
+var PlayerBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bullet = self.attachAsset('playerBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -32;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Player Ship
+var PlayerShip = Container.expand(function () {
+ var self = Container.call(this);
+ var ship = self.attachAsset('playerShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.width = ship.width;
+ self.height = ship.height;
+ self.speed = 22;
+ self.shootCooldown = 0;
+ self.powerLevel = 1; // 1: single, 2: double, 3: triple
+ self.invincible = 0; // frames left of invincibility
+ // Flash when hit
+ self.flash = function () {
+ tween(ship, {
+ tint: 0xffff00
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ tween(ship, {
+ tint: 0x33c1ff
+ }, {
+ duration: 200
+ });
+ }
+ });
+ };
+ return self;
+});
+// Powerup
+var Powerup = Container.expand(function () {
+ var self = Container.call(this);
+ var asset = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 1; // 1: power, 2: shield
+ self.update = function () {
+ self.y += 10;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
backgroundColor: 0x000000
-});
\ No newline at end of file
+});
+
+/****
+* Game Code
+****/
+// Music
+// Sounds
+// Powerup
+// Bullets
+// Enemy types
+// Ship (player)
+// Game state variables
+var player = null;
+var playerBullets = [];
+var enemies = [];
+var enemyBullets = [];
+var powerups = [];
+var dragNode = null;
+var lastMoveX = 0;
+var lastMoveY = 0;
+var scoreTxt = null;
+var level = 1;
+var waveTimer = 0;
+var nextPowerupScore = 30;
+var gameOver = false;
+var lastIntersecting = false;
+var invincibleTimer = 0;
+// Set background color
+game.setBackgroundColor(0x0a0a1a);
+// Score display
+scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Initialize player
+player = new PlayerShip();
+player.x = 2048 / 2;
+player.y = 2732 - 200;
+game.addChild(player);
+// Start music
+LK.playMusic('bgmusic');
+// Touch controls
+game.down = function (x, y, obj) {
+ // Only allow drag if touch is on lower 1/3 of screen
+ if (y > 2732 * 0.6) {
+ dragNode = player;
+ lastMoveX = x;
+ lastMoveY = y;
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+function handleMove(x, y, obj) {
+ if (dragNode === player) {
+ // Clamp to screen
+ var minX = player.width / 2 + 20;
+ var maxX = 2048 - player.width / 2 - 20;
+ var minY = 2732 * 0.6;
+ var maxY = 2732 - player.height / 2 - 20;
+ player.x = Math.max(minX, Math.min(maxX, x));
+ player.y = Math.max(minY, Math.min(maxY, y));
+ }
+}
+game.move = handleMove;
+// Fire player bullets
+function firePlayerBullets() {
+ if (player.shootCooldown > 0) return;
+ var b;
+ if (player.powerLevel === 1) {
+ b = new PlayerBullet();
+ b.x = player.x;
+ b.y = player.y - player.height / 2 - 10;
+ playerBullets.push(b);
+ game.addChild(b);
+ } else if (player.powerLevel === 2) {
+ b = new PlayerBullet();
+ b.x = player.x - 32;
+ b.y = player.y - player.height / 2 - 10;
+ playerBullets.push(b);
+ game.addChild(b);
+ b = new PlayerBullet();
+ b.x = player.x + 32;
+ b.y = player.y - player.height / 2 - 10;
+ playerBullets.push(b);
+ game.addChild(b);
+ } else if (player.powerLevel >= 3) {
+ b = new PlayerBullet();
+ b.x = player.x;
+ b.y = player.y - player.height / 2 - 10;
+ playerBullets.push(b);
+ game.addChild(b);
+ b = new PlayerBullet();
+ b.x = player.x - 48;
+ b.y = player.y - player.height / 2 - 10;
+ playerBullets.push(b);
+ game.addChild(b);
+ b = new PlayerBullet();
+ b.x = player.x + 48;
+ b.y = player.y - player.height / 2 - 10;
+ playerBullets.push(b);
+ game.addChild(b);
+ }
+ LK.getSound('shoot').play();
+ player.shootCooldown = 10; // frames
+}
+// Spawn enemy wave
+function spawnWave() {
+ var n = 4 + Math.floor(level * 0.7);
+ var margin = 180;
+ var spacing = (2048 - margin * 2) / (n - 1);
+ var y0 = -100;
+ for (var i = 0; i < n; i++) {
+ var e = new Enemy();
+ // Evolve enemy types and patterns as level increases
+ var type = 1;
+ var pattern = 0;
+ if (level >= 3 && Math.random() < 0.4) type = 2;
+ if (level >= 7 && Math.random() < 0.25) type = 3;
+ if (level >= 2 && Math.random() < 0.3) pattern = 1;
+ if (level >= 5 && Math.random() < 0.2) pattern = 2;
+ e.init(type, pattern);
+ e.x = margin + i * spacing;
+ e.y = y0 - Math.random() * 120;
+ e.baseX = e.x;
+ e.baseY = e.y;
+ enemies.push(e);
+ game.addChild(e);
+ }
+}
+// Spawn powerup
+function spawnPowerup() {
+ var p = new Powerup();
+ p.x = 200 + Math.random() * (2048 - 400);
+ p.y = -60;
+ // Evolve powerup type
+ if (level >= 5 && Math.random() < 0.5) {
+ p.type = 2; // shield
+ } else {
+ p.type = 1; // power
+ }
+ powerups.push(p);
+ game.addChild(p);
+}
+// Main update loop
+game.update = function () {
+ if (gameOver) return;
+ // Player shooting
+ if (player.shootCooldown > 0) player.shootCooldown--;
+ if (LK.ticks % 6 === 0) firePlayerBullets();
+ // Player invincibility
+ if (player.invincible > 0) {
+ player.invincible--;
+ if (player.invincible === 0) {
+ tween(player, {
+ alpha: 1
+ }, {
+ duration: 200
+ });
+ }
+ }
+ // Update player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var b = playerBullets[i];
+ b.update();
+ if (b.y < -60) {
+ b.destroy();
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ // Collision with enemies
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var e = enemies[j];
+ if (b.intersects(e)) {
+ e.hp--;
+ e.flash();
+ if (e.hp <= 0) {
+ LK.setScore(LK.getScore() + e.scoreValue);
+ scoreTxt.setText(LK.getScore());
+ LK.getSound('explosion').play();
+ e.destroy();
+ enemies.splice(j, 1);
+ }
+ b.destroy();
+ playerBullets.splice(i, 1);
+ break;
+ }
+ }
+ }
+ // Update enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var e = enemies[i];
+ e.update();
+ // Enemy shoots
+ if (level >= 2 && LK.ticks % (60 - Math.min(level * 2, 40)) === 0 && Math.random() < 0.5) {
+ var eb = new EnemyBullet();
+ eb.x = e.x;
+ eb.y = e.y + e.height / 2 + 10;
+ // Aim at player
+ var dx = player.x - e.x;
+ var dy = player.y - e.y;
+ var len = Math.sqrt(dx * dx + dy * dy);
+ if (len > 0) {
+ eb.dx = dx / len;
+ eb.dy = dy / len;
+ }
+ enemyBullets.push(eb);
+ game.addChild(eb);
+ LK.getSound('enemyShoot').play();
+ }
+ // Remove if off screen
+ if (e.y > 2732 + 100) {
+ e.destroy();
+ enemies.splice(i, 1);
+ }
+ }
+ // Update enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var eb = enemyBullets[i];
+ eb.update();
+ if (eb.y > 2732 + 60 || eb.x < -60 || eb.x > 2048 + 60) {
+ eb.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Collision with player
+ if (player.invincible === 0 && eb.intersects(player)) {
+ player.flash();
+ player.invincible = 60;
+ tween(player, {
+ alpha: 0.5
+ }, {
+ duration: 100
+ });
+ LK.effects.flashScreen(0xff0000, 400);
+ LK.showGameOver();
+ gameOver = true;
+ return;
+ }
+ }
+ // Update powerups
+ for (var i = powerups.length - 1; i >= 0; i--) {
+ var p = powerups[i];
+ p.update();
+ if (p.y > 2732 + 60) {
+ p.destroy();
+ powerups.splice(i, 1);
+ continue;
+ }
+ // Collision with player
+ if (p.intersects(player)) {
+ LK.getSound('powerup').play();
+ if (p.type === 1) {
+ // Power up: increase powerLevel
+ if (player.powerLevel < 3) player.powerLevel++;
+ } else if (p.type === 2) {
+ // Shield: invincibility
+ player.invincible = 180;
+ tween(player, {
+ alpha: 0.5
+ }, {
+ duration: 100
+ });
+ }
+ p.destroy();
+ powerups.splice(i, 1);
+ }
+ }
+ // Spawn new wave if all enemies gone
+ if (enemies.length === 0 && waveTimer <= 0) {
+ spawnWave();
+ level++;
+ waveTimer = 60;
+ }
+ if (waveTimer > 0) waveTimer--;
+ // Spawn powerup at score milestones
+ if (LK.getScore() >= nextPowerupScore) {
+ spawnPowerup();
+ nextPowerupScore += 40 + Math.floor(level * 10);
+ }
+};
\ No newline at end of file
Make me a Spacelnvaders InfinityGene EVO character. In-Game asset. 2d. High contrast. No shadows
Make a Spacelnvaders InfinityGene EVO enemy character. In-Game asset. 2d. High contrast. No shadows
Make this blue and green
Make this red and purple
Bana uzay gemisinin mermisini 2d pixel çiz. In-Game asset. 2d. High contrast. No shadows