diff --git a/index.html b/index.html
index be79c56ad..46feeb977 100644
--- a/index.html
+++ b/index.html
@@ -2992,6 +2992,7 @@
Artists
+
Miscellaneous Stats
@@ -3256,6 +3257,22 @@
Artists
TOTAL OCTERACT MULTIPLIER: 0
+
+
+
Daily Code Free Singularity Shop Levels
+
0
+
0
+
0
+
0
+
0
+
0
+
0
+
0
+
0
+
0
+
TOTAL FREE LEVELS: 0
+
diff --git a/src/Calculate.ts b/src/Calculate.ts
index 915f57e26..0498fab6c 100644
--- a/src/Calculate.ts
+++ b/src/Calculate.ts
@@ -1,5 +1,5 @@
import { player, saveSynergy, format, resourceGain, updateAll, getTimePinnedToLoadDate } from './Synergism';
-import { sumContents, productContents } from './Utility';
+import { sumContents, productContents, calculateContents } from './Utility';
import { Globals as G } from './Variables';
import { CalcECC } from './Challenges';
import Decimal from 'break_infinity.js';
@@ -1992,3 +1992,24 @@ export const derpsmithCornucopiaBonus = () => {
return 1 + counter * player.singularityCount / 100
}
+
+export const calculateDailyRewardRolls = () => {
+ const rolls = [
+ {'type': '+', 'value': 3 * Math.sqrt(player.singularityCount)},
+ {'type': '+', 'value': +player.octeractUpgrades.octeractImprovedDaily.getEffect().bonus},
+ {'type': '+', 'value': player.shopUpgrades.shopImprovedDaily2},
+ {'type': '+', 'value': player.shopUpgrades.shopImprovedDaily3},
+ {'type': '+', 'value': player.shopUpgrades.shopImprovedDaily4},
+ {'type': '+', 'value': (+player.singularityUpgrades.platonicPhi.getEffect().bonus *
+ Math.min(50, 5 * player.singularityCounter / (3600 * 24)))},
+ {'type': '+', 'value': +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus},
+ {'type': '*', 'value': +player.octeractUpgrades.octeractImprovedDaily2.getEffect().bonus},
+ {'type': '*', 'value': 1 + +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus / 200},
+ {'type': '*', 'value': player.highestSingularityCount >= 200 ? 2 : 1}
+ ];
+
+ return {
+ list: rolls,
+ total: Math.floor(calculateContents(rolls))
+ };
+}
diff --git a/src/ImportExport.ts b/src/ImportExport.ts
index 0d9732437..39fb0ee6f 100644
--- a/src/ImportExport.ts
+++ b/src/ImportExport.ts
@@ -1,5 +1,5 @@
import { player, saveSynergy, blankSave, reloadShit, format } from './Synergism';
-import { octeractGainPerSecond } from './Calculate';
+import {calculateDailyRewardRolls, octeractGainPerSecond} from './Calculate';
import { testing, version } from './Config';
import { cleanString, getElementById } from './Utility';
import LZString from 'lz-string';
@@ -387,22 +387,8 @@ export const promocodes = async (input: string | null, amount?: number) => {
singOfferings1: {value: 1, pdf: (x: number) => 600 < x && x <= 800},
ascensions: {value: 1, pdf: (x: number) => 800 < x && x <= 1000}
}
- let rolls = 3 * Math.sqrt(player.singularityCount)
- rolls += +player.octeractUpgrades.octeractImprovedDaily.getEffect().bonus
- rolls += player.shopUpgrades.shopImprovedDaily2
- rolls += player.shopUpgrades.shopImprovedDaily3
- rolls += player.shopUpgrades.shopImprovedDaily4
- rolls += (+player.singularityUpgrades.platonicPhi.getEffect().bonus *
- Math.min(50, 5 * player.singularityCounter / (3600 * 24)))
- rolls += +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus
- rolls *= +player.octeractUpgrades.octeractImprovedDaily2.getEffect().bonus
- rolls *= 1 + +player.octeractUpgrades.octeractImprovedDaily3.getEffect().bonus / 200
- if (player.highestSingularityCount >= 200) {
- rolls *= 2
- }
-
- rolls = Math.floor(rolls)
+ const rolls = calculateDailyRewardRolls().total;
const keys = Object
.keys(player.singularityUpgrades)
diff --git a/src/Statistics.ts b/src/Statistics.ts
index 9fa0392fb..ce6beb094 100644
--- a/src/Statistics.ts
+++ b/src/Statistics.ts
@@ -1,7 +1,7 @@
import { player, format, formatTimeShort } from './Synergism';
import { Globals as G } from './Variables';
import { hepteractEffective } from './Hepteracts'
-import {calculateSigmoidExponential, calculateCubeMultiplier, calculateOfferings, calculateTesseractMultiplier, calculateHypercubeMultiplier, calculatePlatonicMultiplier, calculateHepteractMultiplier, calculateAllCubeMultiplier, calculateSigmoid, calculatePowderConversion, calculateEffectiveIALevel, calculateQuarkMultFromPowder, calculateOcteractMultiplier, calculateQuarkMultiplier, calculateEventBuff, calculateSingularityQuarkMilestoneMultiplier, calculateTotalOcteractQuarkBonus } from './Calculate';
+import {calculateSigmoidExponential, calculateCubeMultiplier, calculateOfferings, calculateTesseractMultiplier, calculateHypercubeMultiplier, calculatePlatonicMultiplier, calculateHepteractMultiplier, calculateAllCubeMultiplier, calculateSigmoid, calculatePowderConversion, calculateEffectiveIALevel, calculateQuarkMultFromPowder, calculateOcteractMultiplier, calculateQuarkMultiplier, calculateEventBuff, calculateSingularityQuarkMilestoneMultiplier, calculateTotalOcteractQuarkBonus, calculateDailyRewardRolls } from './Calculate';
import { challenge15ScoreMultiplier } from './Challenges';
import type { GlobalVariables } from './types/Synergism';
import { DOMCacheGetOrSet } from './Cache/DOM';
@@ -20,7 +20,8 @@ const associated = new Map([
['kPlatMult', 'platonicMultiplierStats'],
['kHeptMult', 'hepteractMultiplierStats'],
['kOrbPowderMult', 'powderMultiplierStats'],
- ['kOctMult', 'octeractMultiplierStats']
+ ['kOctMult', 'octeractMultiplierStats'],
+ ['kDailyRewardStats', 'dailyRewardStats']
]);
export const displayStats = (btn: HTMLElement) => {
@@ -60,6 +61,9 @@ export const loadStatisticsUpdate = () => {
case 'powderMultiplierStats':
loadPowderMultiplier();
break;
+ case 'dailyRewardStats':
+ loadDailyCodeStats();
+ break;
default:
loadStatisticsCubeMultipliers();
break;
@@ -390,6 +394,32 @@ export const loadPowderMultiplier = () => {
DOMCacheGetOrSet('sPoMT').textContent = `x${format(calculatePowderConversion().mult, 3)}`;
}
+export const loadDailyCodeStats = () => {
+ const statsArray = calculateDailyRewardRolls();
+ const statsMap: Record = {
+ 0: {acc: 2, desc: 'Base:'},
+ 1: {acc: 0, desc: 'Octeract Improved Daily:'},
+ 2: {acc: 0, desc: 'Improved Daily 2 (green):'},
+ 3: {acc: 0, desc: 'Improved Daily 3 (red):'},
+ 4: {acc: 0, desc: 'Improved Daily 4 (gray):'},
+ 5: {acc: 0, desc: 'Octeract Improved Daily 3:'},
+ 6: {acc: 2, desc: 'Platonic PHI'},
+ 7: {acc: 2, desc: 'Octeract Improved Daily 2:'},
+ 8: {acc: 2, desc: 'Octeract Improved Daily 3:'},
+ 9: {acc: 2, desc: 'Industrial Daily Codes:'}
+ }
+
+ for (let i = 0; i < statsArray.list.length; i++) {
+ const statRow = DOMCacheGetOrSet(`statDailyM${i + 1}`);
+ const arithmeticSymbol = statsArray.list[i]['type'] === '*' ? 'x' : statsArray.list[i]['type'];
+ const value = format(statsArray.list[i]['value'], statsMap[i].acc);
+ statRow.childNodes[0].textContent = statsMap[i].desc;
+
+ DOMCacheGetOrSet(`sDailyM${i + 1}`).textContent = `${arithmeticSymbol}${value}`;
+ }
+ DOMCacheGetOrSet('sDailyMT').textContent = `${format(statsArray.total, 0)}`;
+}
+
export const c15RewardUpdate = () => {
const exponentRequirements = [750, 1.5e3, 3e3, 5e3, 7.5e3, 7.5e3, 1e4, 1e4, 2e4, 4e4, 6e4, 1e5, 1e5, 2e5, 5e5, 1e6, 3e6, 1e7, 3e7, 1e8, 5e8, 2e9, 1e10, 1e11, 1e15, 2e15, 4e15, 7e15, 1e16, 2e16, 3.33e16, 3.33e16, 3.33e16, 2e17, 1.5e18]
type Key = keyof GlobalVariables['challenge15Rewards'];
diff --git a/src/Utility.ts b/src/Utility.ts
index 4c484019f..d58603cfb 100644
--- a/src/Utility.ts
+++ b/src/Utility.ts
@@ -47,6 +47,24 @@ export const sumContents = (array: number[]): number => {
*/
export const productContents = (array: number[]): number => array.reduce((a, b) => a * b);
+/**
+ * Given an array of {type, value} where type is one of '+' or '*', reduces the values based on the
+ * arithmetic operation associated with each value.
+ * @param toCalc
+ * @returns number
+ */
+export const calculateContents = (toCalc: {'type':string, 'value':number}[]): number => {
+ return toCalc.reduce((accumulator, contents) => {
+ if (contents.type === '+') {
+ return accumulator + contents.value;
+ }
+ if (contents.type === '*') {
+ return accumulator * contents.value;
+ }
+ return accumulator;
+ }, 0)
+}
+
export const sortWithIndices = (toSort: number[]) => {
return Array
.from([...toSort.keys()])