This commit is contained in:
Omsi 2021-08-18 16:11:30 -07:00
commit e0c5f9816c
7 changed files with 337 additions and 80 deletions

View File

@ -40,15 +40,52 @@ const PerkNetwork = {
minScale: 0.2, minScale: 0.2,
maxScale: 4, maxScale: 4,
lastPerkNotation: "", lastPerkNotation: "",
pulseTimer: 0,
initializeIfNeeded() { initializeIfNeeded() {
const notation = Notations.current.name; const notation = Notations.current.name;
if (this.container !== undefined && notation === this.lastPerkNotation) return; if (this.container !== undefined && notation === this.lastPerkNotation) return;
this.lastPerkNotation = notation; this.lastPerkNotation = notation;
this.makeNetwork();
this.network.on("click", params => {
const id = params.nodes[0];
if (!isFinite(id)) return;
Perks.find(id).purchase();
this.updatePerkColor();
this.updatePerkSize();
});
this.network.on("dragStart", () => {
const tooltip = this.container.getElementsByClassName("vis-tooltip")[0];
if (tooltip !== undefined) {
tooltip.style.visibility = "hidden";
}
});
// Change node side while dragging on Cancer theme, but skip the method otherwise because it's mildly intensive
this.network.on("dragging", () => {
SecretAchievement(45).tryUnlock();
if (Theme.current().name === "S4") PerkNetwork.updatePerkSize();
});
this.network.on("zoom", () => {
const scale = this.network.getScale();
const clampedScale = Math.clamp(scale, this.minScale, this.maxScale);
if (scale !== clampedScale) {
this.network.moveTo({ scale: clampedScale });
}
});
},
makeNetwork() {
// Just for a bit of fun, tangle it up a bit unless the player specifically chooses not to
const defaultPos = player.options.fixedPerkStartingPos;
this.nodes = new vis.DataSet(Perks.all.map(perk => ({ this.nodes = new vis.DataSet(Perks.all.map(perk => ({
id: perk.id, id: perk.id,
label: perk.config.label, label: perk.config.label,
title: perk.config.description title: perk.config.description,
x: defaultPos ? perk.config.defaultPosition.x : (100 * Math.random()),
y: defaultPos ? perk.config.defaultPosition.y : (100 * Math.random()),
}))); })));
const edges = []; const edges = [];
@ -65,6 +102,7 @@ const PerkNetwork = {
nodes: this.nodes, nodes: this.nodes,
edges edges
}; };
const nodeOptions = { const nodeOptions = {
interaction: { interaction: {
hover: true, hover: true,
@ -88,7 +126,8 @@ const PerkNetwork = {
selectionWidth: width => width, selectionWidth: width => width,
color: { color: {
inherit: "to" inherit: "to"
} },
hidden: ui.view.theme === "S9"
}, },
}; };
@ -104,30 +143,10 @@ const PerkNetwork = {
const network = new vis.Network(container, nodeData, nodeOptions); const network = new vis.Network(container, nodeData, nodeOptions);
this.network = network; this.network = network;
},
network.on("click", params => { forceNetworkRemake() {
const id = params.nodes[0]; this.container = undefined;
if (!isFinite(id)) return; this.initializeIfNeeded();
Perks.find(id).purchase();
this.updatePerkColors();
});
network.on("dragStart", () => {
const tooltip = container.getElementsByClassName("vis-tooltip")[0];
if (tooltip !== undefined) {
tooltip.style.visibility = "hidden";
}
});
network.on("dragging", () => SecretAchievement(45).tryUnlock());
network.on("zoom", () => {
const scale = network.getScale();
const clampedScale = Math.clamp(scale, this.minScale, this.maxScale);
if (scale !== clampedScale) {
network.moveTo({ scale: clampedScale });
}
});
}, },
resetPosition() { resetPosition() {
this.network.moveTo({ position: { x: -600, y: -300 }, scale: 0.8, offset: { x: 0, y: 0 } }); this.network.moveTo({ position: { x: -600, y: -300 }, scale: 0.8, offset: { x: 0, y: 0 } });
@ -136,13 +155,14 @@ const PerkNetwork = {
const options = { const options = {
nodes: { nodes: {
font: { font: {
size: areVisible ? 20 : 0 size: areVisible ? 20 : 0,
color: Theme.current().isDark ? "#DDDDDD" : "#222222",
} }
} }
}; };
this.network.setOptions(options); this.network.setOptions(options);
}, },
updatePerkColors() { updatePerkColor() {
function nodeColor(perk) { function nodeColor(perk) {
const canBeBought = perk.canBeBought; const canBeBought = perk.canBeBought;
const isBought = perk.isBought; const isBought = perk.isBought;
@ -152,12 +172,15 @@ const PerkNetwork = {
const secondaryColor = perkColor.secondary; const secondaryColor = perkColor.secondary;
let backgroundColor; let backgroundColor;
if (canBeBought) backgroundColor = "#000000"; if (canBeBought) {
else if (isBought) backgroundColor = primaryColor; if (Theme.current().isDark) backgroundColor = "#EEEEEE";
else backgroundColor = "#656565"; else backgroundColor = "#111111";
} else if (isBought) backgroundColor = primaryColor;
else if (Theme.current().isDark) backgroundColor = "#333333";
else backgroundColor = "#CCCCCC";
const hoverColor = canBeBought || isBought ? primaryColor : "#656565"; const hoverColor = canBeBought || isBought ? primaryColor : "#656565";
const borderColor = secondaryColor; const borderColor = `${secondaryColor}`;
return { return {
background: backgroundColor, background: backgroundColor,
@ -176,6 +199,23 @@ const PerkNetwork = {
const data = Perks.all const data = Perks.all
.map(perk => ({ id: perk.id, color: nodeColor(perk) })); .map(perk => ({ id: perk.id, color: nodeColor(perk) }));
this.nodes.update(data); this.nodes.update(data);
},
updatePerkSize() {
function nodeSize(perk) {
PerkNetwork.pulseTimer += 0.1;
// Make the nodes pulse continuously on Cancer theme
const mod = Theme.current().name === "S4"
? 10 * Math.sin(5 * PerkNetwork.pulseTimer + 0.1 * perk._config.id)
: 0;
if (perk._config.label === "START") return 35 + mod;
if (perk.isBought) return 25 + mod;
if (perk.canBeBought) return 20 + mod;
return 12 + mod;
}
const data = Perks.all
.map(perk => ({ id: perk.id, size: nodeSize(perk) }));
this.nodes.update(data);
} }
}; };
@ -187,14 +227,14 @@ Vue.component("perks-tab", {
} }
}, },
created() { created() {
EventHub.ui.on(GAME_EVENT.PERK_BOUGHT, () => PerkNetwork.updatePerkColors()); EventHub.ui.on(GAME_EVENT.PERK_BOUGHT, () => PerkNetwork.updatePerkColor());
EventHub.ui.on(GAME_EVENT.REALITY_RESET_AFTER, () => PerkNetwork.updatePerkColors());
}, },
mounted() { mounted() {
PerkNetwork.initializeIfNeeded(); PerkNetwork.initializeIfNeeded();
if (ui.view.theme === "S9") PerkNetwork.setLabelVisibility(false); if (ui.view.theme === "S9") PerkNetwork.setLabelVisibility(false);
else PerkNetwork.setLabelVisibility(ui.view.shiftDown || player.options.showHintText.perks); else PerkNetwork.setLabelVisibility(ui.view.shiftDown || player.options.showHintText.perks);
PerkNetwork.updatePerkColors(); PerkNetwork.updatePerkColor();
PerkNetwork.updatePerkSize();
PerkNetwork.resetPosition(); PerkNetwork.resetPosition();
this.$refs.tab.appendChild(PerkNetwork.container); this.$refs.tab.appendChild(PerkNetwork.container);
}, },

View File

@ -3,16 +3,31 @@
Vue.component("pp-label", { Vue.component("pp-label", {
data() { data() {
return { return {
pp: 0 pp: 0,
fixedLoadPos: false,
}; };
}, },
watch: {
fixedLoadPos(newValue) {
player.options.fixedPerkStartingPos = newValue;
},
},
methods: { methods: {
update() { update() {
this.pp = Math.floor(Currency.perkPoints.value); this.pp = Math.floor(Currency.perkPoints.value);
this.fixedLoadPos = player.options.fixedPerkStartingPos;
} }
}, },
template: ` template: `
<div class="c-perk-tab__header"> <div class="c-perk-tab__header">
You have <span class="c-perk-tab__perk-points">{{ format(pp, 2, 0) }}</span> {{ "Perk Point" | pluralize(pp) }}. You have <span class="c-perk-tab__perk-points">{{ format(pp, 2, 0) }}</span> {{ "Perk Point" | pluralize(pp) }}.
<br>
Perk choices are permanent and cannot be respecced.
<br>
<primary-button-on-off
v-model="fixedLoadPos"
class="o-primary-btn"
text="Lay out tree as untangled:"
/>
</div>` </div>`
}); });

View File

@ -42,6 +42,7 @@ const Theme = function Theme(name, colors) {
player.options.theme = name; player.options.theme = name;
ui.view.theme = name; ui.view.theme = name;
window.getSelection().removeAllRanges(); window.getSelection().removeAllRanges();
PerkNetwork.forceNetworkRemake();
}; };
this.isDark = colors.isDark; this.isDark = colors.isDark;

View File

@ -673,6 +673,7 @@ let player = {
hiddenSubtabBits: Array.repeat(0, 10), hiddenSubtabBits: Array.repeat(0, 10),
lastOpenTab: 0, lastOpenTab: 0,
lastOpenSubtab: Array.repeat(0, 10), lastOpenSubtab: Array.repeat(0, 10),
fixedPerkStartingPos: false,
}, },
IAP: { IAP: {
totalSTD: 0, totalSTD: 0,

View File

@ -316,8 +316,8 @@ GameDatabase.achievements.normal = [
get description() { return `Infinity in ${formatInt(1)} minute or less.`; }, get description() { return `Infinity in ${formatInt(1)} minute or less.`; },
checkRequirement: () => Time.thisInfinityRealTime.totalMinutes <= 1, checkRequirement: () => Time.thisInfinityRealTime.totalMinutes <= 1,
checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE, checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,
get reward() { return `Start with ${format(1e10)} antimatter.`; }, get reward() { return `Start with ${format(2e10)} antimatter.`; },
effect: 1e10 effect: 2e10
}, },
{ {
id: 56, id: 56,

View File

@ -20,16 +20,24 @@ GameDatabase.reality.perks = {
and allow you to choose from ${formatInt(4)} different Glyphs on Reality`; and allow you to choose from ${formatInt(4)} different Glyphs on Reality`;
}, },
effect: 4, effect: 4,
defaultPosition: {
x: 0,
y: 0
}
}, },
startAM: { startAM: {
id: 10, id: 10,
label: "SAM", label: "SAM",
family: PERK_FAMILY.ANTIMATTER, family: PERK_FAMILY.ANTIMATTER,
get description() { get description() {
return `Start every reset with ${format(1e130)} antimatter.`; return `Start every reset with ${format(2e130)} antimatter.`;
}, },
bumpCurrency: () => Currency.antimatter.bumpTo(1e130), bumpCurrency: () => Currency.antimatter.bumpTo(2e130),
effect: 1e130 effect: 2e130,
defaultPosition: {
x: -190,
y: 0
}
}, },
startIP1: { startIP1: {
id: 12, id: 12,
@ -39,7 +47,11 @@ GameDatabase.reality.perks = {
return `Start every Eternity and Reality with ${format(2e15)} Infinity Points.`; return `Start every Eternity and Reality with ${format(2e15)} Infinity Points.`;
}, },
bumpCurrency: () => Currency.infinityPoints.bumpTo(2e15), bumpCurrency: () => Currency.infinityPoints.bumpTo(2e15),
effect: 2e15 effect: 2e15,
defaultPosition: {
x: -375,
y: -15
}
}, },
startIP2: { startIP2: {
id: 13, id: 13,
@ -49,7 +61,11 @@ GameDatabase.reality.perks = {
return `Start every Eternity and Reality with ${format(2e130)} Infinity Points.`; return `Start every Eternity and Reality with ${format(2e130)} Infinity Points.`;
}, },
bumpCurrency: () => Currency.infinityPoints.bumpTo(2e130), bumpCurrency: () => Currency.infinityPoints.bumpTo(2e130),
effect: 2e130 effect: 2e130,
defaultPosition: {
x: -445,
y: -175
}
}, },
startEP1: { startEP1: {
id: 14, id: 14,
@ -59,7 +75,11 @@ GameDatabase.reality.perks = {
return `Start every Reality with ${formatInt(10)} Eternity Points.`; return `Start every Reality with ${formatInt(10)} Eternity Points.`;
}, },
bumpCurrency: () => Currency.eternityPoints.bumpTo(10), bumpCurrency: () => Currency.eternityPoints.bumpTo(10),
effect: 10 effect: 10,
defaultPosition: {
x: -415,
y: 165
}
}, },
startEP2: { startEP2: {
id: 15, id: 15,
@ -69,7 +89,11 @@ GameDatabase.reality.perks = {
return `Start every Reality with ${format(2000)} Eternity Points.`; return `Start every Reality with ${format(2000)} Eternity Points.`;
}, },
bumpCurrency: () => Currency.eternityPoints.bumpTo(2000), bumpCurrency: () => Currency.eternityPoints.bumpTo(2000),
effect: 2000 effect: 2000,
defaultPosition: {
x: -565,
y: 205
}
}, },
startEP3: { startEP3: {
id: 16, id: 16,
@ -79,7 +103,11 @@ GameDatabase.reality.perks = {
return `Start every Reality with ${format(1e9)} Eternity Points.`; return `Start every Reality with ${format(1e9)} Eternity Points.`;
}, },
bumpCurrency: () => Currency.eternityPoints.bumpTo(1e9), bumpCurrency: () => Currency.eternityPoints.bumpTo(1e9),
effect: 1e9 effect: 1e9,
defaultPosition: {
x: -700,
y: 240
}
}, },
startTP: { startTP: {
id: 17, id: 17,
@ -88,14 +116,22 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `After unlocking Dilation, gain ${formatInt(10)} Tachyon Particles.`; return `After unlocking Dilation, gain ${formatInt(10)} Tachyon Particles.`;
}, },
effect: () => (Enslaved.isRunning ? 1 : 10) effect: () => (Enslaved.isRunning ? 1 : 10),
defaultPosition: {
x: -385,
y: 335
}
}, },
antimatterNoReset: { antimatterNoReset: {
id: 30, id: 30,
label: "ANR", label: "ANR",
family: PERK_FAMILY.ANTIMATTER, family: PERK_FAMILY.ANTIMATTER,
description: `Dimension Boosts and Antimatter Galaxies no longer reset description: `Dimension Boosts and Antimatter Galaxies no longer reset
Antimatter, Antimatter Dimensions, Tickspeed, or Dimensional Sacrifice.` Antimatter, Antimatter Dimensions, Tickspeed, or Dimensional Sacrifice.`,
defaultPosition: {
x: -275,
y: 120
}
}, },
studyPassive: { studyPassive: {
id: 31, id: 31,
@ -105,13 +141,21 @@ GameDatabase.reality.perks = {
return `Improve Time Study 122 to ${formatX(50)} Eternity Points and return `Improve Time Study 122 to ${formatX(50)} Eternity Points and
Time Study 142 to ${formatX(1e50)} Infinity Points. Time Study 142 to ${formatX(1e50)} Infinity Points.
In addition, Time Study 132 also makes Replicanti ${format(3)} times faster.`; In addition, Time Study 132 also makes Replicanti ${format(3)} times faster.`;
},
defaultPosition: {
x: 300,
y: -130
} }
}, },
autounlockEU1: { autounlockEU1: {
id: 40, id: 40,
label: "EU1", label: "EU1",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "The first row of eternity upgrades automatically unlock after the first Eternity of a Reality." description: "The first row of eternity upgrades automatically unlock after the first Eternity of a Reality.",
defaultPosition: {
x: 50,
y: 150
}
}, },
autounlockEU2: { autounlockEU2: {
id: 41, id: 41,
@ -120,31 +164,51 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `The second row of eternity upgrades automatically unlock return `The second row of eternity upgrades automatically unlock
at ${formatX(1e10)} times less than their original price`; at ${formatX(1e10)} times less than their original price`;
},
defaultPosition: {
x: 50,
y: 325
} }
}, },
autounlockDilation1: { autounlockDilation1: {
id: 42, id: 42,
label: "UD1", label: "UD1",
family: PERK_FAMILY.DILATION, family: PERK_FAMILY.DILATION,
description: "After unlocking Dilation, auto-unlock the second row of Dilation Upgrades." description: "After unlocking Dilation, auto-unlock the second row of Dilation Upgrades.",
defaultPosition: {
x: 165,
y: 565
}
}, },
autounlockDilation2: { autounlockDilation2: {
id: 43, id: 43,
label: "UD2", label: "UD2",
family: PERK_FAMILY.DILATION, family: PERK_FAMILY.DILATION,
description: "After unlocking Dilation, auto-unlock the third row of Dilation Upgrades." description: "After unlocking Dilation, auto-unlock the third row of Dilation Upgrades.",
defaultPosition: {
x: 310,
y: 605
}
}, },
autounlockDilation3: { autounlockDilation3: {
id: 44, id: 44,
label: "ATT", label: "ATT",
family: PERK_FAMILY.DILATION, family: PERK_FAMILY.DILATION,
description: "Auto-unlock the passive Time Theorem generation Dilation Upgrade once you can afford it." description: "Auto-unlock the passive Time Theorem generation Dilation Upgrade once you can afford it.",
defaultPosition: {
x: 460,
y: 580
}
}, },
autounlockTD: { autounlockTD: {
id: 45, id: 45,
label: "ATD", label: "ATD",
family: PERK_FAMILY.DILATION, family: PERK_FAMILY.DILATION,
description: "Auto-unlock Time Dimensions 5-8 once you can afford them." description: "Auto-unlock Time Dimensions 5-8 once you can afford them.",
defaultPosition: {
x: 605,
y: 575
}
}, },
autounlockReality: { autounlockReality: {
id: 46, id: 46,
@ -153,50 +217,82 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `Auto-unlocks Reality once you have ${format("1e4000")} Eternity Points return `Auto-unlocks Reality once you have ${format("1e4000")} Eternity Points
and have unlocked Time Dimension 8.`; and have unlocked Time Dimension 8.`;
},
defaultPosition: {
x: 725,
y: 505
} }
}, },
bypassIDAntimatter: { bypassIDAntimatter: {
id: 51, id: 51,
label: "IDR", label: "IDR",
family: PERK_FAMILY.INFINITY, family: PERK_FAMILY.INFINITY,
description: "Infinity Dimensions no longer have antimatter requirements." description: "Infinity Dimensions no longer have antimatter requirements.",
defaultPosition: {
x: -580,
y: -230
}
}, },
bypassTGReset: { bypassTGReset: {
id: 52, id: 52,
label: "TGR", label: "TGR",
family: PERK_FAMILY.DILATION, family: PERK_FAMILY.DILATION,
description: "The 2nd rebuyable Dilation Upgrade no longer resets your Dilated Time." description: "The 2nd rebuyable Dilation Upgrade no longer resets your Dilated Time.",
defaultPosition: {
x: -145,
y: 520
}
}, },
bypassECDilation: { bypassECDilation: {
id: 53, id: 53,
label: "DILR", label: "DILR",
family: PERK_FAMILY.DILATION, family: PERK_FAMILY.DILATION,
description: "Remove the Eternity Challenge 11, Eternity Challenge 12, and total Time Theorem " + description: "Remove the Eternity Challenge 11, Eternity Challenge 12, and total Time Theorem " +
"requirements from Time Dilation unlock." "requirements from Time Dilation unlock.",
defaultPosition: {
x: 0,
y: 640
}
}, },
bypassEC1Lock: { bypassEC1Lock: {
id: 54, id: 54,
label: "EC1R", label: "EC1R",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "Remove the Eternity Challenge 1 requirement from Time Study 181." description: "Remove the Eternity Challenge 1 requirement from Time Study 181.",
defaultPosition: {
x: 450,
y: -160
}
}, },
bypassEC2Lock: { bypassEC2Lock: {
id: 55, id: 55,
label: "EC2R", label: "EC2R",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "Remove the Eternity Challenge 2 requirement from Time Study 181." description: "Remove the Eternity Challenge 2 requirement from Time Study 181.",
defaultPosition: {
x: 350,
y: -270
}
}, },
bypassEC3Lock: { bypassEC3Lock: {
id: 56, id: 56,
label: "EC3R", label: "EC3R",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "Remove the Eternity Challenge 3 requirement from Time Study 181." description: "Remove the Eternity Challenge 3 requirement from Time Study 181.",
defaultPosition: {
x: 410,
y: -25
}
}, },
bypassEC5Lock: { bypassEC5Lock: {
id: 57, id: 57,
label: "EC5R", label: "EC5R",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "Remove the Eternity Challenge 5 requirement from Time Study 62." description: "Remove the Eternity Challenge 5 requirement from Time Study 62.",
defaultPosition: {
x: 155,
y: -85
}
}, },
autocompleteEC1: { autocompleteEC1: {
id: 60, id: 60,
@ -205,7 +301,11 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `Auto-complete one Eternity Challenge every ${formatInt(80)} minutes (real-time).`; return `Auto-complete one Eternity Challenge every ${formatInt(80)} minutes (real-time).`;
}, },
effect: 80 effect: 80,
defaultPosition: {
x: 345,
y: 135
}
}, },
autocompleteEC2: { autocompleteEC2: {
id: 61, id: 61,
@ -214,7 +314,11 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `Auto-complete one Eternity Challenge every ${formatInt(50)} minutes (real-time).`; return `Auto-complete one Eternity Challenge every ${formatInt(50)} minutes (real-time).`;
}, },
effect: 50 effect: 50,
defaultPosition: {
x: 425,
y: 235
}
}, },
autocompleteEC3: { autocompleteEC3: {
id: 62, id: 62,
@ -223,7 +327,11 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `Auto-complete one Eternity Challenge every ${formatInt(30)} minutes (real-time).`; return `Auto-complete one Eternity Challenge every ${formatInt(30)} minutes (real-time).`;
}, },
effect: 30 effect: 30,
defaultPosition: {
x: 325,
y: 325
}
}, },
autocompleteEC4: { autocompleteEC4: {
id: 63, id: 63,
@ -232,13 +340,21 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `Auto-complete one Eternity Challenge every ${formatInt(20)} minutes (real-time).`; return `Auto-complete one Eternity Challenge every ${formatInt(20)} minutes (real-time).`;
}, },
effect: 20 effect: 20,
defaultPosition: {
x: 205,
y: 270
}
}, },
studyActiveEP: { studyActiveEP: {
id: 70, id: 70,
label: "ACT", label: "ACT",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "Active path multipliers are always maximized." description: "Active path multipliers are always maximized.",
defaultPosition: {
x: 195,
y: -260
}
}, },
studyIdleEP: { studyIdleEP: {
id: 71, id: 71,
@ -247,13 +363,21 @@ GameDatabase.reality.perks = {
get description() { get description() {
return `Idle path multipliers start as if you have spent ${formatInt(15)} minutes in this Infinity/Eternity.`; return `Idle path multipliers start as if you have spent ${formatInt(15)} minutes in this Infinity/Eternity.`;
}, },
effect: 15 effect: 15,
defaultPosition: {
x: 265,
y: 25
}
}, },
studyECRequirement: { studyECRequirement: {
id: 72, id: 72,
label: "ECR", label: "ECR",
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: "Remove nonTime Theorem requirements for unlocking Eternity Challenges." description: "Remove nonTime Theorem requirements for unlocking Eternity Challenges.",
defaultPosition: {
x: 605,
y: -160
}
}, },
studyECBulk: { studyECBulk: {
id: 73, id: 73,
@ -261,7 +385,11 @@ GameDatabase.reality.perks = {
family: PERK_FAMILY.ETERNITY, family: PERK_FAMILY.ETERNITY,
description: description:
`You can complete multiple tiers of Eternity Challenges at once if `You can complete multiple tiers of Eternity Challenges at once if
you reach the goal for a higher completion of that challenge.` you reach the goal for a higher completion of that challenge.`,
defaultPosition: {
x: 740,
y: -135
}
}, },
retroactiveTP1: { retroactiveTP1: {
id: 80, id: 80,
@ -271,7 +399,11 @@ GameDatabase.reality.perks = {
return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade, return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade,
multiply your current Tachyon Particle amount by ${formatFloat(1.5, 1)}.`; multiply your current Tachyon Particle amount by ${formatFloat(1.5, 1)}.`;
}, },
effect: 1.5 effect: 1.5,
defaultPosition: {
x: -290,
y: 460
}
}, },
retroactiveTP2: { retroactiveTP2: {
id: 81, id: 81,
@ -281,7 +413,11 @@ GameDatabase.reality.perks = {
return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade, return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade,
multiply your current Tachyon Particle amount by ${formatInt(2)}.`; multiply your current Tachyon Particle amount by ${formatInt(2)}.`;
}, },
effect: 2 effect: 2,
defaultPosition: {
x: -200,
y: 360
}
}, },
retroactiveTP3: { retroactiveTP3: {
id: 82, id: 82,
@ -291,7 +427,11 @@ GameDatabase.reality.perks = {
return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade, return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade,
multiply your current Tachyon Particle amount by ${formatFloat(2.5, 1)}.`; multiply your current Tachyon Particle amount by ${formatFloat(2.5, 1)}.`;
}, },
effect: 2.5 effect: 2.5,
defaultPosition: {
x: -120,
y: 260
}
}, },
retroactiveTP4: { retroactiveTP4: {
id: 83, id: 83,
@ -301,13 +441,21 @@ GameDatabase.reality.perks = {
return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade, return `When buying the "You gain ${formatInt(3)} times more Tachyon Particles" Dilation Upgrade,
multiply your current Tachyon Particle amount by ${formatInt(3)}.`; multiply your current Tachyon Particle amount by ${formatInt(3)}.`;
}, },
effect: 3 effect: 3,
defaultPosition: {
x: -65,
y: 145
}
}, },
autobuyerDilation: { autobuyerDilation: {
id: 100, id: 100,
label: "DAU", label: "DAU",
family: PERK_FAMILY.AUTOMATION, family: PERK_FAMILY.AUTOMATION,
description: "Unlock autobuyers for the repeatable Dilation Upgrades." description: "Unlock autobuyers for the repeatable Dilation Upgrades.",
defaultPosition: {
x: 20,
y: 500
}
}, },
autobuyerFasterID: { autobuyerFasterID: {
id: 101, id: 101,
@ -317,6 +465,10 @@ GameDatabase.reality.perks = {
return `Infinity Dimension autobuyers work ${formatX(3)} faster.`; return `Infinity Dimension autobuyers work ${formatX(3)} faster.`;
}, },
effect: 1 / 3, effect: 1 / 3,
defaultPosition: {
x: -515,
y: -20
}
}, },
autobuyerFasterReplicanti: { autobuyerFasterReplicanti: {
id: 102, id: 102,
@ -326,6 +478,10 @@ GameDatabase.reality.perks = {
return `Replicanti autobuyers work ${formatX(3)} faster.`; return `Replicanti autobuyers work ${formatX(3)} faster.`;
}, },
effect: 1 / 3, effect: 1 / 3,
defaultPosition: {
x: -425,
y: -310
}
}, },
autobuyerFasterDilation: { autobuyerFasterDilation: {
id: 103, id: 103,
@ -335,6 +491,10 @@ GameDatabase.reality.perks = {
return `Dilation Upgrade autobuyers work ${formatX(3)} faster.`; return `Dilation Upgrade autobuyers work ${formatX(3)} faster.`;
}, },
effect: 1 / 3, effect: 1 / 3,
defaultPosition: {
x: 490,
y: 450
}
}, },
autobuyerTT1: { autobuyerTT1: {
id: 104, id: 104,
@ -344,6 +504,10 @@ GameDatabase.reality.perks = {
return `Unlock a Time Theorem Autobuyer that autobuys max Time Theorems every ${formatInt(4)} seconds.`; return `Unlock a Time Theorem Autobuyer that autobuys max Time Theorems every ${formatInt(4)} seconds.`;
}, },
effect: 4, effect: 4,
defaultPosition: {
x: 190,
y: -410
}
}, },
autobuyerTT2: { autobuyerTT2: {
id: 105, id: 105,
@ -351,6 +515,10 @@ GameDatabase.reality.perks = {
family: PERK_FAMILY.AUTOMATION, family: PERK_FAMILY.AUTOMATION,
description: "Upgrade the Time Theorem Autobuyer to autobuy max Time Theorems every second.", description: "Upgrade the Time Theorem Autobuyer to autobuy max Time Theorems every second.",
effect: 1, effect: 1,
defaultPosition: {
x: 255,
y: -540
}
}, },
autobuyerTT3: { autobuyerTT3: {
id: 106, id: 106,
@ -360,6 +528,10 @@ GameDatabase.reality.perks = {
return `Upgrade the Time Theorem Autobuyer to max Time Theorems ${formatInt(2)} times per second.`; return `Upgrade the Time Theorem Autobuyer to max Time Theorems ${formatInt(2)} times per second.`;
}, },
effect: 0.5, effect: 0.5,
defaultPosition: {
x: 360,
y: -625
}
}, },
autobuyerTT4: { autobuyerTT4: {
id: 107, id: 107,
@ -369,6 +541,10 @@ GameDatabase.reality.perks = {
return `Upgrade the Time Theorem Autobuyer to max Time Theorems ${formatInt(4)} times per second.`; return `Upgrade the Time Theorem Autobuyer to max Time Theorems ${formatInt(4)} times per second.`;
}, },
effect: 0.25, effect: 0.25,
defaultPosition: {
x: 485,
y: -675
}
}, },
achievementGroup1: { achievementGroup1: {
id: 201, id: 201,
@ -378,7 +554,11 @@ GameDatabase.reality.perks = {
return `Reduce the Achievement timer to ${formatInt(20)} minutes per return `Reduce the Achievement timer to ${formatInt(20)} minutes per
Achievement (${formatInt(10)} minute decrease).`; Achievement (${formatInt(10)} minute decrease).`;
}, },
effect: 10 effect: 10,
defaultPosition: {
x: -45,
y: -135
}
}, },
achievementGroup2: { achievementGroup2: {
id: 202, id: 202,
@ -388,7 +568,11 @@ GameDatabase.reality.perks = {
return `Reduce the Achievement timer to ${formatInt(14)} minutes per return `Reduce the Achievement timer to ${formatInt(14)} minutes per
Achievement (${formatInt(6)} minute decrease).`; Achievement (${formatInt(6)} minute decrease).`;
}, },
effect: 6 effect: 6,
defaultPosition: {
x: -115,
y: -250
}
}, },
achievementGroup3: { achievementGroup3: {
id: 203, id: 203,
@ -398,7 +582,11 @@ GameDatabase.reality.perks = {
return `Reduce the Achievement timer to ${formatInt(9)} minutes per return `Reduce the Achievement timer to ${formatInt(9)} minutes per
Achievement (${formatInt(5)} minute decrease).`; Achievement (${formatInt(5)} minute decrease).`;
}, },
effect: 5 effect: 5,
defaultPosition: {
x: -175,
y: -365
}
}, },
achievementGroup4: { achievementGroup4: {
id: 204, id: 204,
@ -408,7 +596,11 @@ GameDatabase.reality.perks = {
return `Reduce the Achievement timer to ${formatInt(5)} minutes per return `Reduce the Achievement timer to ${formatInt(5)} minutes per
Achievement (${formatInt(4)} minute decrease).`; Achievement (${formatInt(4)} minute decrease).`;
}, },
effect: 4 effect: 4,
defaultPosition: {
x: -180,
y: -500
}
}, },
achievementGroup5: { achievementGroup5: {
id: 205, id: 205,
@ -418,14 +610,22 @@ GameDatabase.reality.perks = {
return `Reduce the Achievement timer to ${formatInt(2)} minutes per return `Reduce the Achievement timer to ${formatInt(2)} minutes per
Achievement (${formatInt(3)} minute decrease).`; Achievement (${formatInt(3)} minute decrease).`;
}, },
effect: 3 effect: 3,
defaultPosition: {
x: -195,
y: -630
}
}, },
achievementGroup6: { achievementGroup6: {
id: 206, id: 206,
label: "ACHNR", label: "ACHNR",
family: PERK_FAMILY.ACHIEVEMENT, family: PERK_FAMILY.ACHIEVEMENT,
description: "Reality no longer resets your Achievements.", description: "Reality no longer resets your Achievements.",
effect: 2 effect: 2,
defaultPosition: {
x: -225,
y: -755
}
} }
}; };

View File

@ -8544,7 +8544,7 @@ input.o-automator-block-input {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
width: 90rem; width: 90rem;
height: 50rem; height: 50rem;
border: 0.1rem solid black; border: 0.2rem solid black;
} }
.c-perk-network__canvas { .c-perk-network__canvas {