mirror of
https://github.com/IvarK/AntimatterDimensionsSourceCode.git
synced 2025-02-16 15:40:16 +00:00
commit
f7ec26fc0a
31
javascripts/core/celestials/pelle/game-end.js
Normal file
31
javascripts/core/celestials/pelle/game-end.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
export const GameEnd = {
|
||||||
|
get endState() {
|
||||||
|
if (this.removeAdditionalEnd) return this.additionalEnd;
|
||||||
|
return Math.max((Math.log10(player.celestials.pelle.records.totalAntimatter.plus(1).log10() + 1) - 8.7) /
|
||||||
|
(Math.log10(9e15) - 8.7) + this.additionalEnd, 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
_additionalEnd: 0,
|
||||||
|
get additionalEnd() {
|
||||||
|
return (player.isGameEnd || this.removeAdditionalEnd) ? this._additionalEnd : 0;
|
||||||
|
},
|
||||||
|
set additionalEnd(x) {
|
||||||
|
this._additionalEnd = (player.isGameEnd || this.removeAdditionalEnd) ? x : 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
removeAdditionalEnd: false,
|
||||||
|
|
||||||
|
gameLoop(diff) {
|
||||||
|
if (this.removeAdditionalEnd) {
|
||||||
|
this.additionalEnd -= 0.12;
|
||||||
|
if (this.additionalEnd < 0) {
|
||||||
|
this.additionalEnd = 0;
|
||||||
|
this.removeAdditionalEnd = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.endState >= 1 && ui.$viewModel.modal.progressBar === undefined) {
|
||||||
|
player.isGameEnd = true;
|
||||||
|
this.additionalEnd += Math.min(diff / 1000 / 20, 0.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
@ -55,14 +55,6 @@ export const Pelle = {
|
|||||||
return Date.now() % 4000 > 500 ? "Pelle" : Pelle.modalTools.randomCrossWords("Pelle");
|
return Date.now() % 4000 > 500 ? "Pelle" : Pelle.modalTools.randomCrossWords("Pelle");
|
||||||
},
|
},
|
||||||
|
|
||||||
additionalEnd: 0,
|
|
||||||
addAdditionalEnd: true,
|
|
||||||
|
|
||||||
get endState() {
|
|
||||||
return Math.max((Math.log10(player.celestials.pelle.records.totalAntimatter.plus(1).log10() + 1) - 8.7) /
|
|
||||||
(Math.log10(9e15) - 8.7) + this.additionalEnd, 0);
|
|
||||||
},
|
|
||||||
|
|
||||||
get isUnlocked() {
|
get isUnlocked() {
|
||||||
return ImaginaryUpgrade(25).isBought;
|
return ImaginaryUpgrade(25).isBought;
|
||||||
},
|
},
|
||||||
@ -108,7 +100,6 @@ export const Pelle = {
|
|||||||
this.cel.armageddonDuration += diff;
|
this.cel.armageddonDuration += diff;
|
||||||
Currency.realityShards.add(this.realityShardGainPerSecond.times(diff).div(1000));
|
Currency.realityShards.add(this.realityShardGainPerSecond.times(diff).div(1000));
|
||||||
PelleRifts.all.forEach(r => r.fill(diff));
|
PelleRifts.all.forEach(r => r.fill(diff));
|
||||||
if (this.endState >= 1 && Pelle.addAdditionalEnd) this.additionalEnd += Math.min(diff / 1000 / 20, 0.1);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -144,7 +135,7 @@ export const Pelle = {
|
|||||||
|
|
||||||
get uselessPerks() {
|
get uselessPerks() {
|
||||||
return [10, 12, 13, 14, 15, 16, 17, 30, 40, 41, 42, 43, 44, 45, 46, 51, 53,
|
return [10, 12, 13, 14, 15, 16, 17, 30, 40, 41, 42, 43, 44, 45, 46, 51, 53,
|
||||||
60, 61, 62, 80, 81, 82, 83, 100, 105, 106];
|
60, 61, 62, 80, 81, 82, 83, 100, 105, 106, 201, 202, 203, 204];
|
||||||
},
|
},
|
||||||
|
|
||||||
// Glyph effects are controlled through other means, but are also enumerated here for accessing to improve UX. Note
|
// Glyph effects are controlled through other means, but are also enumerated here for accessing to improve UX. Note
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
window.format = function format(value, places, placesUnder1000) {
|
window.format = function format(value, places, placesUnder1000) {
|
||||||
if (Pelle.isDoomed) {
|
if (Pelle.isDoomed) {
|
||||||
if ((Pelle.endState - 2.5) / 2 > Math.random()) return "END";
|
if ((GameEnd.endState - 2.5) / 2 > Math.random()) return "END";
|
||||||
}
|
}
|
||||||
return Notations.current.format(value, places, placesUnder1000);
|
return Notations.current.format(value, places, placesUnder1000);
|
||||||
};
|
};
|
||||||
|
@ -34,6 +34,7 @@ export * from "./celestials/pelle/pelle.js";
|
|||||||
export * from "./celestials/pelle/strikes.js";
|
export * from "./celestials/pelle/strikes.js";
|
||||||
export * from "./celestials/pelle/rifts.js";
|
export * from "./celestials/pelle/rifts.js";
|
||||||
export * from "./celestials/pelle/galaxy-generator.js";
|
export * from "./celestials/pelle/galaxy-generator.js";
|
||||||
|
export * from "./celestials/pelle/game-end.js";
|
||||||
export * from "./celestials/celestials.js";
|
export * from "./celestials/celestials.js";
|
||||||
|
|
||||||
export * from "./automator/index.js";
|
export * from "./automator/index.js";
|
||||||
|
@ -143,7 +143,6 @@ export const shortcuts = [
|
|||||||
keys: ["mod", "s"],
|
keys: ["mod", "s"],
|
||||||
type: "bind",
|
type: "bind",
|
||||||
function: () => {
|
function: () => {
|
||||||
if (Pelle.endState >= 4.5) return false;
|
|
||||||
GameStorage.save(false, true);
|
GameStorage.save(false, true);
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
@ -69,7 +69,7 @@ export class GameKeyboard {
|
|||||||
GameKeyboard.spins = [];
|
GameKeyboard.spins = [];
|
||||||
|
|
||||||
function executeKey(action) {
|
function executeKey(action) {
|
||||||
if (ui.$viewModel.modal.progressBar !== undefined) {
|
if (ui.$viewModel.modal.progressBar !== undefined || GameEnd.endState >= 2.5) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return action();
|
return action();
|
||||||
|
@ -33,12 +33,14 @@ export const NG = {
|
|||||||
const secretUnlocks = player.secretUnlocks;
|
const secretUnlocks = player.secretUnlocks;
|
||||||
const newGameBackup = JSON.stringify(player.newGame);
|
const newGameBackup = JSON.stringify(player.newGame);
|
||||||
const secretAchievements = JSON.stringify(player.secretAchievementBits);
|
const secretAchievements = JSON.stringify(player.secretAchievementBits);
|
||||||
|
const prevGameEnd = GameEnd.additionalEnd;
|
||||||
|
GameEnd.removeAdditionalEnd = true;
|
||||||
|
Modal.hideAll();
|
||||||
GameStorage.hardReset();
|
GameStorage.hardReset();
|
||||||
player.newGame = JSON.parse(newGameBackup);
|
player.newGame = JSON.parse(newGameBackup);
|
||||||
player.newGame.current = i;
|
player.newGame.current = i;
|
||||||
player.newGame.plusRecord = Math.max(player.newGame.plusRecord, i);
|
player.newGame.plusRecord = Math.max(player.newGame.plusRecord, i);
|
||||||
player.newGame.minusRecord = Math.min(player.newGame.minusRecord, i);
|
player.newGame.minusRecord = Math.min(player.newGame.minusRecord, i);
|
||||||
Pelle.additionalEnd = 0;
|
|
||||||
player.options = JSON.parse(backUpOptions);
|
player.options = JSON.parse(backUpOptions);
|
||||||
player.secretUnlocks = secretUnlocks;
|
player.secretUnlocks = secretUnlocks;
|
||||||
player.secretAchievementBits = JSON.parse(secretAchievements);
|
player.secretAchievementBits = JSON.parse(secretAchievements);
|
||||||
@ -48,5 +50,7 @@ export const NG = {
|
|||||||
Notations.all.find(n => n.name === player.options.notation).setAsCurrent();
|
Notations.all.find(n => n.name === player.options.notation).setAsCurrent();
|
||||||
ADNotations.Settings.exponentCommas.show = player.options.commas;
|
ADNotations.Settings.exponentCommas.show = player.options.commas;
|
||||||
GameStorage.save();
|
GameStorage.save();
|
||||||
|
player.lastUpdate = Date.now();
|
||||||
|
GameEnd.additionalEnd = Math.min(prevGameEnd, 14) + 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -722,6 +722,7 @@ window.player = {
|
|||||||
showBought: false,
|
showBought: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
isGameEnd: false,
|
||||||
newGame: {
|
newGame: {
|
||||||
current: 0,
|
current: 0,
|
||||||
plusRecord: 0,
|
plusRecord: 0,
|
||||||
|
@ -1352,7 +1352,7 @@ GameDatabase.achievements.normal = [
|
|||||||
id: 188,
|
id: 188,
|
||||||
name: "The End",
|
name: "The End",
|
||||||
description: "Beat the game.",
|
description: "Beat the game.",
|
||||||
checkRequirement: () => Pelle.endState > 1,
|
checkRequirement: () => GameEnd.endState > 1 && !GameEnd.removeAdditionalEnd,
|
||||||
checkEvent: GAME_EVENT.GAME_TICK_AFTER
|
checkEvent: GAME_EVENT.GAME_TICK_AFTER
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
362
javascripts/core/secret-formula/credits.js
Normal file
362
javascripts/core/secret-formula/credits.js
Normal file
@ -0,0 +1,362 @@
|
|||||||
|
import { GameDatabase } from "./game-database.js";
|
||||||
|
|
||||||
|
GameDatabase.credits = {
|
||||||
|
// Must be placed in the order it is desired they appear in the credits
|
||||||
|
roles: {
|
||||||
|
1: "Creator",
|
||||||
|
2: "Technical Architect",
|
||||||
|
3: "Lead Developer",
|
||||||
|
4: "Android Developer",
|
||||||
|
5: "Library Developer",
|
||||||
|
6: "Developer",
|
||||||
|
7: "Lead Design Consultant",
|
||||||
|
8: "Design Consultant",
|
||||||
|
9: "Modal Maker, Lady Taker, Pie Baker",
|
||||||
|
10: "Lurker Tester",
|
||||||
|
11: "Web Tester",
|
||||||
|
12: "Android Tester"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Each person must have a name and at least one role (the index of the desired role in roles). They can also have a
|
||||||
|
// second name, which will appear in parentheses besides their first.
|
||||||
|
people: [
|
||||||
|
{
|
||||||
|
name: "Hevipelle",
|
||||||
|
name2: "Ivar Kerajärvi",
|
||||||
|
roles: 1
|
||||||
|
}, {
|
||||||
|
name: "Razenpok",
|
||||||
|
name2: "Andrei Andreev",
|
||||||
|
roles: 2
|
||||||
|
}, {
|
||||||
|
name: "garnet420",
|
||||||
|
roles: 3
|
||||||
|
}, {
|
||||||
|
name: "Omsi",
|
||||||
|
roles: 3
|
||||||
|
}, {
|
||||||
|
name: "SpectralFlame",
|
||||||
|
name2: "Christopher Yip",
|
||||||
|
roles: 3
|
||||||
|
}, {
|
||||||
|
name: "WaitingIdly",
|
||||||
|
roles: [3, 6, 8, 11, 12]
|
||||||
|
}, {
|
||||||
|
name: "kajfik",
|
||||||
|
name2: "Jakub Kajfosz",
|
||||||
|
roles: 4
|
||||||
|
}, {
|
||||||
|
name: "Patashu",
|
||||||
|
roles: [5, 6, 11]
|
||||||
|
}, {
|
||||||
|
name: "Dan",
|
||||||
|
roles: [6, 11]
|
||||||
|
}, {
|
||||||
|
name: "earth",
|
||||||
|
name2: "Jace Royer",
|
||||||
|
roles: [6, 9, 11, 12]
|
||||||
|
}, {
|
||||||
|
name: "Hira",
|
||||||
|
roles: [6, 11, 12]
|
||||||
|
}, {
|
||||||
|
name: "IkerStream",
|
||||||
|
name2: "Iker de Aguirre",
|
||||||
|
roles: [6, 11]
|
||||||
|
}, {
|
||||||
|
name: "L4R5",
|
||||||
|
name2: "Lars Wolf",
|
||||||
|
roles: [6, 11, 12]
|
||||||
|
}, {
|
||||||
|
name: "Pichusuperlover",
|
||||||
|
roles: [6, 8, 11]
|
||||||
|
}, {
|
||||||
|
name: "realrapidjazz",
|
||||||
|
roles: [6, 7]
|
||||||
|
}, {
|
||||||
|
name: "Scarlet",
|
||||||
|
roles: [6, 11, 12]
|
||||||
|
}, {
|
||||||
|
name: "slabdrill",
|
||||||
|
roles: 6
|
||||||
|
}, {
|
||||||
|
name: "Acamaeda",
|
||||||
|
roles: [8, 11]
|
||||||
|
}, {
|
||||||
|
name: "Dravitar",
|
||||||
|
name2: "Alex Henderson",
|
||||||
|
roles: 10
|
||||||
|
}, {
|
||||||
|
name: "Aesis",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "AFYINEE",
|
||||||
|
name2: "Gabriel HADDAG",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Alexitato",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Anno",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Archa",
|
||||||
|
name2: "Myresa",
|
||||||
|
roles: [11, 12]
|
||||||
|
}, {
|
||||||
|
name: "ArrowBounce",
|
||||||
|
name2: "Timothy Su",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Birb",
|
||||||
|
name2: "Kelsey Black",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Boo",
|
||||||
|
name2: "Jean-Christophe Bourgault",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "CaptainGalaxy",
|
||||||
|
name2: "Ovidijus Točelis",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "ChaoticHans",
|
||||||
|
roles: [11, 12]
|
||||||
|
}, {
|
||||||
|
name: "cubic frog",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "dankesehr",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Davixx",
|
||||||
|
name2: "Davide Fedele",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Empireus",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "GirixK",
|
||||||
|
name2: "Nikola Jelinčić",
|
||||||
|
roles: [11, 12]
|
||||||
|
}, {
|
||||||
|
name: "GoldenTritium",
|
||||||
|
roles: [11, 12]
|
||||||
|
}, {
|
||||||
|
name: "Kael",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Lynn",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Merp",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "philipebreaker",
|
||||||
|
name2: "Philipe",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Phillip Marshall",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Phoenix",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Reda Kotob",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Saturnus",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "SereKabii",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Sheer",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "sirusi",
|
||||||
|
name2: "Vinícius Oliveira Martins",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Spanosa",
|
||||||
|
name2: "Jared K",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Sparticle999",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "SpicyCrusader13",
|
||||||
|
roles: [11, 12]
|
||||||
|
}, {
|
||||||
|
name: "Storm",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "SzyszakS",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Tacitus",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Typh",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Vnge",
|
||||||
|
name2: "Ben Parrish",
|
||||||
|
roles: [11, 12]
|
||||||
|
}, {
|
||||||
|
name: "Xemadus",
|
||||||
|
name2: "Jonathan Gibson",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Young Woo Joo",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "Zipi",
|
||||||
|
roles: 11
|
||||||
|
}, {
|
||||||
|
name: "about:blank",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "ÆiOuF",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Anjinho01",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Anthios",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Auti",
|
||||||
|
name2: "Alice Tolle",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Buck",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Barrin84",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "ChizuX",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Circle",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Crinkly Weasel",
|
||||||
|
name2: "Aaryan Sarawgi",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "DarthDie",
|
||||||
|
name2: "Briar Bowser",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Epsilon",
|
||||||
|
name2: "Coolguystorm",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Firecracker",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Gaunter",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "HarrisL2",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Hellbach",
|
||||||
|
name2: "Asher Günther",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "hen-ben",
|
||||||
|
name2: "Henry Ellenberg",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "ImpossibleSalsa",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Johanniklas",
|
||||||
|
name2: "Jan-Niklas Petersen",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "kaislash",
|
||||||
|
name2: "Lily",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Kirku",
|
||||||
|
name2: "Fabian Makowski",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Kirin",
|
||||||
|
name2: "Arthur",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Mirai",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Monoma",
|
||||||
|
name2: "ARoman Ruiz",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Nani",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "NotBrewst",
|
||||||
|
name2: "Luc Leblanc",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "opdollar",
|
||||||
|
name2: "Zane Coole",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Pavlxiiv",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Porygon-Z",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "PotatoTIAB",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Razor",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Razvan Cercel",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Rukimix",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Skunky",
|
||||||
|
name2: "Lukas",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Socks",
|
||||||
|
name2: "Hannah Pocks",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Taylor Reeves",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Tim Wong",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "tragedt",
|
||||||
|
name2: "Ethan Manninen",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "Valentine Clarissa Alanis Star Z",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "vanadium_void",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "X3N0_32",
|
||||||
|
roles: 12
|
||||||
|
}, {
|
||||||
|
name: "ZylaKat",
|
||||||
|
name2: "Katherine Goforth-Harbin",
|
||||||
|
roles: 12
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
GameDatabase.credits.roles.count = Object.keys(GameDatabase.credits.roles).length;
|
@ -41,3 +41,5 @@ import "./script-templates.js";
|
|||||||
import "./speedrun-milestones.js";
|
import "./speedrun-milestones.js";
|
||||||
|
|
||||||
import "./h2p.js";
|
import "./h2p.js";
|
||||||
|
|
||||||
|
import "./credits.js";
|
@ -69,6 +69,12 @@ export const GameStorage = {
|
|||||||
this.loadPlayerObject(player, overrideLastUpdate);
|
this.loadPlayerObject(player, overrideLastUpdate);
|
||||||
if (player.speedrun?.isActive) Speedrun.setSegmented(true);
|
if (player.speedrun?.isActive) Speedrun.setSegmented(true);
|
||||||
this.save(true);
|
this.save(true);
|
||||||
|
|
||||||
|
// This is to fix a very specific exploit: When the game is ending, some tabs get hidden
|
||||||
|
// The options tab is the first one of those, which makes the player redirect to the Pelle tab
|
||||||
|
// You can doom your reality even if you haven't unlocked infinity yet if you import while the Pelle tab
|
||||||
|
// is showing
|
||||||
|
Tab.options.subtabs[0].show();
|
||||||
GameUI.notify.info("Game imported");
|
GameUI.notify.info("Game imported");
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -133,7 +139,7 @@ export const GameStorage = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
save(silent = false, manual = false) {
|
save(silent = false, manual = false) {
|
||||||
if (Pelle.endState >= 4.5) return;
|
if (GameEnd.endState >= 4.5 && !GameEnd.removeAdditionalEnd) return;
|
||||||
if (GlyphSelection.active || ui.$viewModel.modal.progressBar !== undefined) return;
|
if (GlyphSelection.active || ui.$viewModel.modal.progressBar !== undefined) return;
|
||||||
this.lastSaveTime = Date.now();
|
this.lastSaveTime = Date.now();
|
||||||
GameIntervals.save.restart();
|
GameIntervals.save.restart();
|
||||||
@ -172,7 +178,7 @@ export const GameStorage = {
|
|||||||
|
|
||||||
hardReset() {
|
hardReset() {
|
||||||
this.loadPlayerObject(Player.defaultStart);
|
this.loadPlayerObject(Player.defaultStart);
|
||||||
this.save();
|
this.save(true);
|
||||||
Tab.dimensions.antimatter.show();
|
Tab.dimensions.antimatter.show();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -216,6 +222,7 @@ export const GameStorage = {
|
|||||||
checkPerkValidity();
|
checkPerkValidity();
|
||||||
V.updateTotalRunUnlocks();
|
V.updateTotalRunUnlocks();
|
||||||
Enslaved.boostReality = false;
|
Enslaved.boostReality = false;
|
||||||
|
GameEnd.additionalEnd = 0;
|
||||||
Theme.set(player.options.theme);
|
Theme.set(player.options.theme);
|
||||||
Notations.find(player.options.notation).setAsCurrent(true);
|
Notations.find(player.options.notation).setAsCurrent(true);
|
||||||
ADNotations.Settings.exponentCommas.show = player.options.commas;
|
ADNotations.Settings.exponentCommas.show = player.options.commas;
|
||||||
|
@ -13,7 +13,7 @@ class SubtabState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get isPermanentlyHidden() {
|
get isPermanentlyHidden() {
|
||||||
return this.config.hideAt <= Pelle.endState;
|
return this.config.hideAt <= GameEnd.endState;
|
||||||
}
|
}
|
||||||
|
|
||||||
get hidable() {
|
get hidable() {
|
||||||
@ -99,7 +99,7 @@ class TabState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get isPermanentlyHidden() {
|
get isPermanentlyHidden() {
|
||||||
return this.config.hideAt <= Pelle.endState;
|
return this.config.hideAt <= GameEnd.endState;
|
||||||
}
|
}
|
||||||
|
|
||||||
get hidable() {
|
get hidable() {
|
||||||
|
@ -606,6 +606,7 @@ export function gameLoop(passDiff, options = {}) {
|
|||||||
AutomatorBackend.update(realDiff);
|
AutomatorBackend.update(realDiff);
|
||||||
Pelle.gameLoop(realDiff);
|
Pelle.gameLoop(realDiff);
|
||||||
GalaxyGenerator.loop(realDiff);
|
GalaxyGenerator.loop(realDiff);
|
||||||
|
GameEnd.gameLoop(realDiff);
|
||||||
|
|
||||||
if (Tabs.current.isPermanentlyHidden) {
|
if (Tabs.current.isPermanentlyHidden) {
|
||||||
const tab = Tabs.all.reverse().find(t => !t.isPermanentlyHidden && t.id !== 10);
|
const tab = Tabs.all.reverse().find(t => !t.isPermanentlyHidden && t.id !== 10);
|
||||||
|
@ -34,6 +34,11 @@ export default {
|
|||||||
InfoButton,
|
InfoButton,
|
||||||
TimeTheoremShop
|
TimeTheoremShop
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
rollCredits: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
view() {
|
view() {
|
||||||
return this.$viewModel;
|
return this.$viewModel;
|
||||||
@ -52,6 +57,11 @@ export default {
|
|||||||
return `stylesheets/theme-${this.view.theme}.css`;
|
return `stylesheets/theme-${this.view.theme}.css`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
update() {
|
||||||
|
this.rollCredits = GameEnd.endState >= 2.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -95,9 +105,9 @@ export default {
|
|||||||
<ModernSidebar v-if="view.newUI" />
|
<ModernSidebar v-if="view.newUI" />
|
||||||
<SaveTimer />
|
<SaveTimer />
|
||||||
<SpeedrunStatus />
|
<SpeedrunStatus />
|
||||||
<FadeToBlack />
|
<FadeToBlack v-if="rollCredits" />
|
||||||
<CreditsContainer />
|
<CreditsContainer v-if="rollCredits" />
|
||||||
<NewGame />
|
<NewGame v-if="rollCredits" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -7,6 +7,11 @@ export default {
|
|||||||
required: true,
|
required: true,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
forceDontShowModal: false
|
||||||
|
};
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
this.on$(GAME_EVENT.CLOSE_MODAL, this.hide);
|
this.on$(GAME_EVENT.CLOSE_MODAL, this.hide);
|
||||||
},
|
},
|
||||||
@ -14,6 +19,10 @@ export default {
|
|||||||
document.activeElement.blur();
|
document.activeElement.blur();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
update() {
|
||||||
|
// 2.5 is the cutoff point where the screen starts fading
|
||||||
|
this.forceDontShowModal = GameEnd.endState > 2.5;
|
||||||
|
},
|
||||||
hide() {
|
hide() {
|
||||||
if (this.modal.hide) this.modal.hide();
|
if (this.modal.hide) this.modal.hide();
|
||||||
else Modal.hide();
|
else Modal.hide();
|
||||||
@ -25,11 +34,11 @@ export default {
|
|||||||
<template>
|
<template>
|
||||||
<component
|
<component
|
||||||
:is="modal.component"
|
:is="modal.component"
|
||||||
v-if="modal.isBare"
|
v-if="modal.isBare && !forceDontShowModal"
|
||||||
:modal-config="modal.props"
|
:modal-config="modal.props"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
v-else
|
v-else-if="!forceDontShowModal"
|
||||||
class="c-modal l-modal"
|
class="c-modal l-modal"
|
||||||
>
|
>
|
||||||
<component
|
<component
|
||||||
|
@ -4,11 +4,11 @@ import ModalWrapperChoice from "@/components/modals/ModalWrapperChoice";
|
|||||||
export default {
|
export default {
|
||||||
name: "HardResetModal",
|
name: "HardResetModal",
|
||||||
components: {
|
components: {
|
||||||
ModalWrapperChoice,
|
ModalWrapperChoice
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
input: "",
|
input: ""
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -5,7 +5,6 @@ export default {
|
|||||||
name: "AntimatterDimensionProgressBar",
|
name: "AntimatterDimensionProgressBar",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isVisible: true,
|
|
||||||
fill: 0,
|
fill: 0,
|
||||||
tooltip: ""
|
tooltip: ""
|
||||||
};
|
};
|
||||||
@ -23,7 +22,6 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
// eslint-disable-next-line complexity
|
// eslint-disable-next-line complexity
|
||||||
update() {
|
update() {
|
||||||
this.isVisible = Pelle.endState < 4.5;
|
|
||||||
const setProgress = (current, goal, tooltip) => {
|
const setProgress = (current, goal, tooltip) => {
|
||||||
this.fill = Math.clampMax(current.pLog10() / Decimal.log10(goal), 1);
|
this.fill = Math.clampMax(current.pLog10() / Decimal.log10(goal), 1);
|
||||||
this.tooltip = tooltip;
|
this.tooltip = tooltip;
|
||||||
@ -120,7 +118,6 @@ export default {
|
|||||||
class="c-progress-bar__fill"
|
class="c-progress-bar__fill"
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
v-if="isVisible"
|
|
||||||
v-tooltip="tooltip"
|
v-tooltip="tooltip"
|
||||||
class="c-progress-bar__percents"
|
class="c-progress-bar__percents"
|
||||||
>
|
>
|
||||||
|
@ -51,7 +51,6 @@ export default {
|
|||||||
return this.isShown || this.isUnlocked || this.amount.gt(0);
|
return this.isShown || this.isUnlocked || this.amount.gt(0);
|
||||||
},
|
},
|
||||||
boughtTooltip() {
|
boughtTooltip() {
|
||||||
if (this.end) return "";
|
|
||||||
if (this.isCapped) return `Enslaved prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`;
|
if (this.isCapped) return `Enslaved prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`;
|
||||||
if (this.isContinuumActive) return "Continuum produces all your Antimatter Dimensions";
|
if (this.isContinuumActive) return "Continuum produces all your Antimatter Dimensions";
|
||||||
return `Purchased ${quantifyInt("time", this.bought)}`;
|
return `Purchased ${quantifyInt("time", this.bought)}`;
|
||||||
@ -62,7 +61,6 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.end = Pelle.endState >= 4.5;
|
|
||||||
const tier = this.tier;
|
const tier = this.tier;
|
||||||
if (tier > DimBoost.maxDimensionsUnlockable) return;
|
if (tier > DimBoost.maxDimensionsUnlockable) return;
|
||||||
const dimension = AntimatterDimension(tier);
|
const dimension = AntimatterDimension(tier);
|
||||||
|
@ -27,9 +27,16 @@ export default {
|
|||||||
isSacrificeUnlocked: false,
|
isSacrificeUnlocked: false,
|
||||||
buy10Mult: new Decimal(0),
|
buy10Mult: new Decimal(0),
|
||||||
currentSacrifice: new Decimal(0),
|
currentSacrifice: new Decimal(0),
|
||||||
multiplierText: "",
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
multiplierText() {
|
||||||
|
const sacText = this.isSacrificeUnlocked
|
||||||
|
? ` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice, 2, 2)}`
|
||||||
|
: "";
|
||||||
|
return `Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult, 2, 1)}${sacText}`;
|
||||||
|
},
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.isInMatterChallenge = Player.isInMatterChallenge;
|
this.isInMatterChallenge = Player.isInMatterChallenge;
|
||||||
@ -57,10 +64,6 @@ export default {
|
|||||||
this.isSacrificeUnlocked = Sacrifice.isVisible;
|
this.isSacrificeUnlocked = Sacrifice.isVisible;
|
||||||
this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier);
|
this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier);
|
||||||
this.currentSacrifice.copyFrom(Sacrifice.totalBoost);
|
this.currentSacrifice.copyFrom(Sacrifice.totalBoost);
|
||||||
|
|
||||||
this.multiplierText = `Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult, 2, 1)}`;
|
|
||||||
if (this.isSacrificeUnlocked) this.multiplierText +=
|
|
||||||
` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice, 2, 2)}`;
|
|
||||||
},
|
},
|
||||||
quickReset() {
|
quickReset() {
|
||||||
softReset(-1, true, true);
|
softReset(-1, true, true);
|
||||||
|
@ -8,7 +8,6 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
end: false,
|
|
||||||
isSacrificeUnlocked: false,
|
isSacrificeUnlocked: false,
|
||||||
isSacrificeAffordable: false,
|
isSacrificeAffordable: false,
|
||||||
currentSacrifice: new Decimal(0),
|
currentSacrifice: new Decimal(0),
|
||||||
@ -18,13 +17,11 @@ export default {
|
|||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
sacrificeTooltip() {
|
sacrificeTooltip() {
|
||||||
if (this.end) return "";
|
|
||||||
return `Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost, 2, 2)}`;
|
return `Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost, 2, 2)}`;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.end = Pelle.endState >= 4.5;
|
|
||||||
const isSacrificeUnlocked = Sacrifice.isVisible;
|
const isSacrificeUnlocked = Sacrifice.isVisible;
|
||||||
this.isSacrificeUnlocked = isSacrificeUnlocked;
|
this.isSacrificeUnlocked = isSacrificeUnlocked;
|
||||||
if (!isSacrificeUnlocked) return;
|
if (!isSacrificeUnlocked) return;
|
||||||
|
@ -9,7 +9,6 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
end: false,
|
|
||||||
isUnlocked: false,
|
isUnlocked: false,
|
||||||
isCapped: false,
|
isCapped: false,
|
||||||
multiplier: new Decimal(0),
|
multiplier: new Decimal(0),
|
||||||
@ -50,7 +49,6 @@ export default {
|
|||||||
return this.isShown || this.isUnlocked || this.amount.gt(0);
|
return this.isShown || this.isUnlocked || this.amount.gt(0);
|
||||||
},
|
},
|
||||||
boughtTooltip() {
|
boughtTooltip() {
|
||||||
if (this.end) return "";
|
|
||||||
if (this.isCapped) return `Enslaved prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`;
|
if (this.isCapped) return `Enslaved prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`;
|
||||||
if (this.isContinuumActive) return "Continuum produces all your Antimatter Dimensions";
|
if (this.isContinuumActive) return "Continuum produces all your Antimatter Dimensions";
|
||||||
return `Purchased ${quantifyInt("time", this.bought)}`;
|
return `Purchased ${quantifyInt("time", this.bought)}`;
|
||||||
@ -61,7 +59,6 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.end = Pelle.endState >= 4.5;
|
|
||||||
const tier = this.tier;
|
const tier = this.tier;
|
||||||
if (tier > DimBoost.maxDimensionsUnlockable) return;
|
if (tier > DimBoost.maxDimensionsUnlockable) return;
|
||||||
const dimension = AntimatterDimension(tier);
|
const dimension = AntimatterDimension(tier);
|
||||||
|
@ -25,7 +25,6 @@ export default {
|
|||||||
buy10Mult: new Decimal(0),
|
buy10Mult: new Decimal(0),
|
||||||
currentSacrifice: new Decimal(0),
|
currentSacrifice: new Decimal(0),
|
||||||
sacrificeBoost: new Decimal(0),
|
sacrificeBoost: new Decimal(0),
|
||||||
multiplierText: "",
|
|
||||||
disabledCondition: "",
|
disabledCondition: "",
|
||||||
isQuickResetAvailable: false,
|
isQuickResetAvailable: false,
|
||||||
hasContinuum: false,
|
hasContinuum: false,
|
||||||
@ -36,6 +35,12 @@ export default {
|
|||||||
sacrificeTooltip() {
|
sacrificeTooltip() {
|
||||||
return `Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost, 2, 2)}`;
|
return `Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost, 2, 2)}`;
|
||||||
},
|
},
|
||||||
|
multiplierText() {
|
||||||
|
const sacText = this.isSacrificeUnlocked
|
||||||
|
? ` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice, 2, 2)}`
|
||||||
|
: "";
|
||||||
|
return `Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult, 2, 1)}${sacText}`;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
maxAll() {
|
maxAll() {
|
||||||
@ -74,16 +79,13 @@ export default {
|
|||||||
const isSacrificeUnlocked = Sacrifice.isVisible;
|
const isSacrificeUnlocked = Sacrifice.isVisible;
|
||||||
this.isSacrificeUnlocked = isSacrificeUnlocked;
|
this.isSacrificeUnlocked = isSacrificeUnlocked;
|
||||||
|
|
||||||
|
this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier);
|
||||||
|
|
||||||
if (!isSacrificeUnlocked) return;
|
if (!isSacrificeUnlocked) return;
|
||||||
this.isSacrificeAffordable = Sacrifice.canSacrifice;
|
this.isSacrificeAffordable = Sacrifice.canSacrifice;
|
||||||
this.currentSacrifice.copyFrom(Sacrifice.totalBoost);
|
this.currentSacrifice.copyFrom(Sacrifice.totalBoost);
|
||||||
this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier);
|
|
||||||
this.sacrificeBoost.copyFrom(Sacrifice.nextBoost);
|
this.sacrificeBoost.copyFrom(Sacrifice.nextBoost);
|
||||||
this.disabledCondition = Sacrifice.disabledCondition;
|
this.disabledCondition = Sacrifice.disabledCondition;
|
||||||
|
|
||||||
this.multiplierText = `Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult, 2, 1)}`;
|
|
||||||
if (this.isSacrificeUnlocked) this.multiplierText +=
|
|
||||||
` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice, 2, 2)}`;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -5,10 +5,30 @@ export default {
|
|||||||
return {
|
return {
|
||||||
rolling: false,
|
rolling: false,
|
||||||
scroll: 0,
|
scroll: 0,
|
||||||
audio: null,
|
audio: null
|
||||||
isDoomed: false
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
people() { return GameDatabase.credits.people; },
|
||||||
|
roles() { return GameDatabase.credits.roles; },
|
||||||
|
creditStyles() {
|
||||||
|
return {
|
||||||
|
bottom: `${this.scroll}rem`,
|
||||||
|
display: this.rolling ? "block" : "none"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
celestialDisplays() {
|
||||||
|
return {
|
||||||
|
teresa: Teresa.symbol,
|
||||||
|
effarig: Effarig.symbol,
|
||||||
|
enslaved: Enslaved.symbol,
|
||||||
|
v: V.symbol,
|
||||||
|
ra: Ra.symbol,
|
||||||
|
laitela: Laitela.symbol,
|
||||||
|
pelle: Pelle.symbol
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
watch: {
|
watch: {
|
||||||
rolling(newVal, oldVal) {
|
rolling(newVal, oldVal) {
|
||||||
if (!oldVal && newVal && this.audio === null) {
|
if (!oldVal && newVal && this.audio === null) {
|
||||||
@ -19,11 +39,14 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.isDoomed = Pelle.isDoomed;
|
this.rolling = GameEnd.endState > 4.5;
|
||||||
if (!this.isDoomed) return;
|
this.scroll = (GameEnd.endState - 4.5) * 48;
|
||||||
this.rolling = Pelle.endState > 4.5;
|
if (this.audio) this.audio.volume = Math.clamp((GameEnd.endState - 4.5), 0, 0.3);
|
||||||
this.scroll = (Pelle.endState - 4.5) / 2 * 100;
|
},
|
||||||
if (this.audio) this.audio.volume = Math.clamp(Pelle.endState - 4.5, 0, 0.3);
|
relevantPeople(role) {
|
||||||
|
return this.people
|
||||||
|
.filter(x => (typeof x.roles === "number" ? x.roles === role : x.roles.includes(role)))
|
||||||
|
.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -31,174 +54,202 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-if="isDoomed"
|
class="c-credits-container"
|
||||||
class="credits-container"
|
:style="creditStyles"
|
||||||
:style="{
|
|
||||||
top: `${100 - scroll}vh`,
|
|
||||||
display: rolling ? 'block' : 'none'
|
|
||||||
}"
|
|
||||||
>
|
>
|
||||||
<h1>Antimatter Dimensions</h1>
|
<div
|
||||||
|
v-for="(celSymbol, celIndex) in celestialDisplays"
|
||||||
|
:key="celIndex + '-end-credit-symbol-disp'"
|
||||||
|
class="c-credits-cel-symbol"
|
||||||
|
:class="`c-${celIndex}-credits`"
|
||||||
|
v-html="celSymbol"
|
||||||
|
/>
|
||||||
|
<h1 class="c-credits-header">
|
||||||
|
Antimatter Dimensions
|
||||||
|
</h1>
|
||||||
|
|
||||||
<h2>Created by</h2>
|
<div
|
||||||
<p>Ivar "Hevipelle" Kerajärvi</p>
|
v-for="role in roles.count"
|
||||||
|
:key="role"
|
||||||
<h2>Technical Architect</h2>
|
>
|
||||||
<p>Razenpok (Andrei Andreev)</p>
|
<h2 class="c-credits-section">
|
||||||
|
{{ pluralize(roles[role], relevantPeople(role).length) }}
|
||||||
<h2>Head Developer</h2>
|
</h2>
|
||||||
<p>SpectralFlame (Christopher Yip)</p>
|
<div :class="{ 'l-credits--bulk': relevantPeople(role).length > 10}">
|
||||||
<p>Omsi</p>
|
<div
|
||||||
|
v-for="person in relevantPeople(role)"
|
||||||
<h2>Developer</h2>
|
:key="person.name"
|
||||||
<p>Dan</p>
|
class="c-credit-entry"
|
||||||
<p>realrapidjazz</p>
|
>
|
||||||
<p>earth</p>
|
{{ person.name }}
|
||||||
<p>IkerStream</p>
|
<span v-if="person.name2">
|
||||||
<p>Pichusuperlover</p>
|
({{ person.name2 }})
|
||||||
<p>Patashu</p>
|
</span>
|
||||||
<p>L4R5 (Lars Wolf)</p>
|
</div>
|
||||||
<p>Hira</p>
|
</div>
|
||||||
<p>Sparticle999</p>
|
|
||||||
|
|
||||||
<h2>Modal Maker, Lady Taker, Pie Baker</h2>
|
|
||||||
<p>earth</p>
|
|
||||||
|
|
||||||
<h2>Android Developer</h2>
|
|
||||||
<p>kajfik (Jakub Kajfosz)</p>
|
|
||||||
|
|
||||||
<h2>Library Developer</h2>
|
|
||||||
<p>Patashu</p>
|
|
||||||
|
|
||||||
<h2>Design Consoltant</h2>
|
|
||||||
<p>Pichusuperlover</p>
|
|
||||||
<p>Acamaeda</p>
|
|
||||||
|
|
||||||
<h2>Web Tester</h2>
|
|
||||||
<div class="l-credits--left">
|
|
||||||
<p>Aesis</p>
|
|
||||||
<p>Alexitato</p>
|
|
||||||
<p>Birb (Kelsey Black)</p>
|
|
||||||
<p>CaptainGalaxy (Ovidijus Točelis)</p>
|
|
||||||
<p>cubic frog</p>
|
|
||||||
<p>dankesehr</p>
|
|
||||||
<p>earth</p>
|
|
||||||
<p>Hira</p>
|
|
||||||
<p>Kael</p>
|
|
||||||
<p>Merp</p>
|
|
||||||
<p>Phoenix</p>
|
|
||||||
<p>Phillip Marshall</p>
|
|
||||||
<p>Reda Kotob</p>
|
|
||||||
<p>sirusi (Vinícius Oliveira Martins)</p>
|
|
||||||
<p>SpicyCrusader13</p>
|
|
||||||
<p>SzyszakS</p>
|
|
||||||
<p>Typh</p>
|
|
||||||
<p>Xemadus (Jonathan Gibson)</p>
|
|
||||||
<p>Zipi</p>
|
|
||||||
</div>
|
|
||||||
<div class="l-credits--right">
|
|
||||||
<p>Acamaeda</p>
|
|
||||||
<p>AFYINEE (Gabriel HADDAG)</p>
|
|
||||||
<p>Archa (Myresa)</p>
|
|
||||||
<p>Boo (Jean-Christophe Bourgault)</p>
|
|
||||||
<p>ChaoticHans</p>
|
|
||||||
<p>Dan</p>
|
|
||||||
<p>Davixx (Davide Fedele)</p>
|
|
||||||
<p>Empireus</p>
|
|
||||||
<p>IkerStream (Iker de Aguirre)</p>
|
|
||||||
<p>Lynn</p>
|
|
||||||
<p>Patashu</p>
|
|
||||||
<p>philipebreaker (Philipe)</p>
|
|
||||||
<p>Pichusuperlover</p>
|
|
||||||
<p>Saturnus</p>
|
|
||||||
<p>Spanosa (Jared K)</p>
|
|
||||||
<p>Storm</p>
|
|
||||||
<p>Tacitus</p>
|
|
||||||
<p>Vnge (Ben Parrish)</p>
|
|
||||||
<p>Young Woo Joo</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2>Android Tester:</h2>
|
<br><br><br><br><br><br><br><br><br>
|
||||||
<div class="l-credits--left">
|
<h1 class="c-credits-header">
|
||||||
<p>Archa (Myresa)</p>
|
Thank you so much for playing!
|
||||||
<p>ChaoticHans</p>
|
</h1>
|
||||||
<p>Vnge (Ben Parrish)</p>
|
|
||||||
<p>Rukimix</p>
|
|
||||||
<p>Anjinho01</p>
|
|
||||||
<p>HarrisL2</p>
|
|
||||||
<p>hen-ben (Henry Ellenberg)</p>
|
|
||||||
<p>Gaunter</p>
|
|
||||||
<p>Socks (Hannah Pocks)</p>
|
|
||||||
<p>Johanniklas (Jan-Niklas Petersen)</p>
|
|
||||||
<p>Razor</p>
|
|
||||||
<p>Barrin84</p>
|
|
||||||
<p>DarthDie (Briar Bowser)</p>
|
|
||||||
<p>Monoma (ARoman Ruiz)</p>
|
|
||||||
<p>Nani</p>
|
|
||||||
<p>Kirin Nijinski (Arthur)</p>
|
|
||||||
<p>about:blank</p>
|
|
||||||
<p>Epsilon (Coolguystorm)</p>
|
|
||||||
<p>Razvan Cercel</p>
|
|
||||||
</div>
|
|
||||||
<div class="l-credits--right">
|
|
||||||
<p>Hira</p>
|
|
||||||
<p>Hellbach (Asher Günther)</p>
|
|
||||||
<p>Buck</p>
|
|
||||||
<p>Valentine Clarissa Alanis Star Z</p>
|
|
||||||
<p>Porygon-Z</p>
|
|
||||||
<p>tragedt (Ethan Manninen)</p>
|
|
||||||
<p>SpicyCrusader13</p>
|
|
||||||
<p>Firecracker</p>
|
|
||||||
<p>opdollar (Zane Coole)</p>
|
|
||||||
<p>ImpossibleSalsa</p>
|
|
||||||
<p>kaislash (Lily)</p>
|
|
||||||
<p>Skunky (Lukas)</p>
|
|
||||||
<p>ZylaKat (Katherine Goforth-Harbin)</p>
|
|
||||||
<p>vanadium_void</p>
|
|
||||||
<p>Circle</p>
|
|
||||||
<p>PotatoTIAB</p>
|
|
||||||
<p>Pavlxiiv</p>
|
|
||||||
<p>Kirku (Fabian Makowski)</p>
|
|
||||||
<p>Tim Wong</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br><br><br>
|
|
||||||
<h1>Thank you so much for playing!</h1>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.credits-container {
|
.c-credits-container {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
z-index: 7;
|
z-index: 9;
|
||||||
color: rgb(185, 185, 185);
|
color: rgb(185, 185, 185);
|
||||||
}
|
pointer-events: none;
|
||||||
|
transform: translateY(100%);
|
||||||
|
}
|
||||||
|
|
||||||
h1 {
|
.c-credits-header {
|
||||||
color: yellow;
|
color: yellow;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
.c-credits-section {
|
||||||
margin-top: 20rem;
|
margin-top: 10rem;
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
color: white;
|
color: white;
|
||||||
text-shadow: 1px 1px 2px turquoise;
|
text-shadow: 1px 1px 2px turquoise;
|
||||||
}
|
}
|
||||||
|
|
||||||
.l-credits--left {
|
.l-credits--bulk {
|
||||||
width: 50%;
|
display: grid;
|
||||||
float: left;
|
grid-template-columns: repeat(2, 1fr);
|
||||||
}
|
position: relative;
|
||||||
|
width: 76%;
|
||||||
|
left: 12%;
|
||||||
|
}
|
||||||
|
|
||||||
.l-credits--right {
|
.c-credit-entry {
|
||||||
width: 50%;
|
margin-top: 1rem;
|
||||||
overflow: hidden;
|
font-size: 1.3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
|
||||||
margin-top: 1rem;
|
.c-credits-cel-symbol {
|
||||||
}
|
position: absolute;
|
||||||
|
font-size: 14rem;
|
||||||
|
text-shadow: 0 0 3rem;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
height: 14rem;
|
||||||
|
width: 14rem;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-teresa-credits {
|
||||||
|
left: 65%;
|
||||||
|
top: 130rem;
|
||||||
|
color: var(--color-teresa--base);
|
||||||
|
animation: a-teresa-credits 10s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-effarig-credits {
|
||||||
|
left: 80%;
|
||||||
|
top: 50rem;
|
||||||
|
color: #f40;
|
||||||
|
animation: a-effarig-credits 4s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-enslaved-credits {
|
||||||
|
left: 52%;
|
||||||
|
top: 220rem;
|
||||||
|
color: var(--color-enslaved-base);
|
||||||
|
animation: a-enslaved-credits 10s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-v-credits {
|
||||||
|
left: 20%;
|
||||||
|
top: 170rem;
|
||||||
|
color: var(--color-v--base);
|
||||||
|
animation: a-v-credits 15s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-ra-credits {
|
||||||
|
left: 44%;
|
||||||
|
top: 300rem;
|
||||||
|
color: var(--color-ra-base);
|
||||||
|
animation: a-ra-credits 10s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-laitela-credits {
|
||||||
|
left: 13%;
|
||||||
|
top: 90rem;
|
||||||
|
color: #ffffff;
|
||||||
|
animation: a-laitela-credits 5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-pelle-credits {
|
||||||
|
left: 30%;
|
||||||
|
top: 8rem;
|
||||||
|
color: var(--color-pelle--base);
|
||||||
|
animation: a-pelle-credits 5s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes a-teresa-credits {
|
||||||
|
0% { transform: rotate(61deg); }
|
||||||
|
10% { transform: rotate(322deg); }
|
||||||
|
20% { transform: rotate(235deg); }
|
||||||
|
30% { transform: rotate(222deg); }
|
||||||
|
40% { transform: rotate(105deg); }
|
||||||
|
50% { transform: rotate(33deg); }
|
||||||
|
60% { transform: rotate(103deg); }
|
||||||
|
70% { transform: rotate(158deg); }
|
||||||
|
80% { transform: rotate(41deg); }
|
||||||
|
90% { transform: rotate(73deg); }
|
||||||
|
100% { transform: rotate(61deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes a-effarig-credits {
|
||||||
|
0% { opacity: 0.8; text-shadow: 0 0 3rem; }
|
||||||
|
50% { opacity: 1; text-shadow: 0 0 4rem, 0 0 4rem; }
|
||||||
|
100% { opacity: 0.8; text-shadow: 0 0 3rem; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes a-enslaved-credits {
|
||||||
|
0% { transform: translateX(-50%) rotate(0); }
|
||||||
|
100% { transform: translateX(-50%) rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We unfortunately have to do it this way, because due to how the benzene unicode symbol works, 0 and 120deg aren't
|
||||||
|
perfectly the same. */
|
||||||
|
@keyframes a-v-credits {
|
||||||
|
0% { transform: translateX(-50%) rotate(0) scale(0.8); }
|
||||||
|
16.67% { transform: translateX(-50%) rotate(60deg) scale(1.2); }
|
||||||
|
33.33% { transform: translateX(-50%) rotate(120deg) scale(0.8); }
|
||||||
|
50% { transform: translateX(-50%) rotate(180deg) scale(1.2); }
|
||||||
|
66.67% { transform: translateX(-50%) rotate(240deg) scale(0.8); }
|
||||||
|
83.33% { transform: translateX(-50%) rotate(300deg) scale(1.2); }
|
||||||
|
100% { transform: translateX(-50%) rotate(360deg) scale(0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes a-ra-credits {
|
||||||
|
0% { opacity: 0.1; transform: translateX(-50%) scale(0.2); }
|
||||||
|
50% { opacity: 0.4; transform: translateX(-50%) scale(0.9); }
|
||||||
|
100% { opacity: 0.1; transform: translateX(-50%) scale(0.2); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes a-laitela-credits {
|
||||||
|
0% { transform: translate(-50%, 30%); }
|
||||||
|
25% { transform: translate(-50%, -20%); }
|
||||||
|
50% { transform: translate(-50%, 30%); }
|
||||||
|
75% { transform: translate(0%, 30%); }
|
||||||
|
100% { transform: translate(-50%, 30%); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes a-pelle-credits {
|
||||||
|
0% { transform: translateX(-50%) rotate3d(0, 1, 0, 0) scaleY(1); }
|
||||||
|
25% { transform: translateX(-50%) rotate3d(0, 1, 0, 90deg) scaleY(1.3); }
|
||||||
|
50% { transform: translateX(-50%) rotate3d(0, 1, 0, 180deg) scaleY(1); }
|
||||||
|
75% { transform: translateX(-50%) rotate3d(0, 1, 0, 270deg) scaleY(1.3); }
|
||||||
|
100% { transform: translateX(-50%) rotate3d(0, 1, 0, 360deg) scaleY(1); }
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -8,7 +8,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.opacity = (Pelle.endState - 2.5) / 2;
|
this.opacity = (GameEnd.endState - 2.5) / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -17,7 +17,10 @@ export default {
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="black-overlay"
|
class="black-overlay"
|
||||||
:style="{ opacity: opacity }"
|
:style="{
|
||||||
|
opacity,
|
||||||
|
pointerEvents: opacity > 1 ? 'auto' : 'none'
|
||||||
|
}"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -28,8 +31,7 @@ export default {
|
|||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
pointer-events: none;
|
|
||||||
background: black;
|
background: black;
|
||||||
z-index: 6;
|
z-index: 8;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -6,7 +6,7 @@ export default {
|
|||||||
plusRecord: 0,
|
plusRecord: 0,
|
||||||
minusRecord: 0,
|
minusRecord: 0,
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
visible: false
|
visible: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -15,13 +15,19 @@ export default {
|
|||||||
.map(x => x - 1 + this.minusRecord)
|
.map(x => x - 1 + this.minusRecord)
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
},
|
},
|
||||||
|
style() {
|
||||||
|
return {
|
||||||
|
opacity: this.opacity,
|
||||||
|
visibility: this.visible ? "visible" : "hidden"
|
||||||
|
};
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
update() {
|
update() {
|
||||||
this.plusRecord = NG.plusRecord;
|
this.plusRecord = NG.plusRecord;
|
||||||
this.minusRecord = NG.minusRecord;
|
this.minusRecord = NG.minusRecord;
|
||||||
this.visible = Pelle.endState > 14.9;
|
this.visible = GameEnd.endState > 13.75 && !GameEnd.removeAdditionalEnd;
|
||||||
this.opacity = (Pelle.endState - 14.9) * 2;
|
this.opacity = (GameEnd.endState - 13.75) * 2;
|
||||||
},
|
},
|
||||||
ngString(i) {
|
ngString(i) {
|
||||||
if (!i) return "";
|
if (!i) return "";
|
||||||
@ -36,44 +42,53 @@ export default {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="new-game-container"
|
class="c-new-game-container"
|
||||||
:style="{ display: visible ? 'flex' : 'none', opacity }"
|
:style="style"
|
||||||
>
|
>
|
||||||
<h1>Wanna start over?</h1>
|
<h1>Wanna start over?</h1>
|
||||||
Highest NG+: {{ plusRecord }}<br>
|
Highest NG+: {{ plusRecord }}<br>
|
||||||
Highest NG-: {{ minusRecord }}<br>
|
Highest NG-: {{ minusRecord }}<br>
|
||||||
<button
|
<div class="c-new-game-button-container">
|
||||||
v-for="i in ngRange"
|
<button
|
||||||
:key="i"
|
v-for="i in ngRange"
|
||||||
class="new-game-button"
|
:key="i"
|
||||||
@click="startNewGame(i)"
|
class="c-new-game-button"
|
||||||
>
|
@click="startNewGame(i)"
|
||||||
Start a {{ ngString(i) }}
|
>
|
||||||
</button>
|
Start a {{ ngString(i) }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.new-game-container {
|
.c-new-game-container {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 0;
|
left: 50%;
|
||||||
top: 0;
|
top: 50%;
|
||||||
height: 100%;
|
transform: translate(-50%, -50%);
|
||||||
width: 100%;
|
z-index: 9;
|
||||||
z-index: 7;
|
display: flex;
|
||||||
display: flex;
|
justify-content: center;
|
||||||
justify-content: center;
|
align-items: center;
|
||||||
align-items: center;
|
flex-direction: column;
|
||||||
flex-direction: column;
|
background-color: black;
|
||||||
}
|
box-shadow: 0 0 20px 1px black;
|
||||||
|
}
|
||||||
|
|
||||||
button {
|
.c-new-game-button-container {
|
||||||
margin-top: 1rem;
|
display: flex;
|
||||||
padding: 1rem;
|
align-items: stretch;
|
||||||
font-family: Typewriter;
|
flex-direction: column;
|
||||||
background: grey;
|
}
|
||||||
border: black;
|
|
||||||
border-radius: 5px;
|
.c-new-game-button {
|
||||||
cursor: pointer;
|
margin-top: 1rem;
|
||||||
}
|
padding: 1rem;
|
||||||
|
font-family: Typewriter;
|
||||||
|
background: grey;
|
||||||
|
border: black;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -26,7 +26,7 @@ export default {
|
|||||||
this.tabName = Pelle.transitionText(
|
this.tabName = Pelle.transitionText(
|
||||||
this.tab.name,
|
this.tab.name,
|
||||||
Pelle.endTabNames[this.tabPosition],
|
Pelle.endTabNames[this.tabPosition],
|
||||||
Math.max(Math.min(Pelle.endState - (this.tab.id) % 4 / 10, 1), 0)
|
Math.max(Math.min(GameEnd.endState - (this.tab.id) % 4 / 10, 1), 0)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.tabName = this.tab.name;
|
this.tabName = this.tab.name;
|
||||||
|
@ -40,7 +40,7 @@ export default {
|
|||||||
this.tabName = Pelle.transitionText(
|
this.tabName = Pelle.transitionText(
|
||||||
this.tab.name,
|
this.tab.name,
|
||||||
Pelle.endTabNames[this.tabPosition],
|
Pelle.endTabNames[this.tabPosition],
|
||||||
Math.max(Math.min(Pelle.endState - (this.tab.id) % 4 / 10, 1), 0)
|
Math.max(Math.min(GameEnd.endState - (this.tab.id) % 4 / 10, 1), 0)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.tabName = this.tab.name;
|
this.tabName = this.tab.name;
|
||||||
|
Loading…
Reference in New Issue
Block a user