Oops, looks like the game isn't loading right!


Consider refreshing or asking about it on the Discord server.
Congratulations! You have beaten the game.

You completed the entire game in {{formatTime(player.winTime)}}.




Creator
randomtuba

Contributors Over The Years
TheMKeyHolder (AP Classic)
gapples2 (AP Rewritten, AP Current)
downvoid (AP Current)
DEMEMZEA (AP Current)

Major Testers
DEMEMZEA
downvoid
Saber
Yoshi128986

Minor Testers
Flamemaster
Letorin
Saturnus
Dest
gapples2
i do dank stuff

Inspirations
Antimatter Dimensions
(News Ticker, Square Root, Y-Quadratic Upgrades, Z Lab, Charged X Upgrades)

FE000000
(Complex Upgrades, Complex Challenges)

Ordinal Markup
(UI Style)

Libraries
break_eternity.js (Made by Patashu)
Vue.js
jQuery
notify.js

Thanks to the r/incremental_games community for giving feedback that has improved this game.
Thank you so much for playing!
Warning: You are beyond endgame. Gameplay may be unbalanced beyond this point.

Enter the E

{{regularFormat(player.totalPoints.max(1).log10().div(5e6),5)}}% Universe Filled
Speedrun Timer: {{simpleFormatTime(player.speedrunTimer)}}




You need 1e2950 x2 and 1e660 Root Essence to go Complex.

Number {{player.compChallenge == 6 && player.buyables[1].add(player.buyables[2]).add(player.buyables[3]).gt(player.buyables[4].add(player.buyables[5]).add(player.buyables[6])) ? "<" : "="}} {{player.z.gte(1) ? formatWhole(player.z) + 'z+' : ''}}{{player.y.gte(1) ? formatWhole(player.y) + 'y+' : ''}}{{player.x.gte(1) ? formatWhole(player.x) + 'x+' : ''}}{{format(player.points)}}
I will not let you go any further.
You are getting {{player.compChallenge == 6 && player.buyables[1].add(player.buyables[2]).add(player.buyables[3]).gt(player.buyables[4].add(player.buyables[5]).add(player.buyables[6])) ? "less than " : ""}}{{formatSmall(pps())}} points per second
C2 Exponent: ^{{format(player.chalExponents[0])}}
C9 Exponent: ^{{format(player.chalExponents[1])}}
Purchases Left: {{player.purchases}}
CC1 Exponent: ^{{regularFormat(cc1Exponent(),6)}}
Anti-Slope: {{format(player.antiSlope)}}
Greatest Common Factor: {{formatWhole(gcd_two_numbers(player.x.toNumber(),player.y.toNumber()))}} (Exponent: ^{{regularFormat(Decimal.div(1,new Decimal(gcd_two_numbers(player.x.toNumber(),player.y.toNumber())).sqrt().max(1)),6)}})
Quadratics Used: {{formatWhole(player.quadratics)}}/{{formatWhole(new Decimal(20).sub(player.compChalCompletions[4]*5).max(0))}}
CC7 Exponent: ^{{regularFormat(player.chalExponents[2],6)}}
Quadratic Formula Buyable Purchases: {{formatWhole(player.quadBuyables[1].add(player.quadBuyables[2]).add(player.quadBuyables[3]).add(player.quadBuyables[4]))}}/{{formatWhole(new Decimal(20).sub(player.compChalCompletions[9]*5).max(0))}}


Note: Produced Buildings{{player.zUnlocked ? " and Z" : ""}} do not reset on Quadratic!

{{BUYABLES[a].title}} - {{formatWhole(player.buyables[a])}}{{hasUpgrade(5) ? ' [+' + format(player.buyables[a+6]) + ']' : ''}} ~ {{BUYABLES[a].effectDisplay()}} [{{format(player.buildingPercent[a])}}%]
{{"Production Per Building: " + format(BUYABLES[a].baseProd()) + "/s"}}









Instead of adding to your production, Functions multiply your point production.
Note: The "x" in the Function formulas should not be confused with your x variable.

Multipliers to the g(x) and h(x) bases are softcapped at 50,000,000 if Dilations are currently active.
f(x) * g(x) * h(x): {{format(BUYABLES[4].eff().mul(BUYABLES[5].eff()).mul(BUYABLES[6].eff()))}}

{{BUYABLES[a+3].title}}x) =
{{BUYABLES[a+3].title}}{{formatWhole(player.buyables[a+3])}}) = {{format(BUYABLES[a+3].eff())}}


Saving

Visual

Gameplay



Tabs
You can use the left and right arrow keys for tab navigation and the up and down arrow keys for subtab navigation.
All tabs are permanently shown after unlocking Synthetic Division.
Generation:
Options: cannot be hidden
Statistics:
Achievements:
Textbook:
Upgrades:
Quadratic:
Y-Quadratic:
Complex:
Polynomials:

Algebraic Progression v2.3
Made by randomtuba
Thanks to downvoid, gapples2, and DEMEMZEA for bugfixing and some QoL mechanics.
Game made with Vue.js, break_eternity.js, jQuery, and notify.js

If you want to make a mod of this game, that's fine, just credit me in some way.

Discord Link   AP Classic   Original Rewrite   Changelog

Note: Earlier versions of the game have bugs that will not be fixed.


General
You have bought a total of {{formatWhole(player.buyables[1].add(player.buyables[2]).add(player.buyables[3]))}} Buildings.
You have bought a total of {{formatWhole(player.buyables[4].add(player.buyables[5]).add(player.buyables[6]))}} Functions.
You have played this game for {{formatTime(player.timePlayed)}}.
You have produced {{format(player.totalPoints)}} points in total.
You have seen {{formatWhole(player.newsMessagesSeen)}} news ticker message{{player.newsMessagesSeen != 1 ? "s" : ""}}.
You have bought {{player.xUpgs.length}} X Upgrades.
You have completed the entire game {{formatWhole(player.totalGP)}} time{{player.totalGP.eq(1) ? "" : "s"}}.

Quadratic
You have collected a total of {{formatWhole(player.totalx2)}} x2.
You have gone Quadratic {{formatWhole(player.quadratics)}} times.
You have {{formatWhole(player.bankedQuadratics)}} Banked Quadratics.
You will gain {{formatWhole(player.quadratics.div(10).floor())}} Banked Quadratics on Complex.
Your fastest Quadratic is {{formatTime(player.prestigeTimes[1])}}.
You have spent {{formatTime(player.prestigeTimes[0])}} in this Quadratic.
You have bought {{player.quadUpgs.length}} Quadratic Upgrades.
You have entered Square Root {{player.sqrtEnters}} times.
You have bought {{player.sqrtUpgs.length}} Square Root Upgrades.

The sum of a, b, and c is {{formatWhole(player.abc[1].add(player.abc[2]).add(player.abc[3]))}}.
You have bought a total of {{formatWhole(player.quadBuyables[1].add(player.quadBuyables[2]).add(player.quadBuyables[3]).add(player.quadBuyables[4]))}} Quadratic Formula Buyables.

Y-Quadratic
You have collected a total of {{formatWhole(player.totaly2)}} y2.
You have gone Y-Quadratic {{formatWhole(player.yQuadratics)}} times.
Your fastest Y-Quadratic is {{formatTime(player.prestigeTimes[5])}}.
You have spent {{formatTime(player.prestigeTimes[4])}} in this Y-Quadratic.
You have bought {{player.yQuadUpgs[0].length}} Y-Quadratic Upgrades.
You have bought a total of {{formatWhole(player.varSynth.iExpBuyables[1].add(player.varSynth.iExpBuyables[2]))}} Revolution Buyables.
You have completed a total of {{formatWhole(player.yChalCompletions[1].add(player.yChalCompletions[2]).add(player.yChalCompletions[3]).add(player.yChalCompletions[4]))}} Y-Challenge tiers.

Complex
You have collected a total of {{formatWhole(player.totali)}} i.
You have gone Complex {{formatWhole(player.complexes)}} times.
Your fastest Complex is {{formatTime(player.prestigeTimes[3])}}.
You have spent {{formatTime(player.prestigeTimes[2])}} in this Complex.
You have bought {{player.compUpgs[0].length + player.compUpgs[1].length}} Complex Upgrades (excluding fourth-row Complex Upgrades).
You have bought {{player.fourthRowCompUpgs[1].add(player.fourthRowCompUpgs[2]).add(player.fourthRowCompUpgs[3]).add(player.fourthRowCompUpgs[4])}} levels of fourth-row Complex Upgrades.
You have bought a total of {{formatWhole(player.transformations.bought[1].add(player.transformations.bought[2]).add(player.transformations.bought[3]).add(player.transformations.bought[4]))}} Transformations.
You have a total of {{totalColliderLevels()}} Z-Collider levels.
You have bought a total of {{formatWhole(player.quadBuyables[5].add(player.quadBuyables[6]).add(player.quadBuyables[7]).add(player.quadBuyables[8]))}} Imaginary Power Buyables.

Polynomials
You have bought a total of {{formatWhole(player.polynomials[3].bought.add(player.polynomials[4].bought).add(player.polynomials[5].bought).add(player.polynomials[6].bought).add(player.polynomials[7].bought).add(player.polynomials[8].bought).add(player.polynomials[9].bought).add(player.polynomials[10].bought))}} Polynomials.
You have bought a total of {{formatWhole(player.polynomials.buyables[1].add(player.polynomials.buyables[2]).add(player.polynomials.buyables[3]).add(player.polynomials.buyables[4]).add(player.polynomials.buyables[5]).add(player.polynomials.buyables[6]))}} Polynomial Buyables.
You have entered Synthetic Division {{formatWhole(player.synthDivEnters)}} times.
You have bought {{formatWhole(player.synthDivUpgs[0][1].add(player.synthDivUpgs[0][2]).add(player.synthDivUpgs[0][3]))}} repeatable Synthetic Division Upgrades.
You have bought {{formatWhole(player.synthDivUpgs[1].length)}} non-repeatable Synthetic Division Upgrades.
Quadratic
{{a}}. {{format(player.last10runs.quadratic[a-1].gain)}} x2 [+{{format(player.last10runs.quadratic[a-1].gain.div(player.last10runs.quadratic[a-1].time))}}/sec], {{formatTime(player.last10runs.quadratic[a-1].time)}} {{a}}. Not happened yet

Y-Quadratic
{{a}}. {{format(player.last10runs.yQuadratic[a-1].gain)}} y2 [+{{format(player.last10runs.yQuadratic[a-1].gain.div(player.last10runs.yQuadratic[a-1].time))}}/sec], {{formatTime(player.last10runs.yQuadratic[a-1].time)}} {{a}}. Not happened yet

Complex
{{a}}. {{format(player.last10runs.complex[a-1].gain)}} i [+{{format(player.last10runs.complex[a-1].gain.div(player.last10runs.complex[a-1].time))}}/sec], {{formatTime(player.last10runs.complex[a-1].time)}} {{a}}. Not happened yet
You haven't completed Challenge {{a}} yet. Challenge {{a}} Record: {{formatTime(player.challengeRecords[a])}}

The sum of your challenge records is {{formatTime(chalRecordsSum())}}
{{SPEEDRUN_MILESTONES[a-1].name}}: {{player.speedrunData[a-1][1] ? "Completed in " + simpleFormatTime(player.speedrunData[a-1][0]) : "Incomplete"}}


{{player.achievements.length}}/60 Achievements completed ({{format(player.achievements.length / 0.6)}}%)

{{a*5-5+b == 19 ? ACHIEVEMENTS[a*5-5+b].name() : ACHIEVEMENTS[a*5-5+b].name}}
{{a*5-5+b == 10 ? ACHIEVEMENTS[a*5-5+b].desc() : ACHIEVEMENTS[a*5-5+b].desc}}
{{player.secretAchievements.length}}/20 Secret Achievements completed ({{format(player.secretAchievements.length / 0.2)}}%)

{{SECRET_ACHIEVEMENTS[a*5-5+b].name}}
{{hasSecretAchievement(a*5-5+b) ? (a*5-5+b == 9 ? SECRET_ACHIEVEMENTS[a*5-5+b].desc() : SECRET_ACHIEVEMENTS[a*5-5+b].desc) : "???"}}
{{tmp.textbook.names[a]}}


Buying an X Upgrade will remove 50% of the X Upgrade's cost (rounded down) from your X amount.
You have charged {{player.varSynth.chargedXUpgs.length}}/{{player.varSynth.totalxy}} X Upgrades. Charging an X Upgrade costs 1 xy.
X Upgrade charges can be respecced on Y-Quadratic, if desired.


You have {{formatWhole(player.varSynth.xy)}} xy.



You have {{formatWhole(player.gamePoints)}} game point{{player.gamePoints.eq(1) ? "" : "s"}} (GP).
You gain 1 game point every time you click "Play Again" at the end of the game.
Game points can be spent on Permanent Upgrades that are not refundable, and are disabled in Speedrun Mode!

Permanent Upgrades:
You have {{formatWhole(player.x2)}} x2.

Auto-Quadratic: Go Quadratic {{player.compAutobuyers[2] == 2 ? "after" : "when reaching"}}







You have sacrificed {{formatWhole(player.sacX)}} x (dividing Y cost scaling by {{format(sacEffect('x'))}}){{hasSU(6) ? ", " : " and "}}{{formatWhole(player.sacY)}} y (adding {{format(sacEffect('y'))}} to the g(x) and h(x) bases){{player.zUnlocked ? ", " : " and "}}{{formatWhole(player.sacX2)}} x2 (producing {{format(sacEffect('x2'))}} slope/second), and {{formatWhole(player.sacZ)}} z (multiplying the f(x) exponent by {{format(sacEffect('z'))}}).

You have {{format(player.slope)}} slope, multiplying production of buildings by {{format(slopeEffect())}}.


You have {{formatWhole(player.b)}} b (y-intercept), multiplying slope gain by {{format(bEffect(1))}}, multiplying sacrificed X and Y effects by {{format(bEffect(2))}}, and adding {{format(bEffect(3))}} to the slope effect exponent.






By default, clicking the "Sacrifice" button will set whatever currency you're sacrificing to 0.
If your sacrificed currency is greater than your current sacrificed amount, your sacrificed amount will increase.
Clicking the second button will change what currency you're sacrificing.
You currently have {{hasSU(6)?(player.zUnlocked?"4":"3"):"2"}} sacrifice options. (x, y{{hasSU(6)?", x²":""}}{{player.zUnlocked?", z":""}})

Transformations
Each Transformation type boosts the effect of a sacrificed currency, but only one can be activated at a time.
All Transformation types (except for Translations) cap at 40 levels.
{{player.transformations.names[a]}} ({{formatWhole(player.transformations.bought[a])}}{{a == 1 ? "" : "/40"}}) - {{a == 3 ? "^" : ""}}{{format(transformEffect(a))}}{{a != 3 ? "x" : ""}} sacrificed effect
Your Dilations are multiplying all other Transformation effects by {{format(transformEffect(5))}}x (applied after all softcaps), even if they're not active.
You have {{formatWhole(player.rootEssence)}} root essence.
You have {{formatWhole(player.challengeEssence)}} challenge essence, multiplying root essence gain by {{format(ceEffect(1))}}x and quadratic power gain by {{format(ceEffect(2))}}x.
Challenge essence is harshly softcapped after {{format(ceSoftcapStart())}} CE.
Best Points in Square Root: {{format(player.bestPointsInSqrt)}}


Root Epicenter:
Note: A Root Epicenter level is considered "complete" when reaching at least 1e12 points inside of the level.








Endure harder Quadratics and reach the goal to get rewards!
Click a Challenge to enter it. Click it again to exit/finish.
Note: Going Quadratic or entering Square Root will exit you from your current Challenge.

You have completed {{player.chalCompletions.length}}/10 Challenges.

You have {{format(player.quadPower)}} quadratic power. ({{format(qpGen())}}/sec)
You have {{format(player.imagPower)}} imaginary power. ({{format(ipGen())}}/sec)
To generate Quadratic Power, a, b, and c when plugged into the Quadratic Formula must return a {{!hasMilestone(19) ? "real" : ""}}real solution.
(The one I'm talking about is (-b±√(b²-4ac)) / 2a)
To generate Imaginary Power, a, b, and c must return a nonreal solution instead.
Base QP{{hasZlabMilestone(1,3) ? " and IP" : ""}} Generation Formula{{hasZlabMilestone(1,3) ? "s" : ""}}: (bc)a/2 - 0.5
{{player.abc[2].pow(2).round().gte(new Decimal(4).mul(player.abc[1]).mul(player.abc[3])) ? "a, b, and c return a real solution!" : (hasMilestone(19) ? "a, b, and c return a nonreal solution, but that's okay somehow!" : "a, b, and c return a nonreal solution...")}}

{{tmp.letters[a]}}: {{player.abc[a]}}/{{maxABC()}}



You have {{formatWhole(player.y2)}} y2.

Y-Quadratic Automator: Go Y-Quadratic for y2





Welcome to the Variable Synthesizer! Here you will be able to craft illegal variables that probably shouldn't exist.
xy has already been unlocked for you, so you can start crafting those first.
Note: xy can be used to charge X Upgrades, so the Upgrades tab will be useful now!


You have {{formatWhole(player.varSynth.xy)}} xy.

You have {{formatWhole(player.varSynth.x2y2)}} x2y2.
x2y2 is gained based on your current x2 and current y2, minus your current x2y2.


You have {{format(player.varSynth.circles)}} circles.
({{format(circleGen())}}/sec)
{{nextCircleMilestone()}}

Your circles are currently:
by {{format(circleEffects(a))}}x

Your current expression is i{{format(player.varSynth.iExp)}}. ({{format(iExpGen())}}/sec)
({{format(player.varSynth.iExp.mul(90))}}° on a unit circle in the complex plane)
Your i exponent is multiplying:
xi power generation by {{format(iExpEffects(1))}}x
yi power generation by {{format(iExpEffects(2))}}x
x2i power generation by {{format(iExpEffects(3))}}x

You have {{formatWhole(player.varSynth.revolutions)}} revolution{{!player.varSynth.revolutions.eq(1) ? "s" : ""}}, giving a {{format(player.varSynth.revolutions.pow(0.25).add(1))}}x multiplier to circles generation.

Endure harder Y-Quadratics and reach the goal to get rewards!
Unlike regular Challenges, Y-Challenges are infinitely completable, with their rewards growing stronger for every completion!
Click a Y-Challenge to enter it. Click it again to exit it.
Note: Going Y-Quadratic will exit you from your current Y-Challenge.

You have {{formatWhole(player.i)}} i.

Auto-Complex: Go Complex {{player.compAutobuyers[10] ? 'after' : 'when reaching'}} {{player.compAutobuyers[10] ? 'seconds' : 'i'}}



You have gone Complex {{formatWhole(player.complexes)}} times.


You have {{formatWhole(player.upgradePoints[0])}} upgrade point{{!player.upgradePoints[0].eq(1) ? "s" : ""}}. ({{formatWhole(player.upgradePoints[1])}} total)


Click on a Preset button to select the preset.





Use the 3 buttons above to purchase Upgrade Points with some of your previous currencies.
Upgrade points are spent on the 12 Complex Upgrades that can be respecced.
Fourth-row Complex Upgrades can be repeatedly bought to increase their effects.

Basic Complex Upgrades:

You have {{formatWhole(player.compPlane[0][a])}} i, producing {{format(compPlaneGen(a))}} i power per second.
You have {{format(player.compPlane[1][a])}} i power, {{compPlaneEffectDisplay(a)}}
Note: zi power generation is not affected by multipliers to Complex Plane currencies.




You have completed {{formatWhole(ccTiers())}} Complex Challenge tier{{ccTiers() != 1 ? "s" : ""}}. Check your Milestones tab to see if you've unlocked anything!
Endure harder Complexes and reach the goal to get rewards!
Each Complex Challenge requires UP to unlock, and can be completed up to 5 times.
If you reach the Complex Challenge goal, click the button that would normally say "Exit Challenge" underneath the Complex Challenge.
Note: You can only have 1 Complex Challenge unlocked at a time. Going Complex will exit you from your current Complex Challenge.




Your {{player.z}} z have generated {{format(player.zlab.zpower)}} Z-Power.
({{format(zpowerGen())}}/sec)
Your {{totalColliderLevels()}} total Z-Collider level{{totalColliderLevels() != 1 ? "s" : ""}} are multiplying i and y2 gain by {{format(Decimal.pow(1.25,totalColliderLevels()))}}.

Charging a Z-Collider will generate Z-Particles of its corresponding type, based on the square root of your Z-Power.
Leveling up your Z-Colliders will allow you to reach milestones with powerful bonuses and unlocks.



Z-Collider of {{COLLIDERS[a*2-2+b].title}}
Level {{player.zlab.levels[a*2-2+b]}}/20
{{COLLIDERS[a*2-2+b].desc}}


You have {{format(player.zlab.particles[a*2-2+b])}} {{COLLIDERS[a*2-2+b].title}} Z-Particles

You have {{format(player.polyPower)}} polynomial power, powering point gain by ^{{regularFormat(polyPowerEffect(),4)}}.




You have {{format(player.polynomials[a+2].amount)}} x{{a+2}}, producing {{format(polynomialGen(a+2))}} {{a == 1 ? "polynomial power" : ""}}x{{a+1}} per second.
(Efficiency: {{format(Decimal.pow(2,player.polynomials[a+2].bought).mul(seEffect()).mul(POLY_BUYABLES[6].eff()).mul(hasPermUpgrade(8)?10:1))}}x)


Synthetic Division will unlock at 1 x6. You have {{formatWhole(player.synthEssence)}} synthetic essence, boosting the efficiency of all polynomials by {{format(seEffect())}}x.
In Synthetic Division, Points and x2 are powered ^0.02. You gain Synthetic Essence (SE) based on your Points.

Best Points in Synthetic Division: {{format(player.bestPointsInSynthDiv)}}