forked from profectus/Profectus
setup basic mod info
This commit is contained in:
parent
0afcd1cd3d
commit
8fff8f2835
10 changed files with 25 additions and 3641 deletions
|
@ -1 +0,0 @@
|
|||
eyJpZCI6InRtdC14LTEwNSIsIm5hbWUiOiJEZWZhdWx0IFNhZmZmZiAtIHNvbWV0aGluZyBlbHNlIiwidGFicyI6WyJtYWluIiwiYyJdLCJ0aW1lIjoxNjI0MjQ1MjYxMDg3LCJhdXRvc2F2ZSI6dHJ1ZSwib2ZmbGluZVByb2QiOnRydWUsInRpbWVQbGF5ZWQiOiIzNDQ4LjYxNTc4MTcwOTAxIiwia2VlcEdvaW5nIjpmYWxzZSwibGFzdFRlblRpY2tzIjpbMC4wNTEsMC4wNSwwLjA0OSwwLjA1LDAuMDUsMC4wNTEsMC4wNDksMC4wNSwwLjA1LDAuMDUxXSwic2hvd1RQUyI6dHJ1ZSwibXNEaXNwbGF5IjoiYWxsIiwiaGlkZUNoYWxsZW5nZXMiOmZhbHNlLCJ0aGVtZSI6InBhcGVyIiwic3VidGFicyI6e30sIm1pbmltaXplZCI6e30sIm1vZElEIjoidG10LXgiLCJtb2RWZXJzaW9uIjoiMC4wIiwicG9pbnRzIjoiMzMwMC4zNzc3NzM4NTkwNTUiLCJtYWluIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e319LCJmIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e30sImNsaWNrYWJsZXMiOnsiMTEiOiJTdGFydCJ9LCJ1bmxvY2tlZCI6ZmFsc2UsInBvaW50cyI6IjAiLCJib29wIjpmYWxzZX0sImMiOnsidXBncmFkZXMiOlsiMTEiXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e30sImJ1eWFibGVzIjp7IjExIjoiMCJ9LCJjaGFsbGVuZ2VzIjp7IjExIjoiMCJ9LCJ1bmxvY2tlZCI6dHJ1ZSwicG9pbnRzIjoiMCIsImJlc3QiOiIxIiwidG90YWwiOiIwIiwiYmVlcCI6ZmFsc2UsInRoaW5neSI6InBvaW50eSIsIm90aGVyVGhpbmd5IjoxMCwic3BlbnRPbkJ1eWFibGVzIjoiMCJ9LCJhIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbIjExIl0sIm1pbGVzdG9uZXMiOltdLCJpbmZvYm94ZXMiOnt9LCJ1bmxvY2tlZCI6dHJ1ZSwicG9pbnRzIjoiMCJ9LCJnIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e319LCJoIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e319LCJzcG9vayI6eyJ1cGdyYWRlcyI6W10sImFjaGlldmVtZW50cyI6W10sIm1pbGVzdG9uZXMiOltdLCJpbmZvYm94ZXMiOnt9fSwib29tcHNNYWciOjAsImxhc3RQb2ludHMiOiIzMzAwLjM3Nzc3Mzg1OTA1NSJ9
|
|
@ -14,7 +14,7 @@
|
|||
:layer="tab"
|
||||
:index="index"
|
||||
v-else-if="tab in components"
|
||||
:minimizable="true"
|
||||
:minimizable="minimizable[tab]"
|
||||
:tab="() => $refs[`tab-${index}`]"
|
||||
/>
|
||||
<component :is="tab" :index="index" v-else />
|
||||
|
@ -47,6 +47,12 @@ export default defineComponent({
|
|||
},
|
||||
{}
|
||||
);
|
||||
},
|
||||
minimizable() {
|
||||
return Object.keys(layers).reduce((acc: Record<string, boolean>, curr) => {
|
||||
acc[curr] = layers[curr].minimizable !== false;
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
/* eslint-disable */
|
||||
import player from "@/game/player";
|
||||
import { GridCell } from "@/typings/features/grid";
|
||||
import { RawLayer } from "@/typings/layer";
|
||||
import Decimal from "@/util/bignum";
|
||||
|
||||
export default {
|
||||
id: "a",
|
||||
startData() {
|
||||
return {
|
||||
unlocked: true,
|
||||
points: new Decimal(0)
|
||||
};
|
||||
},
|
||||
color: "yellow",
|
||||
modal: true,
|
||||
name: "Achievements",
|
||||
resource: "achievement power",
|
||||
row: "side",
|
||||
tooltip() {
|
||||
// Optional, tooltip displays when the layer is locked
|
||||
return "Achievements";
|
||||
},
|
||||
achievementPopups: true,
|
||||
achievements: {
|
||||
data: {
|
||||
11: {
|
||||
image: "https://unsoftcapped2.github.io/The-Modding-Tree-2/discord.png",
|
||||
name: "Get me!",
|
||||
done() {
|
||||
return true;
|
||||
}, // This one is a freebie
|
||||
goalTooltip: "How did this happen?", // Shows when achievement is not completed
|
||||
doneTooltip: "You did it!" // Showed when the achievement is completed
|
||||
},
|
||||
12: {
|
||||
name: "Impossible!",
|
||||
done() {
|
||||
return false;
|
||||
},
|
||||
goalTooltip: "Mwahahaha!", // Shows when achievement is not completed
|
||||
doneTooltip: "HOW????", // Showed when the achievement is completed
|
||||
style: { color: "#04e050" }
|
||||
},
|
||||
13: {
|
||||
name: "EIEIO",
|
||||
done() {
|
||||
return player.layers.f.points.gte(1);
|
||||
},
|
||||
tooltip:
|
||||
"Get a farm point.\n\nReward: The dinosaur is now your friend (you can max Farm Points).", // Showed when the achievement is completed
|
||||
onComplete() {
|
||||
console.log("Bork bork bork!");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
midsection: "<grid id='test' />",
|
||||
grids: {
|
||||
data: {
|
||||
test: {
|
||||
maxRows: 3,
|
||||
rows: 2,
|
||||
cols: 2,
|
||||
getStartData(cell: string) {
|
||||
return cell;
|
||||
},
|
||||
getUnlocked() {
|
||||
// Default
|
||||
return true;
|
||||
},
|
||||
getCanClick() {
|
||||
return player.points.eq(10);
|
||||
},
|
||||
getStyle(cell) {
|
||||
return { backgroundColor: "#" + ((Number((this[cell] as GridCell).data) * 1234) % 999999) };
|
||||
},
|
||||
click(cell) {
|
||||
// Don't forget onHold
|
||||
(this[cell] as GridCell).data = ((this[cell] as GridCell).data as number) + 1;
|
||||
},
|
||||
getTitle(cell) {
|
||||
let direction;
|
||||
if (cell === "101") {
|
||||
direction = "top";
|
||||
} else if (cell === "102") {
|
||||
direction = "bottom";
|
||||
} else if (cell === "201") {
|
||||
direction = "left";
|
||||
} else if (cell === "202") {
|
||||
direction = "right";
|
||||
}
|
||||
return `<tooltip display='${JSON.stringify(this.style)}' ${direction}>
|
||||
<h3>Gridable #${cell}</h3>
|
||||
</tooltip>`;
|
||||
},
|
||||
getDisplay(cell) {
|
||||
return (this[cell] as GridCell).data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} as RawLayer;
|
|
@ -1,573 +0,0 @@
|
|||
/* eslint-disable */
|
||||
import { Direction } from "@/game/enums";
|
||||
import { layers } from "@/game/layers";
|
||||
import player from "@/game/player";
|
||||
import { DecimalSource } from "@/lib/break_eternity";
|
||||
import { RawLayer } from "@/typings/layer";
|
||||
import Decimal, { format, formatWhole } from "@/util/bignum";
|
||||
import {
|
||||
buyableEffect,
|
||||
challengeCompletions,
|
||||
getBuyableAmount,
|
||||
hasMilestone,
|
||||
hasUpgrade,
|
||||
setBuyableAmount,
|
||||
upgradeEffect
|
||||
} from "@/util/features";
|
||||
import { resetLayer, resetLayerData } from "@/util/layers";
|
||||
|
||||
export default {
|
||||
id: "c", // This is assigned automatically, both to the layer and all upgrades, etc. Shown here so you know about it
|
||||
name: "Candies", // This is optional, only used in a few places, If absent it just uses the layer id.
|
||||
symbol: "C", // This appears on the layer's node. Default is the id with the first letter capitalized
|
||||
position: 0, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
||||
startData() {
|
||||
return {
|
||||
unlocked: true,
|
||||
points: new Decimal(0),
|
||||
best: new Decimal(0),
|
||||
total: new Decimal(0),
|
||||
beep: false,
|
||||
thingy: "pointy",
|
||||
otherThingy: 10,
|
||||
spentOnBuyables: new Decimal(0)
|
||||
};
|
||||
},
|
||||
minWidth: 800,
|
||||
color: "#4BDC13",
|
||||
requires: new Decimal(10), // Can be a function that takes requirement increases into account
|
||||
resource: "lollipops", // Name of prestige currency
|
||||
baseResource: "points", // Name of resource prestige is based on
|
||||
baseAmount() {
|
||||
return player.points;
|
||||
}, // Get the current amount of baseResource
|
||||
type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
||||
exponent: 0.5, // Prestige currency exponent
|
||||
base: 5, // Only needed for static layers, base of the formula (b^(x^exp))
|
||||
roundUpCost: false, // True if the cost needs to be rounded up (use when baseResource is static?)
|
||||
|
||||
// For normal layers, gain beyond [softcap] points is put to the [softcapPower]th power
|
||||
softcap: new Decimal(1e100),
|
||||
softcapPower: new Decimal(0.5),
|
||||
canBuyMax() {}, // Only needed for static layers with buy max
|
||||
gainMult() {
|
||||
// Calculate the multiplier for main currency from bonuses
|
||||
let mult = new Decimal(1);
|
||||
/*
|
||||
if (hasUpgrade(this.layer, 166)) mult = mult.times(2); // These upgrades don't exist
|
||||
if (hasUpgrade(this.layer, 120))
|
||||
mult = mult.times(upgradeEffect(this.layer, 120) as DecimalSource);
|
||||
*/
|
||||
return mult;
|
||||
},
|
||||
gainExp() {
|
||||
// Calculate the exponent on main currency from bonuses
|
||||
return new Decimal(1);
|
||||
},
|
||||
row: 0, // Row the layer is in on the tree (0 is the first row)
|
||||
effect() {
|
||||
return {
|
||||
// Formulas for any boosts inherent to resources in the layer. Can return a single value instead of an object if there is just one effect
|
||||
waffleBoost: Decimal.pow(player.layers[this.layer].points, 0.2),
|
||||
icecreamCap: player.layers[this.layer].points.times(10)
|
||||
};
|
||||
},
|
||||
effectDisplay() {
|
||||
// Optional text to describe the effects
|
||||
const eff = this.effect as { waffleBoost: Decimal; icecreamCap: Decimal };
|
||||
const waffleBoost = eff.waffleBoost.times(
|
||||
(buyableEffect(this.layer, 11) as { first: Decimal, second: Decimal }).first
|
||||
);
|
||||
return (
|
||||
"which are boosting waffles by " +
|
||||
format(waffleBoost) +
|
||||
" and increasing the Ice Cream cap by " +
|
||||
format(eff.icecreamCap)
|
||||
);
|
||||
},
|
||||
infoboxes: {
|
||||
data: {
|
||||
coolInfo: {
|
||||
title: "Lore",
|
||||
titleStyle: { color: "#FE0000" },
|
||||
body: "DEEP LORE!",
|
||||
bodyStyle: { "background-color": "#0000EE" }
|
||||
}
|
||||
}
|
||||
},
|
||||
milestones: {
|
||||
data: {
|
||||
0: {
|
||||
requirementDisplay: "3 Lollipops",
|
||||
done() {
|
||||
return (player.layers[this.layer].best as Decimal).gte(3);
|
||||
}, // Used to determine when to give the milestone
|
||||
effectDisplay: "Unlock the next milestone"
|
||||
},
|
||||
1: {
|
||||
requirementDisplay: "4 Lollipops",
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, 0);
|
||||
},
|
||||
done() {
|
||||
return (player.layers[this.layer].best as Decimal).gte(4);
|
||||
},
|
||||
effectDisplay: "You can toggle beep and boop (which do nothing)",
|
||||
optionsDisplay: `
|
||||
<div style="display: flex; justify-content: center">
|
||||
<Toggle :value="player.layers.c.beep" @change="value => player.layers.c.beep = value" />
|
||||
<Toggle :value="player.layers.f.boop" @change="value => player.layers.f.boop = value" />
|
||||
</div>
|
||||
`,
|
||||
style() {
|
||||
if (hasMilestone(this.layer, this.id))
|
||||
return {
|
||||
backgroundColor: "#1111DD"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
challenges: {
|
||||
data: {
|
||||
11: {
|
||||
name: "Fun",
|
||||
completionLimit: 3,
|
||||
challengeDescription() {
|
||||
return (
|
||||
"Makes the game 0% harder<br>" +
|
||||
challengeCompletions(this.layer, this.id) +
|
||||
"/" +
|
||||
this.completionLimit +
|
||||
" completions"
|
||||
);
|
||||
},
|
||||
unlocked() {
|
||||
return (player.layers[this.layer].best as Decimal).gt(0);
|
||||
},
|
||||
goalDescription: "Have 20 points I guess",
|
||||
canComplete() {
|
||||
return player.points.gte(20);
|
||||
},
|
||||
effect() {
|
||||
const ret = player.layers[this.layer].points.add(1).tetrate(0.02);
|
||||
return ret;
|
||||
},
|
||||
rewardDisplay() {
|
||||
return format(this.effect as Decimal) + "x";
|
||||
},
|
||||
countsAs: [12, 21], // Use this for if a challenge includes the effects of other challenges. Being in this challenge "counts as" being in these.
|
||||
rewardDescription: "Says hi",
|
||||
onComplete() {
|
||||
console.log("hiii");
|
||||
}, // Called when you successfully complete the challenge
|
||||
onEnter() {
|
||||
console.log("So challenging");
|
||||
},
|
||||
onExit() {
|
||||
console.log("Sweet freedom!");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
upgrades: {
|
||||
data: {
|
||||
11: {
|
||||
title: "Generator of Genericness",
|
||||
description: "Gain 1 Point every second.",
|
||||
cost: new Decimal(1),
|
||||
unlocked() {
|
||||
return player.layers[this.layer].unlocked;
|
||||
} // The upgrade is only visible when this is true
|
||||
},
|
||||
12: {
|
||||
description:
|
||||
"Point generation is faster based on your unspent Lollipops.",
|
||||
cost: new Decimal(1),
|
||||
unlocked() {
|
||||
return hasUpgrade(this.layer, 11);
|
||||
},
|
||||
effect() {
|
||||
// Calculate bonuses from the upgrade. Can return a single value or an object with multiple values
|
||||
let ret = player.layers[this.layer].points
|
||||
.add(1)
|
||||
.pow(
|
||||
player.layers[this.layer].upgrades!.includes(24)
|
||||
? 1.1
|
||||
: player.layers[this.layer].upgrades!.includes(14)
|
||||
? 0.75
|
||||
: 0.5
|
||||
);
|
||||
if (ret.gte("1e20000000")) ret = ret.sqrt().times("1e10000000");
|
||||
return ret;
|
||||
},
|
||||
effectDisplay() {
|
||||
return format(this.effect as Decimal) + "x";
|
||||
} // Add formatting to the effect
|
||||
},
|
||||
13: {
|
||||
unlocked() {
|
||||
return hasUpgrade(this.layer, 12);
|
||||
},
|
||||
onPurchase() {
|
||||
// This function triggers when the upgrade is purchased
|
||||
player.layers[this.layer].unlockOrder = 0;
|
||||
},
|
||||
style() {
|
||||
if (hasUpgrade(this.layer, this.id))
|
||||
return {
|
||||
"background-color": "#1111dd"
|
||||
};
|
||||
else if (!this.canAfford) {
|
||||
return {
|
||||
"background-color": "#dd1111"
|
||||
};
|
||||
} // Otherwise use the default
|
||||
},
|
||||
canAfford() {
|
||||
return player.points.lte(7);
|
||||
},
|
||||
pay() {
|
||||
player.points = player.points.add(7);
|
||||
},
|
||||
fullDisplay:
|
||||
"Only buyable with less than 7 points, and gives you 7 more. Unlocks a secret subtab."
|
||||
},
|
||||
22: {
|
||||
title: "This upgrade doesn't exist",
|
||||
description: "Or does it?.",
|
||||
currencyLocation() {
|
||||
return player.layers[this.layer].buyables;
|
||||
}, // The object in player data that the currency is contained in
|
||||
currencyDisplayName: "exhancers", // Use if using a nonstandard currency
|
||||
currencyInternalName: 11, // Use if using a nonstandard currency
|
||||
|
||||
cost: new Decimal(3),
|
||||
unlocked() {
|
||||
return player.layers[this.layer].unlocked;
|
||||
} // The upgrade is only visible when this is true
|
||||
}
|
||||
}
|
||||
},
|
||||
buyables: {
|
||||
showBRespecButton: true,
|
||||
respec() {
|
||||
// Optional, reset things and give back your currency. Having this function makes a respec button appear
|
||||
player.layers[this.layer].points = player.layers[this.layer].points.add(
|
||||
player.layers[this.layer].spentOnBuyables as Decimal
|
||||
); // A built-in thing to keep track of this but only keeps a single value
|
||||
this.reset();
|
||||
resetLayer(this.layer, true); // Force a reset
|
||||
},
|
||||
respecButtonDisplay: "Respec Thingies", // Text on Respec button, optional
|
||||
respecWarningDisplay:
|
||||
"Are you sure? Respeccing these doesn't accomplish much.",
|
||||
data: {
|
||||
11: {
|
||||
title: "Exhancers", // Optional, displayed at the top in a larger font
|
||||
cost() {
|
||||
// cost for buying xth buyable, can be an object if there are multiple currencies
|
||||
let x = this.amount;
|
||||
if (x.gte(25)) x = x.pow(2).div(25);
|
||||
const cost = Decimal.pow(2, x.pow(1.5));
|
||||
return cost.floor();
|
||||
},
|
||||
effect() {
|
||||
// Effects of owning x of the items, x is a decimal
|
||||
const x = this.amount;
|
||||
const eff = {} as { first?: Decimal; second?: Decimal };
|
||||
if (x.gte(0)) eff.first = Decimal.pow(25, x.pow(1.1));
|
||||
else eff.first = Decimal.pow(1 / 25, x.times(-1).pow(1.1));
|
||||
|
||||
if (x.gte(0)) eff.second = x.pow(0.8);
|
||||
else
|
||||
eff.second = x
|
||||
.times(-1)
|
||||
.pow(0.8)
|
||||
.times(-1);
|
||||
return eff;
|
||||
},
|
||||
display() {
|
||||
// Everything else displayed in the buyable button after the title
|
||||
return (
|
||||
"Cost: " +
|
||||
format(this.cost!) +
|
||||
" lollipops\n\
|
||||
Amount: " +
|
||||
player.layers[this.layer].buyables![this.id] +
|
||||
"/4\n\
|
||||
Adds + " +
|
||||
format((this.effect as { first: Decimal; second: Decimal }).first) +
|
||||
" things and multiplies stuff by " +
|
||||
format((this.effect as { first: Decimal; second: Decimal }).second)
|
||||
);
|
||||
},
|
||||
unlocked() {
|
||||
return player.layers[this.layer].unlocked;
|
||||
},
|
||||
canAfford() {
|
||||
return player.layers[this.layer].points.gte(this.cost!);
|
||||
},
|
||||
buy() {
|
||||
const cost = this.cost!;
|
||||
player.layers[this.layer].points = player.layers[
|
||||
this.layer
|
||||
].points.sub(cost);
|
||||
player.layers[this.layer].buyables![this.id] = player.layers[
|
||||
this.layer
|
||||
].buyables![this.id].add(1);
|
||||
player.layers[this.layer].spentOnBuyables = (player.layers[
|
||||
this.layer
|
||||
].spentOnBuyables as Decimal).add(cost); // This is a built-in system that you can use for respeccing but it only works with a single Decimal value
|
||||
},
|
||||
buyMax() {}, // You'll have to handle this yourself if you want
|
||||
style: { height: "222px" },
|
||||
purchaseLimit: new Decimal(4),
|
||||
sellOne() {
|
||||
const amount = getBuyableAmount(this.layer, this.id)!;
|
||||
if (amount.lte(0)) return; // Only sell one if there is at least one
|
||||
setBuyableAmount(this.layer, this.id, amount.sub(1));
|
||||
player.layers[this.layer].points = player.layers[
|
||||
this.layer
|
||||
].points.add(this.cost!);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onReset(resettingLayer: string) {
|
||||
// Triggers when this layer is being reset, along with the layer doing the resetting. Not triggered by lower layers resetting, but is by layers on the same row.
|
||||
if (
|
||||
layers[resettingLayer].row != undefined &&
|
||||
this.row != undefined &&
|
||||
layers[resettingLayer].row! > this.row!
|
||||
)
|
||||
resetLayerData(this.layer, ["points"]); // This is actually the default behavior
|
||||
},
|
||||
automate() {}, // Do any automation inherent to this layer if appropriate
|
||||
resetsNothing() {
|
||||
return false;
|
||||
},
|
||||
onPrestige() {
|
||||
return;
|
||||
}, // Useful for if you gain secondary resources or have other interesting things happen to this layer when you reset it. You gain the currency after this function ends.
|
||||
|
||||
hotkeys: [
|
||||
{
|
||||
key: "c",
|
||||
description: "reset for lollipops or whatever",
|
||||
press() {
|
||||
if (layers[this.layer].canReset) resetLayer(this.layer);
|
||||
}
|
||||
},
|
||||
{
|
||||
key: "ctrl+c",
|
||||
description: "respec things",
|
||||
press() {
|
||||
layers[this.layer].buyables!.respec!();
|
||||
},
|
||||
unlocked() {
|
||||
return hasUpgrade("c", "22");
|
||||
}
|
||||
}
|
||||
],
|
||||
increaseUnlockOrder: [], // Array of layer names to have their order increased when this one is first unlocked
|
||||
|
||||
microtabs: {
|
||||
stuff: {
|
||||
data: {
|
||||
first: {
|
||||
display: `
|
||||
<upgrades />
|
||||
<div>confirmed</div>`
|
||||
},
|
||||
second: {
|
||||
embedLayer: "f"
|
||||
}
|
||||
}
|
||||
},
|
||||
otherStuff: {
|
||||
// There could be another set of microtabs here
|
||||
data: {}
|
||||
}
|
||||
},
|
||||
|
||||
bars: {
|
||||
data: {
|
||||
longBoi: {
|
||||
fillStyle: { "background-color": "#FFFFFF" },
|
||||
baseStyle: { "background-color": "#696969" },
|
||||
textStyle: { color: "#04e050" },
|
||||
|
||||
borderStyle() {
|
||||
return {};
|
||||
},
|
||||
direction: Direction.Right,
|
||||
width: 300,
|
||||
height: 30,
|
||||
progress() {
|
||||
return player.points
|
||||
.add(1)
|
||||
.log(10)
|
||||
.div(10)
|
||||
.toNumber();
|
||||
},
|
||||
display() {
|
||||
return format(player.points) + " / 1e10 points";
|
||||
},
|
||||
unlocked: true
|
||||
},
|
||||
tallBoi: {
|
||||
fillStyle: { "background-color": "#4BEC13" },
|
||||
baseStyle: { "background-color": "#000000" },
|
||||
textStyle: { "text-shadow": "0px 0px 2px #000000" },
|
||||
|
||||
borderStyle() {
|
||||
return { "border-width": "7px" };
|
||||
},
|
||||
direction: Direction.Up,
|
||||
width: 50,
|
||||
height: 200,
|
||||
progress() {
|
||||
return player.points.div(100);
|
||||
},
|
||||
display() {
|
||||
return formatWhole(player.points.div(1).min(100)) + "%";
|
||||
},
|
||||
unlocked: true
|
||||
},
|
||||
flatBoi: {
|
||||
fillStyle: { "background-color": "#FE0102" },
|
||||
baseStyle: { "background-color": "#222222" },
|
||||
textStyle: { "text-shadow": "0px 0px 2px #000000" },
|
||||
|
||||
borderStyle() {
|
||||
return {};
|
||||
},
|
||||
direction: Direction.Up,
|
||||
width: 100,
|
||||
height: 30,
|
||||
progress() {
|
||||
return player.layers.c.points.div(50);
|
||||
},
|
||||
unlocked: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Optional, lets you format the tab yourself by listing components. You can create your own components in v.js.
|
||||
subtabs: {
|
||||
"main tab": {
|
||||
buttonStyle() {
|
||||
return { color: "orange" };
|
||||
},
|
||||
notify: true,
|
||||
display: `
|
||||
<main-display />
|
||||
<sticky><prestige-button /></sticky>
|
||||
<resource-display />
|
||||
<spacer height="5px" />
|
||||
<button onclick='console.log("yeet")'>'HI'</button>
|
||||
<div>Name your points!</div>
|
||||
<TextField :value="player.layers.c.thingy" @input="value => player.layers.c.thingy = value" :field="false" />
|
||||
<sticky style="color: red; font-size: 32px; font-family: Comic Sans MS;">I have {{ format(player.points) }} {{ player.layers.c.thingy }} points!</sticky>
|
||||
<hr />
|
||||
<milestones />
|
||||
<spacer />
|
||||
<upgrades />
|
||||
<challenges />`,
|
||||
glowColor: "blue"
|
||||
},
|
||||
thingies: {
|
||||
resetNotify: true,
|
||||
style() {
|
||||
return { "background-color": "#222222", "--background": "#222222" };
|
||||
},
|
||||
buttonStyle() {
|
||||
return { "border-color": "orange" };
|
||||
},
|
||||
display: `
|
||||
<buyables />
|
||||
<spacer />
|
||||
<row style="width: 600px; height: 350px; background-color: green; border-style: solid;">
|
||||
<Toggle :value="player.layers.c.beep" @change="value => player.layers.c.beep = value" />
|
||||
<spacer width="30px" height="10px" />
|
||||
<div>Beep</div>
|
||||
<spacer />
|
||||
<vr height="200px"/>
|
||||
<column>
|
||||
<prestige-button style="width: 150px; height: 80px" />
|
||||
<prestige-button style="width: 100px; height: 150px" />
|
||||
</column>
|
||||
</row>
|
||||
<spacer />
|
||||
<img src="https://unsoftcapped2.github.io/The-Modding-Tree-2/discord.png" />`
|
||||
},
|
||||
jail: {
|
||||
display: `
|
||||
<infobox id="coolInfo" />
|
||||
<bar id="longBoi" />
|
||||
<spacer />
|
||||
<row>
|
||||
<column style="background-color: #555555; padding: 15px">
|
||||
<div style="color: teal">Sugar level:</div><spacer /><bar id="tallBoi" />
|
||||
</column>
|
||||
<spacer />
|
||||
<column>
|
||||
<div>idk</div>
|
||||
<spacer width="0" height="50px" />
|
||||
<bar id="flatBoi" />
|
||||
</column>
|
||||
</row>
|
||||
<spacer />
|
||||
<div>It's jail because "bars"! So funny! Ha ha!</div>
|
||||
<tree :nodes="[['f', 'c'], ['g', 'spook', 'h']]" />`
|
||||
},
|
||||
illuminati: {
|
||||
unlocked() {
|
||||
return hasUpgrade("c", 13);
|
||||
},
|
||||
display: `
|
||||
<h1> C O N F I R M E D </h1>
|
||||
<spacer />
|
||||
<microtab family="stuff" style="width: 660px; height: 370px; background-color: brown; --background: brown; border: solid white; margin: auto" />
|
||||
<div>Adjust how many points H gives you!</div>
|
||||
<Slider :value="player.layers.c.otherThingy" @change="value => player.c.otherThingy = value" :min="1" :max="30" />`
|
||||
}
|
||||
},
|
||||
style() {
|
||||
return {
|
||||
//'background-color': '#3325CC'
|
||||
};
|
||||
},
|
||||
nodeStyle() {
|
||||
return {
|
||||
// Style on the layer node
|
||||
color: "#3325CC",
|
||||
"text-decoration": "underline"
|
||||
};
|
||||
},
|
||||
glowColor: "orange", // If the node is highlighted, it will be this color (default is red)
|
||||
componentStyles: {
|
||||
challenge() {
|
||||
return { height: "200px" };
|
||||
},
|
||||
"prestige-button"() {
|
||||
return { color: "#AA66AA" };
|
||||
}
|
||||
},
|
||||
tooltip() {
|
||||
// Optional, tooltip displays when the layer is unlocked
|
||||
let tooltip = "{{ formatWhole(player.layers.c.points) }} {{ layers.c.resource }}";
|
||||
if (player.layers[this.layer].buyables![11].gt(0))
|
||||
tooltip +=
|
||||
"<br><i><br><br><br>{{ formatWhole(player.layers.c.buyables![11]) }} Exhancers</i>";
|
||||
return tooltip;
|
||||
},
|
||||
shouldNotify() {
|
||||
// Optional, layer will be highlighted on the tree if true.
|
||||
// Layer will automatically highlight if an upgrade is purchasable.
|
||||
return player.layers.c.buyables![11] == new Decimal(1);
|
||||
},
|
||||
mark: "https://unsoftcapped2.github.io/The-Modding-Tree-2/discord.png",
|
||||
resetDescription: "Melt your points into "
|
||||
} as RawLayer;
|
|
@ -1,151 +0,0 @@
|
|||
/* eslint-disable */
|
||||
import { layers as tmp } from "@/game/layers";
|
||||
import player from "@/game/player";
|
||||
import { RawLayer } from "@/typings/layer";
|
||||
import Decimal, { formatWhole } from "@/util/bignum";
|
||||
import { getClickableState } from "@/util/features";
|
||||
|
||||
export default {
|
||||
id: "f",
|
||||
infoboxes: {
|
||||
data: {
|
||||
coolInfo: {
|
||||
title: "Lore",
|
||||
titleStyle: { color: "#FE0000" },
|
||||
body: "DEEP LORE!",
|
||||
bodyStyle: { "background-color": "#0000EE" }
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
startData() {
|
||||
return {
|
||||
unlocked: false,
|
||||
points: new Decimal(0),
|
||||
boop: false,
|
||||
clickables: { [11]: "Start" } // Optional default Clickable state
|
||||
};
|
||||
},
|
||||
color: "#FE0102",
|
||||
requires() {
|
||||
return new Decimal(10);
|
||||
},
|
||||
resource: "farm points",
|
||||
baseResource: "points",
|
||||
baseAmount() {
|
||||
return player.points;
|
||||
},
|
||||
type: "static",
|
||||
exponent: 0.5,
|
||||
base: 3,
|
||||
roundUpCost: true,
|
||||
canBuyMax() {
|
||||
return false;
|
||||
},
|
||||
name: "Farms",
|
||||
//directMult() {return new Decimal(player.c.otherThingy)},
|
||||
|
||||
row: 1,
|
||||
branches: [
|
||||
{
|
||||
target: "c",
|
||||
"stroke-width": "25px",
|
||||
stroke: "blue",
|
||||
style: "filter: blur(5px)"
|
||||
}
|
||||
], // When this layer appears, a branch will appear from this layer to any layers here. Each entry can be a pair consisting of a layer id and a color.
|
||||
|
||||
tooltipLocked() {
|
||||
// Optional, tooltip displays when the layer is locked
|
||||
return "This weird farmer dinosaur will only see you if you have at least {{layers.f.requires}} points. You only have {{ formatWhole(player.points) }}";
|
||||
},
|
||||
midsection:
|
||||
'<div><br/><img src="https://images.beano.com/store/24ab3094eb95e5373bca1ccd6f330d4406db8d1f517fc4170b32e146f80d?auto=compress%2Cformat&dpr=1&w=390" /><div>Bork Bork!</div></div>',
|
||||
// The following are only currently used for "custom" Prestige type:
|
||||
prestigeButtonDisplay() {
|
||||
//Is secretly HTML
|
||||
if (!this.canBuyMax)
|
||||
return (
|
||||
"Hi! I'm a <u>weird dinosaur</u> and I'll give you a Farm Point in exchange for all of your points and lollipops! (At least " +
|
||||
formatWhole(tmp[this.layer].nextAt) +
|
||||
" points)"
|
||||
);
|
||||
if (this.canBuyMax)
|
||||
return (
|
||||
"Hi! I'm a <u>weird dinosaur</u> and I'll give you <b>" +
|
||||
formatWhole(tmp[this.layer].resetGain) +
|
||||
"</b> Farm Points in exchange for all of your points and lollipops! (You'll get another one at " +
|
||||
formatWhole(tmp[this.layer].nextAt) +
|
||||
" points)"
|
||||
);
|
||||
},
|
||||
canReset() {
|
||||
return Decimal.gte(tmp[this.layer].baseAmount!, tmp[this.layer].nextAt);
|
||||
},
|
||||
// This is also non minimal, a Clickable!
|
||||
clickables: {
|
||||
masterButtonClick() {
|
||||
if (getClickableState(this.layer, 11) == "Borkened...")
|
||||
player.layers[this.layer].clickables![11] = "Start";
|
||||
},
|
||||
masterButtonDisplay() {
|
||||
return getClickableState(this.layer, 11) == "Borkened..."
|
||||
? "Fix the clickable!"
|
||||
: "Does nothing";
|
||||
}, // Text on Respec button, optional
|
||||
data: {
|
||||
11: {
|
||||
title: "Clicky clicky!", // Optional, displayed at the top in a larger font
|
||||
display() {
|
||||
// Everything else displayed in the buyable button after the title
|
||||
const data = getClickableState(this.layer, this.id);
|
||||
return "Current state:<br>" + data;
|
||||
},
|
||||
unlocked() {
|
||||
return player.layers[this.layer].unlocked;
|
||||
},
|
||||
canClick() {
|
||||
return getClickableState(this.layer, this.id) !== "Borkened...";
|
||||
},
|
||||
click() {
|
||||
switch (getClickableState(this.layer, this.id)) {
|
||||
case "Start":
|
||||
player.layers[this.layer].clickables![this.id] = "A new state!";
|
||||
break;
|
||||
case "A new state!":
|
||||
player.layers[this.layer].clickables![this.id] = "Keep going!";
|
||||
break;
|
||||
case "Keep going!":
|
||||
player.layers[this.layer].clickables![this.id] =
|
||||
"Maybe that's a bit too far...";
|
||||
break;
|
||||
case "Maybe that's a bit too far...":
|
||||
//makeParticles(coolParticle, 4)
|
||||
player.layers[this.layer].clickables![this.id] = "Borkened...";
|
||||
break;
|
||||
default:
|
||||
player.layers[this.layer].clickables![this.id] = "Start";
|
||||
break;
|
||||
}
|
||||
},
|
||||
hold() {
|
||||
console.log("Clickkkkk...");
|
||||
},
|
||||
style() {
|
||||
switch (getClickableState(this.layer, this.id)) {
|
||||
case "Start":
|
||||
return { "background-color": "green" };
|
||||
case "A new state!":
|
||||
return { "background-color": "yellow" };
|
||||
case "Keep going!":
|
||||
return { "background-color": "orange" };
|
||||
case "Maybe that's a bit too far...":
|
||||
return { "background-color": "red" };
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} as RawLayer;
|
|
@ -1,354 +0,0 @@
|
|||
/* eslint-disable */
|
||||
import { layers } from "@/game/layers";
|
||||
import player from "@/game/player";
|
||||
import { Layer, RawLayer } from "@/typings/layer";
|
||||
import Decimal, { format } from "@/util/bignum";
|
||||
import {
|
||||
getBuyableAmount, hasChallenge, hasMilestone, hasUpgrade, setBuyableAmount
|
||||
} from "@/util/features";
|
||||
import { resetLayer } from "@/util/layers";
|
||||
|
||||
export default {
|
||||
id: "i",
|
||||
position: 2, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order
|
||||
startData() {
|
||||
return {
|
||||
unlocked: false,
|
||||
points: new Decimal(0)
|
||||
};
|
||||
},
|
||||
branches: ["p"],
|
||||
color: "#964B00",
|
||||
requires() {
|
||||
const require = new Decimal(8).plus(
|
||||
player.layers.i.points
|
||||
.div(10)
|
||||
.floor()
|
||||
.times(2)
|
||||
);
|
||||
return require;
|
||||
}, // Can be a function that takes requirement increases into account
|
||||
effectDisplay() {
|
||||
return (
|
||||
"Multiplying points and prestige points by " +
|
||||
format(
|
||||
player.layers[this.layer].points
|
||||
.plus(1)
|
||||
.pow(hasUpgrade("p", 235) ? 6.942 : 1)
|
||||
)
|
||||
);
|
||||
},
|
||||
resource: "Infinity", // Name of prestige currency
|
||||
baseResource: "pointy points", // Name of resource prestige is based on
|
||||
baseAmount() {
|
||||
return player.layers.p.buyables![21];
|
||||
}, // Get the current amount of baseResource
|
||||
type: "custom", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have
|
||||
resetGain() {
|
||||
if (hasMilestone("p", 12)) {
|
||||
return getBuyableAmount("p", 21)!
|
||||
.div(2)
|
||||
.floor()
|
||||
.times(2)
|
||||
.times(5)
|
||||
.sub(30)
|
||||
.sub(player.layers.i.points);
|
||||
}
|
||||
return player.layers.p.buyables![21].gte(layers.i.requires!) ? 1 : 0;
|
||||
}, // Prestige currency exponent
|
||||
getNextAt() {
|
||||
return new Decimal(100);
|
||||
},
|
||||
canReset() {
|
||||
return player.layers.p.buyables![21].gte(layers.i.requires!);
|
||||
},
|
||||
prestigeButtonDisplay() {
|
||||
return (
|
||||
"Reset everything for +" +
|
||||
format(layers.i.resetGain) +
|
||||
" Infinity.<br>You need " +
|
||||
format(layers.i.requires!) +
|
||||
" pointy points to reset."
|
||||
);
|
||||
},
|
||||
row: 1, // Row the layer is in on the tree (0 is the first row)
|
||||
hotkeys: [
|
||||
{
|
||||
key: "i",
|
||||
description: "I: Infinity",
|
||||
press() {
|
||||
if (layers.i.canReset) resetLayer(this.layer);
|
||||
}
|
||||
}
|
||||
],
|
||||
layerShown() {
|
||||
return (
|
||||
player.layers[this.layer].unlocked ||
|
||||
new Decimal(player.layers.p.buyables[21]).gte(8)
|
||||
);
|
||||
},
|
||||
milestones: {
|
||||
data: {
|
||||
0: {
|
||||
requirementDisplay: "2 Infinity points",
|
||||
effectDisplay: "Keep ALL milestones on reset",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(2);
|
||||
}
|
||||
},
|
||||
1: {
|
||||
requirementDisplay: "3 Infinity points",
|
||||
effectDisplay: "Pointy points don't reset generators",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(3);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, Number(this.id) - 1);
|
||||
}
|
||||
},
|
||||
2: {
|
||||
requirementDisplay: "4 Infinity points",
|
||||
effectDisplay:
|
||||
"Start with 6 <b>Time Dilation</b>, 3 <b>Point</b>, and 1 of the other 2 challenges",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(4);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, Number(this.id) - 1);
|
||||
}
|
||||
},
|
||||
3: {
|
||||
requirementDisplay: "5 Infinity points",
|
||||
effectDisplay: "Start with 40 upgrades and 6 boosts",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(5);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, Number(this.id) - 1);
|
||||
}
|
||||
},
|
||||
4: {
|
||||
requirementDisplay: "6 Infinity points",
|
||||
effectDisplay:
|
||||
"You can choose all of the 14th row upgrades, and remove the respec button",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(6);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, Number(this.id) - 1);
|
||||
}
|
||||
},
|
||||
5: {
|
||||
requirementDisplay: "8 Infinity points",
|
||||
effectDisplay: "Keep all upgrades and 7 Time dilation",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(8);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, Number(this.id) - 1);
|
||||
}
|
||||
},
|
||||
6: {
|
||||
requirementDisplay: "10 Infinity points",
|
||||
effectDisplay: "Infinity reset nothing and auto prestige",
|
||||
done() {
|
||||
return player.layers[this.layer].points.gte(10);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, Number(this.id) - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
resetsNothing() {
|
||||
return hasMilestone(this.layer, 6);
|
||||
},
|
||||
update(this: Layer) {
|
||||
if (hasMilestone(this.layer, 0)) {
|
||||
if (!hasMilestone("p", 0)) {
|
||||
player.layers.p.milestones!.push(0);
|
||||
player.layers.p.milestones!.push(1);
|
||||
player.layers.p.milestones!.push(2);
|
||||
player.layers.p.milestones!.push(3);
|
||||
player.layers.p.milestones!.push(4);
|
||||
player.layers.p.milestones!.push(5);
|
||||
player.layers.p.milestones!.push(6);
|
||||
player.layers.p.milestones!.push(7);
|
||||
player.layers.p.milestones!.push(8);
|
||||
}
|
||||
}
|
||||
if (hasMilestone(this.layer, 2)) {
|
||||
if (!hasChallenge("p", 11)) {
|
||||
player.layers.p.challenges![11] = new Decimal(
|
||||
hasMilestone(this.layer, 5) ? 7 : 6
|
||||
);
|
||||
player.layers.p.challenges![12] = new Decimal(3);
|
||||
player.layers.p.challenges![21] = new Decimal(1);
|
||||
player.layers.p.challenges![22] = new Decimal(1);
|
||||
}
|
||||
}
|
||||
if (hasMilestone(this.layer, 3)) {
|
||||
if (!hasUpgrade("p", 71)) {
|
||||
player.layers.p.upgrades = [
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
31,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
41,
|
||||
42,
|
||||
43,
|
||||
44,
|
||||
51,
|
||||
52,
|
||||
53,
|
||||
54,
|
||||
61,
|
||||
62,
|
||||
63,
|
||||
64,
|
||||
71,
|
||||
72,
|
||||
73,
|
||||
74,
|
||||
81,
|
||||
82,
|
||||
83,
|
||||
84,
|
||||
91,
|
||||
92,
|
||||
93,
|
||||
94,
|
||||
101,
|
||||
102,
|
||||
103,
|
||||
104
|
||||
];
|
||||
}
|
||||
if (getBuyableAmount("p", 11)!.lt(6)) {
|
||||
setBuyableAmount("p", 11, new Decimal(6));
|
||||
}
|
||||
}
|
||||
if (hasUpgrade(this.layer, 13)) {
|
||||
for (
|
||||
let i = 0;
|
||||
i < (hasUpgrade("p", 222) ? 100 : hasUpgrade("p", 215) ? 10 : 1);
|
||||
i++
|
||||
) {
|
||||
if (layers.p.buyables!.data[12].canAfford) layers.p.buyables!.data[12].buy();
|
||||
if (layers.p.buyables!.data[13].canAfford) layers.p.buyables!.data[13].buy();
|
||||
if (
|
||||
layers.p.buyables!.data[14].canAfford &&
|
||||
layers.p.buyables!.data[14].unlocked
|
||||
)
|
||||
layers.p.buyables!.data[14].buy();
|
||||
if (layers.p.buyables!.data[21].canAfford) layers.p.buyables!.data[21].buy();
|
||||
}
|
||||
}
|
||||
if (hasUpgrade("p", 223)) {
|
||||
if (hasMilestone("p", 14))
|
||||
player.layers.p.buyables![22] = player.layers.p.buyables![22].max(
|
||||
player.layers.p.buyables![21].sub(7)
|
||||
);
|
||||
else if (layers.p.buyables!.data[22].canAfford) layers.p.buyables!.data[22].buy();
|
||||
}
|
||||
if (hasMilestone(this.layer, 5) && !hasUpgrade("p", 111)) {
|
||||
player.layers.p.upgrades = [
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
21,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
31,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
41,
|
||||
42,
|
||||
43,
|
||||
44,
|
||||
51,
|
||||
52,
|
||||
53,
|
||||
54,
|
||||
61,
|
||||
62,
|
||||
63,
|
||||
64,
|
||||
71,
|
||||
72,
|
||||
73,
|
||||
74,
|
||||
81,
|
||||
82,
|
||||
83,
|
||||
84,
|
||||
91,
|
||||
92,
|
||||
93,
|
||||
94,
|
||||
101,
|
||||
102,
|
||||
103,
|
||||
104,
|
||||
111,
|
||||
121,
|
||||
122,
|
||||
131,
|
||||
132,
|
||||
141,
|
||||
142,
|
||||
143
|
||||
];
|
||||
}
|
||||
if (hasMilestone(this.layer, 6)) {
|
||||
this.reset();
|
||||
}
|
||||
},
|
||||
upgrades: {
|
||||
rows: 999,
|
||||
cols: 5,
|
||||
data: {
|
||||
11: {
|
||||
title: "Prestige",
|
||||
description: "Gain 100% of prestige points per second",
|
||||
cost() {
|
||||
return new Decimal(1);
|
||||
},
|
||||
unlocked() {
|
||||
return hasMilestone(this.layer, 4);
|
||||
}
|
||||
},
|
||||
12: {
|
||||
title: "Automation",
|
||||
description: "Remove the nerf of upgrade <b>Active</b>",
|
||||
cost() {
|
||||
return new Decimal(2);
|
||||
},
|
||||
unlocked() {
|
||||
return hasUpgrade(this.layer, 11);
|
||||
}
|
||||
},
|
||||
13: {
|
||||
title: "Pointy",
|
||||
description: "Automatically buy generators and pointy points",
|
||||
cost() {
|
||||
return new Decimal(5);
|
||||
},
|
||||
unlocked() {
|
||||
return hasUpgrade(this.layer, 11);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} as RawLayer;
|
File diff suppressed because it is too large
Load diff
11
src/data/layers/main.ts
Normal file
11
src/data/layers/main.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import { RawLayer } from "@/typings/layer";
|
||||
|
||||
export default {
|
||||
id: "main",
|
||||
display: `
|
||||
<div v-if="player.devSpeed === 0">Game Paused</div>
|
||||
<div v-else-if="player.devSpeed && player.devSpeed !== 1">Dev Speed: {{ format(player.devSpeed) }}x</div>
|
||||
<div>TODO: Board</div>
|
||||
`,
|
||||
minimizable: false
|
||||
} as RawLayer;
|
156
src/data/mod.ts
156
src/data/mod.ts
|
@ -1,97 +1,13 @@
|
|||
import { layers } from "@/game/layers";
|
||||
import player from "@/game/player";
|
||||
import { RawLayer } from "@/typings/layer";
|
||||
import { PlayerData } from "@/typings/player";
|
||||
import Decimal from "@/util/bignum";
|
||||
import {
|
||||
getBuyableAmount,
|
||||
hasMilestone,
|
||||
hasUpgrade,
|
||||
inChallenge,
|
||||
upgradeEffect
|
||||
} from "@/util/features";
|
||||
import { computed } from "vue";
|
||||
import a from "./layers/aca/a";
|
||||
import c from "./layers/aca/c";
|
||||
import f from "./layers/aca/f";
|
||||
import demoLayer from "./layers/demo";
|
||||
import demoInfinityLayer from "./layers/demo-infinity";
|
||||
|
||||
// Import initial layers
|
||||
|
||||
const g = {
|
||||
id: "g",
|
||||
symbol: "TH",
|
||||
branches: ["c"],
|
||||
color: "#6d3678",
|
||||
shown: true,
|
||||
canClick() {
|
||||
return player.points.gte(10);
|
||||
},
|
||||
tooltip: "Thanos your points",
|
||||
click() {
|
||||
player.points = player.points.div(2);
|
||||
console.log(this.layer);
|
||||
}
|
||||
} as RawLayer;
|
||||
const h = {
|
||||
id: "h",
|
||||
branches: [
|
||||
"g",
|
||||
() => ({
|
||||
target: "flatBoi",
|
||||
featureType: "bar",
|
||||
endOffset: {
|
||||
x:
|
||||
-50 +
|
||||
100 *
|
||||
(layers.c.bars!.data.flatBoi.progress instanceof Number
|
||||
? (layers.c.bars!.data.flatBoi.progress as number)
|
||||
: (layers.c.bars!.data.flatBoi.progress as Decimal).toNumber())
|
||||
}
|
||||
})
|
||||
],
|
||||
tooltip() {
|
||||
return "Restore your points to {{ player.c.otherThingy }}";
|
||||
},
|
||||
row: "side",
|
||||
position: 3,
|
||||
canClick() {
|
||||
return player.points.lt(player.layers.c.otherThingy as Decimal);
|
||||
},
|
||||
click() {
|
||||
player.points = new Decimal(player.layers.c.otherThingy as Decimal);
|
||||
}
|
||||
} as RawLayer;
|
||||
const spook = {
|
||||
id: "spook",
|
||||
row: 1,
|
||||
layerShown: "ghost"
|
||||
} as RawLayer;
|
||||
|
||||
const main = {
|
||||
id: "main",
|
||||
display: `
|
||||
<div v-if="player.devSpeed === 0">Game Paused</div>
|
||||
<div v-else-if="player.devSpeed && player.devSpeed !== 1">Dev Speed: {{ format(player.devSpeed) }}x</div>
|
||||
<div v-if="player.offTime != undefined">Offline Time: {{ formatTime(player.offTime.remain) }}</div>
|
||||
<div>
|
||||
<span v-if="player.points.lt('1e1000')">You have </span>
|
||||
<h2>{{ format(player.points) }}</h2>
|
||||
<span v-if="player.points.lt('1e1e6')"> points</span>
|
||||
</div>
|
||||
<div v-if="Decimal.gt(pointGain, 0)">
|
||||
({{ player.oompsMag != 0 ? format(player.oomps) + " OOM" + (player.oompsMag < 0 ? "^OOM" : player.oompsMag > 1 ? "^" + player.oompsMag : "") + "s" : formatSmall(pointGain) }}/sec)
|
||||
</div>
|
||||
<spacer />
|
||||
<tree :append="true" />`,
|
||||
name: "Tree"
|
||||
} as RawLayer;
|
||||
import main from "./layers/main";
|
||||
|
||||
export const getInitialLayers = (
|
||||
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
||||
playerData: Partial<PlayerData>
|
||||
): Array<RawLayer> => [main, f, c, a, g, h, spook, demoLayer, demoInfinityLayer];
|
||||
): Array<RawLayer> => [main];
|
||||
|
||||
export function getStartingData(): Record<string, unknown> {
|
||||
return {
|
||||
|
@ -104,73 +20,7 @@ export const hasWon = computed(() => {
|
|||
});
|
||||
|
||||
export const pointGain = computed(() => {
|
||||
if (!hasUpgrade("c", 11)) return new Decimal(0);
|
||||
let gain = new Decimal(3.19);
|
||||
if (hasUpgrade("c", 12)) gain = gain.times(upgradeEffect("c", 12) as Decimal);
|
||||
if (hasMilestone("p", 0)) gain = gain.plus(0.01);
|
||||
if (hasMilestone("p", 4)) {
|
||||
if (hasUpgrade("p", 12)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 13)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 14)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 21)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 22)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 23)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 31)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 32)) gain = gain.plus(0.1);
|
||||
if (hasUpgrade("p", 33)) gain = gain.plus(0.1);
|
||||
}
|
||||
if (hasUpgrade("p", 11))
|
||||
gain = gain.plus(
|
||||
hasUpgrade("p", 34)
|
||||
? new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal)
|
||||
: 1
|
||||
);
|
||||
if (hasUpgrade("p", 12))
|
||||
gain = gain.times(
|
||||
hasUpgrade("p", 34)
|
||||
? new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal)
|
||||
: 1
|
||||
);
|
||||
if (hasUpgrade("p", 13))
|
||||
gain = gain.pow(
|
||||
hasUpgrade("p", 34)
|
||||
? new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal)
|
||||
: 1
|
||||
);
|
||||
if (hasUpgrade("p", 14))
|
||||
gain = gain.tetrate(
|
||||
hasUpgrade("p", 34)
|
||||
? new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal).toNumber()
|
||||
: 1
|
||||
);
|
||||
|
||||
if (hasUpgrade("p", 71)) gain = gain.plus(1.1);
|
||||
if (hasUpgrade("p", 72)) gain = gain.times(1.1);
|
||||
if (hasUpgrade("p", 73)) gain = gain.pow(1.1);
|
||||
if (hasUpgrade("p", 74)) gain = gain.tetrate(1.1);
|
||||
if (hasMilestone("p", 5) && !inChallenge("p", 22)) {
|
||||
const asdf = hasUpgrade("p", 132)
|
||||
? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(2))
|
||||
: hasUpgrade("p", 101)
|
||||
? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(3))
|
||||
: hasUpgrade("p", 93)
|
||||
? (player.layers.p.gp as Decimal).plus(1).pow(0.2)
|
||||
: (player.layers.p.gp as Decimal).plus(1).log10();
|
||||
gain = gain.plus(asdf);
|
||||
if (hasUpgrade("p", 213)) gain = gain.mul(asdf.plus(1));
|
||||
}
|
||||
if (hasUpgrade("p", 104)) gain = gain.times(player.layers.p.points.plus(1).pow(0.5));
|
||||
if (hasUpgrade("p", 142)) gain = gain.times(5);
|
||||
if (player.layers.i.unlocked)
|
||||
gain = gain.times(player.layers.i.points.plus(1).pow(hasUpgrade("p", 235) ? 6.942 : 1));
|
||||
if (inChallenge("p", 11) || inChallenge("p", 21))
|
||||
gain = new Decimal(10).pow(gain.log10().pow(0.75));
|
||||
if (inChallenge("p", 12) || inChallenge("p", 21))
|
||||
gain = gain.pow(new Decimal(1).sub(new Decimal(1).div(getBuyableAmount("p", 11)!.plus(1))));
|
||||
if (hasUpgrade("p", 211)) gain = gain.times(getBuyableAmount("p", 21)!.plus(1));
|
||||
if (hasMilestone("p", 13)) gain = gain.times(layers.p.buyables!.data[31].effect as Decimal);
|
||||
if (hasMilestone("p", 13)) gain = gain.pow(layers.p.buyables!.data[42].effect as Decimal);
|
||||
return gain;
|
||||
return new Decimal(0);
|
||||
});
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"title": "The Modding Tree X",
|
||||
"id": "tmt-x",
|
||||
"title": "Side Project",
|
||||
"id": "side-project",
|
||||
"author": "thepaperpilot",
|
||||
"discordName": "The Paper Pilot Community",
|
||||
"discordLink": "https://discord.gg/WzejVAx",
|
||||
|
@ -14,8 +14,8 @@
|
|||
"useHeader": true,
|
||||
"banner": null,
|
||||
"logo": null,
|
||||
"initialTabs": [ "main", "c" ],
|
||||
"initialTabs": [ "main" ],
|
||||
|
||||
"maxTickLength": 3600,
|
||||
"offlineLimit": 1
|
||||
"offlineLimit": 0
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue