Is this heck

This commit is contained in:
Andrei Andreev 2019-07-25 15:52:03 +03:00
parent 75b24f428d
commit 334d663ccd
82 changed files with 1100 additions and 1814 deletions

View File

@ -1,121 +1,62 @@
<!doctype html>
<html>
<html lang="en">
<head>
<title>Antimatter Dimensions</title>
<link rel="icon" type="image/png" href="icon.png">
<meta name="Antimatter Dimensions" content="A game about huge numbers and watching them go up." charset="utf-8"/>
<h1 id="hiddenheader" style="display: none">Antimatter Dimensions</h1>
<script type="text/javascript" src='https://cdn1.kongregate.com/javascripts/kongregate_api.js'></script>
<script type="text/javascript" src="javascripts/lib/jquery-3.2.1.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=PT+Mono" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/codemirror.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/show-hint.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/lint.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/panda-syntax.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/liquibyte.css">
<link rel="stylesheet" type="text/css" href="stylesheets/components.css">
<link rel="stylesheet" type="text/css" href="stylesheets/ad-slider-component.css">
<link rel="stylesheet" type="text/css" href="stylesheets/glyphs.css">
<link rel="stylesheet" type="text/css" href="stylesheets/styles.css?3">
<link rel="stylesheet" type="text/css" href="stylesheets/automator.css">
<link rel="stylesheet" type="text/css" href="stylesheets/time-studies.css">
<link rel="stylesheet" type="text/css" href="stylesheets/tooltips.css">
<link rel="stylesheet" type="text/css" href="stylesheets/vis.css">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
<title>Antimatter Dimensions</title>
<link rel="icon" type="image/png" href="icon.png">
<meta name="Antimatter Dimensions" content="A game about huge numbers and watching them go up." charset="utf-8"/>
<script type="text/javascript" src='https://cdn1.kongregate.com/javascripts/kongregate_api.js'></script>
<script type="text/javascript" src="javascripts/lib/jquery-3.2.1.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=PT+Mono" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/codemirror.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/show-hint.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/lint.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/panda-syntax.css">
<link rel="stylesheet" type="text/css" href="stylesheets/codemirror/liquibyte.css">
<link rel="stylesheet" type="text/css" href="stylesheets/components.css">
<link rel="stylesheet" type="text/css" href="stylesheets/ad-slider-component.css">
<link rel="stylesheet" type="text/css" href="stylesheets/glyphs.css">
<link rel="stylesheet" type="text/css" href="stylesheets/styles.css?3">
<link rel="stylesheet" type="text/css" href="stylesheets/automator.css">
<link rel="stylesheet" type="text/css" href="stylesheets/time-studies.css">
<link rel="stylesheet" type="text/css" href="stylesheets/tooltips.css">
<link rel="stylesheet" type="text/css" href="stylesheets/vis.css">
<script>
(function(i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function() {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-77268961-1', 'auto');
ga('send', 'pageview');
</script>
ga('create', 'UA-77268961-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<img id="loading" src="images/Loading.png">
<body>
<div id="ui" style="height: 100%; width: 100%;">
<link :disabled="!$viewModel.newUI" id="new-ui" rel="stylesheet" type="text/css" href="stylesheets/new-ui-styles.css">
<new-ui v-show="newUI"></new-ui>
<div v-show="!newUI" id="container" class="container" style="display:none; flex-direction: column; min-height: 100%; padding: 9px 15px; box-sizing: border-box;">
<div id='game' style="flex: 0 0 auto">
<div id='news'>.</div>
</div>
<game-header></game-header>
<div style="position:absolute; left: 0; right: 0; margin-left: auto; margin-right: auto; width: 360px; top: 19px">
<button id="bigcrunch" style="font-family: Typewriter; font-size: 50px; width: 360px; height: 100px;" class="tabbtn">Big Crunch</button>
</div>
<div>
<button id="dimensionsbtn" class="tabbtn">Dimensions</button>
<button id="optionsbtn" class="tabbtn">Options</button>
<button id="statisticsbtn" class="tabbtn">Statistics</button>
<button id="achievementsbtn" class="tabbtn">Achievements</button>
<button id="challengesbtn" class="tabbtn">Challenges</button>
<button id="infinitybtn" class="tabbtn infinitytabbtn">Infinity</button>
<button id="eternitystorebtn" class="tabbtn eternitytabbtn">Eternity</button>
<button id="realitybtn" class="tabbtn realitytabbtn">Reality</button>
<button id="celestialsbtn" class="tabbtn celestialtabbtn">Celestials</button>
<button id="shopbtn" class="tabbtn">Shop</button>
</div>
<div id="emptiness" class="tab" style="font-size: 150%; display: none">
<br> The world has collapsed on itself due to excess of antimatter.
<br>
<br>
</div>
<div id="shop" class="tab" style="font-size: 15px; display: none" >
<div align="center">
<br>
<span id="kongip"> Double your IP gain from all sources. Forever. </span><br>
<button class="greedbtn" onclick="kong.purchaseIP()">40 Kreds</button>
<br><br><br>
<span id="kongep"> Double your EP gain from all sources. Forever. </span><br>
<button class="greedbtn" onclick="kong.purchaseEP()">50 Kreds</button>
<br><br><br>
<span id="kongdim"> Double all your dimension multipliers (dimensions 1-8). Forever. </span><br>
<button class="greedbtn" onclick="kong.purchaseDimMult()">30 Kreds</button>
<br><br><br>
<span id="kongalldim"> Double ALL the dimension multipliers (Normal, Infinity and Time). Forever. </span><br>
<button class="greedbtn" onclick="kong.purchaseAllDimMult()">60 Kreds</button>
<br><br><br>
<span>Get 6 hours worth of offline production. (Doesn't work for autobuyers)</span><br>
<button class="greedbtn" onclick="kong.purchaseTimeSkip()">10 Kreds</button>
<br><br><br>
<span style="font-size: 12px"><b>Disclaimer: These are not required to progress in the game, they are just to help and support the developer.</b></span>
</div>
</div>
<game-tab v-show="view.tabs.current" style="flex: 1 0">
<component :is="view.tabs.current"></component>
</game-tab>
</div>
<modal-popup v-if="view.modal.current"></modal-popup>
<modal-glyph-selection v-if="view.modal.glyphSelection"></modal-glyph-selection>
<link v-if="view.theme !== 'Normal'" type="text/css" rel="stylesheet" :href="themeCss">
</div>
<div v-if="!newUI" id="notification-container" class="l-notification-container"></div>
</body>
<div id="background-animations">
<div class="videocontainer">
<video autoplay muted loop id="stars">
<source src="images/s6-bg.webm" type="video/webm">
</video>
</div>
<div id="snow" style="display: none; "></div>
</div>
<div class="videocontainer">
<video preload muted id="realityanimbg" style="opacity: 0; display: none; ">
<source src="images/realityanimbg.webm" type="video/webm">
</video>
</div>
<div id="performance-stats" class="c-performance-stats" style="display: none;"></div>
<body>
<img id="loading" src="images/Loading.png">
<div id="ui"></div>
<div id="background-animations">
<div class="videocontainer">
<video autoplay muted loop id="stars">
<source src="images/s6-bg.webm" type="video/webm">
</video>
</div>
<div id="snow" style="display: none; "></div>
</div>
<div class="videocontainer">
<video preload muted id="realityanimbg" style="opacity: 0; display: none; ">
<source src="images/realityanimbg.webm" type="video/webm">
</video>
</div>
<div id="performance-stats" class="c-performance-stats" style="display: none;"></div>
</body>
<script type="text/javascript" src="javascripts/lib/vue.js"></script>
<script type="text/javascript" src="javascripts/lib/v-tooltip.min.js"></script>
@ -201,6 +142,7 @@
<script type="text/javascript" src="javascripts/core/notations/empty.js"></script>
<script type="text/javascript" src="javascripts/core/notations/list.js"></script>
<script type="text/javascript" src="javascripts/core/secret-formula/tabs.js"></script>
<script type="text/javascript" src="javascripts/core/secret-formula/news.js"></script>
<script type="text/javascript" src="javascripts/core/secret-formula/achievements/normal-achievements.js"></script>
<script type="text/javascript" src="javascripts/core/secret-formula/achievements/secret-achievements.js"></script>
@ -223,33 +165,31 @@
<script type="text/javascript" src="javascripts/core/secret-formula/celestials/v.js"></script>
<script type="text/javascript" src="javascripts/core/secret-formula/celestials/alchemy.js"></script>
<script type="text/javascript" src="javascripts/components/primary-button.js"></script>
<script type="text/javascript" src="javascripts/components/secondary-tab-button.js"></script>
<script type="text/javascript" src="javascripts/components/description-display.js"></script>
<script type="text/javascript" src="javascripts/components/effect-display.js"></script>
<script type="text/javascript" src="javascripts/components/cost-display.js"></script>
<script type="text/javascript" src="javascripts/components/game-tab.js"></script>
<script type="text/javascript" src="javascripts/components/game-tab-with-subtabs.js"></script>
<script type="text/javascript" src="javascripts/components/hint-text.js"></script>
<script type="text/javascript" src="javascripts/components/footer-links.js"></script>
<script type="text/javascript" src="javascripts/components/common/primary-button.js"></script>
<script type="text/javascript" src="javascripts/components/common/description-display.js"></script>
<script type="text/javascript" src="javascripts/components/common/effect-display.js"></script>
<script type="text/javascript" src="javascripts/components/common/cost-display.js"></script>
<script type="text/javascript" src="javascripts/components/common/hint-text.js"></script>
<script type="text/javascript" src="javascripts/components/common/footer-links.js"></script>
<script type="text/javascript" src="javascripts/components/tt-shop.js"></script>
<script type="text/javascript" src="javascripts/components/automator-buttons.js"></script>
<script type="text/javascript" src="javascripts/components/plus-minus-button.js"></script>
<script type="text/javascript" src="javascripts/components/ad-slider-component.js"></script>
<script type="text/javascript" src="javascripts/components/expanding-control-box.js"></script>
<script type="text/javascript" src="javascripts/components/common/plus-minus-button.js"></script>
<script type="text/javascript" src="javascripts/components/common/ad-slider-component.js"></script>
<script type="text/javascript" src="javascripts/components/common/expanding-control-box.js"></script>
<script type="text/javascript" src="javascripts/components/hover-menu.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header-amounts-line.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header-tickspeed-row.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header-gamma-display.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header-big-crunch-button.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header-new-dim-button.js"></script>
<script type="text/javascript" src="javascripts/components/header/game-header-eternity-button.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header-amounts-line.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header-tickspeed-row.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header-gamma-display.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header-big-crunch-button.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header-new-dim-button.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/header/game-header-eternity-button.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/old-ui-tab-bar.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/old-ui-tab-button.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/old-ui-subtab-bar.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/old-ui-subtab-button.js"></script>
<script type="text/javascript" src="javascripts/components/old-ui/old-ui.js"></script>
<script type="text/javascript" src="javascripts/components/dimensions/dimensions-tab.js"></script>
<script type="text/javascript" src="javascripts/components/dimensions/normal/normal-dim-tab-header.js"></script>
<script type="text/javascript" src="javascripts/components/dimensions/normal/normal-dim-row.js"></script>
<script type="text/javascript" src="javascripts/components/dimensions/normal/normal-dim-shift-row.js"></script>
@ -267,7 +207,6 @@
<script type="text/javascript" src="javascripts/components/options/select-notation.js"></script>
<script type="text/javascript" src="javascripts/components/options/select-theme.js"></script>
<script type="text/javascript" src="javascripts/components/statistics/stats-tab.js"></script>
<script type="text/javascript" src="javascripts/components/statistics/statistics-tab.js"></script>
<script type="text/javascript" src="javascripts/components/statistics/challenges/challenge-records-list.js"></script>
<script type="text/javascript" src="javascripts/components/statistics/challenges/challenge-records-tab.js"></script>
@ -276,7 +215,6 @@
<script type="text/javascript" src="javascripts/components/statistics/runs/past-eternities-tab.js"></script>
<script type="text/javascript" src="javascripts/components/statistics/runs/past-realities-tab.js"></script>
<script type="text/javascript" src="javascripts/components/achievements/achievements-tab.js"></script>
<script type="text/javascript" src="javascripts/components/achievements/normal/normal-achievement.js"></script>
<script type="text/javascript" src="javascripts/components/achievements/normal/normal-achievement-row.js"></script>
<script type="text/javascript" src="javascripts/components/achievements/normal/normal-achievements-tab.js"></script>
@ -284,7 +222,6 @@
<script type="text/javascript" src="javascripts/components/achievements/secret/secret-achievements-tab.js"></script>
<script type="text/javascript" src="javascripts/components/achievements/secret/secret-achievement-row.js"></script>
<script type="text/javascript" src="javascripts/components/celestials/celestials-tab.js"></script>
<script type="text/javascript" src="javascripts/components/celestials/subtabs/teresa-tab.js"></script>
<script type="text/javascript" src="javascripts/components/celestials/subtabs/effarig/effarig-tab.js"></script>
<script type="text/javascript" src="javascripts/components/celestials/subtabs/effarig/effarig-unlock-button.js"></script>
@ -311,14 +248,13 @@
<script type="text/javascript" src="javascripts/core/celestials/ra/alchemy.js"></script>
<script type="text/javascript" src="javascripts/core/celestials/laitela.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/challenges-tab.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/challenge-box.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/challenge-grid.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/normal-challenges-tab.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/infinity-challenges-tab.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/eternity-challenges-tab.js"></script>
<script type="text/javascript" src="javascripts/components/infinity/infinity-tab.js"></script>
<script type="text/javascript" src="javascripts/components/infinity/infinity-points-header.js"></script>
<script type="text/javascript" src="javascripts/components/infinity/infinity-upgrade-button.js"></script>
<script type="text/javascript" src="javascripts/components/infinity/upgrades/infinity-upgrades-tab.js"></script>
<script type="text/javascript" src="javascripts/components/infinity/upgrades/ip-multiplier-button.js"></script>
@ -343,7 +279,6 @@
<script type="text/javascript" src="javascripts/components/infinity/replicanti/replicanti-gain-text.js"></script>
<script type="text/javascript" src="javascripts/components/infinity/replicanti/replicanti-galaxy-button.js"></script>
<script type="text/javascript" src="javascripts/components/eternity/eternity-tab.js"></script>
<script type="text/javascript" src="javascripts/components/eternity/time-studies/rem.js"></script>
<script type="text/javascript" src="javascripts/components/eternity/time-studies/time-study.js"></script>
<script type="text/javascript" src="javascripts/components/eternity/time-studies/secret-time-study.js"></script>
@ -362,7 +297,7 @@
<script type="text/javascript" src="javascripts/components/eternity/dilation/dilation-upgrade.js"></script>
<script type="text/javascript" src="javascripts/components/eternity/dilation/tachyon-particles.js"></script>
<script type="text/javascript" src="javascripts/components/reality/reality-tab.js"></script>
<script type="text/javascript" src="javascripts/components/reality/reality-machines-header.js"></script>
<script type="text/javascript" src="javascripts/components/reality/pp-label.js"></script>
<script type="text/javascript" src="javascripts/components/reality/perks-tab.js"></script>
<script type="text/javascript" src="javascripts/components/reality/upgrades/reality-upgrades-tab.js"></script>
@ -412,7 +347,7 @@
<script type="text/javascript" src="javascripts/components/new-ui/sidebar.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/tab-button.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/challenges-header.js"></script>
<script type="text/javascript" src="javascripts/components/challenges/challenges-header.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/dimensions-tab/new-dimensions-tab.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/dimensions-tab/new-dimension-row.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/dimensions-tab/new-tickspeed-row.js"></script>
@ -422,6 +357,10 @@
<script type="text/javascript" src="javascripts/components/new-ui/sidebar-resources/sidebar-ip.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/sidebar-resources/sidebar-ep.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/sidebar-resources/sidebar-rm.js"></script>
<script type="text/javascript" src="javascripts/components/new-ui/new-ui.js"></script>
<script type="text/javascript" src="javascripts/components/common/news-ticker.js"></script>
<script type="text/javascript" src="javascripts/components/game-ui.js"></script>
<script type="text/javascript" src="javascripts/core/automator/automator-codemirror.js"></script>
<script type="text/javascript" src="javascripts/core/automator/lexer.js"></script>
@ -430,12 +369,12 @@
<script type="text/javascript" src="javascripts/core/automator/compiler.js"></script>
<script type="text/javascript" src="javascripts/core/app/ui.init.js"></script>
<script type="text/javascript" src="javascripts/core/ui/tabs.js"></script>
<script type="text/javascript" src="javascripts/core/app/player-progress.js"></script>
<script type="text/javascript" src="javascripts/core/app/modal.js"></script>
<script type="text/javascript" src="javascripts/core/app/themes.js"></script>
<script type="text/javascript" src="javascripts/core/app/options.js"></script>
<script type="text/javascript" src="javascripts/core/app/ui.js"></script>
<script type="text/javascript" src="javascripts/core/app/tabs.js"></script>
<script type="text/javascript" src="javascripts/core/app/notify.js"></script>
<script type="text/javascript" src="javascripts/core/time.js"></script>
@ -461,7 +400,6 @@
<script type="text/javascript" src="javascripts/core/dilation.js"></script>
<script type="text/javascript" src="javascripts/core/black_hole.js"></script>
<script type="text/javascript" src="javascripts/core/devtools.js"></script>
<script type="text/javascript" src="javascripts/core/newsticker.js"></script>
<script type="text/javascript" src="javascripts/core/kong.js"></script>
<script type="text/javascript" src="javascripts/core/playfab.js"></script>
<script type="text/javascript" src="javascripts/game.js?85"></script>

View File

@ -1,25 +0,0 @@
"use strict";
Vue.component("achievements-tab", {
data() {
return {
tabs: [
{
name: "Achievements",
id: "Achievements",
component: "normal-achievements-tab"
},
{
name: "Secret Achievements",
id: "Secret Achievements",
component: "secret-achievements-tab"
}
]
};
},
template:
`<game-tab-with-subtabs
:tabs="tabs"
v-model="$viewModel.tabs.achievements.subtab"
/>`
});

View File

@ -1,125 +0,0 @@
"use strict";
Vue.component("automator-save-load-button", {
props: {
saveslot: Number
},
data() {
return {
msg: "Hold to save",
showTip: false,
};
},
computed: {
tooltip() {
return {
content: this.msg,
placement: "top",
show: this.showTip,
trigger: "manual"
};
},
listeners() {
return Object.assign({}, this.$listeners, {
touchstart: () => this.showTip = true,
mouseover: () => this.showTip = true,
mouseout: () => this.resetTip(),
touchend: () => this.resetTip(),
touchcancel: () => this.resetTip(),
touchmove: e => {
e.preventDefault();
const t = e.changedTouches[0];
if (this.$el !== document.elementFromPoint(t.pageX, t.pageY)) {
this.resetTip();
}
},
"longpress": () => {
automatorSaveButton(this.saveslot, true);
this.msg = "Saved";
},
"longpressclick": () => {
automatorSaveButton(this.saveslot, false);
}
});
}
},
template:
`<button class="realitytabbtn automator-save-load-btn" v-on="listeners"
v-tooltip="tooltip" v-long-press="{ delay: 1000 }">{{saveslot}}</button>`,
methods: {
resetTip() {
this.msg = "Hold to save";
this.showTip = false;
}
},
});
Vue.component("automator-shop-button", {
props: {
name: {
type: String,
required: true,
},
},
data() {
return {
purchased: false,
available: false,
};
},
computed: {
classObject() {
const classObject = {
"automatorinstructionbought": this.purchased,
"automatorinstruction": this.available,
"automatorinstructionlocked": !this.available
};
classObject[AutomatorInstructions.Instructions[this.name].type] = true;
return classObject;
},
// This assumes prices are constant
cost() {
return AutomatorInstructions.Instructions[this.name].price;
},
instructionID() {
return AutomatorInstructions.Instructions[this.name].id;
},
domID() {
return "automator" + AutomatorInstructions.Instructions[this.name].id;
},
displayName() {
return AutomatorInstructions.Instructions[this.name].displayName;
},
popoverTrigger() {
// If the html did not specify a tooltip, we set the trigger to
// manual so that it doesn't show up:
return this.$slots["tooltip-header"] ? "hover" : "manual";
},
},
methods: {
update() {
this.purchased = player.reality.automatorCommands.has(this.instructionID);
this.available = !this.purchased && canBuyAutomatorInstruction(this.instructionID);
},
buy() {
buyAutomatorInstruction(this.instructionID);
}
},
template:
`<v-popover :trigger="popoverTrigger" popover-inner-class="tooltip-inner automator-tooltip">
<button :class="classObject"
:id="domID"
@click="buy">
<div>{{displayName}}</div>
<div v-if="!this.purchased">Cost: {{cost}} RM</div>
</button>
<div slot="popover">
<div class="automator-tooltip-header">
<slot name="tooltip-header"></slot>
</div>
<div class="automator-tooltip-content"><div>
<slot name="tooltip-content"></slot>
</div></div>
</div>
</v-popover>`
});

View File

@ -1,98 +0,0 @@
"use strict";
Vue.component("celestials-tab", {
data() {
return {
effarigUnlocked: false,
enslavedUnlocked: false,
vUnlocked: false,
raUnlocked: false,
laitelaUnlocked: false,
pelleUnlocked: false,
tabs: [
{
name: "Teresa",
id: "Teresa",
component: "teresa-tab"
},
{
name: "Effarig",
id: "Effarig",
component: "effarig-tab",
condition: function() { return this.effarigUnlocked; }.bind(this)
},
{
name: "The Enslaved Ones",
id: "Enslaved",
component: "enslaved-tab",
condition: function() { return this.enslavedUnlocked; }.bind(this)
},
{
name: "V",
id: "V",
component: "v-tab",
condition: function() { return this.vUnlocked; }.bind(this)
},
{
name: "Ra",
id: "Ra",
component: "ra-tab",
condition: function() { return this.raUnlocked; }.bind(this)
},
{
name: "Glyph Alchemy",
id: "Alchemy",
component: "alchemy-tab",
condition: function() { return Ra.has(RA_UNLOCKS.GLYPH_ALCHEMY); }.bind(this)
},
{
name: "Lai'tela",
id: "Lai'tela",
component: "laitela-tab",
condition: function() { return this.laitelaUnlocked; }.bind(this)
},
{
name: "The Pelle",
id: "pelle",
component: "pelle-tab",
condition: function() { return this.pelleUnlocked; }.bind(this)
},
// Leave these for future references
/*{
name: "Infinity Dimensions",
id: "Infinity Dimensions",
component: "infinity-dim-tab",
condition: function() { return this.isIDTabUnlocked; }.bind(this)
},
{
name: "Time Dimensions",
id: "Time Dimensions",
component: "time-dim-tab",
condition: function() { return this.isTDTabUnlocked; }.bind(this)
},
{
name: "Production",
id: "Production",
component: "dim-production-tab",
condition: function() { return this.isProductionTabUnlocked; }.bind(this)
}*/
]
};
},
methods: {
update() {
this.effarigUnlocked = Teresa.has(TERESA_UNLOCKS.EFFARIG);
this.enslavedUnlocked = EffarigUnlock.eternity.isUnlocked;
this.vUnlocked = Achievement(151).isEnabled;
this.raUnlocked = V.has(V_UNLOCKS.RUN_UNLOCK_THRESHOLDS[1]);
this.laitelaUnlocked = Ra.has(RA_LAITELA_UNLOCK);
this.pelleUnlocked = Laitela.has(LAITELA_UNLOCKS.PELLE);
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.celestials.subtab"
:tabs="tabs"
class="c-dim-tab"
/>`
});

View File

@ -1,85 +0,0 @@
"use strict";
Vue.component('challenges-tab', {
data: function() {
return {
isICTabUnlocked: false,
isECTabUnlocked: false,
isInChallenge: false,
isShowAllVisible: false,
isAutoECVisible: false,
showAllChallenges: false,
autoEC: false,
remainingECTiers: 0,
untilNextEC: TimeSpan.zero,
untilAllEC: TimeSpan.zero,
tabs: [
{
name: "Challenges",
id: "Challenges",
component: "normal-challenges-tab"
},
{
name: "Infinity Challenges",
id: "Infinity Challenges",
component: "infinity-challenges-tab",
condition: function() { return this.isICTabUnlocked; }.bind(this)
},
{
name: "Eternity Challenges",
id: "Eternity Challenges",
component: "eternity-challenges-tab",
condition: function() { return this.isECTabUnlocked; }.bind(this)
}
]
};
},
watch: {
autoEC(newValue) {
player.reality.autoEC = newValue;
},
showAllChallenges(newValue) {
player.options.showAllChallenges = newValue;
}
},
methods: {
update() {
this.showAllChallenges = player.options.showAllChallenges;
const isECTabUnlocked = player.challenge.eternity.unlocked !== 0 ||
Object.keys(player.eternityChalls).length > 0 ||
player.reality.autoEC;
this.isECTabUnlocked = isECTabUnlocked;
const isICTabUnlocked = isECTabUnlocked ||
player.antimatter.gte(new Decimal("1e2000")) ||
player.postChallUnlocked > 0;
this.isICTabUnlocked = isICTabUnlocked;
this.isInChallenge = NormalChallenge.isRunning || InfinityChallenge.isRunning || EternityChallenge.isRunning;
this.isShowAllVisible = PlayerProgress.realityUnlocked && (isECTabUnlocked || isICTabUnlocked);
this.isAutoECVisible = Perk.autocompleteEC1.isBought;
this.autoEC = player.reality.autoEC;
const remainingCompletions = EternityChallenges.remainingCompletions;
this.remainingECTiers = remainingCompletions;
if (remainingCompletions !== 0) {
const autoECPeriod = EternityChallenges.autoComplete.interval;
const untilNextEC = Math.max(autoECPeriod - player.reality.lastAutoEC, 0);
this.untilNextEC.setFrom(untilNextEC);
this.untilAllEC.setFrom(untilNextEC + (autoECPeriod * (remainingCompletions - 1)));
}
},
exitChallenge() {
const current = NormalChallenge.current ||
InfinityChallenge.current ||
EternityChallenge.current;
if (current !== undefined) {
current.exit();
}
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.challenges.subtab"
:tabs="tabs"
class="l-challenges-tab"
>
</game-tab-with-subtabs>`
});

View File

@ -139,8 +139,8 @@ Vue.component("eternity-challenges-tab", {
}
},
template:
`<div class="l-eternity-challenge-tab">
<challenges-header/>
`<div class="l-challenges-tab">
<challenges-header/>
<div>Complete Eternity Challenges again for a bigger reward, maximum of 5 times.</div>
<div>(You have unlocked {{unlockedCount}} out of 12 Eternity Challenges)</div>
<challenge-grid :count="12" :isChallengeVisible="isChallengeVisible">

View File

@ -77,8 +77,8 @@ Vue.component("infinity-challenges-tab", {
}
},
template:
`<div class="l-infinity-challenge-tab">
<challenges-header/>
`<div class="l-challenges-tab">
<challenges-header/>
<div>{{nextAtDisplay}}</div>
<challenge-grid :count="8" :isChallengeVisible="isChallengeVisible">
<infinity-challenge-box slot-scope="slotProps" :challengeId="slotProps.challengeId" />

View File

@ -48,10 +48,10 @@ Vue.component("normal-challenges-tab", {
}
},
template:
`<div class="l-normal-challenge-tab">
`<div class="l-challenges-tab">
<challenges-header/>
<challenge-grid :count="12">
<normal-challenge-box slot-scope="slotProps" :challengeId="slotProps.challengeId" />
</challenge-grid>
</div>`
});
});

View File

@ -7,7 +7,7 @@ Vue.component("footer-links", {
};
},
created() {
this.on$(GameEvent.TAB_CHANGED, () => this.isVisible = !Tab.eternity.timeStudies.isOpen);
this.on$(GameEvent.TAB_CHANGED, () => this.isVisible = !Tab.eternity.studies.isOpen);
},
template:
`<div v-if="isVisible" class="o-footer">

View File

@ -0,0 +1,6 @@
"use strict";
Vue.component("hint-text", {
template:
`<div v-show="$viewModel.shiftDown" class="o-hint-text l-hint-text"><slot /></div>`
});

View File

@ -0,0 +1,80 @@
"use strict";
Vue.component("news-ticker", {
computed: {
isHidden() {
return this.$viewModel.newsHidden;
}
},
watch: {
isHidden() {
this.restart();
}
},
mounted() {
document.addEventListener("visibilitychange", () => this.restart.bind(this));
this.restart();
},
beforeDestroy() {
this.clearTimeouts();
},
methods: {
restart() {
// TODO: Proper delay before ui is initialized
if (!GameUI.initialized) {
setTimeout(this.restart.bind(this), 100);
return;
}
this.clearTimeouts();
if (document.hidden || this.isHidden) {
return;
}
this.prepareNextMessage();
},
clearTimeouts() {
clearTimeout(this.delayTimeout);
clearTimeout(this.scrollTimeout);
},
prepareNextMessage() {
const line = this.$refs.line;
const isUnlocked = news => news.condition === undefined || news.condition();
do {
this.currentNews = GameDatabase.news.randomElement();
} while (!isUnlocked(this.currentNews));
line.innerHTML = this.currentNews.text;
line.style["transition-duration"] = "0ms";
line.style.transform = "translateX(0)";
const DELAY = 1000;
this.delayTimeout = setTimeout(this.scrollMessage.bind(this), DELAY);
},
scrollMessage() {
const line = this.$refs.line;
// SCROLL_SPEED is in pixels per second
const SCROLL_SPEED = 100;
const scrollDuration = (this.$refs.ticker.clientWidth + line.clientWidth) / SCROLL_SPEED;
line.style["transition-duration"] = `${scrollDuration}s`;
line.style.transform = "translateX(-100%)";
player.news.add(this.currentNews.id);
if (player.news.size >= 50) Achievement(22).unlock();
this.scrollTimeout = setTimeout(this.prepareNextMessage.bind(this), scrollDuration * 1000);
},
onLineClick() {
if (this.currentNews.id === "a130") {
SecretAchievement(24).unlock();
}
}
},
template: `
<div ref="ticker" v-if="!isHidden" class="c-news-ticker">
<span ref="line" class="c-news-line c-news-ticker__line" @click="onLineClick" />
</div>
`
});

View File

@ -1,49 +0,0 @@
"use strict";
Vue.component("dimensions-tab", {
data() {
return {
isIDTabUnlocked: false,
isTDTabUnlocked: false,
isProductionTabUnlocked: false,
tabs: [
{
name: "Dimensions",
id: "Dimensions",
component: "normal-dim-tab"
},
{
name: "Infinity Dimensions",
id: "Infinity Dimensions",
component: "infinity-dim-tab",
condition: function() { return this.isIDTabUnlocked; }.bind(this)
},
{
name: "Time Dimensions",
id: "Time Dimensions",
component: "time-dim-tab",
condition: function() { return this.isTDTabUnlocked; }.bind(this)
},
{
name: "Production",
id: "Production",
component: "dim-production-tab",
condition: function() { return this.isProductionTabUnlocked; }.bind(this)
}
]
};
},
methods: {
update() {
this.isIDTabUnlocked = player.eternities > 0 || InfinityDimension(1).isUnlocked;
this.isTDTabUnlocked = player.eternities > 0;
this.isProductionTabUnlocked = player.eternities > 0 || player.infinities > 0;
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.dimensions.subtab"
:tabs="tabs"
class="c-dim-tab"
/>`
});

View File

@ -33,7 +33,7 @@ Vue.component("normal-dim-tab", {
}
},
template:
`<div class="l-normal-dim-tab">
`<div class="l-old-ui-normal-dim-tab">
<normal-dim-tab-header />
<span v-if="isChallengePowerVisible">{{challengePower}}</span>
<div class="l-normal-dim-tab__row-container l-normal-dim-row-container">
@ -51,6 +51,7 @@ Vue.component("normal-dim-tab", {
class="o-primary-btn--quick-reset"
@click="quickReset"
>Lose a reset, returning to the start of the reset</primary-button>
<div style="flex: 1 0" />
<normal-dim-tab-progress-bar class="l-normal-dim-tab__progress_bar" />
</div>`
});
});

View File

@ -1,42 +0,0 @@
"use strict";
Vue.component("eternity-tab", {
data() {
return {
isDilationUnlocked: false,
tabs: [
{
name: "Time studies",
id: "Time studies",
component: "time-studies-tab"
},
{
name: "Eternity upgrades",
id: "Eternity upgrades",
component: "eternity-upgrades-tab"
},
{
name: "Eternity milestones",
id: "Eternity milestones",
component: "eternity-milestones-tab"
},
{
name: "Time dilation",
id: "Time dilation",
component: "time-dilation-tab",
condition: function() { return this.isDilationUnlocked; }.bind(this)
}
]
};
},
methods: {
update() {
this.isDilationUnlocked = TimeStudy.dilation.isBought;
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.eternity.subtab"
:tabs="tabs"
/>`
});

View File

@ -1,52 +0,0 @@
"use strict";
Vue.component("game-tab-with-subtabs", {
props: {
tabs: Array,
value: {
type: String,
default: undefined
}
},
computed: {
visibleTabs() {
return this.tabs.filter(tab => this.isUnlocked(tab));
},
firstTab() {
return this.tabs[0];
},
openedTab() {
if (!this.value || this.value === "") {
return this.firstTab;
}
const tab = this.tabs.find(t => t.id === this.value);
if (!this.isUnlocked(tab)) {
return this.firstTab;
}
return tab;
}
},
methods: {
isUnlocked(tab) {
return tab !== undefined && (tab.condition === undefined || tab.condition());
},
handleTabClick(tab) {
this.emitInput(tab.id);
EventHub.dispatch(GameEvent.TAB_CHANGED);
}
},
template:
`<div class="l-game-tab-with-subtabs">
<slot name="before-subtabs"/>
<div v-if="visibleTabs.length > 1" class="l-game-tab-with-subtabs__tab-buttons-container">
<secondary-tab-button
v-for="tab in visibleTabs"
:key="tab.name"
class="l-game-tab-with-subtabs__tab-button"
@click="handleTabClick(tab)"
>{{ tab.name }}</secondary-tab-button>
</div>
<slot name="before-content"/>
<component :is="openedTab.component" />
</div>`
});

View File

@ -1,41 +0,0 @@
"use strict";
// So this one looks different. What we achieve here is basically
// <div class="l-game-tab">
// <div class="l-game-tab__inner">
// <slot class="l-game-tab__content"/>
// </div>
// <footer-links class="l-game-tab__footer"/>
// </div>
// The main idea is that l-game-tab__inner takes all available space, so l-game-tab__footer is always on bottom.
// But why render function? The problem is that one cannot pass classes straight to slots,
// and given that $slots.default is an array, we need to manually patch them with l-game-tab__content
Vue.component("game-tab", {
render(createElement) {
const renderResult = createElement(
"div", { class: { "l-game-tab": true } },
[
createElement(
"div", { class: { "l-game-tab__inner": true } },
this.$slots.default
),
createElement(
"footer-links", { class: { "l-game-tab__footer": true } }
)
]
);
if (!this.$slots.default) return renderResult;
for (const slot of this.$slots.default) {
let staticClass = "";
if (!slot.data) {
slot.data = {};
}
if (slot.data.staticClass) {
staticClass = slot.data.staticClass;
}
slot.data.staticClass = staticClass + " l-game-tab__content";
}
return renderResult;
}
});

View File

@ -0,0 +1,34 @@
"use strict";
Vue.component("game-ui", {
computed: {
view() {
return this.$viewModel;
},
uiLayout() {
return this.view.newUI ? "new-ui" : "old-ui";
},
page() {
const subtab = Tabs.current[this.$viewModel.subtab];
const config = subtab.config;
if (this.view.newUI && config.newUIComponent !== undefined) {
return config.newUIComponent;
}
return config.component;
},
themeCss() {
return `stylesheets/theme-${this.view.theme}.css`;
}
},
template: `
<div id="ui" class="c-game-ui">
<component :is="uiLayout">
<component :is="page" />
</component>
<modal-popup v-if="view.modal.current" />
<modal-glyph-selection v-if="view.modal.glyphSelection" />
<link v-if="view.theme !== 'Normal'" type="text/css" rel="stylesheet" :href="themeCss">
<div id="notification-container" class="l-notification-container" />
</div>
`
});

View File

@ -1,11 +0,0 @@
"use strict";
Vue.component("hint-text", {
computed: {
isVisible() {
return ui.view.shiftDown;
}
},
template:
`<div v-show="isVisible" class="o-hint-text l-hint-text"><slot /></div>`
});

View File

@ -0,0 +1,21 @@
"use strict";
Vue.component("infinity-points-header", {
data() {
return {
infinityPoints: new Decimal(0)
};
},
methods: {
update() {
this.infinityPoints.copyFrom(player.infinityPoints);
}
},
template: `
<div class="c-infinity-tab__header">
You have
<span class="c-infinity-tab__infinity-points">{{shortenDimensions(infinityPoints)}}</span>
{{ "Infinity Point" | pluralize(infinityPoints) }}.
</div>
`
});

View File

@ -1,56 +0,0 @@
"use strict";
Vue.component("infinity-tab", {
data() {
return {
infinityPoints: new Decimal(0),
tabs: [
{
name: "Upgrades",
id: "Upgrades",
component: "infinity-upgrades-tab"
},
{
name: "Autobuyers",
id: "Autobuyers",
component: "autobuyers-tab"
},
{
name: "Break Infinity",
id: "Break Infinity",
component: "break-infinity-tab"
},
{
name: "Replicanti",
id: "Replicanti",
component: "replicanti-tab"
}
]
};
},
computed: {
ipNoun() {
return this.infinityPoints.equals(1) ? "Infinity Point" : "Infinity Points";
}
},
methods: {
update() {
this.infinityPoints.copyFrom(player.infinityPoints);
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.infinity.subtab"
:tabs="tabs"
class="l-infinity-tab"
>
<div
slot="before-subtabs"
class="c-infinity-tab__header"
>
You have
<span class="c-infinity-tab__infinity-points">{{shortenDimensions(infinityPoints)}}</span>
{{ipNoun}}.
</div>
</game-tab-with-subtabs>`
});

View File

@ -4,29 +4,27 @@ Vue.component("new-ui", {
data() {
return {
view: ui.view,
showCrunch: false,
showTicker: true
}
showCrunch: false
};
},
methods: {
update() {
this.showCrunch = !player.break && player.antimatter.gte(Number.MAX_VALUE);
this.showTicker = !player.options.newsHidden;
}
},
template:
`<div id="page">
<sidebar></sidebar>
<link rel="stylesheet" type="text/css" href="stylesheets/new-ui-styles.css">
<sidebar />
<div class="game-container">
<div class="quote" v-show="showTicker"><div id="newNews">.</div></div>
<news-ticker />
<div class="tab-container">
<component :is="$viewModel.page" v-if="!showCrunch"></component>
<div v-else>
<div v-if="showCrunch">
<h3>The world has collapsed due to excess antimatter.</h3>
<button class="btn-big-crunch" onclick="bigCrunchResetRequest()">Big Crunch</button>
</div>
<slot v-else />
</div>
</div>
<div v-if="view.newUI" id="notification-container" class="l-notification-container"></div>
</div>`
})
});

View File

@ -1,264 +1,5 @@
"use strict";
const MAIN_TAB_BUTTONS = [
{
id: "dimensions",
label: "Dimensions",
class: "",
component: "new-dimensions-tab",
condition: () => true,
subtabs: [
{
label: "Ω",
component: player.options.newUI ? "new-dimensions-tab" : "normal-dim-tab",
condition: () => true
},
{
label: "∞",
component: "infinity-dim-tab",
condition: () => player.eternities > 0 || InfinityDimension(1).isUnlocked,
},
{
label: "Δ",
component: "time-dim-tab",
condition: () => player.eternities > 0
}
]
},
{
id: "challenges",
label: "Challenges",
class: "",
component: "normal-challenges-tab",
condition: () => player.infinitied.gt(0),
subtabs: [
{
label: "Ω",
component: "normal-challenges-tab",
condition: () => player.infinitied.gt(0)
},
{
label: "∞",
component: "infinity-challenges-tab",
condition: () => (player.challenge.eternity.unlocked !== 0 ||
Object.keys(player.eternityChalls).length > 0) ||
player.antimatter.gte(new Decimal("1e2000")) ||
player.postChallUnlocked > 0,
},
{
label: "Δ",
component: "eternity-challenges-tab",
condition: () => player.challenge.eternity.unlocked !== 0 ||
Object.keys(player.eternityChalls).length > 0
}
]
},
{
id: "infinity",
label: "Infinity",
class: "infinity",
component: "infinity-upgrades-tab",
condition: () => player.infinitied.gt(0),
subtabs: [
{
label: "U",
component: "infinity-upgrades-tab",
condition: () => player.infinitied.gt(0)
},
{
label: "A",
component: "autobuyers-tab",
condition: () => player.infinitied.gt(0)
},
{
label: "B",
component: "break-infinity-tab",
condition: () => player.infinitied.gt(0)
},
{
label: "Ξ",
component: "replicanti-tab",
condition: () => player.infinitied.gt(0)
}
]
},
{
id: "eternity",
label: "Eternity",
class: "eternity",
component: "eternity-upgrades-tab",
condition: () => player.eternities > 0,
subtabs: [
{
label: "TS",
component: "time-studies-tab",
condition: () => player.eternities > 0
},
{
label: "U",
component: "eternity-upgrades-tab",
condition: () => player.eternities > 0
},
{
label: "M",
component: "eternity-milestones-tab",
condition: () => player.eternities > 0
},
{
label: "TD",
component: "time-dilation-tab",
condition: () => TimeStudy.dilation.isBought
}
]
},
{
id: "reality",
label: "Reality",
class: "reality",
component: "reality-upgrades-tab",
condition: () => player.realities > 0,
subtabs: [
{
label: "G",
component: "glyphs-tab",
condition: () => true
},
{
label: "U",
component: "reality-upgrades-tab",
condition: () => true
},
{
label: "P",
component: "perks-tab",
condition: () => true
},
{
label: "A",
component: "automator-tab",
condition: () => true
},
{
label: "BH",
component: "black-hole-tab",
condition: () => true
}
]
},
{
id: "celestials",
label: "Celestials",
class: "celestials",
component: "teresa-tab",
// Because RealityUpgrades is defined later
condition: () => RealityUpgrades && RealityUpgrades.allBought,
subtabs: [
{
label: "T",
component: "teresa-tab",
condition: () => true
},
{
label: "E",
component: "effarig-tab",
condition: () => Teresa.has(TERESA_UNLOCKS.EFFARIG)
},
{
label: "EO",
component: "enslaved-tab",
condition: () => EffarigUnlock.eternity.isUnlocked
},
{
label: "V",
component: "v-tab",
condition: () => Achievement(151).isEnabled
},
{
label: "R",
component: "ra-tab",
condition: () => V.has(V_UNLOCKS.RUN_UNLOCK_THRESHOLDS[1])
},
{
label: "L",
component: "laitela-tab",
condition: () => Ra.has(RA_LAITELA_UNLOCK)
},
{
label: "P",
component: "pelle-tab",
condition: () => Laitela.has(LAITELA_UNLOCKS.PELLE)
}
]
},
{
id: "achievements",
label: "Achievements",
class: "",
component: "normal-achievements-tab",
condition: () => Achievements.effectiveCount > 0,
subtabs: [
{
label: "A",
component: "normal-achievements-tab",
condition: () => true
},
{
label: "SA",
component: "secret-achievements-tab",
condition: () => true
}
]
},
{
id: "statistics",
label: "Statistics",
class: "",
component: "statistics-tab",
condition: () => Achievements.effectiveCount > 1,
subtabs: [
{
label: "S",
component: "statistics-tab",
condition: () => true
},
{
label: "C",
component: "challenge-records-tab",
condition: () => player.infinitied.gt(0)
},
{
label: "∞",
component: "past-infinities-tab",
condition: () => player.infinitied.gt(0),
},
{
label: "Δ",
component: "past-eternities-tab",
condition: () => player.eternities > 0
},
{
label: "R",
component: "past-realities-tab",
condition: () => player.realities > 0
}
]
},
{
id: "options",
label: "Options",
class: "",
component: "options-tab",
condition: () => true,
},
{
id: "shop",
label: "Shop",
class: "shop",
component: "achievements-tab",
condition: () => true,
}
];
Vue.component("sidebar", {
data() {
return {
@ -275,19 +16,28 @@ Vue.component("sidebar", {
}
},
computed: {
tabs() {
return MAIN_TAB_BUTTONS;
}
tabs: () => [
Tab.dimensions,
Tab.challenges,
Tab.infinity,
Tab.eternity,
Tab.reality,
Tab.celestials,
Tab.achievements,
Tab.statistics,
Tab.options
]
},
template:
`<div class="sidebar">
<sidebar-am></sidebar-am>
<sidebar-ip :cond="ipVisible"></sidebar-ip>
<sidebar-ep :cond="epVisible"></sidebar-ep>
<sidebar-rm :cond="rmVisible"></sidebar-rm>
<tab-button
<sidebar-am />
<sidebar-ip :cond="ipVisible" />
<sidebar-ep :cond="epVisible" />
<sidebar-rm :cond="rmVisible" />
<tab-button
v-for="tab in tabs"
:key="tab.id"
:tab="tab"></tab-button>
:key="tab.name"
:tab="tab"
/>
</div>`
});

View File

@ -1,40 +1,39 @@
"use strict";
Vue.component("tab-button", {
data() {
return {
visible: false,
subtabVisibilities: []
};
},
props: {
tab: Object
},
data() {
return {
isAvailable: false,
subtabVisibilities: []
};
},
methods: {
changeTab(tab) {
this.$viewModel.page = tab;
},
update() {
this.visible = this.tab.condition();
if (this.tab.subtabs) this.subtabVisibilities = this.tab.subtabs.map(x => x.condition());
this.isAvailable = this.tab.isAvailable;
this.subtabVisibilities = this.tab.subtabs.map(x => x.isAvailable);
}
},
template:
`<div class="tab-button" :class="tab.class">
`<div class="tab-button" :class="tab.config.newUIClass">
<div
@click="changeTab(tab.component)"
v-if="visible"
class="tab-button-inner">
<h3>{{ tab.label }}</h3>
v-if="isAvailable"
class="tab-button-inner"
@click="tab.show()"
>
<h3>{{ tab.name }}</h3>
</div>
<div v-else class="tab-button-inner"><h3>???</h3></div>
<div class="subtabs" v-if="visible && subtabVisibilities.filter(x => x).length > 1">
<div class="subtabs" v-if="isAvailable && subtabVisibilities.filter(x => x).length > 1">
<div v-for="(subtab, index) in tab.subtabs">
<div
<div
v-if="subtabVisibilities[index]"
class="subtab" :class="tab.class"
@click="changeTab(subtab.component)">{{ subtab.label }}</div>
class="subtab"
:class="tab.config.newUIClass"
@click="subtab.show()">{{ subtab.symbol }}</div>
</div>
</div>
</div>`
});
});

View File

@ -0,0 +1,25 @@
"use strict";
Vue.component("old-ui-subtab-bar", {
data() {
return {
isVisible: false
};
},
computed: {
tab: () => Tabs.current,
subtabs() {
return this.tab.subtabs;
}
},
methods: {
update() {
this.isVisible = this.subtabs.countWhere(subtab => subtab.isAvailable) > 1;
}
},
template: `
<div v-if="isVisible">
<old-ui-subtab-button v-for="(subtab, i) in subtabs" :key="i" :subtab="subtab" />
</div>
`
});

View File

@ -0,0 +1,22 @@
"use strict";
Vue.component("old-ui-subtab-button", {
props: {
subtab: Object
},
data() {
return {
isAvailable: false
};
},
methods: {
update() {
this.isAvailable = this.subtab.isAvailable;
}
},
template: `
<button v-if="isAvailable" @click="subtab.show()" style="margin: .5rem .8rem" class="o-btn o-btn--secondary-tab">
{{subtab.name}}
</button>
`
});

View File

@ -0,0 +1,22 @@
"use strict";
Vue.component("old-ui-tab-bar", {
computed: {
tabs: () => [
Tab.dimensions,
Tab.options,
Tab.statistics,
Tab.achievements,
Tab.challenges,
Tab.infinity,
Tab.eternity,
Tab.reality,
Tab.celestials
]
},
template: `
<div>
<old-ui-tab-button v-for="(tab, i) in tabs" :key="i" :tab="tab" />
</div>
`
});

View File

@ -0,0 +1,26 @@
"use strict";
Vue.component("old-ui-tab-button", {
props: {
tab: Object
},
data() {
return {
isAvailable: false
};
},
methods: {
update() {
this.isAvailable = this.tab.isAvailable;
}
},
template: `
<button
v-if="isAvailable"
:class="tab.config.oldUIClass"
class="tabbtn"
style="margin: .2rem"
@click="tab.show()"
>{{tab.name}}</button>
`
});

View File

@ -0,0 +1,58 @@
"use strict";
Vue.component("old-ui", {
components: {
"big-crunch-button": {
template: `<button class="tabbtn o-big-crunch-btn" onclick="bigCrunchResetRequest()">Big Crunch</button>`
}
},
data() {
return {
bigCrunch: false,
smallCrunch: false
};
},
computed: {
tab: () => Tabs.current,
},
methods: {
update() {
const canCrunch = player.antimatter.gte(Player.infinityGoal);
if (player.break || !canCrunch) {
this.bigCrunch = false;
this.smallCrunch = false;
return;
}
this.smallCrunch = true;
const challenge = NormalChallenge.current || InfinityChallenge.current;
const endOfChallenge = challenge !== undefined && !player.options.retryChallenge;
this.bigCrunch = endOfChallenge || Time.bestInfinity.totalMinutes > 1;
}
},
template: `
<div id="container" class="container c-old-ui l-old-ui">
<link rel="stylesheet" type="text/css" href="stylesheets/old-ui.css">
<template v-if="bigCrunch">
<big-crunch-button class="l-old-ui__big-crunch-btn" />
<div class="o-emptiness">
The world has collapsed on itself due to excess of antimatter.
</div>
</template>
<template v-else>
<news-ticker class="l-old-ui__news-bar" />
<game-header class="l-old-ui__header" />
<old-ui-tab-bar />
<component v-if="tab.config.before" :is="tab.config.before" />
<old-ui-subtab-bar />
<big-crunch-button
v-show="smallCrunch"
class="l-old-ui__big-crunch-btn l-old-ui__big-crunch-btn--overlay"
/>
<div class="l-old-ui-page l-old-ui__page">
<slot />
</div>
<footer-links class="l-old-ui__footer" />
</template>
</div>
`
});

View File

@ -51,11 +51,6 @@ Vue.component("options-button-grid", {
if (confirm("Do you really want to erase all your progress?")) {
GameStorage.hardReset();
}
},
switchUI() {
player.options.newUI = !player.options.newUI;
this.$viewModel.newUI = !this.$viewModel.newUI;
Tab.options.show();
}
},
template: `
@ -140,7 +135,7 @@ Vue.component("options-button-grid", {
<div class="l-options-grid__row">
<options-button
class="o-primary-btn--option_font-large"
@click="switchUI"
onclick="GameOptions.toggleUI()"
>{{ UILabel }}</options-button>
<update-rate-slider
v-model="options.updateRate"

View File

@ -198,7 +198,7 @@ Vue.component("perks-tab", {
this.$refs.tab.appendChild(PerkNetwork.container);
},
template: `
<div ref="tab" id="perks">
<div ref="tab" class="c-perk-tab">
<pp-label />
</div>
`

View File

@ -0,0 +1,21 @@
"use strict";
Vue.component("reality-machines-header", {
data() {
return {
realityMachines: new Decimal(0)
};
},
methods: {
update() {
this.realityMachines.copyFrom(player.reality.realityMachines);
}
},
template: `
<div class="l-rm-amount__desc c-rm-amount__desc">
You have
<span class="c-rm-amount">{{ shortenDimensions(realityMachines) }}</span>
{{ "Reality Machine" | pluralize(realityMachines) }}.
</div>
`
});

View File

@ -1,57 +0,0 @@
"use strict";
Vue.component("reality-tab", {
data() {
return {
realityMachines: new Decimal(0),
tabs: [
{
name: "Glyphs",
id: "Glyphs",
component: "glyphs-tab"
},
{
name: "Reality upgrades",
id: "Reality upgrades",
component: "reality-upgrades-tab"
},
{
name: "Perks",
id: "Perks",
component: "perks-tab"
},
{
name: "Automator",
id: "Automator",
component: "automator-tab"
},
{
name: "Black hole",
id: "Black hole",
component: "black-hole-tab"
}
]
};
},
computed: {
rmNoun() {
return this.realityMachines.equals(1) ? "Reality Machine" : "Reality Machines";
}
},
methods: {
update() {
this.realityMachines.copyFrom(player.reality.realityMachines);
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.reality.subtab"
:tabs="tabs"
>
<div slot="before-subtabs">
<div class="l-rm-amount__desc c-rm-amount__desc">
You have <span id="rm-amount" class="c-rm-amount">{{ shortenDimensions(realityMachines) }}</span> {{ rmNoun }}.
</div>
</div>
</game-tab-with-subtabs>`
});

View File

@ -1,8 +0,0 @@
"use strict";
Vue.component("secondary-tab-button", {
template:
`<button class="o-btn o-btn--secondary-tab" v-bind="$attrs" v-on="$listeners">
<slot/>
</button>`
});

View File

@ -14,7 +14,7 @@ Vue.component("challenge-records-tab", {
}
},
template:
`<div class="l-challenge-records-tab">
`<div class="l-challenge-records-tab c-stats-tab">
<challenge-records-list
:start="2"
:times="normalChallenges"
@ -27,4 +27,4 @@ Vue.component("challenge-records-tab", {
class="l-challenge-records-tab__infinity_challenges"
/>
</div>`
});
});

View File

@ -44,7 +44,7 @@ Vue.component("past-runs-tab", {
realRunTime: run => (run[2] === undefined ? "unrecorded" : timeDisplayShort(run[2]))
},
template:
`<div>
`<div class="c-stats-tab">
<br>
<div v-for="(run, index) in runs" :key="index">
<span>

View File

@ -90,7 +90,7 @@ Vue.component("statistics-tab", {
}
},
template:
`<div>
`<div class="c-stats-tab">
<br>
<h3>General</h3>
<div>You have made a total of {{ shortenMoney(totalAntimatter) }} antimatter.</div>

View File

@ -1,58 +0,0 @@
"use strict";
Vue.component("stats-tab", {
data() {
return {
isChallengeTabUnlocked: false,
isInfinitiesTabUnlocked: false,
isEternitiesTabUnlocked: false,
isRealitiesTabUnlocked: false,
tabs: [
{
name: "Statistics",
id: "Statistics",
component: "statistics-tab"
},
{
name: "Challenge records",
id: "Challenge records",
component: "challenge-records-tab",
condition: function() { return this.isChallengeTabUnlocked; }.bind(this)
},
{
name: "Past Infinities",
id: "Past Infinities",
component: "past-infinities-tab",
condition: function() { return this.isInfinitiesTabUnlocked; }.bind(this)
},
{
name: "Past Eternities",
id: "Past Eternities",
component: "past-eternities-tab",
condition: function() { return this.isEternitiesTabUnlocked; }.bind(this)
},
{
name: "Past Realities",
id: "Past Realities",
component: "past-realities-tab",
condition: function() { return this.isRealitiesTabUnlocked; }.bind(this)
}
]
};
},
methods: {
update() {
const progress = PlayerProgress.current;
this.isChallengeTabUnlocked = player.challenge.normal.challengeBits || player.challenge.infinity.challengeBits;
this.isInfinitiesTabUnlocked = progress.isInfinityUnlocked;
this.isEternitiesTabUnlocked = progress.isEternityUnlocked;
this.isRealitiesTabUnlocked = progress.isRealityUnlocked;
}
},
template:
`<game-tab-with-subtabs
v-model="$viewModel.tabs.statistics.subtab"
:tabs="tabs"
class="c-stats-tab"
/>`
});

View File

@ -3,14 +3,13 @@
class GameOptions {
static toggleNews() {
if (player.options.newsHidden) {
document.getElementById("game").style.display = "block";
player.options.newsHidden = false;
scrollNextMessage();
} else {
document.getElementById("game").style.display = "none";
player.options.newsHidden = true;
}
player.options.newsHidden = !player.options.newsHidden;
ui.view.newsHidden = player.options.newsHidden;
}
static toggleUI() {
player.options.newUI = !player.options.newUI;
ui.view.newUI = player.options.newUI;
}
static cloudSave() {

View File

@ -1,99 +0,0 @@
"use strict";
class Tab {
constructor(component) {
this._component = component;
}
get isOpen() {
return ui.view.tabs.current === this._component;
}
show() {
ui.view.tabs.current = this._component;
EventHub.dispatch(GameEvent.TAB_CHANGED);
}
}
class Subtab {
constructor(id, parent, view, isDefault) {
this._id = id;
this._parent = parent;
this._view = view;
if (isDefault) {
this._view.subtab = this._id;
}
}
get isOpen() {
return this._parent.isOpen && this._view.subtab === this._id;
}
show() {
this._view.subtab = this._id;
this._parent.show();
EventHub.dispatch(GameEvent.TAB_CHANGED);
}
}
Tab.dimensions = new Tab("dimensions-tab");
Tab.dimensions.normal = new Subtab("Dimensions", Tab.dimensions, ui.view.tabs.dimensions, true);
Tab.dimensions.infinity = new Subtab("Infinity Dimensions", Tab.dimensions, ui.view.tabs.dimensions);
Tab.dimensions.time = new Subtab("Time Dimensions", Tab.dimensions, ui.view.tabs.dimensions);
Tab.options = new Tab("options-tab");
Tab.statistics = new Tab("stats-tab");
Tab.achievements = new Tab("achievements-tab");
Tab.challenges = new Tab("challenges-tab");
Tab.challenges.normal = new Subtab("Challenges", Tab.challenges, ui.view.tabs.challenges, true);
Tab.challenges.infinity = new Subtab("Infinity Challenges", Tab.challenges, ui.view.tabs.challenges);
Tab.challenges.eternity = new Subtab("Eternity Challenges", Tab.challenges, ui.view.tabs.challenges);
Tab.infinity = new Tab("infinity-tab");
Tab.eternity = new Tab("eternity-tab");
Tab.eternity.timeStudies = new Subtab("Time studies", Tab.eternity, ui.view.tabs.eternity, true);
Tab.eternity.dilation = new Subtab("Time dilation", Tab.eternity, ui.view.tabs.eternity);
Tab.reality = new Tab("reality-tab");
Tab.reality.glyphs = new Subtab("Glyphs", Tab.reality, ui.view.tabs.reality, true);
Tab.celestials = new Tab("celestials-tab");
// small hack until Vue migration is complete
function tryShowtab(tab) {
if (tab === 'options') {
Tab.options.show();
return true;
}
if (tab === 'statistics') {
Tab.statistics.show();
return true;
}
if (tab === 'dimensions') {
Tab.dimensions.show();
return true;
}
if (tab === 'achievements') {
Tab.achievements.show();
return true;
}
if (tab === 'challenges') {
Tab.challenges.show();
return true;
}
if (tab === 'infinity') {
Tab.infinity.show();
return true;
}
if (tab === 'eternitystore') {
Tab.eternity.show();
return true;
}
if (tab === 'celestials') {
Tab.celestials.show();
return true;
}
if (tab === 'reality') {
Tab.reality.show();
return true;
}
ui.view.tabs.current = undefined;
EventHub.dispatch(GameEvent.TAB_CHANGED);
return false;
}

View File

@ -1,6 +1,5 @@
"use strict";
let ui = {
view: {
modal: {
@ -12,30 +11,12 @@ let ui = {
glyphSelection: false,
},
tabs: {
current: undefined,
dimensions: {
subtab: "",
normal: {
floatingText: Array.from({length: 9}, () => [])
},
},
statistics: {
subtab: ""
},
achievements: {
subtab: ""
},
challenges: {
subtab: ""
},
infinity: {
subtab: ""
},
eternity: {
subtab: ""
},
reality: {
subtab: "",
openGlyphWeights: false,
currentGlyphTooltip: -1,
automator: {
@ -44,9 +25,6 @@ let ui = {
// TODO: enum
mode: true
}
},
celestials: {
subtab: ""
}
},
shiftDown: false,
@ -55,8 +33,10 @@ let ui = {
scrollWindow: 0,
draggingUIID: -1,
currentContextMenu: null,
page: "normal-dim-tab",
newUI: false
tab: "dimensions",
subtab: "normal",
newUI: false,
newsHidden: false
},
notationName: "",
notationName: ""
};

View File

@ -163,12 +163,9 @@ const UIID = function() {
}());
ui = new Vue({
el: '#ui',
el: "#ui",
data: ui,
computed: {
themeCss() {
return "stylesheets/theme-" + this.view.theme + ".css";
},
notation() {
return Notation.find(this.notationName);
},
@ -211,6 +208,7 @@ ui = new Vue({
}
},
},
template: "<game-ui />"
});
GameUI.initialized = true;

View File

@ -114,8 +114,6 @@ function secondSoftReset() {
AchievementTimers.marathon2.reset();
}
document.getElementById("bigcrunch").onclick = bigCrunchResetRequest;
function totalIPMult() {
if (Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.INFINITY) {
return new Decimal(1);

View File

@ -1,60 +0,0 @@
"use strict";
document.addEventListener("visibilitychange", () => {
if (!document.hidden) scrollNextMessage();
}, false);
let scrollTimeouts = [];
let nextMsgIndex;
function scrollNextMessage() {
// Don't run if hidden to save performance
if (player.options.newsHidden) return;
const newsDiv = player.options.newUI ? document.getElementById("newNews") : document.getElementById("news");
// Select a message at random
function isUnlocked(index) {
const message = GameDatabase.news[index];
return message.condition === undefined || message.condition();
}
do {
nextMsgIndex = Math.floor(Math.random() * GameDatabase.news.length);
} while (!isUnlocked(nextMsgIndex));
scrollTimeouts.forEach(clearTimeout);
scrollTimeouts = [];
// Set the text
newsDiv.innerHTML = GameDatabase.news[nextMsgIndex].text;
// Get the parent width so we can start the message beyond it
const parentWidth = newsDiv.parentElement.clientWidth;
// Set the transition to blank so the move happens immediately
newsDiv.style.transition = "";
// Move div_text to the right, beyond the edge of the div_container
newsDiv.style.transform = `translateX(${parentWidth}px)`;
// We need to use a setTimeout here to allow the browser time to move the div_text before we start the scrolling
scrollTimeouts.push(setTimeout(() => {
// Distance to travel is newsDiv.parentElement.clientWidth + newsDiv.clientWidth + parent padding
// We want to travel at scrollSpeed pixels per second so we need to travel for (distance / scrollSpeed) seconds
// 20 is div_container padding
const dist = newsDiv.parentElement.clientWidth + newsDiv.clientWidth + 20;
// Change this value to change the scroll speed
const scrollSpeed = 100;
const transformDuration = dist / scrollSpeed;
if (!player.options.newsHidden && !player.newsArray.includes(GameDatabase.news[nextMsgIndex].id)) {
player.newsArray.push(GameDatabase.news[nextMsgIndex].id);
if (player.newsArray.length >= 50) Achievement(22).unlock();
}
// Set the transition duration
newsDiv.style.transition = `transform ${transformDuration}s linear`;
// We need to move it to -(width+parent padding) before it won't be visible
newsDiv.style.transform = `translateX(-${newsDiv.clientWidth + 5}px)`;
// Automatically start the next message scrolling after this one finishes
// You could add more time to this timeout if you wanted to have some time between messages
scrollTimeouts.push(setTimeout(scrollNextMessage, Math.ceil(transformDuration * 1000)));
}, 100));
}

View File

@ -136,7 +136,7 @@ let player = {
tickDecrease: 0.9,
totalAntimatter: new Decimal(0),
achPow: new Decimal(1),
newsArray: [],
news: new Set(),
// TODO: Not used, remove
interval: null,
lastUpdate: new Date().getTime(),
@ -421,7 +421,7 @@ let player = {
hotkeys: true,
theme: "Normal",
commas: true,
updateRate: 50,
updateRate: 33,
newUI: true,
chart: {
updateRate: 1000,
@ -509,6 +509,11 @@ const Player = {
return GameCache.achievementPower.value.pow(getAdjustedGlyphEffect("effarigachievement"));
},
get infinityGoal() {
const challenge = NormalChallenge.current || InfinityChallenge.current;
return challenge === undefined ? Decimal.MAX_NUMBER : challenge.goal;
},
get eternityGoal() {
return EternityChallenge.isRunning
? EternityChallenge.current.currentGoal

View File

@ -58,7 +58,7 @@ GameDatabase.achievements.normal = [
id: 22,
name: "Fake News",
tooltip: "Encounter 50 different news messages.",
checkRequirement: () => player.newsArray.length >= 50
checkRequirement: () => player.news.size >= 50
},
{
id: 23,

View File

@ -1209,52 +1209,52 @@ GameDatabase.news = [
{
id: "c30",
text: "Does Hevi just pick quotes to put into the game?",
condition: () => player.newsArray.length >= 30
condition: () => player.news.size >= 30
},
{
id: "c31",
text: "New news company has become rivals with us. They are made entirely of antimatter.",
condition: () => player.newsArray.length >= 80
condition: () => player.news.size >= 80
},
{
id: "c32",
text: "How many times can we use \"Anti\" in a row before people stop listening?",
condition: () => player.newsArray.length >= 100
condition: () => player.news.size >= 100
},
{
id: "c33",
text: "Does Hevi even check #news-ticker-suggestions anymore?",
condition: () => player.newsArray.length >= 120
condition: () => player.news.size >= 120
},
{
id: "c34",
text: "Need more quotes! -hevipelle",
condition: () => player.newsArray.length >= 135
condition: () => player.news.size >= 135
},
{
id: "c35",
text: "Man destroys known universe with antimatter, writes news tickers to keep from feeling lonely.",
condition: () => player.newsArray.length >= 150
condition: () => player.news.size >= 150
},
{
id: "c36",
text: "You're almost there!",
condition: () => player.newsArray.length >= 160
condition: () => player.news.size >= 160
},
{
id: "c37",
text: "You can stop now",
condition: () => player.newsArray.length >= 165
condition: () => player.news.size >= 165
},
{
id: "c38",
text: "fucking hacker",
condition: () => player.newsArray.length >= 200
condition: () => player.news.size >= 200
},
{
id: "c39",
text: "Asian man trys to steal the trophy of fastest infinity of -1 seconds, AND HE DOES IT!",
condition: () => player.newsArray.includes("c1")
condition: () => player.news.has("c1")
},
{
id: "c40",
@ -1262,7 +1262,7 @@ GameDatabase.news = [
"I broke the 8th wall, there is only chaos, Slabdrill is ritually sacrificing antimatter to the 9th " +
"dimension. This will be my last entry, may Hevipelle have mercy on our souls, we didn't listen, " +
"We should have listened.",
condition: () => player.newsArray.includes("b22")
condition: () => player.news.has("b22")
},
{
id: "c41",

View File

@ -0,0 +1,327 @@
"use strict";
GameDatabase.tabs = [
{
key: "dimensions",
name: "Dimensions",
subtabs: [
{
key: "normal",
name: "Dimensions",
symbol: "Ω",
component: "normal-dim-tab",
newUIComponent: "new-dimensions-tab"
},
{
key: "infinity",
name: "Infinity Dimensions",
symbol: "∞",
component: "infinity-dim-tab",
condition: () => player.eternities > 0 || InfinityDimension(1).isUnlocked
},
{
key: "time",
name: "Time Dimensions",
symbol: "Δ",
component: "time-dim-tab",
condition: () => player.eternities > 0
},
{
key: "production",
name: "Production",
symbol: "📈",
component: "dim-production-tab",
condition: () => player.eternities > 0 || player.infinitied.gt(0)
}
]
},
{
key: "options",
name: "Options",
subtabs: [
{
key: "options",
name: "Options",
symbol: "O",
component: "options-tab"
}
]
},
{
key: "statistics",
name: "Statistics",
subtabs: [
{
key: "statistics",
name: "Statistics",
symbol: "S",
component: "statistics-tab"
},
{
key: "challenges",
name: "Challenge records",
symbol: "C",
component: "challenge-records-tab",
condition: () => player.challenge.normal.completedBits || player.challenge.infinity.completedBits
},
{
key: "infinities",
name: "Past Infinities",
symbol: "∞",
component: "past-infinities-tab",
condition: () => PlayerProgress.infinityUnlocked()
},
{
key: "eternities",
name: "Past Eternities",
symbol: "Δ",
component: "past-eternities-tab",
condition: () => PlayerProgress.eternityUnlocked()
},
{
key: "realities",
name: "Past Realities",
symbol: "Ϟ",
component: "past-realities-tab",
condition: () => PlayerProgress.realityUnlocked
}
]
},
{
key: "achievements",
name: "Achievements",
condition: () => Achievements.effectiveCount > 0,
subtabs: [
{
key: "normal",
name: "Achievements",
symbol: "A",
component: "normal-achievements-tab"
},
{
key: "secret",
name: "Secret Achievements",
symbol: "SA",
component: "secret-achievements-tab"
}
]
},
{
key: "challenges",
name: "Challenges",
condition: () => player.eternities > 0 || player.infinitied.gt(0),
subtabs: [
{
key: "normal",
name: "Challenges",
symbol: "Ω",
component: "normal-challenges-tab"
},
{
key: "infinity",
name: "Infinity Challenges",
symbol: "∞",
component: "infinity-challenges-tab",
condition: () =>
Tab.challenges.eternity.isAvailable ||
player.antimatter.e >= 2000 ||
player.postChallUnlocked > 0
},
{
key: "eternity",
name: "Eternity Challenges",
symbol: "Δ",
component: "eternity-challenges-tab",
condition: () =>
player.challenge.eternity.unlocked !== 0 ||
EternityChallenges.all.some(ec => ec.completions > 0) ||
player.reality.autoEC
}
],
},
{
key: "infinity",
name: "Infinity",
oldUIClass: "infinitytabbtn",
newUIClass: "infinity",
condition: () => player.eternities > 0 || player.infinitied.gt(0),
before: "infinity-points-header",
subtabs: [
{
key: "upgrades",
name: "Upgrades",
symbol: "U",
component: "infinity-upgrades-tab"
},
{
key: "autobuyers",
name: "Autobuyers",
symbol: "A",
component: "autobuyers-tab"
},
{
key: "break",
name: "Break Infinity",
symbol: "B",
component: "break-infinity-tab"
},
{
key: "replicanti",
name: "Replicanti",
symbol: "Ξ",
component: "replicanti-tab"
}
],
},
{
key: "eternity",
name: "Eternity",
oldUIClass: "eternitytabbtn",
newUIClass: "eternity",
condition: () => player.eternities > 0,
subtabs: [
{
key: "studies",
name: "Time studies",
symbol: "TS",
component: "time-studies-tab"
},
{
key: "upgrades",
name: "Eternity upgrades",
symbol: "U",
component: "eternity-upgrades-tab"
},
{
key: "milestones",
name: "Eternity milestones",
symbol: "M",
component: "eternity-milestones-tab"
},
{
key: "dilation",
name: "Time dilation",
symbol: "TD",
component: "time-dilation-tab",
condition: () => TimeStudy.dilation.isBought
}
],
},
{
key: "reality",
name: "Reality",
before: "reality-machines-header",
oldUIClass: "realitytabbtn",
newUIClass: "reality",
condition: () => player.realities > 0 || TimeStudy.reality.isBought,
subtabs: [
{
key: "glyphs",
name: "Glyphs",
symbol: "G",
component: "glyphs-tab"
},
{
key: "upgrades",
name: "Reality upgrades",
symbol: "U",
component: "reality-upgrades-tab"
},
{
key: "perks",
name: "Perks",
symbol: "P",
component: "perks-tab",
},
{
key: "automator",
name: "Automator",
symbol: "A",
component: "automator-tab",
},
{
key: "hole",
name: "Black hole",
symbol: "BH",
component: "black-hole-tab",
}
],
},
{
key: "celestials",
name: "Celestials",
oldUIClass: "celestialtabbtn",
newUIClass: "celestials",
condition: () => RealityUpgrades.allBought,
subtabs: [
{
key: "teresa",
name: "Teresa",
symbol: "T",
component: "teresa-tab"
},
{
key: "effarig",
name: "Effarig",
symbol: "E",
component: "effarig-tab",
condition: () => Teresa.has(TERESA_UNLOCKS.EFFARIG)
},
{
key: "enslaved",
name: "The Enslaved Ones",
symbol: "EO",
component: "enslaved-tab",
condition: () => EffarigUnlock.eternity.isUnlocked
},
{
key: "v",
name: "V",
symbol: "V",
component: "v-tab",
condition: () => Achievement(151).isEnabled
},
{
key: "ra",
name: "Ra",
symbol: "R",
component: "ra-tab",
condition: () => V.has(V_UNLOCKS.RUN_UNLOCK_THRESHOLDS[1])
},
{
key: "alchemy",
name: "Glyph Alchemy",
symbol: "⛧",
component: "alchemy-tab",
condition: () => Ra.has(RA_UNLOCKS.GLYPH_ALCHEMY)
},
{
key: "laitela",
name: "Lai'tela",
symbol: "L",
component: "laitela-tab",
condition: () => Ra.has(RA_LAITELA_UNLOCK)
},
{
key: "pelle",
name: "The Pelle",
symbol: "P",
component: "pelle-tab",
condition: () => Laitela.has(LAITELA_UNLOCKS.PELLE)
}
]
},
{
key: "shop",
name: "Shop",
newUIClass: "shop",
subtabs: [
{
key: "shop",
name: "Shop",
symbol: "ASS",
component: "achievements-tab"
}
]
}
];

View File

@ -418,7 +418,8 @@ GameStorage.devMigrations = {
delete player.realityBuyer;
delete player.autoRealityMode;
delete player.autoEternityMode;
}
},
GameStorage.migrations.convertNewsToSet
],
patch(player) {

View File

@ -116,6 +116,7 @@ GameStorage.migrations = {
GameStorage.migrations.removePostC3Reward(player);
GameStorage.migrations.renameMoney(player);
GameStorage.migrations.moveAutobuyers(player);
GameStorage.migrations.convertNewsToSet(player);
}
},
@ -563,6 +564,11 @@ GameStorage.migrations = {
delete player.eternityBuyer;
},
convertNewsToSet(player) {
player.news = new Set(player.newsArray);
delete player.newsArray;
},
prePatch(saveData) {
// Initialize all possibly undefined properties that were not present in
// previous versions and which could be overwritten by deepmerge

View File

@ -131,9 +131,8 @@ const GameStorage = {
SecretAchievement(42).unlock();
}
if (player.options.newsHidden) {
document.getElementById("game").style.display = "none";
}
ui.view.newsHidden = player.options.newsHidden;
ui.view.newUI = player.options.newUI;
recalculateAllGlyphs();
checkPerkValidity();
@ -143,11 +142,6 @@ const GameStorage = {
Theme.set(player.options.theme);
Notation.find(player.options.notation).setCurrent();
if (player.options.newUI) {
ui.view.newUI = true;
ui.view.page = "new-dimensions-tab";
}
EventHub.dispatch(GameEvent.GAME_LOAD);
AutomatorBackend.initializeFromSave();
Lazy.invalidateAll();

View File

@ -374,7 +374,7 @@ function respecTimeStudies(auto) {
player.challenge.eternity.unlocked = 0;
}
if (!auto) {
Tab.eternity.timeStudies.show();
Tab.eternity.studies.show();
}
}

View File

@ -0,0 +1,83 @@
"use strict";
class SubtabState {
constructor(parent, config) {
this._parent = parent;
this.config = config;
}
get name() {
return this.config.name;
}
get symbol() {
return this.config.symbol;
}
get isAvailable() {
return this.config.condition === undefined || this.config.condition();
}
get key() {
return this.config.key;
}
show() {
this._parent.show(this);
}
get isOpen() {
return ui.view.subtab === this.key;
}
}
class TabState {
constructor(config) {
this.config = config;
this.isOpened = false;
const subtabs = [];
for (const subtabConfig of config.subtabs) {
const subtab = new SubtabState(this, subtabConfig);
this[subtabConfig.key] = subtab;
subtabs.push(subtab);
}
this.subtabs = subtabs;
this._currentSubtab = subtabs[0];
}
get name() {
return this.config.name;
}
get isAvailable() {
return this.config.condition === undefined || this.config.condition();
}
get isOpen() {
return ui.view.tab === this.config.key;
}
show(subtab = undefined) {
ui.view.tab = this.config.key;
if (subtab !== undefined) {
this._currentSubtab = subtab;
}
ui.view.subtab = this._currentSubtab.key;
Modal.hide();
EventHub.dispatch(GameEvent.TAB_CHANGED);
}
}
const Tab = GameDatabase.tabs.mapToObject(
config => config.key,
config => new TabState(config)
);
const Tabs = (function() {
return {
all: Object.values(Tab),
get current() {
return Tabs.all.find(tab => tab.isOpen);
}
};
}());

View File

@ -11,11 +11,6 @@ let kongEPMult = 1
let until10Setting = true;
function showTab(tabName) {
tryShowtab(tabName);
Modal.hide();
}
function floatText(tier, text) {
if (!player.options.animations.floatingText) return;
const floatingText = ui.view.tabs.dimensions.normal.floatingText[tier];
@ -23,18 +18,6 @@ function floatText(tier, text) {
setTimeout(() => floatingText.shift(), 1000)
}
document.getElementById("news").onclick = function () {
if (document.getElementById("news").textContent === "Click this to unlock a secret achievement.") {
SecretAchievement(24).unlock();
}
};
document.getElementById("newNews").onclick = function () {
if (document.getElementById("newNews").textContent === "Click this to unlock a secret achievement.") {
SecretAchievement(24).unlock();
}
};
function maxAll() {
if (!player.break && player.antimatter.gt(Decimal.MAX_NUMBER)) return;
buyMaxTickSpeed();
@ -352,19 +335,10 @@ setInterval(kongLog10StatSubmission, 10000)
var ttMaxTimer = 0;
function randomStuffThatShouldBeRefactored() {
document.getElementById("kongip").textContent = "Double your IP gain from all sources (additive). Forever. Currently: x"+kongIPMult+", next: x"+(kongIPMult==1? 2: kongIPMult+2)
document.getElementById("kongep").textContent = "Triple your EP gain from all sources (additive). Forever. Currently: x"+kongEPMult+", next: x"+(kongEPMult==1? 3: kongEPMult+3)
document.getElementById("kongdim").textContent = "Double all your normal dimension multipliers (multiplicative). Forever. Currently: x"+kongDimMult+", next: x"+(kongDimMult*2)
document.getElementById("kongalldim").textContent = "Double ALL the dimension multipliers (Normal, Infinity, Time) (multiplicative until 32x). Forever. Currently: x"+kongAllDimMult+", next: x"+((kongAllDimMult < 32) ? kongAllDimMult * 2 : kongAllDimMult + 32)
if (player.eternities !== 0) document.getElementById("eternitystorebtn").style.display = "inline-block"
else document.getElementById("eternitystorebtn").style.display = "none"
if (player.realities > 0 || player.dilation.studies.includes(6)) $("#realitybtn").show()
else $("#realitybtn").hide()
if (RealityUpgrades.allBought) $("#celestialsbtn").show() // Rebuyables and that one null value = 6
else $("#celestialsbtn").hide()
// document.getElementById("kongip").textContent = "Double your IP gain from all sources (additive). Forever. Currently: x"+kongIPMult+", next: x"+(kongIPMult==1? 2: kongIPMult+2)
// document.getElementById("kongep").textContent = "Triple your EP gain from all sources (additive). Forever. Currently: x"+kongEPMult+", next: x"+(kongEPMult==1? 3: kongEPMult+3)
// document.getElementById("kongdim").textContent = "Double all your normal dimension multipliers (multiplicative). Forever. Currently: x"+kongDimMult+", next: x"+(kongDimMult*2)
// document.getElementById("kongalldim").textContent = "Double ALL the dimension multipliers (Normal, Infinity, Time) (multiplicative until 32x). Forever. Currently: x"+kongAllDimMult+", next: x"+((kongAllDimMult < 32) ? kongAllDimMult * 2 : kongAllDimMult + 32)
ttMaxTimer++;
if (autoBuyMaxTheorems()) ttMaxTimer = 0;
@ -639,12 +613,6 @@ function gameLoop(diff, options = {}) {
player.totalTickGained += gain;
player.tickThreshold = freeTickspeed.nextShards;
if (player.antimatter.gte(Decimal.MAX_NUMBER) && (!player.break || (challenge && player.antimatter.gte(challenge.goal)))) {
document.getElementById("bigcrunch").style.display = 'inline-block';
if ((challenge && !player.options.retryChallenge) || (player.bestInfinityTime > 60000 && !player.break)) {
showTab("emptiness");
}
} else document.getElementById("bigcrunch").style.display = 'none';
var currentIPmin = gainedInfinityPoints().dividedBy(Time.thisInfinity.totalMinutes)
if (currentIPmin.gt(IPminpeak)) IPminpeak = currentIPmin
@ -687,39 +655,6 @@ function gameLoop(diff, options = {}) {
if (Ra.has(RA_UNLOCKS.TT_ACHIEVEMENT)) ttGain *= RA_UNLOCKS.TT_ACHIEVEMENT.effect();
player.timestudy.theorem = player.timestudy.theorem.plus(ttGain);
}
if (player.infinityPoints.gt(0) || player.eternities !== 0) {
document.getElementById("infinitybtn").style.display = "block";
}
document.getElementById("infinitybtn").style.display = "none";
document.getElementById("challengesbtn").style.display = "none";
if (player.antimatter.gte(Decimal.MAX_NUMBER) &&
(((challenge && player.antimatter.gte(challenge.goal)) && !player.options.retryChallenge) ||
(player.bestInfinityTime > 60000 && !player.break))) {
ui.view.bigCrunch = true;
document.getElementById("dimensionsbtn").style.display = "none";
document.getElementById("optionsbtn").style.display = "none";
document.getElementById("statisticsbtn").style.display = "none";
document.getElementById("achievementsbtn").style.display = "none";
document.getElementById("challengesbtn").style.display = "none";
document.getElementById("infinitybtn").style.display = "none";
} else {
ui.view.bigCrunch = false;
document.getElementById("dimensionsbtn").style.display = "inline-block";
document.getElementById("optionsbtn").style.display = "inline-block";
document.getElementById("statisticsbtn").style.display = "inline-block";
document.getElementById("achievementsbtn").style.display = "inline-block";
if (player.infinitied.gt(0)) {
document.getElementById("infinitybtn").style.display = "inline-block";
document.getElementById("challengesbtn").style.display = "inline-block";
}
}
if (player.eternities > 0) {
document.getElementById("infinitybtn").style.display = "inline-block";
document.getElementById("challengesbtn").style.display = "inline-block";
}
tryUnlockInfinityDimensions();
@ -934,72 +869,20 @@ setInterval(function() {
}
}, 333)
//start scrolling
scrollNextMessage();
function init() {
console.log('init');
document.getElementById('dimensionsbtn').onclick = function () {
showTab('dimensions');
};
document.getElementById('optionsbtn').onclick = function () {
showTab('options');
};
document.getElementById('statisticsbtn').onclick = function () {
showTab('statistics');
};
document.getElementById('achievementsbtn').onclick = function () {
showTab('achievements');
};
document.getElementById('challengesbtn').onclick=function () {
showTab('challenges');
};
document.getElementById('infinitybtn').onclick = function () {
showTab('infinity');
};
document.getElementById("eternitystorebtn").onclick = function () {
showTab('eternitystore')
}
document.getElementById("realitybtn").onclick = function () {
showTab('reality')
}
document.getElementById("shopbtn").onclick = function () {
showTab('shop')
kong.updatePurchases();
}
document.getElementById('celestialsbtn').onclick = function () {
showTab('celestials');
};
Tab.dimensions.normal.show();
GameStorage.load();
kong.init();
//if (typeof kongregate === 'undefined') document.getElementById("shopbtn").style.display = "none"
}
setInterval(function () {
if (playFabId != -1 && player.options.cloud) playFabSaveCheck();
}, 1000*60*5)
document.getElementById("hiddenheader").style.display = "none";
window.onload = function() {
GameIntervals.start();
setTimeout(function() {
setTimeout(() => {
if (kong.enabled) {
playFabLogin();
kong.updatePurchases();
}
else {
document.getElementById("shopbtn").style.display = "none";
}
//document.getElementById("container").style.display = "flex"
document.getElementById("loading").style.display = "none"
}, 1000)
}
document.getElementById("loading").style.display = "none";
}, 1000);
};
window.onfocus = function() {
setShiftKey(false);
@ -1014,6 +897,14 @@ function setShiftKey(isDown) {
ui.view.shiftDown = isDown;
}
function init() {
// eslint-disable-next-line no-console
console.log("🌌 Antimatter Dimensions: Reality Update 🌌");
Tab.dimensions.normal.show();
GameStorage.load();
kong.init();
}
init();
let tweenTime = 0;

View File

@ -1,95 +0,0 @@
"use strict";
const TLN = {
eventList: {},
update_line_numbers: function(ta, el) {
let lines = ta.value.split("\n").length;
let child_count = el.children.length;
let difference = lines - child_count;
if(difference > 0) {
let frag = document.createDocumentFragment();
while(difference > 0) {
let line_number = document.createElement("span");
line_number.className = "tln-line";
frag.appendChild(line_number);
difference--;
}
el.appendChild(frag);
}
while(difference < 0) {
el.removeChild(el.firstChild);
difference++;
}
},
append_line_numbers: function(id) {
let ta = document.getElementById(id);
if(ta == null) {
return console.warn("[tln.js] Couldn't find textarea of id '"+id+"'");
}
if(ta.className.indexOf("tln-active") != -1) {
return console.warn("[tln.js] textarea of id '"+id+"' is already numbered");
}
ta.classList.add("tln-active");
ta.style = {};
let el = document.createElement("div");
ta.parentNode.insertBefore(el, ta);
el.className = "tln-wrapper";
TLN.update_line_numbers(ta, el);
TLN.eventList[id] = [];
const __change_evts = [
"propertychange", "input", "keydown", "keyup"
];
const __change_hdlr = function(ta, el) {
return function(e) {
if((+ta.scrollLeft==10 && (e.keyCode==37||e.which==37
||e.code=="ArrowLeft"||e.key=="ArrowLeft"))
|| e.keyCode==36||e.which==36||e.code=="Home"||e.key=="Home"
|| e.keyCode==13||e.which==13||e.code=="Enter"||e.key=="Enter"
|| e.code=="NumpadEnter")
ta.scrollLeft = 0;
TLN.update_line_numbers(ta, el);
}
}(ta, el);
for(let i = __change_evts.length - 1; i >= 0; i--) {
ta.addEventListener(__change_evts[i], __change_hdlr);
TLN.eventList[id].push({
evt: __change_evts[i],
hdlr: __change_hdlr
});
}
const __scroll_evts = [ "change", "mousewheel", "scroll" ];
const __scroll_hdlr = function(ta, el) {
return function() { el.scrollTop = ta.scrollTop; }
}(ta, el);
for(let i = __scroll_evts.length - 1; i >= 0; i--) {
ta.addEventListener(__scroll_evts[i], __scroll_hdlr);
TLN.eventList[id].push({
evt: __scroll_evts[i],
hdlr: __scroll_hdlr
});
}
},
remove_line_numbers: function(id) {
let ta = document.getElementById(id);
if(ta == null) {
return console.warn("[tln.js] Couldn't find textarea of id '"+id+"'");
}
if(ta.className.indexOf("tln-active") == -1) {
return console.warn("[tln.js] textarea of id '"+id+"' isn't numbered");
}
ta.classList.remove("tln-active");
ta.previousSibling.remove();
if(!TLN.eventList[id]) return;
for(let i = TLN.eventList[id].length - 1; i >= 0; i--) {
const evt = TLN.eventList[id][i];
ta.removeEventListener(evt.evt, evt.hdlr);
}
delete TLN.eventList[id];
}
}

View File

@ -4,7 +4,6 @@
<title>Antimatter Dimensions</title>
<link rel="icon" type="image/png" href="icon.png">
<meta name="Antimatter Dimensions" content="A game about huge numbers and watching them go up." charset="utf-8"/>
<h1 id="hiddenheader" style="display: none">Antimatter Dimensions</h1>
<script type="text/javascript" src='https://cdn1.kongregate.com/javascripts/kongregate_api.js'></script>
<script type="text/javascript" src="javascripts/lib/jquery-3.2.1.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=PT+Mono" rel="stylesheet">
@ -13,7 +12,6 @@
<link rel="stylesheet" type="text/css" href="stylesheets/time-studies.css">
<link rel="stylesheet" type="text/css" href="stylesheets/tooltips.css">
<link rel="stylesheet" type="text/css" href="stylesheets/vis.css">
<link rel="stylesheet" type="text/css" href="stylesheets/tln.css">
</head>
<body>
Tooltips are shown to assist in validation. Boundaries are shown for clarity.
@ -119,8 +117,8 @@
<script type="text/javascript" src="javascripts/core/polyfill.js"></script>
<script type="text/javascript" src="javascripts/core/extensions.js"></script>
<script type="text/javascript" src="javascripts/components/plus-minus-button.js"></script>
<script type="text/javascript" src="javascripts/components/ad-slider-component.js"></script>
<script type="text/javascript" src="javascripts/components/common/plus-minus-button.js"></script>
<script type="text/javascript" src="javascripts/components/common/ad-slider-component.js"></script>
<script type="text/javascript" src="javascripts/core/app/ui.init.js"></script>
<script type="text/javascript" src="javascripts/core/app/player-progress.js"></script>
@ -148,7 +146,6 @@
<script type="text/javascript" src="javascripts/core/app/options.js"></script>
<script type="text/javascript" src="javascripts/core/event-hub.js"></script>
<script type="text/javascript" src="javascripts/core/app/ui.js"></script>
<script type="text/javascript" src="javascripts/core/app/tabs.js"></script>
<script type="text/javascript" src="javascripts/core/app/notify.js"></script>
</html>

View File

@ -3,12 +3,6 @@
src: url('MonospaceTypewriter.ttf');
}
* {
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
*:focus {
outline: none;
}
@ -417,30 +411,14 @@ body.t-dark {
width: 100%;
}
.quote {
display: flex;
.c-news-ticker {
width: 100%;
border-bottom: 1px solid var(--color-accent-1);
color: var(--color-text);;
text-align: center;
padding: 8px 0;
border-bottom: .1rem solid var(--color-accent-1);
padding: .8rem 0;
}
.quote > #news {
color: var(--color-text);;
}
#newNews {
position: relative;
display: inline-block;
font-family: Typewriter;
font-size: 15px;
white-space: nowrap;
font-weight: bold
}
#newNews a {
text-decoration: underline;
.c-news-line {
color: var(--color-text);
}
.subtabs {
@ -826,4 +804,8 @@ body.t-dark {
background-color: black;
border: .3rem solid var(--color-eternity);
border-radius: 1rem;
}
}
.c-stats-tab {
color: white;
}

112
stylesheets/old-ui.css Normal file
View File

@ -0,0 +1,112 @@
.c-old-ui {
padding: 0.9rem 1.5rem 0;
box-sizing: border-box;
width: 100%;
height: 100%;
}
.l-old-ui {
display: flex;
flex-direction: column;
align-items: center;
}
.l-old-ui__news-bar {
flex: 0 0 auto;
width: 75%;
}
.l-old-ui__header {
width: 100%;
}
.l-old-ui__big-crunch-btn {
margin-top: 1.9rem;
flex-shrink: 0;
}
.l-old-ui__big-crunch-btn--overlay {
position: absolute;
}
.l-old-ui__page {
width: 100%;
flex: 1 0 auto;
}
.l-old-ui__footer {
padding-bottom: 0.9rem
}
.l-old-ui-page {
display: flex;
flex-direction: column;
align-items: stretch;
width: 100%;
}
.o-emptiness {
font-size: 1.8rem;
}
.o-btn--secondary-tab {
width: 17.5rem;
height: 2.5rem;
}
.o-big-crunch-btn {
font-family: Typewriter, serif;
font-size: 5rem;
width: 36rem;
height: 10rem;
}
.l-old-ui-normal-dim-tab {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
.c-news-ticker {
border: .2rem solid black;
border-radius: .4rem;
padding: .2rem 0;
height: 3rem;
}
.t-dark .c-news-ticker,
.t-metro .c-news-ticker,
.t-inverted-metro .c-news-ticker,
.t-dark-metro .c-news-ticker,
.t-s6 .c-news-ticker,
.t-s8 .c-news-ticker {
border-width: .1rem;
}
.t-dark .c-news-ticker {
border-color: #546e7a;
background-color: #455a64;
}
.t-dark-metro .c-news-ticker {
background-color: #455a64;
}
.t-s1 .c-news-ticker {
background-color: #dbd242
}
.t-s6 .c-news-ticker {
background-color: black;
}
.c-news-line {
color: black;
}
.t-dark .c-news-line,
.t-dark-metro .c-news-line,
.t-s6 .c-news-line {
color: #e0e0e0;
}

View File

@ -2,6 +2,13 @@ html {
font-size: 62.5%;
height: 100%;
width: 100%;
box-sizing: border-box;
}
* {
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
@ -47,10 +54,6 @@ body {
outline: none;
}
button {
padding: 1px 6px;
}
.checkbox {
vertical-align: bottom;
top: -2px;
@ -60,18 +63,6 @@ button {
margin-top: 5px;
}
#game {
border: 2px solid black;
border-radius: 4px;
padding: 2px;
width: 75%;
height: 22px;
overflow: hidden;
margin-left: auto;
margin-right: auto;
text-align: left
}
/* Background for s6 is not displayed by default */
#stars {
display: none;
@ -365,17 +356,25 @@ button {
/*#endregion TT shop*/
#news {
color: #000000;
position: relative;
display: inline-block;
font-family: Typewriter;
font-size: 15px;
white-space: nowrap;
font-weight: bold
.c-news-ticker {
overflow: hidden;
}
#news a {
.c-news-ticker__line {
padding-left: 100%;
transition: transform linear;
}
.c-news-line {
display: inline-block;
font-family: Typewriter, serif;
font-size: 1.5rem;
white-space: nowrap;
font-weight: bold;
text-align: left;
}
.c-news-line a {
text-decoration: underline;
}
@ -478,7 +477,6 @@ button {
background-color: white;
border: 2px solid #0b600e;
color: #0b600e;
display: none;
}
.realitytabbtn:hover {
@ -491,7 +489,6 @@ button {
background-color: #5151ec;
border: 2px solid #d0d0d0;
color: #d0d0d0;
display: none;
}
.celestialtabbtn:hover {
@ -596,6 +593,7 @@ button {
height:800px;
margin-top: -400px;
margin-left: -525px;
z-index: 1000;
}
.l-reality-button {
@ -1260,6 +1258,11 @@ screen and (max-width: 480px) {
* BEM *
*******/
.c-game-ui {
width: 100%;
height: 100%
}
/*#region o-btn*/
.o-btn {
@ -1279,11 +1282,6 @@ screen and (max-width: 480px) {
background: #4980CC;
}
.o-btn--secondary-tab {
width: 17.5rem;
height: 2.5rem;
}
/*#region themes*/
/*#region t-dark*/
@ -1980,48 +1978,6 @@ screen and (max-width: 480px) {
height: 1.8rem;
}
/*#region l-game-tab*/
.l-game-tab {
display: flex;
flex-direction: column;
}
.l-game-tab__inner {
display: flex;
flex-direction: column;
flex: 1 0;
}
.l-game-tab__content {
flex: 1 0;
}
.l-game-tab__footer {
flex-shrink: 0;
}
/*#endregion l-game-tab*/
/*#region l-game-tab-with-subtabs*/
.l-game-tab-with-subtabs {
display: flex;
flex-direction: column;
}
.l-game-tab-with-subtabs__tab-buttons-container {
display: flex;
justify-content: center;
flex-wrap: wrap
}
.l-game-tab-with-subtabs__tab-button {
margin: .5rem .8rem;
}
/*#endregion l-game-tab-with-subtabs*/
/*#region hint-text*/
.o-hint-text {
@ -2236,7 +2192,7 @@ screen and (max-width: 480px) {
}
.l-normal-dim-tab__progress_bar {
margin-top: 1rem;
margin: 1rem 0;
}
/*#endregion l-normal-dim-tab*/
@ -2944,6 +2900,8 @@ screen and (max-width: 480px) {
/*#region l-challenges-tab*/
.l-challenges-tab {
display: flex;
flex-direction: column;
align-items: center;
}
@ -6610,6 +6568,12 @@ kbd {
cursor: pointer;
}
.c-perk-tab {
display: flex;
flex-direction: column;
align-items: center;
}
.c-perk-network {
position: relative;
overflow: hidden;

View File

@ -16,15 +16,6 @@ body.t-dark-metro {
box-shadow: 0 0 10px 0 black;
}
.t-dark-metro #news {
color: #E0E0E0;
}
.t-dark-metro #game {
border: 1px solid black;
background-color: #455A64;
}
.t-dark-metro input {
background-color: #455A64;
border: 1px solid black;
@ -147,4 +138,4 @@ body.t-dark-metro {
.t-dark-metro #realityanimbg {
filter: invert(1);
}
}

View File

@ -25,15 +25,6 @@ input.t-dark {
border: 1px solid black;
}
.t-dark #news {
color: #E0E0E0;
}
.t-dark #game {
border: 1px solid #546E7A;
background-color: #455A64;
}
.t-dark .container {
color: #888888;
}
@ -139,4 +130,4 @@ input.t-dark {
.t-dark #realityanimbg {
filter: invert(1);
}
}

View File

@ -22,10 +22,6 @@ body.t-inverted-metro {
border: 1px solid black;
}
.t-inverted-metro #game {
border: 1px solid black;
}
.t-inverted-metro .secondarytabbtn {
background: #EEEEEE;
border: 1px solid #2196F3;

View File

@ -10,10 +10,6 @@
border: 1px solid black !important;
}
.t-metro #game {
border: 1px solid black !important;
}
.t-metro .secondarytabbtn {
background: #EEEEEE;
border: 1px solid #2196F3;
@ -105,4 +101,4 @@
0% {box-shadow: inset 0px 0px 3px 0px #673AB7;}
50% {box-shadow: inset 0px 0px 20px 0px #673AB7;}
100% {box-shadow: inset 0px 0px 3px 0px #673AB7;}
}
}

View File

@ -59,10 +59,6 @@ body {
border: 1px solid black !important;
}
#game {
background: #dbd242
}
#container.container {
color: black !important;
}
@ -143,4 +139,4 @@ input {
0% {opacity: 0;}
50% {opacity: 1;}
100% {opacity: 0;}
}
}

View File

@ -52,15 +52,6 @@ strong {
border: 1px solid grey;
}
.t-s6 #news {
color: #E0E0E0;
}
.t-s6 #game {
border: 1px solid grey;
background-color: #000000;
}
.t-s6 .container {
color: #999;
}
@ -171,4 +162,4 @@ strong {
.t-s6 #realityanimbg {
filter: invert(1);
}
}

View File

@ -38,10 +38,6 @@ body.t-s8 {
border: 1px solid black;
}
.t-s8 #game {
border: 1px solid black;
}
.t-s8 .secondarytabbtn {
background: #EEEEEE;
border: 1px solid #2196F3;

View File

@ -1,38 +0,0 @@
.tln-active, .tln-wrapper, .tln-line {
margin: 0;
border: 0;
padding: 0;
outline: 0;
box-sizing: border-box;
vertical-align: middle;
list-style: none;
}
.tln-active {
}
.tln-wrapper {
width: 48px;
padding: 10px 19px 35px 0px;
height: 300px;
word-break: break-all;
overflow: hidden;
display: inline-block;
counter-reset: line;
background-color: black;
border-radius: 10px;
margin-right: -16px;
}
.tln-line {
width: 100%;
display: block;
text-align: right;
line-height: 1.3;
font-size: 12px;
color: #66ff66;
}
.tln-line::before {
counter-increment: line;
content: counter(line);
font-size: 12px;
user-select: none;
}

View File

@ -826,11 +826,6 @@
document.getElementById(theme).disabled = false;
}
function toggleNewUI() {
document.getElementById("new-ui").disabled = newUI
newUI = !newUI
}
Array.prototype.nextSiblingIndex = function(current) {
const currentIndex = this.indexOf(current);
if (currentIndex === -1)