addLayer("l", {
    name: "lectures",
    symbol: "L",
    color: lecturesColor,
    branches: [ 's', 'f' ],
    row: 3,
    position: 4,
    resource: "lectures",
    baseResource: "fame",
    infoboxes: {
        lore: {
            title: "lectures",
            body: `Realizing you are both <span style="color: ${fameColor}">famous</span> and an extensive <span style="color: ${schoolColor}">multi-college education</span>, you have the bright idea of becoming an <span style="color: ${lecturesColor}">adjunt professor</span>. It won't benefit you directly, but with enough <span style="color: ${lecturesColor}">lectures</span> under your belt you should be able to start hiring <span style="color: ${lecturesColor}">Teacher Assistants</span> to <del>take advantage of</del> help you out.<br/><br/>` +
                  `Each <span style="color: ${lecturesColor}">TA</span> you unlock will gain experience over time - the more <span style="color: ${lecturesColor}">lectures</span> you teach, the more experience they can earn! As they level up they'll be able to boost different layers, in addition to their regular duty.`
        }
    },
    resetDescription: "Teach ",
    startData() { return {
        unlocked: false,
        points: new Decimal(0),
        gabenExp: new Decimal(0),
        gabenLevel: new Decimal(0),
        lExp: new Decimal(0),
        lLevel: new Decimal(0),
        carmackExp: new Decimal(0),
        carmackLevel: new Decimal(0),
        thompsonExp: new Decimal(0),
        thompsonLevel: new Decimal(0),
        meierExp: new Decimal(0),
        meierLevel: new Decimal(0)
    }},
    layerShown() { return player[this.layer].unlocked || challengeCompletions("d", 12) > 0 },
    type: "normal",
    requires: new Decimal(13),
    baseAmount() { return player.f.points },
    exponent: 10,
    gainMult() {
        mult = new Decimal(1)
        return mult
    },
    gainExp() {
        return new Decimal(1)
    },
    effect() {
        return player[this.layer].points.sqrt()
    },
    effectDescription() {
        return `which generate ${format(this.effect())} experience for your TAs every second`
    },
    update(diff) {
        const effect = this.effect().mul(diff)
        if (hasUpgrade(this.layer, 11)) player[this.layer].gabenExp = player[this.layer].gabenExp.add(effect)
        if (player[this.layer].gabenExp.gte(this.bars.gaben.cost())) {
            player[this.layer].gabenLevel = player[this.layer].gabenLevel.add(1)
            player[this.layer].gabenExp = new Decimal(0)
        }
        if (hasUpgrade(this.layer, 12)) player[this.layer].lExp = player[this.layer].lExp.add(effect)
        if (player[this.layer].lExp.gte(this.bars.l.cost())) {
            player[this.layer].lLevel = player[this.layer].lLevel.add(1)
            player[this.layer].lExp = new Decimal(0)
        }
        if (hasUpgrade(this.layer, 13)) player[this.layer].carmackExp = player[this.layer].carmackExp.add(effect)
        if (player[this.layer].carmackExp.gte(this.bars.carmack.cost())) {
            player[this.layer].carmackLevel = player[this.layer].carmackLevel.add(1)
            player[this.layer].carmackExp = new Decimal(0)
        }
        if (hasUpgrade(this.layer, 14)) player[this.layer].thompsonExp = player[this.layer].thompsonExp.add(effect)
        if (player[this.layer].thompsonExp.gte(this.bars.thompson.cost())) {
            player[this.layer].thompsonLevel = player[this.layer].thompsonLevel.add(1)
            player[this.layer].thompsonExp = new Decimal(0)
        }
        if (hasUpgrade(this.layer, 15)) player[this.layer].meierExp = player[this.layer].meierExp.add(effect)
        if (player[this.layer].meierExp.gte(this.bars.meier.cost())) {
            player[this.layer].meierLevel = player[this.layer].meierLevel.add(1)
            player[this.layer].meierExp = new Decimal(0)
        }
    },
    roundUpCost: true,
    hotkeys: [
        {
            key: "l",
            description: "Press L to teach lectures",
            onPress() { if (canReset(this.layer)) doReset(this.layer) }
        }
    ],
    tabFormat: [
        ["infobox", "lore"],
        ["display-text", () => inChallenge("d", 21) ? `<h2 style="color: red;">Disabled during ${layers.d.challenges[player.d.activeChallenge].name} degree plan</h2>` : ""],
        "main-display",
        "prestige-button",
        "blank",
        ["display-text", "<h2>Gabriel Newell</h2>"],
        ["row", [["upgrade", 11], "blank", ["bar", "gaben"]]],
        "blank",
        ["display-text", () => hasUpgrade("l", 11) ? "<h2>L</h2>" : ""],
        ["row", [["upgrade", 12], "blank", ["bar", "l"]]],
        "blank",
        ["display-text", () => hasUpgrade("l", 12) ? "<h2>Jean Carmack</h2>" : ""],
        ["row", [["upgrade", 13], "blank", ["bar", "carmack"]]],
        "blank",
        ["display-text", () => hasUpgrade("l", 13) ? "<h2>Jen Thompson</h2>" : ""],
        ["row", [["upgrade", 14], "blank", ["bar", "thompson"]]],
        "blank",
        ["display-text", () => challengeCompletions("d", 22) > 0 ? "<h2>Sidney Meier</h2>" : ""],
        ["row", [["upgrade", 15], "blank", ["bar", "meier"]]]
    ],
    bars: {
        gaben: {
            fillStyle: {'background-color' : "#1b2838"},
            baseStyle: {'background-color' : "#171a21"},
            textStyle: {'color': '#04e050'},
            borderStyle() {return {}},
            direction: RIGHT,
            width: 400,
            height: 140,
            progress() {
                return (player[this.layer].gabenExp.div(this.cost())).toNumber()
            },
            display() {
                return `Current TA Level: ${formatWhole(player[this.layer].gabenLevel)}<br/><br/>${format(player[this.layer].gabenExp)} / ${formatWhole(this.cost())} to next level`
            },
            cost() { return new Decimal(4).pow(player[this.layer].gabenLevel).mul(2000) },
            unlocked: true
        },
        l: {
            fillStyle: {'background-color' : "#2B5293"},
            baseStyle: {'background-color' : "#2b772b"},
            textStyle: {'color': '#04e050'},
            borderStyle() {return {}},
            direction: RIGHT,
            width: 400,
            height: 140,
            progress() {
                return (player[this.layer].lExp.div(this.cost())).toNumber()
            },
            display() {
                return `Current TA Level: ${formatWhole(player[this.layer].lLevel)}<br/><br/>${format(player[this.layer].lExp)} / ${formatWhole(this.cost())} to next level`
            },
            cost() { return new Decimal(100).pow(player[this.layer].lLevel).mul(2401) },
            unlocked() { return hasUpgrade("l", 11) }
        },
        carmack: {
            fillStyle: {'background-color' : "#cb5e29"},
            baseStyle: {'background-color' : "#692f17"},
            textStyle: {'color': '#04e050'},
            borderStyle() {return {}},
            direction: RIGHT,
            width: 400,
            height: 140,
            progress() {
                return (player[this.layer].carmackExp.div(this.cost())).toNumber()
            },
            display() {
                return `Current TA Level: ${formatWhole(player[this.layer].carmackLevel)}<br/><br/>${format(player[this.layer].carmackExp)} / ${formatWhole(this.cost())} to next level`
            },
            cost() { return new Decimal(6).pow(player[this.layer].carmackLevel).mul(10000) },
            unlocked() { return hasUpgrade("l", 12) }
        },
        thompson: {
            fillStyle: {'background-color' : "#ffffff"},
            baseStyle: {'background-color' : "#000000"},
            textStyle: {'color': '#04e050'},
            borderStyle() {return {}},
            direction: RIGHT,
            width: 400,
            height: 140,
            progress() {
                return (player[this.layer].thompsonExp.div(this.cost())).toNumber()
            },
            display() {
                return `Current TA Level: ${formatWhole(player[this.layer].thompsonLevel)}<br/><br/>${format(player[this.layer].thompsonExp)} / ${formatWhole(this.cost())} to next level`
            },
            cost() { return new Decimal(12).pow(player[this.layer].thompsonLevel).mul(50000) },
            unlocked() { return hasUpgrade("l", 13) }
        },
        meier: {
            fillStyle: {'background-color' : "#947728"},
            baseStyle: {'background-color' : "#04467a"},
            textStyle: {'color': '#04e050'},
            borderStyle() {return {}},
            direction: RIGHT,
            width: 400,
            height: 140,
            progress() {
                return (player[this.layer].meierExp.div(this.cost())).toNumber()
            },
            display() {
                return `Current TA Level: ${formatWhole(player[this.layer].meierLevel)}<br/><br/>${format(player[this.layer].meierExp)} / ${formatWhole(this.cost())} to next level`
            },
            cost() { return new Decimal(12).pow(player[this.layer].meierLevel).mul(50000) },
            unlocked() { return challengeCompletions("d", 22) > 0 }
        }
    },
    upgrades: {
        rows: 1,
        cols: 5,
        11: {
            title: "Hire Gabriel",
            cost: new Decimal(1),
            description() { return "<br/>Gabriel will make upgrading hardware not spend any cash, and increase cash gain based on level<br/>" },
            effect() { return inChallenge("d", 21) ? new Decimal(1) : new Decimal(2).pow(player[this.layer].gabenLevel) },
            effectDisplay() { return `${format(this.effect())}x cash gain` }
        },
        12: {
            title: "Hire L",
            cost: new Decimal(50),
            description() { return "<br/>L will autopurchase alt accounts and not spend any fame, and increase fame gain based on level<br/>" },
            effect() { return inChallenge("d", 21) ? new Decimal(1) : player[this.layer].lLevel.add(1).pow(.9) },
            effectDisplay() { return `${format(this.effect())}x fame gain` },
            unlocked() { return hasUpgrade("l", 11) }
        },
        13: {
            title: "Hire Jean",
            cost: new Decimal(2000),
            description() { return "<br/>Jean will square updates gain, and increase updates gain based on level<br/>" },
            effect() { return inChallenge("d", 21) ? new Decimal(1) : new Decimal(1.75).pow(player[this.layer].carmackLevel) },
            effectDisplay() { return `${format(this.effect())}x update gain` },
            unlocked() { return hasUpgrade("l", 12) }
        },
        14: {
            title: "Hire Jen",
            cost: new Decimal(60000),
            description() { return "<br/>Jen will make taking classes not spend any cash, and increase enrollments gain based on level<br/>" },
            effect() { return inChallenge("d", 21) ? new Decimal(1) : new Decimal(1.5).pow(player[this.layer].thompsonLevel) },
            effectDisplay() { return `${format(this.effect())}x enrollments gain` },
            unlocked() { return hasUpgrade("l", 13) }
        },
        15: {
            title: "Hire Sidney",
            cost: new Decimal(1200000),
            description() { return "<br/>Sidney will square good will affect, and increase good will gain based on level<br/>" },
            effect() { return inChallenge("d", 21) ? new Decimal(1) : new Decimal(1.05).pow(player[this.layer].meierLevel) },
            effectDisplay() { return `${format(this.effect())}x good will gain` },
            unlocked() { return challengeCompletions("d", 22) > 0 }
        }
    }
})