Code edit (1 edits merged)
Please save this source code
User prompt
Divine Warriors: Mythical Conquest
Initial prompt
I want a game. You are some warrior if you choose female you are Artemida . If you choose male, you are God of war. If you choose nothing you are Rebus. If you choose both you are Savo and Shiro. The game have got 6 worlds in every world you have got 120 levels. The bosses are in the levels 10,20,30,40,50,60,70,80,90,110 and 120. In level 100 is the ultimate boss. If you complete the normal levels you get 25$, but if you complete the bosses level you get 50$.Except in the ultimate boss level. In that level you won 65$.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { currentLevel: 1, currentWorld: 1, currency: 0, selectedCharacter: "artemida", playerHealth: 100, playerAttack: 10, playerDefense: 5 }); /**** * Classes ****/ var Enemy = Container.expand(function (type) { var self = Container.call(this); self.type = type || 'normal'; // normal, boss, ultimateBoss self.projectiles = []; self.attackTimer = 0; // Set properties based on enemy type if (self.type === 'normal') { self.health = 30 + (currentWorld - 1) * 10 + (currentLevel - 1); self.maxHealth = self.health; self.attack = 5 + (currentWorld - 1) * 2 + Math.floor((currentLevel - 1) / 10); self.attackInterval = 120; // 2 seconds self.reward = 25; var assetId = 'enemyShape'; } else if (self.type === 'boss') { self.health = 100 + (currentWorld - 1) * 30 + (currentLevel - 1) * 2; self.maxHealth = self.health; self.attack = 8 + (currentWorld - 1) * 3 + Math.floor((currentLevel - 1) / 10) * 2; self.attackInterval = 90; // 1.5 seconds self.reward = 50; var assetId = 'bossShape'; } else { // ultimateBoss self.health = 200 + (currentWorld - 1) * 50 + (currentLevel - 1) * 3; self.maxHealth = self.health; self.attack = 12 + (currentWorld - 1) * 4 + Math.floor((currentLevel - 1) / 10) * 3; self.attackInterval = 60; // 1 second self.reward = 65; var assetId = 'ultimateBossShape'; } var enemyGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); // Create health bar self.healthBarBg = self.addChild(LK.getAsset('healthBarBg', { anchorX: 0.5, anchorY: 0.5, y: -80 })); self.healthBarFg = self.addChild(LK.getAsset('healthBarFg', { anchorX: 0, anchorY: 0.5, y: -80, x: -150 })); self.updateHealthBar = function () { var healthPercent = self.health / self.maxHealth; self.healthBarFg.width = 300 * healthPercent; }; self.takeDamage = function (amount) { self.health -= amount; // Flash red when taking damage LK.effects.flashObject(enemyGraphics, 0xff0000, 300); LK.getSound('enemyHit').play(); self.updateHealthBar(); if (self.health <= 0) { self.health = 0; self.updateHealthBar(); // Add currency reward storage.currency = (storage.currency || 0) + self.reward; // Update HUD updateCurrencyDisplay(); // Complete level completeLevel(); // Play appropriate sound if (self.type === 'normal') { LK.getSound('levelComplete').play(); } else { LK.getSound('bossDefeat').play(); } } }; self.attackPlayer = function () { var projectile = new Projectile(false); projectile.x = self.x; projectile.y = self.y + 50; self.projectiles.push(projectile); game.addChild(projectile); }; self.update = function () { self.attackTimer++; if (self.attackTimer >= self.attackInterval) { self.attackTimer = 0; self.attackPlayer(); } // Add some movement for enemies if (self.type === 'normal') { self.x += Math.sin(LK.ticks / 30) * 2; } else if (self.type === 'boss') { self.x += Math.sin(LK.ticks / 40) * 3; } else { // ultimateBoss self.x += Math.sin(LK.ticks / 50) * 4; self.y += Math.sin(LK.ticks / 70) * 2; } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); self.health = storage.playerHealth || 100; self.maxHealth = 100; self.attack = storage.playerAttack || 10; self.defense = storage.playerDefense || 5; self.characterType = storage.selectedCharacter || 'artemida'; self.projectiles = []; self.attackCooldown = 0; self.maxAttackCooldown = 30; // half a second at 60fps var playerGraphics = self.attachAsset('playerShape', { anchorX: 0.5, anchorY: 0.5 }); // Create health bar self.healthBarBg = self.addChild(LK.getAsset('healthBarBg', { anchorX: 0.5, anchorY: 0.5, y: -80 })); self.healthBarFg = self.addChild(LK.getAsset('healthBarFg', { anchorX: 0, anchorY: 0.5, y: -80, x: -150 })); self.updateHealthBar = function () { var healthPercent = self.health / self.maxHealth; self.healthBarFg.width = 300 * healthPercent; }; self.takeDamage = function (amount) { var actualDamage = Math.max(1, amount - self.defense); self.health -= actualDamage; // Flash red when taking damage LK.effects.flashObject(playerGraphics, 0xff0000, 500); LK.getSound('playerHit').play(); self.updateHealthBar(); if (self.health <= 0) { self.health = 0; self.updateHealthBar(); LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } }; self.attack = function () { if (self.attackCooldown <= 0) { var projectile = new Projectile(true); projectile.x = self.x; projectile.y = self.y - 50; self.projectiles.push(projectile); game.addChild(projectile); LK.getSound('attack').play(); self.attackCooldown = self.maxAttackCooldown; } }; self.update = function () { if (self.attackCooldown > 0) { self.attackCooldown--; } }; self.down = function (x, y, obj) { self.attack(); }; return self; }); var Projectile = Container.expand(function (isPlayerProjectile) { var self = Container.call(this); self.isPlayerProjectile = isPlayerProjectile || false; self.speed = self.isPlayerProjectile ? -10 : 7; // Negative for upward movement self.damage = self.isPlayerProjectile ? player.attack : currentEnemy.attack / 2; var assetId = self.isPlayerProjectile ? 'projectileShape' : 'enemyProjectileShape'; var projectileGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { self.y += self.speed; // Check if projectile is off screen if (self.y < -50 || self.y > 2732 + 50) { self.shouldRemove = true; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222244 }); /**** * Game Code ****/ // Game variables var currentWorld = storage.currentWorld || 1; var currentLevel = storage.currentLevel || 1; var player; var currentEnemy; var isLevelActive = false; var levelText; var currencyText; // Initialize game function initGame() { player = new Player(); player.x = 2048 / 2; player.y = 2732 - 300; game.addChild(player); createHUD(); startLevel(); LK.playMusic('bgMusic'); } function createHUD() { // Level indicator var levelIndicatorBg = LK.getAsset('levelIndicator', { anchorX: 0.5, anchorY: 0.5 }); levelText = new Text2('World ' + currentWorld + ' - Level ' + currentLevel, { size: 40, fill: 0xFFFFFF }); levelText.anchor.set(0.5, 0.5); levelIndicatorBg.addChild(levelText); LK.gui.top.addChild(levelIndicatorBg); // Currency indicator var currencyIndicatorBg = LK.getAsset('currencyIndicator', { anchorX: 0.5, anchorY: 0.5, x: 400 }); currencyText = new Text2('$' + (storage.currency || 0), { size: 40, fill: 0xFFFFFF }); currencyText.anchor.set(0.5, 0.5); currencyIndicatorBg.addChild(currencyText); LK.gui.top.addChild(currencyIndicatorBg); } function updateCurrencyDisplay() { currencyText.setText('$' + (storage.currency || 0)); } function startLevel() { isLevelActive = true; // Determine enemy type based on level var enemyType = 'normal'; if (currentLevel === 100) { enemyType = 'ultimateBoss'; } else if ([10, 20, 30, 40, 50, 60, 70, 80, 90, 110, 120].indexOf(currentLevel) !== -1) { enemyType = 'boss'; } // Create enemy currentEnemy = new Enemy(enemyType); currentEnemy.x = 2048 / 2; currentEnemy.y = 300; game.addChild(currentEnemy); // Update level display levelText.setText('World ' + currentWorld + ' - Level ' + currentLevel); } function completeLevel() { isLevelActive = false; // Save progress currentLevel++; if (currentLevel > 120) { currentLevel = 1; currentWorld++; if (currentWorld > 6) { currentWorld = 6; // Cap at 6 worlds LK.showYouWin(); return; } } storage.currentLevel = currentLevel; storage.currentWorld = currentWorld; // Start next level after a delay LK.setTimeout(function () { startLevel(); }, 2000); } function checkCollisions() { // Check player projectiles against enemy for (var i = player.projectiles.length - 1; i >= 0; i--) { var projectile = player.projectiles[i]; if (projectile.shouldRemove) { projectile.destroy(); player.projectiles.splice(i, 1); continue; } if (projectile.intersects(currentEnemy)) { currentEnemy.takeDamage(projectile.damage); projectile.destroy(); player.projectiles.splice(i, 1); } } // Check enemy projectiles against player for (var j = currentEnemy.projectiles.length - 1; j >= 0; j--) { var enemyProjectile = currentEnemy.projectiles[j]; if (enemyProjectile.shouldRemove) { enemyProjectile.destroy(); currentEnemy.projectiles.splice(j, 1); continue; } if (enemyProjectile.intersects(player)) { player.takeDamage(enemyProjectile.damage); enemyProjectile.destroy(); currentEnemy.projectiles.splice(j, 1); } } } // Touch/mouse events game.down = function (x, y, obj) { if (isLevelActive) { player.x = x; } }; game.move = function (x, y, obj) { if (isLevelActive) { player.x = x; } }; // Game update loop game.update = function () { if (!isLevelActive) { return; } // Check collisions checkCollisions(); }; // Initialize the game initGame();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
currentLevel: 1,
currentWorld: 1,
currency: 0,
selectedCharacter: "artemida",
playerHealth: 100,
playerAttack: 10,
playerDefense: 5
});
/****
* Classes
****/
var Enemy = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'normal'; // normal, boss, ultimateBoss
self.projectiles = [];
self.attackTimer = 0;
// Set properties based on enemy type
if (self.type === 'normal') {
self.health = 30 + (currentWorld - 1) * 10 + (currentLevel - 1);
self.maxHealth = self.health;
self.attack = 5 + (currentWorld - 1) * 2 + Math.floor((currentLevel - 1) / 10);
self.attackInterval = 120; // 2 seconds
self.reward = 25;
var assetId = 'enemyShape';
} else if (self.type === 'boss') {
self.health = 100 + (currentWorld - 1) * 30 + (currentLevel - 1) * 2;
self.maxHealth = self.health;
self.attack = 8 + (currentWorld - 1) * 3 + Math.floor((currentLevel - 1) / 10) * 2;
self.attackInterval = 90; // 1.5 seconds
self.reward = 50;
var assetId = 'bossShape';
} else {
// ultimateBoss
self.health = 200 + (currentWorld - 1) * 50 + (currentLevel - 1) * 3;
self.maxHealth = self.health;
self.attack = 12 + (currentWorld - 1) * 4 + Math.floor((currentLevel - 1) / 10) * 3;
self.attackInterval = 60; // 1 second
self.reward = 65;
var assetId = 'ultimateBossShape';
}
var enemyGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// Create health bar
self.healthBarBg = self.addChild(LK.getAsset('healthBarBg', {
anchorX: 0.5,
anchorY: 0.5,
y: -80
}));
self.healthBarFg = self.addChild(LK.getAsset('healthBarFg', {
anchorX: 0,
anchorY: 0.5,
y: -80,
x: -150
}));
self.updateHealthBar = function () {
var healthPercent = self.health / self.maxHealth;
self.healthBarFg.width = 300 * healthPercent;
};
self.takeDamage = function (amount) {
self.health -= amount;
// Flash red when taking damage
LK.effects.flashObject(enemyGraphics, 0xff0000, 300);
LK.getSound('enemyHit').play();
self.updateHealthBar();
if (self.health <= 0) {
self.health = 0;
self.updateHealthBar();
// Add currency reward
storage.currency = (storage.currency || 0) + self.reward;
// Update HUD
updateCurrencyDisplay();
// Complete level
completeLevel();
// Play appropriate sound
if (self.type === 'normal') {
LK.getSound('levelComplete').play();
} else {
LK.getSound('bossDefeat').play();
}
}
};
self.attackPlayer = function () {
var projectile = new Projectile(false);
projectile.x = self.x;
projectile.y = self.y + 50;
self.projectiles.push(projectile);
game.addChild(projectile);
};
self.update = function () {
self.attackTimer++;
if (self.attackTimer >= self.attackInterval) {
self.attackTimer = 0;
self.attackPlayer();
}
// Add some movement for enemies
if (self.type === 'normal') {
self.x += Math.sin(LK.ticks / 30) * 2;
} else if (self.type === 'boss') {
self.x += Math.sin(LK.ticks / 40) * 3;
} else {
// ultimateBoss
self.x += Math.sin(LK.ticks / 50) * 4;
self.y += Math.sin(LK.ticks / 70) * 2;
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
self.health = storage.playerHealth || 100;
self.maxHealth = 100;
self.attack = storage.playerAttack || 10;
self.defense = storage.playerDefense || 5;
self.characterType = storage.selectedCharacter || 'artemida';
self.projectiles = [];
self.attackCooldown = 0;
self.maxAttackCooldown = 30; // half a second at 60fps
var playerGraphics = self.attachAsset('playerShape', {
anchorX: 0.5,
anchorY: 0.5
});
// Create health bar
self.healthBarBg = self.addChild(LK.getAsset('healthBarBg', {
anchorX: 0.5,
anchorY: 0.5,
y: -80
}));
self.healthBarFg = self.addChild(LK.getAsset('healthBarFg', {
anchorX: 0,
anchorY: 0.5,
y: -80,
x: -150
}));
self.updateHealthBar = function () {
var healthPercent = self.health / self.maxHealth;
self.healthBarFg.width = 300 * healthPercent;
};
self.takeDamage = function (amount) {
var actualDamage = Math.max(1, amount - self.defense);
self.health -= actualDamage;
// Flash red when taking damage
LK.effects.flashObject(playerGraphics, 0xff0000, 500);
LK.getSound('playerHit').play();
self.updateHealthBar();
if (self.health <= 0) {
self.health = 0;
self.updateHealthBar();
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
};
self.attack = function () {
if (self.attackCooldown <= 0) {
var projectile = new Projectile(true);
projectile.x = self.x;
projectile.y = self.y - 50;
self.projectiles.push(projectile);
game.addChild(projectile);
LK.getSound('attack').play();
self.attackCooldown = self.maxAttackCooldown;
}
};
self.update = function () {
if (self.attackCooldown > 0) {
self.attackCooldown--;
}
};
self.down = function (x, y, obj) {
self.attack();
};
return self;
});
var Projectile = Container.expand(function (isPlayerProjectile) {
var self = Container.call(this);
self.isPlayerProjectile = isPlayerProjectile || false;
self.speed = self.isPlayerProjectile ? -10 : 7; // Negative for upward movement
self.damage = self.isPlayerProjectile ? player.attack : currentEnemy.attack / 2;
var assetId = self.isPlayerProjectile ? 'projectileShape' : 'enemyProjectileShape';
var projectileGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.y += self.speed;
// Check if projectile is off screen
if (self.y < -50 || self.y > 2732 + 50) {
self.shouldRemove = true;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222244
});
/****
* Game Code
****/
// Game variables
var currentWorld = storage.currentWorld || 1;
var currentLevel = storage.currentLevel || 1;
var player;
var currentEnemy;
var isLevelActive = false;
var levelText;
var currencyText;
// Initialize game
function initGame() {
player = new Player();
player.x = 2048 / 2;
player.y = 2732 - 300;
game.addChild(player);
createHUD();
startLevel();
LK.playMusic('bgMusic');
}
function createHUD() {
// Level indicator
var levelIndicatorBg = LK.getAsset('levelIndicator', {
anchorX: 0.5,
anchorY: 0.5
});
levelText = new Text2('World ' + currentWorld + ' - Level ' + currentLevel, {
size: 40,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
levelIndicatorBg.addChild(levelText);
LK.gui.top.addChild(levelIndicatorBg);
// Currency indicator
var currencyIndicatorBg = LK.getAsset('currencyIndicator', {
anchorX: 0.5,
anchorY: 0.5,
x: 400
});
currencyText = new Text2('$' + (storage.currency || 0), {
size: 40,
fill: 0xFFFFFF
});
currencyText.anchor.set(0.5, 0.5);
currencyIndicatorBg.addChild(currencyText);
LK.gui.top.addChild(currencyIndicatorBg);
}
function updateCurrencyDisplay() {
currencyText.setText('$' + (storage.currency || 0));
}
function startLevel() {
isLevelActive = true;
// Determine enemy type based on level
var enemyType = 'normal';
if (currentLevel === 100) {
enemyType = 'ultimateBoss';
} else if ([10, 20, 30, 40, 50, 60, 70, 80, 90, 110, 120].indexOf(currentLevel) !== -1) {
enemyType = 'boss';
}
// Create enemy
currentEnemy = new Enemy(enemyType);
currentEnemy.x = 2048 / 2;
currentEnemy.y = 300;
game.addChild(currentEnemy);
// Update level display
levelText.setText('World ' + currentWorld + ' - Level ' + currentLevel);
}
function completeLevel() {
isLevelActive = false;
// Save progress
currentLevel++;
if (currentLevel > 120) {
currentLevel = 1;
currentWorld++;
if (currentWorld > 6) {
currentWorld = 6; // Cap at 6 worlds
LK.showYouWin();
return;
}
}
storage.currentLevel = currentLevel;
storage.currentWorld = currentWorld;
// Start next level after a delay
LK.setTimeout(function () {
startLevel();
}, 2000);
}
function checkCollisions() {
// Check player projectiles against enemy
for (var i = player.projectiles.length - 1; i >= 0; i--) {
var projectile = player.projectiles[i];
if (projectile.shouldRemove) {
projectile.destroy();
player.projectiles.splice(i, 1);
continue;
}
if (projectile.intersects(currentEnemy)) {
currentEnemy.takeDamage(projectile.damage);
projectile.destroy();
player.projectiles.splice(i, 1);
}
}
// Check enemy projectiles against player
for (var j = currentEnemy.projectiles.length - 1; j >= 0; j--) {
var enemyProjectile = currentEnemy.projectiles[j];
if (enemyProjectile.shouldRemove) {
enemyProjectile.destroy();
currentEnemy.projectiles.splice(j, 1);
continue;
}
if (enemyProjectile.intersects(player)) {
player.takeDamage(enemyProjectile.damage);
enemyProjectile.destroy();
currentEnemy.projectiles.splice(j, 1);
}
}
}
// Touch/mouse events
game.down = function (x, y, obj) {
if (isLevelActive) {
player.x = x;
}
};
game.move = function (x, y, obj) {
if (isLevelActive) {
player.x = x;
}
};
// Game update loop
game.update = function () {
if (!isLevelActive) {
return;
}
// Check collisions
checkCollisions();
};
// Initialize the game
initGame();