Code edit (22 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Promise is not a constructor' in or related to this line: 'return new Promise(function (r, o) {' Line Number: 846
User prompt
Please fix the bug: 'Promise is not a constructor' in or related to this line: 'return new Promise(function (r, o) {' Line Number: 846
Code edit (1 edits merged)
Please save this source code
/****
* Classes
****/
// Create a new class for the anvil object
var Anvil = Container.expand(function () {
var self = Container.call(this);
// Attach 'anvil' asset to the 'Anvil' object
var anvilGraphics = self.attachAsset('anvil', {
anchorX: 0.6,
anchorY: 0.6,
alpha: 0.0 // Make the anvil fully transparent
});
// Initialize the click counter
self.clickCounter = storage.forgingSkill;
// Make the 'Anvil' object interactive
self.interactive = true;
// Define the 'down' event handler
self.down = function (x, y, obj) {
// Increment the click counter
self.clickCounter++;
// Add a 5% chance for a multi-click event to increase forging skill by 5
var shans = 0.02;
if (storage.multiclickupgrade) {
shans += 0.02;
}
if (Math.random() < 0.02) {
self.clickCounter += 5;
// Create a new asset at the center of the screen
var newAsset = game.addChild(LK.getAsset('multyclick', {
anchorX: 0.5,
anchorY: 0.5
}));
// Position the new asset at the center of the screen
newAsset.x = 2048 / 2;
newAsset.y = 2732 / 2;
// Animate the scaling of the new asset
tween(newAsset, {
scaleX: 2,
scaleY: 2
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
newAsset.destroy(); // Remove the asset after the animation
}
});
}
// Update the text object with the click counter and label
counterText.setText('Forging skill: ' + self.clickCounter);
// Persist the click counter
storage.forgingSkill = self.clickCounter;
// Change the color of the counter text based on the click counter
if (self.clickCounter >= 1000 && self.clickCounter < 2000) {
counterText.tint = 0x00FF00; // Green
} else if (self.clickCounter >= 2000 && self.clickCounter < 15000) {
counterText.tint = 0x0000FF; // Blue
} else if (self.clickCounter >= 15000 && self.clickCounter < 30000) {
counterText.tint = 0x800080; // Purple
} else if (self.clickCounter >= 30000) {
counterText.tint = 0xcc7c04; // Purple
}
if (storage.forgingSkill >= 100 && storage.help == 1) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
setHelp(1);
}
};
});
// Create a new class for the BlueCristal object
var BlueCristal = Container.expand(function () {
var self = Container.call(this);
// Attach 'blueCristal' asset to the 'BlueCristal' object
var blueCristalGraphics = self.attachAsset('blueCristal', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the blueCristal interactive
});
// Define the 'down' event handler for blueCristal
self.down = function (x, y, obj) {
// Increment the score by 1
blueCrystallScore += 1;
if (blueCrystallScore >= 100 && storage.help == 6) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
LK.setScore(blueCrystallScore);
storage.blueCrystallScore = blueCrystallScore;
// Update the score text
scoreTxt.setText('Blue Crystall: ' + LK.getScore());
scoreTxt.visible = true; // Ensure the score text remains visible
};
});
// Create a new class for the BlueCrystalIngot object
var BlueCrystalIngot = Container.expand(function () {
var self = Container.call(this);
var blueCrystalIngotGraphics = self.attachAsset('blueCrystalIngot', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true
});
self.down = function (x, y, obj) {
if (blueCrystallScore >= 10) {
blueCrystalIngotScore += 1;
storage.growthRate += 10;
growthRateText.setText('Growth rate: ' + storage.growthRate);
blueCrystalIngotScoreTxt.setText('BlueCrystalIngot: ' + blueCrystalIngotScore);
storage.blueCrystalIngotScore = blueCrystalIngotScore;
blueCrystallScore -= 10;
if (blueCrystallScore < 0) {
blueCrystallScore = 0;
}
storage.blueCrystallScore = blueCrystallScore;
LK.setScore(blueCrystallScore);
scoreTxt.setText('Blue Crystall: ' + LK.getScore());
// Добавляем проверку для квеста 9
if (blueCrystalIngotScore >= 10 && storage.help == 9) {
quest.destroy();
quest = false;
}
}
};
});
// Create a new class for the Door object
var Door = Container.expand(function () {
var self = Container.call(this);
// Attach 'Door' asset to the 'Door' object
var doorGraphics = self.attachAsset('Door', {
anchorX: 0.5,
anchorY: 0.5
});
// Make the 'Door' object interactive
self.interactive = true;
// Define the 'down' event handler
self.down = function (x, y, obj) {
if (storage.help == 2) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
if (storage.help == 8) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
LK.getSound('doors').play();
// Remove the existing hammer
hammer.destroy();
// Create a new screen
game.magicNursery = game.addChild(new Container());
// Attach 'magicNurseryBackground' asset to the 'magicNursery' object
var magicNurseryBackground = game.magicNursery.attachAsset('magicNurseryBackground', {
anchorX: 0.5,
anchorY: 0.5,
interactive: false,
// Disable interactivity to prevent blurring on click
scaleX: 2,
// Double the size horizontally
scaleY: 2 // Double the size vertically
});
// Recreate the hammer asset
magicNurseryBackground.x = 2048 / 2;
magicNurseryBackground.y = 2732 / 2;
// Attach 'ForgeOfMatter' asset to the 'magicNursery' object
var forgeOfMatter = game.magicNursery.attachAsset('ForgeOfMatter', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true,
scaleX: 3,
// Increase the size horizontally
scaleY: 3,
// Increase the size vertically
alpha: 0.0 // Make the ForgeOfMatter fully transparent
});
// Create and add a new instance of the BlueCrystalIngot class
var blueCrystalIngot = game.magicNursery.addChild(new BlueCrystalIngot()); //{P.1}
// Position the blueCrystalIngot asset in the bottom-left corner
blueCrystalIngot.x = 200 + blueCrystalIngot.width / 2;
blueCrystalIngot.y = 2500 - blueCrystalIngot.height / 2;
// Create and add a new instance of the RedCrystalIngot class
var redCrystalIngot = game.magicNursery.addChild(new RedCrystalIngot());
// Center the redCrystalIngot asset in the magicNursery screen
redCrystalIngot.x = 1300 / 2 + 350; // Move the redCristalIngot asset 100 pixels to the right
redCrystalIngot.y = 4820 / 2;
// Create and add a new instance of the GreenCrystalIngot class
var greenCrystalIngotInstance = game.magicNursery.addChild(new GreenCrystalIngot());
// Position the greenCrystalIngotInstance asset to the right of the blueCrystalIngot asset
greenCrystalIngotInstance.x = blueCrystalIngot.x + blueCrystalIngot.width + greenCrystalIngotInstance.width / 2 + 40;
greenCrystalIngotInstance.y = blueCrystalIngot.y;
// Center the growthRate asset in the magicNursery screen
var growthRate = game.magicNursery.addChild(LK.getAsset('growthRate', {
anchorX: 0.7,
anchorY: 0.7
}));
growthRate.x = 780;
growthRate.y = 1500;
// Define the 'down' event handler for ForgeOfMatter
forgeOfMatter.down = function (x, y, obj) {
// Increment the click counter
storage.growthRate++;
// Update the text object with the click counter and label
growthRateText.setText('Growth rate: ' + storage.growthRate);
if (storage.growthRate >= 50 && storage.help == 3) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
};
forgeOfMatter.x = 1100 / 1.5;
forgeOfMatter.y = 2000 / 1.5;
// Hide the game screen
gameScreen.visible = false;
// Show the forging skill counter when transitioning to magicNursery
counterText.visible = true;
// Hide the map when switching to the magic nursery screen
map.visible = false;
// Add a new object 'Door2'
var door2 = game.magicNursery.addChild(new Door2());
// Position 'Door2' to the right, between the center and the edge of the screen
door2.x = 2048 * 0.75;
door2.y = 2732 * 0.9;
setHelp(2);
setHelp(8);
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
});
// Create a new class for the Door2 object
var Door2 = Container.expand(function () {
var self = Container.call(this);
// Attach 'Door' asset to the 'Door2' object
var doorGraphics = self.attachAsset('Door', {
anchorX: 0.5,
anchorY: 0.5
});
// Make the 'Door2' object interactive
self.interactive = true;
// Define the 'down' event handler
self.down = function (x, y, obj) {
LK.getSound('doors').play();
hammer.destroy();
gameScreen.visible = true;
map.visible = true;
counterText.visible = true;
game.magicNursery.visible = false;
growthRateText.visible = true;
// Если квест 9 не завершается, показываем другие подсказки
setHelp(0);
setHelp(1);
setHelp(3);
setHelp(9);
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
});
// Create a new class for the GreenCristal object
var GreenCristal = Container.expand(function () {
var self = Container.call(this);
// Attach 'greenCristal' asset to the 'GreenCristal' object
var greenCristalGraphics = self.attachAsset('greenCristal', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the greenCristal interactive
});
// Define the 'down' event handler for greenCristal
self.down = function (x, y, obj) {
// Increment the score by 1
greenCrystallScore += 1;
LK.setScore(greenCrystallScore);
storage.greenCrystallScore = greenCrystallScore;
// Update the score text
greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore);
greenScoreTxt.visible = true; // Ensure the score text remains visible
};
});
// Create a new class for the GreenCrystalIngot object
var GreenCrystalIngot = Container.expand(function () {
var self = Container.call(this);
// Attach 'greenCrystalIngot' asset to the 'GreenCrystalIngot' object
var greenCrystalIngotGraphics = self.attachAsset('greenCrystalIngot', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the greenCrystalIngot interactive
});
// Define the 'down' event handler for greenCrystalIngot
self.down = function (x, y, obj) {
if (storage.growthRate >= 2000 && greenCrystallScore >= 15) {
storage.growthRate += 10; // Increment growth rate by 10
growthRateText.setText('Growth rate: ' + storage.growthRate); // Update the growth rate display
// Increment the GreenCrystalIngot score by 1
greenCrystalIngotScore += 1;
greenCrystalIngotScoreTxt.setText('GreenCrystalIngot: ' + greenCrystalIngotScore);
storage.greenCrystalIngotScore = greenCrystalIngotScore;
// Decrement the GreenCristal score by 100
greenCrystallScore -= 15;
if (greenCrystallScore < 0) {
greenCrystallScore = 0;
}
storage.greenCrystallScore = greenCrystallScore; // Persist the decrement
greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore);
}
};
});
var Help = Container.expand(function () {
var self = Container.call(this);
var helpGraphics = self.attachAsset('help', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true
});
self.down = function (x, y, obj) {};
});
// Create a new class for the RecipesScreen object
var RecipesScreen = Container.expand(function () {
var self = Container.call(this);
});
// Create a new class for the RedCristal object
var RedCristal = Container.expand(function () {
var self = Container.call(this);
// Attach 'redCristal' asset to the 'RedCristal' object
var redCristalGraphics = self.attachAsset('redCristal', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the redCristal interactive
});
// Define the 'down' event handler for redCristal
self.down = function (x, y, obj) {
// Increment the score by 1
redCrystallScore += 1;
LK.setScore(redCrystallScore);
storage.redCrystallScore = redCrystallScore;
// Update the score text
redScoreTxt.setText('Red Crystall: ' + redCrystallScore);
redScoreTxt.visible = true; // Ensure the score text remains visible
};
});
// Create a new class for the RedCrystalIngot object
var RedCrystalIngot = Container.expand(function () {
var self = Container.call(this);
// Attach 'redCristalIngot' asset to the 'RedCrystalIngot' object
var redCrystalIngotGraphics = self.attachAsset('redCristalIngot', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the redCrystalIngot interactive
});
// Define the 'down' event handler for redCrystalIngot
self.down = function (x, y, obj) {
// Decrement the RedCristal score by 100
if (storage.growthRate >= 9000 && redCrystallScore >= 20) {
// Increment the RedCrystalIngot score by 1
redCrystalIngotScore += 1;
storage.growthRate += 20; // Increment growth rate by 20
growthRateText.setText('Growth rate: ' + storage.growthRate); // Update the growth rate display
redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + redCrystalIngotScore);
storage.redCrystalIngotScore = redCrystalIngotScore;
redCrystallScore -= 20;
storage.redCrystallScore = redCrystallScore; // Persist the decrement
redScoreTxt.setText('Red Crystall: ' + redCrystallScore);
}
};
});
var RedCrystalTwoHandedSword = Container.expand(function () {
var self = Container.call(this);
// Attach 'redcrystaltwo-handedswordrecipe' asset to the 'RedCrystalTwoHandedSword' object
var redCrystalTwoHandedSwordGraphics = self.attachAsset('redcrystaltwo-handedswordrecipe', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the redCrystalTwoHandedSword interactive
});
});
/****
* Initialize Game
****/
// Create a new text object to display the click counter
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
//{0.1}
function _typeof2(o) {
"@babel/helpers - typeof";
return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof2(o);
}
function _regeneratorRuntime() {
"use strict";
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
_regeneratorRuntime = function _regeneratorRuntime() {
return e;
};
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function define(t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == _typeof2(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function value(t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) {
throw Error("Generator is already running");
}
if (o === s) {
if ("throw" === i) {
throw a;
}
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) {
continue;
}
return u;
}
}
if ("next" === n.method) {
n.sent = n._sent = n.arg;
} else if ("throw" === n.method) {
if (o === h) {
throw o = s, n.arg;
}
n.dispatchException(n.arg);
} else {
"return" === n.method && n.abrupt("return", n.arg);
}
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) {
continue;
}
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) {
return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
}
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) {
return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
}
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) {
return r.call(e);
}
if ("function" == typeof e.next) {
return e;
}
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) {
if (n.call(e, o)) {
return next.value = e[o], next.done = !1, next;
}
}
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(_typeof2(e) + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) {
r.push(n);
}
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) {
return next.value = t, next.done = !1, next;
}
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function reset(e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) {
for (var r in this) {
"t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
}
}
},
stop: function stop() {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) {
throw t.arg;
}
return this.rval;
},
dispatchException: function dispatchException(e) {
if (this.done) {
throw e;
}
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) {
return handle("end");
}
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) {
return handle(i.catchLoc, !0);
}
if (this.prev < i.finallyLoc) {
return handle(i.finallyLoc);
}
} else if (c) {
if (this.prev < i.catchLoc) {
return handle(i.catchLoc, !0);
}
} else {
if (!u) {
throw Error("try statement without catch or finally");
}
if (this.prev < i.finallyLoc) {
return handle(i.finallyLoc);
}
}
}
}
},
abrupt: function abrupt(t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function complete(t, e) {
if ("throw" === t.type) {
throw t.arg;
}
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function finish(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) {
return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
}
},
"catch": function _catch(t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw Error("illegal catch attempt");
},
delegateYield: function delegateYield(e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
function asyncGeneratorStep(n, t, e, r, o, a, c) {
try {
var i = n[a](c),
u = i.value;
} catch (n) {
return void e(n);
}
i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
return function () {
var t = this,
e = arguments;
return new LK.Promise(function (r, o) {
var a = n.apply(t, e);
function _next(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
}
function _throw(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
}
_next(void 0);
});
};
}
function loadModules() {
return _loadModules.apply(this, arguments);
}
function _loadModules() {
_loadModules = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var tween, storage;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 1;
_context.next = 5;
return LK.import("@upit/tween.v1");
case 5:
tween = _context.sent;
_context.next = 9;
return LK.import("@upit/storage.v1", {
forgingSkill: 0,
growthRate: 0,
blueCrystallScore: 0,
greenCrystalIngotScore: 0,
blueSwords: 0,
greenAxes: 0,
redCrystalTwoHandedSwords: 0,
blueswordsclick: 0,
greenAxeClicks: 0,
redCrystalTwoHandedSwordClicks: 0,
automineblueCrystallClicked: false,
autominegreenCrystallClicked: false,
autogrowthRateClicked: false,
multiclickupgrade: false,
theBlacksmithsApprentice: false,
automineredCrystallClicked: false,
lastgametime: 0,
help: 0
});
case 9:
storage = _context.sent;
console.log("Модули загружены успешно!");
_context.next = 18;
break;
case 14:
_context.prev = 14;
_context.t0 = _context["catch"](1);
console.error("Ошибка при загрузке модулей:", _context.t0);
case 18:
case "end":
return _context.stop();
}
}
}, _callee, null, [[1, 14]]);
}));
return _loadModules.apply(this, arguments);
}
loadModules();
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
var helpObj = false;
var helpText = false;
var substrate = false;
var quest = false;
function setHelp(idhelp) {
if (idhelp < storage.help && helpObj) {
helpObj.destroy();
substrate.destroy();
helpText.destroy();
}
if (storage.help == idhelp && !quest && typeof helparray[storage.help] != 'undefined') {
if (helpObj) {
helpObj.destroy();
substrate.destroy();
helpText.destroy();
}
helpObj = new Help();
if (helparray && helparray[storage.help]) {
helpObj.x = helparray[storage.help].coords[0];
helpObj.y = helparray[storage.help].coords[1];
helpText = new Text2(helparray[storage.help].text, {
size: 50,
fill: helparray[storage.help].color
});
}
if (helparray[storage.help].coords[0] < 2048 / 2) {
helpText.x = helparray[storage.help].coords[0] + helpObj.width / 2 + 10;
} else {
helpText.x = helparray[storage.help].coords[0] - helpObj.width / 2 - 10 - helpText.width;
}
if (helparray[storage.help].coords[1] < 2732 / 2) {
helpText.y = helparray[storage.help].coords[1] + helpObj.height / 2 + 10;
} else {
helpText.y = helparray[storage.help].coords[1] - helpObj.height / 2 - 10;
}
var questtext = helparray[storage.help].text;
if (typeof helparray[storage.help].quest != 'undefined') {
questtext = helparray[storage.help].quest;
}
if (helparray[storage.help]) {
quest = new Text2(' QUEST\n' + questtext, {
size: 50,
fill: helparray[storage.help].color
});
}
quest.x = 625;
quest.y = 100;
game.addChild(quest);
substrate = game.attachAsset('substrate', {
anchorX: 0.5,
anchorY: 0.5,
alpha: helparray[storage.help].substrate.alfa
});
substrate.x = helpText.x + helpText.width / 2;
substrate.y = helpText.y + helpText.height / 2;
substrate.width = helpText.width;
substrate.height = helparray[storage.help].substrate.height;
game.addChild(helpObj);
var _animateHelp = function animateHelp(helpObj) {
tween(helpObj, {
scaleX: 0.5,
scaleY: 0.5
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(helpObj, {
scaleX: 1,
scaleY: 1
}, {
duration: 1500,
easing: tween.easeInOut,
onFinish: function onFinish() {
_animateHelp(helpObj);
}
});
}
});
};
_animateHelp(helpObj);
game.addChild(substrate);
game.addChild(helpText);
// Убираем автоматическое завершение квеста для квеста 11
helpObj.down = function (x, y, obj) {
storage.help++;
helpObj.destroy();
substrate.destroy();
helpText.destroy();
};
return helpObj;
}
}
function setquest() {
if (storage.help > 1 && !quest) {
if (helparray && helparray[storage.help]) {
var questtext = helparray[storage.help].text;
if (typeof helparray[storage.help].quest != 'undefined') {
questtext = helparray[storage.help].quest;
}
}
if (helparray[storage.help]) {
quest = new Text2(' QUEST\n' + questtext, {
size: 50,
fill: helparray[storage.help].color
});
}
quest.x = 625;
quest.y = 100;
game.addChild(quest);
}
}
var helparray = [{
'coords': [850, 2732 / 2 + 450],
'text': 'Click on the anvil to improve \nyour Forging skill by 100!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 110
}
}, {
'coords': [2048 * 0.75, 2732 * 0.9],
'text': 'Now go to the foundry!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 55
}
}, {
'coords': [720, 2732 / 2 + 100],
'text': 'Click on the foundry and raise the \nGrowth rate to 50!\nThen go out to the forge!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 160
}
}, {
'coords': [390, 2732 - 300],
'text': 'This is a map you can use to \ntravel the world!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 110
}
}, {
'coords': [885, 1220],
'text': 'Go to the crystal mine\n for resources!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 55
}
}, {
'coords': [1100, 1000],
'text': 'There are three types of \ncrystals growing in \nthe mine, now we need to \nget 100 blue crystals to forge \nour first sword!',
'color': 'white',
'substrate': {
'alfa': 0.6,
'height': 275
}
}, {
'coords': [1030, 1350],
'text': 'Go back to the forge!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 55
}
}, {
'coords': [2048 * 0.75, 2732 * 0.9],
'text': "It's time to melt the crystals!",
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 55
}
}, {
'coords': [310, 2732 - 320],
'text': "Click to melt the crystals! \npay attention to the counters on top! \nMelting crystals increases your Growth rate! \nCome back to the forge when you've smelted \n10 blue crystalingots.",
'color': 'white',
//'quest': 'go 10 crystal',
'substrate': {
'alfa': 0.5,
'height': 275
}
}, {
'coords': [980, 2732 - 300],
'text': "This is your blacksmith's book!",
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 55
}
}, {
'coords': [630, 1050],
'text': 'Follow the recipe and click on \nthe sword 100 clicks to forge it! \nThen exploreother recipes and \nreturn to the map!',
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 235
}
}, {
'coords': [780, 1500],
'text': "Let's go to the city to sell our sword! \nThe main thing is not to get lost on the way!",
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 110
}
}, {
'coords': [1500, 1300],
'text': "Wow, you're already here! \nCome to the store!",
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 110
}
}, {
'coords': [1028, 2732 - 280],
'text': "Click here and you will \nsell all forged weapons! \nConvenient, isn't it!? \nYou'll find something else \ninteresting to wear in the store.",
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 275
}
}, {
'coords': [1024, 1800],
'text': "Improve your skills! Forge \ndifferent weapons! become the most \nfamous blacksmith in these parts, \nand the richest of course!",
'color': 'white',
'substrate': {
'alfa': 0.5,
'height': 220
}
}];
var goldScore = storage.goldScore || 0;
var goldScoreTxt = new Text2('Gold: ' + goldScore, {
size: 50,
fill: 0xFFFFFF
});
goldScoreTxt.anchor.set(0, 0);
goldScoreTxt.y = 0;
if (typeof counterText !== 'undefined') {
goldScoreTxt.x = counterText.width + 10; // Position to the right of the Forging skill counter
} else {
goldScoreTxt.x = 550; // Default position if counterText is undefined
}
LK.gui.topLeft.addChild(goldScoreTxt);
var redCrystalIngotScore = storage.redCrystalIngotScore || 0;
var redCrystalIngotScoreTxt = new Text2('RedCrystalIngot: ' + redCrystalIngotScore, {
size: 50,
fill: 0xFFFFFF
});
redCrystalIngotScoreTxt.anchor.set(1, 0);
redCrystalIngotScoreTxt.y = 100; // Position below the GreenCrystalIngot score
LK.gui.topRight.addChild(redCrystalIngotScoreTxt);
var mineInsideBackground;
var blueCrystallScore = storage.blueCrystallScore || 0;
var automineblueCrystallClicked = storage.automineblueCrystallClicked;
var autominegreenCrystallClicked = storage.autominegreenCrystallClicked;
var autominegreenCrystallClicked = storage.autominegreenCrystallClicked;
var automineredCrystallClicked = storage.automineredCrystallClicked;
var autogrowthRateClicked = storage.autogrowthRateClicked;
var scoreTxt = new Text2('Blue Crystall: ' + blueCrystallScore, {
size: 50,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.y = 100; // Move the score text 100 pixels down
LK.gui.topLeft.addChild(scoreTxt);
var greenCrystallScore = storage.greenCrystallScore || 0;
var greenScoreTxt = new Text2('Green Crystall: ' + greenCrystallScore, {
size: 50,
fill: 0xFFFFFF
});
greenScoreTxt.anchor.set(0, 0);
greenScoreTxt.y = 150; // Position below the Blue Crystall score
LK.gui.topLeft.addChild(greenScoreTxt);
var greenCrystalIngotScore = storage.greenCrystalIngotScore || 0;
var greenCrystalIngotScoreTxt = new Text2('GreenCrystalIngot: ' + greenCrystalIngotScore, {
size: 50,
fill: 0xFFFFFF
});
greenCrystalIngotScoreTxt.anchor.set(1, 0);
greenCrystalIngotScoreTxt.y = 50; // Position below the BlueCrystalIngot score
LK.gui.topRight.addChild(greenCrystalIngotScoreTxt);
var blueCristal; // Define blueCristal in the global scope to fix the reference error
var greenCristal; // Define greenCristal in the global scope to fix the reference error
var redCristal; // Define redCristal in the global scope to fix the reference error
var blueCrystalIngotScore = storage.blueCrystalIngotScore || 0; //{1Z.1}
var redCrystallScore = storage.redCrystallScore || 0;
var blueCrystalIngotScoreTxt = new Text2('BlueCrystalIngot: ' + blueCrystalIngotScore, {
size: 50,
fill: 0xFFFFFF
});
blueCrystalIngotScoreTxt.anchor.set(1, 0);
blueCrystalIngotScoreTxt.y = 0;
LK.gui.topRight.addChild(blueCrystalIngotScoreTxt);
var redScoreTxt = new Text2('Red Crystall: ' + redCrystallScore, {
size: 50,
fill: 0xFFFFFF
});
redScoreTxt.anchor.set(0, 0);
redScoreTxt.y = 200; // Position below the Green Crystall score
LK.gui.topLeft.addChild(redScoreTxt);
var map = game.addChild(LK.getAsset('Map', {
anchorX: 0.5,
anchorY: 0.5
}));
map.x = 400;
map.y = 2450;
map.visible = false; // Initialize the map as invisible
// Make the map interactive
map.interactive = true;
// Define the 'down' event handler for the map
map.down = function (x, y, obj) {
setHelp(-1);
hammer.destroy();
if (storage.forgingSkill >= 10 && storage.help == 4) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
// Hide the map asset when transitioning to the map screen
LK.getSound('mapaudio').play();
map.visible = false;
// Hide the mineInsideBackground if it exists
if (mineInsideBackground) {
mineInsideBackground.visible = false;
mineInsideBackground.destroy(); // Ensure it is completely removed
}
if (redCristal) {
redCristal.visible = false; //{1Z.1}
redCristal.destroy(); // Ensure it is completely removed
} //{1Z.3}
if (blueCristal) {
blueCristal.visible = false; //{1X.1}
blueCristal.destroy(); // Ensure it is completely removed
} //{1X.3}
if (greenCristal) {
greenCristal.visible = false; //{1Y.1}
greenCristal.destroy(); // Ensure it is completely removed
} //{1Y.3}
var mapScreen = game.addChild(new Container());
// Attach 'mapbackground' asset to the mapScreen
var mapBackground = mapScreen.attachAsset('mapbackground', {
anchorX: 0.5,
//{1h.1}
anchorY: 0.5,
//{1h.2}
interactive: false // Ensure mapbackground does not block cursor interaction
}); //{1h.3}
// Add 'citymap' asset to the center of the screen
var cityMap = mapScreen.attachAsset('citymap', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the 'citymap' asset interactive
});
cityMap.x = -250;
cityMap.y = 160;
// Define the 'down' event handler for cityMap
cityMap.down = function (x, y, obj) {
hammer.destroy();
setHelp(-1);
// Create a new screen without background
var isolatedScreen = game.addChild(new Container());
// Hide the current map screen
mapScreen.visible = false;
console.log(storage.help);
if (storage.help == 12) {
quest.destroy();
quest = false;
}
// Add 'citybackground' asset to the center of the isolatedScreen
var cityBackground = isolatedScreen.attachAsset('citybackground', {
anchorX: 0.5,
anchorY: 0.5
});
cityBackground.x = 0;
cityBackground.y = 0;
// Add 'map' asset to the isolatedScreen
var mapAsset = isolatedScreen.attachAsset('Map', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the 'map' asset interactive
});
mapAsset.x = -650;
mapAsset.y = 1100;
// Define the 'down' event handler for mapAsset
mapAsset.down = function (x, y, obj) {
// Transition back to the citymap screen
isolatedScreen.visible = false; // Hide the current isolated screen
mapScreen.visible = true; // Show the citymap screen
cityBackground.visible = false; // Ensure citybackground is hidden
mapBackground.visible = true;
};
// Add 'shop' asset to the center of the isolatedScreen
var shop = isolatedScreen.attachAsset('shop', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the 'shop' asset interactive
});
shop.x = 490;
shop.y = -20;
setHelp(12);
// Define the 'down' event handler for shop
shop.down = function (x, y, obj) {
hammer.destroy();
LK.getSound('shopin').play();
// Create a new screen without background
var shopScreen = game.addChild(new Container());
// Hide the current isolated screen
isolatedScreen.visible = false;
// Position the shopScreen at the center
shopScreen.x = 2048 / 2;
shopScreen.y = 2732 / 2;
if (storage.help == 13) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
// Add 'new tools' asset to the center of the shopScreen
var newTools = shopScreen.attachAsset('newTools', {
anchorX: 0.5,
anchorY: 0.5
});
newTools.x = -650;
newTools.y = 1100;
newTools.interactive = true; // Make the newTools asset interactive
newTools.down = function (x, y, obj) {
hammer.destroy();
setHelp(-1);
// Create a new isolated screen without a background
var isolatedScreen = game.addChild(new Container());
// Attach 'newToolsBackground' asset to the isolatedScreen
var newToolsBackground = isolatedScreen.attachAsset('newToolsBackground', {
anchorX: 0.5,
anchorY: 0.5
});
newToolsBackground.x = 0;
newToolsBackground.y = 0;
if (!storage.theBlacksmithsApprentice) {
// Attach 'Theblacksmithsapprentice' asset to the center of the isolatedScreen
var theBlacksmithsApprentice = isolatedScreen.attachAsset('Theblacksmithsapprentice', {
anchorX: 0.5,
//{4C.1}
anchorY: 0.5,
//{4C.2}
interactive: true // Make the Theblacksmithsapprentice interactive
}); //{4C.3}
theBlacksmithsApprentice.x = 400;
theBlacksmithsApprentice.y = 200;
theBlacksmithsApprentice.clicked = storage.theBlacksmithsApprentice;
// Define the 'down' event handler for theBlacksmithsApprentice
theBlacksmithsApprentice.down = function (x, y, obj) {
// Increment forgingSkill by 1 every second
if (goldScore >= 1500 && !theBlacksmithsApprentice.clicked) {
goldScore -= 1500;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
theBlacksmithsApprentice.clicked = true;
var intervalId = LK.setInterval(function () {
storage.forgingSkill += 1;
counterText.setText('Forging skill: ' + storage.forgingSkill);
}, 1000);
// Store the intervalId in the theBlacksmithsApprentice object for potential future use
theBlacksmithsApprentice.intervalId = intervalId;
storage.theBlacksmithsApprentice = true;
theBlacksmithsApprentice.visible = false;
apprenticeText.visible = false;
apprenticeCostText.visible = false;
}
};
// Add text "The blacksmith's apprentice +1" below the Theblacksmithsapprentice asset
var apprenticeText = new Text2("The blacksmith's \napprentice +1", {
size: 50,
fill: 0x030303
});
apprenticeText.anchor.set(0.5, 0.5);
apprenticeText.x = theBlacksmithsApprentice.x;
apprenticeText.y = theBlacksmithsApprentice.y + 170; // Position below the Theblacksmithsapprentice asset
isolatedScreen.addChild(apprenticeText);
// Add text "1500G" below the 'The blacksmith's apprentice +1' text
var apprenticeCostText = new Text2('1500G', {
size: 50,
fill: 0x030303
});
apprenticeCostText.anchor.set(0.5, 0.5);
apprenticeCostText.x = apprenticeText.x;
apprenticeCostText.y = apprenticeText.y + 70; // Position below the 'The blacksmith's apprentice +1' text
isolatedScreen.addChild(apprenticeCostText);
}
// Attach 'newToolsout' asset to the center of the isolatedScreen
var newToolsOut = isolatedScreen.attachAsset('newToolsout', {
anchorX: 0.5,
anchorY: 0.5
});
newToolsOut.x = 0;
newToolsOut.y = 1100;
newToolsOut.interactive = true; // Make the newToolsOut asset interactive//{4F.1}
if (!storage.automineblueCrystallClicked) {
// Attach 'automineblueCrystall' asset to the center of the isolatedScreen
var automineblueCrystall = isolatedScreen.attachAsset('automineblueCrystall', {
anchorX: 0.5,
//{4F.2}
anchorY: 0.5,
//{4F.3}
interactive: true // Make the automineblueCrystall interactive
}); //{4F.4}
automineblueCrystall.x = -400;
automineblueCrystall.y = -600;
automineblueCrystall.clicked = storage.automineblueCrystallClicked;
// Define the 'down' event handler for automineblueCrystall
automineblueCrystall.down = function (x, y, obj) {
// Increment blueCrystallScore by 1 every second
if (goldScore >= 500 && !automineblueCrystall.clicked) {
automineblueCrystall.clicked = true;
goldScore -= 500;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
var intervalId = LK.setInterval(function () {
blueCrystallScore += 1;
LK.setScore(blueCrystallScore);
storage.blueCrystallScore = blueCrystallScore;
scoreTxt.setText('Blue Crystall: ' + LK.getScore());
}, 1000);
// Store the intervalId in the automineblueCrystall object for potential future use
automineblueCrystall.intervalId = intervalId;
storage.automineblueCrystallClicked = true; // Persist the click state
automineblueCrystall.visible = false;
mineBlueCrystallText.visible = false;
mineBlueCrystallCostText.visible = false;
}
};
// Add text "Mine Blue Crystall +1" below the automineblueCrystall asset
var mineBlueCrystallText = new Text2('Mine Blue Crystall +1', {
size: 50,
fill: 0x030303
});
mineBlueCrystallText.anchor.set(0.5, 0.5);
mineBlueCrystallText.x = automineblueCrystall.x;
mineBlueCrystallText.y = automineblueCrystall.y + 150; // Position below the automineblueCrystall asset
isolatedScreen.addChild(mineBlueCrystallText);
// Add text "500G" below the 'Mine Blue Crystall +1' text
var mineBlueCrystallCostText = new Text2('500G', {
size: 50,
//{58.1}
fill: 0x030303 //{58.2}
}); //{58.3}
mineBlueCrystallCostText.anchor.set(0.5, 0.5);
mineBlueCrystallCostText.x = mineBlueCrystallText.x;
mineBlueCrystallCostText.y = mineBlueCrystallText.y + 50; // Position below the 'Mine Blue Crystall +1' text
isolatedScreen.addChild(mineBlueCrystallCostText);
}
if (!storage.autominegreenCrystallClicked) {
// Attach 'autominegreenCrystall' asset to the center of the isolatedScreen
var autominegreenCrystall = isolatedScreen.attachAsset('autominegreenCrystall', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the autominegreenCrystall interactive
});
autominegreenCrystall.x = -400;
autominegreenCrystall.y = -200;
// Define the 'down' event handler for autominegreenCrystall
autominegreenCrystall.clicked = storage.autominegreenCrystallClicked;
autominegreenCrystall.down = function (x, y, obj) {
// Increment greenCrystallScore by 1 every second
if (goldScore >= 1000 && !autominegreenCrystall.clicked) {
autominegreenCrystall.clicked = true;
goldScore -= 1000;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
var intervalId = LK.setInterval(function () {
greenCrystallScore += 1;
storage.greenCrystallScore = greenCrystallScore;
greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore);
}, 1000);
// Store the intervalId in the autominegreenCrystall object for potential future use
autominegreenCrystall.intervalId = intervalId;
storage.autominegreenCrystallClicked = true; // Persist the click state
autominegreenCrystall.visible = false;
mineGreenCrystallText.visible = false;
mineGreenCrystallCostText.visible = false;
}
};
// Add text "Mine Green Crystall +1" below the autominegreenCrystall asset
var mineGreenCrystallText = new Text2('Mine Green Crystall +1', {
size: 50,
fill: 0x030303
});
mineGreenCrystallText.anchor.set(0.5, 0.5);
mineGreenCrystallText.x = autominegreenCrystall.x;
mineGreenCrystallText.y = autominegreenCrystall.y + 150; // Lower the position below the autominegreenCrystall asset
isolatedScreen.addChild(mineGreenCrystallText);
// Add text "1000G" below the 'Mine Green Crystall +1' text
var mineGreenCrystallCostText = new Text2('1000G', {
size: 50,
//{5c.1}
fill: 0x030303 //{5c.2}
}); //{5c.3}
mineGreenCrystallCostText.anchor.set(0.5, 0.5);
mineGreenCrystallCostText.x = mineGreenCrystallText.x;
mineGreenCrystallCostText.y = mineGreenCrystallText.y + 50; // Position below the 'Mine Green Crystall +1' text
isolatedScreen.addChild(mineGreenCrystallCostText);
}
if (!storage.automineredCrystallClicked) {
// Attach 'automineredCrystall' asset to the center of the isolatedScreen
var automineredCrystall = isolatedScreen.attachAsset('automineredCrystall', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the automineredCrystall interactive
});
automineredCrystall.x = -400;
automineredCrystall.y = 200;
// Define the 'down' event handler for automineredCrystall
automineredCrystall.down = function (x, y, obj) {
// Increment redCrystallScore by 1 every second
if (goldScore >= 2000 && !automineredCrystall.clicked) {
automineredCrystall.clicked = true;
goldScore -= 2000;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
var intervalId = LK.setInterval(function () {
redCrystallScore += 1;
storage.redCrystallScore = redCrystallScore;
redScoreTxt.setText('Red Crystall: ' + redCrystallScore);
}, 1000);
// Store the intervalId in the automineredCrystall object for potential future use
automineredCrystall.intervalId = intervalId;
storage.automineredCrystallClicked = true; // Persist the click state
automineredCrystall.visible = false;
mineRedCrystallText.visible = false;
mineRedCrystallCostText.visible = false;
}
};
// Add text "Mine Red Crystall +1" below the automineredCrystall asset
var mineRedCrystallText = new Text2('Mine Red Crystall +1', {
size: 50,
fill: 0x030303
});
mineRedCrystallText.anchor.set(0.5, 0.5);
mineRedCrystallText.x = automineredCrystall.x;
mineRedCrystallText.y = automineredCrystall.y + 140; // Position below the automineredCrystall asset
isolatedScreen.addChild(mineRedCrystallText);
// Add text "2000G" below the 'Mine Red Crystall +1' text
var mineRedCrystallCostText = new Text2('2000G', {
size: 50,
//{55.1}
fill: 0x030303 //{55.2}
}); //{55.3}
mineRedCrystallCostText.anchor.set(0.5, 0.5);
mineRedCrystallCostText.x = mineRedCrystallText.x;
mineRedCrystallCostText.y = mineRedCrystallText.y + 50; // Position below the 'Mine Red Crystall +1' text
isolatedScreen.addChild(mineRedCrystallCostText);
}
if (!storage.multiclickupgrade) {
// Attach 'multiclickupgrade' asset to the center of the isolatedScreen
var multiclickupgrade = isolatedScreen.attachAsset('multiclickupgrade', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the multiclickupgrade interactive
});
multiclickupgrade.x = 400;
multiclickupgrade.y = -200;
// Define the 'down' event handler for multiclickupgrade
multiclickupgrade.down = function (x, y, obj) {
// Deduct 700 gold when clicked
if (goldScore >= 700 && !storage.multiclickupgrade) {
goldScore -= 700;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
storage.multiclickupgrade = true;
multiclickupgrade.visible = false;
increasedChanceText.visible = false;
increasedChanceCostText.visible = false;
}
};
// Add text "Increased chance of successful forging +5%" below the multiclickupgrade asset
var increasedChanceText = new Text2('Increased chance of \nsuccessful forging +5%', {
size: 50,
fill: 0x030303
});
increasedChanceText.anchor.set(0.5, 0.5);
increasedChanceText.x = multiclickupgrade.x;
increasedChanceText.y = multiclickupgrade.y + 170; // Position below the multiclickupgrade asset
isolatedScreen.addChild(increasedChanceText);
// Add text "700G" below the 'Increased chance of successful forging +5%' text
var increasedChanceCostText = new Text2('700G', {
size: 50,
//{4Z.1}
fill: 0x030303 //{4Z.2}
}); //{4Z.3}
increasedChanceCostText.anchor.set(0.5, 0.5);
increasedChanceCostText.x = increasedChanceText.x;
increasedChanceCostText.y = increasedChanceText.y + 70; // Position below the 'Increased chance of successful forging +5%' text
isolatedScreen.addChild(increasedChanceCostText);
}
if (!storage.autogrowthRateClicked) {
// Attach 'autogrowthRate' asset to the center of the isolatedScreen
var autogrowthRate = isolatedScreen.attachAsset('autogrowthRate', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the autogrowthRate interactive
});
autogrowthRate.x = 400;
autogrowthRate.y = -600;
autogrowthRate.clicked = storage.autogrowthRateClicked;
// Define the 'down' event handler for autogrowthRate
autogrowthRate.down = function (x, y, obj) {
// Increment growthRateCounter by 1 every second
if (goldScore >= 2000 && !autogrowthRate.clicked) {
autogrowthRate.clicked = true;
goldScore -= 2000;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
var intervalId = LK.setInterval(function () {
growthRateCounter += 1;
growthRateText.setText('Growth rate: ' + growthRateCounter);
storage.growthRate = growthRateCounter;
}, 1000);
// Store the intervalId in the autogrowthRate object for potential future use
autogrowthRate.intervalId = intervalId;
storage.autogrowthRateClicked = true; // Persist the click state
autogrowthRate.visible = false;
automaticMeltingText.visible = false;
automaticMeltingCostText.visible = false;
}
};
// Add text "Automatic melting +1" below the autogrowthRate asset
var automaticMeltingText = new Text2('Automatic melting +1', {
size: 50,
fill: 0x030303
});
automaticMeltingText.anchor.set(0.5, 0.5);
automaticMeltingText.x = autogrowthRate.x;
automaticMeltingText.y = autogrowthRate.y + 150; // Position below the autogrowthRate asset
isolatedScreen.addChild(automaticMeltingText);
// Add text "2000G" below the 'Automatic melting +1' text
var automaticMeltingCostText = new Text2('2000G', {
size: 50,
fill: 0x030303
});
automaticMeltingCostText.anchor.set(0.5, 0.5);
automaticMeltingCostText.x = automaticMeltingText.x;
automaticMeltingCostText.y = automaticMeltingText.y + 50; // Position below the 'Automatic melting +1' text
isolatedScreen.addChild(automaticMeltingCostText);
}
newToolsOut.down = function (x, y, obj) {
LK.getSound('booksaudio').play();
// Transition to the newTools screen
isolatedScreen.visible = false; // Hide the current isolated screen
shopScreen.visible = true; // Show the newTools screen
};
// Hide the current shop screen
shopScreen.visible = false;
// Position the isolatedScreen at the center
isolatedScreen.x = 2048 / 2;
isolatedScreen.y = 2732 / 2;
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
// Add 'shopout' asset to the shopScreen
var shopBackground = shopScreen.attachAsset('shopbackground', {
anchorX: 0.5,
anchorY: 0.5
});
shopBackground.x = 0;
shopBackground.y = 0;
// Add 'new buildings' asset to the center of the shopScreen
var newBuildings = shopScreen.attachAsset('sellweapons', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the 'sellweapons' asset interactive
});
// Define the 'down' event handler for sellweapons
newBuildings.down = function (x, y, obj) {
if (storage.help == 14) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
// Сохраняем начальные значения для проверки условия
var initialBlueSwords = storage.blueSwords;
var initialGreenAxes = storage.greenAxes;
var initialRedTwoHandedSwords = storage.redCrystalTwoHandedSwords;
// Увеличиваем золото и обнуляем запасы оружия
goldScore += storage.blueSwords * 50;
storage.blueSwords = 0;
goldScore += storage.greenAxes * 150;
storage.greenAxes = 0;
goldScore += storage.redCrystalTwoHandedSwords * 600;
storage.redCrystalTwoHandedSwords = 0;
goldScoreTxt.setText('Gold: ' + goldScore);
storage.goldScore = goldScore;
// Проверяем наличие оружия до обнуления и запускаем звук с анимацией
if (initialBlueSwords > 0 || initialGreenAxes > 0 || initialRedTwoHandedSwords > 0) {
LK.getSound('gold').play();
// Создаём 5 монет, летящих вверх
for (var i = 0; i < 5; i++) {
var goldAsset = game.addChild(LK.getAsset('goldstore', {
anchorX: 0.5,
anchorY: 0.5
}));
goldAsset.x = shopScreen.x + newBuildings.x + (Math.random() * 50 - 25); // Случайное смещение по X
goldAsset.y = shopScreen.y + newBuildings.y;
(function (goldAsset) {
var speed = 3 + Math.random() * 3; // Случайная скорость от 3 до 6
goldAsset.update = function () {
goldAsset.y -= speed;
};
LK.setTimeout(function () {
goldAsset.destroy();
}, 1000);
})(goldAsset);
}
}
};
newBuildings.x = 0;
newBuildings.y = 1100;
// Add 'shopout' asset to the shopScreen
var shopOut = shopScreen.attachAsset('shopout', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the 'shopout' asset interactive
});
shopOut.x = 650;
shopOut.y = 1100;
// Define the 'down' event handler for shopOut
shopOut.down = function (x, y, obj) {
setHelp(14);
LK.getSound('doors').play();
shopScreen.visible = false; // Hide the current shop screen
mapBackground.visible = false; // Ensure the mapbackground asset is hidden
mapScreen.visible = true; // Show the citymap screen
isolatedScreen.visible = true; // Ensure the isolated screen is visible
};
setHelp(13);
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
// Position the isolatedScreen at the center
isolatedScreen.x = 2048 / 2;
isolatedScreen.y = 2732 / 2;
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
// Attach 'anvilmap' asset to the mapScreen on the top layer
var anvilMap = mapScreen.attachAsset('anvilmap', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true
});
// Attach 'mine' asset to the mapScreen on the top layer
var mine = mapScreen.attachAsset('mine', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true
});
mine.x -= 150; // Move the mine asset 150 pixels to the left
mine.y -= 150; // Move the mine asset 150 pixels higher
// Make mine interactive and define the 'down' event handler
mine.down = function (x, y, obj) {
if (storage.help == 5) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
hammer.destroy();
setHelp(-1);
// Create a new screen for the mine
var mineScreen = game.addChild(new Container());
// Make the map visible after transitioning to the mine screen
map.visible = true;
// Hide the current map screen
mapScreen.visible = false;
// Disable the active background
background.visible = false;
// Attach 'mineinsidebackground' asset to the mineScreen on the bottom layer
mineInsideBackground = mineScreen.attachAsset('mineinsidebackground', {
anchorX: 0.5,
anchorY: 0.5,
interactive: false,
zIndex: -1 // Ensure it is on the bottom layer
});
setHelp(5);
// Create and add a new instance of the RedCristal class
redCristal = mineScreen.addChild(new RedCristal());
// Position the redCristal asset
redCristal.x -= 510; // Move 100 pixels to the left
redCristal.y += 490; // Move 100 pixels lower
// Create and add a new instance of the GreenCristal class
greenCristal = mineScreen.addChild(new GreenCristal());
// Position the greenCristal asset
greenCristal.x -= -510; // Move 100 pixels to the left
greenCristal.y += 10; // Move 100 pixels lower
// Create and add a new instance of the BlueCristal class
blueCristal = mineScreen.addChild(new BlueCristal());
// Position the blueCristal asset
blueCristal.x += 490; // Move 100 pixels to the right
blueCristal.y += -60; // Move 100 pixels lower
// Position the blueCristal asset
blueCristal.x -= 410; // Move 100 pixels to the left
blueCristal.y -= 310; // Move 100 pixels lower
// Position the mineScreen at the center
mineScreen.x = 2048 / 2; //{1E.1}
mineScreen.y = 2732 / 2; //{1E.2}
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
// Make anvilMap interactive and define the 'down' event handler
anvilMap.down = function (x, y, obj) {
if (storage.help == 7) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
setHelp(-1);
// Show the Anvil screen
gameScreen.visible = true;
// Make the map visible after transitioning to the anvil map
map.visible = true;
// Attach 'gameScreenBackground' asset to the 'gameScreen' object
gameScreenBackground = gameScreen.attachAsset('gameScreenBackground', {
anchorX: 0.5,
anchorY: 0.5
});
setHelp(0);
setHelp(1);
setHelp(7);
setHelp(10);
// Attach 'recipes' asset to the 'gameScreenBackground' object
var recipes = gameScreenBackground.attachAsset('recipes', {
anchorX: 0.5,
anchorY: 0.5
});
// Center the 'recipes' asset on the gameScreenBackground
recipes.x = gameScreenBackground.width / 2 - 1050; //{3u.1}
recipes.y = gameScreenBackground.height / 2 + 150; //{3v.1}
// Hide the mineinsidebackground when exiting the mine screen
if (mineInsideBackground) {
mineInsideBackground.visible = false;
mineInsideBackground.destroy(); // Ensure it is completely removed
}
if (mineInsideBackground) {
mineInsideBackground.visible = false;
mineInsideBackground.destroy(); // Ensure it is completely removed
}
if (blueCristal) {
blueCristal.visible = false; //{1X.1}
blueCristal.destroy(); // Ensure it is completely removed
} //{1X.3}
if (greenCristal) {
greenCristal.visible = false; //{1Y.1}
greenCristal.destroy(); // Ensure it is completely removed
} //{1Y.3}
if (redCristal) {
redCristal.visible = false; //{1Z.1}
redCristal.destroy(); // Ensure it is completely removed
} //{1Z.3}
// Hide the map screen
mapScreen.visible = false;
// Show the counter display
counterText.visible = true;
// Show the Growth rate counter when transitioning to anvilmap
growthRateText.visible = true;
};
setHelp(-1);
// Hide the current game screen
gameScreen.visible = false;
// Disable the active background
background.visible = false;
// Attach a new background or asset to the mapScreen if needed
// Example: mapScreen.attachAsset('newBackground', { anchorX: 0.5, anchorY: 0.5 });
// Position the mapScreen at the center
mapScreen.x = 2048 / 2;
mapScreen.y = 2732 / 2;
setHelp(3);
setHelp(4);
setHelp(6);
if (storage.help == 11 && quest) {
quest = false;
}
setHelp(11);
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
var growthRateText;
var growthRateCounter = storage.growthRate; // Initialize growth rate counter from storage
var background = game.addChild(new Container());
background.width = 2048;
background.height = 2732;
background.x = 2048 / 2;
background.y = 2732 / 2;
var backgroundGraphics = background.attachAsset('background', {
anchorX: 0.5,
anchorY: 0.5
});
var gameScreen = game.addChild(new Container()); //{1h.1}
var newGame = game.addChild(new Container());
newGame.x = 2650 / 2 + 100; //{3d.1}
newGame.y = 2680 * 4.2 / 5; //{3d.1}
// Attach 'title' asset to the start screen
var title = game.addChild(LK.getAsset('title', {
anchorX: 0.5,
anchorY: 0.5
}));
title.x = 2048 / 2;
title.y = 3200 / 5;
// Attach 'newGameText' asset to the 'New Game' object
var newGameText = newGame.attachAsset('newGameText', {
anchorX: 0.5,
anchorY: 0.5,
stroke: 0xFFFFFF,
// White color
strokeThickness: 5 // 5px thickness
});
// Attach 'continueText' asset to the game object
var continueText = game.addChild(LK.getAsset('continueText', {
anchorX: 0.5,
anchorY: 0.5
}));
continueText.x = newGame.x - newGame.width - 500; // Increase the distance between newGame and continueText
continueText.y = newGame.y; // Align vertically with newGame
continueText.interactive = true;
continueText.down = function (x, y, obj) {
startgame();
};
var greenAxeClicks = storage.greenAxeClicks;
var redCrystalTwoHandedSwordClicks = storage.redCrystalTwoHandedSwordClicks;
function startgame() {
setquest();
title.destroy();
hammer.destroy();
// Create a new game screen
gameScreen = game.addChild(new Container());
gameScreen.x = 2048 / 2;
gameScreen.y = 2732 / 2;
// Attach 'gameScreenBackground' asset to the 'gameScreen' object
gameScreenBackground = gameScreen.attachAsset('gameScreenBackground', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach 'recipes' asset to the 'gameScreenBackground' object
var recipes = gameScreenBackground.attachAsset('recipes', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the recipes asset interactive
});
// Remove 'continueText' asset when transitioning to new game
// Define the 'down' event handler for recipes
recipes.down = function (x, y, obj) {
setHelp(-1);
hammer.destroy();
LK.getSound('booksaudio').play();
// Create a new screen for the recipes
var recipesScreen = game.addChild(new RecipesScreen());
map.visible = false; // Hide the map asset after transitioning to the recipes screen
if (storage.help == 10) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
// Add 'recipesbackground' asset to the center of the screen
var recipesBackground = recipesScreen.attachAsset('recipesbackground', {
anchorX: 0.5,
anchorY: 0.5
});
recipesBackground.x = 2048 / 2;
recipesBackground.y = 2932 / 2;
// Add 'bluecrystalswordrecipe' asset to the center of the screen
var bluecrystalswordrecipe = recipesScreen.attachAsset('bluecrystalswordrecipe', {
anchorX: 0.5,
anchorY: 0.5
});
bluecrystalswordrecipe.x = 1248 / 2;
bluecrystalswordrecipe.y = 2132 / 2;
bluecrystalswordrecipe.down = function () {
if (storage.forgingSkill >= 10 && storage.blueCrystalIngotScore >= 10) {
storage.blueswordsclick += 1;
}
if (storage.blueswordsclick >= 10) {
storage.blueswordsclick = 0;
storage.blueSwords += 1;
blueSwordsText.setText(storage.blueSwords.toString());
storage.forgingSkill += 100;
counterText.setText('Forging skill: ' + storage.forgingSkill);
if (storage.blueCrystalIngotScore >= 10) {
storage.blueCrystalIngotScore -= 10;
blueCrystalIngotScore = storage.blueCrystalIngotScore;
blueCrystalIngotScoreTxt.setText('BlueCrystalIngot: ' + blueCrystalIngotScore);
}
// Проверка квеста 11: срабатывает после создания меча
if (storage.help == 11 && storage.blueSwords >= 1) {
if (quest && typeof quest.destroy === 'function') {
quest.destroy();
}
quest = false;
}
}
blueCrystalSwordClicks.setText('(current ' + storage.blueswordsclick + ')');
};
setHelp(10);
// Add 'Swords in stock' text asset to the center of the screen
var swordsInStockText = new Text2('Swords in stock', {
size: 50,
fill: 0x000000 // Black color
});
swordsInStockText.anchor.set(0.5, 0.5);
swordsInStockText.x = 1248 / 2;
swordsInStockText.y = 2732 / 2 + 400;
var axeInStockText = new Text2('Axe in stock', {
size: 50,
fill: 0x000000 // Black color
});
axeInStockText.anchor.set(0.5, 0.5);
axeInStockText.x = 2848 / 2;
axeInStockText.y = 2732 / 2 + 400; // Align with 'Swords in stock' text
recipesScreen.addChild(axeInStockText);
recipesScreen.addChild(swordsInStockText);
// Display the number of blue swords in stock
var blueSwordsText = new Text2(storage.blueSwords.toString(), {
size: 50,
fill: 0x000000 // Black color
});
blueSwordsText.anchor.set(0.5, 0.5);
blueSwordsText.x = 1248 / 2;
blueSwordsText.y = swordsInStockText.y + 80; // Position below the 'Swords in stock' text
recipesScreen.addChild(blueSwordsText);
// Add 'Axe of Green Crystals recipe' asset to the center of the screen
var axeOfGreenCrystalsRecipe = recipesScreen.attachAsset('axeOfGreenCrystalsRecipe', {
anchorX: 0.5,
anchorY: 0.5
});
axeOfGreenCrystalsRecipe.x = 2848 / 2;
axeOfGreenCrystalsRecipe.y = 2132 / 2;
axeOfGreenCrystalsRecipe.down = function () {
if (storage.forgingSkill >= 4000 && storage.greenCrystalIngotScore >= 15) {
greenAxeClicks += 1;
}
if (greenAxeClicks >= 15) {
greenAxeClicks = 0;
storage.greenAxes += 1; // Увеличиваем количество зелёных топоров в хранилище
greenAxesText.setText(storage.greenAxes.toString());
storage.forgingSkill += 150; // Добавляем 150 к навыку ковки
counterText.setText('Forging skill: ' + storage.forgingSkill); // Обновляем отображение навыка ковки
if (storage.greenCrystalIngotScore >= 15) {
storage.greenCrystalIngotScore -= 15; // Вычитаем 15 из greenCrystalIngotScore
greenCrystalIngotScore = storage.greenCrystalIngotScore; // Сохраняем новое значение в хранилище
greenCrystalIngotScoreTxt.setText('GreenCrystalIngot: ' + greenCrystalIngotScore); // Обновляем текстовое отображение
}
}
greenAxeClicksText.setText('(current ' + greenAxeClicks + ')');
storage.greenAxeClicks = greenAxeClicks;
};
// Add 'Axe in stock' text asset to the center of the screen
var axeInStockText = new Text2('Axe in stock', {
size: 50,
fill: 0x000000 // Black color
});
axeInStockText.anchor.set(0.5, 0.5);
axeInStockText.x = 2848 / 2;
recipesScreen.addChild(axeInStockText);
// Display the number of green axes in stock
var greenAxesText = new Text2(storage.greenAxes.toString(), {
size: 50,
fill: 0x000000 // Black color
});
greenAxesText.anchor.set(0.5, 0.5);
greenAxesText.x = 2848 / 2;
greenAxesText.y = swordsInStockText.y + 80; // Position below the 'Swords in stock' text
recipesScreen.addChild(greenAxesText);
// Add 'Green Axe clicks' text asset to the center of the screen
var greenAxeClicksText = new Text2('(current ' + greenAxeClicks + ')', {
size: 50,
fill: 0x000000,
alpha: 0.5 // Set transparency
});
greenAxeClicksText.anchor.set(0.5, 0.5);
greenAxeClicksText.x = 2848 / 2 - 150;
greenAxeClicksText.y = 2732 / 2 + 330;
recipesScreen.addChild(greenAxeClicksText);
// Add 'Blue crystal sword description' text asset to the center of the screen
var blueCrystalSwordDescription = new Text2('"Blue Crystal Sword"\n Forging Skill 100.\n 10 blue crystal ingots +\n 10 clicks on the recipe', {
size: 50,
fill: 0x000000,
alpha: 0.5 // Set transparency
});
blueCrystalSwordDescription.anchor.set(0.5, 0.5);
blueCrystalSwordDescription.x = 1248 / 2;
blueCrystalSwordDescription.y = 2732 / 2 + 200;
recipesScreen.addChild(blueCrystalSwordDescription);
var blueCrystalSwordClicks = new Text2('(current ' + storage.blueswordsclick + ')', {
size: 50,
fill: 0x000000,
alpha: 0.5 // Set transparency
});
blueCrystalSwordClicks.anchor.set(0.5, 0.5);
blueCrystalSwordClicks.x = 1248 / 2 - 150;
blueCrystalSwordClicks.y = 2732 / 2 + 330;
recipesScreen.addChild(blueCrystalSwordClicks);
// Add 'axeOfGreenCrystals description' text asset to the center of the screen
var axeOfGreenCrystalsDescription = new Text2('"Axe of Green Crystals"\n Forging Skill 4k.\n 15 green crystal ingots +\n 15 clicks on the recipe', {
size: 50,
fill: 0x000000,
alpha: 0.5 // Set transparency
});
axeOfGreenCrystalsDescription.anchor.set(0.5, 0.5);
axeOfGreenCrystalsDescription.x = 2890 / 2;
axeOfGreenCrystalsDescription.y = 2732 / 2 + 200;
recipesScreen.addChild(axeOfGreenCrystalsDescription);
// Add 'recipesnext' asset to the center of the screen
var recipesNext = recipesScreen.attachAsset('recipesnext', {
anchorX: 0.5,
anchorY: 0.5 //{4F.1}
}); //{4G.1}
recipesNext.x = 3248 / 2;
recipesNext.y = 5000 / 2;
// Make the 'recipesnext' asset interactive
recipesNext.interactive = true;
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
// Define the 'down' event handler for recipesNext
recipesNext.down = function (x, y, obj) {
// Create a new screen for the next section
var nextScreen = game.addChild(new Container());
LK.getSound('paper').play();
// Remove the current background
recipesScreen.visible = false;
// Add 'recipesnextbackgr1' asset to the center of the screen
var recipesNextBackgr1 = nextScreen.attachAsset('recipesnextbackgr1', {
anchorX: 0.5,
anchorY: 0.5
});
recipesNextBackgr1.x = 2048 / 2;
recipesNextBackgr1.y = 2732 / 2;
// Remove the existing hammer
hammer.destroy();
// Add 'recipesprev' asset to the center of the screen
var recipesPrev = nextScreen.attachAsset('recipesprev', {
anchorX: 0.5,
anchorY: 0.5,
interactive: true // Make the 'recipesprev' asset interactive
});
recipesPrev.x = 888 / 2;
recipesPrev.y = 5000 / 2;
// Define the 'down' event handler for recipesPrev
recipesPrev.down = function (x, y, obj) {
LK.getSound('paper').play();
// Transition back to the recipes screen
nextScreen.visible = false; // Hide the current screen
recipesScreen.visible = true; // Show the recipes screen
};
// Add 'blueingotrecipe' asset to the center of the screen
var blueingotrecipe = nextScreen.attachAsset('blueingotrecipe', {
anchorX: 0.5,
anchorY: 0.5
});
blueingotrecipe.x = 1450;
blueingotrecipe.y = 750;
// Add text under the 'blueingotrecipe' asset
var blueIngotRecipeText = new Text2('"BlueCrystalIngot"\n Growth rate 100.\n 10 Blue Crystal', {
size: 50,
fill: 0x000000 // Black color
});
blueIngotRecipeText.anchor.set(0.5, 0.5);
blueIngotRecipeText.x = blueingotrecipe.x;
blueIngotRecipeText.y = blueingotrecipe.y + 150; // Position below the 'blueingotrecipe' asset
nextScreen.addChild(blueIngotRecipeText);
// Add 'greeningotrecipe' asset to the center of the screen
var greeningotrecipe = nextScreen.attachAsset('greeningotrecipe', {
anchorX: 0.5,
anchorY: 0.5
});
greeningotrecipe.x = 1450;
greeningotrecipe.y = 1150;
// Add text under the 'greeningotrecipe' asset
var greeningotrecipeText = new Text2('"Greeningotrecipe"\n Growth rate 2000.\n 10 Green Crystal', {
size: 50,
fill: 0x000000 // Black color
});
greeningotrecipeText.anchor.set(0.5, 0.5);
greeningotrecipeText.x = greeningotrecipe.x;
greeningotrecipeText.y = greeningotrecipe.y + 160; // Position below the 'greeningotrecipe' asset
nextScreen.addChild(greeningotrecipeText);
// Add 'redingotrecipe' asset to the center of the screen
var redingotrecipe = nextScreen.attachAsset('redingotrecipe', {
anchorX: 0.5,
anchorY: 0.5
});
redingotrecipe.x = 1450;
redingotrecipe.y = 1500;
// Add text under the 'redingotrecipe' asset
var redingotrecipeText = new Text2('"Redingotrecipe"\n Growth rate 7000.\n 10 Green Crystal', {
size: 50,
fill: 0x000000 // Black color
});
redingotrecipeText.anchor.set(0.5, 0.5);
redingotrecipeText.x = redingotrecipe.x;
redingotrecipeText.y = redingotrecipe.y + 150; // Position below the 'redingotrecipe' asset
nextScreen.addChild(redingotrecipeText);
// Add 'redcrystaltwo-handedswordrecipe' asset to the center of the screen
var redCrystalTwoHandedSwordRecipe = nextScreen.attachAsset('redcrystaltwo-handedswordrecipe', {
anchorX: 0.5,
anchorY: 0.5
});
redCrystalTwoHandedSwordRecipe.x = 1248 / 2;
redCrystalTwoHandedSwordRecipe.y = 2132 / 2;
redCrystalTwoHandedSwordRecipe.down = function () {
if (storage.forgingSkill >= 10000 && storage.redCrystalIngotScore >= 75) {
redCrystalTwoHandedSwordClicks += 1;
}
if (redCrystalTwoHandedSwordClicks >= 20) {
redCrystalTwoHandedSwordClicks = 0;
storage.redCrystalTwoHandedSwords += 1; // Увеличение количества мечей в storage
redCrystalTwoHandedSwordsText.setText(storage.redCrystalTwoHandedSwords.toString());
storage.forgingSkill += 200; // Добавление опыта кузнечного дела
counterText.setText('Forging skill: ' + storage.forgingSkill);
storage.redCrystalIngotScore -= 75; // Вычитаем 75 инготов из storage
redCrystalIngotScore = storage.redCrystalIngotScore; // Обновляем локальную переменную
redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + redCrystalIngotScore); // Обновляем отображение
}
redCrystalTwoHandedSwordClicksText.setText('(current ' + redCrystalTwoHandedSwordClicks + ')');
storage.redCrystalTwoHandedSwordClicks = redCrystalTwoHandedSwordClicks;
};
// Add 'Red Crystal Two-Handed Sword in stock' text asset to the center of the screen
var redCrystalTwoHandedSwordsText = new Text2(storage.redCrystalTwoHandedSwords.toString(), {
size: 50,
fill: 0x000000 // Black color
});
redCrystalTwoHandedSwordsText.anchor.set(0.5, 0.5);
redCrystalTwoHandedSwordsText.x = 1248 / 2;
var redCrystalTwoHandedSwordDescription = new Text2('"Redcrystaltwo-\n handedswordrecipe"\n Forging Skill 10k.\n 75 red crystal ingots +\n 20 clicks on the anvil', {
size: 50,
fill: 0x000000 // Black color
});
redCrystalTwoHandedSwordDescription.anchor.set(0.5, 0.5);
redCrystalTwoHandedSwordDescription.x = 1248 / 2;
redCrystalTwoHandedSwordDescription.y = 2732 / 2 + 100;
nextScreen.addChild(redCrystalTwoHandedSwordDescription);
// Add 'Two-hand Swords in stock' text asset to the center of the screen
var twoHandSwordsInStockText = new Text2('Two-hand Swords in stock', {
size: 50,
fill: 0x000000 // Black color
});
twoHandSwordsInStockText.anchor.set(0.5, 0.5);
twoHandSwordsInStockText.x = 1248 / 2;
twoHandSwordsInStockText.y = redCrystalTwoHandedSwordDescription.y + 250; // Position below the description
nextScreen.addChild(twoHandSwordsInStockText);
redCrystalTwoHandedSwordsText.y = redCrystalTwoHandedSwordDescription.y + 300; // Position further below the description
nextScreen.addChild(redCrystalTwoHandedSwordsText);
// Add a new text box with black text under the 'redcrystaltwo-handedswordrecipe' asset
var redCrystalTwoHandedSwordClicksText = new Text2('(current ' + redCrystalTwoHandedSwordClicks + ')', {
size: 50,
fill: 0x000000,
alpha: 0.5
});
redCrystalTwoHandedSwordClicksText.anchor.set(0.5, 0.5);
redCrystalTwoHandedSwordClicksText.x = 1248 / 2 - 135;
redCrystalTwoHandedSwordClicksText.y = 2732 / 2 + 260;
nextScreen.addChild(redCrystalTwoHandedSwordClicksText);
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
};
// Attach 'recipesout' asset to the 'RecipesScreen' object
var recipesOutGraphics = recipesScreen.attachAsset('recipesout', {
anchorX: 0.5,
anchorY: 0.5
});
// Center the 'recipesout' asset on the screen
recipesOutGraphics.x = 2048 / 2;
recipesOutGraphics.y = 2732 / 2 + 1100;
// Make the 'recipesout' asset interactive
recipesOutGraphics.interactive = true;
LK.getSound('paper').play();
// Define the 'down' event handler for recipesOutGraphics
recipesOutGraphics.down = function (x, y, obj) {
// Hide the 'recipesout' asset
recipesOutGraphics.visible = false;
// Transition to the 'gameScreen'
gameScreen.visible = true;
// Make the map visible after transitioning to the recipesout screen
map.visible = true;
// Hide the current recipes screen
recipesScreen.visible = false;
setHelp(0);
setHelp(1);
setHelp(3);
setHelp(7);
};
// Hide the current game screen
gameScreen.visible = false;
};
// Center the 'recipes' asset on the gameScreenBackground
recipes.x = gameScreenBackground.width / 2 - 1050; //{3u.1}
recipes.y = gameScreenBackground.height / 2 + 150; //{3v.1}
// Make the map visible when 'New Game' is clicked
map.visible = true;
// Hide the main menu
newGame.visible = false;
continueText.visible = false;
// Disable the background
background.visible = false;
// Create a new instance of the Anvil class
var anvil = gameScreen.addChild(new Anvil());
// Initialize the anvil click counter from storage
anvil.clickCounter = storage.forgingSkill;
counterText.setText('Forging skill: ' + anvil.clickCounter);
// Position 'The anvil' at the location of the anvil on the gameScreenBackground
anvil.x = gameScreenBackground.x - 100; // Adjust x-coordinate based on the anvil's position on the background
anvil.y = gameScreenBackground.y + 500;
// Add a new object 'Magic Nursery'
var magicNursery = gameScreen.addChild(new Door());
// Position 'Magic Nursery' to the left and up
magicNursery.x = 2048 / 4;
magicNursery.y = 2732 / 2.5;
setHelp(0);
setHelp(1);
setHelp(3);
setHelp(7);
setHelp(9);
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
}
// Make the 'New Game' object clickable
newGame.interactive = true;
newGame.down = function (x, y, obj) {
if (newgameclearInterval.length > 0) {
for (var i = 0; i < newgameclearInterval.length; i++) {
LK.clearInterval(newgameclearInterval[i]);
}
}
storage.automineblueCrystallClicked = false;
storage.autominegreenCrystallClicked = false;
storage.automineredCrystallClicked = false;
storage.autogrowthRateClicked = false;
storage.theBlacksmithsApprentice = false;
storage.multiclickupgrade = false;
storage.help = 0;
// Reset all saved data
storage.forgingSkill = 0;
storage.growthRate = 0;
storage.blueCrystalIngotScore = 0;
storage.blueCrystallScore = 0;
storage.greenCrystalIngotScore = 0;
storage.redCrystallScore = 0;
storage.redCrystalIngotScore = 0;
storage.greenCrystallScore = 0;
storage.greenCrystalIngotScore = 0;
storage.blueSwords = 0;
storage.goldScore = 0;
storage.blueswordsclick = 0;
storage.greenAxeClicks = 0;
storage.redCrystalTwoHandedSwordClicks = 0;
// Reset current variables
redCrystalIngotScore = 0;
blueCrystallScore = 0;
greenCrystallScore = 0;
greenCrystalIngotScore = 0;
blueCrystalIngotScore = 0;
redCrystallScore = 0;
growthRateCounter = 0;
goldScore = 0;
growthRateText.setText('Growth rate: ' + storage.growthRate);
counterText.setText('Forging skill: ' + storage.forgingSkill);
scoreTxt.setText('Blue Crystall: ' + blueCrystallScore);
greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore);
redScoreTxt.setText('Red Crystall: ' + redCrystallScore);
blueCrystalIngotScoreTxt.setText('BlueCrystalIngot: ' + storage.blueCrystalIngotScore);
greenCrystalIngotScoreTxt.setText('GreenCrystalIngot: ' + storage.greenCrystalIngotScore);
redCrystalIngotScoreTxt.setText('RedCrystalIngot: ' + storage.redCrystallScore);
goldScoreTxt.setText('Gold: ' + goldScore);
startgame();
};
// Create a new text object to display the click counter
var counterText = new Text2('Forging skill: ' + storage.forgingSkill, {
size: 50,
fill: 0xFFFFFF
});
// Position the text object at the top right corner of the screen
counterText.anchor.set(0, 0);
LK.gui.topLeft.addChild(counterText);
counterText.y = 0;
counterText.x = 0;
growthRateText = new Text2('Growth rate: ' + growthRateCounter, {
size: 50,
fill: 0xFFFFFF
});
growthRateText.anchor.set(0, 0);
LK.gui.topLeft.addChild(growthRateText);
growthRateText.y = counterText.height - 6; // Move the growth rate text 2 pixels higher
growthRateText.x = 0;
// Initialize hammer asset
var hammer;
hammer = game.addChild(LK.getAsset('hammer', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1
}));
// Function to make the hammer follow the mouse/touch position
function updateHammerPosition(x, y) {
if (hammer) {
hammer.x = x;
hammer.y = y;
}
}
var newgameclearInterval = [];
if (automineblueCrystallClicked) {
var intervalId = LK.setInterval(function () {
blueCrystallScore += 1;
LK.setScore(blueCrystallScore);
storage.blueCrystallScore = blueCrystallScore;
scoreTxt.setText('Blue Crystall: ' + LK.getScore());
}, 1000);
newgameclearInterval.push(intervalId);
}
if (autominegreenCrystallClicked) {
var intervalId = LK.setInterval(function () {
greenCrystallScore += 1;
storage.greenCrystallScore = greenCrystallScore;
greenScoreTxt.setText('Green Crystall: ' + greenCrystallScore);
}, 1000);
newgameclearInterval.push(intervalId);
}
if (automineredCrystallClicked) {
var intervalId = LK.setInterval(function () {
redCrystallScore += 1;
storage.redCrystallScore = redCrystallScore;
redScoreTxt.setText('Red Crystall: ' + redCrystallScore);
}, 1000);
newgameclearInterval.push(intervalId);
}
if (autogrowthRateClicked) {
var intervalId = LK.setInterval(function () {
growthRateCounter += 1;
growthRateText.setText('Growth rate: ' + growthRateCounter);
storage.growthRate = growthRateCounter;
}, 1000);
newgameclearInterval.push(intervalId);
}
if (storage.theBlacksmithsApprentice) {
var intervalId = LK.setInterval(function () {
storage.forgingSkill += 1;
counterText.setText('Forging skill: ' + storage.forgingSkill);
}, 1000);
newgameclearInterval.push(intervalId);
}
var seconds = Math.floor(Date.now() / 1000);
seconds = seconds - storage.lastgametime;
if (seconds * 60 * 5 > 18000) {
seconds = 18000;
}
if (seconds > 0) {
if (storage.automineblueCrystallClicked) {
blueCrystallScore += seconds;
storage.blueCrystallScore += seconds;
}
if (storage.autominegreenCrystallClicked) {
greenCrystallScore += seconds;
storage.greenCrystallScore += seconds;
}
if (storage.automineredCrystallClicked) {
redCrystallScore += seconds;
storage.redCrystallScore += seconds;
}
if (storage.autogrowthRateClicked) {
growthRateCounter += seconds;
storage.growthRate += seconds;
}
if (storage.theBlacksmithsApprentice) {
storage.forgingSkill += seconds;
}
}
var intervalId = LK.setInterval(function () {
storage.lastgametime = Math.floor(Date.now() / 1000);
}, 1000);
// Make the cursor follow the mouse/touch position
game.move = function (x, y, obj) {
updateHammerPosition(x, y);
};
// Animate cursor rotation on click
game.down = function (x, y, obj) {
LK.getSound('hammer').play();
tween(hammer, {
rotation: -Math.PI / 2
}, {
duration: 125,
easing: tween.easeInOut,
onFinish: function onFinish() {
// Create stars around the hammer for 0.25 seconds
for (var i = 0; i < 5; i++) {
var star = game.addChild(LK.getAsset('star', {
anchorX: 0.5,
anchorY: 0.5
}));
star.x = hammer.x - hammer.width / 2 + Math.random() * 100 - 25;
star.y = hammer.y + hammer.height / 2 + Math.random() * 100 - 25;
(function (star) {
// Make the star move upwards
star.update = function () {
star.y -= 5; // Move the star upwards by 5 pixels per frame
if (star.x < hammer.x) {
star.x += 2; // Move the star slightly to the right if on the left side of the hammer
} else {
star.x -= 2; // Move the star slightly to the left if on the right side of the hammer
}
};
LK.setTimeout(function () {
star.destroy();
}, 250);
})(star);
}
tween(hammer, {
rotation: 0
}, {
duration: 125,
easing: tween.easeInOut
});
}
});
}; ===================================================================
--- original.js
+++ change.js