User prompt
ai replaces laws that are active
User prompt
when a law is active new law takes spot ai law generation and effects
User prompt
add new things like you can make laws that ai generated there are revolutions economy....
Code edit (1 edits merged)
Please save this source code
User prompt
War Economy Tycoon
Initial prompt
war+ money+ guns+ buying soldiers+ army's+opposing armies+government+laws+plagues+revolutions
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Unit = Container.expand(function () { var self = Container.call(this); self.type = 'infantry'; self.health = 100; self.maxHealth = 100; self.damage = 10; self.cost = 50; self.isEnemy = false; self.targetX = 0; self.targetY = 0; self.speed = 1; self.takeDamage = function (amount) { self.health -= amount; if (self.health <= 0) { self.health = 0; return true; // Unit died } return false; }; self.moveToward = function (x, y) { var dx = x - self.x; var dy = y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } }; return self; }); var Infantry = Unit.expand(function () { var self = Unit.call(this); var graphics = self.attachAsset('soldier', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'infantry'; self.health = 100; self.maxHealth = 100; self.damage = 15; self.cost = 50; self.speed = 1.5; return self; }); var EnemyUnit = Unit.expand(function () { var self = Unit.call(this); self.isEnemy = true; return self; }); var EnemyInfantry = EnemyUnit.expand(function () { var self = EnemyUnit.call(this); var graphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'infantry'; self.health = 100; self.maxHealth = 100; self.damage = 12; self.speed = 1.3; return self; }); var EnemyCavalry = EnemyUnit.expand(function () { var self = EnemyUnit.call(this); var graphics = self.attachAsset('enemyCavalry', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'cavalry'; self.health = 140; self.maxHealth = 140; self.damage = 22; self.speed = 2.8; return self; }); var EnemyArtillery = EnemyUnit.expand(function () { var self = EnemyUnit.call(this); var graphics = self.attachAsset('enemyArtillery', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'artillery'; self.health = 75; self.maxHealth = 75; self.damage = 35; self.speed = 0.7; return self; }); var Cavalry = Unit.expand(function () { var self = Unit.call(this); var graphics = self.attachAsset('cavalry', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'cavalry'; self.health = 150; self.maxHealth = 150; self.damage = 25; self.cost = 100; self.speed = 3; return self; }); var Artillery = Unit.expand(function () { var self = Unit.call(this); var graphics = self.attachAsset('artillery', { anchorX: 0.5, anchorY: 0.5 }); self.type = 'artillery'; self.health = 80; self.maxHealth = 80; self.damage = 40; self.cost = 200; self.speed = 0.8; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2c3e50 }); /**** * Game Code ****/ // Game state variables var money = storage.money || 1000; var playerUnits = []; var enemyUnits = []; var gameState = 'menu'; // menu, battle, event var battleTimer = 0; var eventTimer = 0; var waveNumber = 1; var lastEventTime = 0; // Unit costs (affected by events) var unitCosts = { infantry: 50, cavalry: 100, artillery: 200 }; // Event system var activeEvents = []; var eventTypes = [{ name: 'Plague', description: 'A plague reduces all unit health by 20%', effect: function effect() { for (var i = 0; i < playerUnits.length; i++) { playerUnits[i].health = Math.max(1, Math.floor(playerUnits[i].health * 0.8)); } } }, { name: 'Revolution', description: 'Economic upheaval reduces income by 30%', effect: function effect() { money = Math.floor(money * 0.7); } }, { name: 'Military Reform', description: 'Government increases unit costs by 50%', effect: function effect() { unitCosts.infantry = Math.floor(unitCosts.infantry * 1.5); unitCosts.cavalry = Math.floor(unitCosts.cavalry * 1.5); unitCosts.artillery = Math.floor(unitCosts.artillery * 1.5); } }]; // UI Elements var moneyText = new Text2(money.toString(), { size: 60, fill: 0xFFFFFF }); moneyText.anchor.set(0, 0); LK.gui.top.addChild(moneyText); moneyText.x = 200; moneyText.y = 20; var waveText = new Text2('Wave: ' + waveNumber, { size: 50, fill: 0xFFFFFF }); waveText.anchor.set(0.5, 0); LK.gui.top.addChild(waveText); var eventText = new Text2('', { size: 40, fill: 0xFF6B6B }); eventText.anchor.set(0.5, 0.5); LK.gui.center.addChild(eventText); // Buy buttons var infantryButton = new Text2('Infantry ($' + unitCosts.infantry + ')', { size: 45, fill: 0x4A90E2 }); infantryButton.anchor.set(0, 1); LK.gui.bottomLeft.addChild(infantryButton); infantryButton.x = 50; infantryButton.y = -200; var cavalryButton = new Text2('Cavalry ($' + unitCosts.cavalry + ')', { size: 45, fill: 0x7ED321 }); cavalryButton.anchor.set(0, 1); LK.gui.bottomLeft.addChild(cavalryButton); cavalryButton.x = 50; cavalryButton.y = -150; var artilleryButton = new Text2('Artillery ($' + unitCosts.artillery + ')', { size: 45, fill: 0xD0021B }); artilleryButton.anchor.set(0, 1); LK.gui.bottomLeft.addChild(artilleryButton); artilleryButton.x = 50; artilleryButton.y = -100; var startBattleButton = new Text2('Start Battle', { size: 50, fill: 0xF39C12 }); startBattleButton.anchor.set(0.5, 1); LK.gui.bottom.addChild(startBattleButton); startBattleButton.y = -50; // Functions function updateMoney() { moneyText.setText('$' + money); storage.money = money; } function updateButtonTexts() { infantryButton.setText('Infantry ($' + unitCosts.infantry + ')'); cavalryButton.setText('Cavalry ($' + unitCosts.cavalry + ')'); artilleryButton.setText('Artillery ($' + unitCosts.artillery + ')'); } function buyUnit(type) { var cost = unitCosts[type]; if (money >= cost) { money -= cost; updateMoney(); var unit; if (type === 'infantry') { unit = new Infantry(); } else if (type === 'cavalry') { unit = new Cavalry(); } else if (type === 'artillery') { unit = new Artillery(); } unit.x = 200 + Math.random() * 400; unit.y = 2000 + Math.random() * 200; playerUnits.push(unit); game.addChild(unit); LK.getSound('purchase').play(); } } function spawnEnemyWave() { var enemyCount = waveNumber + 2; for (var i = 0; i < enemyCount; i++) { var enemy; var rand = Math.random(); if (rand < 0.6) { enemy = new EnemyInfantry(); } else if (rand < 0.8) { enemy = new EnemyCavalry(); } else { enemy = new EnemyArtillery(); } enemy.x = 800 + Math.random() * 800; enemy.y = 500 + Math.random() * 200; enemyUnits.push(enemy); game.addChild(enemy); } } function startBattle() { if (playerUnits.length === 0) return; gameState = 'battle'; battleTimer = 0; spawnEnemyWave(); LK.getSound('battle').play(); } function triggerRandomEvent() { if (Math.random() < 0.3 && LK.ticks - lastEventTime > 1800) { // 30 seconds var eventIndex = Math.floor(Math.random() * eventTypes.length); var event = eventTypes[eventIndex]; eventText.setText(event.name + ': ' + event.description); event.effect(); updateButtonTexts(); LK.getSound('event').play(); lastEventTime = LK.ticks; // Clear event text after 3 seconds LK.setTimeout(function () { eventText.setText(''); }, 3000); } } function findNearestEnemy(unit) { var nearest = null; var nearestDistance = Infinity; var targets = unit.isEnemy ? playerUnits : enemyUnits; for (var i = 0; i < targets.length; i++) { var target = targets[i]; var dx = target.x - unit.x; var dy = target.y - unit.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < nearestDistance) { nearestDistance = distance; nearest = target; } } return nearest; } function updateBattle() { // Move and attack player units for (var i = playerUnits.length - 1; i >= 0; i--) { var unit = playerUnits[i]; var target = findNearestEnemy(unit); if (target) { var dx = target.x - unit.x; var dy = target.y - unit.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 100) { unit.moveToward(target.x, target.y); } else if (battleTimer % 60 === 0) { // Attack once per second var killed = target.takeDamage(unit.damage); if (killed) { var targetIndex = enemyUnits.indexOf(target); if (targetIndex !== -1) { enemyUnits[targetIndex].destroy(); enemyUnits.splice(targetIndex, 1); money += 25; // Reward for killing enemy updateMoney(); } } } } } // Move and attack enemy units for (var i = enemyUnits.length - 1; i >= 0; i--) { var unit = enemyUnits[i]; var target = findNearestEnemy(unit); if (target) { var dx = target.x - unit.x; var dy = target.y - unit.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 100) { unit.moveToward(target.x, target.y); } else if (battleTimer % 60 === 0) { // Attack once per second var killed = target.takeDamage(unit.damage); if (killed) { var targetIndex = playerUnits.indexOf(target); if (targetIndex !== -1) { playerUnits[targetIndex].destroy(); playerUnits.splice(targetIndex, 1); } } } } } // Check battle end conditions if (enemyUnits.length === 0) { // Player won gameState = 'menu'; waveNumber++; waveText.setText('Wave: ' + waveNumber); money += 100 * waveNumber; // Wave completion bonus updateMoney(); } else if (playerUnits.length === 0) { // Player lost LK.showGameOver(); } } // Event handlers infantryButton.down = function () { buyUnit('infantry'); }; cavalryButton.down = function () { buyUnit('cavalry'); }; artilleryButton.down = function () { buyUnit('artillery'); }; startBattleButton.down = function () { if (gameState === 'menu') { startBattle(); } }; // Main game update loop game.update = function () { if (gameState === 'battle') { battleTimer++; updateBattle(); } // Passive income every 3 seconds if (LK.ticks % 180 === 0) { money += 50; updateMoney(); } // Trigger random events triggerRandomEvent(); // Check for bankruptcy if (money < 0) { LK.showGameOver(); } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,411 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Unit = Container.expand(function () {
+ var self = Container.call(this);
+ self.type = 'infantry';
+ self.health = 100;
+ self.maxHealth = 100;
+ self.damage = 10;
+ self.cost = 50;
+ self.isEnemy = false;
+ self.targetX = 0;
+ self.targetY = 0;
+ self.speed = 1;
+ self.takeDamage = function (amount) {
+ self.health -= amount;
+ if (self.health <= 0) {
+ self.health = 0;
+ return true; // Unit died
+ }
+ return false;
+ };
+ self.moveToward = function (x, y) {
+ var dx = x - self.x;
+ var dy = y - self.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 5) {
+ self.x += dx / distance * self.speed;
+ self.y += dy / distance * self.speed;
+ }
+ };
+ return self;
+});
+var Infantry = Unit.expand(function () {
+ var self = Unit.call(this);
+ var graphics = self.attachAsset('soldier', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'infantry';
+ self.health = 100;
+ self.maxHealth = 100;
+ self.damage = 15;
+ self.cost = 50;
+ self.speed = 1.5;
+ return self;
+});
+var EnemyUnit = Unit.expand(function () {
+ var self = Unit.call(this);
+ self.isEnemy = true;
+ return self;
+});
+var EnemyInfantry = EnemyUnit.expand(function () {
+ var self = EnemyUnit.call(this);
+ var graphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'infantry';
+ self.health = 100;
+ self.maxHealth = 100;
+ self.damage = 12;
+ self.speed = 1.3;
+ return self;
+});
+var EnemyCavalry = EnemyUnit.expand(function () {
+ var self = EnemyUnit.call(this);
+ var graphics = self.attachAsset('enemyCavalry', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'cavalry';
+ self.health = 140;
+ self.maxHealth = 140;
+ self.damage = 22;
+ self.speed = 2.8;
+ return self;
+});
+var EnemyArtillery = EnemyUnit.expand(function () {
+ var self = EnemyUnit.call(this);
+ var graphics = self.attachAsset('enemyArtillery', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'artillery';
+ self.health = 75;
+ self.maxHealth = 75;
+ self.damage = 35;
+ self.speed = 0.7;
+ return self;
+});
+var Cavalry = Unit.expand(function () {
+ var self = Unit.call(this);
+ var graphics = self.attachAsset('cavalry', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'cavalry';
+ self.health = 150;
+ self.maxHealth = 150;
+ self.damage = 25;
+ self.cost = 100;
+ self.speed = 3;
+ return self;
+});
+var Artillery = Unit.expand(function () {
+ var self = Unit.call(this);
+ var graphics = self.attachAsset('artillery', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.type = 'artillery';
+ self.health = 80;
+ self.maxHealth = 80;
+ self.damage = 40;
+ self.cost = 200;
+ self.speed = 0.8;
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x2c3e50
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var money = storage.money || 1000;
+var playerUnits = [];
+var enemyUnits = [];
+var gameState = 'menu'; // menu, battle, event
+var battleTimer = 0;
+var eventTimer = 0;
+var waveNumber = 1;
+var lastEventTime = 0;
+// Unit costs (affected by events)
+var unitCosts = {
+ infantry: 50,
+ cavalry: 100,
+ artillery: 200
+};
+// Event system
+var activeEvents = [];
+var eventTypes = [{
+ name: 'Plague',
+ description: 'A plague reduces all unit health by 20%',
+ effect: function effect() {
+ for (var i = 0; i < playerUnits.length; i++) {
+ playerUnits[i].health = Math.max(1, Math.floor(playerUnits[i].health * 0.8));
+ }
+ }
+}, {
+ name: 'Revolution',
+ description: 'Economic upheaval reduces income by 30%',
+ effect: function effect() {
+ money = Math.floor(money * 0.7);
+ }
+}, {
+ name: 'Military Reform',
+ description: 'Government increases unit costs by 50%',
+ effect: function effect() {
+ unitCosts.infantry = Math.floor(unitCosts.infantry * 1.5);
+ unitCosts.cavalry = Math.floor(unitCosts.cavalry * 1.5);
+ unitCosts.artillery = Math.floor(unitCosts.artillery * 1.5);
+ }
+}];
+// UI Elements
+var moneyText = new Text2(money.toString(), {
+ size: 60,
+ fill: 0xFFFFFF
+});
+moneyText.anchor.set(0, 0);
+LK.gui.top.addChild(moneyText);
+moneyText.x = 200;
+moneyText.y = 20;
+var waveText = new Text2('Wave: ' + waveNumber, {
+ size: 50,
+ fill: 0xFFFFFF
+});
+waveText.anchor.set(0.5, 0);
+LK.gui.top.addChild(waveText);
+var eventText = new Text2('', {
+ size: 40,
+ fill: 0xFF6B6B
+});
+eventText.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(eventText);
+// Buy buttons
+var infantryButton = new Text2('Infantry ($' + unitCosts.infantry + ')', {
+ size: 45,
+ fill: 0x4A90E2
+});
+infantryButton.anchor.set(0, 1);
+LK.gui.bottomLeft.addChild(infantryButton);
+infantryButton.x = 50;
+infantryButton.y = -200;
+var cavalryButton = new Text2('Cavalry ($' + unitCosts.cavalry + ')', {
+ size: 45,
+ fill: 0x7ED321
+});
+cavalryButton.anchor.set(0, 1);
+LK.gui.bottomLeft.addChild(cavalryButton);
+cavalryButton.x = 50;
+cavalryButton.y = -150;
+var artilleryButton = new Text2('Artillery ($' + unitCosts.artillery + ')', {
+ size: 45,
+ fill: 0xD0021B
+});
+artilleryButton.anchor.set(0, 1);
+LK.gui.bottomLeft.addChild(artilleryButton);
+artilleryButton.x = 50;
+artilleryButton.y = -100;
+var startBattleButton = new Text2('Start Battle', {
+ size: 50,
+ fill: 0xF39C12
+});
+startBattleButton.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(startBattleButton);
+startBattleButton.y = -50;
+// Functions
+function updateMoney() {
+ moneyText.setText('$' + money);
+ storage.money = money;
+}
+function updateButtonTexts() {
+ infantryButton.setText('Infantry ($' + unitCosts.infantry + ')');
+ cavalryButton.setText('Cavalry ($' + unitCosts.cavalry + ')');
+ artilleryButton.setText('Artillery ($' + unitCosts.artillery + ')');
+}
+function buyUnit(type) {
+ var cost = unitCosts[type];
+ if (money >= cost) {
+ money -= cost;
+ updateMoney();
+ var unit;
+ if (type === 'infantry') {
+ unit = new Infantry();
+ } else if (type === 'cavalry') {
+ unit = new Cavalry();
+ } else if (type === 'artillery') {
+ unit = new Artillery();
+ }
+ unit.x = 200 + Math.random() * 400;
+ unit.y = 2000 + Math.random() * 200;
+ playerUnits.push(unit);
+ game.addChild(unit);
+ LK.getSound('purchase').play();
+ }
+}
+function spawnEnemyWave() {
+ var enemyCount = waveNumber + 2;
+ for (var i = 0; i < enemyCount; i++) {
+ var enemy;
+ var rand = Math.random();
+ if (rand < 0.6) {
+ enemy = new EnemyInfantry();
+ } else if (rand < 0.8) {
+ enemy = new EnemyCavalry();
+ } else {
+ enemy = new EnemyArtillery();
+ }
+ enemy.x = 800 + Math.random() * 800;
+ enemy.y = 500 + Math.random() * 200;
+ enemyUnits.push(enemy);
+ game.addChild(enemy);
+ }
+}
+function startBattle() {
+ if (playerUnits.length === 0) return;
+ gameState = 'battle';
+ battleTimer = 0;
+ spawnEnemyWave();
+ LK.getSound('battle').play();
+}
+function triggerRandomEvent() {
+ if (Math.random() < 0.3 && LK.ticks - lastEventTime > 1800) {
+ // 30 seconds
+ var eventIndex = Math.floor(Math.random() * eventTypes.length);
+ var event = eventTypes[eventIndex];
+ eventText.setText(event.name + ': ' + event.description);
+ event.effect();
+ updateButtonTexts();
+ LK.getSound('event').play();
+ lastEventTime = LK.ticks;
+ // Clear event text after 3 seconds
+ LK.setTimeout(function () {
+ eventText.setText('');
+ }, 3000);
+ }
+}
+function findNearestEnemy(unit) {
+ var nearest = null;
+ var nearestDistance = Infinity;
+ var targets = unit.isEnemy ? playerUnits : enemyUnits;
+ for (var i = 0; i < targets.length; i++) {
+ var target = targets[i];
+ var dx = target.x - unit.x;
+ var dy = target.y - unit.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance < nearestDistance) {
+ nearestDistance = distance;
+ nearest = target;
+ }
+ }
+ return nearest;
+}
+function updateBattle() {
+ // Move and attack player units
+ for (var i = playerUnits.length - 1; i >= 0; i--) {
+ var unit = playerUnits[i];
+ var target = findNearestEnemy(unit);
+ if (target) {
+ var dx = target.x - unit.x;
+ var dy = target.y - unit.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 100) {
+ unit.moveToward(target.x, target.y);
+ } else if (battleTimer % 60 === 0) {
+ // Attack once per second
+ var killed = target.takeDamage(unit.damage);
+ if (killed) {
+ var targetIndex = enemyUnits.indexOf(target);
+ if (targetIndex !== -1) {
+ enemyUnits[targetIndex].destroy();
+ enemyUnits.splice(targetIndex, 1);
+ money += 25; // Reward for killing enemy
+ updateMoney();
+ }
+ }
+ }
+ }
+ }
+ // Move and attack enemy units
+ for (var i = enemyUnits.length - 1; i >= 0; i--) {
+ var unit = enemyUnits[i];
+ var target = findNearestEnemy(unit);
+ if (target) {
+ var dx = target.x - unit.x;
+ var dy = target.y - unit.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ if (distance > 100) {
+ unit.moveToward(target.x, target.y);
+ } else if (battleTimer % 60 === 0) {
+ // Attack once per second
+ var killed = target.takeDamage(unit.damage);
+ if (killed) {
+ var targetIndex = playerUnits.indexOf(target);
+ if (targetIndex !== -1) {
+ playerUnits[targetIndex].destroy();
+ playerUnits.splice(targetIndex, 1);
+ }
+ }
+ }
+ }
+ }
+ // Check battle end conditions
+ if (enemyUnits.length === 0) {
+ // Player won
+ gameState = 'menu';
+ waveNumber++;
+ waveText.setText('Wave: ' + waveNumber);
+ money += 100 * waveNumber; // Wave completion bonus
+ updateMoney();
+ } else if (playerUnits.length === 0) {
+ // Player lost
+ LK.showGameOver();
+ }
+}
+// Event handlers
+infantryButton.down = function () {
+ buyUnit('infantry');
+};
+cavalryButton.down = function () {
+ buyUnit('cavalry');
+};
+artilleryButton.down = function () {
+ buyUnit('artillery');
+};
+startBattleButton.down = function () {
+ if (gameState === 'menu') {
+ startBattle();
+ }
+};
+// Main game update loop
+game.update = function () {
+ if (gameState === 'battle') {
+ battleTimer++;
+ updateBattle();
+ }
+ // Passive income every 3 seconds
+ if (LK.ticks % 180 === 0) {
+ money += 50;
+ updateMoney();
+ }
+ // Trigger random events
+ triggerRandomEvent();
+ // Check for bankruptcy
+ if (money < 0) {
+ LK.showGameOver();
+ }
+};
\ No newline at end of file