mirror of
https://github.com/thepaperpilot/The-Modding-Tree.git
synced 2025-02-07 10:31:37 +00:00
Initial Rituals work (no mechanics yet)
This commit is contained in:
parent
b77dd431ff
commit
4a245a8b20
10 changed files with 194 additions and 20 deletions
BIN
images/bright-72804.jpg
Normal file
BIN
images/bright-72804.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 198 KiB |
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
//
|
||||
|
|
|
@ -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
119
js/Layers/rituals.js
Normal 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)
|
|
@ -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);
|
||||
|
|
|
@ -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 -->
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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"]
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue