User prompt
quiero que agregues algo parecido como los botiquines pero que sea una armadura y que al usuario le agregues una armadura de 50 al iniciar el juego el maximo es de 100
User prompt
quiero que hagregues una habilidad de meteorito que cada 3 segundos caiga un meteorito a un enemigo a lazar en cualquier parte del mapa, y ese meteorito deje un radio de quemadura ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
quiero que el radio de recogida de la exp sea chica
User prompt
quiero que hagas que la exp sea visible y tenga textura si se mata un enemigo lejos o cerca del jugador que se vea tirado hasta que pase el jugador ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
quiero que creeas los enemigos cuando mueran dejen exp. una posibilidad baja de que aparezcan botellas de vida y que el jugador tenga que pasar cerca para obtener ese exp y botellas ERROR: Falló la integración; no se encontró la fuente de destino. Inténtelo de nuevo. crealo o arreglalo ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
agrégale una textura nueva a los ataques de los enemigos a la armadura con pinches a los ataque de hielo y al ola básicamente a toda habilidad o ataque
User prompt
quiero que mejores a ola haciendo que esta ataviese el mapa y empuje a los enemigos ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
I want the wave to also go where the largest number of enemies are so that they are pushed by the wave
User prompt
Please fix the bug: 'ReferenceError: WaveAbility is not defined' in or related to this line: 'var wave = new WaveAbility();' Line Number: 1068
User prompt
quiero que agregues un poder que sea una ola que atraviese el mapa cada 4 segundos y haga daño a los enemigos que se lleve puesto ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'var distance = calculateDistance(player.x, player.y, enemy.x, enemy.y);' Line Number: 42
User prompt
quiero que separes los proyectiles de los esqueletos con el jugador y el jugador de los proyectiles que tiene como determinado con el ataque de hielo
User prompt
quiero que agregues los cofres en el mapa
User prompt
hace un sistema de puntuacion y que tengas que superar tu top de puntos ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
hace que funcione ahora quiero que el personaje pueda aprender una habilidad de ataque que sea de hielo y conguele al enemigo que impacta ↪💡 Consider importing and using the following plugins: @upit/tween.v1 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
quiero que reconstruyas el panel de mejora de estadisticas y lo mejores por uno mas rpg
User prompt
quiero que optimices el codigo del juego
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'push')' in or related to this line: 'chests.push(chest);' Line Number: 300
User prompt
quiero que le hagas un inventario de 10 casilas y pongas cofres de dorma aleatoria y en ese momento cuando toques el cofre que se abra y te de una habilidad de las que dijimos antes, armadura de espinas, y quiero que hagas una mano blanca el cual sea una habilidad que sea empujar que empuje enemigos o ataques de enemigos
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
topScore: 0
});
/****
* Classes
****/
var AuraAbility = Container.expand(function () {
var self = Container.call(this);
self.radius = 300;
self.damage = 15;
self.tickCounter = 0;
self.ticksPerDamage = 60;
self.damageThisFrame = {};
self.update = function () {
self.tickCounter++;
if (self.tickCounter >= self.ticksPerDamage) {
self.tickCounter = 0;
var enemyCount = enemies.length;
if (enemyCount === 0) return;
for (var i = 0; i < enemyCount; i++) {
var enemy = enemies[i];
if (!enemy) continue;
var distance = calculateDistance(player.x, player.y, enemy.x, enemy.y);
if (distance < self.radius) {
if (!self.damageThisFrame[i]) {
enemy.health -= self.damage;
enemy.healthBar.updateHealth(enemy.health);
self.damageThisFrame[i] = true;
if (enemy.health <= 0) {
playerExp += 25;
if (playerExp >= expToNextLevel) {
playerExp -= expToNextLevel;
playerLevel += 1;
expToNextLevel = Math.floor(expToNextLevel * 1.2);
playerHealth += 20;
showLevelUpPanel();
}
enemy.destroy();
enemies.splice(enemies.indexOf(enemy), 1);
}
}
} else {
self.damageThisFrame[i] = false;
}
}
}
};
return self;
});
var Chest = Container.expand(function () {
var self = Container.call(this);
var chestGraphics = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
chestGraphics.tint = 0xFFD700;
self.opened = false;
self.lastWasIntersecting = false;
self.update = function () {
var currentIntersecting = self.intersects(player);
if (!self.lastWasIntersecting && currentIntersecting && !self.opened) {
self.opened = true;
var abilityUpgrades = [{
label: 'Aura Ability',
key: 'auraAbility'
}, {
label: 'Spikes Armor',
key: 'spikesArmor'
}, {
label: 'Dual Shot',
key: 'dualShot'
}, {
label: 'Push Hand',
key: 'pushHand'
}];
var randomAbility = abilityUpgrades[Math.floor(Math.random() * abilityUpgrades.length)];
var key = randomAbility.key;
if (key === 'auraAbility') {
if (!playerAuraAbility) {
playerAuraAbility = new AuraAbility();
game.addChild(playerAuraAbility);
playerAuraAbility.x = player.x;
playerAuraAbility.y = player.y;
}
} else if (key === 'spikesArmor') {
if (!playerSpikesArmor) {
playerSpikesArmor = new SpikesArmor();
playerSpikesArmor.active = true;
}
} else if (key === 'dualShot') {
if (!playerDualShot) {
playerDualShot = new DualShot();
}
} else if (key === 'pushHand') {
if (!playerPushHand) {
playerPushHand = new PushHand();
game.addChild(playerPushHand);
playerPushHand.x = player.x;
playerPushHand.y = player.y;
}
}
LK.effects.flashObject(self, 0xFFFF00, 500);
}
self.lastWasIntersecting = currentIntersecting;
};
return self;
});
var DualShot = Container.expand(function () {
var self = Container.call(this);
self.fireProjectiles = function (fromX, fromY, targetEnemies) {
var closestZombie = null;
var closestZombieDistance = Infinity;
var closestSkeleton = null;
var closestSkeletonDistance = Infinity;
for (var i = 0; i < targetEnemies.length; i++) {
var enemy = targetEnemies[i];
var dx = enemy.x - fromX;
var dy = enemy.y - fromY;
var distance = Math.sqrt(dx * dx + dy * dy);
if (enemy.constructor.name === 'Skeleton') {
if (distance < closestSkeletonDistance) {
closestSkeletonDistance = distance;
closestSkeleton = enemy;
}
} else {
if (distance < closestZombieDistance) {
closestZombieDistance = distance;
closestZombie = enemy;
}
}
}
var firstTarget = closestZombie;
var secondTarget = closestSkeleton;
if (!firstTarget && !secondTarget) return;
if (!firstTarget && secondTarget) firstTarget = secondTarget;
if (!secondTarget && firstTarget) secondTarget = firstTarget;
if (firstTarget) {
var projectile1 = new Projectile();
projectile1.x = fromX;
projectile1.y = fromY;
projectile1.damage = playerStats.damage;
projectile1.targetEnemy = firstTarget;
projectiles.push(projectile1);
game.addChild(projectile1);
}
if (secondTarget && secondTarget !== firstTarget) {
var projectile2 = new Projectile();
projectile2.x = fromX;
projectile2.y = fromY;
projectile2.damage = playerStats.damage;
projectile2.targetEnemy = secondTarget;
projectiles.push(projectile2);
game.addChild(projectile2);
}
};
return self;
});
var EnemyHealthBar = Container.expand(function () {
var self = Container.call(this);
self.maxHealth = 50;
self.currentHealth = 50;
var barBackground = LK.getAsset('healthBarBg', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(barBackground);
var barFill = LK.getAsset('healthBarFill', {
anchorX: 0.0,
anchorY: 0.5
});
self.addChild(barFill);
self.barFill = barFill;
self.updateHealth = function (currentHealth) {
self.currentHealth = currentHealth;
var healthPercent = Math.max(0, currentHealth / self.maxHealth);
self.barFill.scaleX = healthPercent;
};
return self;
});
var EnemyProjectile = Container.expand(function () {
var self = Container.call(this);
var projectileGraphics = self.attachAsset('projectile', {
anchorX: 0.5,
anchorY: 0.5
});
projectileGraphics.tint = 0xff0000;
self.speed = 8;
self.damage = 15;
self.health = 20;
self.maxHealth = 20;
self.lastWasIntersecting = false;
self.directionX = 0;
self.directionY = 0;
self.isFixedTrajectory = false;
self.fromSkeleton = false;
self.update = function () {
if (self.isFixedTrajectory) {
self.x += self.directionX * self.speed;
self.y += self.directionY * self.speed;
} else if (player) {
var distance = calculateDistance(self.x, self.y, player.x, player.y);
if (distance > 0) {
var dx = player.x - self.x;
var dy = player.y - self.y;
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
}
var currentIntersecting = self.intersects(player);
if (!self.lastWasIntersecting && currentIntersecting) {
playerHealth -= self.damage;
self.destroy();
enemyProjectiles.splice(enemyProjectiles.indexOf(self), 1);
}
self.lastWasIntersecting = currentIntersecting;
if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
self.destroy();
enemyProjectiles.splice(enemyProjectiles.indexOf(self), 1);
}
};
return self;
});
var HealthPickup = Container.expand(function () {
var self = Container.call(this);
//{4M_health}
var pickupGraphics = self.attachAsset('healthPickup', {
anchorX: 0.5,
anchorY: 0.5
}); //{4M_health2}
self.healAmount = 30;
self.lastWasIntersecting = false;
self.update = function () {
var currentIntersecting = self.intersects(player);
if (!self.lastWasIntersecting && currentIntersecting) {
playerHealth = Math.min(playerHealth + self.healAmount, playerStats.maxHealth);
healthText.setText('Health: ' + playerHealth);
self.destroy();
healthPickups.splice(healthPickups.indexOf(self), 1);
}
self.lastWasIntersecting = currentIntersecting;
};
return self;
});
var IceProjectile = Container.expand(function () {
var self = Container.call(this);
var projectileGraphics = self.attachAsset('projectile', {
anchorX: 0.5,
anchorY: 0.5
});
projectileGraphics.tint = 0x00FFFF;
self.speed = 12;
self.damage = playerStats.damage;
self.freezeDuration = 300;
self.health = 50;
self.maxHealth = 50;
self.lastWasIntersecting = {};
self.update = function () {
if (self.targetEnemy && !self.targetEnemy.destroyed) {
var dx = self.targetEnemy.x - self.x;
var dy = self.targetEnemy.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
var currentIntersecting = self.intersects(self.targetEnemy);
if (!self.lastWasIntersecting[self.targetEnemy] && currentIntersecting) {
self.targetEnemy.health -= self.damage;
self.targetEnemy.healthBar.updateHealth(self.targetEnemy.health);
if (!self.targetEnemy.frozen) {
self.targetEnemy.frozen = true;
self.targetEnemy.freezeEndTime = LK.ticks + self.freezeDuration;
tween(self.targetEnemy.scale, {
x: 1,
y: 1
}, {
duration: 100
});
self.targetEnemy.tint = 0x0099FF;
}
if (self.targetEnemy.health <= 0) {
playerScore += 100;
scoreText.setText('Score: ' + playerScore);
playerExp += 25;
if (playerExp >= expToNextLevel) {
playerExp -= expToNextLevel;
playerLevel += 1;
expToNextLevel = Math.floor(expToNextLevel * 1.2);
playerHealth += 20;
showLevelUpPanel();
}
self.targetEnemy.destroy();
enemies.splice(enemies.indexOf(self.targetEnemy), 1);
}
self.destroy();
projectiles.splice(projectiles.indexOf(self), 1);
}
self.lastWasIntersecting[self.targetEnemy] = currentIntersecting;
for (var i = enemyProjectiles.length - 1; i >= 0; i--) {
if (!enemyProjectiles[i].fromSkeleton && self.intersects(enemyProjectiles[i])) {
self.health -= 25;
enemyProjectiles[i].destroy();
enemyProjectiles.splice(i, 1);
if (self.health <= 0) {
self.destroy();
projectiles.splice(projectiles.indexOf(self), 1);
return;
}
}
}
} else if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
self.destroy();
projectiles.splice(projectiles.indexOf(self), 1);
}
};
return self;
});
var IceShot = Container.expand(function () {
var self = Container.call(this);
self.fireProjectiles = function (fromX, fromY, targetEnemies) {
if (targetEnemies.length === 0) return;
var closestEnemy = null;
var closestDistance = Infinity;
for (var i = 0; i < targetEnemies.length; i++) {
var enemy = targetEnemies[i];
var dx = enemy.x - fromX;
var dy = enemy.y - fromY;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < closestDistance) {
closestDistance = distance;
closestEnemy = enemy;
}
}
if (closestEnemy) {
var projectile = new IceProjectile();
projectile.x = fromX;
projectile.y = fromY;
projectile.damage = playerStats.damage;
projectile.targetEnemy = closestEnemy;
projectiles.push(projectile);
game.addChild(projectile);
}
};
return self;
});
var InventoryPanel = Container.expand(function () {
var self = Container.call(this);
self.slots = [];
var slotWidth = 150;
var slotHeight = 150;
var slotSpacing = 170;
var panelStartX = 100;
var panelStartY = 100;
for (var i = 0; i < 10; i++) {
var slot = self.attachAsset('upgradeButton', {
anchorX: 0,
anchorY: 0
});
slot.scaleX = 0.5;
slot.scaleY = 0.5;
slot.x = panelStartX + i % 5 * slotSpacing;
slot.y = panelStartY + Math.floor(i / 5) * slotSpacing;
slot.hasChest = false;
var slotText = new Text2('Empty', {
size: 20,
fill: 0xFFFFFF
});
slotText.anchor.set(0.5, 0.5);
slotText.x = slot.width / 4;
slotText.y = slot.height / 4;
slot.addChild(slotText);
self.slots.push(slot);
self.addChild(slot);
}
self.spawnChests = function () {
for (var i = 0; i < self.slots.length; i++) {
if (Math.random() < 0.3 && !self.slots[i].hasChest) {
self.slots[i].hasChest = true;
var chest = new Chest();
chest.x = self.slots[i].x + self.slots[i].width / 4;
chest.y = self.slots[i].y + self.slots[i].height / 4;
chests.push(chest);
game.addChild(chest);
}
}
};
return self;
});
var LevelUpPanel = Container.expand(function () {
var self = Container.call(this);
self.panelBg = self.attachAsset('levelUpBg', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 1024;
self.y = 1366;
var titleText = new Text2('LEVEL UP!', {
size: 100,
fill: 0xFFD700
});
titleText.anchor.set(0.5, 0);
titleText.y = -220;
self.addChild(titleText);
var levelText = new Text2('Level ' + playerLevel, {
size: 60,
fill: 0x00FF00
});
levelText.anchor.set(0.5, 0);
levelText.y = -120;
self.addChild(levelText);
var statDisplayContainer = new Container();
statDisplayContainer.y = -40;
var statsDisplay = new Text2('HP: ' + playerStats.maxHealth + ' | ATK: ' + playerStats.damage + ' | SPD: ' + playerStats.attackSpeed.toFixed(1), {
size: 45,
fill: 0xFFFFFF
});
statsDisplay.anchor.set(0.5, 0);
statDisplayContainer.addChild(statsDisplay);
self.addChild(statDisplayContainer);
var statUpgrades = [{
label: 'Health +20',
key: 'maxHealth',
value: 20,
stat: 'playerStats.maxHealth',
description: 'Increase maximum health'
}, {
label: 'Attack +10',
key: 'damage',
value: 10,
stat: 'playerStats.damage',
description: 'Boost damage output'
}, {
label: 'Speed +2',
key: 'speed',
value: 2,
stat: 'playerStats.speed',
description: 'Move faster'
}, {
label: 'Fire Rate +0.2',
key: 'attackSpeed',
value: 0.2,
stat: 'playerStats.attackSpeed',
description: 'Shoot more often'
}];
var abilityUpgrades = [{
label: 'Aura Ability',
key: 'auraAbility',
value: 1,
stat: 'auraAbility',
description: 'Damage nearby enemies'
}, {
label: 'Spikes Armor',
key: 'spikesArmor',
value: 1,
stat: 'spikesArmor',
description: 'Reflect damage'
}, {
label: 'Dual Shot',
key: 'dualShot',
value: 1,
stat: 'dualShot',
description: 'Fire 2 projectiles'
}, {
label: 'Push Hand',
key: 'pushHand',
value: 1,
stat: 'pushHand',
description: 'Push enemies away'
}, {
//{ice_ability1}
label: 'Ice Shot',
//{ice_ability2}
key: 'iceShot',
//{ice_ability3}
value: 1,
//{ice_ability4}
stat: 'iceShot',
//{ice_ability5}
description: 'Freeze enemies on impact' //{ice_ability6}
}, {
label: 'Wave Ability',
key: 'waveAbility',
value: 1,
stat: 'waveAbility',
description: 'Send a wave across the map'
}];
var upgrades = [];
for (var i = 0; i < 3; i++) {
upgrades.push(statUpgrades[i]);
}
var randomAbilityIndex = Math.floor(Math.random() * abilityUpgrades.length);
upgrades.push(abilityUpgrades[randomAbilityIndex]);
var buttons = [];
var buttonWidth = 280;
var buttonHeight = 100;
var buttonSpacingX = 320;
var buttonSpacingY = 150;
var startX = -160;
var startY = 40;
for (var i = 0; i < upgrades.length; i++) {
var btn = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
btn.x = startX + i % 2 * buttonSpacingX;
btn.y = startY + Math.floor(i / 2) * buttonSpacingY;
btn.upgradeKey = upgrades[i].key;
btn.upgradeValue = upgrades[i].value;
btn.tint = 0x6495ED;
var labelText = new Text2(upgrades[i].label, {
size: 38,
fill: 0xFFFFFF
});
labelText.anchor.set(0.5, 0.3);
btn.addChild(labelText);
var descText = new Text2(upgrades[i].description, {
size: 20,
fill: 0xDDDDDD
});
descText.anchor.set(0.5, 0.7);
btn.addChild(descText);
buttons.push(btn);
self.addChild(btn);
}
self.buttons = buttons;
self.autoSelectTimer = null;
self.startAutoSelect = function () {
self.autoSelectTimer = LK.setTimeout(function () {
var randomIndex = Math.floor(Math.random() * self.buttons.length);
self.applyUpgrade(self.buttons[randomIndex].upgradeKey, self.buttons[randomIndex].upgradeValue);
closeLevelUpPanel();
}, 5000);
};
self.cancelAutoSelect = function () {
if (self.autoSelectTimer !== null) {
LK.clearTimeout(self.autoSelectTimer);
self.autoSelectTimer = null;
}
};
self.applyUpgrade = function (key, value) {
//{apply_upgrade_new}
if (key === 'maxHealth') {
playerStats.maxHealth += value;
playerHealth = playerStats.maxHealth;
} else if (key === 'attackSpeed') {
playerStats.attackSpeed += value;
} else if (key === 'damage') {
playerStats.damage += value;
} else if (key === 'speed') {
playerStats.speed += value;
playerSpeed = playerStats.speed;
} else if (key === 'auraAbility') {
if (!playerAuraAbility) {
playerAuraAbility = new AuraAbility();
game.addChild(playerAuraAbility);
playerAuraAbility.x = player.x;
playerAuraAbility.y = player.y;
}
} else if (key === 'spikesArmor') {
if (!playerSpikesArmor) {
playerSpikesArmor = new SpikesArmor();
playerSpikesArmor.active = true;
}
} else if (key === 'dualShot') {
if (!playerDualShot) {
playerDualShot = new DualShot();
}
} else if (key === 'pushHand') {
if (!playerPushHand) {
playerPushHand = new PushHand();
game.addChild(playerPushHand);
playerPushHand.x = player.x;
playerPushHand.y = player.y;
}
} else if (key === 'iceShot') {
//{ice_apply1}
if (!playerIceShot) {
//{ice_apply2}
playerIceShot = new IceShot(); //{ice_apply3}
} //{ice_apply4}
} else if (key === 'waveAbility') {
if (!playerWaveAbility) {
playerWaveAbility = true;
playerWaveAbilityCounter = 0;
}
}
}; //{apply_upgrade_end}
self.down = function (x, y, obj) {
for (var i = 0; i < self.buttons.length; i++) {
var btn = self.buttons[i];
var btnGlobalPos = btn.parent.toGlobal(btn.position);
var localPos = {
x: x - btnGlobalPos.x,
y: y - btnGlobalPos.y
};
if (localPos.x >= -btn.width / 2 && localPos.x <= btn.width / 2 && localPos.y >= -btn.height / 2 && localPos.y <= btn.height / 2) {
self.cancelAutoSelect();
self.applyUpgrade(btn.upgradeKey, btn.upgradeValue);
closeLevelUpPanel();
break;
}
}
};
return self;
});
var Projectile = Container.expand(function () {
var self = Container.call(this);
var projectileGraphics = self.attachAsset('projectile', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 12;
self.damage = playerStats.damage;
self.health = 50;
self.maxHealth = 50;
self.lastWasIntersecting = {};
self.update = function () {
if (self.targetEnemy && !self.targetEnemy.destroyed) {
var dx = self.targetEnemy.x - self.x;
var dy = self.targetEnemy.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
var currentIntersecting = self.intersects(self.targetEnemy);
if (!self.lastWasIntersecting[self.targetEnemy] && currentIntersecting) {
self.targetEnemy.health -= self.damage;
self.targetEnemy.healthBar.updateHealth(self.targetEnemy.health);
if (self.targetEnemy.health <= 0) {
playerScore += 100;
scoreText.setText('Score: ' + playerScore);
playerExp += 25;
if (playerExp >= expToNextLevel) {
playerExp -= expToNextLevel;
playerLevel += 1;
expToNextLevel = Math.floor(expToNextLevel * 1.2);
playerHealth += 20;
showLevelUpPanel();
}
self.targetEnemy.destroy();
enemies.splice(enemies.indexOf(self.targetEnemy), 1);
}
self.destroy();
projectiles.splice(projectiles.indexOf(self), 1);
}
self.lastWasIntersecting[self.targetEnemy] = currentIntersecting;
for (var i = enemyProjectiles.length - 1; i >= 0; i--) {
if (!enemyProjectiles[i].fromSkeleton && self.intersects(enemyProjectiles[i])) {
self.health -= 25;
enemyProjectiles[i].destroy();
enemyProjectiles.splice(i, 1);
if (self.health <= 0) {
self.destroy();
projectiles.splice(projectiles.indexOf(self), 1);
return;
}
}
}
} else if (self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
self.destroy();
projectiles.splice(projectiles.indexOf(self), 1);
}
};
return self;
});
var PushHand = Container.expand(function () {
var self = Container.call(this);
self.radius = 400;
self.pushForce = 15;
self.tickCounter = 0;
self.ticksPerPush = 30;
self.lastPushFrame = {};
var handGraphics = self.attachAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5
});
handGraphics.scaleX = 0.5;
handGraphics.scaleY = 0.5;
handGraphics.tint = 0xFFFFFF;
self.update = function () {
self.tickCounter++;
if (self.tickCounter >= self.ticksPerPush) {
self.tickCounter = 0;
var enemyCount = enemies.length;
for (var i = 0; i < enemyCount; i++) {
var enemy = enemies[i];
var distance = calculateDistance(player.x, player.y, enemy.x, enemy.y);
if (distance < self.radius && distance > 0) {
var dx = enemy.x - player.x;
var dy = enemy.y - player.y;
var pushX = dx / distance * self.pushForce;
var pushY = dy / distance * self.pushForce;
enemy.x += pushX;
enemy.y += pushY;
}
}
var projectileCount = enemyProjectiles.length;
for (var i = 0; i < projectileCount; i++) {
var projectile = enemyProjectiles[i];
var distance = calculateDistance(player.x, player.y, projectile.x, projectile.y);
if (distance < self.radius && distance > 0) {
var dx = projectile.x - player.x;
var dy = projectile.y - player.y;
var pushX = dx / distance * self.pushForce;
var pushY = dy / distance * self.pushForce;
projectile.x += pushX;
projectile.y += pushY;
}
}
}
};
return self;
});
var Skeleton = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('skeletonSquare', {
anchorX: 0.5,
anchorY: 0.5
});
var healthBar = new EnemyHealthBar();
healthBar.y = -60;
self.addChild(healthBar);
self.healthBar = healthBar;
self.speed = 1.5;
self.health = 70;
self.maxHealth = 70;
self.attackRange = 800;
self.attackCooldown = 0;
self.attackCooldownMax = 120;
self.lastWasIntersecting = false;
self.frozen = false; //{ice_skel1}
self.freezeEndTime = 0; //{ice_skel2}
self.update = function () {
if (player) {
var distance = calculateDistance(self.x, self.y, player.x, player.y);
if (distance > self.attackRange + 100) {
if (distance > 0) {
var dx = player.x - self.x;
var dy = player.y - self.y;
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
} else {
self.attackCooldown++;
if (self.attackCooldown >= self.attackCooldownMax) {
self.attackCooldown = 0;
var projectile = new EnemyProjectile();
projectile.x = self.x;
projectile.y = self.y;
projectile.isFixedTrajectory = true;
projectile.fromSkeleton = true;
var dx = player.x - self.x;
var dy = player.y - self.y;
var distToPlayer = distance;
if (distToPlayer > 0) {
projectile.directionX = dx / distToPlayer;
projectile.directionY = dy / distToPlayer;
} else {
projectile.directionX = 0;
projectile.directionY = 0;
}
enemyProjectiles.push(projectile);
game.addChild(projectile);
}
}
}
var currentIntersecting = self.intersects(player);
if (!self.lastWasIntersecting && currentIntersecting) {
var damageDealt = 10;
playerHealth -= damageDealt;
if (playerSpikesArmor && playerSpikesArmor.active) {
var reflectedDamage = Math.ceil(damageDealt * playerSpikesArmor.reflectPercentage);
self.health -= reflectedDamage;
self.healthBar.updateHealth(self.health);
if (self.health <= 0) {
playerScore += 100;
scoreText.setText('Score: ' + playerScore);
playerExp += 50;
if (playerExp >= expToNextLevel) {
playerExp -= expToNextLevel;
playerLevel += 1;
expToNextLevel = Math.floor(expToNextLevel * 1.2);
playerHealth += 20;
showLevelUpPanel();
}
self.destroy();
enemies.splice(enemies.indexOf(self), 1);
}
}
if (playerHealth <= 0) {
endGameAndSaveScore();
}
}
self.lastWasIntersecting = currentIntersecting;
};
return self;
});
//{4M_health3}
var SpikesArmor = Container.expand(function () {
var self = Container.call(this);
self.reflectPercentage = 0.3;
self.active = true;
return self;
});
var WaveAbility = Container.expand(function () {
var self = Container.call(this);
//{wave_1}
self.radius = 50; //{wave_2}
self.maxRadius = 800; //{wave_3}
self.speed = 15; //{wave_4}
self.damage = 30; //{wave_5}
self.directionX = 1; //{wave_6}
self.directionY = 0; //{wave_7}
self.damageDealt = {}; //{wave_8}
var waveGraphics = self.attachAsset('projectile', {
//{wave_9}
anchorX: 0.5,
//{wave_10}
anchorY: 0.5 //{wave_11}
}); //{wave_12}
waveGraphics.tint = 0x00FF00; //{wave_13}
self.update = function () {
//{wave_14}
self.radius += self.speed; //{wave_15}
self.scaleX = self.radius / 50; //{wave_16}
self.scaleY = self.radius / 50; //{wave_17}
self.x += self.directionX * self.speed; //{wave_18}
self.y += self.directionY * self.speed; //{wave_19}
for (var i = 0; i < enemies.length; i++) {
//{wave_20}
var enemy = enemies[i]; //{wave_21}
if (!enemy) continue; //{wave_22}
var distance = calculateDistance(self.x, self.y, enemy.x, enemy.y); //{wave_23}
if (distance < self.radius && !self.damageDealt[i]) {
//{wave_24}
enemy.health -= self.damage; //{wave_25}
enemy.healthBar.updateHealth(enemy.health); //{wave_26}
self.damageDealt[i] = true; //{wave_27}
if (enemy.health <= 0) {
//{wave_28}
playerScore += 100; //{wave_29}
scoreText.setText('Score: ' + playerScore); //{wave_30}
playerExp += 25; //{wave_31}
if (playerExp >= expToNextLevel) {
//{wave_32}
playerExp -= expToNextLevel; //{wave_33}
playerLevel += 1; //{wave_34}
expToNextLevel = Math.floor(expToNextLevel * 1.2); //{wave_35}
playerHealth += 20; //{wave_36}
showLevelUpPanel(); //{wave_37}
} //{wave_38}
enemy.destroy(); //{wave_39}
enemies.splice(i, 1); //{wave_40}
} //{wave_41}
} //{wave_42}
} //{wave_43}
if (self.radius > self.maxRadius || self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
//{wave_44}
self.destroy(); //{wave_45}
} //{wave_46}
}; //{wave_47}
return self; //{wave_48}
});
//{wave_49}
var Zombie = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemySquare', {
anchorX: 0.5,
anchorY: 0.5
});
var healthBar = new EnemyHealthBar();
healthBar.y = -60;
self.addChild(healthBar);
self.healthBar = healthBar;
self.speed = 2;
self.health = 50;
self.lastWasIntersecting = false;
self.frozen = false; //{ice_zomb1}
self.freezeEndTime = 0; //{ice_zomb2}
self.update = function () {
if (player) {
var distance = calculateDistance(self.x, self.y, player.x, player.y);
if (distance > 0) {
var dx = player.x - self.x;
var dy = player.y - self.y;
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
}
var currentIntersecting = self.intersects(player);
if (!self.lastWasIntersecting && currentIntersecting) {
var damageDealt = 10;
playerHealth -= damageDealt;
if (playerSpikesArmor && playerSpikesArmor.active) {
var reflectedDamage = Math.ceil(damageDealt * playerSpikesArmor.reflectPercentage);
self.health -= reflectedDamage;
self.healthBar.updateHealth(self.health);
if (self.health <= 0) {
playerScore += 100;
scoreText.setText('Score: ' + playerScore);
playerExp += 25;
if (playerExp >= expToNextLevel) {
playerExp -= expToNextLevel;
playerLevel += 1;
expToNextLevel = Math.floor(expToNextLevel * 1.2);
playerHealth += 20;
showLevelUpPanel();
}
self.destroy();
enemies.splice(enemies.indexOf(self), 1);
}
}
if (playerHealth <= 0) {
endGameAndSaveScore();
}
}
self.lastWasIntersecting = currentIntersecting;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
/****
* Helper Functions
****/
function calculateDistance(x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt(dx * dx + dy * dy);
}
var player = game.addChild(new Container());
var playerGraphics = player.attachAsset('personaje', {
anchorX: 0.5,
anchorY: 0.5
});
player.x = 1024;
player.y = 1366;
var playerHealth = 100;
var playerExp = 0;
var playerLevel = 1;
var expToNextLevel = 100;
var enemies = [];
var projectiles = [];
var enemyProjectiles = [];
var healthPickups = [];
var keysPressed = {};
var playerSpeed = 8;
var healthText = new Text2('Health: ' + playerHealth, {
size: 60,
fill: 0xFFFFFF
});
healthText.anchor.set(0.5, 0);
LK.gui.top.addChild(healthText);
var expText = new Text2('Level: ' + playerLevel + ' | EXP: ' + playerExp + '/' + expToNextLevel, {
size: 50,
fill: 0x00FF00
});
expText.anchor.set(0.5, 0);
expText.y = 70;
LK.gui.top.addChild(expText);
var playerScore = 0;
var scoreText = new Text2('Score: ' + playerScore, {
size: 60,
fill: 0xFFFF00
});
scoreText.anchor.set(0.5, 0);
scoreText.y = 140;
LK.gui.top.addChild(scoreText);
var topScoreText = new Text2('Top Score: ' + storage.topScore, {
size: 50,
fill: 0xFFA500
});
topScoreText.anchor.set(0.5, 0);
topScoreText.y = 210;
LK.gui.top.addChild(topScoreText);
var levelUpPanel = null;
var playerStats = {
maxHealth: 100,
attackSpeed: 1.0,
damage: 25,
speed: 8
};
var playerAuraAbility = null;
var playerSpikesArmor = null;
var playerDualShot = null;
var playerPushHand = null;
var playerIceShot = null; //{ice_global1}
var playerWaveAbility = false;
var playerWaveAbilityCounter = 0;
var chests = [];
var inventoryPanel = null;
inventoryPanel = new InventoryPanel(); //{inv_init1}
game.addChild(inventoryPanel); //{inv_init2}
inventoryPanel.spawnChests(); //{inv_init3}
function showLevelUpPanel() {
if (!levelUpPanel) {
levelUpPanel = new LevelUpPanel();
game.addChild(levelUpPanel);
game.paused = true;
levelUpPanel.startAutoSelect();
}
}
function closeLevelUpPanel() {
if (levelUpPanel) {
levelUpPanel.cancelAutoSelect();
levelUpPanel.destroy();
levelUpPanel = null;
game.paused = false;
}
}
function endGameAndSaveScore() {
if (playerScore > storage.topScore) {
storage.topScore = playerScore;
topScoreText.setText('Top Score: ' + storage.topScore);
}
LK.showGameOver();
}
game.move = function (x, y, obj) {
var touchX = x;
var touchY = y;
var dx = touchX - player.x;
var dy = touchY - player.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 50) {
player.x += dx / distance * playerSpeed;
player.y += dy / distance * playerSpeed;
if (player.x < 0) player.x = 0;
if (player.x > 2048) player.x = 2048;
if (player.y < 0) player.y = 0;
if (player.y > 2732) player.y = 2732;
}
};
game.down = function (x, y, obj) {
if (levelUpPanel) {
levelUpPanel.down(x, y, obj);
}
};
game.update = function () {
if (LK.ticks % 60 === 0) {
var angle = Math.random() * Math.PI * 2;
var distance = 600;
var spawnX = player.x + Math.cos(angle) * distance;
var spawnY = player.y + Math.sin(angle) * distance;
var spawnType = Math.random() < 0.7 ? 'zombie' : 'skeleton';
var newEnemy = spawnType === 'skeleton' ? new Skeleton() : new Zombie();
newEnemy.x = spawnX;
newEnemy.y = spawnY;
enemies.push(newEnemy);
game.addChild(newEnemy);
}
if (LK.ticks % 1500 === 0) {
var angle = Math.random() * Math.PI * 2;
var distance = 400;
var pickupX = player.x + Math.cos(angle) * distance;
var pickupY = player.y + Math.sin(angle) * distance;
var healthPickup = new HealthPickup();
healthPickup.x = pickupX;
healthPickup.y = pickupY;
healthPickups.push(healthPickup);
game.addChild(healthPickup);
}
if (LK.ticks % 3000 === 0) {
var angle = Math.random() * Math.PI * 2; //{chest_spawn1}
var distance = 800;
var chestX = player.x + Math.cos(angle) * distance; //{chest_spawn2}
var chestY = player.y + Math.sin(angle) * distance; //{chest_spawn3}
chestX = Math.max(100, Math.min(chestX, 1948));
chestY = Math.max(100, Math.min(chestY, 2632)); //{chest_spawn4}
var newChest = new Chest(); //{chest_spawn5}
newChest.x = chestX;
newChest.y = chestY; //{chest_spawn6}
chests.push(newChest); //{chest_spawn7}
game.addChild(newChest); //{chest_spawn8}
} //{chest_spawn9}
if (playerWaveAbility) {
playerWaveAbilityCounter++;
if (playerWaveAbilityCounter >= 240) {
playerWaveAbilityCounter = 0;
var angle = Math.random() * Math.PI * 2;
var wave = new WaveAbility();
wave.x = player.x;
wave.y = player.y;
wave.directionX = Math.cos(angle);
wave.directionY = Math.sin(angle);
game.addChild(wave);
}
}
if (LK.ticks % 30 === 0 && enemies.length > 0) {
if (playerIceShot) {
//{ice_fire1}
playerIceShot.fireProjectiles(player.x, player.y, enemies);
} else if (playerDualShot) {
playerDualShot.fireProjectiles(player.x, player.y, enemies);
} else {
var closestEnemy = null;
var closestDistance = Infinity;
var enemyCount = enemies.length;
for (var i = 0; i < enemyCount; i++) {
var distance = calculateDistance(player.x, player.y, enemies[i].x, enemies[i].y);
if (distance < closestDistance && enemies[i].constructor.name !== 'Skeleton') {
closestDistance = distance;
closestEnemy = enemies[i];
}
}
if (closestEnemy) {
var projectile = new Projectile();
projectile.x = player.x;
projectile.y = player.y;
projectile.damage = playerStats.damage;
projectile.targetEnemy = closestEnemy;
projectiles.push(projectile);
game.addChild(projectile);
}
}
}
for (var i = 0; i < enemies.length; i++) {
//{ice_freeze1}
var enemy = enemies[i]; //{ice_freeze2}
if (enemy.frozen && enemy.freezeEndTime <= LK.ticks) {
//{ice_freeze3}
enemy.frozen = false; //{ice_freeze4}
enemy.tint = 0xFFFFFF; //{ice_freeze5}
} //{ice_freeze6}
if (enemy.frozen) {
//{ice_freeze7}
enemy.speed = 0; //{ice_freeze8}
} else if (enemy.constructor.name === 'Skeleton') {
//{ice_freeze9}
enemy.speed = 1.5; //{ice_freeze10}
} else {
//{ice_freeze11}
enemy.speed = 2; //{ice_freeze12}
} //{ice_freeze13}
} //{ice_freeze14}
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
var distance = calculateDistance(player.x, player.y, enemy.x, enemy.y);
if (distance > 2000) {
enemy.destroy();
enemies.splice(i, 1);
}
}
for (var i = enemyProjectiles.length - 1; i >= 0; i--) {
enemyProjectiles[i].update();
}
if (playerAuraAbility) {
playerAuraAbility.x = player.x;
playerAuraAbility.y = player.y;
playerAuraAbility.update();
}
for (var i = healthPickups.length - 1; i >= 0; i--) {
healthPickups[i].update();
}
for (var i = chests.length - 1; i >= 0; i--) {
//{chest_update1}
if (chests[i].opened) {
//{chest_update2}
chests[i].destroy();
chests.splice(i, 1);
} else {
chests[i].update();
} //{chest_update3}
} //{chest_update4}
if (playerPushHand) {
//{push_update1}
playerPushHand.x = player.x;
playerPushHand.y = player.y;
playerPushHand.update();
} //{push_update2}
healthText.setText('Health: ' + playerHealth);
expText.setText('Level: ' + playerLevel + ' | EXP: ' + playerExp + '/' + expToNextLevel);
};
//{wave_49} ===================================================================
--- original.js
+++ change.js
@@ -807,8 +807,68 @@
self.reflectPercentage = 0.3;
self.active = true;
return self;
});
+var WaveAbility = Container.expand(function () {
+ var self = Container.call(this);
+ //{wave_1}
+ self.radius = 50; //{wave_2}
+ self.maxRadius = 800; //{wave_3}
+ self.speed = 15; //{wave_4}
+ self.damage = 30; //{wave_5}
+ self.directionX = 1; //{wave_6}
+ self.directionY = 0; //{wave_7}
+ self.damageDealt = {}; //{wave_8}
+ var waveGraphics = self.attachAsset('projectile', {
+ //{wave_9}
+ anchorX: 0.5,
+ //{wave_10}
+ anchorY: 0.5 //{wave_11}
+ }); //{wave_12}
+ waveGraphics.tint = 0x00FF00; //{wave_13}
+ self.update = function () {
+ //{wave_14}
+ self.radius += self.speed; //{wave_15}
+ self.scaleX = self.radius / 50; //{wave_16}
+ self.scaleY = self.radius / 50; //{wave_17}
+ self.x += self.directionX * self.speed; //{wave_18}
+ self.y += self.directionY * self.speed; //{wave_19}
+ for (var i = 0; i < enemies.length; i++) {
+ //{wave_20}
+ var enemy = enemies[i]; //{wave_21}
+ if (!enemy) continue; //{wave_22}
+ var distance = calculateDistance(self.x, self.y, enemy.x, enemy.y); //{wave_23}
+ if (distance < self.radius && !self.damageDealt[i]) {
+ //{wave_24}
+ enemy.health -= self.damage; //{wave_25}
+ enemy.healthBar.updateHealth(enemy.health); //{wave_26}
+ self.damageDealt[i] = true; //{wave_27}
+ if (enemy.health <= 0) {
+ //{wave_28}
+ playerScore += 100; //{wave_29}
+ scoreText.setText('Score: ' + playerScore); //{wave_30}
+ playerExp += 25; //{wave_31}
+ if (playerExp >= expToNextLevel) {
+ //{wave_32}
+ playerExp -= expToNextLevel; //{wave_33}
+ playerLevel += 1; //{wave_34}
+ expToNextLevel = Math.floor(expToNextLevel * 1.2); //{wave_35}
+ playerHealth += 20; //{wave_36}
+ showLevelUpPanel(); //{wave_37}
+ } //{wave_38}
+ enemy.destroy(); //{wave_39}
+ enemies.splice(i, 1); //{wave_40}
+ } //{wave_41}
+ } //{wave_42}
+ } //{wave_43}
+ if (self.radius > self.maxRadius || self.x < -100 || self.x > 2148 || self.y < -100 || self.y > 2832) {
+ //{wave_44}
+ self.destroy(); //{wave_45}
+ } //{wave_46}
+ }; //{wave_47}
+ return self; //{wave_48}
+});
+//{wave_49}
var Zombie = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemySquare', {
anchorX: 0.5,
@@ -1123,5 +1183,6 @@
playerPushHand.update();
} //{push_update2}
healthText.setText('Health: ' + playerHealth);
expText.setText('Level: ' + playerLevel + ' | EXP: ' + playerExp + '/' + expToNextLevel);
-};
\ No newline at end of file
+};
+//{wave_49}
\ No newline at end of file
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Orko's Ascension: RPG of Magic and Mastery" and with the description "An immersive fantasy RPG where players develop an Orko-inspired wizard through stat progression, skill trees, item collection, and achievement tracking. Features a robust main menu with save management, equipment customization, ability trees, and extensive audio-visual settings.". No text on banner!