addLayer("c", { name: "cash", symbol: "C", color: cashColor, branches: [ 'u' ], row: 1, position: 1, resource: "cash", baseResource: "updates", infoboxes: { lore: { title: "cash", body: `Selling your game to a publisher means needing to start over on a new one, but you can use the money to finally upgrade your PC! You're confident buying new hardware and such is the best way to work more efficiently.` } }, resetDescription: "Sell game to publisher for ", startData() { return { unlocked: false, total: new Decimal(0), points: new Decimal(0) }}, layerShown() { return player[this.layer].unlocked || hasUpgrade("e", 12) }, type: "normal", requires: new Decimal(10), baseAmount() { return player.u.points }, exponent: 1.5, gainMult() { mult = new Decimal(100).mul(buyableEffect("f", 12)) if (hasUpgrade("f", 12) && hasUpgrade("g", 12)) mult = mult.mul(upgradeEffect("f", 12)) if (hasUpgrade("l", 11)) mult = mult.mul(upgradeEffect("l", 11)) return mult }, gainExp() { return new Decimal(1) }, roundUpCost: true, onPrestige(gain) { if (hasMilestone("d", 1)) addPoints("e", getResetGain("e")) }, doReset(resettingLayer) { if (['s', 'f', 't', 'd', 'l', 'g'].includes(resettingLayer)) { const shouldKeepUpgrades = { 11: hasMilestone("f", 0), 12: hasMilestone("f", 1), 13: hasMilestone("f", 2), 14: hasMilestone("f", 3), 21: hasMilestone("f", 4), 22: hasMilestone("f", 5), 23: hasMilestone("f", 6), 24: hasMilestone("f", 7), 111: hasMilestone("s", 3), 112: hasMilestone("s", 3), 113: hasMilestone("s", 3), 114: hasMilestone("s", 3), 121: hasMilestone("s", 3), 122: hasMilestone("s", 3), 123: hasMilestone("s", 3), 124: hasMilestone("s", 3) } const upgradesToKeep = [] for (let upgrade of player[this.layer].upgrades) { if (shouldKeepUpgrades[upgrade]) { upgradesToKeep.push(upgrade) } } layerDataReset(this.layer) player[this.layer].upgrades = upgradesToKeep } }, resetsNothing() { return hasMilestone("s", 5) }, hotkeys: [ { key: "c", description: "Press C to sell your game to a publisher", onPress() { if (canReset(this.layer)) doReset(this.layer) } } ], tabFormat: [ ["infobox", "lore"], "main-display", ["display-text", function() { return hasUpgrade("e", 13) && tmp.c.resetGain.times ? `(${format(tmp.c.resetGain.times(layers.c.revenue(1)))}/sec)` : "" }, { "marginTop": "-1em", "display": "block" } ], "blank", "prestige-button", "blank", () => hasUpgrade("e", 13) ? ["display-text", "Equipment", { "font-size": "32px" }] : [], () => hasUpgrade("e", 13) ? "blank" : [], "buyables", "blank", "upgrades", () => hasUpgrade("e", 13) ? ["display-text", "Revenue", { "font-size": "32px" }] : [], () => hasUpgrade("e", 13) ? "blank" : [], () => hasUpgrade("e", 13) ? ["row", [["upgrade", 111], ["upgrade", 112], ["upgrade", 113], ["upgrade", 114]]] : [], () => hasUpgrade("g", 11) && !inChallenge("d", 11) ? ["row", [["upgrade", 121], ["upgrade", 122], ["upgrade", 123], ["upgrade", 124]]] : [] ], update(diff) { generatePoints("c", this.revenue(diff)) }, shouldNotify() { return canAffordPurchase("c", layers[this.layer].buyables[11], layers[this.layer].buyables[11].cost()) }, upgrades: { rows: 2, cols: 4, 11: { title: "Buy premium text editor", description: "Purchase a text editor, allowing you to double your productivity", cost: new Decimal(80) }, 12: { title: "Buy premium git client", description: "Purchase a git client, allowing you to double your productivity", cost: new Decimal(100) }, 13: { title: "Buy ambient sound machine", description: "Purchase an overpriced machine to do a website's job, allowing you to double your productivity", cost: new Decimal(800) }, 14: { title: "Buy Keurig", description: "Purchase an overhyped coffee machine, allowing you to double your productivity", cost: new Decimal(1200) }, 21: { title: "Buy incense burner", description: "Purchase an overpriced incense burner, allowing you to double your productivity", cost: new Decimal(2500) }, 22: { title: "Buy mechanical keyboard", description: "Purchase an overpriced keyboard, allowing you to double your productivity at the expense of your coworkers'", cost: new Decimal(4000) }, 23: { title: "Buy massaging chair", description: "Purchase an overpriced chair, allowing you to double your productivity", cost: new Decimal(10000) }, 24: { title: "Buy sensory deprivation egg", description: "Purchase an isolation tank, allowing you to double your productivity", cost: new Decimal(100000) }, // 1XX represents revenue upgrades // since they appear in a different tab they can have whatever id I want to give them, // because I'll be manually including them in a grid. Making them 1XX means they won't show up // in the normal grid of upgrades unless it gets 11 rows 111: { title: "Add a banner ad", description: "Yum, a delicious $1 cpm, which equates to automatically earning .1% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(10), unlocked() { return hasUpgrade("e", 13) } }, 112: { title: "Add an interactive banner ad", description: "By adding interactivity to the banner ad you can earn an additional .2% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(20), unlocked() { return hasUpgrade("c", 111) } }, 113: { title: "Add pre-game ad", description: "Making players watch an ad before playing your game puts another .2% of cash gain per second directly in your pocket", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(30), unlocked() { return hasUpgrade("c", 112) } }, 114: { title: "Add an interstitial ad", description: "Placing ads between levels further engages the players and compensates you accordingly, earning an additional .5% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(40), unlocked() { return hasUpgrade("c", 113) } }, 121: { title: "Add cosmetic microtransactions", description: "Cosmetic microtransactions allow players to support you ethically, earning an additional 9% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(10000), unlocked() { return hasUpgrade("g", 11) && !inChallenge("d", 11) } }, 122: { title: "Add cosmetic loot crates", description: "Adding some randomness to the cosmetics can encourage players to spend even more, earning an additional 90% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(12500), unlocked() { return hasUpgrade("g", 11) && !inChallenge("d", 11) } }, 123: { title: "Add loot crate weapons", description: "Adding just a little bit of gameplay advantages to paying customers makes sense, and earns an additional 900% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(15000), unlocked() { return hasUpgrade("g", 11) && !inChallenge("d", 11) } }, 124: { title: "Add gacha mechanics", description: "Completely disregarding the consumer's wellbeing allows you to earn an additional 9000% of cash gain per second", currencyDisplayName: "updates", currencyInternalName: "points", currencyLocation() { return player.u }, cost: new Decimal(20000), unlocked() { return hasUpgrade("g", 11) && !inChallenge("d", 11) } } }, buyables: { rows: 1, cols: 1, 11: { title: "Upgrade hardware", cost() { return new Decimal(100).mul(new Decimal(2).pow(getBuyableAmount("c", 11))).round() }, display() { return `Each upgrade additively raises your base productivity to the +.25 power.

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

Next upgrade cost: ${format(this.cost())} cash` }, canAfford() { return player[this.layer].points.gte(this.cost()) }, effect() { return new Decimal(0.25).add(buyableEffect("s", 22)).mul(getBuyableAmount("c", 11)).add(1) }, buy() { if (!hasUpgrade("l", 11) || inChallenge("d", 21)) player[this.layer].points = player[this.layer].points.sub(this.cost()) setBuyableAmount("c", 11, getBuyableAmount("c", 11).add(1)) } } }, revenue(diff) { let cpm = 0 if (hasUpgrade("c",111)) cpm += 1 if (hasUpgrade("c",112)) cpm += 2 if (hasUpgrade("c",113)) cpm += 2 if (hasUpgrade("c",114)) cpm += 5 if (hasUpgrade("c",121) && hasUpgrade("g", 11) && !inChallenge("d", 11)) cpm += 90 if (hasUpgrade("c",122) && hasUpgrade("g", 11) && !inChallenge("d", 11)) cpm += 900 if (hasUpgrade("c",123) && hasUpgrade("g", 11) && !inChallenge("d", 11)) cpm += 9000 if (hasUpgrade("c",124) && hasUpgrade("g", 11) && !inChallenge("d", 11)) cpm += 90000 return diff * cpm / 1000 } })