User prompt
select item then select spot even 1 item can be crated
User prompt
switch from drag and drop to click item click craft spot
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'length')' in or related to this line: 'if (obj.children.length > 0) {' Line Number: 475
User prompt
bigger inventory lookout drag and drop system combine crafting area and item inventory add ways to equip weapons when crafting grid is open pause game
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'type')' in or related to this line: 'var gridText = new Text2(draggedSlot.dragData.type.charAt(0).toUpperCase(), {' Line Number: 966
User prompt
inventory and crafting combine drag and drop system to move things from inventory to crafting grid
User prompt
add incentory
User prompt
inventory drag and drop into crafting Friday any number of items that fit in it can be used to craft
User prompt
3 by 3 grid placement for crafting items and hit craft button when done auto collect materials levels level up upgrades more materials
User prompt
infinite craft system
User prompt
make everything in inventory appear bigger
User prompt
tap to move
Code edit (1 edits merged)
Please save this source code
User prompt
Craft & Clash Arena
User prompt
and its a battle game in addition to any items can be used to craft anything and in any configuration
User prompt
no matter what the item is craftable
Initial prompt
lets make a game about fighting where you gather resources and can make tools by crafting any resources or other items in any way
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var CraftedItem = Container.expand(function (recipe) { var self = Container.call(this); self.recipe = recipe; self.name = recipe.name; self.type = recipe.type; self.power = recipe.power || 0; self.defense = recipe.defense || 0; var itemGraphics; if (self.type === 'weapon') { itemGraphics = self.attachAsset('weapon', { anchorX: 0.5, anchorY: 0.5 }); } else { itemGraphics = self.attachAsset('armor', { anchorX: 0.5, anchorY: 0.5 }); } return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.health = 50; self.maxHealth = 50; self.damage = 15; self.speed = 1; self.lastAttackTime = 0; self.attackCooldown = 120; // 2 seconds at 60fps self.update = function () { if (player && self.health > 0) { var dx = player.x - self.x; var dy = player.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 80) { var moveX = dx / distance * self.speed; var moveY = dy / distance * self.speed; self.x += moveX; self.y += moveY; } else { // Attack player if (LK.ticks - self.lastAttackTime > self.attackCooldown) { player.takeDamage(self.damage); self.lastAttackTime = LK.ticks; LK.getSound('hit').play(); } } } }; self.takeDamage = function (amount) { self.health -= amount; LK.effects.flashObject(self, 0xFFFFFF, 200); if (self.health <= 0) { self.dropResources(); self.destroy(); } }; self.dropResources = function () { for (var i = 0; i < 2; i++) { var resource = new Resource(); resource.x = self.x + (Math.random() - 0.5) * 60; resource.y = self.y + (Math.random() - 0.5) * 60; resources.push(resource); game.addChild(resource); } }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.health = 100; self.maxHealth = 100; self.damage = 20; self.armor = 0; self.weapon = null; self.armorItem = null; self.speed = 3; self.targetX = self.x; self.targetY = self.y; self.isMoving = false; self.update = function () { if (self.isMoving) { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 5) { var moveX = dx / distance * self.speed; var moveY = dy / distance * self.speed; self.x += moveX; self.y += moveY; } else { self.x = self.targetX; self.y = self.targetY; self.isMoving = false; } } }; self.moveTo = function (x, y) { self.targetX = x; self.targetY = y; self.isMoving = true; }; self.takeDamage = function (amount) { var actualDamage = Math.max(1, amount - self.armor); self.health -= actualDamage; if (self.health <= 0) { self.health = 0; LK.showGameOver(); } LK.effects.flashObject(self, 0xFF0000, 300); }; self.equipWeapon = function (weapon) { self.weapon = weapon; self.damage = 20 + weapon.power; }; self.equipArmor = function (armor) { self.armorItem = armor; self.armor = armor.defense; }; return self; }); var Resource = Container.expand(function () { var self = Container.call(this); var resourceGraphics = self.attachAsset('resource', { anchorX: 0.5, anchorY: 0.5 }); self.type = ['metal', 'wood', 'crystal', 'fabric'][Math.floor(Math.random() * 4)]; self.value = Math.floor(Math.random() * 5) + 1; self.down = function (x, y, obj) { LK.getSound('collect').play(); inventory.push({ type: self.type, value: self.value }); updateInventoryDisplay(); self.destroy(); var index = resources.indexOf(self); if (index > -1) { resources.splice(index, 1); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2C3E50 }); /**** * Game Code ****/ var player; var enemies = []; var resources = []; var inventory = []; var craftedItems = []; var gameState = 'combat'; // 'combat' or 'crafting' var lastEnemySpawn = 0; var enemySpawnRate = 300; // 5 seconds var selectedSlots = []; var materialProperties = { metal: { strength: 3, durability: 2, magic: 0, flexibility: 1 }, wood: { strength: 1, durability: 1, magic: 0, flexibility: 2 }, crystal: { strength: 2, durability: 1, magic: 4, flexibility: 0 }, fabric: { strength: 0, durability: 0, magic: 1, flexibility: 3 } }; // UI Elements var healthBar = new Text2('Health: 100/100', { size: 40, fill: 0xFF6B6B }); healthBar.anchor.set(0, 0); LK.gui.topLeft.addChild(healthBar); healthBar.x = 120; healthBar.y = 20; var inventoryText = new Text2('Inventory: 0 items', { size: 30, fill: 0xFFFFFF }); inventoryText.anchor.set(0.5, 0); LK.gui.top.addChild(inventoryText); inventoryText.y = 80; var craftButton = LK.getAsset('craftButton', { anchorX: 0.5, anchorY: 0.5 }); LK.gui.bottom.addChild(craftButton); craftButton.y = -100; var craftButtonText = new Text2('CRAFT', { size: 36, fill: 0xFFFFFF }); craftButtonText.anchor.set(0.5, 0.5); craftButton.addChild(craftButtonText); var inventorySlots = []; var craftingPanel = new Container(); var isCraftingOpen = false; // Initialize player player = game.addChild(new Player()); player.x = 1024; player.y = 1366; function updateInventoryDisplay() { inventoryText.setText('Inventory: ' + inventory.length + ' items'); } function openCraftingPanel() { if (isCraftingOpen) return; isCraftingOpen = true; gameState = 'crafting'; // Create crafting panel background var panelBg = LK.getAsset('inventorySlot', { anchorX: 0.5, anchorY: 0.5, scaleX: 16, scaleY: 12 }); craftingPanel.addChild(panelBg); // Create inventory slots for (var i = 0; i < inventory.length && i < 20; i++) { var slot = LK.getAsset('inventorySlot', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.5, scaleY: 1.5 }); slot.x = i % 5 * 135 - 270; slot.y = Math.floor(i / 5) * 135 - 150; slot.itemData = inventory[i]; slot.slotIndex = i; slot.selected = false; var itemText = new Text2(inventory[i].type + '\n' + inventory[i].value, { size: 30, fill: 0xFFFFFF }); itemText.anchor.set(0.5, 0.5); slot.addChild(itemText); slot.down = function (x, y, obj) { obj.selected = !obj.selected; if (obj.selected) { obj.tint = 0xFFFF00; selectedSlots.push(obj.slotIndex); } else { obj.tint = 0xFFFFFF; var index = selectedSlots.indexOf(obj.slotIndex); if (index > -1) selectedSlots.splice(index, 1); } }; craftingPanel.addChild(slot); inventorySlots.push(slot); } // Create craft button var craftActionButton = LK.getAsset('craftButton', { anchorX: 0.5, anchorY: 0.5 }); craftActionButton.y = 200; var craftActionText = new Text2('CRAFT ITEMS', { size: 30, fill: 0xFFFFFF }); craftActionText.anchor.set(0.5, 0.5); craftActionButton.addChild(craftActionText); craftActionButton.down = function () { if (selectedSlots.length >= 1) { craftSelectedItems(); } }; craftingPanel.addChild(craftActionButton); // Create close button var closeButton = LK.getAsset('equipButton', { anchorX: 0.5, anchorY: 0.5 }); closeButton.y = 260; var closeText = new Text2('CLOSE', { size: 24, fill: 0xFFFFFF }); closeText.anchor.set(0.5, 0.5); closeButton.addChild(closeText); closeButton.down = function () { closeCraftingPanel(); }; craftingPanel.addChild(closeButton); game.addChild(craftingPanel); craftingPanel.x = 1024; craftingPanel.y = 1366; } function closeCraftingPanel() { isCraftingOpen = false; gameState = 'combat'; selectedSlots = []; inventorySlots = []; craftingPanel.destroy(); craftingPanel = new Container(); } function craftSelectedItems() { if (selectedSlots.length < 1) return; var materials = {}; var totalValue = 0; var materialTypes = []; // Calculate materials from selected slots for (var i = 0; i < selectedSlots.length; i++) { var item = inventory[selectedSlots[i]]; if (!materials[item.type]) { materials[item.type] = 0; materialTypes.push(item.type); } materials[item.type] += item.value; totalValue += item.value; } // Calculate combined properties var combinedProps = { strength: 0, durability: 0, magic: 0, flexibility: 0 }; var dominantMaterial = ''; var highestAmount = 0; for (var matType in materials) { var amount = materials[matType]; var props = materialProperties[matType]; // Add weighted properties combinedProps.strength += props.strength * amount; combinedProps.durability += props.durability * amount; combinedProps.magic += props.magic * amount; combinedProps.flexibility += props.flexibility * amount; // Track dominant material if (amount > highestAmount) { highestAmount = amount; dominantMaterial = matType; } } // Determine item type based on properties var itemType = 'tool'; var itemName = 'Crafted Item'; var power = 0; var defense = 0; var special = ''; if (combinedProps.strength > combinedProps.durability && combinedProps.strength > combinedProps.magic) { itemType = 'weapon'; power = Math.floor(combinedProps.strength * 2 + totalValue); if (combinedProps.magic > 5) { special = 'Magical '; power += Math.floor(combinedProps.magic); } } else if (combinedProps.durability > combinedProps.magic) { itemType = 'armor'; defense = Math.floor(combinedProps.durability * 2 + totalValue); if (combinedProps.flexibility > 5) { special = 'Flexible '; defense += Math.floor(combinedProps.flexibility / 2); } } else if (combinedProps.magic > 8) { itemType = 'artifact'; power = Math.floor(combinedProps.magic * 1.5); defense = Math.floor(combinedProps.magic); special = 'Enchanted '; } else { itemType = 'tool'; power = Math.floor(totalValue * 1.5); defense = Math.floor(totalValue); } // Generate creative name based on materials and properties var materialNames = { metal: ['Iron', 'Steel', 'Bronze'], wood: ['Oak', 'Pine', 'Willow'], crystal: ['Diamond', 'Ruby', 'Sapphire'], fabric: ['Silk', 'Cotton', 'Leather'] }; var typeNames = { weapon: ['Blade', 'Sword', 'Axe', 'Spear', 'Hammer'], armor: ['Shield', 'Plate', 'Mail', 'Guard', 'Protector'], artifact: ['Orb', 'Charm', 'Relic', 'Talisman'], tool: ['Tool', 'Device', 'Instrument', 'Implement'] }; var baseName = materialNames[dominantMaterial][Math.floor(Math.random() * materialNames[dominantMaterial].length)]; var typeName = typeNames[itemType][Math.floor(Math.random() * typeNames[itemType].length)]; // Add fusion indicator for multiple materials var fusionPrefix = ''; if (materialTypes.length > 1) { fusionPrefix = 'Fused '; } itemName = fusionPrefix + special + baseName + ' ' + typeName; // Bonus for unique combinations if (materialTypes.length >= 3) { power += 5; defense += 5; itemName = 'Masterwork ' + itemName; } if (materialTypes.length >= 4) { power += 10; defense += 10; itemName = 'Legendary ' + itemName; } var newItem = { name: itemName, type: itemType, power: power, defense: defense, materials: materialTypes.join('+'), rarity: materialTypes.length >= 4 ? 'legendary' : materialTypes.length >= 3 ? 'masterwork' : materialTypes.length > 1 ? 'fused' : 'common' }; craftedItems.push(newItem); // Remove used items from inventory selectedSlots.sort(function (a, b) { return b - a; }); for (var s = 0; s < selectedSlots.length; s++) { inventory.splice(selectedSlots[s], 1); } LK.getSound('craft').play(); updateInventoryDisplay(); closeCraftingPanel(); showCraftedItems(); } function showCraftedItems() { if (craftedItems.length === 0) return; var equipPanel = new Container(); for (var i = 0; i < craftedItems.length && i < 5; i++) { var item = craftedItems[i]; var equipButton = LK.getAsset('equipButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 1.5 }); equipButton.y = i * 90 - 180; equipButton.itemData = item; equipButton.itemIndex = i; // Set button color based on rarity var buttonColor = 0x9b59b6; if (item.rarity === 'legendary') buttonColor = 0xf1c40f;else if (item.rarity === 'masterwork') buttonColor = 0xe74c3c;else if (item.rarity === 'fused') buttonColor = 0x3498db; equipButton.tint = buttonColor; var equipText = new Text2(item.name + '\n' + (item.type === 'weapon' ? 'Power: ' + item.power : item.type === 'armor' ? 'Defense: ' + item.defense : 'Power: ' + item.power + ' Defense: ' + item.defense) + '\nMaterials: ' + item.materials, { size: 16, fill: 0xFFFFFF }); equipText.anchor.set(0.5, 0.5); equipButton.addChild(equipText); equipButton.down = function (x, y, obj) { var item = obj.itemData; if (item.type === 'weapon') { player.equipWeapon(item); } else if (item.type === 'armor') { player.equipArmor(item); } else { // Artifact or tool - can be equipped as either if (item.power > item.defense) { player.equipWeapon(item); } else { player.equipArmor(item); } } craftedItems.splice(obj.itemIndex, 1); equipPanel.destroy(); }; equipPanel.addChild(equipButton); } game.addChild(equipPanel); equipPanel.x = 1024; equipPanel.y = 1366; LK.setTimeout(function () { if (equipPanel.parent) equipPanel.destroy(); }, 8000); } function spawnEnemy() { var enemy = new Enemy(); var side = Math.floor(Math.random() * 4); switch (side) { case 0: // top enemy.x = Math.random() * 2048; enemy.y = -50; break; case 1: // right enemy.x = 2098; enemy.y = Math.random() * 2732; break; case 2: // bottom enemy.x = Math.random() * 2048; enemy.y = 2782; break; case 3: // left enemy.x = -50; enemy.y = Math.random() * 2732; break; } enemies.push(enemy); game.addChild(enemy); } craftButton.down = function () { if (gameState === 'combat') { openCraftingPanel(); } }; game.down = function (x, y, obj) { if (gameState === 'combat') { // Check if tapping on an enemy to attack var attackedEnemy = false; for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var dx = enemy.x - x; var dy = enemy.y - y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance < 50 && enemy.health > 0) { // Direct tap on enemy - attack enemy.takeDamage(player.damage); LK.getSound('hit').play(); if (enemy.health <= 0) { LK.setScore(LK.getScore() + 10); var index = enemies.indexOf(enemy); if (index > -1) enemies.splice(index, 1); } attackedEnemy = true; break; } } // If not attacking an enemy, move player to tapped location if (!attackedEnemy) { player.moveTo(x, y); } } }; game.update = function () { if (gameState !== 'combat') return; // Update health display healthBar.setText('Health: ' + player.health + '/' + player.maxHealth); // Spawn enemies if (LK.ticks - lastEnemySpawn > enemySpawnRate) { spawnEnemy(); lastEnemySpawn = LK.ticks; // Increase difficulty over time if (enemySpawnRate > 120) { enemySpawnRate -= 2; } } // Clean up resources that are too far for (var i = resources.length - 1; i >= 0; i--) { var resource = resources[i]; var dx = resource.x - player.x; var dy = resource.y - player.y; if (Math.sqrt(dx * dx + dy * dy) > 1000) { resource.destroy(); resources.splice(i, 1); } } // Win condition if (LK.getScore() >= 500) { LK.showYouWin(); } };
===================================================================
--- original.js
+++ change.js
@@ -178,39 +178,34 @@
var gameState = 'combat'; // 'combat' or 'crafting'
var lastEnemySpawn = 0;
var enemySpawnRate = 300; // 5 seconds
var selectedSlots = [];
-var craftingRecipes = [{
- name: 'Iron Sword',
- type: 'weapon',
- power: 15,
- materials: {
- metal: 2
+var materialProperties = {
+ metal: {
+ strength: 3,
+ durability: 2,
+ magic: 0,
+ flexibility: 1
+ },
+ wood: {
+ strength: 1,
+ durability: 1,
+ magic: 0,
+ flexibility: 2
+ },
+ crystal: {
+ strength: 2,
+ durability: 1,
+ magic: 4,
+ flexibility: 0
+ },
+ fabric: {
+ strength: 0,
+ durability: 0,
+ magic: 1,
+ flexibility: 3
}
-}, {
- name: 'Wood Shield',
- type: 'armor',
- defense: 10,
- materials: {
- wood: 3
- }
-}, {
- name: 'Crystal Blade',
- type: 'weapon',
- power: 25,
- materials: {
- crystal: 2,
- metal: 1
- }
-}, {
- name: 'Magic Armor',
- type: 'armor',
- defense: 20,
- materials: {
- crystal: 2,
- fabric: 2
- }
-}];
+};
// UI Elements
var healthBar = new Text2('Health: 100/100', {
size: 40,
fill: 0xFF6B6B
@@ -305,9 +300,11 @@
});
craftActionText.anchor.set(0.5, 0.5);
craftActionButton.addChild(craftActionText);
craftActionButton.down = function () {
- craftSelectedItems();
+ if (selectedSlots.length >= 1) {
+ craftSelectedItems();
+ }
};
craftingPanel.addChild(craftActionButton);
// Create close button
var closeButton = LK.getAsset('equipButton', {
@@ -337,51 +334,115 @@
craftingPanel.destroy();
craftingPanel = new Container();
}
function craftSelectedItems() {
- if (selectedSlots.length < 2) return;
+ if (selectedSlots.length < 1) return;
var materials = {};
var totalValue = 0;
+ var materialTypes = [];
// Calculate materials from selected slots
for (var i = 0; i < selectedSlots.length; i++) {
var item = inventory[selectedSlots[i]];
- if (!materials[item.type]) materials[item.type] = 0;
+ if (!materials[item.type]) {
+ materials[item.type] = 0;
+ materialTypes.push(item.type);
+ }
materials[item.type] += item.value;
totalValue += item.value;
}
- // Find matching recipe
- var recipe = null;
- for (var r = 0; r < craftingRecipes.length; r++) {
- var canCraft = true;
- for (var mat in craftingRecipes[r].materials) {
- if (!materials[mat] || materials[mat] < craftingRecipes[r].materials[mat]) {
- canCraft = false;
- break;
- }
+ // Calculate combined properties
+ var combinedProps = {
+ strength: 0,
+ durability: 0,
+ magic: 0,
+ flexibility: 0
+ };
+ var dominantMaterial = '';
+ var highestAmount = 0;
+ for (var matType in materials) {
+ var amount = materials[matType];
+ var props = materialProperties[matType];
+ // Add weighted properties
+ combinedProps.strength += props.strength * amount;
+ combinedProps.durability += props.durability * amount;
+ combinedProps.magic += props.magic * amount;
+ combinedProps.flexibility += props.flexibility * amount;
+ // Track dominant material
+ if (amount > highestAmount) {
+ highestAmount = amount;
+ dominantMaterial = matType;
}
- if (canCraft) {
- recipe = craftingRecipes[r];
- break;
- }
}
- // Create item
- var newItem;
- if (recipe) {
- newItem = {
- name: recipe.name,
- type: recipe.type,
- power: recipe.power || 0,
- defense: recipe.defense || 0
- };
+ // Determine item type based on properties
+ var itemType = 'tool';
+ var itemName = 'Crafted Item';
+ var power = 0;
+ var defense = 0;
+ var special = '';
+ if (combinedProps.strength > combinedProps.durability && combinedProps.strength > combinedProps.magic) {
+ itemType = 'weapon';
+ power = Math.floor(combinedProps.strength * 2 + totalValue);
+ if (combinedProps.magic > 5) {
+ special = 'Magical ';
+ power += Math.floor(combinedProps.magic);
+ }
+ } else if (combinedProps.durability > combinedProps.magic) {
+ itemType = 'armor';
+ defense = Math.floor(combinedProps.durability * 2 + totalValue);
+ if (combinedProps.flexibility > 5) {
+ special = 'Flexible ';
+ defense += Math.floor(combinedProps.flexibility / 2);
+ }
+ } else if (combinedProps.magic > 8) {
+ itemType = 'artifact';
+ power = Math.floor(combinedProps.magic * 1.5);
+ defense = Math.floor(combinedProps.magic);
+ special = 'Enchanted ';
} else {
- // Create random item
- newItem = {
- name: 'Custom Item',
- type: Math.random() < 0.5 ? 'weapon' : 'armor',
- power: totalValue * 2,
- defense: totalValue * 2
- };
+ itemType = 'tool';
+ power = Math.floor(totalValue * 1.5);
+ defense = Math.floor(totalValue);
}
+ // Generate creative name based on materials and properties
+ var materialNames = {
+ metal: ['Iron', 'Steel', 'Bronze'],
+ wood: ['Oak', 'Pine', 'Willow'],
+ crystal: ['Diamond', 'Ruby', 'Sapphire'],
+ fabric: ['Silk', 'Cotton', 'Leather']
+ };
+ var typeNames = {
+ weapon: ['Blade', 'Sword', 'Axe', 'Spear', 'Hammer'],
+ armor: ['Shield', 'Plate', 'Mail', 'Guard', 'Protector'],
+ artifact: ['Orb', 'Charm', 'Relic', 'Talisman'],
+ tool: ['Tool', 'Device', 'Instrument', 'Implement']
+ };
+ var baseName = materialNames[dominantMaterial][Math.floor(Math.random() * materialNames[dominantMaterial].length)];
+ var typeName = typeNames[itemType][Math.floor(Math.random() * typeNames[itemType].length)];
+ // Add fusion indicator for multiple materials
+ var fusionPrefix = '';
+ if (materialTypes.length > 1) {
+ fusionPrefix = 'Fused ';
+ }
+ itemName = fusionPrefix + special + baseName + ' ' + typeName;
+ // Bonus for unique combinations
+ if (materialTypes.length >= 3) {
+ power += 5;
+ defense += 5;
+ itemName = 'Masterwork ' + itemName;
+ }
+ if (materialTypes.length >= 4) {
+ power += 10;
+ defense += 10;
+ itemName = 'Legendary ' + itemName;
+ }
+ var newItem = {
+ name: itemName,
+ type: itemType,
+ power: power,
+ defense: defense,
+ materials: materialTypes.join('+'),
+ rarity: materialTypes.length >= 4 ? 'legendary' : materialTypes.length >= 3 ? 'masterwork' : materialTypes.length > 1 ? 'fused' : 'common'
+ };
craftedItems.push(newItem);
// Remove used items from inventory
selectedSlots.sort(function (a, b) {
return b - a;
@@ -400,25 +461,38 @@
for (var i = 0; i < craftedItems.length && i < 5; i++) {
var item = craftedItems[i];
var equipButton = LK.getAsset('equipButton', {
anchorX: 0.5,
- anchorY: 0.5
+ anchorY: 0.5,
+ scaleX: 2,
+ scaleY: 1.5
});
- equipButton.y = i * 60 - 120;
+ equipButton.y = i * 90 - 180;
equipButton.itemData = item;
equipButton.itemIndex = i;
- var equipText = new Text2(item.name, {
- size: 20,
+ // Set button color based on rarity
+ var buttonColor = 0x9b59b6;
+ if (item.rarity === 'legendary') buttonColor = 0xf1c40f;else if (item.rarity === 'masterwork') buttonColor = 0xe74c3c;else if (item.rarity === 'fused') buttonColor = 0x3498db;
+ equipButton.tint = buttonColor;
+ var equipText = new Text2(item.name + '\n' + (item.type === 'weapon' ? 'Power: ' + item.power : item.type === 'armor' ? 'Defense: ' + item.defense : 'Power: ' + item.power + ' Defense: ' + item.defense) + '\nMaterials: ' + item.materials, {
+ size: 16,
fill: 0xFFFFFF
});
equipText.anchor.set(0.5, 0.5);
equipButton.addChild(equipText);
equipButton.down = function (x, y, obj) {
var item = obj.itemData;
if (item.type === 'weapon') {
player.equipWeapon(item);
- } else {
+ } else if (item.type === 'armor') {
player.equipArmor(item);
+ } else {
+ // Artifact or tool - can be equipped as either
+ if (item.power > item.defense) {
+ player.equipWeapon(item);
+ } else {
+ player.equipArmor(item);
+ }
}
craftedItems.splice(obj.itemIndex, 1);
equipPanel.destroy();
};
@@ -428,9 +502,9 @@
equipPanel.x = 1024;
equipPanel.y = 1366;
LK.setTimeout(function () {
if (equipPanel.parent) equipPanel.destroy();
- }, 5000);
+ }, 8000);
}
function spawnEnemy() {
var enemy = new Enemy();
var side = Math.floor(Math.random() * 4);