From 4f99695b0a44c63c60aa5902e4f8e1d274c368e2 Mon Sep 17 00:00:00 2001 From: Harley White Date: Sun, 17 Jan 2021 15:15:52 -0500 Subject: [PATCH 1/4] Fixed Decimals not being kept on reset --- changelog.md | 5 ++++- js/Demo/demoLayers.js | 2 +- js/components.js | 2 +- js/utils.js | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 7c2e8ba..3f10b25 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # The Modding Tree changelog: +## v2.3.6 - +- Fixed keeping Decimal values on reset. + ## v2.3.5 - 12/21/20 - Added resetTime, which tracks the time since a layer prestiged or was reset. - A layer node will be highlighted red if one of its subtabs is highlighted red. @@ -8,7 +11,7 @@ - Other minor fixes. ## v2.3.4 - 12/16/20 -- Added an node image feature. +- Added a node image feature. - Resource display now always shows the amount of the currency the layer's gain is based on. - Added spacing between tree nodes. - Another attempt to fix tooltip flickering. diff --git a/js/Demo/demoLayers.js b/js/Demo/demoLayers.js index 1513239..a7b6415 100644 --- a/js/Demo/demoLayers.js +++ b/js/Demo/demoLayers.js @@ -200,7 +200,7 @@ addLayer("c", { }, }, doReset(resettingLayer){ // Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row. - if(layers[resettingLayer].row > this.row) layerDataReset(this.layer) // This is actually the default behavior + if(layers[resettingLayer].row > this.row) layerDataReset(this.layer, ["points"]) // This is actually the default behavior }, layerShown() {return true}, // Condition for when layer appears on the tree automate() { diff --git a/js/components.js b/js/components.js index a479ae5..ddf7b40 100644 --- a/js/components.js +++ b/js/components.js @@ -218,7 +218,7 @@ function loadVue() { Vue.component('main-display', { props: ['layer'], template: ` -
You have

{{formatWhole(player[layer].points)}}

{{tmp[layer].resource}},

+
You have

{{formatWhole(player[layer].points)}}

{{tmp[layer].resource}},

` }) diff --git a/js/utils.js b/js/utils.js index 8a61a6a..ab1c52f 100644 --- a/js/utils.js +++ b/js/utils.js @@ -663,7 +663,8 @@ function goBack() { function layOver(obj1, obj2) { for (let x in obj2) { - if (obj2[x] instanceof Object) layOver(obj1[x], obj2[x]); + if (obj2[x] instanceof Decimal) obj1[x] = new Decimal(obj2[x]) + else if (obj2[x] instanceof Object) layOver(obj1[x], obj2[x]); else obj1[x] = obj2[x]; } } From 25fc1ef35e00ccf7fb54b188ab87c6ea4da72c3c Mon Sep 17 00:00:00 2001 From: Harley White Date: Thu, 21 Jan 2021 02:58:27 -0500 Subject: [PATCH 2/4] Simplified code in shouldNotify --- js/game.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/js/game.js b/js/game.js index ccd7f56..d60dc8b 100644 --- a/js/game.js +++ b/js/game.js @@ -101,11 +101,9 @@ function shouldNotify(layer){ return true } } - if (tmp[layer].shouldNotify){ - return tmp[layer].shouldNotify - } - else - return false + + return tmp[layer].shouldNotify + } function canReset(layer) From 384269c593452555649d498cfc22abf986486316 Mon Sep 17 00:00:00 2001 From: Harley White Date: Thu, 21 Jan 2021 17:52:09 -0500 Subject: [PATCH 3/4] Performance improvements and good tweaks --- changelog.md | 3 +++ docs/challenges.md | 3 ++- js/Demo/demoLayers.js | 21 ++++++++++----------- js/game.js | 8 ++++++-- js/technical/temp.js | 2 +- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/changelog.md b/changelog.md index 3f10b25..6cd0616 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,9 @@ # The Modding Tree changelog: ## v2.3.6 - +- Performance improvements. +- Added support for bulk challenge completions. +- "Best" is updated automatically. - Fixed keeping Decimal values on reset. ## v2.3.5 - 12/21/20 diff --git a/docs/challenges.md b/docs/challenges.md index aa417fb..ae52433 100644 --- a/docs/challenges.md +++ b/docs/challenges.md @@ -34,7 +34,8 @@ Individual Challenges can have these features: - goalDescription: A description of the win condition for the challenge. It can also be a function that returns updating text. Can use basic HTML. (Optional if using the old goal system) -- canComplete(): A function that returns true if you meet the win condition for the challenge. (Optional if using the old goal system) +- canComplete(): A function that returns true if you meet the win condition for the challenge. Returning a number will allow bulk completing the challenge. + (Optional if using the old goal system) - rewardDescription: A description of the reward's effect. *You will also have to implement the effect where it is applied.* It can also be a function that returns updating text. Can use basic HTML. diff --git a/js/Demo/demoLayers.js b/js/Demo/demoLayers.js index a7b6415..8f9050b 100644 --- a/js/Demo/demoLayers.js +++ b/js/Demo/demoLayers.js @@ -17,7 +17,7 @@ addLayer("c", { color: "#4BDC13", requires: new Decimal(10), // Can be a function that takes requirement increases into account resource: "lollipops", // Name of prestige currency - baseResource: "candies", // Name of resource prestige is based on + baseResource: "points", // Name of resource prestige is based on baseAmount() {return player.points}, // Get the current amount of baseResource type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have exponent: 0.5, // Prestige currency exponent @@ -83,11 +83,10 @@ addLayer("c", { completionLimit: 3, challengeDescription() {return "Makes the game 0% harder
"+challengeCompletions(this.layer, this.id) + "/" + this.completionLimit + " completions"}, unlocked() { return player[this.layer].best.gt(0) }, - goalDescription: 'Have 20 lollipops I guess', - goal: new Decimal("20"), - currencyDisplayName: "lollipops", // Use if using a nonstandard currency - currencyInternalName: "points", // Use if using a nonstandard currency - currencyLayer: this.layer, // Leave empty if not in a layer + goalDescription: 'Have 20 points I guess', + canComplete() { + return player.points.gte(20) + }, rewardEffect() { let ret = player[this.layer].points.add(1).tetrate(0.02) return ret; @@ -108,7 +107,7 @@ addLayer("c", { unlocked() { return player[this.layer].unlocked }, // The upgrade is only visible when this is true }, 12: { - description: "Candy generation is faster based on your unspent Lollipops.", + description: "Point generation is faster based on your unspent Lollipops.", cost: new Decimal(1), unlocked() { return (hasUpgrade(this.layer, 11))}, effect() { // Calculate bonuses from the upgrade. Can return a single value or an object with multiple values @@ -380,7 +379,7 @@ addLayer("f", { color: "#FE0102", requires() {return new Decimal(10)}, resource: "farm points", - baseResource: "candies", + baseResource: "points", baseAmount() {return player.points}, type: "static", exponent: 0.5, @@ -393,7 +392,7 @@ addLayer("f", { branches: ["c"], // When this layer appears, a branch will appear from this layer to any layers here. Each entry can be a pair consisting of a layer id and a color. tooltipLocked() { // Optional, tooltip displays when the layer is locked - return ("This weird farmer dinosaur will only see you if you have at least " + this.requires() + " candies. You only have " + formatWhole(player.points)) + return ("This weird farmer dinosaur will only see you if you have at least " + this.requires() + " points. You only have " + formatWhole(player.points)) }, midsection: [ "blank", ['display-image', 'https://images.beano.com/store/24ab3094eb95e5373bca1ccd6f330d4406db8d1f517fc4170b32e146f80d?auto=compress%2Cformat&dpr=1&w=390'], @@ -401,8 +400,8 @@ addLayer("f", { ], // The following are only currently used for "custom" Prestige type: prestigeButtonText() { //Is secretly HTML - if (!this.canBuyMax()) return "Hi! I'm a weird dinosaur and I'll give you a Farm Point in exchange for all of your candies and lollipops! (At least " + formatWhole(tmp[this.layer].nextAt) + " candies)" - if (this.canBuyMax()) return "Hi! I'm a weird dinosaur and I'll give you " + formatWhole(tmp[this.layer].resetGain) + " Farm Points in exchange for all of your candies and lollipops! (You'll get another one at " + formatWhole(tmp[layer].nextAtDisp) + " candies)" + if (!this.canBuyMax()) return "Hi! I'm a weird dinosaur and I'll give you a Farm Point in exchange for all of your points and lollipops! (At least " + formatWhole(tmp[this.layer].nextAt) + " points)" + if (this.canBuyMax()) return "Hi! I'm a weird dinosaur and I'll give you " + formatWhole(tmp[this.layer].resetGain) + " Farm Points in exchange for all of your points and lollipops! (You'll get another one at " + formatWhole(tmp[layer].nextAtDisp) + " points)" }, getResetGain() { return getResetGain(this.layer, useType = "static") diff --git a/js/game.js b/js/game.js index d60dc8b..a560763 100644 --- a/js/game.js +++ b/js/game.js @@ -288,13 +288,16 @@ function canCompleteChallenge(layer, x) function completeChallenge(layer, x) { var x = player[layer].activeChallenge if (!x) return - if (! canCompleteChallenge(layer, x)){ + + let completions = canCompleteChallenge(layer, x) + if (!completions){ player[layer].activeChallenge = null return } if (player[layer].challenges[x] < tmp[layer].challenges[x].completionLimit) { needCanvasUpdate = true - player[layer].challenges[x] += 1 + player[layer].challenges[x] += completions + player[layer].challenges[x] = Math.min(player[layer].challenges[x], tmp[layer].challenges[x].completionLimit) if (layers[layer].challenges[x].onComplete) run(layers[layer].challenges[x].onComplete, layers[layer].challenges[x]) } player[layer].activeChallenge = null @@ -362,6 +365,7 @@ function gameLoop(diff) { let layer = OTHER_LAYERS[row][item] if (tmp[layer].autoPrestige && tmp[layer].canReset) doReset(layer); if (layers[layer].automate) layers[layer].automate(); + player[layer].best = player[layer].best.max(player[layer].points) if (layers[layer].autoUpgrade) autobuyUpgrades(layer) } } diff --git a/js/technical/temp.js b/js/technical/temp.js index 535563e..ead0c8e 100644 --- a/js/technical/temp.js +++ b/js/technical/temp.js @@ -103,7 +103,7 @@ function updateTempData(layerData, tmpData) { else if ((!!layerData[item]) && (layerData[item].constructor === Object) || (typeof layerData[item] === "object") && traversableClasses.includes(layerData[item].constructor.name)){ updateTempData(layerData[item], tmpData[item]) } - else if (isFunction(layerData[item]) && !activeFunctions.includes(item)){ + else if (isFunction(layerData[item]) && !isFunction(tmpData[item])){ let value = layerData[item]() if (value !== value || value === decimalNaN){ if (NaNalert === true || confirm ("Invalid value found in tmp, named '" + item + "'. Please let the creator of this mod know! Would you like to try to auto-fix the save and keep going?")){ From c0d3e08f51e92aab2597f90d3a8d86b918fe50a5 Mon Sep 17 00:00:00 2001 From: Harley White Date: Sun, 24 Jan 2021 19:05:01 -0500 Subject: [PATCH 4/4] Fixed tooltip overlap --- changelog.md | 1 + demo.html | 6 +++--- index.html | 2 +- js/Demo/demoLayers.js | 6 ++++++ js/game.js | 2 ++ js/technical/temp.js | 3 ++- 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/changelog.md b/changelog.md index 6cd0616..a518092 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ ## v2.3.6 - - Performance improvements. +- Fixed tooltips overlapping with the top display. - Added support for bulk challenge completions. - "Best" is updated automatically. - Fixed keeping Decimal values on reset. diff --git a/demo.html b/demo.html index bc389dc..b51e6dd 100644 --- a/demo.html +++ b/demo.html @@ -43,7 +43,7 @@
-
{{VERSION.withoutName}}
+
{{(VERSION.withoutName)}}

i
@@ -61,7 +61,7 @@
-
+




@@ -69,7 +69,7 @@
- +
-
+




diff --git a/js/Demo/demoLayers.js b/js/Demo/demoLayers.js index 8f9050b..ff8cb22 100644 --- a/js/Demo/demoLayers.js +++ b/js/Demo/demoLayers.js @@ -357,6 +357,7 @@ addLayer("c", { tooltip() { // Optional, tooltip displays when the layer is unlocked let tooltip = formatWhole(player[this.layer].points) + " " + this.resource if (player[this.layer].buyables[11].gt(0)) tooltip += "\n" + formatWhole(player[this.layer].buyables[11]) + " Exhancers" + tooltip += "\nmomomo\m oo\nommom\nyeyeyeye" return tooltip }, shouldNotify() { // Optional, layer will be highlighted on the tree if true. @@ -513,3 +514,8 @@ addLayer("a", { }, }, ) + +addLayer('qq', {row: 2}) +addLayer('rr', {row: 3}) +addLayer('ss', {row: 4}) +addLayer('tt', {row: 5}) \ No newline at end of file diff --git a/js/game.js b/js/game.js index a560763..2716420 100644 --- a/js/game.js +++ b/js/game.js @@ -1,6 +1,7 @@ var player; var needCanvasUpdate = true; var gameEnded = false; +var scrolled = false; // Don't change this const TMT_VERSION = { @@ -407,6 +408,7 @@ var interval = setInterval(function() { if (needCanvasUpdate){ resizeCanvas(); needCanvasUpdate = false; } + tmp.scrolled = document.getElementById('treeTab').scrollTop < 30 updateTemp(); gameLoop(diff) fixNaNs() diff --git a/js/technical/temp.js b/js/technical/temp.js index ead0c8e..0867f9d 100644 --- a/js/technical/temp.js +++ b/js/technical/temp.js @@ -21,7 +21,8 @@ function setupTemp() { tmp = {} tmp.pointGen = {} tmp.displayThings = [] - + tmp.scrolled = 0 + setupTempData(layers, tmp) for (layer in layers){ tmp[layer].resetGain = {}