Files
CookieMonster/src/Sim/Calculations/CheckOtherAchiev.js
2022-06-01 19:10:16 +02:00

97 lines
3.9 KiB
JavaScript

import { ChristCookies, HalloCookies } from '../../Data/Gamedata.ts';
import SimHas from '../ReplacedGameFunctions/SimHas';
import SimHasAchiev from '../ReplacedGameFunctions/SimHasAchiev';
import SimWin from '../SimulationData/SimWin';
import { SimObjects, SimUpgradesOwned } from '../VariablesAndData';
/**
* This function calculates if any special achievements have been obtained
* If so it SimWin()'s them and the caller function will know to recall CM.Sim.CalculateGains()
* It is called at the end of any functions that simulates certain behaviour
*/
export default function CheckOtherAchiev() {
let grandmas = 0;
Object.keys(Game.GrandmaSynergies).forEach((i) => {
if (SimHas(Game.GrandmaSynergies[i])) grandmas += 1;
});
if (!SimHasAchiev('Elder') && grandmas >= 7) SimWin('Elder');
if (!SimHasAchiev('Veteran') && grandmas >= 14) SimWin('Veteran');
let buildingsOwned = 0;
let mathematician = 1;
let base10 = 1;
let minAmount = 100000;
Object.keys(SimObjects).forEach((i) => {
buildingsOwned += SimObjects[i].amount;
minAmount = Math.min(SimObjects[i].amount, minAmount);
if (!SimHasAchiev('Mathematician')) {
if (
SimObjects[i].amount <
Math.min(128, 2 ** (Game.ObjectsById.length - Game.Objects[i].id - 1))
)
mathematician = 0;
}
if (!SimHasAchiev('Base 10')) {
if (SimObjects[i].amount < (Game.ObjectsById.length - Game.Objects[i].id) * 10) base10 = 0;
}
});
if (minAmount >= 1) SimWin('One with everything');
if (mathematician === 1) SimWin('Mathematician');
if (base10 === 1) SimWin('Base 10');
if (minAmount >= 100) SimWin('Centennial');
if (minAmount >= 150) SimWin('Centennial and a half');
if (minAmount >= 200) SimWin('Bicentennial');
if (minAmount >= 250) SimWin('Bicentennial and a half');
if (minAmount >= 300) SimWin('Tricentennial');
if (minAmount >= 350) SimWin('Tricentennial and a half');
if (minAmount >= 400) SimWin('Quadricentennial');
if (minAmount >= 450) SimWin('Quadricentennial and a half');
if (minAmount >= 500) SimWin('Quincentennial');
if (minAmount >= 550) SimWin('Quincentennial and a half');
if (minAmount >= 600) SimWin('Sexcentennial');
if (minAmount >= 650) SimWin('Sexcentennial and a half');
if (buildingsOwned >= 100) SimWin('Builder');
if (buildingsOwned >= 500) SimWin('Architect');
if (buildingsOwned >= 1000) SimWin('Engineer');
if (buildingsOwned >= 2500) SimWin('Lord of Constructs');
if (buildingsOwned >= 5000) SimWin('Grand design');
if (buildingsOwned >= 7500) SimWin('Ecumenopolis');
if (buildingsOwned >= 10000) SimWin('Myriad');
if (SimUpgradesOwned >= 20) SimWin('Enhancer');
if (SimUpgradesOwned >= 50) SimWin('Augmenter');
if (SimUpgradesOwned >= 100) SimWin('Upgrader');
if (SimUpgradesOwned >= 200) SimWin('Lord of Progress');
if (SimUpgradesOwned >= 300) SimWin('The full picture');
if (SimUpgradesOwned >= 400) SimWin("When there's nothing left to add");
if (SimUpgradesOwned >= 500) SimWin("Kaizen");
if (SimUpgradesOwned >= 600) SimWin("Beyond quality");
if (buildingsOwned >= 4000 && SimUpgradesOwned >= 300) SimWin('Polymath');
if (buildingsOwned >= 8000 && SimUpgradesOwned >= 400) SimWin('Renaissance baker');
if (SimObjects.Cursor.amount + SimObjects.Grandma.amount >= 777) SimWin('The elder scrolls');
let hasAllHalloCook = true;
Object.keys(HalloCookies).forEach((i) => {
if (!SimHas(HalloCookies[i])) hasAllHalloCook = false;
});
if (hasAllHalloCook) SimWin('Spooky cookies');
let hasAllChristCook = true;
Object.keys(ChristCookies).forEach((i) => {
if (!SimHas(ChristCookies[i])) hasAllChristCook = false;
});
if (hasAllChristCook) SimWin('Let it snow');
if (SimHas('Fortune cookies')) {
const list = Game.Tiers.fortune.upgrades;
let fortunes = 0;
Object.keys(list).forEach((i) => {
if (SimHas(list[i].name)) fortunes += 1;
});
if (fortunes >= list.length) SimWin('O Fortuna');
}
}