mirror of
https://github.com/thepaperpilot/The-Modding-Tree.git
synced 2025-01-31 07:31:36 +00:00
Set up webstorm and resolved a ton of its warnings
This commit is contained in:
parent
f287032bd1
commit
366f4f6ebc
37 changed files with 1623 additions and 1291 deletions
|
@ -1,9 +1,14 @@
|
|||
// eslint-disable-next-line no-undef
|
||||
module.exports = {
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2021": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
'plugin:vue/recommended',
|
||||
'@vue/standard'
|
||||
],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 12
|
||||
},
|
||||
|
|
13
.idea/The-Modding-Tree.iml
generated
Normal file
13
.idea/The-Modding-Tree.iml
generated
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="vue" level="application" />
|
||||
</component>
|
||||
</module>
|
21
.idea/codeStyles/Project.xml
generated
Normal file
21
.idea/codeStyles/Project.xml
generated
Normal file
|
@ -0,0 +1,21 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<option name="LINE_SEPARATOR" value=" " />
|
||||
<JSCodeStyleSettings version="0">
|
||||
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||
</JSCodeStyleSettings>
|
||||
<codeStyleSettings language="JavaScript">
|
||||
<option name="INDENT_CASE_FROM_SWITCH" value="false" />
|
||||
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
|
||||
<option name="ALIGN_MULTILINE_FOR" value="false" />
|
||||
<option name="IF_BRACE_FORCE" value="3" />
|
||||
<option name="DOWHILE_BRACE_FORCE" value="3" />
|
||||
<option name="WHILE_BRACE_FORCE" value="3" />
|
||||
<option name="FOR_BRACE_FORCE" value="3" />
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</component>
|
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
|
@ -0,0 +1,5 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
24
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
24
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
|
@ -0,0 +1,24 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="myValues">
|
||||
<value>
|
||||
<list size="7">
|
||||
<item index="0" class="java.lang.String" itemvalue="nobr" />
|
||||
<item index="1" class="java.lang.String" itemvalue="noembed" />
|
||||
<item index="2" class="java.lang.String" itemvalue="comment" />
|
||||
<item index="3" class="java.lang.String" itemvalue="noscript" />
|
||||
<item index="4" class="java.lang.String" itemvalue="embed" />
|
||||
<item index="5" class="java.lang.String" itemvalue="script" />
|
||||
<item index="6" class="java.lang.String" itemvalue="fedropshadow" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myCustomValuesEnabled" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="JSUnresolvedVariable" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="JSValidateTypes" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||
</profile>
|
||||
</component>
|
7
.idea/jsLibraryMappings.xml
generated
Normal file
7
.idea/jsLibraryMappings.xml
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptLibraryMappings">
|
||||
<file url="PROJECT" libraries="{vue}" />
|
||||
<includedPredefinedLibrary name="Node.js Core" />
|
||||
</component>
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/The-Modding-Tree.iml" filepath="$PROJECT_DIR$/.idea/The-Modding-Tree.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
118
demo.html
118
demo.html
|
@ -1,118 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="popup.css" />
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet">
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12"></script>
|
||||
<script src="js/technical/break_eternity.js"></script>
|
||||
<script src="js/technical/layerSupport.js"></script>
|
||||
<script src="js/demo/demoTree.js"></script>
|
||||
<script src="js/demo/demoLayers.js"></script>
|
||||
<script src="js/demo/demoMod.js"></script>
|
||||
<script src="js/technical/temp.js"></script>
|
||||
<script src="js/game.js"></script>
|
||||
<script src="js/utils.js"></script>
|
||||
<script src="js/technical/systemComponents.js"></script>
|
||||
<script src="js/components.js"></script>
|
||||
<script src="js/technical/canvas.js"></script>
|
||||
<script src="js/utils/NumberFormating.js"></script>
|
||||
<script src="js/utils/options.js"></script>
|
||||
<script src="js/utils/save.js"></script>
|
||||
<script src="js/utils/themes.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="load()">
|
||||
<div id="app">
|
||||
<canvas id="treeCanvas" class="canvas" v-if="!(gameEnded && !player.keepGoing)"></canvas>
|
||||
|
||||
<div v-if="false" id="loadingSection" class="fullWidth">
|
||||
<h1>Loading... (If this takes too long it means there was a serious error!)←</h1>
|
||||
</div>
|
||||
<div class="vl" v-if="player.navTab!= 'none' &&player.tab!='none'&&!(gameEnded && !player.keepGoing)"></div>
|
||||
<div v-if="(gameEnded && !player.keepGoing)" class="fullWidth">
|
||||
<br>
|
||||
<h2>{{modInfo.name}} {{VERSION.withoutName}}</h2><br><br>
|
||||
<h3 v-html="modInfo.winText"></h3><br>
|
||||
<h3>Please check the Discord to see if there are new content updates!</h3><br><br>
|
||||
<div v-if="!player.timePlayedReset">It took you {{formatTime(player.timePlayed)}} to beat the game.</div>
|
||||
<br>
|
||||
<button class="longUpg can" onclick="hardReset(true)">Play Again</button> <button
|
||||
class="longUpg can" onclick="keepGoing()">Keep Going</button>
|
||||
<br><br><br>
|
||||
<span v-if="modInfo.discordLink"><a class="link" v-bind:href="modInfo.discordLink"
|
||||
target="_blank">{{modInfo.discordName}}</a><br></span>
|
||||
<a class="link" href="https://discord.gg/F3xveHV" target="_blank"
|
||||
v-bind:style="modInfo.discordLink ? {'font-size': '16px'} : {}">The Modding Tree Discord</a><br>
|
||||
<a class="link" href="http://discord.gg/wwQfgPa" target="_blank" v-bind:style="{'font-size': '16px'}">Main
|
||||
Prestige Tree server</a><br>
|
||||
<br><br>
|
||||
</div>
|
||||
|
||||
<div id="treeOverlay" v-if="!(gameEnded && !player.keepGoing)" class="treeOverlay" onscroll="resizeCanvas()"
|
||||
v-bind:class="{ fullWidth: (player.tab == 'none' || player.navTab == 'none'), col: (player.tab !== 'none' && player.navTab !== 'none'), left: (player.tab !== 'none' && player.navTab !== 'none')}">
|
||||
<div id="version" onclick="showTab('changelog-tab')" class="overlayThing" style="margin-right: 13px">
|
||||
{{VERSION.withoutName}}</div>
|
||||
<button
|
||||
v-if="player.navTab == 'none' && (tmp[player.tab].row == 'side' || tmp[player.tab].row == 'otherside')"
|
||||
class="other-back overlayThing" onclick="goBack()">←</button>
|
||||
<img id="optionWheel" class="overlayThing" v-if="player.tab!='options-tab'" src="options_wheel.png"
|
||||
onclick="showTab('options-tab')"></img>
|
||||
<div id="info" v-if="player.tab!='info-tab'" class="overlayThing" onclick="showTab('info-tab')"><br>i</div>
|
||||
<div id="discord" class="overlayThing">
|
||||
<img onclick="window.open((modInfo.discordLink ? modInfo.discordLink : 'https://discord.gg/F3xveHV'),'mywindow')"
|
||||
src="discord.png" target="_blank"></img>
|
||||
<ul id="discord-links">
|
||||
<li v-if="modInfo.discordLink"><a class="link" v-bind:href="modInfo.discordLink"
|
||||
target="_blank">{{modInfo.discordName}}</a><br></li>
|
||||
<li><a class="link" href="https://discord.gg/F3xveHV" target="_blank"
|
||||
v-bind:style="modInfo.discordLink ? {'font-size': '16px'} : {}">The Modding Tree
|
||||
Discord</a><br></li>
|
||||
<li><a class="link" href="http://discord.gg/wwQfgPa" target="_blank"
|
||||
v-bind:style="{'font-size': '16px'}">Main Prestige Tree server</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<overlay-head v-if="!(gameEnded && !player.keepGoing)"></overlay-head>
|
||||
<div class="sideLayers">
|
||||
<div v-for="(node, index) in OTHER_LAYERS['side']">
|
||||
<tree-node :layer='node' :abb='tmp[node].symbol' :size="'small'" :key="'side' + index"></tree-node>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="!(gameEnded && !player.keepGoing)" id="treeTab" v-bind:style="{'z-index': (tmp.scrolled ? '1' : '5000')}" onscroll="resizeCanvas()"
|
||||
v-bind:class="{ fullWidth: (player.tab == 'none' || player.navTab == 'none'), col: (player.tab !== 'none' && player.navTab !== 'none'), left: (player.tab !== 'none' && player.navTab !== 'none')}">
|
||||
<br><br><br><br>
|
||||
<overlay-head id="fakeHead" style="visibility: hidden;">
|
||||
</overlay-head>
|
||||
|
||||
<layer-tab :layer="player.navTab == 'none' ? player.tab : player.navTab" :key="'left'"></layer-tab>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Popups -->
|
||||
<div class="popup-container">
|
||||
<transition-group name="fade">
|
||||
<div v-for="popup,index in activePopups" class="popup" v-bind:class="popup.type"
|
||||
v-bind:key="'p' + popup.id" v-on:click="() => {activePopups.splice(index, 1)}" v-bind:style="popup.color ? {'background-color': popup.color} : {}">
|
||||
<h3>{{popup.title}}</h3><br>
|
||||
<h2 v-html="popup.message"></h2>
|
||||
</div>
|
||||
</transition-group>
|
||||
</div>
|
||||
|
||||
<div v-if="player.navTab !== 'none' && player.tab !== 'none' && !(gameEnded && !player.keepGoing)"
|
||||
onscroll="resizeCanvas()"
|
||||
v-bind:class="{ fullWidth: player.navTab == 'none', col: player.navTab != 'none', right: player.navTab != 'none', fast: true, tab: true}">
|
||||
<div v-for="layer in LAYERS">
|
||||
<div v-if="player.tab==layer">
|
||||
<layer-tab :layer="layer" :back="'none'" :spacing="'50px'" :key="'left'"></layer-tab>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
29
index.html
29
index.html
|
@ -23,7 +23,7 @@
|
|||
<script type="text/javascript" src="js/technical/systemComponents.js"></script>
|
||||
<script type="text/javascript" src="js/components.js"></script>
|
||||
<script type="text/javascript" src="js/technical/canvas.js"></script>
|
||||
<script type="text/javascript" src="js/utils/NumberFormating.js"></script>
|
||||
<script type="text/javascript" src="js/utils/NumberFormatting.js"></script>
|
||||
<script type="text/javascript" src="js/utils/options.js"></script>
|
||||
<script type="text/javascript" src="js/utils/save.js"></script>
|
||||
<script type="text/javascript" src="js/utils/themes.js"></script>
|
||||
|
@ -36,6 +36,8 @@
|
|||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<title>❚◀RONOS</title>
|
||||
|
||||
</head>
|
||||
|
||||
<body onload="load()">
|
||||
|
@ -43,24 +45,25 @@
|
|||
<canvas id="treeCanvas" class="canvas" v-if ="!(gameEnded && !player.keepGoing)"></canvas>
|
||||
|
||||
<div class="nav">
|
||||
<img src="images/banner.png" height="50px" />
|
||||
<img src="images/banner.png" height="50px" alt="banner"/>
|
||||
<div id="version" onclick="showTab('changelog-tab')" style="margin-right: 13px">{{VERSION.withoutName}}</div>
|
||||
<div style="flex-grow:1"></div>
|
||||
<div id="discord">
|
||||
<img onclick="window.open((modInfo.discordLink ? modInfo.discordLink : 'https://discord.gg/F3xveHV'),'mywindow')" src="discord.png" target="_blank"></img>
|
||||
<img onclick="window.open((modInfo.discordLink ? modInfo.discordLink : 'https://discord.gg/F3xveHV'),'mywindow')"
|
||||
src="discord.png" alt="discord"/>
|
||||
<ul id="discord-links">
|
||||
<li v-if="modInfo.discordLink"><a class="link" v-bind:href="modInfo.discordLink" target="_blank">{{modInfo.discordName}}</a><br></li>
|
||||
<li><a class="link" href="https://discord.gg/F3xveHV" target="_blank" v-bind:style="modInfo.discordLink ? {'font-size': '16px'} : {}">The Modding Tree Discord</a><br></li>
|
||||
<li><a class="link" href="http://discord.gg/wwQfgPa" target="_blank" v-bind:style="{'font-size': '16px'}">Main Prestige Tree server</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="info" v-if="player.tab!='info'" onclick="showTab('info-tab')"><br>i</div>
|
||||
<img id="optionWheel" v-if="player.tab!='options'" src="options_wheel.png" onclick="showTab('options-tab')"></img>
|
||||
<div id="info" v-if="player.tab!=='info'" onclick="showTab('info-tab')"><br>i</div>
|
||||
<img id="optionWheel" v-if="player.tab!=='options'" src="options_wheel.png" onclick="showTab('options-tab')" alt="options"/>
|
||||
</div>
|
||||
<div v-if="false" id="loadingSection" class="fullWidth">
|
||||
<h1>Loading...<br>(If this takes too long it means there was a serious error!)</h1>
|
||||
</div>
|
||||
<div class="vl" v-if="player.navTab!= 'none' &&player.tab!='none'&&!(gameEnded && !player.keepGoing)"></div>
|
||||
<div class="vl" v-if="player.navTab!== 'none' &&player.tab!=='none'&&!(gameEnded && !player.keepGoing)"></div>
|
||||
<div v-if="(gameEnded && !player.keepGoing)" class="fullWidth">
|
||||
<br>
|
||||
<h2>{{modInfo.name}} {{VERSION.withoutName}}</h2><br><br>
|
||||
|
@ -81,8 +84,8 @@
|
|||
</div>
|
||||
|
||||
<div id="treeOverlay" v-if="!(gameEnded && !player.keepGoing)" class="treeOverlay" onscroll="resizeCanvas()"
|
||||
v-bind:class="{ fullWidth: (player.tab == 'none' || player.navTab == 'none'), col: (player.tab !== 'none' && player.navTab !== 'none'), left: (player.tab !== 'none' && player.navTab !== 'none')}">
|
||||
<button v-if= "player.navTab == 'none' && (tmp[player.tab].row == 'side' || tmp[player.tab].row == 'otherside')" class="other-back overlayThing" onclick="goBack()">←</button>
|
||||
v-bind:class="{ fullWidth: (player.tab === 'none' || player.navTab === 'none'), col: (player.tab !== 'none' && player.navTab !== 'none'), left: (player.tab !== 'none' && player.navTab !== 'none')}">
|
||||
<button v-if= "player.navTab === 'none' && (tmp[player.tab].row === 'side' || tmp[player.tab].row === 'otherside')" class="other-back overlayThing" onclick="goBack()">←</button>
|
||||
<overlay-head v-if="!(gameEnded && !player.keepGoing)"></overlay-head>
|
||||
<div class="sideLayers">
|
||||
<div v-for="(node, index) in OTHER_LAYERS['side']">
|
||||
|
@ -92,19 +95,19 @@
|
|||
</div>
|
||||
|
||||
<div v-if="!(gameEnded && !player.keepGoing)" id="treeTab" v-bind:style="{'z-index': (tmp.scrolled ? '1' : '5000')}" onscroll="resizeCanvas()"
|
||||
v-bind:class="{ fullWidth: (player.tab == 'none' || player.navTab == 'none'), col: (player.tab !== 'none' && player.navTab !== 'none'), left: (player.tab !== 'none' && player.navTab !== 'none')}">
|
||||
v-bind:class="{ fullWidth: (player.tab === 'none' || player.navTab === 'none'), col: (player.tab !== 'none' && player.navTab !== 'none'), left: (player.tab !== 'none' && player.navTab !== 'none')}">
|
||||
<br>
|
||||
<overlay-head id="fakeHead" style="visibility: hidden;">
|
||||
</overlay-head>
|
||||
|
||||
<layer-tab :layer="player.navTab == 'none' ? player.tab : player.navTab" :key="'left'"></layer-tab>
|
||||
<layer-tab :layer="player.navTab === 'none' ? player.tab : player.navTab" :key="'left'"></layer-tab>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Popups -->
|
||||
<div class="popup-container">
|
||||
<transition-group name="fade">
|
||||
<div v-for="popup,index in activePopups" class="popup" v-bind:class="popup.type"
|
||||
<div v-for="(popup, index) in activePopups" class="popup" v-bind:class="popup.type"
|
||||
v-bind:key="'p' + popup.id" v-on:click="() => {activePopups.splice(index, 1)}" v-bind:style="popup.color ? {'background-color': popup.color} : {}">
|
||||
<h3>{{popup.title}}</h3><br>
|
||||
<h2 v-html="popup.message"></h2>
|
||||
|
@ -113,9 +116,9 @@
|
|||
</div>
|
||||
|
||||
<div v-if="player.navTab !== 'none' && player.tab !== 'none' && !(gameEnded && !player.keepGoing)" onscroll="resizeCanvas()"
|
||||
v-bind:class="{ fullWidth: player.navTab == 'none', col: player.navTab != 'none', right: player.navTab != 'none', fast: true, tab: true}">
|
||||
v-bind:class="{ fullWidth: player.navTab === 'none', col: player.navTab !== 'none', right: player.navTab !== 'none', fast: true, tab: true}">
|
||||
<div v-for="layer in LAYERS" >
|
||||
<div v-if="player.tab==layer" >
|
||||
<div v-if="player.tab===layer" >
|
||||
<layer-tab :layer="layer" :back="'none'" :spacing="'50px'" :key="'left'"></layer-tab>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,515 +0,0 @@
|
|||
var testTree = [["f", "c"],
|
||||
["g", "spook", "h"]]
|
||||
|
||||
addLayer("c", {
|
||||
layer: "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),
|
||||
buyables: {}, // You don't actually have to initialize this one
|
||||
beep: false,
|
||||
}},
|
||||
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
|
||||
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))
|
||||
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: (true == false ? 0 : Decimal.pow(player[this.layer].points, 0.2)),
|
||||
icecreamCap: (player[this.layer].points * 10)
|
||||
}},
|
||||
effectDescription() { // Optional text to describe the effects
|
||||
eff = this.effect();
|
||||
eff.waffleBoost = eff.waffleBoost.times(buyableEffect(this.layer, 11).first)
|
||||
return "which are boosting waffles by "+format(eff.waffleBoost)+" and increasing the Ice Cream cap by "+format(eff.icecreamCap)
|
||||
},
|
||||
infoboxes:{
|
||||
coolInfo: {
|
||||
title: "Lore",
|
||||
titleStyle: {'color': '#FE0000'},
|
||||
body: "DEEP LORE!",
|
||||
bodyStyle: {'background-color': "#0000EE"}
|
||||
}
|
||||
},
|
||||
milestones: {
|
||||
0: {requirementDescription: "3 Lollipops",
|
||||
done() {return player[this.layer].best.gte(3)}, // Used to determine when to give the milestone
|
||||
effectDescription: "Unlock the next milestone",
|
||||
},
|
||||
1: {requirementDescription: "4 Lollipops",
|
||||
unlocked() {return hasMilestone(this.layer, 0)},
|
||||
done() {return player[this.layer].best.gte(4)},
|
||||
effectDescription: "You can toggle beep and boop (which do nothing)",
|
||||
toggles: [
|
||||
["c", "beep"], // Each toggle is defined by a layer and the data toggled for that layer
|
||||
["f", "boop"]],
|
||||
style() {
|
||||
if(hasMilestone(this.layer, this.id)) return {
|
||||
'background-color': '#1111DD'
|
||||
}},
|
||||
|
||||
},
|
||||
},
|
||||
challenges: {
|
||||
rows: 2,
|
||||
cols: 12,
|
||||
11: {
|
||||
name: "Fun",
|
||||
completionLimit: 3,
|
||||
challengeDescription() {return "Makes the game 0% harder<br>"+challengeCompletions(this.layer, this.id) + "/" + this.completionLimit + " completions"},
|
||||
unlocked() { return player[this.layer].best.gt(0) },
|
||||
goalDescription: 'Have 20 points I guess',
|
||||
canComplete() {
|
||||
return player.points.gte(20)
|
||||
},
|
||||
rewardEffect() {
|
||||
let ret = player[this.layer].points.add(1).tetrate(0.02)
|
||||
return ret;
|
||||
},
|
||||
rewardDisplay() { return format(this.rewardEffect())+"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 complete the challenge
|
||||
},
|
||||
},
|
||||
upgrades: {
|
||||
rows: 2,
|
||||
cols: 3,
|
||||
11: {
|
||||
title: "Generator of Genericness",
|
||||
description: "Gain 1 Point every second.",
|
||||
cost: new Decimal(1),
|
||||
unlocked() { return player[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[this.layer].points.add(1).pow(player[this.layer].upgrades.includes(24)?1.1:(player[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())+"x" }, // Add formatting to the effect
|
||||
},
|
||||
13: {
|
||||
unlocked() { return (hasUpgrade(this.layer, 12))},
|
||||
onPurchase() { // This function triggers when the upgrade is purchased
|
||||
player[this.layer].unlockOrder = 0
|
||||
},
|
||||
style() {
|
||||
if (hasUpgrade(this.layer, this.id)) return {
|
||||
'background-color': '#1111dd'
|
||||
}
|
||||
else if (!canAffordUpgrade(this.layer, this.id)) {
|
||||
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[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[this.layer].unlocked }, // The upgrade is only visible when this is true
|
||||
},
|
||||
},
|
||||
buyables: {
|
||||
rows: 1,
|
||||
cols: 12,
|
||||
showRespec: true,
|
||||
respec() { // Optional, reset things and give back your currency. Having this function makes a respec button appear
|
||||
player[this.layer].points = player[this.layer].points.add(player[this.layer].spentOnBuyables) // A built-in thing to keep track of this but only keeps a single value
|
||||
resetBuyables(this.layer)
|
||||
doReset(this.layer, true) // Force a reset
|
||||
},
|
||||
respecText: "Respec Thingies", // Text on Respec button, optional
|
||||
11: {
|
||||
title: "Exhancers", // Optional, displayed at the top in a larger font
|
||||
cost(x=player[this.layer].buyables[this.id]) { // cost for buying xth buyable, can be an object if there are multiple currencies
|
||||
if (x.gte(25)) x = x.pow(2).div(25)
|
||||
let cost = Decimal.pow(2, x.pow(1.5))
|
||||
return cost.floor()
|
||||
},
|
||||
effect(x=player[this.layer].buyables[this.id]) { // Effects of owning x of the items, x is a decimal
|
||||
let eff = {}
|
||||
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
|
||||
let data = tmp[this.layer].buyables[this.id]
|
||||
return "Cost: " + format(data.cost) + " lollipops\n\
|
||||
Amount: " + player[this.layer].buyables[this.id] + "\n\
|
||||
Adds + " + format(data.effect.first) + " things and multiplies stuff by " + format(data.effect.second)
|
||||
},
|
||||
unlocked() { return player[this.layer].unlocked },
|
||||
canAfford() {
|
||||
return player[this.layer].points.gte(tmp[this.layer].buyables[this.id].cost)},
|
||||
buy() {
|
||||
cost = tmp[this.layer].buyables[this.id].cost
|
||||
player[this.layer].points = player[this.layer].points.sub(cost)
|
||||
player[this.layer].buyables[this.id] = player[this.layer].buyables[this.id].add(1)
|
||||
player[this.layer].spentOnBuyables = player[this.layer].spentOnBuyables.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'},
|
||||
sellOne() {
|
||||
let 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[this.layer].points = player[this.layer].points.add(this.cost)
|
||||
},
|
||||
},
|
||||
},
|
||||
doReset(resettingLayer){ // 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 > this.row) layerDataReset(this.layer, ["points"]) // This is actually the default behavior
|
||||
},
|
||||
layerShown() {return true}, // Condition for when layer appears on the tree
|
||||
automate() {
|
||||
}, // Do any automation inherent to this layer if appropriate
|
||||
resetsNothing() {return false},
|
||||
onPrestige(gain) {
|
||||
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: "C: reset for lollipops or whatever", onPress(){if (canReset(this.layer)) doReset(this.layer)}, unlocked() {return player.points.gte(10)}},
|
||||
{key: "ctrl+c", description: "Ctrl+c: respec things", onPress(){if (player[this.layer].unlocked) respecBuyables(this.layer)}},
|
||||
],
|
||||
increaseUnlockOrder: [], // Array of layer names to have their order increased when this one is first unlocked
|
||||
|
||||
microtabs: {
|
||||
stuff: {
|
||||
first: {
|
||||
content: ["upgrades", ["display-text", function() {return "confirmed"}]]
|
||||
},
|
||||
second: {
|
||||
content: [["upgrade", 11],
|
||||
["row", [["upgrade", 11], "blank", "blank", ["upgrade", 11],]],
|
||||
|
||||
["display-text", function() {return "double confirmed"}]]
|
||||
},
|
||||
},
|
||||
otherStuff: {
|
||||
// There could be another set of microtabs here
|
||||
}
|
||||
},
|
||||
|
||||
bars: {
|
||||
longBoi: {
|
||||
fillStyle: {'background-color' : "#FFFFFF"},
|
||||
baseStyle: {'background-color' : "#696969"},
|
||||
textStyle: {'color': '#04e050'},
|
||||
|
||||
borderStyle() {return {}},
|
||||
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: 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: UP,
|
||||
width: 100,
|
||||
height: 30,
|
||||
progress() {
|
||||
return player.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.
|
||||
tabFormat: {
|
||||
"main tab": {
|
||||
buttonStyle() {return {'color': 'orange'}},
|
||||
shouldNotify: true,
|
||||
content:
|
||||
["main-display",
|
||||
"prestige-button", "resource-display",
|
||||
["blank", "5px"], // Height
|
||||
["raw-html", function() {return "<button onclick='console.log(`yeet`)'>'HI'</button>"}],
|
||||
["display-text",
|
||||
function() {return 'I have ' + format(player.points) + ' pointy points!'},
|
||||
{"color": "red", "font-size": "32px", "font-family": "Comic Sans MS"}],
|
||||
"h-line", "milestones", "blank", "upgrades", "challenges"],
|
||||
},
|
||||
thingies: {
|
||||
style() {return {'background-color': '#222222'}},
|
||||
buttonStyle() {return {'border-color': 'orange'}},
|
||||
content:[
|
||||
["buyables", ""], "blank",
|
||||
["row", [
|
||||
["toggle", ["c", "beep"]], ["blank", ["30px", "10px"]], // Width, height
|
||||
["display-text", function() {return "Beep"}], "blank", ["v-line", "200px"],
|
||||
["column", [
|
||||
["prestige-button", "", {'width': '150px', 'height': '80px'}],
|
||||
["prestige-button", "", {'width': '100px', 'height': '150px'}],
|
||||
]],
|
||||
], {'width': '600px', 'height': '350px', 'background-color': 'green', 'border-style': 'solid'}],
|
||||
"blank",
|
||||
["display-image", "discord.png"],],
|
||||
},
|
||||
jail: {
|
||||
content: [
|
||||
["infobox", "coolInfo"],
|
||||
["bar", "longBoi"], "blank",
|
||||
["row", [
|
||||
["column", [
|
||||
["display-text", "Sugar level:", {'color': 'teal'}], "blank", ["bar", "tallBoi"]],
|
||||
{'background-color': '#555555', 'padding': '15px'}],
|
||||
"blank",
|
||||
["column", [
|
||||
["display-text", "idk"],
|
||||
["blank", ['0', '50px']], ["bar", "flatBoi"]
|
||||
]],
|
||||
]],
|
||||
"blank", ["display-text", "It's jail because \"bars\"! So funny! Ha ha!"],["tree", testTree],
|
||||
],
|
||||
},
|
||||
illuminati: {
|
||||
unlocked() {return (hasUpgrade("c", 13))},
|
||||
content:[
|
||||
["raw-html", function() {return "<h1> C O N F I R M E D </h1>"}], "blank",
|
||||
["microtabs", "stuff", {'width': '600px', 'height': '350px', 'background-color': 'brown', 'border-style': 'solid'}]
|
||||
]
|
||||
}
|
||||
|
||||
},
|
||||
style() {return {
|
||||
//'background-color': '#3325CC'
|
||||
}},
|
||||
nodeStyle() {return { // Style on the layer node
|
||||
'color': '#3325CC',
|
||||
'text-decoration': 'underline'
|
||||
}},
|
||||
componentStyles: {
|
||||
"challenge"() {return {'height': '200px'}},
|
||||
"prestige-button"() {return {'color': '#AA66AA'}},
|
||||
},
|
||||
tooltip() { // Optional, tooltip displays when the layer is unlocked
|
||||
let tooltip = formatWhole(player[this.layer].points) + " " + this.resource
|
||||
if (player[this.layer].buyables[11].gt(0)) tooltip += "\n" + formatWhole(player[this.layer].buyables[11]) + " Exhancers"
|
||||
return tooltip
|
||||
},
|
||||
shouldNotify() { // Optional, layer will be highlighted on the tree if true.
|
||||
// Layer will automatically highlight if an upgrade is purchasable.
|
||||
return (player.c.buyables[11] == 1)
|
||||
},
|
||||
resetDescription: "Melt your points into ",
|
||||
})
|
||||
|
||||
|
||||
|
||||
// This layer is mostly minimal but it uses a custom prestige type and a clickable
|
||||
addLayer("f", {
|
||||
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 hasAchievement('a', 13)},
|
||||
|
||||
row: 1,
|
||||
layerShown() {return true},
|
||||
branches: ["c"], // 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 " + this.requires() + " points. You only have " + formatWhole(player.points))
|
||||
},
|
||||
midsection: [
|
||||
"blank", ['display-image', 'https://images.beano.com/store/24ab3094eb95e5373bca1ccd6f330d4406db8d1f517fc4170b32e146f80d?auto=compress%2Cformat&dpr=1&w=390'],
|
||||
["display-text", "Bork bork!"]
|
||||
],
|
||||
// The following are only currently used for "custom" Prestige type:
|
||||
prestigeButtonText() { //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[layer].nextAtDisp) + " points)"
|
||||
},
|
||||
getResetGain() {
|
||||
return getResetGain(this.layer, useType = "static")
|
||||
},
|
||||
getNextAt(canMax=false) { //
|
||||
return getNextAt(this.layer, canMax, useType = "static")
|
||||
},
|
||||
canReset() {
|
||||
return tmp[this.layer].baseAmount.gte(tmp[this.layer].nextAt)
|
||||
},
|
||||
// This is also non minimal, a Clickable!
|
||||
clickables: {
|
||||
rows: 1,
|
||||
cols: 1,
|
||||
masterButtonPress() { // Optional, reset things and give back your currency. Having this function makes a respec button appear
|
||||
if (getClickableState(this.layer, 11) == "Borkened...")
|
||||
player[this.layer].clickables[11] = "Start"
|
||||
},
|
||||
masterButtonText() {return (getClickableState(this.layer, 11) == "Borkened...") ? "Fix the clickable!" : "Does nothing"}, // Text on Respec button, optional
|
||||
11: {
|
||||
title: "Clicky clicky!", // Optional, displayed at the top in a larger font
|
||||
display() { // Everything else displayed in the buyable button after the title
|
||||
let data = getClickableState(this.layer, this.id)
|
||||
return "Current state:<br>" + data
|
||||
},
|
||||
unlocked() { return player[this.layer].unlocked },
|
||||
canClick() {
|
||||
return getClickableState(this.layer, this.id) !== "Borkened..."},
|
||||
onClick() {
|
||||
switch(getClickableState(this.layer, this.id)){
|
||||
case "Start":
|
||||
player[this.layer].clickables[this.id] = "A new state!"
|
||||
break;
|
||||
case "A new state!":
|
||||
player[this.layer].clickables[this.id] = "Keep going!"
|
||||
break;
|
||||
case "Keep going!":
|
||||
player[this.layer].clickables[this.id] = "Maybe that's a bit too far..."
|
||||
break;
|
||||
case "Maybe that's a bit too far...":
|
||||
player[this.layer].clickables[this.id] = "Borkened..."
|
||||
break;
|
||||
default:
|
||||
player[this.layer].clickables[this.id] = "Start"
|
||||
break;
|
||||
|
||||
}
|
||||
},
|
||||
style() {
|
||||
switch(getClickableState(this.layer, this.id)){
|
||||
case "Start":
|
||||
return {'background-color': 'green'}
|
||||
break;
|
||||
case "A new state!":
|
||||
return {'background-color': 'yellow'}
|
||||
break;
|
||||
case "Keep going!":
|
||||
return {'background-color': 'orange'}
|
||||
break;
|
||||
case "Maybe that's a bit too far...":
|
||||
return {'background-color': 'red'}
|
||||
break;
|
||||
default:
|
||||
return {}
|
||||
break;
|
||||
}},
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
)
|
||||
|
||||
// A side layer with achievements, with no prestige
|
||||
addLayer("a", {
|
||||
startData() { return {
|
||||
unlocked: true,
|
||||
points: new Decimal(0),
|
||||
}},
|
||||
color: "yellow",
|
||||
resource: "achievement power",
|
||||
row: "side",
|
||||
tooltip() { // Optional, tooltip displays when the layer is locked
|
||||
return ("Achievements")
|
||||
},
|
||||
achievementPopups: true,
|
||||
achievements: {
|
||||
rows: 2,
|
||||
cols: 3,
|
||||
11: {
|
||||
image: "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
|
||||
textStyle: {'color': '#04e050'},
|
||||
},
|
||||
13: {
|
||||
name: "EIEIO",
|
||||
done() {return player.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!")}
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
|
@ -1,77 +0,0 @@
|
|||
let modInfo = {
|
||||
name: "The Modding Tree",
|
||||
id: "modbase",
|
||||
pointsName: "points",
|
||||
discordName: "",
|
||||
discordLink: "",
|
||||
initialStartPoints: new Decimal (10), // Used for hard resets and new players
|
||||
|
||||
offlineLimit: 1, // In hours
|
||||
}
|
||||
|
||||
// Set your version in num and name
|
||||
let VERSION = {
|
||||
num: "2.π",
|
||||
name: "Incrementally Updated",
|
||||
}
|
||||
|
||||
let changelog = `<h1>Changelog:</h1><br>
|
||||
<h3>v0.0</h3><br>
|
||||
- Added things.<br>
|
||||
- Added stuff.`
|
||||
|
||||
let winText = `Congratulations! You have reached the end and beaten this game, but for now...`
|
||||
// If you add new functions anywhere inside of a layer, and those functions have an effect when called, add them here.
|
||||
// (The ones here are examples, all official functions are already taken care of)
|
||||
var doNotCallTheseFunctionsEveryTick = ["doReset", "buy", "onPurchase", "blowUpEverything"]
|
||||
|
||||
function getStartPoints(){
|
||||
return new Decimal(modInfo.initialStartPoints)
|
||||
}
|
||||
|
||||
// Determines if it should show points/sec
|
||||
function canGenPoints(){
|
||||
return hasUpgrade("c", 11)
|
||||
}
|
||||
|
||||
// Calculate points/sec!
|
||||
function getPointGen() {
|
||||
if(!canGenPoints())
|
||||
return new Decimal(0)
|
||||
|
||||
let gain = new Decimal(1)
|
||||
if (hasUpgrade("c", 12)) gain = gain.times(upgradeEffect("c", 12))
|
||||
return gain
|
||||
}
|
||||
|
||||
// You can add non-layer related variables that should to into "player" and be saved here, along with default values
|
||||
function addedPlayerData() { return {
|
||||
weather: "Yes",
|
||||
happiness: new Decimal(72),
|
||||
}}
|
||||
|
||||
// Display extra things at the top of the page
|
||||
var displayThings = [
|
||||
function() {if (player.points.eq(69)) return "Tee hee!"},
|
||||
function() {if (player.f.points.gt(1)) return `You have ${player.f.points} farm points. (Which do nothing.)`},
|
||||
function() {if (inChallenge("c", 11)) return "The game is currently <h1>0%</h1> harder."},
|
||||
]
|
||||
|
||||
// Determines when the game "ends"
|
||||
function isEndgame() {
|
||||
return player.points.gte(new Decimal("e280000000"))
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Less important things beyond this point!
|
||||
|
||||
// You can change this if you have things that can be messed up by long tick lengths
|
||||
function maxTickLength() {
|
||||
return(3600) // Default is 1 hour which is just arbitrarily large
|
||||
}
|
||||
|
||||
// Use this if you need to undo inflation from an older version. If the version is older than the version that fixed the issue,
|
||||
// you can cap their current resources with this.
|
||||
function fixOldSave(oldVersion){
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
// treeLayout will override the default tree's layout if used
|
||||
var layoutInfo = {
|
||||
startTab: "c",
|
||||
showTree: true,
|
||||
|
||||
//treeLayout: ""
|
||||
|
||||
|
||||
}
|
||||
|
||||
// A "ghost" layer which offsets f in the tree
|
||||
addNode("spook", {
|
||||
row: 1,
|
||||
layerShown: "ghost",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
// A "ghost" layer which offsets f in the tree
|
||||
addNode("g", {
|
||||
symbol: "TH",
|
||||
branches: ["c"],
|
||||
color: '#6d3678',
|
||||
layerShown: true,
|
||||
canClick() {return player.points.gte(10)},
|
||||
tooltip: "Thanos your points",
|
||||
tooltipLocked: "Thanos your points",
|
||||
onClick() {player.points = player.points.div(2)
|
||||
console.log(this.layer)}
|
||||
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
// A "ghost" layer which offsets f in the tree
|
||||
addNode("h", {
|
||||
branches: ["g"],
|
||||
layerShown: true,
|
||||
tooltip: "Restore your points to 10",
|
||||
tooltipLocked: "Restore your points to 10",
|
||||
row: "side",
|
||||
canClick() {return player.points.lt(10)},
|
||||
onClick() {player.points = new Decimal(10)}
|
||||
},
|
||||
)
|
||||
|
||||
addLayer("tree-tab", {
|
||||
tabFormat: [["tree", function() {return (layoutInfo.treeLayout ? layoutInfo.treeLayout : TREE_LAYERS)}]]
|
||||
})
|
|
@ -204,11 +204,6 @@ addLayer("distill", {
|
|||
updateInstrument("bainMarie", 6, diff);
|
||||
updateInstrument("vapours", 8, diff);
|
||||
}
|
||||
let jobLevel = new Decimal(getJobLevel(this.layer));
|
||||
if (jobLevel.neq(player[this.layer].lastLevel)) {
|
||||
doPopup("none", `Level ${jobLevel}`, "Level Up!", 3, layers[this.layer].color);
|
||||
player[this.layer].lastLevel = jobLevel;
|
||||
}
|
||||
},
|
||||
onAddPoints(gain) {
|
||||
let xpGain = gain;
|
||||
|
@ -216,6 +211,7 @@ addLayer("distill", {
|
|||
xpGain = xpGain.times(layers.generators.clickables[this.layer].effect());
|
||||
}
|
||||
player[this.layer].xp = player[this.layer].xp.add(xpGain);
|
||||
checkJobXP(this.layer);
|
||||
},
|
||||
milestones: {
|
||||
0: {
|
||||
|
|
|
@ -108,11 +108,6 @@ addLayer("flowers", {
|
|||
}
|
||||
player[this.layer].realTime += diff;
|
||||
}
|
||||
let jobLevel = new Decimal(getJobLevel(this.layer));
|
||||
if (jobLevel.neq(player[this.layer].lastLevel) && player[this.layer].lastLevel.lte(100)) {
|
||||
doPopup("none", `Level ${formatWhole(jobLevel)}`, "Level Up!", 3, layers[this.layer].color);
|
||||
player[this.layer].lastLevel = jobLevel;
|
||||
}
|
||||
},
|
||||
onAddPoints(gain) {
|
||||
let xpGain = gain;
|
||||
|
@ -124,6 +119,7 @@ addLayer("flowers", {
|
|||
xpGain = xpGain.times(layers.generators.clickables[this.layer].effect());
|
||||
}
|
||||
player[this.layer].xp = player[this.layer].xp.add(xpGain);
|
||||
checkJobXP(this.layer);
|
||||
},
|
||||
milestones: {
|
||||
0: {
|
||||
|
|
|
@ -53,7 +53,7 @@ function getBatteryCapBuyable(id, title) {
|
|||
height: "150px"
|
||||
},
|
||||
display() {
|
||||
return `Mutliply battery cap by ${formatWhole(buyableEffect(this.layer, 13))}x.<br/><br/>Currently: ${formatWhole(this.effect())}<br/><br/>Cost: ${formatWhole(this.cost())} charge`;
|
||||
return `Multiply battery cap by ${formatWhole(buyableEffect(this.layer, 13))}x.<br/><br/>Currently: ${formatWhole(this.effect())}<br/><br/>Cost: ${formatWhole(this.cost())} charge`;
|
||||
},
|
||||
cost(x) {
|
||||
const amount = x || getBuyableAmount(this.layer, this.id);
|
||||
|
@ -204,11 +204,6 @@ addLayer("generators", {
|
|||
}
|
||||
});
|
||||
}
|
||||
let jobLevel = new Decimal(getJobLevel(this.layer));
|
||||
if (jobLevel.neq(player[this.layer].lastLevel) && player[this.layer].lastLevel.lte(100)) {
|
||||
doPopup("none", `Level ${formatWhole(jobLevel)}`, "Level Up!", 3, layers[this.layer].color);
|
||||
player[this.layer].lastLevel = jobLevel;
|
||||
}
|
||||
},
|
||||
onAddPoints(gain) {
|
||||
let xpGain = gain;
|
||||
|
@ -216,6 +211,7 @@ addLayer("generators", {
|
|||
xpGain = xpGain.times(layers.generators.clickables[this.layer].effect());
|
||||
}
|
||||
player[this.layer].xp = player[this.layer].xp.add(xpGain);
|
||||
checkJobXP(this.layer);
|
||||
},
|
||||
milestones: {
|
||||
0: {
|
||||
|
@ -517,8 +513,8 @@ let animateElectricity = () => {
|
|||
|
||||
const numPoints = Math.max(3, Math.floor(numberOfPoints * height / maxHeight));
|
||||
let coords = new Array(numPoints).fill(1).map((_,i) => {
|
||||
let first = i == 0;
|
||||
let last = i == numPoints - 1;
|
||||
let first = i === 0;
|
||||
let last = i === numPoints - 1;
|
||||
let y = (height - margin * 2) / (numPoints - 1) * i + margin;
|
||||
let x = (first || last) ? width / 2 : (width - amplitude) / 2 + Math.random() * amplitude;
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ addLayer("sands", {
|
|||
tabFormat: {
|
||||
"Main": {
|
||||
content: () => {
|
||||
const percentChipped = new Decimal(1).sub(player.sands.shrunkAmount.div(nextStoneCost())).times(10000);
|
||||
new Decimal(1).sub(player.sands.shrunkAmount.div(nextStoneCost())).times(10000);
|
||||
return player.tab !== "sands" ? null : [
|
||||
"main-display",
|
||||
"blank",
|
||||
|
@ -321,11 +321,6 @@ addLayer("sands", {
|
|||
}
|
||||
}
|
||||
}
|
||||
let jobLevel = new Decimal(getJobLevel(this.layer));
|
||||
if (jobLevel.neq(player[this.layer].lastLevel) && player[this.layer].lastLevel.lte(100)) {
|
||||
doPopup("none", `Level ${formatWhole(jobLevel)}`, "Level Up!", 3, layers[this.layer].color);
|
||||
player[this.layer].lastLevel = jobLevel;
|
||||
}
|
||||
},
|
||||
onAddPoints(gain) {
|
||||
let xpGain = gain;
|
||||
|
@ -336,6 +331,7 @@ addLayer("sands", {
|
|||
xpGain = xpGain.times(Decimal.pow(buyableEffect("sands", "glass"), 2));
|
||||
}
|
||||
player[this.layer].xp = player[this.layer].xp.add(xpGain);
|
||||
checkJobXP(this.layer);
|
||||
},
|
||||
milestones: {
|
||||
0: {
|
||||
|
|
|
@ -18,16 +18,18 @@ const cards = {
|
|||
}
|
||||
}
|
||||
}),
|
||||
gainInsight: createCard("And it shall be called... the Earth.", level => level == 0 ? "Gain a key insight." : `Gain ${formatWhole(level.add(1))} key insights.`, level => {
|
||||
gainInsight: createCard("And it shall be called... the Earth.", level => level === 0 ? "Gain a key insight." : `Gain ${formatWhole(level.add(1))} key insights.`, level => {
|
||||
player.study.insights = player.study.insights.add(level).add(1);
|
||||
player.study.xp = player.study.xp.add(level.add(1).times(10));
|
||||
checkJobXP(this.layer);
|
||||
}),
|
||||
gainBigInsight: createCard("Yes! I shall design this computer for you.", level => `Gain ${new Decimal(player.study.cards.length).times(level.add(1)).sqrt().floor()} key insights.<br/>(based on number of cards in the deck)`, level => {
|
||||
const amount = new Decimal(player.study.cards.length).times(level.add(1)).sqrt().floor();
|
||||
player.study.insights = player.study.insights.add(amount);
|
||||
player.study.xp = player.study.xp.add(amount.times(10));
|
||||
checkJobXP(this.layer);
|
||||
}),
|
||||
playTwice: createCard("Oh no, not again.", level => level == 0 ? "Play the next card twice." : `Play the next card twice, with the effect boosted by ${level.div(4)} levels.`, null, (nextCard, level) => {
|
||||
playTwice: createCard("Oh no, not again.", level => level === 0 ? "Play the next card twice." : `Play the next card twice, with the effect boosted by ${level.div(4)} levels.`, null, (nextCard, level) => {
|
||||
if (nextCard in cards && cards[nextCard].onDraw) {
|
||||
cards[nextCard].onDraw(cardLevel(nextCard).add(level.div(4)));
|
||||
cards[nextCard].onDraw(cardLevel(nextCard).add(level.div(4)), false);
|
||||
|
@ -58,7 +60,10 @@ const cards = {
|
|||
return text;
|
||||
}, () => player.study.sellDiscount = player.study.sellDiscount.add(1)),
|
||||
soldOut: createCard("Out of Stock!"),
|
||||
gainXp: createCard("A billion times over ... and no one learns anything.", level => `Gain xp equal to ${level == 0 ? "" : `${format(level.div(4).add(1))}x times `}your number of properties.`, level => player.study.xp = player.study.xp.add(player.study.points.times(level.div(4).add(1))))
|
||||
gainXp: createCard("A billion times over ... and no one learns anything.", level => `Gain xp equal to ${level === 0 ? "" : `${format(level.div(4).add(1))}x times `}your number of properties.`, level => {
|
||||
player.study.xp = player.study.xp.add(player.study.points.times(level.div(4).add(1)));
|
||||
checkJobXP(this.layer);
|
||||
})
|
||||
};
|
||||
|
||||
const shopCards = [
|
||||
|
@ -85,11 +90,12 @@ const cardFormat = (card, id = "", className = "", onclick = "", overrideLevel =
|
|||
return card == null ? null : ["display-text", `
|
||||
<div id="${id}" class="card ${className}" style="width: ${width}; height: ${height};" onclick="${onclick}">
|
||||
<span style="border-bottom: 1px solid white; margin: 0; max-height: calc(50% - 30px); padding-bottom: 10px;">
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<h3>${isFunction(cards[card].title) ? cards[card].title(overrideLevel || cardLevel(card)) : cards[card].title}</h3>
|
||||
</span>
|
||||
<span style="flex-basis: 0%;"><span>${isFunction(cards[card].description) ? cards[card].description(overrideLevel || cardLevel(card)) : cards[card].description}</span></span>
|
||||
<span style="flex-basis: 0;"><span>${isFunction(cards[card].description) ? cards[card].description(overrideLevel || cardLevel(card)) : cards[card].description}</span></span>
|
||||
<span style="flex-shrink: 1"></span>
|
||||
<img src="images/Time2wait.svg"/>
|
||||
<img src="images/Time2wait.svg" alt="hourglass"/>
|
||||
</div>`];
|
||||
};
|
||||
|
||||
|
@ -118,6 +124,7 @@ function getCardUpgradeBuyable(id) {
|
|||
};
|
||||
}
|
||||
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
function purchaseCard(index) {
|
||||
const { card, price } = player.study.shop[index];
|
||||
if (card && player.study.insights.gte(price)) {
|
||||
|
@ -127,6 +134,7 @@ function purchaseCard(index) {
|
|||
}
|
||||
}
|
||||
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
function toggleSelectCard(index) {
|
||||
if (player.study.selected === index) {
|
||||
player.study.selected = -1;
|
||||
|
@ -202,6 +210,7 @@ addLayer("study", {
|
|||
tabFormat: {
|
||||
"Main": {
|
||||
content: () => player.tab !== "study" ? null : [
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
["display-text", `<span>You have <h2 style="color: ${studyColor}; text-shadow: ${studyColor} 0 0 10px">${formatWhole(player.study.points)}</h2> properties studied,<br/>and <h2 style="color: darkcyan; text-shadow: darkcyan 0 0 10px">${formatWhole(player.study.insights)}</h2> key insights</span>`],
|
||||
"blank",
|
||||
["display-text", (() => {
|
||||
|
@ -232,6 +241,7 @@ addLayer("study", {
|
|||
},
|
||||
"Buy Cards": {
|
||||
content: () => player.tab !== "study" ? null : [
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
["display-text", `<span>You have <h2 style="color: darkcyan; text-shadow: darkcyan 0 0 10px">${formatWhole(player.study.insights)}</h2> key insights</span>`],
|
||||
"blank",
|
||||
["display-text", `Cards refresh in ${new Decimal(getRefreshPeriod() - player.study.refreshProgress).clampMax(getRefreshPeriod() - 0.01).toFixed(2)} seconds`],
|
||||
|
@ -247,6 +257,7 @@ addLayer("study", {
|
|||
},
|
||||
"Destroy Cards": {
|
||||
content: () => player.tab !== "study" ? null : [
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
["sticky", [0, ["display-text", `<span>You have <h2 style="color: ${studyColor}; text-shadow: ${studyColor} 0 0 10px">${formatWhole(player.study.points)}</h2> properties studied`]]],
|
||||
"blank",
|
||||
["sticky", ["50px", ["clickable", "sell"]]],
|
||||
|
@ -257,6 +268,7 @@ addLayer("study", {
|
|||
},
|
||||
"Upgrade Cards": {
|
||||
content: () => player.tab !== "study" ? null : [
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
["sticky", [0, ["display-text", `<span>You have <h2 style="color: darkcyan; text-shadow: darkcyan 0 0 10px">${formatWhole(player.study.insights)}</h2> key insights`]]],
|
||||
"blank",
|
||||
hasMilestone("study", 4) ? ["column", [
|
||||
|
@ -322,11 +334,6 @@ addLayer("study", {
|
|||
}
|
||||
}
|
||||
}
|
||||
let jobLevel = new Decimal(getJobLevel(this.layer));
|
||||
if (jobLevel.neq(player[this.layer].lastLevel)) {
|
||||
doPopup("none", `Level ${jobLevel}`, "Level Up!", 3, layers[this.layer].color);
|
||||
player[this.layer].lastLevel = jobLevel;
|
||||
}
|
||||
},
|
||||
onAddPoints(gain) {
|
||||
let xpGain = gain;
|
||||
|
@ -334,6 +341,7 @@ addLayer("study", {
|
|||
xpGain = xpGain.times(layers.generators.clickables[this.layer].effect());
|
||||
}
|
||||
player[this.layer].xp = player[this.layer].xp.add(xpGain);
|
||||
checkJobXP(this.layer);
|
||||
},
|
||||
milestones: {
|
||||
0: {
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
/* eslint-disable no-unused-vars */
|
||||
// https://color.adobe.com/create/color-wheel
|
||||
|
||||
// Colors
|
||||
const logoBackgroundColor = "#1a75bb";
|
||||
const logoHighlightColor = "#000080";
|
||||
const backgroundColor = "#2a323d";
|
||||
const flowersColor = "#F1EBD9";
|
||||
const distillColor = "#8AFFC1";
|
||||
|
|
231
js/components.js
231
js/components.js
|
@ -1,4 +1,4 @@
|
|||
var app;
|
||||
let app;
|
||||
|
||||
function loadVue() {
|
||||
// data = a function returning the content (actually HTML)
|
||||
|
@ -46,15 +46,19 @@ function loadVue() {
|
|||
}
|
||||
},
|
||||
template: `
|
||||
<div class="upgTable instant">
|
||||
<div class="upgRow">
|
||||
<div v-for="(item, index) in data">
|
||||
<div v-if="!Array.isArray(item)" v-bind:is="item" :layer= "layer" v-bind:style="tmp[layer].componentStyles[item]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length==3" v-bind:style="[tmp[layer].componentStyles[item[0]], (item[2] ? item[2] : {})]" v-bind:is="item[0]" :layer= "layer" :data= "item[1]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length==2" v-bind:is="item[0]" :layer= "layer" :data= "item[1]" v-bind:style="tmp[layer].componentStyles[item[0]]" :key="key + '-' + index"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="upgTable instant">
|
||||
<div class="upgRow">
|
||||
<div v-for="(item, index) in data">
|
||||
<div v-if="!Array.isArray(item)" v-bind:is="item" :layer="layer"
|
||||
v-bind:style="tmp[layer].componentStyles[item]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length===3"
|
||||
v-bind:style="[tmp[layer].componentStyles[item[0]], (item[2] ? item[2] : {})]" v-bind:is="item[0]"
|
||||
:layer="layer" :data="item[1]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length===2" v-bind:is="item[0]" :layer="layer" :data="item[1]"
|
||||
v-bind:style="tmp[layer].componentStyles[item[0]]" :key="key + '-' + index"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
|
@ -67,15 +71,19 @@ function loadVue() {
|
|||
}
|
||||
},
|
||||
template: `
|
||||
<div class="upgTable instant">
|
||||
<div class="upgCol">
|
||||
<template v-for="(item, index) in data">
|
||||
<div v-if="!Array.isArray(item)" v-bind:is="item" :layer= "layer" v-bind:style="tmp[layer].componentStyles[item]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length==3" v-bind:style="[tmp[layer].componentStyles[item[0]], (item[2] ? item[2] : {})]" v-bind:is="item[0]" :layer= "layer" :data= "item[1]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length==2" v-bind:is="item[0]" :layer= "layer" :data= "item[1]" v-bind:style="tmp[layer].componentStyles[item[0]]" :key="key + '-' + index"></div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="upgTable instant">
|
||||
<div class="upgCol">
|
||||
<template v-for="(item, index) in data">
|
||||
<div v-if="!Array.isArray(item)" v-bind:is="item" :layer="layer"
|
||||
v-bind:style="tmp[layer].componentStyles[item]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length===3"
|
||||
v-bind:style="[tmp[layer].componentStyles[item[0]], (item[2] ? item[2] : {})]" v-bind:is="item[0]"
|
||||
:layer="layer" :data="item[1]" :key="key + '-' + index"></div>
|
||||
<div v-else-if="item.length===2" v-bind:is="item[0]" :layer="layer" :data="item[1]"
|
||||
v-bind:style="tmp[layer].componentStyles[item[0]]" :key="key + '-' + index"></div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
|
@ -165,7 +173,10 @@ function loadVue() {
|
|||
v-bind:style="[((!hasUpgrade(layer, data) && canAffordUpgrade(layer, data)) ? {'background-color': tmp[layer].color} : {}), tmp[layer].upgrades[data].style]">
|
||||
<span v-if="tmp[layer].upgrades[data].fullDisplay" v-html="tmp[layer].upgrades[data].fullDisplay"></span>
|
||||
<span v-else>
|
||||
<span v-if= "tmp[layer].upgrades[data].title"><h3 v-html="tmp[layer].upgrades[data].title"></h3><br></span>
|
||||
<span v-if= "tmp[layer].upgrades[data].title">
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<h3 v-html="tmp[layer].upgrades[data].title"></h3><br>
|
||||
</span>
|
||||
<span v-html="tmp[layer].upgrades[data].description"></span>
|
||||
<span v-if="tmp[layer].upgrades[data].effectDisplay"><br>Currently: <span v-html="tmp[layer].upgrades[data].effectDisplay"></span></span>
|
||||
<span v-if="tmp[layer].upgrades[data].cost"><br><br>Cost: {{ formatWhole(tmp[layer].upgrades[data].cost) }} {{(tmp[layer].upgrades[data].currencyDisplayName ? tmp[layer].upgrades[data].currencyDisplayName : tmp[layer].resource)}}</span>
|
||||
|
@ -179,9 +190,9 @@ function loadVue() {
|
|||
template: `
|
||||
<div v-if="tmp[layer].milestones">
|
||||
<table>
|
||||
<tr v-for="id in Object.keys(tmp[layer].milestones)"><div v-if="tmp[layer].milestones[id]!== undefined && tmp[layer].milestones[id].unlocked && milestoneShown(layer, id)"
|
||||
<tr v-for="id in Object.keys(tmp[layer].milestones)" v-if="tmp[layer].milestones[id]!== undefined && tmp[layer].milestones[id].unlocked && milestoneShown(layer, id)">
|
||||
<milestone :layer = "layer" :data = "id" v-bind:style="tmp[layer].componentStyles.milestone"></milestone>
|
||||
</tr></div>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
</div>
|
||||
|
@ -193,9 +204,9 @@ function loadVue() {
|
|||
template: `
|
||||
<div v-if="tmp[layer].milestones">
|
||||
<table>
|
||||
<tr v-for="id in data"><div v-if="tmp[layer].milestones[id]!== undefined && tmp[layer].milestones[id].unlocked && milestoneShown(layer, id)"
|
||||
<tr v-for="id in data" v-if="tmp[layer].milestones[id]!== undefined && tmp[layer].milestones[id].unlocked && milestoneShown(layer, id)">
|
||||
<milestone :layer = "layer" :data = "id" v-bind:style="tmp[layer].componentStyles.milestone"></milestone>
|
||||
</tr></div>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
</div>
|
||||
|
@ -210,7 +221,7 @@ function loadVue() {
|
|||
<h3 v-html="tmp[layer].milestones[data].title"></h3><br>
|
||||
<b v-html="tmp[layer].milestones[data].requirementDescription"></b><br>
|
||||
<span v-html="tmp[layer].milestones[data].effectDescription"></span><br>
|
||||
<span v-if="(tmp[layer].milestones[data].toggles)&&(hasMilestone(layer, data))" v-for="toggle in tmp[layer].milestones[data].toggles"><toggle :layer= "layer" :data= "toggle" v-bind:style="tmp[layer].componentStyles.toggle"></toggle> </span></td></tr>
|
||||
<span v-if="(tmp[layer].milestones[data].toggles)&&(hasMilestone(layer, data))" v-for="toggle in tmp[layer].milestones[data].toggles"><toggle :layer= "layer" :data= "toggle" v-bind:style="tmp[layer].componentStyles.toggle" /> </span></td>
|
||||
`
|
||||
});
|
||||
|
||||
|
@ -259,57 +270,84 @@ function loadVue() {
|
|||
Vue.component("buyables", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<div v-if="tmp[layer].buyables" class="upgTable">
|
||||
<respec-button v-if="tmp[layer].buyables.respec && !(tmp[layer].buyables.showRespec !== undefined && tmp[layer].buyables.showRespec == false)" :layer = "layer" v-bind:style="[{'margin-bottom': '12px'}, tmp[layer].componentStyles['respec-button']]"></respec-button>
|
||||
<div v-for="row in tmp[layer].buyables.rows" class="upgRow">
|
||||
<div v-for="col in tmp[layer].buyables.cols"><div v-if="tmp[layer].buyables[row*10+col]!== undefined && tmp[layer].buyables[row*10+col].unlocked" class="upgAlign" v-bind:style="{'margin-left': '7px', 'margin-right': '7px', 'height': (data ? data : 'inherit'),}">
|
||||
<buyable :layer = "layer" :data = "row*10+col" :size = "data"></buyable>
|
||||
</div></div>
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
<div v-if="tmp[layer].buyables" class="upgTable">
|
||||
<respec-button
|
||||
v-if="tmp[layer].buyables.respec && !(tmp[layer].buyables.showRespec !== undefined && tmp[layer].buyables.showRespec === false)"
|
||||
:layer="layer"
|
||||
v-bind:style="[{'margin-bottom': '12px'}, tmp[layer].componentStyles['respec-button']]"></respec-button>
|
||||
<div v-for="row in tmp[layer].buyables.rows" class="upgRow">
|
||||
<div v-for="col in tmp[layer].buyables.cols">
|
||||
<div v-if="tmp[layer].buyables[row*10+col]!== undefined && tmp[layer].buyables[row*10+col].unlocked"
|
||||
class="upgAlign"
|
||||
v-bind:style="{'margin-left': '7px', 'margin-right': '7px', 'height': (data ? data : 'inherit'),}">
|
||||
<buyable :layer="layer" :data="row*10+col" :size="data"></buyable>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
// data = id of buyable
|
||||
Vue.component("buyable", {
|
||||
props: ["layer", "data", "size"],
|
||||
template: `
|
||||
<div v-if="tmp[layer].buyables && tmp[layer].buyables[data]!== undefined && tmp[layer].buyables[data].unlocked" 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-on:click="buyBuyable(layer, data)">
|
||||
<span v-if= "tmp[layer].buyables[data].title"><h2 v-html="tmp[layer].buyables[data].title"></h2><br></span>
|
||||
<span v-bind:style="{'white-space': 'pre-line'}" v-html="tmp[layer].buyables[data].display"></span>
|
||||
</button>
|
||||
<br v-if="(tmp[layer].buyables[data].sellOne !== undefined && !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne == false)) || (tmp[layer].buyables[data].sellAll && !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll == false))">
|
||||
<sell-one :layer="layer" :data="data" v-bind:style="tmp[layer].componentStyles['sell-one']" v-if="(tmp[layer].buyables[data].sellOne)&& !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne == false)"></sell-one>
|
||||
<sell-all :layer="layer" :data="data" v-bind:style="tmp[layer].componentStyles['sell-all']" v-if="(tmp[layer].buyables[data].sellAll)&& !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll == false)"></sell-all>
|
||||
</div>
|
||||
<div
|
||||
v-if="tmp[layer].buyables && tmp[layer].buyables[data]!== undefined && tmp[layer].buyables[data].unlocked"
|
||||
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-on:click="buyBuyable(layer, data)">
|
||||
<span v-if="tmp[layer].buyables[data].title">
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<h2 v-html="tmp[layer].buyables[data].title"></h2><br>
|
||||
</span>
|
||||
<span v-bind:style="{'white-space': 'pre-line'}" v-html="tmp[layer].buyables[data].display"></span>
|
||||
</button>
|
||||
<br v-if="(tmp[layer].buyables[data].sellOne !== undefined && !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne === false)) || (tmp[layer].buyables[data].sellAll && !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll === false))">
|
||||
<sell-one :layer="layer" :data="data" v-bind:style="tmp[layer].componentStyles['sell-one']"
|
||||
v-if="(tmp[layer].buyables[data].sellOne)&& !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne === false)"></sell-one>
|
||||
<sell-all :layer="layer" :data="data" v-bind:style="tmp[layer].componentStyles['sell-all']"
|
||||
v-if="(tmp[layer].buyables[data].sellAll)&& !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll === false)"></sell-all>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
Vue.component("respec-button", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<button v-if="tmp[layer].buyables && tmp[layer].buyables.respec && !(tmp[layer].buyables.showRespec !== undefined && tmp[layer].buyables.showRespec == false)" v-on:click="respecBuyables(layer)" v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{tmp[layer].buyables.respecText ? tmp[layer].buyables.respecText : "Respec"}}</button>
|
||||
`
|
||||
<button
|
||||
v-if="tmp[layer].buyables && tmp[layer].buyables.respec && !(tmp[layer].buyables.showRespec !== undefined && tmp[layer].buyables.showRespec === false)"
|
||||
v-on:click="respecBuyables(layer)"
|
||||
v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{ tmp[layer].buyables.respecText ? tmp[layer].buyables.respecText : "Respec" }}
|
||||
</button>
|
||||
`
|
||||
});
|
||||
|
||||
// data = button size, in px
|
||||
Vue.component("clickables", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<div v-if="tmp[layer].clickables" class="upgTable">
|
||||
<master-button v-if="tmp[layer].clickables.masterButtonPress && !(tmp[layer].clickables.showMasterButton !== undefined && tmp[layer].clickables.showMasterButton == false)" :layer = "layer" v-bind:style="[{'margin-bottom': '12px'}, tmp[layer].componentStyles['master-button']]"></master-button>
|
||||
<div v-for="row in tmp[layer].clickables.rows" class="upgRow">
|
||||
<div v-for="col in tmp[layer].clickables.cols"><div v-if="tmp[layer].clickables[row*10+col]!== undefined && tmp[layer].clickables[row*10+col].unlocked" class="upgAlign" v-bind:style="{'margin-left': '7px', 'margin-right': '7px', 'height': (data ? data : 'inherit'),}">
|
||||
<clickable :layer = "layer" :data = "row*10+col" :size = "data" v-bind:style="tmp[layer].componentStyles.clickable"></clickable>
|
||||
</div></div>
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
<div v-if="tmp[layer].clickables" class="upgTable">
|
||||
<master-button
|
||||
v-if="tmp[layer].clickables.masterButtonPress && !(tmp[layer].clickables.showMasterButton !== undefined && tmp[layer].clickables.showMasterButton === false)"
|
||||
:layer="layer"
|
||||
v-bind:style="[{'margin-bottom': '12px'}, tmp[layer].componentStyles['master-button']]"></master-button>
|
||||
<div v-for="row in tmp[layer].clickables.rows" class="upgRow">
|
||||
<div v-for="col in tmp[layer].clickables.cols">
|
||||
<div v-if="tmp[layer].clickables[row*10+col]!== undefined && tmp[layer].clickables[row*10+col].unlocked"
|
||||
class="upgAlign"
|
||||
v-bind:style="{'margin-left': '7px', 'margin-right': '7px', 'height': (data ? data : 'inherit'),}">
|
||||
<clickable :layer="layer" :data="row*10+col" :size="data"
|
||||
v-bind:style="tmp[layer].componentStyles.clickable"></clickable>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
// data = id of clickable
|
||||
|
@ -321,7 +359,10 @@ function loadVue() {
|
|||
v-bind:class="{ upg: true, can: tmp[layer].clickables[data].canClick !== false, locked: tmp[layer].clickables[data].canClick === false, ...tmp[layer].clickables[data].class}"
|
||||
v-bind:style="[tmp[layer].clickables[data].canClick !== false ? {'background-color': tmp[layer].color} : {}, size ? {'height': size, 'width': size} : {}, tmp[layer].clickables[data].style]"
|
||||
v-on="handlers">
|
||||
<span v-if= "tmp[layer].clickables[data].title"><h2 v-html="tmp[layer].clickables[data].title"></h2><br></span>
|
||||
<span v-if= "tmp[layer].clickables[data].title">
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<h2 v-html="tmp[layer].clickables[data].title"></h2><br>
|
||||
</span>
|
||||
<span v-bind:style="{'white-space': 'pre-line'}" v-html="tmp[layer].clickables[data].display"></span>
|
||||
</button>
|
||||
`,
|
||||
|
@ -334,7 +375,7 @@ function loadVue() {
|
|||
touchend: layers[layer].clickables[data].touchend,
|
||||
mouseleave: layers[layer].clickables[data].touchend
|
||||
};
|
||||
for (cb in handlers) {
|
||||
for (let cb in handlers) {
|
||||
if (handlers[cb] == null) {
|
||||
delete handlers[cb];
|
||||
}
|
||||
|
@ -346,9 +387,12 @@ function loadVue() {
|
|||
Vue.component("master-button", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<button v-if="tmp[layer].clickables && tmp[layer].clickables.masterButtonPress && !(tmp[layer].clickables.showMasterButton !== undefined && tmp[layer].clickables.showMasterButton == false)"
|
||||
v-on:click="run(tmp[layer].clickables.masterButtonPress, tmp[layer].clickables)" v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{tmp[layer].clickables.masterButtonText ? tmp[layer].clickables.masterButtonText : "Click me!"}}</button>
|
||||
`
|
||||
<button
|
||||
v-if="tmp[layer].clickables && tmp[layer].clickables.masterButtonPress && !(tmp[layer].clickables.showMasterButton !== undefined && tmp[layer].clickables.showMasterButton === false)"
|
||||
v-on:click="run(tmp[layer].clickables.masterButtonPress, tmp[layer].clickables)"
|
||||
v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{ tmp[layer].clickables.masterButtonText ? tmp[layer].clickables.masterButtonText : "Click me!" }}
|
||||
</button>
|
||||
`
|
||||
});
|
||||
|
||||
// data = button size, in px
|
||||
|
@ -364,9 +408,9 @@ function loadVue() {
|
|||
<div class="upgTable instant">
|
||||
<tab-buttons :layer="layer" :data="tmp[layer].microtabs[data]" :name="data" v-bind:style="tmp[layer].componentStyles['tab-buttons']"></tab-buttons>
|
||||
</div>
|
||||
<layer-tab v-if="tmp[layer].microtabs[data][player.subtabs[layer][data]].embedLayer" :layer="tmp[layer].microtabs[data][player.subtabs[layer][data]].embedLayer" :embedded="true"></layer-tab>
|
||||
<layer-tab v-if="tmp[layer].microtabs[data][currentTab].embedLayer" :layer="tmp[layer].microtabs[data][currentTab].embedLayer" :embedded="true"></layer-tab>
|
||||
|
||||
<column v-else v-bind:style="tmp[layer].microtabs[data][player.subtabs[layer][data]].style" :layer="layer" :data="tmp[layer].microtabs[data][player.subtabs[layer][data]].content"></column>
|
||||
<column v-else v-bind:style="tmp[layer].microtabs[data][currentTab].style" :layer="layer" :data="tmp[layer].microtabs[data][currentTab].content"></column>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
@ -406,15 +450,22 @@ function loadVue() {
|
|||
Vue.component("achievement", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<div v-if="tmp[layer].achievements && tmp[layer].achievements[data]!== undefined && tmp[layer].achievements[data].unlocked" v-bind:class="{ [layer]: true, achievement: true, locked: !hasAchievement(layer, data), bought: hasAchievement(layer, data)}"
|
||||
v-bind:tooltip="
|
||||
(tmp[layer].achievements[data].tooltip == '') ? false : hasAchievement(layer, data) ? (tmp[layer].achievements[data].doneTooltip ? tmp[layer].achievements[data].doneTooltip : (tmp[layer].achievements[data].tooltip ? tmp[layer].achievements[data].tooltip : 'You did it!'))
|
||||
<div
|
||||
v-if="tmp[layer].achievements && tmp[layer].achievements[data]!== undefined && tmp[layer].achievements[data].unlocked"
|
||||
v-bind:class="{ [layer]: true, achievement: true, locked: !hasAchievement(layer, data), bought: hasAchievement(layer, data)}"
|
||||
v-bind:tooltip="
|
||||
(tmp[layer].achievements[data].tooltip === '') ? false : hasAchievement(layer, data) ? (tmp[layer].achievements[data].doneTooltip ? tmp[layer].achievements[data].doneTooltip : (tmp[layer].achievements[data].tooltip ? tmp[layer].achievements[data].tooltip : 'You did it!'))
|
||||
: (tmp[layer].achievements[data].goalTooltip ? tmp[layer].achievements[data].goalTooltip : (tmp[layer].achievements[data].tooltip ? tmp[layer].achievements[data].tooltip : 'LOCKED'))
|
||||
"
|
||||
|
||||
v-bind:style="tmp[layer].achievements[data].computedStyle">
|
||||
<span v-if= "tmp[layer].achievements[data].name"><br><h3 v-bind:style="tmp[layer].achievements[data].textStyle" v-html="tmp[layer].achievements[data].name"></h3><br></span>
|
||||
</div>
|
||||
v-bind:style="tmp[layer].achievements[data].computedStyle">
|
||||
<span v-if="tmp[layer].achievements[data].name">
|
||||
<br>
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<h3 v-bind:style="tmp[layer].achievements[data].textStyle"
|
||||
v-html="tmp[layer].achievements[data].name"></h3>
|
||||
<br>
|
||||
</span>
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
|
@ -427,13 +478,19 @@ function loadVue() {
|
|||
}
|
||||
},
|
||||
template: `<div>
|
||||
<span class="upgRow" v-for="(row, r) in data"><table>
|
||||
<span v-for="(node, id) in row" style = "{width: 0px}">
|
||||
<tree-node :layer='node' :abb='tmp[node].symbol' :key="key + '-' + r + '-' + id"></tree-node>
|
||||
<span class="upgRow" v-for="(row, r) in data">
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<table>
|
||||
<span v-for="(node, id) in row" style = "{width: 0}">
|
||||
<tree-node :layer='node' :abb='tmp[node].symbol' :key="key + '-' + r + '-' + id"></tree-node>
|
||||
</span>
|
||||
<tr>
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<table><button class="treeNode hidden"></button></table>
|
||||
</tr>
|
||||
</table>
|
||||
</span>
|
||||
<tr><table><button class="treeNode hidden"></button></table></tr>
|
||||
</span></div>
|
||||
|
||||
</div>
|
||||
`
|
||||
});
|
||||
|
||||
|
@ -441,16 +498,22 @@ function loadVue() {
|
|||
Vue.component("sell-one", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<button v-if="tmp[layer].buyables && tmp[layer].buyables[data].sellOne && !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne == false)" v-on:click="run(tmp[layer].buyables[data].sellOne, tmp[layer].buyables[data])"
|
||||
v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{tmp[layer].buyables.sellOneText ? tmp[layer].buyables.sellOneText : "Sell One"}}</button>
|
||||
`
|
||||
<button
|
||||
v-if="tmp[layer].buyables && tmp[layer].buyables[data].sellOne && !(tmp[layer].buyables[data].canSellOne !== undefined && tmp[layer].buyables[data].canSellOne === false)"
|
||||
v-on:click="run(tmp[layer].buyables[data].sellOne, tmp[layer].buyables[data])"
|
||||
v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{ tmp[layer].buyables.sellOneText ? tmp[layer].buyables.sellOneText : "Sell One" }}
|
||||
</button>
|
||||
`
|
||||
});
|
||||
Vue.component("sell-all", {
|
||||
props: ["layer", "data"],
|
||||
template: `
|
||||
<button v-if="tmp[layer].buyables && tmp[layer].buyables[data].sellAll && !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll == false)" v-on:click="run(tmp[layer].buyables[data].sellAll, tmp[layer].buyables[data])"
|
||||
v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{tmp[layer].buyables.sellAllText ? tmp[layer].buyables.sellAllText : "Sell All"}}</button>
|
||||
`
|
||||
<button
|
||||
v-if="tmp[layer].buyables && tmp[layer].buyables[data].sellAll && !(tmp[layer].buyables[data].canSellAll !== undefined && tmp[layer].buyables[data].canSellAll === false)"
|
||||
v-on:click="run(tmp[layer].buyables[data].sellAll, tmp[layer].buyables[data])"
|
||||
v-bind:class="{ longUpg: true, can: player[layer].unlocked, locked: !player[layer].unlocked }">{{ tmp[layer].buyables.sellAllText ? tmp[layer].buyables.sellAllText : "Sell All" }}
|
||||
</button>
|
||||
`
|
||||
});
|
||||
|
||||
// SYSTEM COMPONENTS
|
||||
|
|
120
js/game.js
120
js/game.js
|
@ -1,7 +1,7 @@
|
|||
var player;
|
||||
var needCanvasUpdate = true;
|
||||
var gameEnded = false;
|
||||
var scrolled = false;
|
||||
let player;
|
||||
let needCanvasUpdate = true;
|
||||
let gameEnded = false;
|
||||
|
||||
|
||||
// Don't change this
|
||||
const TMT_VERSION = {
|
||||
|
@ -17,19 +17,19 @@ function getResetGain(layer, useType = null) {
|
|||
return layers[layer].getResetGain();
|
||||
}
|
||||
}
|
||||
if(tmp[layer].type == "none") {
|
||||
if(tmp[layer].type === "none") {
|
||||
return new Decimal (0);
|
||||
}
|
||||
if (tmp[layer].gainExp.eq(0)) {
|
||||
return new Decimal(0);
|
||||
}
|
||||
if (type=="static") {
|
||||
if (type==="static") {
|
||||
if ((!tmp[layer].canBuyMax) || tmp[layer].baseAmount.lt(tmp[layer].requires)) {
|
||||
return new Decimal(1);
|
||||
}
|
||||
let gain = tmp[layer].baseAmount.div(tmp[layer].requires).div(tmp[layer].gainMult).max(1).log(tmp[layer].base).times(tmp[layer].gainExp).pow(Decimal.pow(tmp[layer].exponent, -1));
|
||||
return gain.floor().sub(player[layer].points).add(1).max(1);
|
||||
} else if (type=="normal"){
|
||||
} else if (type==="normal"){
|
||||
if (tmp[layer].baseAmount.lt(tmp[layer].requires)) {
|
||||
return new Decimal(0);
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ function getResetGain(layer, useType = null) {
|
|||
gain = gain.pow(tmp[layer].softcapPower).times(tmp[layer].softcap.pow(decimalOne.sub(tmp[layer].softcapPower)));
|
||||
}
|
||||
return gain.floor().max(0);
|
||||
} else if (type=="custom"){
|
||||
} else if (type==="custom"){
|
||||
return layers[layer].getResetGain();
|
||||
} else {
|
||||
return new Decimal(0);
|
||||
|
@ -54,7 +54,7 @@ function getNextAt(layer, canMax=false, useType = null) {
|
|||
}
|
||||
|
||||
}
|
||||
if(tmp[layer].type == "none") {
|
||||
if(tmp[layer].type === "none") {
|
||||
return new Decimal (Infinity);
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@ function getNextAt(layer, canMax=false, useType = null) {
|
|||
return new Decimal(Infinity);
|
||||
}
|
||||
|
||||
if (type=="static") {
|
||||
if (type==="static") {
|
||||
if (!tmp[layer].canBuyMax) {
|
||||
canMax = false;
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ function getNextAt(layer, canMax=false, useType = null) {
|
|||
cost = cost.ceil();
|
||||
}
|
||||
return cost;
|
||||
} else if (type=="normal"){
|
||||
} else if (type==="normal"){
|
||||
let next = tmp[layer].resetGain.add(1);
|
||||
if (next.gte(tmp[layer].softcap)) {
|
||||
next = next.div(tmp[layer].softcap.pow(decimalOne.sub(tmp[layer].softcapPower))).pow(decimalOne.div(tmp[layer].softcapPower));
|
||||
|
@ -86,7 +86,7 @@ function getNextAt(layer, canMax=false, useType = null) {
|
|||
next = next.ceil();
|
||||
}
|
||||
return next;
|
||||
} else if (type=="custom"){
|
||||
} else if (type==="custom"){
|
||||
return layers[layer].getNextAt(canMax);
|
||||
} else {
|
||||
return new Decimal(0);
|
||||
|
@ -103,10 +103,10 @@ function softcap(value, cap, power = 0.5) {
|
|||
|
||||
// Return true if the layer should be highlighted. By default checks for upgrades only.
|
||||
function shouldNotify(layer){
|
||||
if (player.tab == layer || player.navTab == layer) {
|
||||
if (player.tab === layer || player.navTab === layer) {
|
||||
return false;
|
||||
}
|
||||
for (id in tmp[layer].upgrades){
|
||||
for (let id in tmp[layer].upgrades){
|
||||
if (!isNaN(id)){
|
||||
if (canAffordUpgrade(layer, id) && !hasUpgrade(layer, id) && tmp[layer].upgrades[id].unlocked){
|
||||
return true;
|
||||
|
@ -118,15 +118,15 @@ function shouldNotify(layer){
|
|||
}
|
||||
|
||||
if (isPlainObject(tmp[layer].tabFormat)) {
|
||||
for (subtab in tmp[layer].tabFormat){
|
||||
for (let subtab in tmp[layer].tabFormat){
|
||||
if (subtabShouldNotify(layer, "mainTabs", subtab)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (family in tmp[layer].microtabs) {
|
||||
for (subtab in tmp[layer].microtabs[family]){
|
||||
for (let family in tmp[layer].microtabs) {
|
||||
for (let subtab in tmp[layer].microtabs[family]){
|
||||
if (subtabShouldNotify(layer, family, subtab)) {
|
||||
return true;
|
||||
}
|
||||
|
@ -140,9 +140,9 @@ function shouldNotify(layer){
|
|||
function canReset(layer) {
|
||||
if (layers[layer].canReset!== undefined) {
|
||||
return run(layers[layer].canReset, layers[layer]);
|
||||
} else if(tmp[layer].type == "normal") {
|
||||
} else if(tmp[layer].type === "normal") {
|
||||
return tmp[layer].baseAmount.gte(tmp[layer].requires);
|
||||
} else if(tmp[layer].type== "static") {
|
||||
} else if(tmp[layer].type=== "static") {
|
||||
return tmp[layer].baseAmount.gte(tmp[layer].nextAt);
|
||||
} else {
|
||||
return false;
|
||||
|
@ -150,7 +150,7 @@ function canReset(layer) {
|
|||
}
|
||||
|
||||
function rowReset(row, layer) {
|
||||
for (lr in ROW_LAYERS[row]){
|
||||
for (let lr in ROW_LAYERS[row]){
|
||||
if(layers[lr].doReset) {
|
||||
|
||||
player[lr].activeChallenge = null; // Exit challenges on any row reset on an equal or higher row
|
||||
|
@ -165,7 +165,7 @@ function rowReset(row, layer) {
|
|||
function layerDataReset(layer, keep = []) {
|
||||
let storedData = {unlocked: player[layer].unlocked}; // Always keep unlocked
|
||||
|
||||
for (thing in keep) {
|
||||
for (let thing in keep) {
|
||||
if (player[layer][keep[thing]] !== undefined) {
|
||||
storedData[keep[thing]] = player[layer][keep[thing]];
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ function layerDataReset(layer, keep = []) {
|
|||
if (layers[layer].clickables && !player[layer].clickables) {
|
||||
player[layer].clickables = getStartClickables(layer);
|
||||
}
|
||||
for (thing in storedData) {
|
||||
for (let thing in storedData) {
|
||||
player[layer][thing] =storedData[thing];
|
||||
}
|
||||
}
|
||||
|
@ -214,10 +214,10 @@ function generatePoints(layer, diff) {
|
|||
addPoints(layer, tmp[layer].resetGain.times(diff));
|
||||
}
|
||||
|
||||
var prevOnReset;
|
||||
let prevOnReset;
|
||||
|
||||
function doReset(layer, force=false) {
|
||||
if (tmp[layer].type == "none") {
|
||||
if (tmp[layer].type === "none") {
|
||||
return;
|
||||
}
|
||||
let row = tmp[layer].row;
|
||||
|
@ -226,13 +226,13 @@ function doReset(layer, force=false) {
|
|||
return;
|
||||
}
|
||||
let gain = tmp[layer].resetGain;
|
||||
if (tmp[layer].type=="static") {
|
||||
if (tmp[layer].type==="static") {
|
||||
if (tmp[layer].baseAmount.lt(tmp[layer].nextAt)) {
|
||||
return;
|
||||
}
|
||||
gain =(tmp[layer].canBuyMax ? gain : 1);
|
||||
}
|
||||
if (tmp[layer].type=="custom") {
|
||||
if (tmp[layer].type==="custom") {
|
||||
if (!tmp[layer].canReset) {
|
||||
return;
|
||||
}
|
||||
|
@ -251,8 +251,8 @@ function doReset(layer, force=false) {
|
|||
needCanvasUpdate = true;
|
||||
|
||||
if (tmp[layer].increaseUnlockOrder){
|
||||
lrs = tmp[layer].increaseUnlockOrder;
|
||||
for (lr in lrs) {
|
||||
let lrs = tmp[layer].increaseUnlockOrder;
|
||||
for (let lr in lrs) {
|
||||
if (!player[lrs[lr]].unlocked) {
|
||||
player[lrs[lr]].unlockOrder++;
|
||||
}
|
||||
|
@ -268,14 +268,14 @@ function doReset(layer, force=false) {
|
|||
}
|
||||
|
||||
|
||||
for (layerResetting in layers) {
|
||||
if (row >= layers[layerResetting].row && (!force || layerResetting != layer)) {
|
||||
for (let layerResetting in layers) {
|
||||
if (row >= layers[layerResetting].row && (!force || layerResetting !== layer)) {
|
||||
completeChallenge(layerResetting);
|
||||
}
|
||||
}
|
||||
|
||||
prevOnReset = {...player}; //Deep Copy
|
||||
player.points = (row == 0 ? new Decimal(0) : getStartPoints());
|
||||
player.points = (row === 0 ? new Decimal(0) : getStartPoints());
|
||||
|
||||
for (let x = row; x >= 0; x--) {
|
||||
rowReset(x, layer);
|
||||
|
@ -289,32 +289,12 @@ function doReset(layer, force=false) {
|
|||
updateTemp();
|
||||
}
|
||||
|
||||
function resetRow(row) {
|
||||
if (prompt("Are you sure you want to reset this row? It is highly recommended that you wait until the end of your current run before doing this! Type \"I WANT TO RESET THIS\" to confirm")!="I WANT TO RESET THIS") {
|
||||
return;
|
||||
}
|
||||
let pre_layers = ROW_LAYERS[row-1];
|
||||
let layers = ROW_LAYERS[row];
|
||||
let post_layers = ROW_LAYERS[row+1];
|
||||
rowReset(row+1, post_layers[0]);
|
||||
doReset(pre_layers[0], true);
|
||||
for (let layer in layers) {
|
||||
player[layer].unlocked = false;
|
||||
if (player[layer].unlockOrder) {
|
||||
player[layer].unlockOrder = 0;
|
||||
}
|
||||
}
|
||||
player.points = getStartPoints();
|
||||
updateTemp();
|
||||
resizeCanvas();
|
||||
}
|
||||
|
||||
function startChallenge(layer, x) {
|
||||
let enter = false;
|
||||
if (!player[layer].unlocked) {
|
||||
return;
|
||||
}
|
||||
if (player[layer].activeChallenge == x) {
|
||||
if (player[layer].activeChallenge === x) {
|
||||
completeChallenge(layer, x);
|
||||
player[layer].activeChallenge = null;
|
||||
} else {
|
||||
|
@ -329,7 +309,7 @@ function startChallenge(layer, x) {
|
|||
}
|
||||
|
||||
function canCompleteChallenge(layer, x) {
|
||||
if (x != player[layer].activeChallenge) {
|
||||
if (x !== player[layer].activeChallenge) {
|
||||
return;
|
||||
}
|
||||
let challenge = tmp[layer].challenges[x];
|
||||
|
@ -353,8 +333,8 @@ function canCompleteChallenge(layer, x) {
|
|||
|
||||
}
|
||||
|
||||
function completeChallenge(layer, x) {
|
||||
var x = player[layer].activeChallenge;
|
||||
function completeChallenge(layer) {
|
||||
let x = player[layer].activeChallenge;
|
||||
if (!x) {
|
||||
return;
|
||||
}
|
||||
|
@ -384,7 +364,7 @@ function autobuyUpgrades(layer){
|
|||
if (!tmp[layer].upgrades) {
|
||||
return;
|
||||
}
|
||||
for (id in tmp[layer].upgrades) {
|
||||
for (let id in tmp[layer].upgrades) {
|
||||
if (isPlainObject(tmp[layer].upgrades[id]) && (layers[layer].upgrades[id].canAfford === undefined || layers[layer].upgrades[id].canAfford() === true)) {
|
||||
buyUpg(layer, id);
|
||||
}
|
||||
|
@ -413,8 +393,8 @@ function gameLoop(diff) {
|
|||
addTime(diff);
|
||||
player.points = player.points.add(tmp.pointGen.times(diff)).max(0);
|
||||
|
||||
for (x = 0; x <= maxRow; x++){
|
||||
for (item in TREE_LAYERS[x]) {
|
||||
for (let x = 0; x <= maxRow; x++){
|
||||
for (let item in TREE_LAYERS[x]) {
|
||||
let layer = TREE_LAYERS[x][item];
|
||||
player[layer].resetTime += diff;
|
||||
if (tmp[layer].passiveGeneration) {
|
||||
|
@ -426,8 +406,8 @@ function gameLoop(diff) {
|
|||
}
|
||||
}
|
||||
|
||||
for (row in OTHER_LAYERS){
|
||||
for (item in OTHER_LAYERS[row]) {
|
||||
for (let row in OTHER_LAYERS){
|
||||
for (let item in OTHER_LAYERS[row]) {
|
||||
let layer = OTHER_LAYERS[row][item];
|
||||
player[layer].resetTime += diff;
|
||||
if (tmp[layer].passiveGeneration) {
|
||||
|
@ -439,8 +419,8 @@ function gameLoop(diff) {
|
|||
}
|
||||
}
|
||||
|
||||
for (x = maxRow; x >= 0; x--){
|
||||
for (item in TREE_LAYERS[x]) {
|
||||
for (let x = maxRow; x >= 0; x--){
|
||||
for (let item in TREE_LAYERS[x]) {
|
||||
let layer = TREE_LAYERS[x][item];
|
||||
if (tmp[layer].autoPrestige && tmp[layer].canReset) {
|
||||
doReset(layer);
|
||||
|
@ -454,8 +434,8 @@ function gameLoop(diff) {
|
|||
}
|
||||
}
|
||||
|
||||
for (row in OTHER_LAYERS){
|
||||
for (item in OTHER_LAYERS[row]) {
|
||||
for (let row in OTHER_LAYERS){
|
||||
for (let item in OTHER_LAYERS[row]) {
|
||||
let layer = OTHER_LAYERS[row][item];
|
||||
if (tmp[layer].autoPrestige && tmp[layer].canReset) {
|
||||
doReset(layer);
|
||||
|
@ -470,7 +450,7 @@ function gameLoop(diff) {
|
|||
}
|
||||
}
|
||||
|
||||
for (layer in layers){
|
||||
for (let layer in layers){
|
||||
if (layers[layer].milestones) {
|
||||
updateMilestones(layer);
|
||||
}
|
||||
|
@ -490,16 +470,16 @@ function hardReset() {
|
|||
window.location.reload();
|
||||
}
|
||||
|
||||
var ticking = false;
|
||||
let ticking = false;
|
||||
|
||||
var interval = setInterval(function() {
|
||||
if (player===undefined||tmp===undefined) {
|
||||
const interval = setInterval(function () {
|
||||
if (player === undefined || tmp === undefined) {
|
||||
return;
|
||||
}
|
||||
if (ticking) {
|
||||
return;
|
||||
}
|
||||
if (gameEnded&&!player.keepGoing) {
|
||||
if (gameEnded && !player.keepGoing) {
|
||||
return;
|
||||
}
|
||||
ticking = true;
|
||||
|
@ -522,7 +502,7 @@ var interval = setInterval(function() {
|
|||
diff *= player.devSpeed;
|
||||
}
|
||||
player.time = now;
|
||||
if (needCanvasUpdate){
|
||||
if (needCanvasUpdate) {
|
||||
resizeCanvas();
|
||||
needCanvasUpdate = false;
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ let winText = "Congratulations! You have reached the end and beaten this game, b
|
|||
|
||||
// If you add new functions anywhere inside of a layer, and those functions have an effect when called, add them here.
|
||||
// (The ones here are examples, all official functions are already taken care of)
|
||||
var doNotCallTheseFunctionsEveryTick = ["onAddPoints", "touchstart", "touchend"];
|
||||
const doNotCallTheseFunctionsEveryTick = ["onAddPoints", "touchstart", "touchend"];
|
||||
|
||||
function getStartPoints(){
|
||||
return new Decimal(modInfo.initialStartPoints);
|
||||
|
@ -85,8 +85,7 @@ function addedPlayerData() {
|
|||
}
|
||||
|
||||
// Display extra things at the top of the page
|
||||
var displayThings = [
|
||||
];
|
||||
const displayThings = [];
|
||||
|
||||
// Determines when the game "ends"
|
||||
function isEndgame() {
|
||||
|
|
|
@ -1054,7 +1054,7 @@
|
|||
if (newparts.length === 2)
|
||||
{
|
||||
this.sign = 1;
|
||||
if (newparts[0].charAt(0) == "-")
|
||||
if (newparts[0].charAt(0) === "-")
|
||||
{
|
||||
this.sign = -1;
|
||||
}
|
||||
|
@ -1467,7 +1467,7 @@
|
|||
var b;
|
||||
|
||||
//Which number is bigger in terms of its multiplicative distance from 1?
|
||||
if ((this.layer > decimal.layer) || (this.layer == decimal.layer && Math.abs(this.mag) > Math.abs(decimal.mag)))
|
||||
if ((this.layer > decimal.layer) || (this.layer === decimal.layer && Math.abs(this.mag) > Math.abs(decimal.mag)))
|
||||
{
|
||||
a = this;
|
||||
b = decimal;
|
||||
|
@ -2400,7 +2400,7 @@
|
|||
//Other sroots are possible to calculate probably through guess and check methods, this one is easy though.
|
||||
// https://en.wikipedia.org/wiki/Tetration#Super-root
|
||||
Decimal.prototype.ssqrt = function() {
|
||||
if (this.sign == 1 && this.layer >= 3)
|
||||
if (this.sign === 1 && this.layer >= 3)
|
||||
{
|
||||
return FC_NN(this.sign, this.layer-1, this.mag)
|
||||
}
|
||||
|
|
|
@ -1,28 +1,34 @@
|
|||
var canvas;
|
||||
var ctx;
|
||||
let canvas;
|
||||
let ctx;
|
||||
|
||||
window.addEventListener("resize", (_=>resizeCanvas()));
|
||||
|
||||
function retrieveCanvasData() {
|
||||
let treeCanv = document.getElementById("treeCanvas")
|
||||
let treeTab = document.getElementById("treeTab")
|
||||
if (treeCanv===undefined||treeCanv===null) return false;
|
||||
if (treeTab===undefined||treeTab===null) return false;
|
||||
let treeCanv = document.getElementById("treeCanvas");
|
||||
let treeTab = document.getElementById("treeTab");
|
||||
if (treeCanv===undefined||treeCanv===null) {
|
||||
return false;
|
||||
}
|
||||
if (treeTab===undefined||treeTab===null) {
|
||||
return false;
|
||||
}
|
||||
canvas = treeCanv;
|
||||
ctx = canvas.getContext("2d");
|
||||
return true;
|
||||
}
|
||||
|
||||
function resizeCanvas() {
|
||||
if (!retrieveCanvasData()) return
|
||||
if (!retrieveCanvasData()) {
|
||||
return;
|
||||
}
|
||||
canvas.width = 0;
|
||||
canvas.height = 0;
|
||||
canvas.height = 0;
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
drawTree();
|
||||
drawTree();
|
||||
}
|
||||
|
||||
var colors = {
|
||||
const colors = {
|
||||
default: {
|
||||
1: "#ffffff",
|
||||
2: "#bfbfbf",
|
||||
|
@ -33,47 +39,50 @@ var colors = {
|
|||
2: "#8fa7bf",
|
||||
3: "#5f6f7f",
|
||||
},
|
||||
}
|
||||
var colors_theme
|
||||
};
|
||||
let colors_theme;
|
||||
|
||||
function drawTree() {
|
||||
if (!retrieveCanvasData()) return;
|
||||
if (!retrieveCanvasData()) {
|
||||
return;
|
||||
}
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
for (layer in layers){
|
||||
if (tmp[layer].layerShown == true && tmp[layer].branches){
|
||||
for (branch in tmp[layer].branches)
|
||||
{
|
||||
drawTreeBranch(layer, tmp[layer].branches[branch])
|
||||
}
|
||||
for (let layer in layers){
|
||||
if (tmp[layer].layerShown === true && tmp[layer].branches){
|
||||
for (let branch in tmp[layer].branches) {
|
||||
drawTreeBranch(layer, tmp[layer].branches[branch]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function drawTreeBranch(num1, data) { // taken from Antimatter Dimensions & adjusted slightly
|
||||
let num2 = data
|
||||
let color_id = 1
|
||||
let num2 = data;
|
||||
let color_id = 1;
|
||||
|
||||
if (Array.isArray(data)){
|
||||
num2 = data[0]
|
||||
color_id = data[1]
|
||||
num2 = data[0];
|
||||
color_id = data[1];
|
||||
}
|
||||
|
||||
if(typeof(color_id) == "number")
|
||||
color_id = colors_theme[color_id]
|
||||
if(typeof(color_id) == "number") {
|
||||
color_id = colors_theme[color_id];
|
||||
}
|
||||
|
||||
if (document.getElementById(num1) == null || document.getElementById(num2) == null)
|
||||
return
|
||||
if (document.getElementById(num1) == null || document.getElementById(num2) == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
let start = document.getElementById(num1).getBoundingClientRect();
|
||||
let end = document.getElementById(num2).getBoundingClientRect();
|
||||
let x1 = start.left + (start.width / 2) + document.body.scrollLeft;
|
||||
let y1 = start.top + (start.height / 2) + document.body.scrollTop - 50;
|
||||
let x2 = end.left + (end.width / 2) + document.body.scrollLeft;
|
||||
let y2 = end.top + (end.height / 2) + document.body.scrollTop - 50;
|
||||
ctx.lineWidth = 15;
|
||||
ctx.beginPath();
|
||||
ctx.strokeStyle = color_id
|
||||
ctx.moveTo(x1, y1);
|
||||
ctx.lineTo(x2, y2);
|
||||
ctx.stroke();
|
||||
let end = document.getElementById(num2).getBoundingClientRect();
|
||||
let x1 = start.left + (start.width / 2) + document.body.scrollLeft;
|
||||
let y1 = start.top + (start.height / 2) + document.body.scrollTop - 50;
|
||||
let x2 = end.left + (end.width / 2) + document.body.scrollLeft;
|
||||
let y2 = end.top + (end.height / 2) + document.body.scrollTop - 50;
|
||||
ctx.lineWidth = 15;
|
||||
ctx.beginPath();
|
||||
ctx.strokeStyle = color_id;
|
||||
ctx.moveTo(x1, y1);
|
||||
ctx.lineTo(x2, y2);
|
||||
ctx.stroke();
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
var layers = {}
|
||||
const layers = {};
|
||||
|
||||
const decimalZero = new Decimal(0)
|
||||
const decimalOne = new Decimal(1)
|
||||
|
@ -8,19 +8,19 @@ function layerShown(layer){
|
|||
return tmp[layer].layerShown;
|
||||
}
|
||||
|
||||
var LAYERS = Object.keys(layers);
|
||||
let LAYERS = Object.keys(layers);
|
||||
|
||||
var hotkeys = {};
|
||||
let hotkeys = {};
|
||||
|
||||
var maxRow = 0;
|
||||
let maxRow = 0;
|
||||
|
||||
function updateHotkeys()
|
||||
{
|
||||
hotkeys = {};
|
||||
for (layer in layers){
|
||||
hk = layers[layer].hotkeys
|
||||
for (let layer in layers){
|
||||
let hk = layers[layer].hotkeys
|
||||
if (hk){
|
||||
for (id in hk){
|
||||
for (let id in hk){
|
||||
hotkeys[hk[id].key] = hk[id]
|
||||
hotkeys[hk[id].key].layer = layer
|
||||
hotkeys[hk[id].key].id = id
|
||||
|
@ -31,30 +31,30 @@ function updateHotkeys()
|
|||
}
|
||||
}
|
||||
|
||||
var ROW_LAYERS = {}
|
||||
var TREE_LAYERS = {}
|
||||
var OTHER_LAYERS = {}
|
||||
let ROW_LAYERS = {};
|
||||
let TREE_LAYERS = {};
|
||||
let OTHER_LAYERS = {};
|
||||
|
||||
function updateLayers(){
|
||||
LAYERS = Object.keys(layers);
|
||||
ROW_LAYERS = {}
|
||||
TREE_LAYERS = {}
|
||||
OTHER_LAYERS = {}
|
||||
for (layer in layers){
|
||||
for (let layer in layers){
|
||||
setupLayer(layer)
|
||||
}
|
||||
for (row in OTHER_LAYERS) {
|
||||
for (let row in OTHER_LAYERS) {
|
||||
OTHER_LAYERS[row].sort((a, b) => (a.position > b.position) ? 1 : -1)
|
||||
for (layer in OTHER_LAYERS[row])
|
||||
for (let layer in OTHER_LAYERS[row])
|
||||
OTHER_LAYERS[row][layer] = OTHER_LAYERS[row][layer].layer
|
||||
}
|
||||
for (row in TREE_LAYERS) {
|
||||
for (let row in TREE_LAYERS) {
|
||||
TREE_LAYERS[row].sort((a, b) => (a.position > b.position) ? 1 : -1)
|
||||
for (layer in TREE_LAYERS[row])
|
||||
for (let layer in TREE_LAYERS[row])
|
||||
TREE_LAYERS[row][layer] = TREE_LAYERS[row][layer].layer
|
||||
}
|
||||
let treeLayers2 = []
|
||||
for (x = 0; x < maxRow + 1; x++) {
|
||||
for (let x = 0; x < maxRow + 1; x++) {
|
||||
if (TREE_LAYERS[x]) treeLayers2.push(TREE_LAYERS[x])
|
||||
}
|
||||
TREE_LAYERS = treeLayers2
|
||||
|
@ -64,7 +64,7 @@ function updateLayers(){
|
|||
function setupLayer(layer){
|
||||
layers[layer].layer = layer
|
||||
if (layers[layer].upgrades){
|
||||
for (thing in layers[layer].upgrades){
|
||||
for (let thing in layers[layer].upgrades){
|
||||
if (!isNaN(thing)){
|
||||
layers[layer].upgrades[thing].id = thing
|
||||
layers[layer].upgrades[thing].layer = layer
|
||||
|
@ -74,7 +74,7 @@ function setupLayer(layer){
|
|||
}
|
||||
}
|
||||
if (layers[layer].milestones){
|
||||
for (thing in layers[layer].milestones){
|
||||
for (let thing in layers[layer].milestones){
|
||||
if (!isNaN(thing)){
|
||||
layers[layer].milestones[thing].id = thing
|
||||
layers[layer].milestones[thing].layer = layer
|
||||
|
@ -84,7 +84,7 @@ function setupLayer(layer){
|
|||
}
|
||||
}
|
||||
if (layers[layer].achievements){
|
||||
for (thing in layers[layer].achievements){
|
||||
for (let thing in layers[layer].achievements){
|
||||
if (!isNaN(thing)){
|
||||
layers[layer].achievements[thing].id = thing
|
||||
layers[layer].achievements[thing].layer = layer
|
||||
|
@ -94,7 +94,7 @@ function setupLayer(layer){
|
|||
}
|
||||
}
|
||||
if (layers[layer].challenges){
|
||||
for (thing in layers[layer].challenges){
|
||||
for (let thing in layers[layer].challenges){
|
||||
if (!isNaN(thing)){
|
||||
layers[layer].challenges[thing].id = thing
|
||||
layers[layer].challenges[thing].layer = layer
|
||||
|
@ -108,7 +108,7 @@ function setupLayer(layer){
|
|||
}
|
||||
if (layers[layer].buyables){
|
||||
layers[layer].buyables.layer = layer
|
||||
for (thing in layers[layer].buyables){
|
||||
for (let thing in layers[layer].buyables){
|
||||
if (!isNaN(thing)){
|
||||
layers[layer].buyables[thing].id = thing
|
||||
layers[layer].buyables[thing].layer = layer
|
||||
|
@ -120,7 +120,7 @@ function setupLayer(layer){
|
|||
|
||||
if (layers[layer].clickables){
|
||||
layers[layer].clickables.layer = layer
|
||||
for (thing in layers[layer].clickables){
|
||||
for (let thing in layers[layer].clickables){
|
||||
if (!isNaN(thing)){
|
||||
layers[layer].clickables[thing].id = thing
|
||||
layers[layer].clickables[thing].layer = layer
|
||||
|
@ -132,7 +132,7 @@ function setupLayer(layer){
|
|||
|
||||
if (layers[layer].bars){
|
||||
layers[layer].bars.layer = layer
|
||||
for (thing in layers[layer].bars){
|
||||
for (let thing in layers[layer].bars){
|
||||
layers[layer].bars[thing].id = thing
|
||||
layers[layer].bars[thing].layer = layer
|
||||
if (layers[layer].bars[thing].unlocked === undefined)
|
||||
|
@ -141,16 +141,16 @@ function setupLayer(layer){
|
|||
}
|
||||
|
||||
if (layers[layer].infoboxes){
|
||||
for (thing in layers[layer].infoboxes){
|
||||
for (let thing in layers[layer].infoboxes){
|
||||
layers[layer].infoboxes[thing].id = thing
|
||||
layers[layer].infoboxes[thing].layer = layer
|
||||
if (layers[layer].infoboxes[thing].unlocked === undefined)
|
||||
layers[layer].infoboxes[thing].unlocked = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (layers[layer].startData) {
|
||||
data = layers[layer].startData()
|
||||
let data = layers[layer].startData()
|
||||
if (data.best !== undefined && data.showBest === undefined) layers[layer].showBest = true
|
||||
if (data.total !== undefined && data.showTotal === undefined) layers[layer].showTotal = true
|
||||
}
|
||||
|
@ -193,14 +193,14 @@ function addLayer(layerName, layerData, tabLayers = null){ // Call this to add l
|
|||
if (tabLayers !== null)
|
||||
{
|
||||
let format = {}
|
||||
for (id in tabLayers) {
|
||||
layer = tabLayers[id]
|
||||
for (let id in tabLayers) {
|
||||
let layer = tabLayers[id]
|
||||
format[(layers[layer].name ? layers[layer].name : layer)] = {
|
||||
embedLayer: layer,
|
||||
buttonStyle() {
|
||||
if (!tmp[this.embedLayer].nodeStyle) return {'border-color': tmp[this.embedLayer].color}
|
||||
else {
|
||||
style = tmp[this.embedLayer].nodeStyle
|
||||
let style = tmp[this.embedLayer].nodeStyle
|
||||
if (style['border-color'] === undefined) style['border-color'] = tmp[this.embedLayer].color
|
||||
return style
|
||||
}
|
||||
|
@ -217,21 +217,6 @@ function addNode(layerName, layerData){ // Does the same thing, but for non-laye
|
|||
layers[layerName].isLayer = false
|
||||
}
|
||||
|
||||
// If data is a function, return the result of calling it. Otherwise, return the data.
|
||||
function readData(data, args=null){
|
||||
if ((!!data && data.constructor && data.call && data.apply))
|
||||
return data(args);
|
||||
else
|
||||
return data;
|
||||
}
|
||||
|
||||
function someLayerUnlocked(row){
|
||||
for (layer in ROW_LAYERS[row])
|
||||
if (player[layer].unlocked)
|
||||
return true
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
// This isn't worth making a .ts file over
|
||||
const UP = 0
|
||||
|
|
|
@ -1,27 +1,31 @@
|
|||
var systemComponents = {
|
||||
// noinspection SpellCheckingInspection
|
||||
const systemComponents = {
|
||||
"tab-buttons": {
|
||||
props: ["layer", "data", "name"],
|
||||
template: `
|
||||
<div class="upgRow">
|
||||
<div v-for="tab in Object.keys(data)">
|
||||
<button v-if="data[tab].unlocked == undefined || data[tab].unlocked" v-bind:class="{tabButton: true, notify: subtabShouldNotify(layer, name, tab), resetNotify: subtabResetNotify(layer, name, tab)}" v-bind:style="[{'border-color': tmp[layer].color}, tmp[layer].componentStyles['tab-button'], data[tab].buttonStyle]"
|
||||
v-on:click="function(){player.subtabs[layer][name] = tab; needCanvasUpdate = true;}">{{tab}}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="upgRow">
|
||||
<div v-for="tab in Object.keys(data)">
|
||||
<button v-if="data[tab].unlocked === undefined || data[tab].unlocked"
|
||||
v-bind:class="{tabButton: true, notify: subtabShouldNotify(layer, name, tab), resetNotify: subtabResetNotify(layer, name, tab)}"
|
||||
v-bind:style="[{'border-color': tmp[layer].color}, tmp[layer].componentStyles['tab-button'], data[tab].buttonStyle]"
|
||||
v-on:click="function(){player.subtabs[layer][name] = tab; needCanvasUpdate = true;}">{{ tab }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
},
|
||||
|
||||
"tree-node": {
|
||||
props: ["layer", "abb", "size"],
|
||||
template: `
|
||||
<button v-if="nodeShown(layer)"
|
||||
v-bind:id="layer"
|
||||
v-on:click="function() {
|
||||
<button v-if="nodeShown(layer)"
|
||||
v-bind:id="layer"
|
||||
v-on:click="function() {
|
||||
if(tmp[layer].isLayer) {showTab(layer)}
|
||||
else {run(layers[layer].onClick, layers[layer])}
|
||||
}"
|
||||
|
||||
v-bind:tooltip="(tmp[layer].tooltip == '') ? false : (tmp[layer].isLayer) ? (
|
||||
v-bind:tooltip="(tmp[layer].tooltip === '') ? false : (tmp[layer].isLayer) ? (
|
||||
player[layer].unlocked ? (tmp[layer].tooltip ? tmp[layer].tooltip : formatWhole(player[layer].points) + ' ' + tmp[layer].resource)
|
||||
: (tmp[layer].tooltipLocked ? tmp[layer].tooltipLocked : 'Reach ' + formatWhole(tmp[layer].requires) + ' ' + tmp[layer].baseResource + ' to unlock (You have ' + formatWhole(tmp[layer].baseAmount) + ' ' + tmp[layer].baseResource + ')')
|
||||
)
|
||||
|
@ -30,61 +34,75 @@ var systemComponents = {
|
|||
: (tmp[layer].tooltipLocked ? tmp[layer].tooltipLocked : 'I am a button!')
|
||||
)
|
||||
"
|
||||
v-bind:class="{
|
||||
v-bind:class="{
|
||||
treeNode: tmp[layer].isLayer,
|
||||
treeButton: !tmp[layer].isLayer,
|
||||
smallNode: size == 'small',
|
||||
smallNode: size === 'small',
|
||||
[layer]: true,
|
||||
ghost: tmp[layer].layerShown == 'ghost',
|
||||
ghost: tmp[layer].layerShown === 'ghost',
|
||||
hidden: !tmp[layer].layerShown,
|
||||
locked: tmp[layer].isLayer ? !(player[layer].unlocked || tmp[layer].canReset) : !(tmp[layer].canClick),
|
||||
notify: tmp[layer].notify,
|
||||
resetNotify: tmp[layer].prestigeNotify,
|
||||
can: ((player[layer].unlocked || tmp[layer].isLayer) && tmp[layer].isLayer) || (!tmp[layer].isLayer && tmp[layer].canClick),
|
||||
}"
|
||||
v-bind:style="tmp[layer].computedNodeStyle">
|
||||
{{(abb !== '' && tmp[layer].image === undefined) ? abb : ' '}}
|
||||
</button>
|
||||
v-bind:style="tmp[layer].computedNodeStyle">
|
||||
{{ (abb !== '' && tmp[layer].image === undefined) ? abb : ' ' }}
|
||||
</button>
|
||||
`
|
||||
},
|
||||
|
||||
|
||||
"layer-tab": {
|
||||
props: ["layer", "back", "spacing", "embedded"],
|
||||
template: `<div v-bind:style="[tmp[layer].style ? tmp[layer].style : {}, (tmp[layer].tabFormat && !Array.isArray(tmp[layer].tabFormat)) ? tmp[layer].tabFormat[player.subtabs[layer].mainTabs].style : {}]">
|
||||
<div v-if="back" style="position: fixed; z-index: 100;"><button v-bind:class="back == 'big' ? 'other-back' : 'back'" v-on:click="goBack()">←</button></div>
|
||||
<div v-if="!tmp[layer].tabFormat">
|
||||
<div v-if="spacing" v-bind:style="{'height': spacing}" :key="this.$vnode.key + '-spacing'"></div>
|
||||
<info-box v-if="tmp[layer].infoboxes" :layer="layer" :data="Object.keys(tmp[layer].infoboxes)[0]":key="this.$vnode.key + '-info'"></info-box>
|
||||
<main-display v-bind:style="tmp[layer].componentStyles['main-display']" :layer="layer"></main-display>
|
||||
<div v-if="tmp[layer].type !== 'none'">
|
||||
<prestige-button v-bind:style="tmp[layer].componentStyles['prestige-button']" :layer="layer"></prestige-button>
|
||||
</div>
|
||||
<resource-display v-bind:style="tmp[layer].componentStyles['resource-display']" :layer="layer"></resource-display>
|
||||
<milestones v-bind:style="tmp[layer].componentStyles.milestones" :layer="layer"></milestones>
|
||||
<div v-if="Array.isArray(tmp[layer].midsection)">
|
||||
<column :layer="layer" :data="tmp[layer].midsection" :key="this.$vnode.key + '-mid'"></column>
|
||||
</div>
|
||||
<clickables v-bind:style="tmp[layer].componentStyles['clickables']" :layer="layer"></clickables>
|
||||
<buyables v-bind:style="tmp[layer].componentStyles.buyables" :layer="layer"></buyables>
|
||||
<upgrades v-bind:style="tmp[layer].componentStyles['upgrades']" :layer="layer"></upgrades>
|
||||
<challenges v-bind:style="tmp[layer].componentStyles['challenges']" :layer="layer"></challenges>
|
||||
<achievements v-bind:style="tmp[layer].componentStyles.achievements" :layer="layer"></achievements>
|
||||
<br><br>
|
||||
</div>
|
||||
<div v-if="tmp[layer].tabFormat">
|
||||
<div v-if="Array.isArray(tmp[layer].tabFormat)"><div v-if="spacing" v-bind:style="{'height': spacing}"></div>
|
||||
<column :layer="layer" :data="tmp[layer].tabFormat" :key="this.$vnode.key + '-col'"></column>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="upgTable" v-bind:style="{'padding-top': (embedded ? '0' : '25px'), 'margin-top': (embedded ? '-10px' : '0'), 'margin-bottom': '24px'}">
|
||||
<tab-buttons v-bind:style="tmp[layer].componentStyles['tab-buttons']" :layer="layer" :data="tmp[layer].tabFormat" :name="'mainTabs'"></tab-buttons>
|
||||
</div>
|
||||
<layer-tab v-if="tmp[layer].tabFormat[player.subtabs[layer].mainTabs].embedLayer" :layer="tmp[layer].tabFormat[player.subtabs[layer].mainTabs].embedLayer" :embedded="true" :key="this.$vnode.key + '-' + layer"></layer-tab>
|
||||
<column v-else :layer="layer" :data="tmp[layer].tabFormat[player.subtabs[layer].mainTabs].content" :key="this.$vnode.key + '-col'"></column>
|
||||
</div>
|
||||
</div></div>
|
||||
`
|
||||
template: `
|
||||
<div
|
||||
v-bind:style="[tmp[layer].style ? tmp[layer].style : {}, (tmp[layer].tabFormat && !Array.isArray(tmp[layer].tabFormat)) ? tmp[layer].tabFormat[player.subtabs[layer].mainTabs].style : {}]">
|
||||
<div v-if="back" style="position: fixed; z-index: 100;">
|
||||
<button v-bind:class="back === 'big' ? 'other-back' : 'back'" v-on:click="goBack()">←</button>
|
||||
</div>
|
||||
<div v-if="!tmp[layer].tabFormat">
|
||||
<div v-if="spacing" v-bind:style="{'height': spacing}" :key="this.$vnode.key + '-spacing'"></div>
|
||||
<infobox v-if="tmp[layer].infoboxes" :layer="layer" :data="Object.keys(tmp[layer].infoboxes)[0]"
|
||||
:key="this.$vnode.key + '-info'"></infobox>
|
||||
<main-display v-bind:style="tmp[layer].componentStyles['main-display']" :layer="layer"></main-display>
|
||||
<div v-if="tmp[layer].type !== 'none'">
|
||||
<prestige-button v-bind:style="tmp[layer].componentStyles['prestige-button']"
|
||||
:layer="layer"></prestige-button>
|
||||
</div>
|
||||
<resource-display v-bind:style="tmp[layer].componentStyles['resource-display']"
|
||||
:layer="layer"></resource-display>
|
||||
<milestones v-bind:style="tmp[layer].componentStyles.milestones" :layer="layer"></milestones>
|
||||
<div v-if="Array.isArray(tmp[layer].midsection)">
|
||||
<column :layer="layer" :data="tmp[layer].midsection" :key="this.$vnode.key + '-mid'"></column>
|
||||
</div>
|
||||
<clickables v-bind:style="tmp[layer].componentStyles['clickables']" :layer="layer"></clickables>
|
||||
<buyables v-bind:style="tmp[layer].componentStyles.buyables" :layer="layer"></buyables>
|
||||
<upgrades v-bind:style="tmp[layer].componentStyles['upgrades']" :layer="layer"></upgrades>
|
||||
<challenges v-bind:style="tmp[layer].componentStyles['challenges']" :layer="layer"></challenges>
|
||||
<achievements v-bind:style="tmp[layer].componentStyles.achievements" :layer="layer"></achievements>
|
||||
<br><br>
|
||||
</div>
|
||||
<div v-if="tmp[layer].tabFormat">
|
||||
<div v-if="Array.isArray(tmp[layer].tabFormat)">
|
||||
<div v-if="spacing" v-bind:style="{'height': spacing}"></div>
|
||||
<column :layer="layer" :data="tmp[layer].tabFormat" :key="this.$vnode.key + '-col'"></column>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="upgTable"
|
||||
v-bind:style="{'padding-top': (embedded ? '0' : '25px'), 'margin-top': (embedded ? '-10px' : '0'), 'margin-bottom': '24px'}">
|
||||
<tab-buttons v-bind:style="tmp[layer].componentStyles['tab-buttons']" :layer="layer"
|
||||
:data="tmp[layer].tabFormat" :name="'mainTabs'"></tab-buttons>
|
||||
</div>
|
||||
<layer-tab v-if="tmp[layer].tabFormat[player.subtabs[layer].mainTabs].embedLayer"
|
||||
:layer="tmp[layer].tabFormat[player.subtabs[layer].mainTabs].embedLayer" :embedded="true"
|
||||
:key="this.$vnode.key + '-' + layer"></layer-tab>
|
||||
<column v-else :layer="layer" :data="tmp[layer].tabFormat[player.subtabs[layer].mainTabs].content"
|
||||
:key="this.$vnode.key + '-col'"></column>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
},
|
||||
|
||||
"overlay-head": {
|
||||
|
|
|
@ -1,22 +1,23 @@
|
|||
var tmp = {}
|
||||
var temp = tmp // Proxy for tmp
|
||||
var funcs = {}
|
||||
var NaNalert = false;
|
||||
let tmp = {};
|
||||
let temp = tmp; // Proxy for tmp
|
||||
let funcs = {};
|
||||
// noinspection SpellCheckingInspection
|
||||
let NaNalert = false;
|
||||
|
||||
// Tmp will not call these
|
||||
var activeFunctions = [
|
||||
const activeFunctions = [
|
||||
"startData", "onPrestige", "doReset", "update", "automate",
|
||||
"buy", "buyMax", "respec", "onComplete", "onPurchase", "onPress", "onClick", "masterButtonPress",
|
||||
"sellOne", "sellAll", "pay",
|
||||
]
|
||||
];
|
||||
|
||||
var noCall = doNotCallTheseFunctionsEveryTick
|
||||
for (item in noCall) {
|
||||
const noCall = doNotCallTheseFunctionsEveryTick;
|
||||
for (let item in noCall) {
|
||||
activeFunctions.push(noCall[item])
|
||||
}
|
||||
|
||||
// Add the names of classes to traverse
|
||||
var traversableClasses = []
|
||||
const traversableClasses = [];
|
||||
|
||||
function setupTemp() {
|
||||
tmp = {}
|
||||
|
@ -26,7 +27,7 @@ function setupTemp() {
|
|||
funcs = {}
|
||||
|
||||
setupTempData(layers, tmp, funcs)
|
||||
for (layer in layers){
|
||||
for (let layer in layers){
|
||||
tmp[layer].resetGain = {}
|
||||
tmp[layer].nextAt = {}
|
||||
tmp[layer].nextAtDisp = {}
|
||||
|
@ -41,7 +42,7 @@ function setupTemp() {
|
|||
}
|
||||
|
||||
function setupTempData(layerData, tmpData, funcsData) {
|
||||
for (item in layerData){
|
||||
for (let item in layerData){
|
||||
if (layerData[item] == null) {
|
||||
tmpData[item] = null
|
||||
}
|
||||
|
@ -61,11 +62,13 @@ function setupTempData(layerData, tmpData, funcsData) {
|
|||
tmpData[item] = new layerData[item].constructor()
|
||||
funcsData[item] = new layerData[item].constructor()
|
||||
}
|
||||
else if (isFunction(layerData[item]) && !activeFunctions.includes(item)){
|
||||
funcsData[item] = layerData[item]
|
||||
tmpData[item] = new Decimal(1) // The safest thing to put probably?
|
||||
} else {
|
||||
tmpData[item] = layerData[item]
|
||||
else { // noinspection JSUnfilteredForInLoop
|
||||
if (isFunction(layerData[item]) && !activeFunctions.includes(item)){
|
||||
funcsData[item] = layerData[item]
|
||||
tmpData[item] = new Decimal(1) // The safest thing to put probably?
|
||||
} else {
|
||||
tmpData[item] = layerData[item]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -76,7 +79,7 @@ function updateTemp() {
|
|||
|
||||
updateTempData(layers, tmp, funcs)
|
||||
|
||||
for (layer in layers){
|
||||
for (let layer in layers){
|
||||
tmp[layer].resetGain = getResetGain(layer)
|
||||
tmp[layer].nextAt = getNextAt(layer)
|
||||
tmp[layer].nextAtDisp = getNextAt(layer, true)
|
||||
|
@ -93,7 +96,7 @@ function updateTemp() {
|
|||
|
||||
tmp.pointGen = getPointGen()
|
||||
tmp.displayThings = []
|
||||
for (thing in displayThings){
|
||||
for (let thing in displayThings){
|
||||
let text = displayThings[thing]
|
||||
if (isFunction(text)) text = text()
|
||||
tmp.displayThings.push(text)
|
||||
|
@ -103,7 +106,7 @@ function updateTemp() {
|
|||
|
||||
function updateTempData(layerData, tmpData, funcsData) {
|
||||
|
||||
for (item in funcsData){
|
||||
for (let item in funcsData){
|
||||
if (Array.isArray(layerData[item])) {
|
||||
updateTempData(layerData[item], tmpData[item], funcsData[item])
|
||||
}
|
||||
|
@ -137,13 +140,13 @@ function updateChallengeTemp(layer)
|
|||
}
|
||||
|
||||
function updateChallengeDisplay(layer) {
|
||||
for (id in player[layer].challenges) {
|
||||
for (let id in player[layer].challenges) {
|
||||
let style = "locked"
|
||||
if (player[layer].activeChallenge == id && canCompleteChallenge(layer, id)) style = "canComplete"
|
||||
if (player[layer].activeChallenge === id && canCompleteChallenge(layer, id)) style = "canComplete"
|
||||
else if (hasChallenge(layer, id)) style = "done"
|
||||
tmp[layer].challenges[id].defaultStyle = style
|
||||
|
||||
tmp[layer].challenges[id].buttonText = (player[layer].activeChallenge==(id)?(canCompleteChallenge(layer, id)?"Finish":"Exit Early"):(hasChallenge(layer, id)?"Completed":"Start"))
|
||||
tmp[layer].challenges[id].buttonText = (player[layer].activeChallenge===(id)?(canCompleteChallenge(layer, id)?"Finish":"Exit Early"):(hasChallenge(layer, id)?"Completed":"Start"))
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -172,8 +175,8 @@ function constructNodeStyle(layer){
|
|||
|
||||
|
||||
function constructAchievementStyles(layer){
|
||||
for (id in tmp[layer].achievements) {
|
||||
ach = tmp[layer].achievements[id]
|
||||
for (let id in tmp[layer].achievements) {
|
||||
let ach = tmp[layer].achievements[id]
|
||||
if (isPlainObject(ach)) {
|
||||
let style = []
|
||||
if (ach.image){
|
||||
|
@ -189,7 +192,7 @@ function constructAchievementStyles(layer){
|
|||
function constructBarStyles(layer){
|
||||
if (layers[layer].bars === undefined)
|
||||
return
|
||||
for (id in layers[layer].bars){
|
||||
for (let id in layers[layer].bars){
|
||||
if (id !== "layer") {
|
||||
let bar = tmp[layer].bars[id]
|
||||
if (bar.progress instanceof Decimal)
|
||||
|
@ -202,16 +205,16 @@ function constructBarStyles(layer){
|
|||
if (dir !== undefined)
|
||||
{
|
||||
bar.fillDims['clip-path'] = 'inset(0% 50% 0% 0%)'
|
||||
if(dir == UP){
|
||||
if(dir === UP){
|
||||
bar.fillDims['clip-path'] = 'inset(' + bar.progress + '% 0% 0% 0%)'
|
||||
}
|
||||
else if(dir == DOWN){
|
||||
else if(dir === DOWN){
|
||||
bar.fillDims['clip-path'] = 'inset(0% 0% ' + bar.progress + '% 0%)'
|
||||
}
|
||||
else if(dir == RIGHT){
|
||||
else if(dir === RIGHT){
|
||||
bar.fillDims['clip-path'] = 'inset(0% ' + bar.progress + '% 0% 0%)'
|
||||
}
|
||||
else if(dir == LEFT){
|
||||
else if(dir === LEFT){
|
||||
bar.fillDims['clip-path'] = 'inset(0% 0% 0% ' + bar.progress + '%)'
|
||||
}
|
||||
|
||||
|
@ -224,7 +227,7 @@ function constructBarStyles(layer){
|
|||
function setupBarStyles(layer){
|
||||
if (layers[layer].bars === undefined)
|
||||
return
|
||||
for (id in layers[layer].bars){
|
||||
for (let id in layers[layer].bars){
|
||||
let bar = tmp[layer].bars[id]
|
||||
bar.dims = {}
|
||||
bar.fillDims = {}
|
||||
|
|
11
js/tree.js
11
js/tree.js
|
@ -1,4 +1,4 @@
|
|||
var layoutInfo = {
|
||||
const layoutInfo = {
|
||||
startTab: "none",
|
||||
showTree: true,
|
||||
treeLayout: ""
|
||||
|
@ -9,6 +9,7 @@ Vue.component("job", {
|
|||
template: `
|
||||
<span class="upgRow" v-bind:style="{ opacity: 0, animation: 'showJob .5s ' + layers[data].showJobDelay + 's forwards', marginBottom: '20px' }" v-if="tmp[data].layerShown">
|
||||
<tree-node :layer='data' :abb='tmp[data].symbol' style="background-size: cover; background-position: center;" v-bind:class="data === 'flowers' && player[data].xp.lte(1) && player[data].resetTime > 20 ? 'tutorial' : ''"></tree-node>
|
||||
<!--suppress HtmlUnknownTag -->
|
||||
<div class="job-details" v-bind:style="[player.tab === data ? { '--shadowColor': layers[data].color } : {}, player[data].timeLoopActive ? { '--innerShadowColor': layers[data].color } : {}, {'textAlign': 'left'}]">
|
||||
<h2>{{layers[data].jobName}}</h2>
|
||||
<span>Lv. {{formatWhole(getJobLevel(data))}}</span>
|
||||
|
@ -28,6 +29,14 @@ function getJobLevel(job) {
|
|||
return softcap(player[job].xp.clampMin(1).log10().floor().add(1), new Decimal(25)).floor();
|
||||
}
|
||||
|
||||
function checkJobXP(job) {
|
||||
let jobLevel = new Decimal(getJobLevel(job));
|
||||
if (jobLevel.neq(player[job].lastLevel)) {
|
||||
doPopup("none", `Level ${jobLevel}`, "Level Up!", 3, layers[job].color);
|
||||
player[job].lastLevel = jobLevel;
|
||||
}
|
||||
}
|
||||
|
||||
function getJobProgressBar(job) {
|
||||
return {
|
||||
direction: RIGHT,
|
||||
|
|
73
js/utils.js
73
js/utils.js
|
@ -155,7 +155,7 @@ function buyUpg(layer, id) {
|
|||
}
|
||||
}
|
||||
player[layer].upgrades.push(id);
|
||||
if (upg.onPurchase != undefined) {
|
||||
if (upg.onPurchase !== undefined) {
|
||||
run(upg.onPurchase, upg);
|
||||
}
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ function inChallenge(layer, id) {
|
|||
return false;
|
||||
}
|
||||
id = toNumber(id);
|
||||
if (challenge == id) {
|
||||
if (challenge === id) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -226,7 +226,8 @@ function inChallenge(layer, id) {
|
|||
|
||||
// ************ Misc ************
|
||||
|
||||
var onTreeTab = true;
|
||||
const onTreeTab = true;
|
||||
|
||||
function showTab(name) {
|
||||
if (LAYERS.includes(name) && !layerunlocked(name)) {
|
||||
return;
|
||||
|
@ -234,9 +235,9 @@ function showTab(name) {
|
|||
if (player.tab === name && isPlainObject(tmp[name].tabFormat)) {
|
||||
player.subtabs[name].mainTabs = Object.keys(layers[name].tabFormat)[0];
|
||||
}
|
||||
var toTreeTab = name == "none";
|
||||
|
||||
player.tab = name;
|
||||
if (player.navTab == "none" && (tmp[name].row !== "side") && (tmp[name].row !== "otherside")) {
|
||||
if (player.navTab === "none" && (tmp[name].row !== "side") && (tmp[name].row !== "otherside")) {
|
||||
player.lastSafeTab = name;
|
||||
}
|
||||
delete player.notify[name];
|
||||
|
@ -249,7 +250,7 @@ function showNavTab(name) {
|
|||
return;
|
||||
}
|
||||
|
||||
var toTreeTab = name == "tree";
|
||||
|
||||
player.navTab = name;
|
||||
player.notify[name] = false;
|
||||
needCanvasUpdate = true;
|
||||
|
@ -281,9 +282,9 @@ function prestigeNotify(layer) {
|
|||
return layers[layer].prestigeNotify();
|
||||
} else if (tmp[layer].autoPrestige || tmp[layer].passiveGeneration) {
|
||||
return false;
|
||||
} else if (tmp[layer].type == "static") {
|
||||
} else if (tmp[layer].type === "static") {
|
||||
return tmp[layer].canReset;
|
||||
} else if (tmp[layer].type == "normal") {
|
||||
} else if (tmp[layer].type === "normal") {
|
||||
return (tmp[layer].canReset && (tmp[layer].resetGain.gte(player[layer].points.div(10))));
|
||||
} else {
|
||||
return false;
|
||||
|
@ -291,15 +292,15 @@ function prestigeNotify(layer) {
|
|||
}
|
||||
|
||||
function notifyLayer(name) {
|
||||
if (player.tab == name || !layerunlocked(name)) {
|
||||
if (player.tab === name || !layerunlocked(name)) {
|
||||
return;
|
||||
}
|
||||
player.notify[name] = 1;
|
||||
}
|
||||
|
||||
function subtabShouldNotify(layer, family, id) {
|
||||
let subtab = {};
|
||||
if (family == "mainTabs") {
|
||||
let subtab;
|
||||
if (family === "mainTabs") {
|
||||
subtab = tmp[layer].tabFormat[id];
|
||||
} else {
|
||||
subtab = tmp[layer].microtabs[family][id];
|
||||
|
@ -313,8 +314,8 @@ function subtabShouldNotify(layer, family, id) {
|
|||
}
|
||||
|
||||
function subtabResetNotify(layer, family, id) {
|
||||
let subtab = {};
|
||||
if (family == "mainTabs") {
|
||||
let subtab;
|
||||
if (family === "mainTabs") {
|
||||
subtab = tmp[layer].tabFormat[id];
|
||||
} else {
|
||||
subtab = tmp[layer].microtabs[family][id];
|
||||
|
@ -327,19 +328,13 @@ function subtabResetNotify(layer, family, id) {
|
|||
}
|
||||
|
||||
function nodeShown(layer) {
|
||||
if (layerShown(layer)) {
|
||||
return true;
|
||||
}
|
||||
switch (layer) {
|
||||
case "idk":
|
||||
return player.idk.unlocked;
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
return layerShown(layer);
|
||||
|
||||
}
|
||||
|
||||
// noinspection SpellCheckingInspection
|
||||
function layerunlocked(layer) {
|
||||
if (tmp[layer] && tmp[layer].type == "none") {
|
||||
if (tmp[layer] && tmp[layer].type === "none") {
|
||||
return (player[layer].unlocked);
|
||||
}
|
||||
return LAYERS.includes(layer) && (player[layer].unlocked || (tmp[layer].canReset && tmp[layer].layerShown));
|
||||
|
@ -361,7 +356,7 @@ function toNumber(x) {
|
|||
}
|
||||
|
||||
function updateMilestones(layer) {
|
||||
for (id in layers[layer].milestones) {
|
||||
for (let id in layers[layer].milestones) {
|
||||
if (!(hasMilestone(layer, id)) && layers[layer].milestones[id].done()) {
|
||||
player[layer].milestones.push(id);
|
||||
if (isFunction(layers[layer].milestones[id].onComplete)) {
|
||||
|
@ -375,7 +370,7 @@ function updateMilestones(layer) {
|
|||
}
|
||||
|
||||
function updateAchievements(layer) {
|
||||
for (id in layers[layer].achievements) {
|
||||
for (let id in layers[layer].achievements) {
|
||||
if (isPlainObject(layers[layer].achievements[id]) && !(hasAchievement(layer, id)) && layers[layer].achievements[id].done()) {
|
||||
player[layer].achievements.push(id);
|
||||
if (layers[layer].achievements[id].onComplete) {
|
||||
|
@ -400,7 +395,7 @@ function addTime(diff, layer) {
|
|||
if (time + 0 !== time) {
|
||||
console.log("Memory leak detected. Trying to fix...");
|
||||
time = toNumber(time);
|
||||
if (isNaN(time) || time == 0) {
|
||||
if (isNaN(time) || time === 0) {
|
||||
console.log("Couldn't fix! Resetting...");
|
||||
time = layer ? player.timePlayed : 0;
|
||||
if (!layer) {
|
||||
|
@ -417,6 +412,7 @@ function addTime(diff, layer) {
|
|||
}
|
||||
}
|
||||
|
||||
let onFocused;
|
||||
document.onkeydown = function (e) {
|
||||
if (player === undefined) {
|
||||
return;
|
||||
|
@ -424,7 +420,7 @@ document.onkeydown = function (e) {
|
|||
if (gameEnded && !player.keepGoing) {
|
||||
return;
|
||||
}
|
||||
let shiftDown = e.shiftKey;
|
||||
|
||||
let ctrlDown = e.ctrlKey;
|
||||
let key = e.key;
|
||||
if (ctrlDown) {
|
||||
|
@ -443,7 +439,8 @@ document.onkeydown = function (e) {
|
|||
}
|
||||
};
|
||||
|
||||
var onFocused = false;
|
||||
onFocused = false;
|
||||
|
||||
function focused(x) {
|
||||
onFocused = x;
|
||||
}
|
||||
|
@ -451,12 +448,12 @@ function focused(x) {
|
|||
function prestigeButtonText(layer) {
|
||||
if (layers[layer].prestigeButtonText !== undefined) {
|
||||
return layers[layer].prestigeButtonText();
|
||||
} else if (tmp[layer].type == "normal") {
|
||||
} else if (tmp[layer].type === "normal") {
|
||||
return `${player[layer].points.lt(1e3) ? (tmp[layer].resetDescription !== undefined ? tmp[layer].resetDescription : "Reset for ") : ""}+<b>${formatWhole(tmp[layer].resetGain)}</b> ${tmp[layer].resource} ${tmp[layer].resetGain.lt(100) && player[layer].points.lt(1e3) ? `<br><br>Next at ${(tmp[layer].roundUpCost ? formatWhole(tmp[layer].nextAt) : format(tmp[layer].nextAt))} ${tmp[layer].baseResource}` : ""}`;
|
||||
} else if (tmp[layer].type == "static") {
|
||||
} else if (tmp[layer].type === "static") {
|
||||
return `${tmp[layer].resetDescription !== undefined ? tmp[layer].resetDescription : "Reset for "}+<b>${formatWhole(tmp[layer].resetGain)}</b> ${tmp[layer].resource}<br><br>${player[layer].points.lt(30) ? (tmp[layer].baseAmount.gte(tmp[layer].nextAt) && (tmp[layer].canBuyMax !== undefined) && tmp[layer].canBuyMax ? "Next:" : "Req:") : ""} ${formatWhole(tmp[layer].baseAmount)} / ${(tmp[layer].roundUpCost ? formatWhole(tmp[layer].nextAtDisp) : format(tmp[layer].nextAtDisp))} ${tmp[layer].baseResource}
|
||||
`;
|
||||
} else if (tmp[layer].type == "none") {
|
||||
} else if (tmp[layer].type === "none") {
|
||||
return "";
|
||||
} else {
|
||||
return "You need prestige button text";
|
||||
|
@ -476,11 +473,12 @@ document.title = modInfo.name;
|
|||
|
||||
|
||||
// Variables that must be defined to display popups
|
||||
var activePopups = [];
|
||||
var popupID = 0;
|
||||
const activePopups = [];
|
||||
let popupID = 0;
|
||||
|
||||
// Function to show popups
|
||||
function doPopup(type = "none", text = "This is a test popup.", title = "", timer = 3, color = "") {
|
||||
let popupTitle, popupType
|
||||
switch (type) {
|
||||
case "achievement":
|
||||
popupTitle = "Achievement Unlocked!";
|
||||
|
@ -495,20 +493,17 @@ function doPopup(type = "none", text = "This is a test popup.", title = "", time
|
|||
popupType = "default-popup";
|
||||
break;
|
||||
}
|
||||
if (title != "") {
|
||||
if (title !== "") {
|
||||
popupTitle = title;
|
||||
}
|
||||
popupMessage = text;
|
||||
popupTimer = timer;
|
||||
|
||||
activePopups.push({ "time": popupTimer, "type": popupType, "title": popupTitle, "message": (popupMessage + "\n"), "id": popupID, "color": color });
|
||||
activePopups.push({ "time": timer, "type": popupType, "title": popupTitle, "message": (text + "\n"), "id": popupID, "color": color });
|
||||
popupID++;
|
||||
}
|
||||
|
||||
|
||||
//Function to reduce time on active popups
|
||||
function adjustPopupTime(diff) {
|
||||
for (popup in activePopups) {
|
||||
for (let popup in activePopups) {
|
||||
activePopups[popup].time -= diff;
|
||||
if (activePopups[popup]["time"] < 0) {
|
||||
activePopups.splice(popup, 1); // Remove popup when time hits 0
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
function exponentialFormat(num, precision, mantissa = true) {
|
||||
let e = num.log10().floor();
|
||||
let m = num.div(Decimal.pow(10, e));
|
||||
if(m.toStringWithDecimalPlaces(precision) == 10) {
|
||||
if(m.toStringWithDecimalPlaces(precision) === 10) {
|
||||
m = new Decimal(1);
|
||||
e = e.add(1);
|
||||
}
|
||||
|
@ -23,9 +23,9 @@ function commaFormat(num, precision) {
|
|||
}
|
||||
if (precision === null || precision === undefined) {
|
||||
if (num.layer > 1) {
|
||||
firstPart = new Decimal(num);
|
||||
let firstPart = new Decimal(num);
|
||||
firstPart.mag = Math.floor(num.mag);
|
||||
secondPart = new Decimal(num);
|
||||
let secondPart = new Decimal(num);
|
||||
secondPart.layer = 0;
|
||||
secondPart.mag = num.mag - firstPart.mag;
|
||||
return firstPart.floor().toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") + secondPart.toStringWithDecimalPlaces(2).substr(1);
|
||||
|
@ -48,18 +48,6 @@ function regularFormat(num, precision) {
|
|||
return num.toStringWithDecimalPlaces(precision);
|
||||
}
|
||||
|
||||
function fixValue(x, y = 0) {
|
||||
return x || new Decimal(y);
|
||||
}
|
||||
|
||||
function sumValues(x) {
|
||||
x = Object.values(x);
|
||||
if (!x[0]) {
|
||||
return new Decimal(0);
|
||||
}
|
||||
return x.reduce((a, b) => Decimal.add(a, b));
|
||||
}
|
||||
|
||||
function format(decimal, precision=2,) {
|
||||
decimal = new Decimal(decimal);
|
||||
if (isNaN(decimal.sign)||isNaN(decimal.layer)||isNaN(decimal.mag)) {
|
||||
|
@ -69,11 +57,11 @@ function format(decimal, precision=2,) {
|
|||
if (decimal.sign<0) {
|
||||
return "-"+format(decimal.neg(), precision);
|
||||
}
|
||||
if (decimal.mag == Number.POSITIVE_INFINITY) {
|
||||
if (decimal.mag === Number.POSITIVE_INFINITY) {
|
||||
return "Infinity";
|
||||
}
|
||||
if (decimal.gte("eeee1000")) {
|
||||
var slog = decimal.slog();
|
||||
const slog = decimal.slog();
|
||||
if (slog.gte(1e6)) {
|
||||
return "F" + format(slog.floor());
|
||||
} else {
|
||||
|
@ -117,11 +105,3 @@ function formatTime(s) {
|
|||
}
|
||||
}
|
||||
|
||||
function toPlaces(x, precision, maxAccepted) {
|
||||
x = new Decimal(x);
|
||||
let result = x.toStringWithDecimalPlaces(precision);
|
||||
if (new Decimal(result).gte(maxAccepted)) {
|
||||
result = new Decimal(maxAccepted-Math.pow(0.1, precision)).toStringWithDecimalPlaces(precision);
|
||||
}
|
||||
return result;
|
||||
}
|
|
@ -1,15 +1,17 @@
|
|||
let styleCooldown = 0;
|
||||
|
||||
// ************ Options ************
|
||||
function toggleOpt(name) {
|
||||
if (name == "oldStyle" && styleCooldown > 0)
|
||||
if (name === "oldStyle" && styleCooldown > 0)
|
||||
return;
|
||||
|
||||
player[name] = !player[name];
|
||||
if (name == "hqTree")
|
||||
if (name === "hqTree")
|
||||
changeTreeQuality();
|
||||
if (name == "oldStyle")
|
||||
if (name === "oldStyle")
|
||||
updateStyle();
|
||||
}
|
||||
var styleCooldown = 0;
|
||||
|
||||
function updateStyle() {
|
||||
styleCooldown = 1;
|
||||
let css = document.getElementById("styleStuff");
|
||||
|
@ -17,7 +19,7 @@ function updateStyle() {
|
|||
needCanvasUpdate = true;
|
||||
}
|
||||
function changeTreeQuality() {
|
||||
var on = player.hqTree;
|
||||
const on = player.hqTree;
|
||||
document.body.style.setProperty('--hqProperty1', on ? "2px solid" : "4px solid");
|
||||
document.body.style.setProperty('--hqProperty2a', on ? "-4px -4px 4px rgba(0, 0, 0, 0.25) inset" : "-4px -4px 4px rgba(0, 0, 0, 0) inset");
|
||||
document.body.style.setProperty('--hqProperty2b', on ? "0px 0px 20px var(--background)" : "");
|
||||
|
@ -31,22 +33,18 @@ function adjustMSDisp() {
|
|||
player.msDisplay = displays[(displays.indexOf(player.msDisplay) + 1) % 4];
|
||||
}
|
||||
function milestoneShown(layer, id) {
|
||||
complete = player[layer].milestones.includes(id);
|
||||
auto = layers[layer].milestones[id].toggles;
|
||||
let complete = player[layer].milestones.includes(id);
|
||||
let auto = layers[layer].milestones[id].toggles;
|
||||
|
||||
switch (player.msDisplay) {
|
||||
case "always":
|
||||
return true;
|
||||
break;
|
||||
case "automation":
|
||||
return (auto) || !complete;
|
||||
break;
|
||||
case "incomplete":
|
||||
return !complete;
|
||||
break;
|
||||
case "never":
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -25,17 +25,17 @@ function startPlayerBase() {
|
|||
};
|
||||
}
|
||||
function getStartPlayer() {
|
||||
playerdata = startPlayerBase();
|
||||
let playerdata = startPlayerBase();
|
||||
|
||||
if (addedPlayerData) {
|
||||
extradata = addedPlayerData();
|
||||
for (thing in extradata) {
|
||||
let extradata = addedPlayerData();
|
||||
for (let thing in extradata) {
|
||||
playerdata[thing] = extradata[thing];
|
||||
}
|
||||
}
|
||||
|
||||
playerdata.infoboxes = {};
|
||||
for (layer in layers) {
|
||||
for (let layer in layers) {
|
||||
playerdata[layer] = getStartLayerData(layer);
|
||||
|
||||
if (layers[layer].tabFormat && !Array.isArray(layers[layer].tabFormat)) {
|
||||
|
@ -43,7 +43,7 @@ function getStartPlayer() {
|
|||
playerdata.subtabs[layer].mainTabs = Object.keys(layers[layer].tabFormat)[0];
|
||||
}
|
||||
if (layers[layer].microtabs) {
|
||||
if (playerdata.subtabs[layer] == undefined) {
|
||||
if (playerdata.subtabs[layer] === undefined) {
|
||||
playerdata.subtabs[layer] = {};
|
||||
}
|
||||
for (item in layers[layer].microtabs) {
|
||||
|
@ -51,7 +51,7 @@ function getStartPlayer() {
|
|||
}
|
||||
}
|
||||
if (layers[layer].infoboxes) {
|
||||
if (playerdata.infoboxes[layer] == undefined) {
|
||||
if (playerdata.infoboxes[layer] === undefined) {
|
||||
playerdata.infoboxes[layer] = {};
|
||||
}
|
||||
for (item in layers[layer].infoboxes) {
|
||||
|
@ -63,7 +63,7 @@ function getStartPlayer() {
|
|||
return playerdata;
|
||||
}
|
||||
function getStartLayerData(layer) {
|
||||
layerdata = {};
|
||||
let layerdata = {};
|
||||
if (layers[layer].startData) {
|
||||
layerdata = layers[layer].startData();
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ function getStartLayerData(layer) {
|
|||
}
|
||||
|
||||
layerdata.buyables = getStartBuyables(layer);
|
||||
if (layerdata.clickables == undefined) {
|
||||
if (layerdata.clickables === undefined) {
|
||||
layerdata.clickables = getStartClickables(layer);
|
||||
}
|
||||
layerdata.spentOnBuyables = new Decimal(0);
|
||||
|
@ -95,7 +95,7 @@ function getStartLayerData(layer) {
|
|||
function getStartBuyables(layer) {
|
||||
let data = {};
|
||||
if (layers[layer].buyables) {
|
||||
for (id in layers[layer].buyables) {
|
||||
for (let id in layers[layer].buyables) {
|
||||
if (isPlainObject(layers[layer].buyables[id])) {
|
||||
data[id] = new Decimal(0);
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ function getStartBuyables(layer) {
|
|||
function getStartClickables(layer) {
|
||||
let data = {};
|
||||
if (layers[layer].clickables) {
|
||||
for (id in layers[layer].clickables) {
|
||||
for (let id in layers[layer].clickables) {
|
||||
if (isPlainObject(layers[layer].clickables[id])) {
|
||||
data[id] = "";
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ function getStartClickables(layer) {
|
|||
function getStartChallenges(layer) {
|
||||
let data = {};
|
||||
if (layers[layer].challenges) {
|
||||
for (id in layers[layer].challenges) {
|
||||
for (let id in layers[layer].challenges) {
|
||||
if (isPlainObject(layers[layer].challenges[id])) {
|
||||
data[id] = 0;
|
||||
}
|
||||
|
@ -126,12 +126,12 @@ function getStartChallenges(layer) {
|
|||
return data;
|
||||
}
|
||||
function fixSave() {
|
||||
defaultData = getStartPlayer();
|
||||
let defaultData = getStartPlayer();
|
||||
fixData(defaultData, player);
|
||||
setBuyableAmount("distill", "retort", (getBuyableAmount("distill", "retort") || new Decimal(0)).max(5));
|
||||
player.sands.chipping = false;
|
||||
|
||||
for (layer in layers) {
|
||||
for (let layer in layers) {
|
||||
if (player[layer].best !== undefined) {
|
||||
player[layer].best = new Decimal(player[layer].best);
|
||||
}
|
||||
|
@ -146,7 +146,7 @@ function fixSave() {
|
|||
}
|
||||
}
|
||||
if (layers[layer].microtabs) {
|
||||
for (item in layers[layer].microtabs) {
|
||||
for (let item in layers[layer].microtabs) {
|
||||
if (!Object.keys(layers[layer].microtabs[item]).includes(player.subtabs[layer][item])) {
|
||||
player.subtabs[layer][item] = Object.keys(layers[layer].microtabs[item])[0];
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ function fixSave() {
|
|||
}
|
||||
}
|
||||
function fixData(defaultData, newData) {
|
||||
for (item in defaultData) {
|
||||
for (let item in defaultData) {
|
||||
if (defaultData[item] == null) {
|
||||
if (newData[item] === undefined) {
|
||||
newData[item] = null;
|
||||
|
@ -220,8 +220,9 @@ function setupModInfo() {
|
|||
function fixNaNs() {
|
||||
NaNcheck(player);
|
||||
}
|
||||
// noinspection SpellCheckingInspection
|
||||
function NaNcheck(data) {
|
||||
for (item in data) {
|
||||
for (let item in data) {
|
||||
if (data[item] == null) {
|
||||
} else if (Array.isArray(data[item])) {
|
||||
NaNcheck(data[item]);
|
||||
|
@ -256,8 +257,8 @@ function importSave(imported = undefined, forced = false) {
|
|||
imported = prompt("Paste your save here");
|
||||
}
|
||||
try {
|
||||
tempPlr = Object.assign(getStartPlayer(), JSON.parse(atob(imported)));
|
||||
if (tempPlr.versionType != modInfo.id && !forced && !confirm("This save appears to be for a different mod! Are you sure you want to import?")) // Wrong save (use "Forced" to force it to accept.)
|
||||
let tempPlr = Object.assign(getStartPlayer(), JSON.parse(atob(imported)));
|
||||
if (tempPlr.versionType !== modInfo.id && !forced && !confirm("This save appears to be for a different mod! Are you sure you want to import?")) // Wrong save (use "Forced" to force it to accept.)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -268,7 +269,7 @@ function importSave(imported = undefined, forced = false) {
|
|||
save();
|
||||
window.location.reload();
|
||||
} catch (e) {
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
function versionCheck() {
|
||||
|
@ -280,7 +281,7 @@ function versionCheck() {
|
|||
}
|
||||
|
||||
if (setVersion) {
|
||||
if (player.versionType == modInfo.id && VERSION.num > player.version) {
|
||||
if (player.versionType === modInfo.id && VERSION.num > player.version) {
|
||||
player.keepGoing = false;
|
||||
if (fixOldSave) {
|
||||
fixOldSave(player.version);
|
||||
|
@ -291,7 +292,9 @@ function versionCheck() {
|
|||
player.beta = VERSION.beta;
|
||||
}
|
||||
}
|
||||
var saveInterval = setInterval(function () {
|
||||
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
const saveInterval = setInterval(function () {
|
||||
if (player === undefined) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ const theme_names = {
|
|||
aqua: "Aqua"
|
||||
};
|
||||
function changeTheme() {
|
||||
let aqua = player.theme == "aqua";
|
||||
let aqua = player.theme === "aqua";
|
||||
colors_theme = colors[player.theme || "default"];
|
||||
document.body.style.setProperty("--background", backgroundColor);
|
||||
document.body.style.setProperty("--background_tooltip", aqua ? "rgba(0, 15, 31, 0.75)" : "rgba(0, 0, 0, 0.75)");
|
||||
|
@ -17,15 +17,3 @@ function changeTheme() {
|
|||
function getThemeName() {
|
||||
return player.theme ? theme_names[player.theme] : "Default";
|
||||
}
|
||||
function switchTheme() {
|
||||
if (player.theme === undefined) {
|
||||
player.theme = themes[1];
|
||||
} else {
|
||||
player.theme = themes[Object.keys(themes)[player.theme] + 1];
|
||||
if (!player.theme) {
|
||||
delete player.theme;
|
||||
}
|
||||
}
|
||||
changeTheme();
|
||||
resizeCanvas();
|
||||
}
|
||||
|
|
|
@ -828,7 +828,7 @@
|
|||
"/D/projects/The-Modding-Tree/index.html",
|
||||
"/D/projects/The-Modding-Tree/js/technical/systemComponents.js",
|
||||
"/D/projects/The-Modding-Tree/js/utils/themes.js",
|
||||
"/D/projects/The-Modding-Tree/js/utils/NumberFormating.js",
|
||||
"/D/projects/The-Modding-Tree/js/utils/NumberFormatting.js",
|
||||
"/D/projects/The-Modding-Tree/style.css",
|
||||
"/D/projects/The-Modding-Tree/js/components.js",
|
||||
"/D/projects/OptiSpeech 2/.git/COMMIT_EDITMSG",
|
||||
|
|
941
package-lock.json
generated
Normal file
941
package-lock.json
generated
Normal file
|
@ -0,0 +1,941 @@
|
|||
{
|
||||
"name": "kronos",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": {
|
||||
"version": "7.12.11",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
|
||||
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/highlight": "^7.10.4"
|
||||
}
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.12.11",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
|
||||
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
|
||||
"dev": true
|
||||
},
|
||||
"@babel/highlight": {
|
||||
"version": "7.13.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
|
||||
"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.12.11",
|
||||
"chalk": "^2.0.0",
|
||||
"js-tokens": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@eslint/eslintrc": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz",
|
||||
"integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.12.4",
|
||||
"debug": "^4.1.1",
|
||||
"espree": "^7.3.0",
|
||||
"globals": "^12.1.0",
|
||||
"ignore": "^4.0.6",
|
||||
"import-fresh": "^3.2.1",
|
||||
"js-yaml": "^3.13.1",
|
||||
"minimatch": "^3.0.4",
|
||||
"strip-json-comments": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"acorn": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||
"dev": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
|
||||
"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
|
||||
"dev": true
|
||||
},
|
||||
"ajv": {
|
||||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"json-schema-traverse": "^0.4.1",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
|
||||
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"argparse": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"sprintf-js": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"astral-regex": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
|
||||
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
|
||||
"dev": true
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||
"dev": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
|
||||
"dev": true
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
||||
"dev": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||
"dev": true
|
||||
},
|
||||
"cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"path-key": "^3.1.0",
|
||||
"shebang-command": "^2.0.0",
|
||||
"which": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
|
||||
"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"deep-is": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
||||
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
|
||||
"dev": true
|
||||
},
|
||||
"doctrine": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
|
||||
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esutils": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||
"dev": true
|
||||
},
|
||||
"enquirer": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
|
||||
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-colors": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||
"dev": true
|
||||
},
|
||||
"eslint": {
|
||||
"version": "7.21.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.21.0.tgz",
|
||||
"integrity": "sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "7.12.11",
|
||||
"@eslint/eslintrc": "^0.4.0",
|
||||
"ajv": "^6.10.0",
|
||||
"chalk": "^4.0.0",
|
||||
"cross-spawn": "^7.0.2",
|
||||
"debug": "^4.0.1",
|
||||
"doctrine": "^3.0.0",
|
||||
"enquirer": "^2.3.5",
|
||||
"eslint-scope": "^5.1.1",
|
||||
"eslint-utils": "^2.1.0",
|
||||
"eslint-visitor-keys": "^2.0.0",
|
||||
"espree": "^7.3.1",
|
||||
"esquery": "^1.4.0",
|
||||
"esutils": "^2.0.2",
|
||||
"file-entry-cache": "^6.0.1",
|
||||
"functional-red-black-tree": "^1.0.1",
|
||||
"glob-parent": "^5.0.0",
|
||||
"globals": "^12.1.0",
|
||||
"ignore": "^4.0.6",
|
||||
"import-fresh": "^3.0.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"is-glob": "^4.0.0",
|
||||
"js-yaml": "^3.13.1",
|
||||
"json-stable-stringify-without-jsonify": "^1.0.1",
|
||||
"levn": "^0.4.1",
|
||||
"lodash": "^4.17.20",
|
||||
"minimatch": "^3.0.4",
|
||||
"natural-compare": "^1.4.0",
|
||||
"optionator": "^0.9.1",
|
||||
"progress": "^2.0.0",
|
||||
"regexpp": "^3.1.0",
|
||||
"semver": "^7.2.1",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"strip-json-comments": "^3.1.0",
|
||||
"table": "^6.0.4",
|
||||
"text-table": "^0.2.0",
|
||||
"v8-compile-cache": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"eslint-scope": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esrecurse": "^4.3.0",
|
||||
"estraverse": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"eslint-utils": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
|
||||
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-visitor-keys": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
|
||||
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"eslint-visitor-keys": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
|
||||
"integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
|
||||
"dev": true
|
||||
},
|
||||
"espree": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
|
||||
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"acorn": "^7.4.0",
|
||||
"acorn-jsx": "^5.3.1",
|
||||
"eslint-visitor-keys": "^1.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-visitor-keys": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
|
||||
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"esprima": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
||||
"dev": true
|
||||
},
|
||||
"esquery": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
|
||||
"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^5.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"estraverse": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
|
||||
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"esrecurse": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"estraverse": "^5.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"estraverse": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
|
||||
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"estraverse": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
|
||||
"dev": true
|
||||
},
|
||||
"esutils": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
||||
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
|
||||
"dev": true
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
},
|
||||
"fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
|
||||
"dev": true
|
||||
},
|
||||
"fast-levenshtein": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
|
||||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
||||
"dev": true
|
||||
},
|
||||
"file-entry-cache": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
||||
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"flat-cache": "^3.0.4"
|
||||
}
|
||||
},
|
||||
"flat-cache": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
|
||||
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"flatted": "^3.1.0",
|
||||
"rimraf": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"flatted": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
|
||||
"integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
|
||||
"dev": true
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
||||
"dev": true
|
||||
},
|
||||
"functional-red-black-tree": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
|
||||
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
|
||||
"dev": true
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"globals": {
|
||||
"version": "12.4.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
|
||||
"integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-fest": "^0.8.1"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
||||
"dev": true
|
||||
},
|
||||
"ignore": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
|
||||
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
|
||||
"dev": true
|
||||
},
|
||||
"import-fresh": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"parent-module": "^1.0.0",
|
||||
"resolve-from": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"imurmurhash": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
|
||||
"dev": true
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||
"dev": true
|
||||
},
|
||||
"is-extglob": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
||||
"dev": true
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||
"dev": true
|
||||
},
|
||||
"is-glob": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
||||
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
||||
"dev": true
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||
"dev": true
|
||||
},
|
||||
"js-yaml": {
|
||||
"version": "3.14.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
||||
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"esprima": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
},
|
||||
"json-stable-stringify-without-jsonify": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
|
||||
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
|
||||
"dev": true
|
||||
},
|
||||
"levn": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
|
||||
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "~0.4.0"
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"dev": true
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"yallist": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||
"dev": true
|
||||
},
|
||||
"natural-compare": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
|
||||
"dev": true
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"optionator": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
|
||||
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deep-is": "^0.1.3",
|
||||
"fast-levenshtein": "^2.0.6",
|
||||
"levn": "^0.4.1",
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "^0.4.0",
|
||||
"word-wrap": "^1.2.3"
|
||||
}
|
||||
},
|
||||
"parent-module": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"callsites": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
||||
"dev": true
|
||||
},
|
||||
"path-key": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
||||
"dev": true
|
||||
},
|
||||
"prelude-ls": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
|
||||
"dev": true
|
||||
},
|
||||
"progress": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
|
||||
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
|
||||
"dev": true
|
||||
},
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
|
||||
"dev": true
|
||||
},
|
||||
"regexpp": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
|
||||
"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
|
||||
"dev": true
|
||||
},
|
||||
"require-from-string": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
|
||||
"dev": true
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
|
||||
"dev": true
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"glob": "^7.1.3"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.3.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
|
||||
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lru-cache": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"shebang-command": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"shebang-regex": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"shebang-regex": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
||||
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
||||
"dev": true
|
||||
},
|
||||
"slice-ansi": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
|
||||
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"astral-regex": "^2.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"sprintf-js": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
||||
"dev": true
|
||||
},
|
||||
"string-width": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
|
||||
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
||||
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
|
||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"version": "6.0.7",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
|
||||
"integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^7.0.2",
|
||||
"lodash": "^4.17.20",
|
||||
"slice-ansi": "^4.0.0",
|
||||
"string-width": "^4.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "7.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz",
|
||||
"integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"json-schema-traverse": "^1.0.0",
|
||||
"require-from-string": "^2.0.2",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
|
||||
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
||||
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
|
||||
"dev": true
|
||||
},
|
||||
"type-check": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"prelude-ls": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"type-fest": {
|
||||
"version": "0.8.1",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
|
||||
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
|
||||
"dev": true
|
||||
},
|
||||
"uri-js": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
||||
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
|
||||
"dev": true
|
||||
},
|
||||
"which": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"isexe": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"word-wrap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
||||
"dev": true
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||
"dev": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
.popup {
|
||||
border: 4px solid;
|
||||
border-radius: 7px;
|
||||
width: 300px;
|
||||
min-height: 60px;
|
||||
|
@ -8,7 +7,7 @@
|
|||
margin-top: 30px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
border-color: rgba(0, 0, 0, 0.25);
|
||||
border: 4px solid rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
|
||||
|
@ -19,26 +18,32 @@
|
|||
width: 300px;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.achievement-popup {
|
||||
background: #7182BC;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.milestone-popup {
|
||||
background: #D1C23C;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol,CssUnusedSymbol*/
|
||||
.fade-enter-active, .fade-leave-active {
|
||||
transition: opacity .3s
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.fade-transition {
|
||||
transition: opacity .3s
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol,CssUnusedSymbol*/
|
||||
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
|
||||
opacity: 0
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.redtext {
|
||||
color: red;
|
||||
}
|
||||
|
|
124
style.css
124
style.css
|
@ -54,6 +54,7 @@ td {
|
|||
vertical-align: 0
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.bigUpgAlign {
|
||||
vertical-align: 0
|
||||
}
|
||||
|
@ -63,7 +64,7 @@ h1, h2, h3, b, input {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnresolvedCustomProperty,CssUnresolvedCustomProperty,CssUnresolvedCustomProperty*/
|
||||
.treeNode {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
|
@ -78,6 +79,7 @@ h1, h2, h3, b, input {
|
|||
}
|
||||
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnresolvedCustomProperty,CssUnresolvedCustomProperty,CssUnresolvedCustomProperty,CssUnusedSymbol*/
|
||||
.treeButton {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
|
@ -93,6 +95,7 @@ h1, h2, h3, b, input {
|
|||
}
|
||||
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.smallNode {
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
|
@ -100,6 +103,7 @@ h1, h2, h3, b, input {
|
|||
}
|
||||
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.locked {
|
||||
background-color: #3a3e45;
|
||||
color: white;
|
||||
|
@ -116,17 +120,20 @@ h1, h2, h3, b, input {
|
|||
}
|
||||
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnusedSymbol*/
|
||||
.resetNotify {
|
||||
box-shadow: var(--hqProperty2a), 0 0 8px #ffffff;
|
||||
z-index: 3
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty*/
|
||||
.treeNode.can:hover {
|
||||
transform: scale(1.15, 1.15);
|
||||
box-shadow: var(--hqProperty2a), 0 0 20px var(--points);
|
||||
z-index: 4
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnusedSymbol*/
|
||||
.notify {
|
||||
transform: scale(1.05, 1.05);
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
|
@ -134,11 +141,13 @@ h1, h2, h3, b, input {
|
|||
z-index: 3
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.bought {
|
||||
background-color: #5C8A58;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.back {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
|
@ -167,11 +176,13 @@ h1, h2, h3, b, input {
|
|||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.back:hover {
|
||||
transform: scale(1.1, 1.1);
|
||||
text-shadow: 0 0 7px var(--color);
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.barBase {
|
||||
overflow: hidden;
|
||||
-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
|
||||
|
@ -193,7 +204,6 @@ h1, h2, h3, b, input {
|
|||
vertical-align: middle;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: left;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
@ -203,13 +213,14 @@ h1, h2, h3, b, input {
|
|||
position: absolute;
|
||||
overflow: hidden;
|
||||
margin-left: -0.5px;
|
||||
transition-property: : clip-path;
|
||||
transition-property: clip-path;
|
||||
}
|
||||
|
||||
.overlayText {
|
||||
z-index: 6;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.tabButton {
|
||||
background-color: transparent;
|
||||
color: var(--color);
|
||||
|
@ -219,10 +230,10 @@ h1, h2, h3, b, input {
|
|||
margin: 5px;
|
||||
border-radius: 10px;
|
||||
border: 2px solid;
|
||||
color: var(--color);
|
||||
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.tabButton:hover {
|
||||
transform: scale(1.1, 1.1);
|
||||
text-shadow: 0 0 7px var(--color);
|
||||
|
@ -232,30 +243,31 @@ h1, h2, h3, b, input {
|
|||
height: 120px;
|
||||
width: 180px;
|
||||
border-radius: 25%;
|
||||
border: 4px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 4px solid rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.upg {
|
||||
height: 150px;
|
||||
width: 150px;
|
||||
border-radius: 5px;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 2px solid rgba(0, 0, 0, 0.125);
|
||||
font-size: 10px;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.achievement {
|
||||
height: 90px;
|
||||
width: 90px;
|
||||
border-radius: 25%;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 2px solid rgba(0, 0, 0, 0.125);
|
||||
font-size: 10px;
|
||||
color: white;
|
||||
text-shadow: 0 0 2px #000000;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.achievement:hover {
|
||||
box-shadow: 0 0 10px var(--points);
|
||||
z-index: 7;
|
||||
|
@ -265,17 +277,16 @@ h1, h2, h3, b, input {
|
|||
height: 200px;
|
||||
width: 200px;
|
||||
border-radius: 5px;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 2px solid rgba(0, 0, 0, 0.125);
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.upgBig {
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
border-radius: 25%;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 2px solid rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
|
||||
.longUpg {
|
||||
|
@ -283,8 +294,7 @@ h1, h2, h3, b, input {
|
|||
width: 120px;
|
||||
background: var(--points);
|
||||
border-radius: 50%;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 2px solid rgba(0, 0, 0, 0.125);
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
|
@ -292,8 +302,7 @@ h1, h2, h3, b, input {
|
|||
height: 40px;
|
||||
width: 40px;
|
||||
border-radius: 5px;
|
||||
border: 2px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 2px solid rgba(0, 0, 0, 0.125);
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
|
@ -328,9 +337,8 @@ a {
|
|||
height: 100px;
|
||||
width: 100px;
|
||||
border-radius: 25%;
|
||||
border: 4px solid;
|
||||
background-color: var(--color);
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 4px solid rgba(0, 0, 0, 0.125);
|
||||
color: rgba(0, 0, 0, 0.5);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -351,6 +359,7 @@ a {
|
|||
z-index: -999;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.milestone {
|
||||
width: 100%;
|
||||
min-width: 120px;
|
||||
|
@ -358,12 +367,12 @@ a {
|
|||
padding-right: 5px;
|
||||
height: 75px;
|
||||
background-color: #3a3e45;
|
||||
border: 4px solid;
|
||||
border-radius: 4px;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 4px solid rgba(0, 0, 0, 0.125);
|
||||
color: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.milestoneDone {
|
||||
width: 100%;
|
||||
min-width: 120px;
|
||||
|
@ -372,9 +381,8 @@ a {
|
|||
|
||||
height: 75px;
|
||||
background-color: #5C8A58;
|
||||
border: 4px solid;
|
||||
border-radius: 4px;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 4px solid rgba(0, 0, 0, 0.125);
|
||||
color: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
|
@ -383,16 +391,19 @@ a {
|
|||
left: 0;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.remove {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.remove:hover {
|
||||
transform: scale(1.1, 1.1);
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.col {
|
||||
min-width: 49.5%;
|
||||
max-width: 49.5%;
|
||||
|
@ -412,10 +423,12 @@ a {
|
|||
transition-duration: 0s !important
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.fast {
|
||||
transition:color none
|
||||
transition:color 0s;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.col.right {
|
||||
top: 50px;
|
||||
right: 0;
|
||||
|
@ -424,11 +437,14 @@ a {
|
|||
|
||||
#app {
|
||||
column-count: 2;
|
||||
column-width: 50%;
|
||||
min-height: calc(100% - 50px);
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
#app {
|
||||
column-width: 50%;
|
||||
}
|
||||
|
||||
.vl {
|
||||
border-left: 6px solid var(--color);
|
||||
height: 100%;
|
||||
|
@ -451,10 +467,10 @@ ul {
|
|||
list-style-type: none;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.hChallenge {
|
||||
background-color: #bf8f8f;
|
||||
border: 4px solid;
|
||||
border-color: rgba(0, 0, 0, 0.125);
|
||||
border: 4px solid rgba(0, 0, 0, 0.125);
|
||||
color: rgba(0, 0, 0, 0.5);
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
|
@ -462,10 +478,12 @@ ul {
|
|||
border-radius: 33.33%;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.hChallenge.done {
|
||||
background-color: #77bf5f;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol,CssUnusedSymbol*/
|
||||
.hChallenge.canComplete {
|
||||
background-color: #ffbf00;
|
||||
}
|
||||
|
@ -496,6 +514,7 @@ ul {
|
|||
-webkit-transform:translate3d(0,0,0);
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty*/
|
||||
[tooltip]:before {
|
||||
position: absolute;
|
||||
bottom: 100%;
|
||||
|
@ -517,6 +536,7 @@ ul {
|
|||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty*/
|
||||
[tooltip]:after {
|
||||
position: absolute;
|
||||
bottom: 100%;
|
||||
|
@ -574,10 +594,12 @@ button > * {
|
|||
pointer-events:none;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.ghost {
|
||||
visibility: hidden
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnusedSymbol*/
|
||||
.story {
|
||||
width: 600px;
|
||||
max-width: 95%;
|
||||
|
@ -585,6 +607,7 @@ button > * {
|
|||
color: var(--lore-color);
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty*/
|
||||
.story-title {
|
||||
text-align: left;
|
||||
font-size: 24px;
|
||||
|
@ -607,9 +630,8 @@ button > * {
|
|||
|
||||
.story-text {
|
||||
padding: 8px;
|
||||
border: solid 4px;
|
||||
border-color: inherit;
|
||||
max-height: 100%;
|
||||
border: 4px solid;
|
||||
max-height: 100%;
|
||||
overflow-y: hidden;
|
||||
transition-duration: 0s;
|
||||
}
|
||||
|
@ -681,8 +703,8 @@ button > * {
|
|||
|
||||
#info:hover {
|
||||
transform: scale(1.2, 1.2);
|
||||
text-shadow: 5px 0px 10px #02f2f2,
|
||||
-3px 0px 12px #02f2f2;
|
||||
text-shadow: 5px 0 10px #02f2f2,
|
||||
-3px 0 12px #02f2f2;
|
||||
}
|
||||
|
||||
#discord {
|
||||
|
@ -699,8 +721,7 @@ button > * {
|
|||
#discord-links {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
padding: 30px;
|
||||
padding-top: 80px;
|
||||
padding: 80px 30px 30px;
|
||||
right: -280px;
|
||||
width: 200px;
|
||||
transition: right .25s ease;
|
||||
|
@ -722,10 +743,11 @@ button > * {
|
|||
|
||||
#version:hover {
|
||||
transform: scale(1.2, 1.2);
|
||||
text-shadow: 5px 0px 10px var(--points),
|
||||
-3px 0px 12px var(--points);
|
||||
text-shadow: 5px 0 10px var(--points),
|
||||
-3px 0 12px var(--points);
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.tutorial {
|
||||
animation: shockwave 2s infinite;
|
||||
}
|
||||
|
@ -760,6 +782,7 @@ button > * {
|
|||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.col.right {
|
||||
min-width: 100%;
|
||||
background: var(--background);
|
||||
|
@ -772,7 +795,7 @@ button > * {
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-evenly;
|
||||
box-shadow: black 4px 4px 8px 0px;
|
||||
box-shadow: black 4px 4px 8px 0;
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
margin: 10px auto;
|
||||
|
@ -803,12 +826,14 @@ button > * {
|
|||
max-height: 100%;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol,CssUnusedSymbol*/
|
||||
.selectedCard, .selectedCard:hover {
|
||||
transform: scale(1.2);
|
||||
box-shadow: black 0 0 16px 8px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.flipCard {
|
||||
animation: flip 1s;
|
||||
}
|
||||
|
@ -823,6 +848,7 @@ button > * {
|
|||
}
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.cursor {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -845,6 +871,7 @@ button > * {
|
|||
background: white;
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnresolvedCustomProperty*/
|
||||
.hourglass {
|
||||
--polygonH: polygon(0% 0%,100% 0%,100% 5.55%,95% 5.55%,95% 28%,60% 46%,60% 54%,95% 72%,95% 94.45%,100% 94.45%,100% 100%,0% 100%,0% 94.45%,5% 94.45%,5% 72%,40% 54%,40% 46%,5% 28%,5% 5.55%,0% 5.55%);
|
||||
animation-name: flipHourglass;
|
||||
|
@ -867,6 +894,8 @@ button > * {
|
|||
display: block;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnresolvedCustomProperty,CssUnresolvedCustomProperty*/
|
||||
.hourglass:before {
|
||||
--polygonB1: polygon(0% 0%,100% 0%,100% 24%,50% 47%,50% 47%,50% 47%,50% 47%,50% 47%,50% 47%,50% 47%,50% 47%,0% 24%);
|
||||
--polygonB2: polygon(0% 4%,100% 4%,100% 24%,55% 45%,55% 100%,55% 100%,55% 100%,45% 100%,45% 100%,45% 100%,45% 45%,0% 24%);
|
||||
|
@ -887,16 +916,14 @@ button > * {
|
|||
height: 8em;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty,CssUnresolvedCustomProperty*/
|
||||
.hourglass:after {
|
||||
animation-name: glare;
|
||||
animation-duration: var(--flip-duration);
|
||||
animation-delay: 0s;
|
||||
animation-play-state: var(--flip-state);
|
||||
background:
|
||||
linear-gradient(90deg,#0000 0.5em,#0003 0.5em 1.5em,#0000 1.5em 3.5em,#fff3 3.5em 4.5em,#fff0 4.5em 6.5em,#0003 6.5em 7.5em,#0000 7.5em) 0 0 / 100% 0.5em,
|
||||
linear-gradient(90deg,#0000 0.75em,#0003 0.75em 1.25em,#0000 1.25em 3.75em,#fff3 3.75em 4.25em,#fff0 4.25em 6.75em,#0003 6.75em 7.25em,#0000 7.25em) 0 0.5em / 100% 8em,
|
||||
linear-gradient(90deg,#0000 0.5em,#0003 0.5em 1.5em,#0000 1.5em 3.5em,#fff3 3.5em 4.5em,#fff0 4.5em 6.5em,#0003 6.5em 7.5em,#0000 7.5em) 0 100% / 100% 0.5em;
|
||||
background-repeat: repeat-x;
|
||||
background: linear-gradient(90deg, #0000 0.5em, #0003 0.5em 1.5em, #0000 1.5em 3.5em, #fff3 3.5em 4.5em, #fff0 4.5em 6.5em, #0003 6.5em 7.5em, #0000 7.5em) linear-gradient(90deg, #0000 0.75em, #0003 0.75em 1.25em, #0000 1.25em 3.75em, #fff3 3.75em 4.25em, #fff0 4.25em 6.75em, #0003 6.75em 7.25em, #0000 7.25em) linear-gradient(90deg, #0000 0.5em, #0003 0.5em 1.5em, #0000 1.5em 3.5em, #fff3 3.5em 4.5em, #fff0 4.5em 6.5em, #0003 6.5em 7.5em, #0000 7.5em) repeat-x 0 0 0 0.5em 0 100%;
|
||||
top: 0;
|
||||
left: -3em;
|
||||
width: 200%;
|
||||
|
@ -946,11 +973,14 @@ b, h3 {
|
|||
text-shadow: 0 0 black;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.gradient-border {
|
||||
--border-width: 4px;
|
||||
position: relative;
|
||||
background-clip: content-box;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.gradient-border::before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
|
@ -962,6 +992,8 @@ b, h3 {
|
|||
bottom: 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/*noinspection CssUnusedSymbol*/
|
||||
.gradient-border::after {
|
||||
position: absolute;
|
||||
content: "";
|
||||
|
@ -970,9 +1002,8 @@ b, h3 {
|
|||
z-index: -2;
|
||||
width: calc(100% + var(--border-width) * 2);
|
||||
height: calc(100% + var(--border-width) * 2);
|
||||
background: linear-gradient(60deg, rgba(14,0,255,1) 0%, rgba(4,194,118,1) 16%, rgba(9,9,121,1) 35%, rgba(6,139,170,1) 59%, rgba(113,3,216,1) 81%, rgba(0,212,255,1) 100%);
|
||||
background-size: 300% 300%;
|
||||
background-position: 0 50%;
|
||||
background: linear-gradient(60deg, rgba(14, 0, 255, 1) 0%, rgba(4, 194, 118, 1) 16%, rgba(9, 9, 121, 1) 35%, rgba(6, 139, 170, 1) 59%, rgba(113, 3, 216, 1) 81%, rgba(0, 212, 255, 1) 100%) 0 50%;
|
||||
border-radius: 5px;
|
||||
animation: moveGradient 8s alternate infinite;
|
||||
}
|
||||
|
@ -993,6 +1024,7 @@ b, h3 {
|
|||
flex-flow: column;
|
||||
}
|
||||
|
||||
/*noinspection CssUnresolvedCustomProperty*/
|
||||
.instrument::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
|
@ -1022,7 +1054,7 @@ b, h3 {
|
|||
width: 100px;
|
||||
border-bottom: solid 2px;
|
||||
border-radius: 20px;
|
||||
background: rgb(1, 1, 1, .25);
|
||||
background: rgba(1, 1, 1, .25);
|
||||
}
|
||||
|
||||
.battery path {
|
||||
|
|
Loading…
Add table
Reference in a new issue