Initial Rituals work (no mechanics yet)

This commit is contained in:
thepaperpilot 2021-04-29 18:53:36 -05:00
parent b77dd431ff
commit 4a245a8b20
10 changed files with 194 additions and 20 deletions

BIN
images/bright-72804.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

View file

@ -15,6 +15,7 @@
<script type="text/javascript" src="js/Layers/study.js"></script>
<script type="text/javascript" src="js/Layers/sands.js"></script>
<script type="text/javascript" src="js/Layers/generators.js"></script>
<script type="text/javascript" src="js/Layers/rituals.js"></script>
<script type="text/javascript" src="js/tree.js"></script>
<script type="text/javascript" src="js/mod.js"></script>
<script type="text/javascript" src="js/technical/temp.js"></script>

View file

@ -129,7 +129,8 @@ addLayer("flowers", {
["clickable", "selectDistill"],
["clickable", "selectStudy"],
["clickable", "selectSands"],
["clickable", "selectGenerators"]
["clickable", "selectGenerators"],
["clickable", "selectRituals"]
]]
]]]],
"blank",
@ -139,8 +140,8 @@ addLayer("flowers", {
["candypop", "distill"],
["candypop", "study"],
["candypop", "sands"],
["candypop", "generators"]
// TODO rituals
["candypop", "generators"],
["candypop", "rituals"]
],
unlocked: () => hasMilestone("generators", 5)
}
@ -328,7 +329,7 @@ addLayer("flowers", {
style: { height: "50px" },
canClick: () => player.flowers.sacrificeType !== "flowers",
onClick: () => player.flowers.sacrificeType = "flowers",
unlocked: () => player.flowers.layerShown
unlocked: () => tmp.flowers.layerShown
},
selectDistill: {
title: "Distilling",
@ -336,7 +337,7 @@ addLayer("flowers", {
style: { height: "50px" },
canClick: () => player.flowers.sacrificeType !== "distill",
onClick: () => player.flowers.sacrificeType = "distill",
unlocked: () => player.distill.layerShown
unlocked: () => tmp.distill.layerShown
},
selectStudy: {
title: "Studying",
@ -344,7 +345,7 @@ addLayer("flowers", {
style: { height: "50px" },
canClick: () => player.flowers.sacrificeType !== "study",
onClick: () => player.flowers.sacrificeType = "study",
unlocked: () => player.study.layerShown
unlocked: () => tmp.study.layerShown
},
selectSands: {
title: "Experimenting",
@ -352,7 +353,7 @@ addLayer("flowers", {
style: { height: "50px" },
canClick: () => player.flowers.sacrificeType !== "sands",
onClick: () => player.flowers.sacrificeType = "sands",
unlocked: () => player.sands.layerShown
unlocked: () => tmp.sands.layerShown
},
selectGenerators: {
title: "Generating",
@ -360,7 +361,15 @@ addLayer("flowers", {
style: { height: "50px" },
canClick: () => player.flowers.sacrificeType !== "generators",
onClick: () => player.flowers.sacrificeType = "generators",
unlocked: () => player.generators.layerShown
unlocked: () => tmp.generators.layerShown
},
selectRituals: {
title: "Rituals",
color: ritualsColor,
style: { height: "50px" },
canClick: () => player.flowers.sacrificeType !== "rituals",
onClick: () => player.flowers.sacrificeType = "rituals",
unlocked: () => tmp.rituals.layerShown
},
flowers: {
title: "Subjugation of nature<br/>",
@ -416,8 +425,18 @@ addLayer("flowers", {
player.levelModifiers.generators = player.levelModifiers.generators.add(1);
player.study.deep = player.study.deep.min(getJobLevel("study"));
}
},
rituals: {
title: "Waste Garden<br/>",
color: "#dc3545",
display: () => `Throw (and permanently <b>LOSE</b>) 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"));
}
}
// rituals = blackcurrant?
},
bars: {
job: getJobProgressBar("flowers", flowersColor)
@ -428,7 +447,6 @@ addLayer("flowers", {
// - https://www.shmoop.com/study-guides/literature/time-machine-hg-wells/quotes
//
// - delicate flowers
// - waste garden
//
// - common sense of the morning
//

View file

@ -97,16 +97,19 @@ addLayer("generators", {
distillActive: false,
studyActive: false,
sandsActive: false,
ritualsActive: false,
flowersDuration: 0,
distillDuration: 0,
studyDuration: 0,
sandsDuration: 0,
ritualsDuration: 0,
batteries: {
generators: new Decimal(0),
flowers: new Decimal(0),
distill: new Decimal(0),
study: new Decimal(0),
sands: new Decimal(0)
sands: new Decimal(0),
rituals: new Decimal(0)
}
};
},
@ -130,6 +133,9 @@ addLayer("generators", {
if (player.generators.sandsActive && (player.tab === "sands" || player.sands.timeLoopActive)) {
gain = gain.add(layers.generators.clickables.sandsGenerator.effect());
}
if (player.generators.ritualsActive && (player.tab === "rituals" || player.rituals.timeLoopActive)) {
gain = gain.add(layers.generators.clickables.ritualsGenerator.effect());
}
gain = gain.times(buyableEffect(this.layer, 11));
gain = gain.times(new Decimal(1.1).pow(getJobLevel(this.layer)));
gain = gain.times(layers.generators.clickables[this.layer].effect());
@ -165,7 +171,7 @@ addLayer("generators", {
})()],
"blank",
"blank",
["row", [["clickable", "flowersGenerator"], ["clickable", "distillGenerator"], ["clickable", "studyGenerator"], ["clickable", "sandsGenerator"]]],
["row", [["clickable", "flowersGenerator"], ["clickable", "distillGenerator"], ["clickable", "studyGenerator"], ["clickable", "sandsGenerator"], ["clickable", "ritualsGenerator"]]],
"blank",
"blank",
"upgrades",
@ -191,7 +197,7 @@ addLayer("generators", {
"blank",
["row", [["battery", "flowers"], ["battery", "distill"]]],
["row", [["battery", "study"], ["battery", "sands"]]],
["row", [["battery", "generators"]]] // TODO rituals battery
["row", [["battery", "generators"], ["battery", "rituals"]]]
],
unlocked: () => hasMilestone("generators", 0)
}
@ -366,13 +372,33 @@ addLayer("generators", {
return effect;
}
},
// TODO ritual generator
// "Nobody Calls Me Chicken."
ritualsGenerator: {
title: "Nobody Calls Me Chicken.<br/>",
display() {
return `Generate <b>${format(this.effect())}</b> joules/s if rituals job is active.<br/>(based on rituals level)<br/><br/>All ritual effects are softcapped immediately and the job runs 10x slower.<br/><br/>Currently: <b>${player.generators.ritualsActive ? "ACTIVE" : "INACTIVE"}</b>`;
},
class: () => ({"gradient-border": player.generators.ritualsActive}),
style: {
width: "200px",
height: "200px"
},
onClick() {
player.generators.ritualsActive = !player.generators.ritualsActive;
},
effect() {
let effect = getJobLevel("rituals");
if (hasUpgrade("generators", 12)) {
effect = effect.times(Decimal.times(0.01, player.generators.ritualsDuration).add(1));
}
return effect;
}
},
flowers: getBatteryCharger("flowers", "History is gonna change.", "Collecting"),
distill: getBatteryCharger("distill", "You disintegrated Einstein!"),
study: getBatteryCharger("study", "I figured, what the hell?"),
sands: getBatteryCharger("sands", "Ronald Reagan? The actor? Ha!", "Experiments"),
generators: getBatteryCharger("generators", "Good night, future boy!"),
rituals: getBatteryCharger("rituals", "Your future is whatever you make it"),
// TODO ritual charger,
"perc1": {
title: "1%",
@ -490,6 +516,7 @@ addLayer("generators", {
study: getBatteryCapBuyable("study", "I'm back <i>from</i> the future."),
sands: getBatteryCapBuyable("sands", "Alright, boys, buckle up."),
generators: getBatteryCapBuyable("generators", "Unless you've got power!"),
rituals: getBatteryCapBuyable("rituals", "?")
},
bars: {
job: getJobProgressBar("generators", electricColor)

119
js/Layers/rituals.js Normal file
View file

@ -0,0 +1,119 @@
function createRuneBuyable(id, title) {
return {
title: title + "<br/>",
display() {
return `Craft another rune<br/><br/>Currently: ${formatWhole(getBuyableAmount("rituals", this.id))}<br/><br/>Cost: ${format(this.cost())} ${layers[id].resource}`;
},
color: layers[id].color,
style: {
width: '150px',
height: '150px'
},
cost(x) {
const amount = x || getBuyableAmount("rituals", this.id);
return new Decimal(1e10).times(new Decimal(10).pow(amount));
},
canAfford() {
return player[id].points.gte(this.cost());
},
buy() {
player[id].points = player[id].points.sub(this.cost());
setBuyableAmount("rituals", this.id, getBuyableAmount("rituals", this.id).add(1));
},
unlocked: () => tmp[id].layerShown
};
}
addLayer("rituals", {
name: "rituals",
image: "images/bright-72804.jpg",
color: ritualsColor,
jobName: "Perform Rituals",
showJobDelay: 1.25,
layerShown: () => hasMilestone("sands", 5),
tooltip: "",
startData() {
return {
unlocked: true,
xp: new Decimal(0),
lastLevel: new Decimal(0),
timeLoopActive: false,
board: {}
};
},
tabFormat: () => player.tab !== "rituals" ? [] : [
["sticky", [0, ["row", [["bar", "job"], ["display-text", `<span style="margin-left: 20px;">Lv. ${getJobLevel("rituals")}</span>`]]]]],
"blank",
"buyables",
"blank",
["milestones-filtered", [2, 5, 6]]
],
update(diff) {
if (player.tab === this.layer || player[this.layer].timeLoopActive) {
if (player.generators.ritualsActive && (player.tab === "generators" || player.generators.timeLoopActive)) {
diff = diff / 10;
}
}
},
milestones: {
0: {
requirementDescription: "Level 2",
done: () => player.rituals.xp.gte(10)
},
1: {
requirementDescription: "Level 4",
done: () => player.rituals.xp.gte(1e3)
},
2: {
title: "You know the laws, Miss Granger.",
requirementDescription: "Level 5",
"effectDescription": "Unlock a new feature in study job",
done: () => player.rituals.xp.gte(1e4)
},
3: {
requirementDescription: "Level 6",
done: () => player.rituals.xp.gte(1e5)
},
4: {
requirementDescription: "Level 8",
done: () => player.rituals.xp.gte(1e7)
},
5: {
title: "You must not be seen.",
requirementDescription: "Level 10",
"effectDescription": "Unlock the Ritual of Ascent",
done: () => player.rituals.xp.gte(1e9),
unlocked: () => hasMilestone("rituals", 2)
},
6: {
title: "And you would do well, I feel, to return before this last chime.",
requirementDescription: "Level 25",
"effectDescription": "Unlock ???",
done: () => player.rituals.xp.gte(1e24) && player.chapter > 2,
unlocked: () => hasMilestone("rituals", 5) && player.chapter > 2
}
},
clickables: {
clear: {},
clearAll: {},
flowers: {},
distill: {},
study: {},
sands: {},
generators: {}
},
buyables: {
rows: 1,
cols: 5,
11: createRuneBuyable("flowers", "I did my waiting!"),
12: createRuneBuyable("distill", "We enter a world that is entirely our own"),
13: createRuneBuyable("study", "I solemnly swear that I am up to no good."),
14: createRuneBuyable("sands", "Finally the flesh reflects the madness within."),
15: createRuneBuyable("generators", "Mysterious thing, time")
},
bars: {
job: getJobProgressBar("rituals", ritualsColor)
}
});
// Names from https://en.wikiquote.org/wiki/Harry_Potter_and_the_Prisoner_of_Azkaban_(film)

View file

@ -8,6 +8,7 @@ const distillColor = "#8AFFC1";
const studyColor = "#654321";
const sandsColor = "#C2B280";
const electricColor = "#89C6FF";
const ritualsColor = "#1e1e1e";
function getJobLevel(job, useModifier = true) {
if (job === "") return new Decimal(0);

View file

@ -349,7 +349,7 @@ function loadVue() {
style="display: grid">
<button
v-bind:class="{ buyable: true, can: tmp[layer].buyables[data].canAfford, locked: !tmp[layer].buyables[data].canAfford}"
v-bind:style="[tmp[layer].buyables[data].canAfford ? {'background-color': tmp[layer].color} : {}, size ? {'height': size, 'width': size} : {}, tmp[layer].componentStyles.buyable, tmp[layer].buyables[data].style]"
v-bind:style="[tmp[layer].buyables[data].canAfford ? {'background-color': tmp[layer].buyables[data].color || tmp[layer].color} : {}, size ? {'height': size, 'width': size} : {}, tmp[layer].componentStyles.buyable, tmp[layer].buyables[data].style]"
v-on:click="buyBuyable(layer, data)">
<span v-if="tmp[layer].buyables[data].title">
<!--suppress HtmlUnknownTag -->

View file

@ -91,7 +91,8 @@ function addedPlayerData() {
distill: new Decimal(0),
study: new Decimal(0),
sands: new Decimal(0),
generators: new Decimal(0)
generators: new Decimal(0),
rituals: new Decimal(0)
}
};
}

View file

@ -43,7 +43,8 @@ addLayer("tree-tab", {
distill: getJobProgressBar("distill"),
study: getJobProgressBar("study"),
sands: getJobProgressBar("sands"),
generators: getJobProgressBar("generators")
generators: getJobProgressBar("generators"),
rituals: getJobProgressBar("rituals")
},
tabFormat: () => player.chapter < 3 ?
[
@ -61,7 +62,8 @@ addLayer("tree-tab", {
["job", "distill"],
["job", "study"],
["job", "sands"],
["job", "generators"]
["job", "generators"],
["job", "rituals"]
] :
{
"Main": {
@ -80,7 +82,8 @@ addLayer("tree-tab", {
["job", "distill"],
["job", "study"],
["job", "sands"],
["job", "generators"]
["job", "generators"],
["job", "rituals"]
]
}
},

View file

@ -310,6 +310,10 @@ h1, h2, h3, b, input {
margin-top: 4px;
}
#rituals + .job-details .smallUpg {
color: white;
}
#points {
color: var(--points);
text-shadow: 0 0 10px var(--points);