@@ -26,11 +26,19 @@ function App() {
26
26
const [ clickMultiplierBonus , setClickMultiplierBonus ] = useState ( 0 ) ; //set initial click multiplier bonus to 0
27
27
const [ clickerBonus , setClickerBonus ] = useState ( 0 ) ; //set initial clicker bonus to 0
28
28
const [ clickers , setClickers ] = useState ( 1 ) ; //set initial clickers to 1
29
- const [ clicksMultiplier , setClicksMultiplier ] = useState ( 1 ) ; //set clicks multiplier to 1
29
+ const [ clicksMultiplier , setClicksMultiplier ] = useState ( 1 ) ; //set initial clicks multiplier to 1
30
30
const [ seconds , setSeconds ] = useState ( 0 ) ; //set initial seconds played to 0
31
- const [ secondsMultiplier , setSecondsMultiplier ] = useState ( 1 ) ; //set clicks multiplier to 1
32
- const [ totalUpgrades , setTotalUpgrades ] = useState ( 0 ) ; //set total upgrades to 0
33
- const [ totalUpgradesMultiplier , setTotalUpgradesMultiplier ] = useState ( 0 ) ; //set total upgrades multiplier to 0
31
+ const [ secondsMultiplier , setSecondsMultiplier ] = useState ( 1 ) ; //set initial clicks multiplier to 1
32
+ const [ totalUpgrades , setTotalUpgrades ] = useState ( 0 ) ; //set initial total upgrades to 0
33
+ const [ totalUpgradesMultiplier , setTotalUpgradesMultiplier ] = useState ( 0 ) ; //set initial total upgrades multiplier to 0
34
+ const [ upgradeLevel , setUpgradeLevel ] = useState ( 1 ) ; //set initial upgrade level to 1
35
+ const [ upgradeLevelXp , setUpgradeLevelXp ] = useState ( 0 ) ; //set initial upgrade level XP to 1
36
+ const [ upgradeLevelXpRequired , setUpgradeLevelXpRequired ] = useState ( 1 ) ; //set initial upgrade level XP required to 1
37
+ const [ upgradeLevelMultiplier , setUpgradeLevelMultiplier ] = useState ( 0 ) ; //set initial upgrade level multiplier to 0
38
+ const [ logLevel , setLogLevel ] = useState ( 1 ) ; //set initial log level to 1
39
+ const [ logLevelXp , setLogLevelXp ] = useState ( 0 ) ; //set initial log level XP to 0
40
+ const [ logLevelXpRequired , setLogLevelXpRequired ] = useState ( 1 ) ; //set initial log level XP required to 1
41
+ const [ logLevelMultiplier , setLogLevelMultiplier ] = useState ( 0 ) ; //set initial log level multiplier to 0
34
42
const updateClickers = useCallback ( ( ) => {
35
43
//update click multiplier for clickers
36
44
setClickMultiplier (
@@ -69,6 +77,8 @@ function App() {
69
77
( 1 + ( timeMultiplierBonus * seconds ) / 10000 ) *
70
78
( 1 + ( clickMultiplierBonus * clicks ) / 10000 ) *
71
79
( 1 + ( totalUpgradesMultiplier * totalUpgrades ) / 1000 ) *
80
+ ( 1 + ( upgradeLevelMultiplier * upgradeLevel ) / 100 ) *
81
+ ( 1 + ( logLevelMultiplier * logLevel ) / 100 ) *
72
82
clicker . level ,
73
83
0 ,
74
84
) ,
@@ -81,10 +91,14 @@ function App() {
81
91
autoClickersMultiplier ,
82
92
clickMultiplierBonus ,
83
93
clicks ,
94
+ logLevel ,
95
+ logLevelMultiplier ,
84
96
seconds ,
85
97
timeMultiplierBonus ,
86
98
totalUpgrades ,
87
99
totalUpgradesMultiplier ,
100
+ upgradeLevel ,
101
+ upgradeLevelMultiplier ,
88
102
] ) ;
89
103
useEffect ( ( ) => {
90
104
const interval = setInterval ( ( ) => {
@@ -103,6 +117,11 @@ function App() {
103
117
//check if user has enough points to upgrade
104
118
if ( pointsRequired !== 0 && points >= pointsRequired ) {
105
119
//make sure points required is not 0 and user has enough points to upgrade
120
+ setLogLevelXp (
121
+ ( prevLogLevelXp ) =>
122
+ prevLogLevelXp + Math . log ( Math . max ( pointsRequired + 1 , 1 ) ) ,
123
+ ) ; //increase log level XP
124
+ checkLogLevel ( ) ; //check if log level has enough XP to level up
106
125
return true ;
107
126
} else {
108
127
//not enough points required to upgrade
@@ -120,6 +139,8 @@ function App() {
120
139
function upgradeClicker ( ) {
121
140
//upgrade clicker (points per click)
122
141
if ( checkPointsForUpgrade ( points , 10 * Math . pow ( 2 , clickers - 1 ) ) ) {
142
+ setUpgradeLevelXp ( ( prevUpgradeLevelXp ) => prevUpgradeLevelXp + clickers ) ; //increase upgrade level XP by clickers
143
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
123
144
setPoints ( ( prevPoints ) => prevPoints - 10 * Math . pow ( 2 , clickers - 1 ) ) ; //spend points
124
145
setClickers ( ( prevClickers ) => prevClickers + 1 ) ; //increase clickers by 1
125
146
updateClickers ( ) ; //update clickers value
@@ -131,6 +152,10 @@ function App() {
131
152
if (
132
153
checkPointsForUpgrade ( points , 100 * Math . pow ( 2 , clickersMultiplier - 1 ) )
133
154
) {
155
+ setUpgradeLevelXp (
156
+ ( prevUpgradeLevelXp ) => prevUpgradeLevelXp + clickersMultiplier ,
157
+ ) ; //increase upgrade level XP by clickers multiplier
158
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
134
159
setPoints (
135
160
( prevPoints ) => prevPoints - 100 * Math . pow ( 2 , clickersMultiplier - 1 ) ,
136
161
) ; //spend points
@@ -151,6 +176,11 @@ function App() {
151
176
Math . pow ( 10 , level - 1 ) ,
152
177
)
153
178
) {
179
+ setUpgradeLevelXp (
180
+ ( prevUpgradeLevelXp ) =>
181
+ prevUpgradeLevelXp + autoClickers [ level - 1 ] . value * level ,
182
+ ) ; //increase upgrade level XP by autoclickers times level
183
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
154
184
setPoints (
155
185
( prevPoints ) =>
156
186
prevPoints -
@@ -181,6 +211,11 @@ function App() {
181
211
Math . pow ( 10 , level - 1 ) ,
182
212
)
183
213
) {
214
+ setUpgradeLevelXp (
215
+ ( prevUpgradeLevelXp ) =>
216
+ prevUpgradeLevelXp + autoClickersMultiplier [ level - 1 ] . value * level ,
217
+ ) ; //increase upgrade level XP by autoclickers multiplier times level
218
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
184
219
setPoints (
185
220
( prevPoints ) =>
186
221
prevPoints -
@@ -211,6 +246,11 @@ function App() {
211
246
Math . pow ( 10 , level - 1 ) ,
212
247
)
213
248
) {
249
+ setUpgradeLevelXp (
250
+ ( prevUpgradeLevelXp ) =>
251
+ prevUpgradeLevelXp + autoClickersLevelBonus [ level - 1 ] . value * level ,
252
+ ) ; //increase upgrade level XP by autoclickers level bonus times level
253
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
214
254
setPoints (
215
255
( prevPoints ) =>
216
256
prevPoints -
@@ -241,6 +281,11 @@ function App() {
241
281
Math . pow ( 10 , level - 1 ) ,
242
282
)
243
283
) {
284
+ setUpgradeLevelXp (
285
+ ( prevUpgradeLevelXp ) =>
286
+ prevUpgradeLevelXp + autoClickersBonus [ level - 1 ] . value * level ,
287
+ ) ; //increase upgrade level XP by autoclickers bonus times level
288
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
244
289
setPoints (
245
290
( prevPoints ) =>
246
291
prevPoints -
@@ -271,6 +316,12 @@ function App() {
271
316
Math . pow ( 10 , level - 1 ) ,
272
317
)
273
318
) {
319
+ setUpgradeLevelXp (
320
+ ( prevUpgradeLevelXp ) =>
321
+ prevUpgradeLevelXp +
322
+ autoClickersBonusMultiplier [ level - 1 ] . value * level ,
323
+ ) ; //increase upgrade level XP by autoclickers bonus multiplier times level
324
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
274
325
setPoints (
275
326
( prevPoints ) =>
276
327
prevPoints -
@@ -296,6 +347,11 @@ function App() {
296
347
if (
297
348
checkPointsForUpgrade ( points , 2.5e3 * Math . pow ( 10 , timeMultiplierBonus ) )
298
349
) {
350
+ setUpgradeLevelXp (
351
+ ( prevUpgradeLevelXp ) =>
352
+ prevUpgradeLevelXp + ( timeMultiplierBonus + 1 ) * 3 ,
353
+ ) ; //increase upgrade level XP by time multiplier bonus
354
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
299
355
setPoints (
300
356
( prevPoints ) => prevPoints - 2.5e3 * Math . pow ( 10 , timeMultiplierBonus ) ,
301
357
) ;
@@ -311,6 +367,11 @@ function App() {
311
367
if (
312
368
checkPointsForUpgrade ( points , 5e3 * Math . pow ( 10 , clickMultiplierBonus ) )
313
369
) {
370
+ setUpgradeLevelXp (
371
+ ( prevUpgradeLevelXp ) =>
372
+ prevUpgradeLevelXp + ( clickMultiplierBonus + 1 ) * 5 ,
373
+ ) ; //increase upgrade level XP by click multiplier bonus
374
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
314
375
setPoints (
315
376
( prevPoints ) => prevPoints - 5e3 * Math . pow ( 10 , clickMultiplierBonus ) ,
316
377
) ;
@@ -324,6 +385,10 @@ function App() {
324
385
function upgradeClickerBonus ( ) {
325
386
//upgrade clicker bonus based on points per second
326
387
if ( checkPointsForUpgrade ( points , 1e3 * Math . pow ( 10 , clickerBonus ) ) ) {
388
+ setUpgradeLevelXp (
389
+ ( prevUpgradeLevelXp ) => prevUpgradeLevelXp + ( clickerBonus + 1 ) * 3 ,
390
+ ) ; //increase upgrade level XP by clicker bonus
391
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
327
392
setPoints ( ( prevPoints ) => prevPoints - 1e3 * Math . pow ( 10 , clickerBonus ) ) ;
328
393
setClickerBonus ( ( prevClickerBonus ) => prevClickerBonus + 1 ) ; //increase clicker bonus by 1
329
394
updateAutoClickers ( ) ; //update auto clickers value
@@ -333,7 +398,6 @@ function App() {
333
398
function upgradeMaxLevel ( ) {
334
399
//upgrade max level
335
400
if ( checkPointsForUpgrade ( points , 100 * Math . pow ( 10 , maxLevel - 1 ) ) ) {
336
- setPoints ( ( prevPoints ) => prevPoints - 100 * Math . pow ( 10 , maxLevel - 1 ) ) ;
337
401
setAutoClickers ( ( prevAutoClickers ) => [
338
402
...prevAutoClickers ,
339
403
{ value : 0 , level : maxLevel + 1 } ,
@@ -355,14 +419,17 @@ function App() {
355
419
{ value : 0 , level : maxLevel + 1 } ,
356
420
] ) ;
357
421
setMaxLevel ( ( prevMaxLevel ) => prevMaxLevel + 1 ) ; //increase max level by 1
358
- setTotalUpgrades ( ( prevTotalUpgrades ) => prevTotalUpgrades + 1 ) ; //increase total upgrades by 1
359
422
}
360
423
}
361
424
function upgradeSecondsMultiplier ( ) {
362
425
//upgrade seconds multiplier
363
426
if (
364
427
checkPointsForUpgrade ( points , 1e5 * Math . pow ( 10 , secondsMultiplier - 1 ) )
365
428
) {
429
+ setUpgradeLevelXp (
430
+ ( prevUpgradeLevelXp ) => prevUpgradeLevelXp + secondsMultiplier * 5 ,
431
+ ) ; //increase upgrade level XP by seconds multiplier
432
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
366
433
setPoints (
367
434
( prevPoints ) => prevPoints - 1e5 * Math . pow ( 10 , secondsMultiplier - 1 ) ,
368
435
) ;
@@ -377,6 +444,10 @@ function App() {
377
444
if (
378
445
checkPointsForUpgrade ( points , 1e6 * Math . pow ( 10 , clicksMultiplier - 1 ) )
379
446
) {
447
+ setUpgradeLevelXp (
448
+ ( prevUpgradeLevelXp ) => prevUpgradeLevelXp + clicksMultiplier * 6 ,
449
+ ) ; //increase upgrade level XP by clicks multiplier
450
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
380
451
setPoints (
381
452
( prevPoints ) => prevPoints - 1e6 * Math . pow ( 10 , clicksMultiplier - 1 ) ,
382
453
) ;
@@ -389,6 +460,11 @@ function App() {
389
460
if (
390
461
checkPointsForUpgrade ( points , 5e4 * Math . pow ( 10 , totalUpgradesMultiplier ) )
391
462
) {
463
+ setUpgradeLevelXp (
464
+ ( prevUpgradeLevelXp ) =>
465
+ prevUpgradeLevelXp + ( totalUpgradesMultiplier + 1 ) * 5 ,
466
+ ) ; //increase upgrade level XP by total upgrades multiplier
467
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
392
468
setPoints (
393
469
( prevPoints ) =>
394
470
prevPoints - 5e4 * Math . pow ( 10 , totalUpgradesMultiplier ) ,
@@ -399,6 +475,64 @@ function App() {
399
475
setTotalUpgrades ( ( prevTotalUpgrades ) => prevTotalUpgrades + 1 ) ; //increase total upgrades by 1
400
476
}
401
477
}
478
+ function upgradeLevelUpgradeMultiplier ( ) {
479
+ if ( checkPointsForUpgrade ( 2.5e4 * Math . pow ( 10 , upgradeLevelMultiplier ) ) ) {
480
+ setUpgradeLevelXp (
481
+ ( prevUpgradeLevelXp ) =>
482
+ prevUpgradeLevelXp + ( upgradeLevelMultiplier + 1 ) * 4 ,
483
+ ) ; //increase upgrade level XP by upgrade level multiplier
484
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
485
+ setPoints (
486
+ ( prevPoints ) =>
487
+ prevPoints - 2.5e4 * Math . pow ( 10 , upgradeLevelMultiplier ) ,
488
+ ) ;
489
+ setTotalUpgrades ( ( prevTotalUpgrades ) => prevTotalUpgrades + 1 ) ; //increase total upgrades by 1
490
+ setUpgradeLevelMultiplier (
491
+ ( prevUpgradeLevelMultiplier ) => prevUpgradeLevelMultiplier + 1 ,
492
+ ) ; //increase upgrade level multiplier by 1
493
+ }
494
+ }
495
+ function upgradeLogLevelMultiplier ( ) {
496
+ if ( checkPointsForUpgrade ( 5e5 * Math . pow ( 10 , logLevelMultiplier ) ) ) {
497
+ setUpgradeLevelXp (
498
+ ( prevUpgradeLevelXp ) =>
499
+ prevUpgradeLevelXp + ( logLevelMultiplier + 1 ) * 5 ,
500
+ ) ; //increase upgrade level XP by log level multiplier
501
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
502
+ setPoints (
503
+ ( prevPoints ) => prevPoints - 2.5e4 * Math . pow ( 10 , logLevelMultiplier ) ,
504
+ ) ;
505
+ setTotalUpgrades ( ( prevTotalUpgrades ) => prevTotalUpgrades + 1 ) ; //increase total upgrades by 1
506
+ setLogLevelMultiplier (
507
+ ( prevLogLevelMultiplier ) => prevLogLevelMultiplier + 1 ,
508
+ ) ; //increase log level multiplier by 1
509
+ }
510
+ }
511
+ function checkUpgradeLevel ( ) {
512
+ //check if upgrade level XP is higher than or equal to XP required
513
+ if ( upgradeLevelXp >= upgradeLevelXpRequired ) {
514
+ setUpgradeLevelXp (
515
+ ( prevUpgradeLevelXp ) => prevUpgradeLevelXp - upgradeLevelXpRequired ,
516
+ ) ; //decrease upgrade level XP by XP required
517
+ checkUpgradeLevel ( ) ; //check if upgrade level has enough XP to level up
518
+ setUpgradeLevelXpRequired (
519
+ ( prevUpgradeLevelXpRequired ) =>
520
+ prevUpgradeLevelXpRequired + upgradeLevel + 1 ,
521
+ ) ; //increase XP required to level up by upgrade level
522
+ setUpgradeLevel ( ( prevUpgradeLevel ) => prevUpgradeLevel + 1 ) ; //increase upgrade level by 1
523
+ }
524
+ }
525
+ function checkLogLevel ( ) {
526
+ //check if log level XP is higher than or equal to XP required
527
+ if ( logLevelXp >= logLevelXpRequired ) {
528
+ setLogLevelXp ( ( prevLogLevelXp ) => prevLogLevelXp - logLevelXpRequired ) ; //decrease log level XP by XP required
529
+ setLogLevelXpRequired (
530
+ ( prevLogLevelXpRequired ) => prevLogLevelXpRequired + logLevel + 1 ,
531
+ ) ; //increase XP required to level up by log level
532
+ setLogLevel ( ( prevLogLevel ) => prevLogLevel + 1 ) ; //increase log level by 1
533
+ }
534
+ }
535
+
402
536
return (
403
537
//dynamic app HTML output
404
538
< div className = "App" >
@@ -504,6 +638,30 @@ function App() {
504
638
< CostDisplay cost = { 5e4 * Math . pow ( 10 , totalUpgradesMultiplier ) } />
505
639
</ td >
506
640
</ tr >
641
+ < tr >
642
+ < td >
643
+ Level Upgrade Multiplier:{ ' ' }
644
+ < NumericDisplay value = { upgradeLevelMultiplier } shortForm = { false } />
645
+ < br />
646
+ { /*upgrade level upgrades multiplier*/ }
647
+ < button onClick = { ( ) => upgradeLevelUpgradeMultiplier ( ) } >
648
+ Upgrade Level Upgrade Multiplier
649
+ </ button >
650
+ < CostDisplay cost = { 2.5e4 * Math . pow ( 10 , upgradeLevelMultiplier ) } />
651
+ </ td >
652
+ </ tr >
653
+ < tr >
654
+ < td >
655
+ Log Level Multiplier:{ ' ' }
656
+ < NumericDisplay value = { logLevelMultiplier } shortForm = { false } />
657
+ < br />
658
+ { /*upgrade log level multiplier*/ }
659
+ < button onClick = { ( ) => upgradeLogLevelMultiplier ( ) } >
660
+ Upgrade Log Level Multiplier
661
+ </ button >
662
+ < CostDisplay cost = { 5e5 * Math . pow ( 10 , logLevelMultiplier ) } />
663
+ </ td >
664
+ </ tr >
507
665
< table >
508
666
< thead >
509
667
< tr >
0 commit comments