User prompt
Make it so sometimes swords can fail to forge not always but sometimes
User prompt
Make the sword actually look different when you add the different sword types together and make more types of handles and more other sword part types and make it so you can scroll down to select the different sword types too
User prompt
Make more types of swords so THERES more options then a basic sword and more types of sword ingredients so you can craft the different types of swords
User prompt
Connect the sword with the parts more
User prompt
Make the sword look more realistic looking
User prompt
Make the sword spawn somewhere in the middle when you click craft and make the sword not spawn when the ingredients aren’t on the crafts table
User prompt
When you click craft it makes a sword appear
User prompt
Well make it so when you drag all the sword ingredients you have into the slots on the crafts table to make the sword
User prompt
And you can drag the ingredients for the sword to the crafts table to make the sword
Code edit (1 edits merged)
Please save this source code
User prompt
Forge & Craft: Sword Smithy
Initial prompt
A game about crafting swords on a crafts table that is a dark brown a bit big square with a long tan rectangle on the top
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var CraftedSword = Container.expand(function () {
var self = Container.call(this);
self.quality = 1;
self.materials = {
blade: null,
handle: null,
guard: null
};
var bladeGraphics = LK.getAsset('blade', {
anchorX: 0.5,
anchorY: 0.5
});
var handleGraphics = LK.getAsset('handle', {
anchorX: 0.5,
anchorY: 0.3
});
var guardGraphics = LK.getAsset('guard', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(bladeGraphics);
self.addChild(guardGraphics);
self.addChild(handleGraphics);
bladeGraphics.y = -80;
guardGraphics.y = 20;
handleGraphics.y = 80;
self.setCraftedSword = function (materials, quality) {
self.materials = materials;
self.quality = quality;
self.updateColor();
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.elasticOut
});
};
self.updateColor = function () {
var colorIntensity = 0x333333 + self.quality * 0x111111;
if (self.quality >= 2) {
bladeGraphics.tint = 0xffaa00;
}
if (self.quality >= 3) {
guardGraphics.tint = 0xff00ff;
}
};
self.scaleX = 0.5;
self.scaleY = 0.5;
return self;
});
var CraftingWorkbench = Container.expand(function () {
var self = Container.call(this);
var tableGraphics = self.attachAsset('craftingTable', {
anchorX: 0.5,
anchorY: 0.5
});
var workSurfaceGraphics = LK.getAsset('workSurface', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(workSurfaceGraphics);
workSurfaceGraphics.y = -50;
self.materialSlots = [];
self.selectedSlots = [];
var slot1 = new MaterialSlot();
slot1.x = -280;
slot1.y = -150;
slot1.slotIndex = 0;
self.addChild(slot1);
self.materialSlots.push(slot1);
var slot2 = new MaterialSlot();
slot2.x = 0;
slot2.y = -150;
slot2.slotIndex = 1;
self.addChild(slot2);
self.materialSlots.push(slot2);
var slot3 = new MaterialSlot();
slot3.x = 280;
slot3.y = -150;
slot3.slotIndex = 2;
self.addChild(slot3);
self.materialSlots.push(slot3);
var craftButtonGraphics = LK.getAsset('craftButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(craftButtonGraphics);
craftButtonGraphics.x = 0;
craftButtonGraphics.y = 250;
var craftButtonText = new Text2('CRAFT', {
size: 50,
fill: '#ffffff'
});
craftButtonText.anchor.set(0.5, 0.5);
self.addChild(craftButtonText);
craftButtonText.x = 0;
craftButtonText.y = 250;
self.craftButtonGraphics = craftButtonGraphics;
self.craftButtonGraphics.down = function (x, y, obj) {
self.attemptCraft();
};
self.attemptCraft = function () {
var selectedCount = 0;
var materials = {
blade: null,
handle: null,
guard: null
};
for (var i = 0; i < self.materialSlots.length; i++) {
if (self.materialSlots[i].materialType) {
selectedCount++;
materials[self.materialSlots[i].materialType] = true;
}
}
if (selectedCount < 3) {
tween(self.craftButtonGraphics, {
tint: 0xff0000
}, {
duration: 200,
onFinish: function onFinish() {
tween(self.craftButtonGraphics, {
tint: 0xff6b35
}, {
duration: 200
});
}
});
return;
}
if (materials.blade && materials.handle && materials.guard) {
self.successfulCraft(materials);
} else {
self.failedCraft();
}
};
self.successfulCraft = function (materials) {
LK.getSound('craftSuccess').play();
var quality = Math.floor(Math.random() * 3) + 1;
LK.setScore(LK.getScore() + quality * 10);
for (var i = 0; i < self.materialSlots.length; i++) {
self.materialSlots[i].clear();
}
storage.swordsForged = (storage.swordsForged || 0) + 1;
tween(self.craftButtonGraphics, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 300,
easing: tween.elasticOut
});
tween(self.craftButtonGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 300
});
};
self.failedCraft = function () {
for (var i = 0; i < self.materialSlots.length; i++) {
self.materialSlots[i].clear();
}
};
self.addMaterialToSlot = function (slotIndex, materialType) {
if (slotIndex < self.materialSlots.length) {
self.materialSlots[slotIndex].setMaterial(materialType);
}
};
return self;
});
var MaterialSelector = Container.expand(function () {
var self = Container.call(this);
self.materials = ['blade', 'handle', 'guard'];
self.buttons = [];
for (var i = 0; i < self.materials.length; i++) {
var buttonGraphics = LK.getAsset('materialSlot', {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(buttonGraphics);
buttonGraphics.x = -300 + i * 300;
buttonGraphics.y = 0;
var materialType = self.materials[i];
var buttonText = new Text2(materialType.toUpperCase(), {
size: 40,
fill: '#ffffff'
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
buttonText.x = -300 + i * 300;
buttonText.y = 0;
(function (index, type, graphic) {
graphic.down = function (x, y, obj) {
materialSelectorCallback(type);
LK.getSound('selectMaterial').play();
};
})(i, materialType, buttonGraphics);
self.buttons.push(buttonGraphics);
}
return self;
});
var MaterialSlot = Container.expand(function () {
var self = Container.call(this);
var slotGraphics = self.attachAsset('materialSlot', {
anchorX: 0.5,
anchorY: 0.5
});
self.materialType = null;
self.selected = false;
self.slotIndex = 0;
self.down = function (x, y, obj) {
if (!self.selected) {
self.select();
} else {
self.deselect();
}
LK.getSound('selectMaterial').play();
};
self.select = function () {
self.selected = true;
slotGraphics.tint = 0xffaa00;
tween(slotGraphics, {
tint: 0xff6b35
}, {
duration: 300
});
};
self.deselect = function () {
self.selected = false;
slotGraphics.tint = 0x8b7355;
};
self.setMaterial = function (material) {
self.materialType = material;
self.updateVisuals();
};
self.updateVisuals = function () {
if (self.materialType === 'blade') {
slotGraphics.tint = 0xc0c0c0;
} else if (self.materialType === 'handle') {
slotGraphics.tint = 0x8b4513;
} else if (self.materialType === 'guard') {
slotGraphics.tint = 0xffd700;
}
};
self.clear = function () {
self.materialType = null;
self.selected = false;
slotGraphics.tint = 0x8b7355;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
var workbench = null;
var materialSelector = null;
var craftedSwordsCollection = [];
var selectedMaterialType = null;
var selectedSlot = null;
function initializeGame() {
workbench = game.addChild(new CraftingWorkbench());
workbench.x = 1024;
workbench.y = 1000;
materialSelector = game.addChild(new MaterialSelector());
materialSelector.x = 1024;
materialSelector.y = 2400;
var scoreText = new Text2('Swords Forged: 0', {
size: 60,
fill: '#ffffff'
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
LK.playMusic('forgeMusic');
storage.swordsForged = storage.swordsForged || 0;
}
function materialSelectorCallback(materialType) {
selectedMaterialType = materialType;
for (var i = 0; i < workbench.materialSlots.length; i++) {
workbench.materialSlots[i].down = function (x, y, obj) {
if (selectedMaterialType) {
workbench.addMaterialToSlot(i, selectedMaterialType);
selectedMaterialType = null;
}
};
}
}
game.update = function () {
for (var i = 0; i < workbench.materialSlots.length; i++) {
var slot = workbench.materialSlots[i];
if (slot.selected) {
tween(slot, {
rotation: slot.rotation + 0.05
}, {
duration: 16
});
}
}
};
game.move = function (x, y, obj) {};
game.down = function (x, y, obj) {};
game.up = function (x, y, obj) {};
initializeGame(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,319 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var CraftedSword = Container.expand(function () {
+ var self = Container.call(this);
+ self.quality = 1;
+ self.materials = {
+ blade: null,
+ handle: null,
+ guard: null
+ };
+ var bladeGraphics = LK.getAsset('blade', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var handleGraphics = LK.getAsset('handle', {
+ anchorX: 0.5,
+ anchorY: 0.3
+ });
+ var guardGraphics = LK.getAsset('guard', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChild(bladeGraphics);
+ self.addChild(guardGraphics);
+ self.addChild(handleGraphics);
+ bladeGraphics.y = -80;
+ guardGraphics.y = 20;
+ handleGraphics.y = 80;
+ self.setCraftedSword = function (materials, quality) {
+ self.materials = materials;
+ self.quality = quality;
+ self.updateColor();
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 500,
+ easing: tween.elasticOut
+ });
+ };
+ self.updateColor = function () {
+ var colorIntensity = 0x333333 + self.quality * 0x111111;
+ if (self.quality >= 2) {
+ bladeGraphics.tint = 0xffaa00;
+ }
+ if (self.quality >= 3) {
+ guardGraphics.tint = 0xff00ff;
+ }
+ };
+ self.scaleX = 0.5;
+ self.scaleY = 0.5;
+ return self;
+});
+var CraftingWorkbench = Container.expand(function () {
+ var self = Container.call(this);
+ var tableGraphics = self.attachAsset('craftingTable', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var workSurfaceGraphics = LK.getAsset('workSurface', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChild(workSurfaceGraphics);
+ workSurfaceGraphics.y = -50;
+ self.materialSlots = [];
+ self.selectedSlots = [];
+ var slot1 = new MaterialSlot();
+ slot1.x = -280;
+ slot1.y = -150;
+ slot1.slotIndex = 0;
+ self.addChild(slot1);
+ self.materialSlots.push(slot1);
+ var slot2 = new MaterialSlot();
+ slot2.x = 0;
+ slot2.y = -150;
+ slot2.slotIndex = 1;
+ self.addChild(slot2);
+ self.materialSlots.push(slot2);
+ var slot3 = new MaterialSlot();
+ slot3.x = 280;
+ slot3.y = -150;
+ slot3.slotIndex = 2;
+ self.addChild(slot3);
+ self.materialSlots.push(slot3);
+ var craftButtonGraphics = LK.getAsset('craftButton', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChild(craftButtonGraphics);
+ craftButtonGraphics.x = 0;
+ craftButtonGraphics.y = 250;
+ var craftButtonText = new Text2('CRAFT', {
+ size: 50,
+ fill: '#ffffff'
+ });
+ craftButtonText.anchor.set(0.5, 0.5);
+ self.addChild(craftButtonText);
+ craftButtonText.x = 0;
+ craftButtonText.y = 250;
+ self.craftButtonGraphics = craftButtonGraphics;
+ self.craftButtonGraphics.down = function (x, y, obj) {
+ self.attemptCraft();
+ };
+ self.attemptCraft = function () {
+ var selectedCount = 0;
+ var materials = {
+ blade: null,
+ handle: null,
+ guard: null
+ };
+ for (var i = 0; i < self.materialSlots.length; i++) {
+ if (self.materialSlots[i].materialType) {
+ selectedCount++;
+ materials[self.materialSlots[i].materialType] = true;
+ }
+ }
+ if (selectedCount < 3) {
+ tween(self.craftButtonGraphics, {
+ tint: 0xff0000
+ }, {
+ duration: 200,
+ onFinish: function onFinish() {
+ tween(self.craftButtonGraphics, {
+ tint: 0xff6b35
+ }, {
+ duration: 200
+ });
+ }
+ });
+ return;
+ }
+ if (materials.blade && materials.handle && materials.guard) {
+ self.successfulCraft(materials);
+ } else {
+ self.failedCraft();
+ }
+ };
+ self.successfulCraft = function (materials) {
+ LK.getSound('craftSuccess').play();
+ var quality = Math.floor(Math.random() * 3) + 1;
+ LK.setScore(LK.getScore() + quality * 10);
+ for (var i = 0; i < self.materialSlots.length; i++) {
+ self.materialSlots[i].clear();
+ }
+ storage.swordsForged = (storage.swordsForged || 0) + 1;
+ tween(self.craftButtonGraphics, {
+ scaleX: 1.1,
+ scaleY: 1.1
+ }, {
+ duration: 300,
+ easing: tween.elasticOut
+ });
+ tween(self.craftButtonGraphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300
+ });
+ };
+ self.failedCraft = function () {
+ for (var i = 0; i < self.materialSlots.length; i++) {
+ self.materialSlots[i].clear();
+ }
+ };
+ self.addMaterialToSlot = function (slotIndex, materialType) {
+ if (slotIndex < self.materialSlots.length) {
+ self.materialSlots[slotIndex].setMaterial(materialType);
+ }
+ };
+ return self;
+});
+var MaterialSelector = Container.expand(function () {
+ var self = Container.call(this);
+ self.materials = ['blade', 'handle', 'guard'];
+ self.buttons = [];
+ for (var i = 0; i < self.materials.length; i++) {
+ var buttonGraphics = LK.getAsset('materialSlot', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.addChild(buttonGraphics);
+ buttonGraphics.x = -300 + i * 300;
+ buttonGraphics.y = 0;
+ var materialType = self.materials[i];
+ var buttonText = new Text2(materialType.toUpperCase(), {
+ size: 40,
+ fill: '#ffffff'
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ self.addChild(buttonText);
+ buttonText.x = -300 + i * 300;
+ buttonText.y = 0;
+ (function (index, type, graphic) {
+ graphic.down = function (x, y, obj) {
+ materialSelectorCallback(type);
+ LK.getSound('selectMaterial').play();
+ };
+ })(i, materialType, buttonGraphics);
+ self.buttons.push(buttonGraphics);
+ }
+ return self;
+});
+var MaterialSlot = Container.expand(function () {
+ var self = Container.call(this);
+ var slotGraphics = self.attachAsset('materialSlot', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.materialType = null;
+ self.selected = false;
+ self.slotIndex = 0;
+ self.down = function (x, y, obj) {
+ if (!self.selected) {
+ self.select();
+ } else {
+ self.deselect();
+ }
+ LK.getSound('selectMaterial').play();
+ };
+ self.select = function () {
+ self.selected = true;
+ slotGraphics.tint = 0xffaa00;
+ tween(slotGraphics, {
+ tint: 0xff6b35
+ }, {
+ duration: 300
+ });
+ };
+ self.deselect = function () {
+ self.selected = false;
+ slotGraphics.tint = 0x8b7355;
+ };
+ self.setMaterial = function (material) {
+ self.materialType = material;
+ self.updateVisuals();
+ };
+ self.updateVisuals = function () {
+ if (self.materialType === 'blade') {
+ slotGraphics.tint = 0xc0c0c0;
+ } else if (self.materialType === 'handle') {
+ slotGraphics.tint = 0x8b4513;
+ } else if (self.materialType === 'guard') {
+ slotGraphics.tint = 0xffd700;
+ }
+ };
+ self.clear = function () {
+ self.materialType = null;
+ self.selected = false;
+ slotGraphics.tint = 0x8b7355;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a1a
+});
+
+/****
+* Game Code
+****/
+var workbench = null;
+var materialSelector = null;
+var craftedSwordsCollection = [];
+var selectedMaterialType = null;
+var selectedSlot = null;
+function initializeGame() {
+ workbench = game.addChild(new CraftingWorkbench());
+ workbench.x = 1024;
+ workbench.y = 1000;
+ materialSelector = game.addChild(new MaterialSelector());
+ materialSelector.x = 1024;
+ materialSelector.y = 2400;
+ var scoreText = new Text2('Swords Forged: 0', {
+ size: 60,
+ fill: '#ffffff'
+ });
+ scoreText.anchor.set(0.5, 0);
+ LK.gui.top.addChild(scoreText);
+ LK.playMusic('forgeMusic');
+ storage.swordsForged = storage.swordsForged || 0;
+}
+function materialSelectorCallback(materialType) {
+ selectedMaterialType = materialType;
+ for (var i = 0; i < workbench.materialSlots.length; i++) {
+ workbench.materialSlots[i].down = function (x, y, obj) {
+ if (selectedMaterialType) {
+ workbench.addMaterialToSlot(i, selectedMaterialType);
+ selectedMaterialType = null;
+ }
+ };
+ }
+}
+game.update = function () {
+ for (var i = 0; i < workbench.materialSlots.length; i++) {
+ var slot = workbench.materialSlots[i];
+ if (slot.selected) {
+ tween(slot, {
+ rotation: slot.rotation + 0.05
+ }, {
+ duration: 16
+ });
+ }
+ }
+};
+game.move = function (x, y, obj) {};
+game.down = function (x, y, obj) {};
+game.up = function (x, y, obj) {};
+initializeGame();
\ No newline at end of file