Vue.component("candypop", { props: ["layer", "data"], template: `
〉〉

{{ formatWhole(freeLevels) }} free {{ layers[layer].clickables["select" + data.slice(0, 1).toUpperCase() + data.slice(1)].title }} levels

`, computed: { freeLevels() { return player.levelModifiers[this.data]; } } }); addLayer("flowers", { name: "flowers", resource: "flowers", image: "images/white-orchid-1974498_1920.jpg", color: flowersColor, jobName: "Collecting flowers", showJobDelay: 0, layerShown: true, startData() { return { unlocked: true, points: new Decimal(1), xp: new Decimal(1), lastLevel: new Decimal(1), realTime: 0, timeLoopActive: false, sacrificeType: "flowers" }; }, getResetGain() { if (!tmp[this.layer].layerShown || (player.tab !== this.layer && !player[this.layer].timeLoopActive)) { return new Decimal(0); } if (player.chapter === 1 && hasMilestone("flowers", "4")) { return new Decimal(0); } let gain = new Decimal(1); gain = gain.times(new Decimal(1.1).pow(getJobLevel(this.layer))); if (hasUpgrade("flowers", 11)) { gain = gain.times(upgradeEffect("flowers", 11)); } if (hasUpgrade("flowers", 12)) { gain = gain.times(upgradeEffect("flowers", 12)); } if (hasUpgrade("flowers", 14)) { gain = gain.times(upgradeEffect("flowers", 14)); } gain = gain.times(buyableEffect("flowers", 11)); gain = gain.times(layers.generators.clickables[this.layer].effect()); gain = gain.pow(buyableEffect("flowers", 13)); gain = gain.times(ritualEffect("gain")); if (player.generators.flowersActive && (player.tab === "generators" || player.generators.timeLoopActive)) { gain = gain.sqrt().div(10); } return gain; }, passiveGeneration: new Decimal(1), tabFormat: { "Main": { content: () => [ "main-display", ["display-text", `You are collecting ${format(tmp.flowers.getResetGain)} flowers per second`], "blank", ["display-text", (() => { if (player.flowers.xp.lte(1e3)) { return "There's a very large field of flowers"; } if (player.flowers.xp.lte(1e5)) { return "A small patch is missing from the field of flowers"; } if (player.flowers.xp.lte(1e7)) { return "A medium patch is missing from the field of flowers"; } if (player.flowers.xp.lte(4e8)) { return "A large patch is missing from the field of flowers"; } if (player.flowers.xp.lte(9e8)) { return "The field of flowers looks about half way picked"; } if (player.flowers.xp.lte(1e9)) { return "There are very few flowers left"; } if (player.flowers.xp.gte(1e9) && player.chapter === 1) { return "The field is barren"; } return ""; })()], "blank", ["display-text", (() => { if (!hasMilestone("flowers", 0)) { return "Discover new ways to harness the flower's power at level 2"; } if (!hasMilestone("flowers", 1)) { return "Discover new ways to harness the flower's power at level 4"; } if (!hasMilestone("flowers", 2)) { return "Discover new ways to harness the flower's power at level 6"; } if (!hasMilestone("flowers", 3)) { return "Discover new ways to harness the flower's power at level 8"; } if (!hasMilestone("flowers", 4)) { return "Discover new ways to harness the flower's power at level 10"; } return ""; })()], ["upgrade", "nextChapter"], "blank", "buyables", "blank", "upgrades", "blank", ["milestones-filtered", [4, 5]] ], shouldNotify: () => Object.values(tmp.flowers.buyables).some(buyable => buyable.unlocked && buyable.canAfford) || Object.values(tmp.flowers.upgrades).some(upgrade => upgrade.unlocked && upgrade.canAfford) }, "Candypop": { content: () => [ ["sticky", [0, ["column", [ ["display-text", "Choose input job:"], ["row", [ ["clickable", "selectFlowers"], ["clickable", "selectDistill"], ["clickable", "selectStudy"], ["clickable", "selectSands"], ["clickable", "selectGenerators"], ["clickable", "selectRituals"] ]] ]]]], "blank", ["display-text", "Note: Free levels do NOT affect xp requirements.
Note: You cannot throw levels of a specific type if you'd drop below 10.
If you don't know why these are useful, they probably aren't."], "blank", ["candypop", "flowers"], ["candypop", "distill"], ["candypop", "study"], ["candypop", "sands"], ["candypop", "generators"], ["candypop", "rituals"] ], unlocked: () => hasMilestone("generators", 5) } }, update(diff) { if (player.tab === this.layer || player[this.layer].timeLoopActive) { if (player.generators.flowersActive && (player.tab === "generators" || player.generators.timeLoopActive)) { diff = diff / 10; } player[this.layer].realTime += diff; } }, onAddPoints(gain) { let xpGain = gain; if (hasUpgrade(this.layer, 13)) { xpGain = xpGain.times(upgradeEffect(this.layer, 13)); } xpGain = xpGain.times(buyableEffect("flowers", 12)); if (hasUpgrade("generators", 13)) { xpGain = xpGain.times(layers.generators.clickables[this.layer].effect()); } xpGain = xpGain.times(ritualEffect("globalXp")); player[this.layer].xp = player[this.layer].xp.add(xpGain); checkJobXP(this.layer); }, milestones: { 0: { requirementDescription: "Level 2", done: () => player.flowers.xp.gte(10) }, 1: { requirementDescription: "Level 4", done: () => player.flowers.xp.gte(1e3) }, 2: { requirementDescription: "Level 6", done: () => player.flowers.xp.gte(1e5) }, 3: { requirementDescription: "Level 8", done: () => player.flowers.xp.gte(1e7) }, 4: { title: "The story was so fantastic and incredible,", requirementDescription: "Level 10", "effectDescription": "Unlock study flowers job", done: () => player.flowers.xp.gte(1e9), unlocked: () => player.chapter > 1 }, 5: { title: "the telling so credible and sober", requirementDescription: "Level 25", "effectDescription": "Unlock ???", done: () => player.flowers.xp.gte(1e24) && player.chapter > 2, unlocked: () => player.chapter > 2 } }, buyables: { rows: 1, cols: 3, 11: { title: "I tried to look at the thing in a scientific spirit
", display() { return `Each casting of this spell increases its cost, and makes collecting flowers 50% faster.

Currently: x${format(this.effect())}

Cost: ${format(this.cost())} flowers`; }, cost(x) { const amount = x || getBuyableAmount(this.layer, this.id); if (amount.gte(10)) { // goes up 10x instead of 3x after 10 levels return new Decimal(1000).times(new Decimal(3).pow(10)).times(Decimal.pow(10, amount.sub(10))); } return new Decimal(1000).times(new Decimal(3).pow(amount)); }, effect() { return new Decimal(1.5).pow(getBuyableAmount(this.layer, this.id)); }, canAfford() { return player[this.layer].points.gte(this.cost()); }, buy() { player[this.layer].points = player[this.layer].points.sub(this.cost()); setBuyableAmount(this.layer, this.id, getBuyableAmount(this.layer, this.id).add(1)); }, unlocked: () => hasMilestone("flowers", 1) }, 12: { title: "Why should I trouble myself?
", display() { return `Each casting of this spell increases its cost, and doubles experience gain.

Currently: x${format(this.effect())}

Cost: ${format(this.cost())} flowers`; }, cost(x) { return new Decimal(10000).times(new Decimal(4).pow(x || getBuyableAmount(this.layer, this.id))); }, effect() { return new Decimal(2).pow(getBuyableAmount(this.layer, this.id)); }, canAfford() { return player[this.layer].points.gte(this.cost()); }, buy() { player[this.layer].points = player[this.layer].points.sub(this.cost()); setBuyableAmount(this.layer, this.id, getBuyableAmount(this.layer, this.id).add(1)); }, unlocked: () => hasMilestone("flowers", 2) }, 13: { title: "And there was Weena dancing at my side!
", display() { return `Each casting of this spell increases its cost, and raises flower collection rate to an additive +.05 power (softcapped immediately).

Currently: ^${format(this.effect())}

Cost: ${format(this.cost())} flowers`; }, cost(x) { const amount = x || getBuyableAmount(this.layer, this.id); return new Decimal(250000).times(amount.sub(10).max(0).add(10).pow(amount)); }, effect() { return new Decimal(.05).times(getBuyableAmount(this.layer, this.id).pow(.6)).add(1); }, canAfford() { return player[this.layer].points.gte(this.cost()); }, buy() { player[this.layer].points = player[this.layer].points.sub(this.cost()); setBuyableAmount(this.layer, this.id, getBuyableAmount(this.layer, this.id).add(1)); }, unlocked: () => hasMilestone("flowers", 3) } }, upgrades: { rows: 1, cols: 4, nextChapter: { title: "And those that carry us forward, are dreams.
", description: "Close the time loop.", unlocked: () => player.chapter === 1 && hasMilestone("flowers", "4"), onPurchase() { showTab("none"); player.chapter = 2; player.timeSlots = new Decimal(1); } }, 11: { title: "A chain of beautiful flowers
", description: "Increase collection speed based on how many flowers you have", cost: new Decimal(10), effect: () => player.flowers.points.clampMin(1).pow(0.1).add(1), unlocked: () => hasMilestone("flowers", 0), effectDisplay() { return `x${format(this.effect())}`; } }, 12: { title: "A big garland of flowers
", description: "Increase collection speed based on your collecting flowers level", cost: new Decimal(100), effect: () => new Decimal(getJobLevel("flowers")).pow(2).div(10).add(1), unlocked: () => hasMilestone("flowers", 0), effectDisplay() { return `x${format(this.effect())}`; } }, 13: { title: "Weena's Gift
", description: "Increase experience gain based on real time spent collecting flowers", cost: new Decimal(250), effect: () => new Decimal(player.flowers.realTime).div(100).add(1), unlocked: () => hasMilestone("flowers", 0), effectDisplay() { return `x${format(this.effect())}`; } }, 14: { title: "White Sphinx
", description: "Increase flower collection based on the number of upgrades bought", cost: new Decimal(500), effect: () => Decimal.pow(1.5, player.flowers.upgrades.length), unlocked: () => hasMilestone("flowers", 0), effectDisplay() { return `x${format(this.effect())}`; } } }, clickables: { selectFlowers: { title: "Collecting", color: flowersColor, class: { 'candypop-selector': true }, style: { minHeight: "50px", color: "black", backgroundColor: flowersColor }, canClick: () => player.flowers.sacrificeType !== "flowers", onClick: () => player.flowers.sacrificeType = "flowers", unlocked: () => tmp.flowers.layerShown }, selectDistill: { title: "Distilling", color: distillColor, class: { 'candypop-selector': true }, style: { minHeight: "50px", color: "black", backgroundColor: distillColor }, canClick: () => player.flowers.sacrificeType !== "distill", onClick: () => player.flowers.sacrificeType = "distill", unlocked: () => tmp.distill.layerShown }, selectStudy: { title: "Studying", color: studyColor, class: { 'candypop-selector': true }, style: { minHeight: "50px", color: "black", backgroundColor: studyColor }, canClick: () => player.flowers.sacrificeType !== "study", onClick: () => player.flowers.sacrificeType = "study", unlocked: () => tmp.study.layerShown }, selectSands: { title: "Experimenting", color: sandsColor, class: { 'candypop-selector': true }, style: { minHeight: "50px", color: "black", backgroundColor: sandsColor }, canClick: () => player.flowers.sacrificeType !== "sands", onClick: () => player.flowers.sacrificeType = "sands", unlocked: () => tmp.sands.layerShown }, selectGenerators: { title: "Generating", color: electricColor, class: { 'candypop-selector': true }, style: { minHeight: "50px", color: "black", backgroundColor: electricColor }, canClick: () => player.flowers.sacrificeType !== "generators", onClick: () => player.flowers.sacrificeType = "generators", unlocked: () => tmp.generators.layerShown }, selectRituals: { title: "Rituals", color: ritualsColor, class: { 'candypop-selector': true }, style: { minHeight: "50px", color: "white", backgroundColor: ritualsColor }, canClick: () => player.flowers.sacrificeType !== "rituals", onClick: () => player.flowers.sacrificeType = "rituals", unlocked: () => tmp.rituals.layerShown }, flowers: { title: "Subjugation of nature
", color: "#dc3545", display: () => `Throw (and permanently LOSE) three ${layers.flowers.clickables["select" + player.flowers.sacrificeType.slice(0, 1).toUpperCase() + player.flowers.sacrificeType.slice(1)].title} levels into the vanilla candypop`, canClick: () => player.flowers.sacrificeType !== "flowers" && getJobLevel(player.flowers.sacrificeType).gte(13), onClick: () => { player.levelModifiers[player.flowers.sacrificeType] = player.levelModifiers[player.flowers.sacrificeType].sub(3); player.levelModifiers.flowers = player.levelModifiers.flowers.add(1); player.study.deep = player.study.deep.min(getJobLevel("study")); } }, distill: { title: "Languor and decay
", color: "#dc3545", display: () => `Throw (and permanently LOSE) three ${layers.flowers.clickables["select" + player.flowers.sacrificeType.slice(0, 1).toUpperCase() + player.flowers.sacrificeType.slice(1)].title} levels into the mint candypop`, canClick: () => player.flowers.sacrificeType !== "distill" && getJobLevel(player.flowers.sacrificeType).gte(13), onClick: () => { player.levelModifiers[player.flowers.sacrificeType] = player.levelModifiers[player.flowers.sacrificeType].sub(3); player.levelModifiers.distill = player.levelModifiers.distill.add(1); player.study.deep = player.study.deep.min(getJobLevel("study")); } }, study: { title: "Pain and necessity
", color: "#dc3545", display: () => `Throw (and permanently LOSE) three ${layers.flowers.clickables["select" + player.flowers.sacrificeType.slice(0, 1).toUpperCase() + player.flowers.sacrificeType.slice(1)].title} levels into the chocolate candypop`, canClick: () => player.flowers.sacrificeType !== "study" && getJobLevel(player.flowers.sacrificeType).gte(13), onClick: () => { player.levelModifiers[player.flowers.sacrificeType] = player.levelModifiers[player.flowers.sacrificeType].sub(3); player.levelModifiers.study = player.levelModifiers.study.add(1); player.study.deep = player.study.deep.min(getJobLevel("study")); } }, sands: { title: "Abominable desolation
", color: "#dc3545", display: () => `Throw (and permanently LOSE) three ${layers.flowers.clickables["select" + player.flowers.sacrificeType.slice(0, 1).toUpperCase() + player.flowers.sacrificeType.slice(1)].title} levels into the caramel candypop`, canClick: () => player.flowers.sacrificeType !== "sands" && getJobLevel(player.flowers.sacrificeType).gte(13), onClick: () => { player.levelModifiers[player.flowers.sacrificeType] = player.levelModifiers[player.flowers.sacrificeType].sub(3); player.levelModifiers.sands = player.levelModifiers.sands.add(1); player.study.deep = player.study.deep.min(getJobLevel("study")); } }, generators: { title: "Futility of all ambition
", color: "#dc3545", display: () => `Throw (and permanently LOSE) three ${layers.flowers.clickables["select" + player.flowers.sacrificeType.slice(0, 1).toUpperCase() + player.flowers.sacrificeType.slice(1)].title} levels into the damson candypop`, canClick: () => player.flowers.sacrificeType !== "generators" && getJobLevel(player.flowers.sacrificeType).gte(13), onClick: () => { player.levelModifiers[player.flowers.sacrificeType] = player.levelModifiers[player.flowers.sacrificeType].sub(3); player.levelModifiers.generators = player.levelModifiers.generators.add(1); player.study.deep = player.study.deep.min(getJobLevel("study")); } }, rituals: { title: "Waste Garden
", color: "#dc3545", display: () => `Throw (and permanently LOSE) three ${layers.flowers.clickables["select" + player.flowers.sacrificeType.slice(0, 1).toUpperCase() + player.flowers.sacrificeType.slice(1)].title} levels into the blackcurrant candypop`, canClick: () => player.flowers.sacrificeType !== "rituals" && getJobLevel(player.flowers.sacrificeType).gte(13), onClick: () => { player.levelModifiers[player.flowers.sacrificeType] = player.levelModifiers[player.flowers.sacrificeType].sub(3); player.levelModifiers.rituals = player.levelModifiers.rituals.add(1); player.study.deep = player.study.deep.min(getJobLevel("study")); } } }, bars: { job: getJobProgressBar("flowers", flowersColor) } }); // Names to use // - https://www.shmoop.com/study-guides/literature/time-machine-hg-wells/quotes // // - delicate flowers // // - common sense of the morning // // - Time is only a kind of Space