/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 40;
self.health = 40;
self.attackPower = 15;
self.speed = 1;
self.lastAttackTime = 0;
self.attackCooldown = 120; // 2 seconds at 60fps
self.attackRange = 80;
self.takeDamage = function (damage) {
self.health = Math.max(0, self.health - damage);
LK.effects.flashObject(self, 0xffffff, 100);
LK.getSound('enemyHit').play();
if (self.health <= 0) {
self.die();
}
};
self.die = function () {
enemies.splice(enemies.indexOf(self), 1);
self.destroy();
checkWaveComplete();
};
self.update = function () {
// Move towards player
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > self.attackRange) {
var moveX = dx / distance * self.speed;
var moveY = dy / distance * self.speed;
var newX = self.x + moveX;
var newY = self.y + moveY;
// Keep enemy in arena bounds
var centerX = 2048 / 2;
var centerY = 2732 / 2;
var arenaRadius = 380;
var distFromCenter = Math.sqrt((newX - centerX) * (newX - centerX) + (newY - centerY) * (newY - centerY));
if (distFromCenter <= arenaRadius) {
self.x = newX;
self.y = newY;
}
} else {
// Attack player if in range and cooldown is over
if (LK.ticks - self.lastAttackTime >= self.attackCooldown) {
player.takeDamage(self.attackPower);
self.lastAttackTime = LK.ticks;
}
}
};
return self;
});
var FastEnemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('fastEnemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 25;
self.health = 25;
self.attackPower = 10;
self.speed = 2.5;
self.lastAttackTime = 0;
self.attackCooldown = 90; // 1.5 seconds at 60fps
self.attackRange = 60;
self.takeDamage = function (damage) {
self.health = Math.max(0, self.health - damage);
LK.effects.flashObject(self, 0xffffff, 100);
LK.getSound('enemyHit').play();
if (self.health <= 0) {
self.die();
}
};
self.die = function () {
enemies.splice(enemies.indexOf(self), 1);
self.destroy();
checkWaveComplete();
};
self.update = function () {
// Move towards player
var dx = player.x - self.x;
var dy = player.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > self.attackRange) {
var moveX = dx / distance * self.speed;
var moveY = dy / distance * self.speed;
var newX = self.x + moveX;
var newY = self.y + moveY;
// Keep enemy in arena bounds
var centerX = 2048 / 2;
var centerY = 2732 / 2;
var arenaRadius = 380;
var distFromCenter = Math.sqrt((newX - centerX) * (newX - centerX) + (newY - centerY) * (newY - centerY));
if (distFromCenter <= arenaRadius) {
self.x = newX;
self.y = newY;
}
} else {
// Attack player if in range and cooldown is over
if (LK.ticks - self.lastAttackTime >= self.attackCooldown) {
player.takeDamage(self.attackPower);
self.lastAttackTime = LK.ticks;
}
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.maxHealth = 100;
self.health = 100;
self.attackPower = 20;
self.attackBoostTime = 0;
self.lastAttackTime = 0;
self.attackCooldown = 500; // 500ms cooldown between attacks
self.takeDamage = function (damage) {
self.health = Math.max(0, self.health - damage);
LK.effects.flashObject(self, 0xff0000, 200);
LK.getSound('hit').play();
updatePlayerHealthBar();
if (self.health <= 0) {
LK.showGameOver();
}
};
self.heal = function (amount) {
self.health = Math.min(self.maxHealth, self.health + amount);
updatePlayerHealthBar();
};
self.boostAttack = function () {
self.attackBoostTime = LK.ticks + 300; // 5 second boost at 60fps
playerGraphics.tint = 0xffd700;
};
self.attack = function (enemy) {
if (LK.ticks - self.lastAttackTime < self.attackCooldown / (1000 / 60)) return false;
var damage = self.attackPower;
if (LK.ticks < self.attackBoostTime) {
damage *= 2;
}
enemy.takeDamage(damage);
self.lastAttackTime = LK.ticks;
return true;
};
self.update = function () {
if (LK.ticks >= self.attackBoostTime) {
playerGraphics.tint = 0xffffff;
}
};
return self;
});
var PowerUp = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
var assetName = type === 'health' ? 'healthPotion' : 'attackBooster';
var powerUpGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.lifeTime = 600; // 10 seconds at 60fps
self.age = 0;
self.collect = function () {
if (self.type === 'health') {
player.heal(30);
} else {
player.boostAttack();
}
LK.getSound('powerup').play();
powerUps.splice(powerUps.indexOf(self), 1);
self.destroy();
};
self.update = function () {
self.age++;
// Pulse effect
var pulse = Math.sin(self.age * 0.2) * 0.2 + 1;
powerUpGraphics.scaleX = pulse;
powerUpGraphics.scaleY = pulse;
// Remove if expired
if (self.age >= self.lifeTime) {
powerUps.splice(powerUps.indexOf(self), 1);
self.destroy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var powerUps = [];
var currentWave = 1;
var dragNode = null;
var lastPowerUpSpawn = 0;
// UI elements
var waveText;
var playerHealthBar;
var playerHealthBarBg;
// Create arena
var arena = game.addChild(LK.getAsset('arena', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
}));
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
// Create UI
waveText = new Text2('Wave 1', {
size: 60,
fill: 0xFFFFFF
});
waveText.anchor.set(0.5, 0);
LK.gui.top.addChild(waveText);
waveText.y = 100;
// Health bar background
playerHealthBarBg = LK.gui.bottomLeft.addChild(LK.getAsset('healthBarBg', {
x: 100,
y: -100
}));
// Health bar
playerHealthBar = LK.gui.bottomLeft.addChild(LK.getAsset('healthBar', {
x: 100,
y: -100
}));
function updatePlayerHealthBar() {
var healthPercent = player.health / player.maxHealth;
playerHealthBar.scaleX = healthPercent;
}
function spawnWave(waveNumber) {
var enemyCount = Math.min(2 + waveNumber, 8);
var fastEnemyCount = Math.max(0, waveNumber - 2);
for (var i = 0; i < enemyCount; i++) {
spawnEnemy();
}
for (var j = 0; j < fastEnemyCount; j++) {
spawnFastEnemy();
}
waveText.setText('Wave ' + waveNumber);
}
function spawnEnemy() {
var enemy = game.addChild(new Enemy());
// Spawn at random position on arena edge
var angle = Math.random() * Math.PI * 2;
var radius = 350;
var centerX = 2048 / 2;
var centerY = 2732 / 2;
enemy.x = centerX + Math.cos(angle) * radius;
enemy.y = centerY + Math.sin(angle) * radius;
enemies.push(enemy);
}
function spawnFastEnemy() {
var enemy = game.addChild(new FastEnemy());
// Spawn at random position on arena edge
var angle = Math.random() * Math.PI * 2;
var radius = 350;
var centerX = 2048 / 2;
var centerY = 2732 / 2;
enemy.x = centerX + Math.cos(angle) * radius;
enemy.y = centerY + Math.sin(angle) * radius;
enemies.push(enemy);
}
function spawnPowerUp() {
var type = Math.random() < 0.6 ? 'health' : 'attack';
var powerUp = game.addChild(new PowerUp(type));
// Spawn at random position in arena
var angle = Math.random() * Math.PI * 2;
var radius = Math.random() * 300;
var centerX = 2048 / 2;
var centerY = 2732 / 2;
powerUp.x = centerX + Math.cos(angle) * radius;
powerUp.y = centerY + Math.sin(angle) * radius;
powerUps.push(powerUp);
}
function checkWaveComplete() {
if (enemies.length === 0) {
currentWave++;
LK.setScore(currentWave - 1);
// Small delay before next wave
LK.setTimeout(function () {
spawnWave(currentWave);
}, 2000);
}
}
function isInArena(x, y) {
var centerX = 2048 / 2;
var centerY = 2732 / 2;
var distance = Math.sqrt((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY));
return distance <= 380;
}
// Touch controls
game.down = function (x, y, obj) {
if (isInArena(x, y)) {
dragNode = player;
player.x = x;
player.y = y;
}
};
game.move = function (x, y, obj) {
if (dragNode && isInArena(x, y)) {
dragNode.x = x;
dragNode.y = y;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game loop
game.update = function () {
// Check player attacks on enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
var distance = Math.sqrt((player.x - enemy.x) * (player.x - enemy.x) + (player.y - enemy.y) * (player.y - enemy.y));
if (distance < 70) {
player.attack(enemy);
}
}
// Check power-up collection
for (var j = powerUps.length - 1; j >= 0; j--) {
var powerUp = powerUps[j];
var distance = Math.sqrt((player.x - powerUp.x) * (player.x - powerUp.x) + (player.y - powerUp.y) * (player.y - powerUp.y));
if (distance < 50) {
powerUp.collect();
}
}
// Spawn power-ups occasionally
if (LK.ticks - lastPowerUpSpawn > 300 && Math.random() < 0.02) {
if (powerUps.length < 3) {
spawnPowerUp();
lastPowerUpSpawn = LK.ticks;
}
}
};
// Start first wave
spawnWave(currentWave); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,359 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.maxHealth = 40;
+ self.health = 40;
+ self.attackPower = 15;
+ self.speed = 1;
+ self.lastAttackTime = 0;
+ self.attackCooldown = 120; // 2 seconds at 60fps
+ self.attackRange = 80;
+ self.takeDamage = function (damage) {
+ self.health = Math.max(0, self.health - damage);
+ LK.effects.flashObject(self, 0xffffff, 100);
+ LK.getSound('enemyHit').play();
+ if (self.health <= 0) {
+ self.die();
+ }
+ };
+ self.die = function () {
+ enemies.splice(enemies.indexOf(self), 1);
+ self.destroy();
+ checkWaveComplete();
+ };
+ self.update = function () {
+ // Move towards player
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > self.attackRange) {
+ var moveX = dx / distance * self.speed;
+ var moveY = dy / distance * self.speed;
+ var newX = self.x + moveX;
+ var newY = self.y + moveY;
+ // Keep enemy in arena bounds
+ var centerX = 2048 / 2;
+ var centerY = 2732 / 2;
+ var arenaRadius = 380;
+ var distFromCenter = Math.sqrt((newX - centerX) * (newX - centerX) + (newY - centerY) * (newY - centerY));
+ if (distFromCenter <= arenaRadius) {
+ self.x = newX;
+ self.y = newY;
+ }
+ } else {
+ // Attack player if in range and cooldown is over
+ if (LK.ticks - self.lastAttackTime >= self.attackCooldown) {
+ player.takeDamage(self.attackPower);
+ self.lastAttackTime = LK.ticks;
+ }
+ }
+ };
+ return self;
+});
+var FastEnemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('fastEnemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.maxHealth = 25;
+ self.health = 25;
+ self.attackPower = 10;
+ self.speed = 2.5;
+ self.lastAttackTime = 0;
+ self.attackCooldown = 90; // 1.5 seconds at 60fps
+ self.attackRange = 60;
+ self.takeDamage = function (damage) {
+ self.health = Math.max(0, self.health - damage);
+ LK.effects.flashObject(self, 0xffffff, 100);
+ LK.getSound('enemyHit').play();
+ if (self.health <= 0) {
+ self.die();
+ }
+ };
+ self.die = function () {
+ enemies.splice(enemies.indexOf(self), 1);
+ self.destroy();
+ checkWaveComplete();
+ };
+ self.update = function () {
+ // Move towards player
+ var dx = player.x - self.x;
+ var dy = player.y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > self.attackRange) {
+ var moveX = dx / distance * self.speed;
+ var moveY = dy / distance * self.speed;
+ var newX = self.x + moveX;
+ var newY = self.y + moveY;
+ // Keep enemy in arena bounds
+ var centerX = 2048 / 2;
+ var centerY = 2732 / 2;
+ var arenaRadius = 380;
+ var distFromCenter = Math.sqrt((newX - centerX) * (newX - centerX) + (newY - centerY) * (newY - centerY));
+ if (distFromCenter <= arenaRadius) {
+ self.x = newX;
+ self.y = newY;
+ }
+ } else {
+ // Attack player if in range and cooldown is over
+ if (LK.ticks - self.lastAttackTime >= self.attackCooldown) {
+ player.takeDamage(self.attackPower);
+ self.lastAttackTime = LK.ticks;
+ }
+ }
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.maxHealth = 100;
+ self.health = 100;
+ self.attackPower = 20;
+ self.attackBoostTime = 0;
+ self.lastAttackTime = 0;
+ self.attackCooldown = 500; // 500ms cooldown between attacks
+ self.takeDamage = function (damage) {
+ self.health = Math.max(0, self.health - damage);
+ LK.effects.flashObject(self, 0xff0000, 200);
+ LK.getSound('hit').play();
+ updatePlayerHealthBar();
+ if (self.health <= 0) {
+ LK.showGameOver();
+ }
+ };
+ self.heal = function (amount) {
+ self.health = Math.min(self.maxHealth, self.health + amount);
+ updatePlayerHealthBar();
+ };
+ self.boostAttack = function () {
+ self.attackBoostTime = LK.ticks + 300; // 5 second boost at 60fps
+ playerGraphics.tint = 0xffd700;
+ };
+ self.attack = function (enemy) {
+ if (LK.ticks - self.lastAttackTime < self.attackCooldown / (1000 / 60)) return false;
+ var damage = self.attackPower;
+ if (LK.ticks < self.attackBoostTime) {
+ damage *= 2;
+ }
+ enemy.takeDamage(damage);
+ self.lastAttackTime = LK.ticks;
+ return true;
+ };
+ self.update = function () {
+ if (LK.ticks >= self.attackBoostTime) {
+ playerGraphics.tint = 0xffffff;
+ }
+ };
+ return self;
+});
+var PowerUp = Container.expand(function (type) {
+ var self = Container.call(this);
+ self.type = type;
+ var assetName = type === 'health' ? 'healthPotion' : 'attackBooster';
+ var powerUpGraphics = self.attachAsset(assetName, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.lifeTime = 600; // 10 seconds at 60fps
+ self.age = 0;
+ self.collect = function () {
+ if (self.type === 'health') {
+ player.heal(30);
+ } else {
+ player.boostAttack();
+ }
+ LK.getSound('powerup').play();
+ powerUps.splice(powerUps.indexOf(self), 1);
+ self.destroy();
+ };
+ self.update = function () {
+ self.age++;
+ // Pulse effect
+ var pulse = Math.sin(self.age * 0.2) * 0.2 + 1;
+ powerUpGraphics.scaleX = pulse;
+ powerUpGraphics.scaleY = pulse;
+ // Remove if expired
+ if (self.age >= self.lifeTime) {
+ powerUps.splice(powerUps.indexOf(self), 1);
+ self.destroy();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var enemies = [];
+var powerUps = [];
+var currentWave = 1;
+var dragNode = null;
+var lastPowerUpSpawn = 0;
+// UI elements
+var waveText;
+var playerHealthBar;
+var playerHealthBarBg;
+// Create arena
+var arena = game.addChild(LK.getAsset('arena', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 2048 / 2,
+ y: 2732 / 2
+}));
+// Create player
+player = game.addChild(new Player());
+player.x = 2048 / 2;
+player.y = 2732 / 2;
+// Create UI
+waveText = new Text2('Wave 1', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+waveText.anchor.set(0.5, 0);
+LK.gui.top.addChild(waveText);
+waveText.y = 100;
+// Health bar background
+playerHealthBarBg = LK.gui.bottomLeft.addChild(LK.getAsset('healthBarBg', {
+ x: 100,
+ y: -100
+}));
+// Health bar
+playerHealthBar = LK.gui.bottomLeft.addChild(LK.getAsset('healthBar', {
+ x: 100,
+ y: -100
+}));
+function updatePlayerHealthBar() {
+ var healthPercent = player.health / player.maxHealth;
+ playerHealthBar.scaleX = healthPercent;
+}
+function spawnWave(waveNumber) {
+ var enemyCount = Math.min(2 + waveNumber, 8);
+ var fastEnemyCount = Math.max(0, waveNumber - 2);
+ for (var i = 0; i < enemyCount; i++) {
+ spawnEnemy();
+ }
+ for (var j = 0; j < fastEnemyCount; j++) {
+ spawnFastEnemy();
+ }
+ waveText.setText('Wave ' + waveNumber);
+}
+function spawnEnemy() {
+ var enemy = game.addChild(new Enemy());
+ // Spawn at random position on arena edge
+ var angle = Math.random() * Math.PI * 2;
+ var radius = 350;
+ var centerX = 2048 / 2;
+ var centerY = 2732 / 2;
+ enemy.x = centerX + Math.cos(angle) * radius;
+ enemy.y = centerY + Math.sin(angle) * radius;
+ enemies.push(enemy);
+}
+function spawnFastEnemy() {
+ var enemy = game.addChild(new FastEnemy());
+ // Spawn at random position on arena edge
+ var angle = Math.random() * Math.PI * 2;
+ var radius = 350;
+ var centerX = 2048 / 2;
+ var centerY = 2732 / 2;
+ enemy.x = centerX + Math.cos(angle) * radius;
+ enemy.y = centerY + Math.sin(angle) * radius;
+ enemies.push(enemy);
+}
+function spawnPowerUp() {
+ var type = Math.random() < 0.6 ? 'health' : 'attack';
+ var powerUp = game.addChild(new PowerUp(type));
+ // Spawn at random position in arena
+ var angle = Math.random() * Math.PI * 2;
+ var radius = Math.random() * 300;
+ var centerX = 2048 / 2;
+ var centerY = 2732 / 2;
+ powerUp.x = centerX + Math.cos(angle) * radius;
+ powerUp.y = centerY + Math.sin(angle) * radius;
+ powerUps.push(powerUp);
+}
+function checkWaveComplete() {
+ if (enemies.length === 0) {
+ currentWave++;
+ LK.setScore(currentWave - 1);
+ // Small delay before next wave
+ LK.setTimeout(function () {
+ spawnWave(currentWave);
+ }, 2000);
+ }
+}
+function isInArena(x, y) {
+ var centerX = 2048 / 2;
+ var centerY = 2732 / 2;
+ var distance = Math.sqrt((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY));
+ return distance <= 380;
+}
+// Touch controls
+game.down = function (x, y, obj) {
+ if (isInArena(x, y)) {
+ dragNode = player;
+ player.x = x;
+ player.y = y;
+ }
+};
+game.move = function (x, y, obj) {
+ if (dragNode && isInArena(x, y)) {
+ dragNode.x = x;
+ dragNode.y = y;
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game loop
+game.update = function () {
+ // Check player attacks on enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ var distance = Math.sqrt((player.x - enemy.x) * (player.x - enemy.x) + (player.y - enemy.y) * (player.y - enemy.y));
+ if (distance < 70) {
+ player.attack(enemy);
+ }
+ }
+ // Check power-up collection
+ for (var j = powerUps.length - 1; j >= 0; j--) {
+ var powerUp = powerUps[j];
+ var distance = Math.sqrt((player.x - powerUp.x) * (player.x - powerUp.x) + (player.y - powerUp.y) * (player.y - powerUp.y));
+ if (distance < 50) {
+ powerUp.collect();
+ }
+ }
+ // Spawn power-ups occasionally
+ if (LK.ticks - lastPowerUpSpawn > 300 && Math.random() < 0.02) {
+ if (powerUps.length < 3) {
+ spawnPowerUp();
+ lastPowerUpSpawn = LK.ticks;
+ }
+ }
+};
+// Start first wave
+spawnWave(currentWave);
\ No newline at end of file
Dio. In-Game asset. 2d. High contrast. No shadows
Star platinum jojo. In-Game asset. 2d. High contrast. No shadows
Un hombre con pelo largo color rosado con manchas negras y sin camisa con pantalón morado jojo's. In-Game asset. 2d. High contrast. No shadows
Jotaro con cuerpo y que se vea su cabeza jojo's. In-Game asset. 2d. High contrast. No shadows
Egipto Scenery. In-Game asset. 2d. High contrast. No shadows
Point. In-Game asset. 2d. High contrast. No shadows
Barra de vida jojo's. In-Game asset. 2d. High contrast. No shadows
Star platinum jotaro con cuerpo completo jojo's. In-Game asset. 2d. High contrast. No shadows
Bala. In-Game asset. 2d. High contrast. No shadows
Kars cuerpo completo jojo's. In-Game asset. 2d. High contrast. No shadows
Jolyne cuerpo completo jojo's. In-Game asset. 2d. High contrast. No shadows
Kakyoin cuerpo completo jojo's. In-Game asset. 2d. High contrast. No shadows
Un pueblo con casa y un piso café jojo's. In-Game asset. 2d. High contrast. No shadows
Hazlo grande