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(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,346 @@
-/****
+/****
+* 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: 0x000000
-});
\ No newline at end of file
+ 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();
\ No newline at end of file