Code edit (1 edits merged)
Please save this source code
User prompt
Fix it
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'ref.textObj.style.fill = 0x666666;' Line Number: 638
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'ref.textObj.style.fill = 0x666666;' Line Number: 637
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 75
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'p.lastX = ore.parent.x + ore.x;' Line Number: 317
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'p.x = ore.parent.x + ore.x;' Line Number: 317
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 75
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'y')' in or related to this line: 'p.y = ore.y + ore.parent.y;' Line Number: 325
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'p.x = ore.x + ore.parent.x; // because ore is offset in the cluster' Line Number: 324
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'p.x = ore.x + ore.parent.x; // because ore is offset in the cluster' Line Number: 320
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'ref.textObj.style.fill = 0x666666;' Line Number: 650
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'p.x = ore.x + ore.parent.x; // because ore is offset in the cluster' Line Number: 316
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'p.x = ore.x + ore.parent.x; // because ore is offset in the cluster' Line Number: 310
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'elapsed')' in or related to this line: 'self.y += Math.sin(LK.time.elapsed / 250) * 0.5;' Line Number: 70
User prompt
Please fix the bug: 'TypeError: setTimeout is not a function' in or related to this line: 'setTimeout(function () {' Line Number: 151
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'elapsed')' in or related to this line: 'self.y += Math.sin(LK.time.elapsed / 250) * 0.5;' Line Number: 69
Code edit (1 edits merged)
Please save this source code
User prompt
Make the buy buttons be behind each text in the buy menu
User prompt
Make the text inside of buy menu Black and Bold with a Black outline
User prompt
Move the cancel button to the left and down 200 pixels
User prompt
Move the cancel button to the upper right of menu background
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ /**** * CLASSES ****/ // Miner class var Miner = Container.expand(function () { var self = Container.call(this); self.attachAsset('miner', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.currentTarget = null; self.miningRange = 25; self.miningCooldown = 0; self.miningRate = 30; self.miningDamage = 1; // Finds the closest ore that is unlocked & still alive self.findNewTarget = function () { var validOres = ores.filter(function (ore) { return ore.health > 0 && ore.tier <= gameState.currentTier; }); if (validOres.length === 0) { self.currentTarget = null; return; } // Sort by distance ascending self.currentTarget = validOres.sort(function (a, b) { var distA = Math.hypot(a.x - self.x, a.y - self.y); var distB = Math.hypot(b.x - self.x, b.y - self.y); return distA - distB; })[0]; }; self.update = function () { self.findNewTarget(); if (self.currentTarget) { var dx = self.currentTarget.x - self.x; var dy = self.currentTarget.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > self.miningRange) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } else { self.mineOre(self.currentTarget); } } else { // Idle float self.y += Math.sin(LK.ticks / 250) * 0.5; } }; self.mineOre = function (ore) { if (self.miningCooldown > 0) { self.miningCooldown--; return; } // Deal damage ore.health -= self.miningDamage * gameState.pickaxeLevel; self.miningCooldown = self.miningRate; // If ore is destroyed, add money & spawn new cluster after delay if (ore.health <= 0) { gameState.money += ore.getValue(); updateUI(); ore.respawn(); // Immediately look for a new target self.findNewTarget(); } // Mining particle effect for (var i = 0; i < 5; i++) { var p = LK.getAsset('mining_particle', { anchorX: 0.5, anchorY: 0.5 }); p.x = ore.x; p.y = ore.y; p.vx = (Math.random() - 0.5) * 10; p.vy = (Math.random() - 0.5) * 10; p.alpha = 1; tween(p, { alpha: 0, y: p.y - 50 }, { duration: 1000, onFinish: function onFinish() { p.destroy(); } }); game.addChild(p); } }; return self; }); // Ore class var Ore = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.tier = ['coal', 'iron', 'gold', 'diamond'].indexOf(type) + 1; // For fade-out effect self.maxHealth = 10; self.health = self.maxHealth; // Base value depends on tier. Then multiplied by oreMultipliers in gameState. self.baseValue = 5 * self.tier; self.attachAsset(type + '_ore', { anchorX: 0.5, anchorY: 0.5 }); // Health bar (bigger, and above the ore) self.healthBar = LK.getAsset('rectangle', { width: 100, // bigger than default height: 10, fill: 0x00FF00 }); self.healthBar.y = -70; self.addChild(self.healthBar); // The final money from this ore self.getValue = function () { return self.baseValue * gameState.oreMultipliers[self.type]; }; // Respawn = remove this ore, then spawn a new cluster after some delay self.respawn = function () { // Remove this ore from the game & from 'ores' self.destroy(); var idx = ores.indexOf(self); if (idx !== -1) { ores.splice(idx, 1); } // Wait for respawnTime, then spawn a new cluster // of the same type with min–max from clusterConfig LK.setTimeout(function () { spawnCluster(self.type); }, gameState.respawnTime); }; return self; }); /**** * Initialize Game ****/ /**** * SPAWNING in CLUSTERS ****/ // Spawn a cluster of {min–max} ore objects near a random center /**** * Initialize the Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Where all current ore objects go /**** * GLOBAL ARRAYS & STATE ****/ /**** * GAME CODE ****/ var ores = []; // Predefined cluster ranges for upgrades var clusterConfigLevels = [{ min: 2, max: 3 }, // default { min: 2, max: 4 }, { min: 3, max: 5 }, { min: 5, max: 10 }]; /**** * SPAWNING in CLUSTERS ****/ // Spawn a cluster of {min–max} ore objects near a random center function spawnCluster(type) { // If type not unlocked (tier > currentTier), no spawn var tierIndex = ['coal', 'iron', 'gold', 'diamond'].indexOf(type) + 1; if (tierIndex > gameState.currentTier) { return; } var cfg = gameState.clusterConfig; var count = randomBetween(cfg.min, cfg.max); // Random center var centerX = 100 + Math.random() * (2048 - 200); var centerY = 100 + Math.random() * (2732 - 200); for (var i = 0; i < count; i++) { var ore = new Ore(type); // Random offset var offsetX = (Math.random() - 0.5) * 120; var offsetY = (Math.random() - 0.5) * 120; ore.x = centerX + offsetX; ore.y = centerY + offsetY; game.addChild(ore); ores.push(ore); } } // Utility to pick an integer between min and max inclusive function randomBetween(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } var upgradeMenu = new Container(); var tooltip = new Text2('', { size: 40, fill: 0xFFFFFF }); // NEW cluster upgrade cost logic // Each time we buy it, the cost goes up, and we move to next cluster tier. var clusterUpgradeBaseCost = 1000; /**** * Upgrades ****/ var upgrades = [{ id: 'coal_expert', name: "Coal Expertise", cost: 100, effect: "Double coal value", tier: 1, action: function action() { gameState.oreMultipliers.coal *= 2; } }, { id: 'unlock_iron', name: "Iron Mining", cost: 500, effect: "Unlock iron mining", tier: 2, action: function action() { gameState.currentTier = 2; } }, { id: 'iron_expert', name: "Iron Expertise", cost: 2000, effect: "Triple iron value", tier: 2, requires: 'unlock_iron', action: function action() { gameState.oreMultipliers.iron *= 3; } }, { id: 'unlock_gold', name: "Gold Mining", cost: 5000, effect: "Unlock gold mining", tier: 3, action: function action() { gameState.currentTier = 3; } }, { id: 'gold_expert', name: "Gold Expertise", cost: 10000, effect: "Quadruple gold value", tier: 3, requires: 'unlock_gold', action: function action() { gameState.oreMultipliers.gold *= 4; } }, { id: 'unlock_diamond', name: "Diamond Mining", cost: 20000, effect: "Unlock diamond mining", tier: 4, action: function action() { gameState.currentTier = 4; } }, { id: 'faster_respawn', name: "Quicker Respawn", cost: 8000, effect: "Halves ore respawn time", tier: 2, action: function action() { // Halve the respawn time, min of 500 ms gameState.respawnTime = Math.max(500, gameState.respawnTime / 2); } }, // The cluster upgrade { id: 'cluster_up', name: "Cluster Growth [Tier 1]", cost: clusterUpgradeBaseCost, effect: "Increases cluster spawn range", tier: 1, action: function action() { // Increase clusterUpgradeTier if possible if (gameState.clusterUpgradeTier < clusterConfigLevels.length - 1) { gameState.clusterUpgradeTier++; } // Update cost each purchase (optional: double or add a fixed amount) // Example: next cost is +2000 this.cost += 2000; // Update the cluster config in gameState gameState.clusterConfig = clusterConfigLevels[gameState.clusterUpgradeTier]; } }]; // Game state, including cluster setup var gameState = { money: 0, pickaxeLevel: 1, currentTier: 1, oreMultipliers: { coal: 1, iron: 1, gold: 1, diamond: 1 }, respawnTime: 3000, // in ms clusterUpgradeTier: 0, // index into clusterConfigLevels // Default cluster range is 2-3 clusterConfig: { min: 2, max: 3 } }; // Create the Miner var miner = game.addChild(new Miner()); miner.x = 2048 / 2; miner.y = 2732 / 2; // Background var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5 }); background.x = 2048 / 2; background.y = 2732 / 2; game.addChildAt(background, 0); // UI var moneyDisplay = new Text2('$0', { size: 80, fill: 0xFFFFFF, fontWeight: 'bold', stroke: 0x000000, strokeThickness: 5 }); moneyDisplay.x = 2048 / 2 - moneyDisplay.width / 2; moneyDisplay.y = 50; var shopButton = LK.getAsset('buy_button', { anchorX: 0.5, anchorY: 0.5 }); shopButton.x = 2048 - 150; shopButton.y = 2732 - 150; shopButton.down = function () { createUpgradeMenu(); game.addChild(upgradeMenu); }; game.addChild(moneyDisplay); game.addChild(shopButton); game.addChild(tooltip); /**** * CREATE UPGRADE MENU ****/ function createUpgradeMenu() { upgradeMenu.removeChildren(); var menuBg = LK.getAsset('rectangle', { width: 1600, height: 1800, color: 0x2a2a2a, anchorX: 0.5, anchorY: 0.5 }); menuBg.x = 2048 / 2; menuBg.y = 2732 / 2; upgradeMenu.addChild(menuBg); // Dynamically update the cluster upgrade’s display var clusterUpObj = upgrades.find(function (u) { return u.id === 'cluster_up'; }); if (clusterUpObj) { clusterUpObj.name = "Cluster Growth [Tier " + (gameState.clusterUpgradeTier + 1) + "]"; var cfg = clusterConfigLevels[gameState.clusterUpgradeTier]; clusterUpObj.effect = "Spawns " + cfg.min + "-" + cfg.max + " per cluster"; } upgrades.forEach(function (upgrade, i) { // Check requirements var requirement = null; if (upgrade.requires) { requirement = upgrades.find(function (u) { return u.id === upgrade.requires; }); } var y = 2732 / 2 - 500 + i * 200; // The buy button var btn = LK.getAsset('buy_button', { anchorX: 0.5, anchorY: 0.5 }); btn.x = 2048 / 2; btn.y = y; upgradeMenu.addChild(btn); var canBuy = !upgrade.purchased && gameState.money >= upgrade.cost && (!requirement || requirement.purchased); // Text on top of button var text = new Text2(upgrade.name + "\n" + upgrade.effect + "\n$" + upgrade.cost, { size: 40, fill: canBuy ? 0xFFFFFF : 0x666666, align: 'center' }); text.anchor.set(0.5, 0.5); text.x = btn.x; text.y = btn.y; upgradeMenu.addChild(text); // Button action btn.down = function () { if (canBuy) { gameState.money -= upgrade.cost; upgrade.purchased = true; upgrade.action(); createUpgradeMenu(); updateUI(); } }; }); // Close button var closeBtn = LK.getAsset('cancelButton', { anchorX: 0.5, anchorY: 0.5 }); closeBtn.x = 2048 / 2 + 600; closeBtn.y = 2732 / 2 - 700; closeBtn.down = function () { game.removeChild(upgradeMenu); }; upgradeMenu.addChild(closeBtn); } /**** * UPDATE UI ****/ function updateUI() { moneyDisplay.setText("$" + gameState.money.toLocaleString() + "\n" + "Multipliers: " + "C" + gameState.oreMultipliers.coal + "x " + "I" + gameState.oreMultipliers.iron + "x " + "G" + gameState.oreMultipliers.gold + "x " + "D" + gameState.oreMultipliers.diamond + "x"); moneyDisplay.x = 2048 / 2 - moneyDisplay.width / 2; } /**** * MAIN GAME UPDATE ****/ game.update = function () { miner.update(); // Update ore health bars & alpha fade ores.forEach(function (ore) { if (ore.health > 0) { var fraction = ore.health / ore.maxHealth; // Health bar width & color ore.healthBar.width = 100 * fraction; ore.healthBar.fill = interpolateColor(0xFF0000, 0x00FF00, fraction); // Fade out ore.alpha = fraction; } }); }; /**** * COLOR HELPER ****/ function interpolateColor(color1, color2, factor) { var r1 = color1 >> 16 & 0xff; var g1 = color1 >> 8 & 0xff; var b1 = color1 & 0xff; var r2 = color2 >> 16 & 0xff; var g2 = color2 >> 8 & 0xff; var b2 = color2 & 0xff; var r = Math.round(r1 + factor * (r2 - r1)); var g = Math.round(g1 + factor * (g2 - g1)); var b = Math.round(b1 + factor * (b2 - b1)); return r << 16 | g << 8 | b; } /**** * SAVE & LOAD ****/ LK.saveGame = function () { return gameState; }; LK.loadGame = function (data) { gameState = data; updateUI(); }; /**** * INITIAL SPAWN ****/ // Spawn clusters of each type up to your currentTier function initialSpawn() { var types = ['coal', 'iron', 'gold', 'diamond']; types.forEach(function (type, index) { // If type's tier <= currentTier, spawn a cluster of it var tier = index + 1; if (tier <= gameState.currentTier) { spawnCluster(type); } }); } initialSpawn(); updateUI();
===================================================================
--- original.js
+++ change.js
@@ -51,9 +51,9 @@
self.mineOre(self.currentTarget);
}
} else {
// Idle float
- self.y += Math.sin(LK.time.elapsed / 250) * 0.5;
+ self.y += Math.sin(LK.ticks / 250) * 0.5;
}
};
self.mineOre = function (ore) {
if (self.miningCooldown > 0) {
drone_shot
Sound effect
mine_coal
Sound effect
mine_iron
Sound effect
mine_gold
Sound effect
mine_diamond
Sound effect
mine_sapphire
Sound effect
mine_emerald
Sound effect
mine_ruby
Sound effect
mine_chronostone
Sound effect
mine_quantumshard
Sound effect
ore_destroy_coal
Sound effect
ore_destroy_iron
Sound effect
ore_destroy_gold
Sound effect
ore_destroy_diamond
Sound effect
ore_destroy_sapphire
Sound effect
ore_destroy_emerald
Sound effect
ore_destroy_ruby
Sound effect
mine_coal_1
Sound effect
mine_coal_2
Sound effect
mine_coal_3
Sound effect
mine_diamond1
Sound effect
mine_diamond2
Sound effect
mine_diamond3
Sound effect
mine_emerald1
Sound effect
mine_emerald2
Sound effect
mine_emerald3
Sound effect
mine_gold1
Sound effect
mine_gold2
Sound effect
mine_gold3
Sound effect
mine_iron1
Sound effect
mine_iron2
Sound effect
mine_iron3
Sound effect
mine_ruby1
Sound effect
mine_ruby2
Sound effect
mine_ruby3
Sound effect
mine_sapphire1
Sound effect
mine_sapphire2
Sound effect
mine_sapphire3
Sound effect
song1
Music
song2
Music
song3
Music
song4
Music
song5
Music
song6
Music
song7
Music
song8
Music
song9
Music
song10
Music
song11
Music
song12
Music
song1a
Music
song1b
Music
song2a
Music
song2b
Music
song3a
Music
song3b
Music
song4a
Music
song4b
Music
song5a
Music
song5b
Music
song6a
Music
song6b
Music
song7a
Music
song7b
Music
song8a
Music
song8b
Music
song9a
Music
song9b
Music
song10a
Music
song10b
Music
song11a
Music
song11b
Music
song12a
Music
song12b
Music