dadish 2, fbwg3, and progress knight quest

This commit is contained in:
BluePotato102
2023-12-10 09:44:43 -06:00
parent 6b3eacdd04
commit ec387d014c
70 changed files with 5397 additions and 3 deletions
+7 -2
View File
@@ -545,8 +545,13 @@
"aliases": [],
"categories": []
},
"Progress Knight": {
"path": "progress-knight",
"Progress Knight Quest": {
"path": "progress-knight-quest",
"aliases": [],
"categories": []
},
"Progress Knight Reborn": {
"path": "progress-knight-reborn",
"aliases": [],
"categories": []
},
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"height":29,"infinite":false,"layers":[{"data":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,14,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,6,6,6,6,1,13,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,1,1,1,1,1,1,13,0,0,0,0,0,1,1,1,1,1,1,1,1,5,4,13,0,0,0,0,0,2,1,7,7,7,7,1,5,0,0,0,0,0,0,0,0,0,4,13,0,0,0,0,1,1,0,0,4,1,1,5,0,0,4,6,6,6,6,6,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,1,1,0,0,0,4,1,0,0,0,0,4,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,1,0,0,0,0,1,0,0,0,0,0,4,0,0,2,1,3,0,0,0,0,0,0,2,7,7,7,7,3,0,0,0,0,0,12,1,1,1,1,1,0,0,0,2,1,0,0,0,0,0,0,0,0,1,1,1,1,6,6,6,6,1,5,0,0,0,0,1,3,0,0,0,2,5,0,0,4,1,1,0,0,2,1,1,0,0,0,13,0,0,0,0,4,1,1,1,1,1,1,1,5,0,0,0,0,0,1,1,1,1,1,5,0,0,0,0,1,1,0,2,1,1,5,0,0,0,4,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,1,5,0,0,0,0,0,4,13,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,4,13,0,0,0,0,0,0,0,0,0,0,2,5,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,4,14,14,14,14,14,14,14,14,14,14,5,0,0,0,12,1,0,0,0,0,2,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,12,14,14,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,4,1,1,1,1,3,0,0,0,0,0,1,1,0,0,12,5,0,0,0,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,5,0,0,0,4,1,1,1,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,1,1,1,1,1,1,1,8,8,8,8,1,1,14,14,1,1,14,14,14,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"height":29,"name":"Ground","opacity":1,"type":"tilelayer","visible":true,"width":39,"x":0,"y":0},{"draworder":"topdown","name":"Chars","objects":[{"gid":16,"height":64,"id":1,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":32,"y":160},{"gid":17,"height":64,"id":2,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":96,"y":160},{"gid":19,"height":64,"id":3,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":944,"y":672},{"gid":18,"height":64,"id":4,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":1136,"y":576},{"gid":20,"height":64,"id":5,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":368,"y":128},{"gid":20,"height":64,"id":6,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":928,"y":128},{"gid":20,"height":64,"id":7,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":992,"y":320},{"gid":20,"height":64,"id":8,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":672,"y":560},{"gid":20,"height":64,"id":9,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":272,"y":848},{"gid":21,"height":64,"id":10,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":608,"y":848},{"gid":21,"height":64,"id":11,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":64,"y":816},{"gid":21,"height":64,"id":12,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":208,"y":512},{"gid":21,"height":64,"id":13,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":768,"y":320},{"gid":21,"height":64,"id":14,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":608,"y":160}],"opacity":1,"type":"objectgroup","visible":true,"x":0,"y":0},{"draworder":"topdown","name":"Objects","objects":[],"opacity":1,"type":"objectgroup","visible":true,"x":0,"y":0}],"nextobjectid":15,"orientation":"orthogonal","renderorder":"right-down","tiledversion":"1.1.3","tileheight":32,"tilesets":[{"firstgid":1,"source":"../../../assets/tilemaps/tilesets/Ground.json"},{"firstgid":16,"source":"../../../assets/tilemaps/tilesets/Chars.json"},{"firstgid":24,"source":"../../../assets/tilemaps/tilesets/LargeObjects.json"},{"firstgid":27,"source":"../../../assets/tilemaps/tilesets/Objects.json"}],"tilewidth":32,"type":"map","version":1,"width":39}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"height":29,"infinite":false,"layers":[{"data":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,4,3,0,0,0,0,0,0,0,0,0,0,2,5,0,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,4,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0,0,0,0,0,0,2,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,5,0,0,0,1,1,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,13,0,0,0,0,0,0,12,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,12,1,1,1,1,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,13,0,0,0,0,0,0,0,12,1,1,1,1,1,1,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,12,1,1,1,1,1,1,1,1,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,13,0,0,0,0,12,1,1,1,1,1,1,1,1,1,1,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,12,1,1,1,1,1,1,1,1,1,13,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,12,1,1,1,1,1,1,1,1,1,1,1,13,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,1,7,7,7,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"height":29,"name":"Ground","opacity":1,"type":"tilelayer","visible":true,"width":39,"x":0,"y":0},{"draworder":"topdown","name":"Chars","objects":[{"gid":18,"height":64,"id":1,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":512,"y":800},{"gid":19,"height":64,"id":2,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":672,"y":800},{"gid":16,"height":64,"id":3,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":1136,"y":160},{"gid":17,"height":64,"id":4,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":48,"y":160},{"gid":20,"height":64,"id":5,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":272,"y":240},{"gid":20,"height":64,"id":6,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":856,"y":656},{"gid":20,"height":64,"id":7,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":616,"y":384},{"gid":20,"height":64,"id":8,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":480,"y":144},{"gid":21,"height":64,"id":9,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":576,"y":144},{"gid":21,"height":64,"id":10,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":192,"y":368},{"gid":21,"height":64,"id":11,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":696,"y":384},{"gid":21,"height":64,"id":12,"name":"","rotation":0,"type":"","visible":true,"width":64,"x":1008,"y":304}],"opacity":1,"type":"objectgroup","visible":true,"x":0,"y":0},{"draworder":"topdown","name":"Objects","objects":[],"opacity":1,"type":"objectgroup","visible":true,"x":0,"y":0}],"nextobjectid":15,"orientation":"orthogonal","renderorder":"right-down","tiledversion":"1.1.3","tileheight":32,"tilesets":[{"firstgid":1,"source":"../../../assets/tilemaps/tilesets/Ground.json"},{"firstgid":16,"source":"../../../assets/tilemaps/tilesets/Chars.json"}],"tilewidth":32,"type":"map","version":1,"width":39}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -17797,7 +17797,7 @@ function() {
}
function g(a, b) {
return '\n <div id="h5branding-background"></div>\n <div id="h5branding-version"></div>\n <div id="h5branding-logo"></div>\n <div id="h5branding-center">\n <div id="h5branding-ad"></div>\n <div id="h5branding-wrapper">\n <img src="'.concat(a, '" />\n <div id="h5branding-bar"></div>\n <button id="h5branding-button" onclick="h5branding.SplashLoader.getInstance().onPlayButtonClick();">Play</button>\n </div>\n </div>\n <div id="h5branding-title">').concat(b, "</div>\n ")
return '\n <div id="h5branding-background"></div>\n <div id="h5branding-version"></div>\n <div id="h5branding-center">\n <div id="h5branding-ad"></div>\n <div id="h5branding-wrapper">\n <img src="'.concat(a, '" />\n <div id="h5branding-bar"></div>\n <button id="h5branding-button" onclick="h5branding.SplashLoader.getInstance().onPlayButtonClick();">Play</button>\n </div>\n </div>\n <div id="h5branding-title">').concat(b, "</div>\n ")
}
var h = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {};
c(function(a, c) {
+5
View File
@@ -0,0 +1,5 @@
################################################################################
# Данный GITIGNORE-файл был автоматически создан Microsoft(R) Visual Studio.
################################################################################
/.vs
+1
View File
@@ -0,0 +1 @@
Progress Knight Quest
+170
View File
@@ -0,0 +1,170 @@
version 2.2.8 / 09.01.2023
* 6 new milestones
* 1 new Dark Matter skill
* Buff to end game shop items
* Buff early game Dark Matter content
* Fix the lag when becoming heroic
* Bug fixes
* Improve the code quality
version 2.2.6.2 / 05.01.2023
* Add 5 new end game shop items
version 2.2.6.1 / 02.01.2023
* Fix a few bugs caused by the performance update
* Add a toolip which contains the requirements for hero jobs.
version 2.2.6 / 01.01.2023
* Greatly improve the performance of the game by ~2x
version 2.2.5 / 01.01.2023
* Buffed Faint Hope, now affected by time Warping
* Add another Dark Matter shop upgrade
* Fix a few small bugs and add more formatting
* Slightly increase the xp cost of jobs and skills past 1e280
* Buff a few Dark Matter skills
version 2.2.4 / 31.12.2022
* Add 2 new milestones
* Do not render when the game is not visible (still gain progress)
* Fix minor spelling mistakes and bugs
* Clean up the code
* Add goals to challenges
* Format the Effect column when the numbers get too large
version 2.2.3 / 29.12.2022
* Added 6 new skills
* Added 2 new shop items
* Added 4 new milestones
* Added a new Dark Matter mechanic
* Rebalance the items from the Dark Matter shop
version 2.2.2 / 26.12.2022
* Jobs and skills can now continue past infinity (1e305)
version 2.2.1 / 25.12.2022
* Added Medieval, Extended, British and Modern coin display options
* Fix a few small bugs
version 2.2 / 25.12.2022
* Added Dark Matter and Dark Orbs
* Removed the games completed boosts
* Made challenges even stronger!
version 2.1.17 / 18.12.2022
* Add a fifth challenge and rework the previous ones
* Fix a few spelling mistakes
version 2.1.16 / 02.12.2022
* fix loading old saves
version 2.1.15 / 30.11.2022
* challenges now give rewards only on exit
* show current challenge reward correctly
* fixed rounding up values (now they shown rounding down)
version 2.1.14a / 29.11.2022
* bugfix: reset challenge rewards on game completion
version 2.1.14 / 29.11.2022
* 4 challenges are added
* Fix spelling and grammar in various tooltips
* New color scheme for colorblind people (Blue-yellow color blindness)
version 2.1.13 / 27.11.2022
* Minor bugfixes
* Error display added for easier bugs submission
* Time Warping skill slightly buffed
* Mind Release skill added
* Mind Sieze removed
* Added evil/s, essence/s stats
* Buffed Faint Hope milestone
version 2.1.12a / 26.11.2022
* bugfix: Great jobs and skills must do level ups even after maximum
version 2.1.12 / 25.11.2022
* added Stats Page
* added Changelog
version 2.1.11 / 24.11.2022
* improved code quality
version 2.1.10 / 23.11.2022
* tooltip for auto-buy
version 2.1.9 / 21.11.2022
* Heroic Milestones rebalanced completely
* Show effect description for Milestones from game data
* small UI update
* fixes for infinity values
version 2.1.8a / 20.11.2022
* bugfix
version 2.1.8 / 19.11.2022
* Great Cosmic Recollection is really Great now!
* fix for items circular icons
* update for milestone tooltips
* Transcend button will glow green when new milestone is in reach
version 2.1.7 / 18.11.2022
* New 13 Heroic Milestones
* changed name to Progress Knight Quest
* Milestones balancing
version 2.1.6 / 17.11.2022
* UI overhaul. Options for Standard or "W I D E"
* default UI is Standard
* You can change font-size now
* added Greater jobs, skills and items
* Essence Milestones are completed
* Engineering notation added
* the game can be completed many times, each time will be added boost
* Click on items table header to enable auto-buy
version 2.1.5 / 16.11.2022
* new format for Age display
* Milestone "Warp Drive" renamed to "Eternal Time"
* 3 New Milestones
version 2.1.4 / 15.11.2022
* Time Warping display and caclulation errors are fixed
* Milestones UI update
* added new item: Spaceship
* added Scientific notation
* added new 2 Milestones
* Milestones balancing
version 2.1.3 / 14.11.2022
* Time Warping enable/disable button is removed
* Time Warping enabled always
* added confirmation dialog on hard reset
* added first 5 Milesones
* if game cannot load save data it will not hung now
* fix some importing save issues
* added transcend button to quick bar rebirth buttons
* added discord icon to site server
version 2.1.2 / 13.11.2022
* realtime stops on pause or death
* save copied to clipboard
* added Rebirth title for quick bar rebirth buttons
* Time Warping value format changed
version 2.1.1 / 12.11.2022
* added rebirth buttons in quick bar
* combined jobs, skill and items on one page
* autobuy/automation is always enabled
* removed unused 2.0 code/UI
* when autobuy for items are enabled, items circled icons has different color
* update number formatting
* added realtime timer
* updated formatting for coins
* small UI update
* light/dark theme now saved
version 2.1.0 / 11.11.2022
* jobs and skills progress simultaneously
* auto select best job
* auto-buy for items
@@ -0,0 +1,44 @@
.colorblind {
background-color: rgb(32, 32, 32);
color: white;
}
.colorblind .panel {
background-color: rgb(46, 46, 46);
}
.colorblind .button {
background-color: rgb(31, 31, 31);
border-color: white !important;
color: white !important
}
.colorblind .button-no-button {
border: 0 !important;
color: white !important;
width: 100%;
text-align: left;
}
.colorblind .button-no-button:hover {
cursor: pointer;
}
.colorblind .w3-bordered tr, .w3-table-all tr {
border-bottom: 1px solid rgb(73, 73, 73);
}
.colorblind .w3-button:hover {
background-color: rgb(82, 82, 82) !important;
color: white !important
}
.colorblind .selected {
color: rgb(39, 234, 17) !important
}
.colorblind .progress-text {
color: hotpink;
}
@@ -0,0 +1,38 @@
@keyframes currency-rainbow{
0% {
color: #FF4040;
}
16% {
color: #FFFF40;
}
33% {
color: #40FF40;
}
50% {
color: #40FFFF;
}
66% {
color: #4040FF;
}
83% {
color: #FF40FF;
}
100% {
color: #FF4040;
}
}
.currency-bold{
font-weight: bold;
}
.currency-shadow{
font-weight: bold;
text-shadow: 0 0 5px currentColor;
}
.currency-shadow-rainbow{
font-weight: bold;
text-shadow: 0 0 5px currentColor;
animation: currency-rainbow 12s infinite;
}
+40
View File
@@ -0,0 +1,40 @@
.dark {
background-color: rgb(32, 32, 32);
color: white;
}
.dark .panel {
background-color: rgb(46, 46, 46);
}
.dark .button {
background-color: rgb(31, 31, 31);
border-color: white !important;
color: white !important
}
.dark .button-no-button {
border: 0 !important;
color: white !important;
width: 100%;
text-align: left;
}
.dark .button-no-button:hover {
cursor: pointer;
}
.dark .w3-bordered tr, .w3-table-all tr {
border-bottom: 1px solid rgb(73, 73, 73);
}
.dark .w3-button:hover {
background-color: rgb(82, 82, 82) !important;
color: white!important
}
.dark .selected {
color: rgb(39, 234, 17) !important
}
+376
View File
@@ -0,0 +1,376 @@
/*w3 overrides*/
.w3-button, .w3-bar-item {
padding: 0.4em 0.8em;
}
.w3-margin {
margin: 0.8em !important
}
.w3-margin-top {
margin-top: 0.8em !important
}
.w3-margin-bottom {
margin-bottom: 0.8em !important
}
.w3-margin-left {
margin-left: 0.8em !important
}
.w3-margin-right {
margin-right: 0.8em !important
}
.w3-bordered tr {
border-bottom: 0.05em solid #ddd
}
.w3-striped tbody tr:nth-child(even) {
background-color: #f1f1f1
}
.w3-bordered th {
height: 2em;
padding: 0.4em 1em 0 1em;
}
.w3-bordered td {
height: 2em;
padding: 0 0 0 0;
padding-left: 0.8em;
}
.w3-button:hover {
background-color: rgb(204, 204, 204) !important;
}
.w3-table td:first-child, .w3-table th:first-child {
padding-left: 0.3em;
}
.w3-padding {
padding: 0.4em 0.8em !important;
}
/*main*/
body {
background-color: rgb(243, 243, 243);
}
.text-caption {
font-size: larger
}
table {
white-space: normal;
line-height: normal;
font-weight: normal;
font-style: normal;
text-align: start;
font-variant: normal;
}
td {
vertical-align: middle !important;
}
.legendary {
color: rgb(245, 119, 13);
}
.current {
background-color: orange !important;
}
.current-hero {
background-color: rgb(39, 234, 17) !important;
}
.progress-text {
position: absolute;
top: 5%;
left: 0.5em;
bottom: 0%;
color: white
}
.progress-bar {
margin-top: 0.05em;
position: relative;
background-color: rgb(12, 101, 173);
width: 100%;
}
.progress-fill {
height: 1.6em;
background-color: rgb(46, 148, 231);
}
.progress-bar-hero {
margin-top: 0.05em;
position: relative;
background-color: rgb(108, 59, 59);
width: 100%;
}
.progress-fill-hero {
height: 1.6em;
background-color: rgb(165, 60, 21);
}
.progress-bar-finished {
margin-top: 0.05em;
position: relative;
background-color: rgb(165, 60, 21);
width: 100%;
}
.progress-fill-finished {
height: 1.6em;
background-color: rgb(212, 80, 30);
}
.hidden {
display: none !important;
}
.hiddenTask {
display: none !important;
}
.button {
border: 0.1em groove black !important;
}
.button-no-button {
color: white !important;
border: 0 !important;
width: 100%;
text-align: left;
}
.button-no-button:hover {
cursor: pointer;
}
.item-button {
background-color: white;
text-align: center;
width: 93%;
height: 1.8em;
padding: 0;
}
.item-button:hover {
cursor: pointer;
background-color: rgb(192, 192, 192);
}
.item-header-row:hover {
cursor: pointer;
}
button:focus {
outline: none;
}
.scroll {
overflow-y: auto;
}
.tooltip, .tooltip-pointer {
position: relative;
display: inline-block;
}
.challenge-title {
color: red;
border-bottom: 0.1em solid red;
padding-bottom: 0.4em;
margin-bottom: 0.4em;
}
.challenge {
border: 0.1em solid red;
}
.dark-matter-title {
color:gold;
border-bottom: 0.1em solid goldenrod;
padding-bottom: 0.4em;
margin-bottom: 0.4em;
}
.tooltip .tooltipText {
visibility: hidden;
width: 25em;
background-color: black;
color: #fff;
text-align: center;
border-radius: 0.5em;
padding: 0.5em 0.5em;
/* Position the tooltip */
position: absolute;
z-index: 1;
top: 0;
left: 102%;
opacity: 0;
transition: opacity 0.5s;
}
.tooltip:hover .tooltipText {
visibility: visible;
opacity: 0.8;
}
.tooltip-pointer .tooltipText-pointer {
visibility: hidden;
width: 20em;
background-color: black;
color: #fff;
text-align: center;
border-radius: 0.5em;
padding: 0.5em 0.5em;
/* Position the tooltip */
position: absolute;
z-index: 1;
top: 0;
left: 5%;
opacity: 0;
transition: opacity 0.5s;
}
.tooltip-pointer:hover .tooltipText-pointer {
visibility: visible;
opacity: 0.8;
}
.sidebar-element {
margin-bottom: 0.8em;
}
.slidecontainer {
width: 100%;
}
.inline {
display: inline-block;
}
.panel {
background-color: white;
}
.small-margin {
margin-bottom: 0.1em;
}
.heading {
position: relative;
}
.header img {
position: static;
float: left;
width: 36px;
height: 36px;
}
.header h1 {
position: static;
top: 2px;
left: 10px;
}
.row {
display: flex;
align-items: flex-start;
}
.column {
display: flex;
flex-direction: column;
overflow-x: auto;
overflow-y: hidden;
}
.quick-bar {
top: 0;
}
.tabs-tab-column {
width: 65em;
height: auto;
}
.tabs-main-column {
width: 65em;
height: auto;
float: right;
margin-bottom: 4em;
}
.plain-tab-column {
width: 164em;
height: auto;
}
.plain-main-column {
width: 164em;
height: auto;
float: right;
margin-bottom: 4em;
}
.settings-tab-column {
width: 56em;
height: auto;
}
.settings-main-column {
width: 56em;
height: auto;
float: right;
margin-bottom: 4em;
}
.baritem {
width: 8.1rem;
height: auto;
text-align: center;
}
.outer-circle {
width: 1.7em;
height: 1.7em;
border-radius: 50%;
border: solid 0.12em #ccc;
}
.center-g-inside {
display: grid;
place-items: center;
}
.inner-circle {
width: 80%;
height: 80%;
border-radius: 50%;
}
.selected {
color: rgb(39, 234, 17)!important
}
.reward {
color: rgb(64, 237, 23);
padding-bottom: 0.5em;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+718
View File
@@ -0,0 +1,718 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/dark.css">
<link rel="stylesheet" type="text/css" href="css/colorblind.css">
<link rel="stylesheet" type="text/css" href="css/currencies.css">
<title>Progress Knight Quest</title>
<link rel="shortcut icon" href="img/logo.ico" />
</head>
<body id="body" class="dark" style="font-size: x-small">
<div class="w3-margin">
<div class="header">
<img src="img/logos.png" alt="logos" />
<h3>Progress Knight Quest</h3>
</div>
<div id="row" class="row">
<div id="info" class="panel w3-padding quick-bar" style="width:20em">
<div id="challengeTitle" class="challenge-title">
In challenge: <span id="challengeName"></span>
</div>
<div class="text-caption" id="errorInfo" hidden="true">
<div>⚠️ Oh no! It looks like something on the site broke.. If this issue persists, feel free to contact the developers.</div>
<br>
</div>
<div id="deathText" class="hidden">
<div class="text-caption" style="color: red">Age has caught up to you</div>
<div class="sidebar-element" style="color: gray">Your age has met your lifespan; use the amulet to rebirth before you pass away</div>
</div>
<div class="text-caption"><span id="ageDisplay">Age 14 Day 0</span></div>
<div class="sidebar-element" style="color: gray">
Lifespan: <span id="lifespanDisplay">70</span> years
<br>Real Time: <span id="realtimeDisplay">00:00:00</span>
</div>
<button id="pauseButton" class="w3-button button sidebar-element" onClick="togglePause()">Pause</button>
<div class="text-caption" id="coinDisplay">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<div style="color: gray">Balance</div>
<ul class="sidebar-element" style="padding-left: 1em;">
<li>
<span style="color: rgb(9, 160, 230)">Net: </span><b id="signDisplay"></b>
<div id="netDisplay" style="display: inline;">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</li>
<li>
<span style="color: green">Income: </span>
<div id="incomeDisplay" style="display: inline;">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</li>
<li>
<span style="color: red">Expense: </span>
<div id="expenseDisplay" style="display: inline;">
<span></span>
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</li>
</ul>
<div id="quickTaskDisplay" class="hidden">
<div class="small-margin inline job progress-bar progressBar">
<div class="progress-fill progressFill current"></div>
<div class="progress-text name">Task</div>
</div>
</div>
<div class="text-caption" style="padding-top: 0.2em"><span style="color: rgb(15, 105, 207)">Happiness: </span><span id="happinessDisplay"></span></div>
<div style="color: gray" class="sidebar-element">Affects all XP gain</div>
<div id="evilInfo" class="hidden">
<div class="text-caption"><span style="color: rgb(200, 0, 0)">Evil: </span><span id="evilDisplay"></span></div>
<div style="color: gray" class="sidebar-element">Affects Dark Magic XP gain</div>
</div>
<div id="essenceInfo" class="hidden">
<div class="text-caption"><span style="color: rgb(24, 210, 217)">Essence: </span><span id="essenceDisplay"></span></div>
<div style="color: gray" class="sidebar-element">Affects Almightiness XP gain</div>
</div>
<div id="darkMatterInfo" class="hidden">
<div class="text-caption"><span style="color: rgb(114, 83, 182)">Dark Matter: </span><span id="darkMatterDisplay"></span></div>
<div style="color: gray" class="sidebar-element">Affects all XP gain</div>
</div>
<div id="darkOrbsInfo" class="hidden">
<div class="text-caption"><span style="color: rgb(143, 114, 207)">Dark Orbs: </span><span id="darkOrbsDisplay"></span></div>
<div style="color: gray" class="sidebar-element">Used to buy items in the Dark Matter shop</div>
</div>
<div id="timeWarping">
<div class="text-caption"><span style="color: rgb(204, 34, 219)">Time Warping: </span><span id="timeWarpingDisplay"></span></div>
<div style="color: gray" class="sidebar-element">Affects game speed</div>
</div>
<div id="rebirthButton1" class="hidden">
<div class="text-caption"><span style="color: rgb(102, 229, 71)">Rebirth</span></div>
<button class="w3-button button" style="margin-bottom: 0.1em; margin-top: 0.8em; width: 100%" onClick="rebirthOne()">Touch the eye</button>
</div>
<div id="rebirthButton2" class="hidden">
<button class="w3-button button" style="margin-bottom: 0.1em; margin-top: 0.8em; width: 100% " onClick="rebirthTwo()">Embrace evil: <span style="color: rgb(240, 0, 0)" id="evilGainButtonDisplay"></span></button>
</div>
<div id="rebirthButton3" class="hidden">
<button class="w3-button button" style="margin-bottom: 0.1em; margin-top: 0.8em; width: 100% " onClick="rebirthThree()">Transcend: <span style="color: rgb(24, 210, 217)" id="essenceGainButtonDisplay"></span></button>
</div>
<div id="rebirthButton4" class="hidden">
<button class="w3-button button" style="margin-bottom: 0.1em; margin-top: 0.8em; width: 100% " onClick="rebirthFour()">Collapse the universe: <span style="color: rgb(102, 229, 71)" id="darkMatterGainButtonDisplay"></span></button>
</div>
</div>
<div id="column" class="column">
<div id="tabcolumn" class="panel w3-margin-left tabs-tab-column">
<div class="w3-button w3-bar-item tabButton baritem" id="jobsTabButton" onClick="setTab('jobs')">Hero</div>
<div class="w3-button w3-bar-item tabButton baritem hidden" id="skillsTabButton" onClick="setTab('skills')">Skills</div>
<div class="w3-button w3-bar-item tabButton baritem hidden" id="shopTabButton" onClick="setTab('shop')">Shop</div>
<div class="w3-button w3-bar-item tabButton baritem" id="challengesTabButton" onClick="setTab('challenges')">Challenges</div>
<div class="w3-button w3-bar-item tabButton baritem" id="milestonesTabButton" onClick="setTab('milestones')">Milestones</div>
<div class="w3-button w3-bar-item tabButton baritem" id="rebirthTabButton" onClick="setTab('rebirth')">Amulet</div>
<div class="w3-button w3-bar-item tabButton baritem" id="darkMatterTabButton" onClick="setTab('darkMatter')">Dark Matter</div>
<div class="w3-button w3-bar-item tabButton baritem" id="settingsTabButton" onClick="setTab('settings')">Settings</div>
</div>
<div id="maincolumn" class="panel w3-margin-left w3-margin-top w3-padding tabs-main-column">
<template class="headerRowTaskTemplate">
<tr>
<th class="category" style="width: 20em">Job</th>
<th>Level</th>
<th class="valueType" style="width: 18em">Value type</th>
<th>Xp/day</th>
<th>Xp&nbsp;left</th>
<th class="maxLevel">Max</th>
</tr>
</template>
<template class="rowTaskTemplate">
<tr>
<td>
<div class="progress-bar progressBar tooltip">
<div class="progress-fill progressFill"></div>
<div class="progress-text name">Task</div>
<span class="tooltipText"></span>
</div>
</td>
<td class="level">Level</td>
<td class="value">
<div class="effect"></div>
<div class="income">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</td>
<td class="xpGain">Xp/day</td>
<td class="xpLeft">Xp left</td>
<td class="maxLevel">Max</td>
</tr>
</template>
<template class="headerRowItemTemplate">
<tr class="item-header-row" onclick="forceAutobuy()">
<th class="category" style="width: 20em">
<button class="button-no-button tooltip" style="background-color:transparent;" onclick="forceAutobuy()">
<span class="name">Item</span>
<span class="tooltipText">Click to activate auto-buy</span>
</button>
</th>
<th>Active</th>
<th style="width: 20em">Effect</th>
<th>Expense/day</th>
</tr>
</template>
<template class="rowItemTemplate">
<tr>
<td>
<button class="button item-button tooltip">
<span class="name"></span>
<span class="tooltipText">tooltip</span>
</button>
</td>
<td>
<div class="outer-circle center-g-inside">
<div class="active inner-circle"></div>
</div>
</td>
<td class="effect"></td>
<td class="expense">
<span></span>
<span></span>
<span></span>
<span></span>
</td>
</tr>
</template>
<template class="headerRowMilestoneTemplate">
<tr>
<th style="width: 6em">Goal</th>
<th style="width: 15em" class="category">Milestone Tier</th>
<th>Effect</th>
</tr>
</template>
<template class="rowMilestoneTemplate">
<tr>
<td style="color: rgb(24, 210, 217)" class="essence"></td>
<td>
<div class="progress-bar progressBar tooltip" style="width: 100%">
<div class="progress-fill progressFill" style="background-color: green"></div>
<span class="tooltipText"></span>
<div class="progress-text name">Milestone</div>
</div>
</td>
<td class="description"></td>
</tr>
</template>
<template class="requiredRowTemplate">
<td class="w3-text-gray" style="padding-left: 0.8em;" colspan=5>
Required:
<div class="value" colspan=5 style="display:inline">
<span class="levels"></span>
<div class="coins" style="display:inline">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<span style="color: rgb(200, 0, 0)" class="evil"></span>
<span style="color: rgb(24, 210, 217)" class="essence"></span>
<span style="color: rgb(114, 83, 182)" class="darkMatter"></span>
</div>
</td>
</template>
<div class="tab" id="jobs">
<div id="jobPage" style="flex: 1; margin-left: 0.5em;">
<table id="jobTable" class="w3-table w3-bordered">
</table>
</div>
<div id="skillPage" style="flex: 1; margin-left: 0.5em;">
<table id="skillTable" class="w3-table w3-bordered">
</table>
</div>
<div id="itemPage" style="flex: 1; margin-left: 0.5em;">
<table id="itemTable" class="w3-table w3-bordered">
</table>
</div>
</div>
<div class="tab hidden" id="skills">
</div>
<div class="tab hidden" id="shop">
</div>
<div class="tab" id="challenges">
<div class="panel w3-margin-left w3-margin-top w3-padding">
<div>
<div style="color:rgb(240, 0, 0)">Starting a challenge will <b>reset</b> your coins, levels and max levels.</div>
<div>The more you advance in the challenge, the higher the reward.</div>
<div>Challenge rewards are always active, even in challenges.</div>
</div>
<div id="exitChallengeDiv">
<p>Current challenge: <b><span id="activeChallengeName"></span></b></p>
<button class="w3-button button" onclick="exitChallenge()">Exit challenge</button>
<div id="currentChallengeReward1" class="an_unhappy_life hidden" style="display: inline; padding-left:1em">Current reward: Multiplies happiness by x<span id="currentChallengeHappinessBuff"></span></div>
<div id="currentChallengeReward2" class="rich_and_the_poor hidden" style="display: inline; padding-left:1em">Current reward: Multiplies income by x<span id="currentChallengeIncomeBuff"></span></div>
<div id="currentChallengeReward3" class="time_does_not_fly hidden" style="display: inline; padding-left:1em">Current reward: Multiplies time warping by x<span id="currentChallengeTimewarpingBuff"></span></div>
<div id="currentChallengeReward4" class="dance_with_the_devil hidden" style="display: inline; padding-left:1em">Current reward: Multiplies essence gain by x<span id="currentChallengeEssenceGainBuff"></span></div>
<div id="currentChallengeReward5" class="legends_never_die hidden" style="display: inline; padding-left:1em">Current reward: Multiplies evil gain by x<span id="currentChallengeEvilGainBuff"></span></div>
</div>
<div id="anUnhappyLifeChallenge" style="padding-top:2em">
<div class="text-caption challenge-title">1. An unhappy life</div>
<div style="color:gray; padding-bottom:0.3em">Reduces happiness by ^0.5</div>
<div style="color: gold; padding-bottom: 0.3em">Goal: Reach <span id="challengeGoal1">992.2M</span> Happiness</div>
<div id="challengeReward1" class="reward">Reward: Multiplies happiness by x<span id="challengeHappinessBuff">1</span></div>
<button id="challengeButton1" class="w3-button button" onclick="enterChallenge('an_unhappy_life')">Enter challenge</button>
</div>
<div id="theRichAndThePoorChallenge" style="padding-top:2em">
<div class="text-caption challenge-title">2. The rich and the poor</div>
<div style="color:gray; padding-bottom:0.3em">Reduces income by ^0.35</div>
<div style="color: gold; padding-bottom: 0.3em">Goal: Reach <div id="challengeGoal2" class="coins" style="display:inline">
<span></span>
<span></span>
<span></span>
<span></span>
</div> Gross Income</div>
<div id="challengeReward2" class="reward">Reward: Multiplies income by x<span id="challengeIncomeBuff">1</span></div>
<button id="challengeButton2" class="w3-button button" onclick="enterChallenge('rich_and_the_poor')">Enter challenge</button>
</div>
<div id="timeDoesNotFlyChallenge" style="padding-top:2em">
<div class="text-caption challenge-title">3. Time does not fly</div>
<div style="color: gray; padding-bottom: 0.3em">Reduces time warping by ^0.7</div>
<div style="color: gold; padding-bottom: 0.3em">Goal: Reach x<span id="challengeGoal3">1.0M</span> Time Warping</div>
<div id="challengeReward3" class="reward">Reward: Multiplies time warping by x<span id="challengeTimewarpingBuff">1</span></div>
<button id="challengeButton3" class="w3-button button" onclick="enterChallenge('time_does_not_fly')">Enter challenge</button>
</div>
<div id="danceWithTheDevilChallenge" style="padding-top:2em">
<div class="text-caption challenge-title">4. Dance with the devil</div>
<div style="color: gray; padding-bottom: 0.3em">Reduces Dark Magic and Almightiness XP effect enormously, max level reduces XP gain and happiness is reduced by ^0.075</div>
<div style="color: gold; padding-bottom: 0.3em">Goal: Reach <span id="challengeGoal4">5.8k</span> Evil Gain</div>
<div id="challengeReward4" class="reward">Reward: Multiplies essence gain by x<span id="challengeEssenceGainBuff">1</span></div>
<button id="challengeButton4" class="w3-button button" onclick="enterChallenge('dance_with_the_devil')">Enter challenge</button>
</div>
<div id="legendsNeverDieChallenge" style="padding-top:2em">
<div class="text-caption challenge-title">5. Legends never die</div>
<div style="color: gray; padding-bottom: 0.3em">Reduces your lifespan by ^0.72, happiness does nothing and Dark Magic XP effect is always 1x</div>
<div style="color: gold; padding-bottom: 0.3em">Goal: Reach Chairman lvl <span id="challengeGoal5">1227</span></div>
<div id="challengeReward5" class="reward">Reward: Multiplies evil gain by x<span id="challengeEvilGainBuff">1</span></div>
<button id="challengeButton5" class="w3-button button" onclick="enterChallenge('legends_never_die')">Enter challenge</button>
</div>
</div>
</div>
<div class="tab" id="milestones">
<div id="milestonePage" style="flex: 1; margin-left: 0.5em;">
<table id="milestoneTable" class="w3-table w3-bordered">
</table>
</div>
<div id="dummyPage1" style="flex: 2; margin-left: 0.5em;">
</div>
</div>
<div class="tab" id="rebirth">
<div id="rebirthPage" style="flex: 1; margin-left: 0.5em;" >
<ul>
<li style="margin: 0.4em;">
You stumble across a strange looking amulet on your 25th birthday. It does not look like
it has any worth on the market given that it's made from cheap-looking copper. However, you
feel a weird urge to keep the amulet, so you slip it into your pocket for safekeeping.
</li>
<li style="margin: 0.4em;" id="rebirthNote1" class="hidden">
On your 45th birthday, you feel the amulet shiver uncontrollably in your pocket. You take it
out and the constant shivering suddenly stops. More to your bizarre surprise, you notice
a strange etching on the centre of the amulet.
</li>
<li style="margin: 0.4em;" id="rebirthNote2" class="hidden">
<div style="margin-bottom: 0.4em">
On your 65th birthday, you once again encounter the strange, unexplained shivering from your
amulet. But this time, a living eyeball emerges from the centre. Although terribly frightened,
you realise you do not have many years to live left anyway so you consider touching the eye
to see what happens.
</div>
<i style="color: grey">
By touching the eyeball, you will be reborn and have to restart life again, losing all your levels and coins.
However, you will gain <b>xp multipliers</b> for your classes and abilities equivalent to: <b>1 + the max level of the class or ability / 10.</b>
This means you will learn everything again much more quickly than you did in your previous life. <span style="color: rgb(200, 0, 0)">
Something tells you that the amulet might evolve after living for <b>2 whole centuries</b>...
</span>
</i>
<br>
<button class="w3-button button" style="margin-bottom: 0.4em; margin-top: 0.4em " onClick="rebirthOne()">Touch the eye</button>
<br>
</li>
<li style="margin: 0.4em;" id="rebirthNote3" class="hidden">
<div style="margin-bottom: 0.4em;">
Your gut instinct was right. The moment you hit the grand age of 200, you hear an ominous hum coming from the amulet.
A mouth emerges from its surface and begins to cackle, and proceeds to say: "So you've made it this far... Are you ready to embrace evil?"
<br><span style="color: rgb(200, 0, 0)">
The amulet might transform even further after living for a <b>millennium</b>.
</span>
</div>
<i style="color: rgb(200, 0, 0)">
If you decide to embrace evil, all of your levels, coins and even max levels will be reset.
You will be reborn as a fresh slate. However, you will unlock a new line of skills and gain
<b><span id="evilGainDisplay"></span> evil</b>, which will heavily impact your future lives.
</i>
<br>
<button class="w3-button button" style="margin-bottom: 0.4em; margin-top: 0.4em " onClick="rebirthTwo()">Embrace evil</button>
<br>
</li>
<li style="margin: 0.4em;" id="rebirthNote4" class="hidden">
<div style="margin-bottom: 0.4em;">
A thousand years have come and gone and yet, you still remain alive... somehow. You feel your amulet shivering again and to your surprise, you see small tendrils
full of eyeballs emergin from it. As you are about to drop the amulet, you hear frightening screech followed by whispers in your head... <b>"You have to embrace the Void..."</b>
<br>
<span style="color: rgb(200, 0, 0)">
The amulet will reach its final form after <b>ten millennia</b>!
</span>
</div>
<i style="color: rgb(204, 0, 255)">
You have unlocked <b>"The Void"</b> class category along with <b>"Void Manipulation"</b> abilities.
</i>
</li>
<li style="margin: 0.4em;" id="rebirthNote5" class="hidden">
<div style="margin-bottom: 0.4em;">
Ten millenia have passed... most of them spent serving the Void, yet there is still a glimpse of humanity inside of you. All of the sudden your amulet starts to glow in the distance,
illuminating darkness around you with the brightness of a thousand suns. With the very last remnant of your free will, you run to your amulet and touch it... <b>
"You are now part of something bigger than yourself..."
</b>
</div>
<i style="color: rgb(255, 204, 102)">
You have unlocked <b>"Galactic Council"</b> class category along with <b>"Celestial Powers"</b> abilities.
<i style="color: grey">
<br>
If you decide to <b>transcend</b>, you will be reborn once again, losing all your coins, <b>evil</b> and current levels.
However, your max levels won't be erased, but instead multiplied with the effect from the <b>Cosmic Recollection</b> ability and you will gain
<i style="color: rgb(24, 210, 217)">
<b><span id="essenceGainDisplay"></span> essence</b>,
</i>
along with new abilities that will boost you even further in your journey.
<br>
<i style="color: rgb(200, 0, 0)">
Transcend will only appear if you have the <b>Cosmic Recollection</b> ability unlocked!
</i>
</i>
<br>
</i>
<div style="margin-bottom: 0.4em;" id="rebirthNote6" class="hidden">
<button class="w3-button button" style="margin-bottom: 0.4em; margin-top: 0.4em" onClick="rebirthThree()">Transcend</button>
</div>
</li>
<li style="margin: 0.4em;" id="rebirthNote7" class="hidden">
<i style="color: rgb(114, 83, 182)">
You are starting to become way too powerful. The end of the universe may be near...
</i>
<i style="color: grey">
<br>
If you decide to <b>collapse the universe</b>, all of your levels, coins, max levels, evil, and <b>essence</b> will be reset. You will be reborn as a fresh slate in a new universe, with no memory of milestones and challenges from any of your past selves. In exchange, you will unlock a third new line of abilities and gain <i style="color: rgb(114, 83, 182)">
<b><span id="darkMatterGainDisplay"></span> Dark Matter</b>,
</i>
which will boost you much further in your journey across the multiverse.
</i>
<br>
<button class="w3-button button" style="margin-bottom: 0.4em; margin-top: 0.4em " onClick="rebirthFour()">Collapse the universe</button>
</li>
</ul>
</div>
<div id="dummyPage2" style="flex: 2; margin-left: 0.5em;">
</div>
</div>
<div class="tab" id="darkMatter">
<div class="column">
<div class="panel w3-margin-left">
<div class="w3-button w3-bar-item tabButtonDarkMatter baritem w3-blue-gray" id="shopTabTabButton" onClick="setTabDarkMatter('shopTab')">Shop</div>
<div class="w3-button w3-bar-item tabButtonDarkMatter baritem" id="skillTreeTabTabButton" onClick="setTabDarkMatter('skillTreeTab')">Skills</div>
</div>
<div id="maincolumnSettings" class="panel w3-margin-left w3-margin-top w3-padding settings-main-column">
<div id="shopTab" class="tabDarkMatter">
<div id="settingsPage" style="flex: 1; margin-left: 0.5em;">
<div class="panel w3-margin-left w3-margin-top w3-padding">
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Dark Orb Generator</div>
<div style="color:gray; padding-bottom:0.3em">Generates <b id="darkOrbGenerator"></b> <span style="color: rgb(143, 114, 207)">Dark Orb</span> per day</div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b id="darkOrbGeneratorCost"></b> <span style="color: rgb(114, 83, 182)">Dark Matter</span></div>
<button class="w3-button button" id="darkOrbGeneratorBuyButton" onclick="buyDarkOrbGenerator()">Upgrade</button>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">A miracle</div>
<div style="color:gray; padding-bottom:0.3em">Keep <b>Magic Eye</b> when performing a Dark Matter reset</div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b>10</b> <span style="color: rgb(114, 83, 182)">Dark Matter</span></div>
<button class="w3-button button" id="aMiracleBuyButton" onclick="buyAMiracle()">Buy</button>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">A deal with the Chairman</div>
<div style="color:gray; padding-bottom: 0.5em;">Reward: Multiply <span style="color: rgb(199, 21, 133);">T.A.A & Magic</span> XP gain by x<span id="aDealWithTheChairmanEffect"></span></div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b id="aDealWithTheChairmanCost"></b> <span style="color: rgb(143, 114, 207)">Dark Orbs</span></div>
<button class="w3-button button" onclick="buyADealWithTheChairman()">Upgrade</button>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">A gift from god</div>
<div style="color:gray; padding-bottom: 0.5em;">Reward: Multiply <span style="color: rgb(24, 210, 217)">Essence</span> gain by x<span id="aGiftFromGodEffect"></span></div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b id="aGiftFromGodCost"></b> <span style="color: rgb(143, 114, 207)">Dark Orbs</span></div>
<button class="w3-button button" onclick="buyAGiftFromGod()">Upgrade</button>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Life coach</div>
<div style="color:gray; padding-bottom: 0.5em;">Reward: Multiply <span style="color: lightgreen;">Income</span> by x<span id="lifeCoachEffect"></span></div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b id="lifeCoachCost"></b> <span style="color: rgb(143, 114, 207)">Dark Orbs</span></div>
<button class="w3-button button" onclick="buyLifeCoach()">Upgrade</button>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Gotta be fast</div>
<div style="color:gray; padding-bottom: 0.5em;">Reward: Multiply <span style="color: rgb(204, 34, 219)">Time Warping</span> by x<span id="gottaBeFastEffect"></span></div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b id="gottaBeFastCost"></b> <span style="color: rgb(143, 114, 207)">Dark Orbs</span></div>
<button class="w3-button button" onclick="buyGottaBeFast()">Upgrade</button>
</div>
</div>
</div>
</div>
<div id="skillTreeTab" class="tabDarkMatter">
<div class="panel w3-margin-left w3-margin-top w3-padding">
<div style="padding-top:2em">
<div style="color:gray; padding-bottom:0.3em">
You can only choose 1 upgrade in each category; pick wisely. You can reset the skills, but you will <b>NOT</b> get your <span style="color: rgb(114, 83, 182)">Dark Matter</span> back!
</div>
<button class="w3-button button" onclick="resetSkillTree()">Reset Skills</button>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Speed is life</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="speedIsLife1" class="w3-button button" onclick="buySpeedOfLife(1)">Buy</button> -
Multiply <span style="color: rgb(204, 34, 219)">Time Warping</span> by <b>3x</b>,
but divide <span style="color: rgb(200, 0, 0)">Evil</span> gain by <b>2x</b>
</div>
<div style="color: rgb(255, 255, 255); padding: 0.6em">OR</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="speedIsLife2" class="w3-button button" onclick="buySpeedOfLife(2)">Buy</button> -
Multiply <span style="color: rgb(204, 34, 219)">Time Warping</span> by <b>7x</b>,
but divide <span style="color: rgb(24, 210, 217)">Essence</span> gain by <b>2x</b>
</div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b>100</b> <span style="color: rgb(114, 83, 182)">Dark Matter</span></div>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Your greatest debt</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="yourGreatestDebt1" class="w3-button button" onclick="buyYourGreatestDebt(1)">Buy</button> -
Multiply <span style="color:rgb(255, 204, 102)">all XP</span> gain by <b>500x</b>,
but divide <span style="color: lightgreen;">Income</span> by <b>10x</b>
</div>
<div style="color: rgb(255, 255, 255); padding: 0.6em">OR</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="yourGreatestDebt2" class="w3-button button" onclick="buyYourGreatestDebt(2)">Buy</button> -
Multiply <span style="color: rgb(200, 0, 0)">Evil gain</span> by <b>100x</b>,
but divide <span style="color: lightgreen;">Income</span> by <b>2x</b>
</div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b>1k</b> <span style="color: rgb(114, 83, 182)">Dark Matter</span></div>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Essence collector</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="essenceCollector1" class="w3-button button" onclick="buyEssenceCollector(1)">Buy</button> -
Multiply <span style="color: rgb(24, 210, 217)">Essence</span> gain by <b>500x</b>,
but divide <span style="color: rgb(200, 0, 0)">Evil</span> gain by <b>2x</b>
</div>
<div style="color: rgb(255, 255, 255); padding: 0.6em">OR</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="essenceCollector2" class="w3-button button" onclick="buyEssenceCollector(2)">Buy</button> -
Multiply <span style="color: rgb(24, 210, 217)">Essence</span> gain by <b>1000x</b>,
but divide <span style="color: lightgreen;">Income</span> by <b>25x</b>
</div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b>10k</b> <span style="color: rgb(114, 83, 182)">Dark Matter</span></div>
</div>
<div style="padding-top:2em">
<div class="text-caption dark-matter-title">Explosion of the universe</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="explosionOfTheUniverse1" class="w3-button button" onclick="buyExplosionOfTheUniverse(1)">Buy</button> -
Multiply <span style="color:rgb(255, 204, 102)">all XP</span> gain by <b>1e100x</b>,
but divide <span style="color: rgb(24, 210, 217)">Essence</span> gain by <b>2x</b>
</div>
<div style="color: rgb(255, 255, 255); padding: 0.6em">OR</div>
<div style="color:gray; padding-bottom:0.3em">
<button id="explosionOfTheUniverse2" class="w3-button button" onclick="buyExplosionOfTheUniverse(2)">Buy</button> -
Multiply <span style="color:rgb(255, 204, 102)">all XP</span> gain by <b>1e150x</b>,
but divide <span style="color: lightgreen;">Income</span> by <b>1e6x</b>
</div>
<div style="color:gray; padding-bottom: 0.5em;">Cost: <b>100k</b> <span style="color: rgb(114, 83, 182)">Dark Matter</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tab" id="settings">
<div id="columnSettings" class="column">
<div id="tabcolumnSettings" class="panel w3-margin-left settings-tab-column">
<div class="w3-button w3-bar-item tabButtonSettings baritem w3-blue-gray" id="settingsTabTabButton" onClick="setTabSettings('settingsTab')">Settings</div>
<div class="w3-button w3-bar-item tabButtonSettings baritem" id="statsTabTabButton" onClick="setTabSettings('statsTab')">Stats</div>
<div class="w3-button w3-bar-item tabButtonSettings baritem" id="changelogTabTabButton" onClick="setTabSettings('changelogTab')">Changelog</div>
</div>
<div id="maincolumnSettings" class="panel w3-margin-left w3-margin-top w3-padding settings-main-column">
<div id="settingsTab" class="tabSettings">
<div id="settingsPage" style="flex: 1; margin-left: 0.5em;">
<ul>
<li>
<div class="text-caption">
<button class="w3-button button" onClick="importGameData()">Import save</button>
<button class="w3-button button" onClick="exportGameData()" onmouseout="outExportButton()">Export save</button><span class="tooltiptext" id="exportTooltip"></span>
<form style="margin-top: 0.8em">
<input id="importExportBox" type="text" style="width:20em">
</form>
</div>
</li>
<li>
<div class="text-caption" style="margin-top: 0.4em;">Settings</div>
<table class="w3-table w3-bordered">
<tr>
<td style="padding: 0.4em; width:15em">Sticky sidebar</td>
<td><input id="settingsStickySidebar" type="checkbox" style="width:1.6em;height:1.6em" onclick="setStickySidebar(this.checked)" /></td>
</tr>
<tr>
<td>Currency notation</td>
<td style="padding: 0.4em">
<button class="w3-button button CurrencyNotation selected" onclick="setCurrency(0)">Medieval</button>
<button class="w3-button button CurrencyNotation" onclick="setCurrency(1)">Extended</button>
<button class="w3-button button CurrencyNotation" onclick="setCurrency(2)">British £sd</button>
<button class="w3-button button CurrencyNotation" onclick="setCurrency(3)">Modern $</button>
</td>
</tr>
<tr>
<td>Number notation</td>
<td style="padding: 0.4em">
<button class="w3-button button Notation selected" onclick="setNotation(0)">Standard</button>
<button class="w3-button button Notation" onclick="setNotation(1)">Scientific</button>
<button class="w3-button button Notation" onclick="setNotation(2)">Engineering</button>
</td>
</tr>
<tr>
<td>Layout</td>
<td style="padding: 0.4em">
<button class="w3-button button Layout" onclick="setLayout(1)">Standard</button>
<button class="w3-button button Layout" onclick="setLayout(0)">W I D E</button>
</td>
</tr>
<tr>
<td>Font size</td>
<td style="padding: 0.4em">
<button class="w3-button button" onmouseover="onFontButtonHover()" onmouseout="onFontButtonStopHover()" onclick="setFontSize(gameData.settings.fontSize - 1)">Smaller</button>
<button class="w3-button button" onmouseover="onFontButtonHover()" onmouseout="onFontButtonStopHover()" onclick="setFontSize(gameData.settings.fontSize + 1)">Larger</button>
<span class="tooltiptext hidden" id="fontSizeTooltip" style="color: gray">Keep pressing to change more</span>
</td>
</tr>
<tr>
<td> Color scheme</td>
<td style="padding: 0.4em">
<button class="w3-button button Theme" onClick="setTheme(0, true)">Light</button>
<button class="w3-button button Theme" onClick="setTheme(1, true)">Dark</button>
<button class="w3-button button Theme" onClick="setTheme(2, true)">Color Blind Friendly</button>
</td>
</tr>
</table>
</li>
<li>
<div class="text-caption" style="margin-top: 0.4em;">Shortcuts</div>
<div style="margin-bottom: 8px;">
Arrow Keys - Menu navigation
<br>
Spacebar - Pause
</div>
</li>
<li>
<div class="text-caption" style="margin-top: 0.4em;">
<button class="w3-button button w3-red" onClick="resetGameData()">Hard reset game</button>
</div>
</li>
<li>
<div class="text-caption" style="margin-top: 0.4em;">Links</div>
<div style="margin-bottom: 8px;">
Based on a <a href="https://symb1.github.io/progress_knight_2/" target="_blank">Progress Knight 2.0</a> mod
<br>Original game: <a href="https://ihtasham42.github.io/progress-knight/" target="_blank">Progress Knight</a>
<br><a href="https://discord.gg/fTRS4pHGka" target="_blank">Join the discord community! <img src="img/discord_icon.png" style="width:3em; height:3em;"></a>
<br><a href="https://github.com/indomit/progress_knight_2" target="_blank">Github page</a>
</div>
</li>
</ul>
<span id="version" style="font-size:smaller; float:right" class="w3-text-gray">Version: 2.2.7</span>
</div>
</div>
<div id="statsTab" class="tabSettings">
<div id="statsPage" style="flex: 1; margin-left: 0.5em;">
<div>
<ul>
<li>You started playing the game on <span id="startDateDisplay"></span>.</li>
<li>You have played for <span id="playedDaysDisplay"></span> days (real time).</li>
<li>Your existance has spanned <span id="playedGameTimeDisplay"></span> days (game time).</li>
</ul>
</div>
<div id="statsRebirth1" class="hidden">
<ul>
<li>You have touched the eye <span id="rebirthOneCountDisplay"></span> times.</li>
<li>Your fastest touch is in <span id="rebirthOneFastestDisplay"></span>.</li>
</ul>
</div>
<div id="statsRebirth2" class="hidden">
<ul>
<li>You have embraced evil <span id="rebirthTwoCountDisplay"></span> times.</li>
<li>Your fastest embrace is in <span id="rebirthTwoFastestDisplay"></span>.</li>
<li id="statsEvilGain" class="hidden">You gain <span id="evilPerSecondDisplay"></span> evil/s. Maximum <span id="maxEvilPerSecondDisplay"></span> evil/s was at <span id="maxEvilPerSecondRtDisplay"></span>.</li>
</ul>
</div>
<div id="statsRebirth3" class="hidden">
<ul>
<li>You have transcended <span id="rebirthThreeCountDisplay"></span> times.</li>
<li>Your fastest transcend is in <span id="rebirthThreeFastestDisplay"></span>.</li>
<li id="statsEssenceGain" class="hidden">You gain <span id="essencePerSecondDisplay"></span> essence/s. Maximum <span id="maxEssencePerSecondDisplay"></span> essence/s was at <span id="maxEssencePerSecondRtDisplay"></span>.</li>
</ul>
</div>
<div id="statsRebirth4" class="hidden">
<ul>
<li>You have collapsed the universe <span id="rebirthFourCountDisplay"></span> times.</li>
<li>Your fastest collapse is in <span id="rebirthFourFastestDisplay"></span>.</li>
</ul>
</div>
<div id="statsChallenges">
<ul>
<li id="challengeStat1">Challenge 1 Reward: Multiplies happiness by x<span id="challengeHappinessBuffDisplay"></span>.</li>
<li id="challengeStat2">Challenge 2 Reward: Multiplies income by x<span id="challengeIncomeBuffDisplay"></span>.</li>
<li id="challengeStat3">Challenge 3 Reward: Multiplies time warping by x<span id="challengeTimewarpingBuffDisplay"></span>.</li>
<li id="challengeStat4">Challenge 4 Reward: Multiplies essence gain by x<span id="challengeEssenceGainBuffDisplay"></span>.</li>
<li id="challengeStat5">Challenge 5 Reward: Multiplies evil gain by x<span id="challengeEvilGainBuffDisplay"></span>.</li>
</ul>
</div>
</div>
</div>
<div id="changelogTab" class="tabSettings">
<div id="changelogPage" style="flex: 1; margin-left: 0.5em;">
<pre id="changelog">
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="js/utils.js"></script>
<script type="text/javascript" src="js/ui.js"></script>
<script type="text/javascript" src="js/math.js"></script>
<script type="text/javascript" src="js/HackTimer.js"></script>
<script type="text/javascript" src="js/classes.js"></script>
<script type="text/javascript" src="js/challenges.js"></script>
<script type="text/javascript" src="js/dark_matter.js"></script>
<script type="text/javascript" src="js/tooltips.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>
+147
View File
@@ -0,0 +1,147 @@
(function (workerScript) {
if (!/MSIE 10/i.test (navigator.userAgent)) {
try {
var blob = new Blob (["\
var fakeIdToId = {};\
onmessage = function (event) {\
var data = event.data,\
name = data.name,\
fakeId = data.fakeId,\
time;\
if(data.hasOwnProperty('time')) {\
time = data.time;\
}\
switch (name) {\
case 'setInterval':\
fakeIdToId[fakeId] = setInterval(function () {\
postMessage({fakeId: fakeId});\
}, time);\
break;\
case 'clearInterval':\
if (fakeIdToId.hasOwnProperty (fakeId)) {\
clearInterval(fakeIdToId[fakeId]);\
delete fakeIdToId[fakeId];\
}\
break;\
case 'setTimeout':\
fakeIdToId[fakeId] = setTimeout(function () {\
postMessage({fakeId: fakeId});\
if (fakeIdToId.hasOwnProperty (fakeId)) {\
delete fakeIdToId[fakeId];\
}\
}, time);\
break;\
case 'clearTimeout':\
if (fakeIdToId.hasOwnProperty (fakeId)) {\
clearTimeout(fakeIdToId[fakeId]);\
delete fakeIdToId[fakeId];\
}\
break;\
}\
}\
"]);
// Obtain a blob URL reference to our worker 'file'.
workerScript = window.URL.createObjectURL(blob);
} catch (error) {
/* Blob is not supported, use external script instead */
}
}
var worker,
fakeIdToCallback = {},
lastFakeId = 0,
maxFakeId = 0x7FFFFFFF, // 2 ^ 31 - 1, 31 bit, positive values of signed 32 bit integer
logPrefix = 'HackTimer.js by turuslan: ';
if (typeof (Worker) !== 'undefined') {
function getFakeId () {
do {
if (lastFakeId == maxFakeId) {
lastFakeId = 0;
} else {
lastFakeId ++;
}
} while (fakeIdToCallback.hasOwnProperty (lastFakeId));
return lastFakeId;
}
try {
worker = new Worker (workerScript);
window.setInterval = function (callback, time /* , parameters */) {
var fakeId = getFakeId ();
fakeIdToCallback[fakeId] = {
callback: callback,
parameters: Array.prototype.slice.call(arguments, 2)
};
worker.postMessage ({
name: 'setInterval',
fakeId: fakeId,
time: time
});
return fakeId;
};
window.clearInterval = function (fakeId) {
if (fakeIdToCallback.hasOwnProperty(fakeId)) {
delete fakeIdToCallback[fakeId];
worker.postMessage ({
name: 'clearInterval',
fakeId: fakeId
});
}
};
window.setTimeout = function (callback, time /* , parameters */) {
var fakeId = getFakeId ();
fakeIdToCallback[fakeId] = {
callback: callback,
parameters: Array.prototype.slice.call(arguments, 2),
isTimeout: true
};
worker.postMessage ({
name: 'setTimeout',
fakeId: fakeId,
time: time
});
return fakeId;
};
window.clearTimeout = function (fakeId) {
if (fakeIdToCallback.hasOwnProperty(fakeId)) {
delete fakeIdToCallback[fakeId];
worker.postMessage ({
name: 'clearTimeout',
fakeId: fakeId
});
}
};
worker.onmessage = function (event) {
var data = event.data,
fakeId = data.fakeId,
request,
parameters,
callback;
if (fakeIdToCallback.hasOwnProperty(fakeId)) {
request = fakeIdToCallback[fakeId];
callback = request.callback;
parameters = request.parameters;
if (request.hasOwnProperty ('isTimeout') && request.isTimeout) {
delete fakeIdToCallback[fakeId];
}
}
if (typeof (callback) === 'string') {
try {
callback = new Function (callback);
} catch (error) {
console.log (logPrefix + 'Error parsing callback code string: ', error);
}
}
if (typeof (callback) === 'function') {
callback.apply (window, parameters);
}
};
worker.onerror = function (event) {
console.log (event);
};
} catch (error) {
console.log (logPrefix + 'Initialisation failed');
console.error (error);
}
} else {
console.log (logPrefix + 'Initialisation failed - HTML5 Web Worker is not supported');
}
}) ('HackTimerWorker.js');
@@ -0,0 +1,74 @@
function enterChallenge(challengeName) {
rebirthReset(false)
gameData.active_challenge = challengeName
for (const taskName in gameData.taskData) {
const task = gameData.taskData[taskName]
task.maxLevel = 0
}
}
function exitChallenge() {
setChallengeProgress()
rebirthReset(false)
gameData.active_challenge = ""
for (const taskName in gameData.taskData) {
const task = gameData.taskData[taskName]
task.maxLevel = 0
}
}
function setChallengeProgress() {
if (gameData.active_challenge == "an_unhappy_life") {
gameData.challenges.an_unhappy_life = Math.max(gameData.challenges.an_unhappy_life, getHappiness())
}
if (gameData.active_challenge == "rich_and_the_poor") {
gameData.challenges.rich_and_the_poor = Math.max(gameData.challenges.rich_and_the_poor, getIncome())
}
if (gameData.active_challenge == "time_does_not_fly") {
gameData.challenges.time_does_not_fly = Math.max(gameData.challenges.time_does_not_fly, getUnpausedGameSpeed() / baseGameSpeed)
}
if (gameData.active_challenge == "dance_with_the_devil") {
gameData.challenges.dance_with_the_devil = Math.max(gameData.challenges.dance_with_the_devil, Math.max(0, getEvilGain() - 10))
}
if (gameData.active_challenge == "legends_never_die") {
gameData.challenges.legends_never_die = Math.max(gameData.challenges.legends_never_die, gameData.taskData["Chairman"].level)
}
}
function getChallengeBonus(challenge_name, current = false) {
if (challenge_name == "an_unhappy_life") {
return softcap(Math.pow((current ? getHappiness() : gameData.challenges.an_unhappy_life) + 1, 0.31), 500, 0.45)
}
if (challenge_name == "rich_and_the_poor") {
return softcap(Math.pow((current ? getIncome() : gameData.challenges.rich_and_the_poor) + 1, 0.25), 25, 0.55)
}
if (challenge_name == "time_does_not_fly") {
return softcap(Math.pow((current ? getUnpausedGameSpeed() / baseGameSpeed : gameData.challenges.time_does_not_fly) + 1, 0.055), 2)
}
if (challenge_name == "dance_with_the_devil") {
return softcap(Math.pow((current ? Math.max(0, getEvilGain() - 10) : gameData.challenges.dance_with_the_devil) + 1, 0.09), 2, 0.75)
}
if (challenge_name == "legends_never_die") {
return softcap(Math.pow((current ? gameData.taskData["Chairman"].level : gameData.challenges.legends_never_die) + 1, 0.85), 25, 0.6)
}
}
function getChallengeGoal(challenge_name) {
if (challenge_name == "an_unhappy_life") {
return gameData.challenges.an_unhappy_life + 1
}
if (challenge_name == "rich_and_the_poor") {
return gameData.challenges.rich_and_the_poor + 1
}
if (challenge_name == "time_does_not_fly") {
return Math.max(1, gameData.challenges.time_does_not_fly + 0.1)
}
if (challenge_name == "dance_with_the_devil") {
return gameData.challenges.dance_with_the_devil + 10.1
}
if (challenge_name == "legends_never_die") {
return gameData.challenges.legends_never_die + 1
}
}
+357
View File
@@ -0,0 +1,357 @@
class Task {
constructor(baseData) {
this.baseData = baseData
this.name = baseData.name
this.level = 0
this.maxLevel = 0
this.xp = 0
this.xpBigInt = BigInt(0)
this.isHero = false
this.isFinished = false
this.xpMultipliers = []
}
toJSON() {
return {
baseData: this.baseData,
name: this.name,
level: this.level,
maxLevel: this.maxLevel,
xp: this.xp,
xpBigInt: bigIntToExponential(this.xpBigInt),
isHero: this.isHero,
isFinished: this.isFinished
}
}
getMaxXp() {
const maxXp = (this.isHero ? Math.pow(10, this.baseData.heroxp) : 1) * this.baseData.maxXp * (this.level + 1) * Math.pow(this.isHero ? 1.08 : 1.01, this.level)
if (isNaN(maxXp) || maxXp == Infinity || maxXp > 1e305) {
this.isFinished = true
}
return maxXp
}
getMaxBigIntXp() {
const maxXp = this.getMaxXp() == Infinity ? BigInt(1e305) : BigInt(Math.floor(this.getMaxXp()));
if (maxXp < 1e305)
return maxXp
return maxXp * 2n ** (BigInt(this.level) / 120n) * (2n ** (BigInt(this.baseData.heroxp) / 9n))
}
getXpLeft() {
return this.getMaxXp() - this.xp
}
getMaxLevelMultiplier() {
return gameData.active_challenge == "dance_with_the_devil" ? (10 / (this.maxLevel + 1)) : 1 + this.maxLevel / 10
}
getXpGain() {
return (this.isHero ? getHeroXpGainMultipliers(this) : 1) * applyMultipliers(10, this.xpMultipliers)
}
getXpGainBigInt() {
let xpGain = BigInt(Math.floor(this.isHero ? getHeroXpGainMultipliers(this) : 1))
this.xpMultipliers.forEach(multiplier => {
xpGain *= BigInt(Math.floor(multiplier()))
})
return xpGain
}
getXpGainFormatted() {
if (this.isFinished)
return bigIntToExponential(this.getXpGainBigInt())
return format(this.getXpGain())
}
getXpLeftFormatted() {
if (this.isFinished)
return bigIntToExponential(this.getMaxBigIntXp() - this.xpBigInt)
return format(this.getXpLeft())
}
increaseXp() {
if (this.isFinished) {
this.xpBigInt += applySpeedOnBigInt(this.getXpGainBigInt())
if (this.xpBigInt >= this.getMaxBigIntXp()) {
let excess = this.xpBigInt - this.getMaxBigIntXp()
let iterations = 0
while (excess >= 0n) {
iterations += 1
// This amount is way lower because calculations with a BigInt are really expensive.
// Probably want to look into more optimizations.
if (iterations > 300)
excess = -1n
this.level += 1
excess -= this.getMaxBigIntXp()
}
this.xpBigInt = this.getMaxBigIntXp() + excess
}
} else {
this.xp += applySpeed(this.getXpGain())
if (this.xp > 1e275 || isNaN(this.xp) || this.xp == Infinity || this.getXpGain() == Infinity
|| this.getMaxXp() == Infinity || this.getXpLeft() == Infinity) {
this.isFinished = true
return
}
if (this.xp >= this.getMaxXp()) {
let excess = this.xp - this.getMaxXp()
let iterations = 0
while (excess >= 0) {
iterations += 1
if (iterations > 2500)
excess = -1
this.level += 1
excess -= this.getMaxXp()
}
this.xp = this.getMaxXp() + excess
}
}
}
}
class Milestone {
constructor(baseData) {
this.baseData = baseData
this.name = baseData.name
this.tier = baseData.tier
this.expense = baseData.expense
this.description = baseData.description
}
getTier() { return this.tier }
}
class Job extends Task {
constructor(baseData) {
super(baseData)
this.incomeMultipliers = []
}
getLevelMultiplier() {
return 1 + Math.log10(this.level + 1)
}
getIncome() {
const income = (this.isHero ? heroIncomeMult
* (this.baseData.heroxp > 78 ? 1e6 : 1)
* (this.baseData.heroxp > 130 ? 1e5 : 1)
: 1) * applyMultipliers(this.baseData.income, this.incomeMultipliers) * getChallengeBonus("rich_and_the_poor")
return gameData.active_challenge == "rich_and_the_poor" ? Math.pow(income, 0.35) : income
}
}
class Skill extends Task {
constructor(baseData) {
super(baseData)
}
getEffect() {
var effect = 1 + this.baseData.effect * (this.isHero ? 1000 * this.level + 8000 : this.level)
return effect
}
getEffectDescription() {
return "x" + format(this.getEffect(), 2) + " " + this.baseData.description
}
}
class Item {
constructor(baseData) {
this.baseData = baseData
this.name = baseData.name
this.expenseMultipliers = []
this.isHero = false
}
getEffect() {
let effect = this.baseData.effect
if (this.isHero) {
if (itemCategories["Misc"].includes(this.name))
{
if (gameData.currentMisc.includes(this)) {
effect *= 10
if (this.name == "Universe Fragment" || this.name == "Multiverse Fragment")
effect *= 100000
}
}
if (itemCategories["Properties"].includes(this.name)) {
if (gameData.currentProperty == this)
effect = this.baseData.heroeffect
else
effect = 1
}
} else {
if (gameData.currentProperty != this && !gameData.currentMisc.includes(this)) return 1
}
return effect
}
getEffectDescription() {
let description = this.baseData.description
let effect = this.baseData.effect
if (this.isHero) {
if (itemCategories["Misc"].includes(this.name)) {
effect *= 10
if (this.name == "Universe Fragment" || this.name == "Multiverse Fragment")
effect *= 100000
}
if (itemCategories["Properties"].includes(this.name)) {
description = "Happiness"
effect = this.baseData.heroeffect
}
}
else {
if (itemCategories["Properties"].includes(this.name)) description = "Happiness"
}
return "x" + format(effect) + " " + description
}
getExpense(heroic) {
if (heroic === undefined)
heroic = this.isHero
return (heroic ? 4 * Math.pow(10, this.baseData.heromult) * heroIncomeMult : 1)
* applyMultipliers(this.baseData.expense, this.expenseMultipliers)
}
}
class Requirement {
constructor(querySelectors, requirements) {
this.querySelectors = querySelectors
this.elements = []
this.requirements = requirements
this.completed = false
}
queryElements() {
this.querySelectors.forEach(querySelector => {
this.elements.push(...document.querySelectorAll(querySelector))
})
}
isCompleted() {
if (this.completed) return true
for (const requirement of this.requirements) {
if (!this.getCondition(false, requirement)) {
return false
}
}
this.completed = true
return true
}
isCompletedActual(isHero = false) {
for (const requirement of this.requirements) {
if (!this.getCondition(isHero, requirement)) {
return false
}
}
return true
}
}
class TaskRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "task"
}
getCondition(isHero, requirement) {
if (isHero && requirement.herequirement != null)
return gameData.taskData[requirement.task].level >= requirement.herequirement
else if (gameData.taskData[requirement.task].isHero && requirement.isHero)
return true
else
return gameData.taskData[requirement.task].level >= requirement.requirement
}
}
class CoinRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "coins"
}
getCondition(isHero, requirement) {
return gameData.coins >= requirement.requirement
}
}
class AgeRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "age"
}
getCondition(isHero, requirement) {
return daysToYears(gameData.days) >= requirement.requirement
}
}
class EvilRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "evil"
}
getCondition(isHero, requirement) {
return gameData.evil >= requirement.requirement
}
}
class EssenceRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "essence"
}
getCondition(isHero, requirement) {
return gameData.essence >= requirement.requirement
}
}
class DarkMatterRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "darkMatter"
}
getCondition(isHero, requirement) {
return gameData.dark_matter >= requirement.requirement
}
}
class DarkOrbsRequirement extends Requirement {
constructor(querySelectors, requirements) {
super(querySelectors, requirements)
this.type = "darkOrb"
}
getCondition(isHero, requirement) {
return gameData.dark_orbs >= requirement.requirement
}
}
@@ -0,0 +1,128 @@
// Costs Dark Matter
function getDarkOrbGeneratorCost() {
return 1 + 3 * gameData.dark_matter_shop.dark_orb_generator
}
function buyDarkOrbGenerator() {
if (gameData.dark_matter >= getDarkOrbGeneratorCost() && getDarkOrbGeneration() != Infinity) {
gameData.dark_matter -= getDarkOrbGeneratorCost()
gameData.dark_matter_shop.dark_orb_generator += 1
}
}
// Costs Dark Orbs
function getADealWithTheChairmanCost() {
return Math.pow(1e3, gameData.dark_matter_shop.a_deal_with_the_chairman + 1)
}
function buyADealWithTheChairman() {
if (gameData.dark_orbs >= getADealWithTheChairmanCost() && getADealWithTheChairmanCost() != Infinity) {
gameData.dark_orbs -= getADealWithTheChairmanCost()
gameData.dark_matter_shop.a_deal_with_the_chairman += 1
}
}
function getAGiftFromGodCost() {
return Math.pow(1e5, gameData.dark_matter_shop.a_gift_from_god + 1)
}
function buyAGiftFromGod() {
if (gameData.dark_orbs >= getAGiftFromGodCost() && getAGiftFromGodCost() != Infinity) {
gameData.dark_orbs -= getAGiftFromGodCost()
gameData.dark_matter_shop.a_gift_from_god += 1
}
}
function getLifeCoachCost() {
return Math.pow(1e10, gameData.dark_matter_shop.life_coach + 1)
}
function buyLifeCoach() {
if (gameData.dark_orbs >= getLifeCoachCost() && getLifeCoachCost() != Infinity) {
gameData.dark_orbs -= getLifeCoachCost()
gameData.dark_matter_shop.life_coach += 1
}
}
function getGottaBeFastCost() {
return Math.pow(1e15, gameData.dark_matter_shop.gotta_be_fast + 1)
}
function buyGottaBeFast() {
if (gameData.dark_orbs >= getGottaBeFastCost() && getGottaBeFastCost() != Infinity) {
gameData.dark_orbs -= getGottaBeFastCost()
gameData.dark_matter_shop.gotta_be_fast += 1
}
}
// Rewards
function getDarkOrbGeneration() {
if (gameData.dark_matter_shop.dark_orb_generator == 0) return 0
const darkOrbiter = gameData.requirements["Dark Orbiter"].isCompleted() ? 1e10 : 1
return Math.pow(100, gameData.dark_matter_shop.dark_orb_generator - 1) * darkOrbiter
}
function getTaaAndMagicXpGain() {
return Math.pow(3, gameData.dark_matter_shop.a_deal_with_the_chairman)
}
function getAGiftFromGodEssenceGain() {
return Math.pow(2, gameData.dark_matter_shop.a_gift_from_god)
}
function getLifeCoachIncomeGain() {
return Math.pow(10, gameData.dark_matter_shop.life_coach)
}
function getGottaBeFastGain() {
return 1 + 0.05 * gameData.dark_matter_shop.gotta_be_fast
}
// Permanent unlocks
function buyAMiracle() {
if (getDarkMatter() >= 10) {
gameData.dark_matter_shop.a_miracle = true
gameData.dark_matter -= 10
}
}
// Skill tree
function resetSkillTree() {
if (confirm("Are you sure that you want to reset your Dark Matter Skills?")) {
gameData.dark_matter_shop.speed_is_life = 0
gameData.dark_matter_shop.your_greatest_debt = 0
gameData.dark_matter_shop.essence_collector = 0
gameData.dark_matter_shop.explosion_of_the_universe = 0
}
}
function buySpeedOfLife(number) {
if (gameData.dark_matter >= 100) {
gameData.dark_matter -= 100
gameData.dark_matter_shop.speed_is_life = number
}
}
function buyYourGreatestDebt(number) {
if (gameData.dark_matter >= 1000) {
gameData.dark_matter -= 1000
gameData.dark_matter_shop.your_greatest_debt = number
}
}
function buyEssenceCollector(number) {
if (gameData.dark_matter >= 10000) {
gameData.dark_matter -= 10000
gameData.dark_matter_shop.essence_collector = number
}
}
function buyExplosionOfTheUniverse(number) {
if (gameData.dark_matter >= 100000) {
gameData.dark_matter -= 100000
gameData.dark_matter_shop.explosion_of_the_universe = number
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+195
View File
@@ -0,0 +1,195 @@
const tooltips = {
// Common work
"Beggar": "Struggle day and night for a couple of copper coins. It feels like you are at the brink of death each day.",
"Farmer": "Plow the fields and grow the crops. It's not much but it's honest work.",
"Fisherman": "Reel in various fish and sell them for a handful of coins. A relaxing but still poor paying job.",
"Miner": "Delve into dangerous caverns and mine valuable ores. The pay is quite meager compared to the risk involved.",
"Blacksmith": "Smelt ores and carefully forge weapons for the military. A respectable and OK paying commoner job.",
"Merchant": "Travel from town to town, bartering fine goods. The job pays decently well and is a lot less manually-intensive.",
// Military
"Squire": "Carry around your knight's shield and sword along the battlefield. Very meager pay but the work experience is quite valuable.",
"Footman": "Put down your life to battle with enemy soldiers. A courageous, respectable job but you are still worthless in the grand scheme of things.",
"Veteran footman": "More experienced and useful than the average footman, take out the enemy forces in battle with your might. The pay is not that bad.",
"Centenary": "By proving your skills with a bow, you were appointed to lead a small group of archers to ambush your enemies from a distance.",
"Knight": "Slash and pierce through enemy soldiers with ease, while covered in steel from head to toe. A decently paying and very respectable job.",
"Veteran Knight": "Utilising your unmatched combat ability, slaugher enemies effortlessly. Most footmen in the military would never be able to acquire such a well paying job like this.",
"Holy Knight": "Obliterate squadrons of enemy soldiers in one go with extraordinary proficiency, while wielding a magically imbued blade. Such a feared unit on the battlefield is paid extremely well.",
"Lieutenant General": "Feared by nations, obliterate entire armies in a blink of an eye. Roughly every century, only one holy knight is worthy of receiving such an esteemed title.",
// The Arcane Association
"Student": "Study the theory of mana and practice basic spells. There is minor pay to cover living costs; however, this is a necessary stage in becoming a mage.",
"Apprentice Mage": "Under the supervision of a skilled mage, perform basic spells against enemies in battle. Generous pay will be provided to cover living costs.",
"Adept Mage": "Turn the tides of battle through casting intermediate spells and mentor other apprentices. The pay for this particular job is extremely high.",
"Master Wizard": "Utilise advanced spells to ravage and destroy entire legions of enemy soldiers. Only a small percentage of mages deserve to attain this role and are rewarded with an insanely high pay.",
"Archmage": "Blessed with unparalleled talent, perform unbelievable feats with magic at will. It is said that an archmage has enough destructive power to wipe an empire off the map.",
"Chronomancer": "Specialize in harnessing temporal energies that alter the flow of time with supernatural divinations and otherwordly expertise.",
"Chairman": "Spend your days administrating The Arcane Association and investigate the concepts of true immortality. The chairman receives ludicrous amounts of pay daily.",
"Imperator": "You wield an unlimited power, making you unstoppable. By ruling with an iron fist, everyone in the Arcane Association has to obey your commands.",
// The Void
"Corrupted": "Corrupted by Void, you are slowly turning into a slave with no free will, just to serve the Void for the rest of eternity... Can you resist it, or will it consume you forever?",
"Void Slave": "Each day, you are succumbing to the Void more and more. Can you hold onto your humanity for a bit longer, or will you let the Void devour you?",
"Void Fiend": "You become an inquisitive yet putrid creature that siphons life from everything around you.",
"Abyss Anomaly": "Screaming into existence, you become a manifestation of the unknowable nothingness that lies beyond.",
"Void Wraith": "Damned soul... a shadow of your former self, lingering between realms and consumed by void... Can you ever find peace?",
"Void Reaver": "There are few who may tread the paths between worlds, these powers grant you an ability to generate fields of void energy that devour all living things.",
"Void Lord": "You gazed into the dark heart of the Void long enough to become one of the most powerful and feared beings. All lesser void creatures are at your command.",
"Abyss God": "Creator of the Void, a vast canvas of blackness and nothingness, in which the concept of its existence defies all logic. Nothing will escape you.",
// Galactic Council
"Eternal Wanderer": "With the powers bestowed upon you by an unknown entity, you wander around, visiting places revered and feared in search of answers.",
"Nova": "Extremely powerful being with tremedous telekinetic powers and the ability to rearrange the molecular structure of matter and energy, even up to cosmic scale.",
"Sigma Proioxis": "A nigh-omnipotent cosmological entity, with vast matter and energy manipulation abilities that help you push the boundaries of the Universe itself.",
"Acallaris": "Primordial being that predate the universe, involved with the creation of life and powerful beyond mortal comprehension, existing as myths to the oldest species in the universe.",
"One Above All": "Creator of everything.",
// Fundamentals
"Concentration": "Improve your learning speed through practising intense concentration activities.",
"Productivity": "Learn to procrastinate less at work and receive more job experience per day.",
"Bargaining": "Study the tricks of the trade and persuasive skills to lower any type of expense.",
"Meditation": "Fill your mind with peace and tranquility to tap into greater happiness from within.",
// Combat
"Strength": "Condition your body and strength through harsh training. Stronger individuals are paid more in the military.",
"Battle Tactics": "Create and revise battle strategies, improving experience gained in the military.",
"Muscle Memory": "Strengthen your neurons through habit and repetition, improving strength gains throughout the body.",
// Magic
"Mana Control": "Strengthen your mana channels throughout your body, aiding you in becoming a more powerful magical user.",
"Life Essence": "Lengthen your lifespan through the means of magic. However, is this truly the immortality you have tried seeking for...?",
"Time Warping": "Bend space and time through forbidden techniques, speeding up your learning processes.",
"Astral Body": "Lengthen your lifespan drastically beyond comprehension by harnessing ethereal energy.",
"Temporal Dimension": "Create your own pocket dimension where centuries go by in mere seconds.",
"All Seeing Eye": "As the highest rank of T.A.A, all funds go directly to you.",
"Brainwashing": "A technique designed to manipulate human thought and action against their desire.",
// Dark Magic - Evil Required
"Dark Influence": "Encompass yourself with formidable power bestowed upon you by evil, allowing you to pick up and absorb any job or skill with ease.",
"Evil Control": "Tame the raging and growing evil within you, improving evil gain in-between rebirths.",
"Intimidation": "Learn to emit a devilish aura which strikes extreme fear into other merchants, forcing them to give you heavy discounts.",
"Demon Training": "A mere human body is too feeble and weak to withstand evil. Train with forbidden methods to slowly manifest into a demon, capable of absorbing knowledge rapidly.",
"Blood Meditation": "Grow and culture the evil within you through the sacrifice of other living beings, drastically increasing evil gain.",
"Demon's Wealth": "Through the means of dark magic, multiply the raw matter of the coins you receive from your job.",
"Dark Knowledge": "Sealed for a very long time, you utilize these forbidden texts for your own personal gain.",
"Void Influence": "Tapping into the powers of the Void while combining them with evil grants you an unlimited potential.",
"Time Loop": "Mastery is achieved when 'telling time' becomes 'telling time what to do'.",
"Evil Incarnate": "You have became the very thing you swore to destroy.",
// Void Manipulation
"Absolute Wish": "The power to fulfill absolutely any and all wishes without any limitations.",
"Void Amplification": "You surrender yourself to the Void, making it easier to take control of you.",
"Mind Release": "In a trance like state, you feel the Void amplifying your thoughts, perception, memories, emotions and personality.",
"Ceaseless Abyss": "Never ending torture, you swore to serve the Void for the rest of your existence.",
"Void Symbiosis": "A symbiotic relationship that helps you become one with the Void.",
"Void Embodiment": "If thou gaze long into an abyss, the abyss will also gaze into thee.",
"Abyss Manipulation": "Allows you to shape your own reality within the Void itself.",
// Celestial Powers
"Cosmic Longevity": "You have seen it all, from the very beginning to the very end.",
"Cosmic Recollection": "Being able to exist in multiple parallel timelines and manipulating you parallel selves, influencing their lives as you see fit.",
"Essence Collector": "Exploit the unlimited potential of multiverse energies and collect its resources.",
"Galactic Command": "Absolute power corrupts absolutely.",
// Almightiness
"Yin Yang": "Born from chaos when the universe was first created, believed to exist in harmony, balancing evil and good.",
"Parallel Universe": "Self-contained plane of existence, co-existing with one's own, helping you restore fragments of your forgotten power.",
"Higher Dimensions": "By possesing the power to partially alter the laws of physics and transceding lower dimensional spaces, your existence becomes never-ending.",
"Epiphany": "You become one with everything.",
// Darkness
"Dark Prince": "You can increase your intelligence at an alarming rate due to your access to all libraries in the universe.",
"Dark Ruler": "Ruling the universe allows you to collect more Dark Matter from your subordinates.",
"Immortal Ruler": "You have only one goal: ruling this universe till infinity.",
"Dark Magician": "By performing forbidden magic on your subordinates, you can extract every last drop of Essence from them.",
"Universal Ruler": "No one dares to challenge your rule when ruling with an iron fist.",
"Blinded By Darkness": "Blinded by darkness, you can no longer control yourself. You start to destroy everything in existance to calm yourself.",
// Properties
"Homeless": "Sleep on the uncomfortable, filthy streets while almost freezing to death every night. It cannot get any worse than this.",
"Tent": "A thin sheet of tattered cloth held up by a couple of feeble, wooden sticks. Horrible living conditions but at least you have a roof over your head.",
"Wooden Hut": "Shabby logs and dirty hay glued together with horse manure. Much more sturdy than a tent, however, the stench isn't very pleasant.",
"Cottage": "Structured with a timber frame and a thatched roof. Provides decent living conditions for a fair price.",
"House": "A building formed from stone bricks and sturdy timber, which contains a few rooms. Although quite expensive, it is a comfortable abode.",
"Large House": "Much larger than a regular house, which boasts even more rooms and multiple floors. The building is quite spacious but comes with a hefty price tag.",
"Small Palace": "A very rich and meticulously built structure rimmed with fine metals such as silver. Extremely high expenses to maintain for a lavish lifestyle.",
"Grand Palace": "A grand residence completely composed of gold and silver. Provides the utmost luxurious and comfortable living conditions possible for a ludicrous price.",
"Town Ruler": "You rule your very own community in your small town, owning multiple establishments.",
"City Ruler": "As the highest ranking official, you manage and oversee everything that happens. While your pay is astronomical, so are your expenses.",
"Nation Ruler": "You reign the whole nation. While your riches may be corrupted, everything you see belongs to you.",
"Pocket Dimension": "A Dimension just for you that can be summoned at will. What happens there stays there.",
"Void Realm": "Unknown how or when the Void realm came into existence, containing elements which dont exist outside of its dimensional plane are now all to your disposal",
"Void Universe": "Predating our own universe, the Void has an unlimited amount of space for your belongings, if you are willing to submit to it.",
"Astral Realm": "Beneath personality and ego lays the source of our deep character, our personhood. Here are the psychic senses, our deep mind and emotions, symbols and inner reality.",
"Galactic Throne": "You sit on your throne, overseeing the existence itself.",
"Spaceship": "Your own personal cosmic house, able to travel anywhere in the universe at 99.99% of the speed of light.",
"Planet": "A planet with the sole purpose of housing you and your family.",
"Ringworld": "A construct with the mass of Jupiter and a surface area millions of times that of Earth, capable of housing trillions of humans and other animals including alien species. The expenses are literally astronomical due to the maintenance involved in keeping the structure stable and the inside area habitable, but the massive living space is worth it.",
"Stellar Neighborhood": "A fully colonized network of stars and star systems spanning dozens of light years is ready for you to explore and call home.",
"Galaxy": "You rule your very own galaxy the size of the Milky Way, with billions of planets organized into thousands of different states all under your control. While your power is astronomical, so are your responsibilities.",
"Supercluster": "A cluster of galactic groups spanning hundreds of millions of light years across and containing thousands of galaxies is under your control.",
"Galaxy Filament": "One of the largest known structures of the universe, containing dozens of superclusters and millions of galaxies.",
"Observable Universe": "You did it! You finally rule the entire universe...or do you?",
// Misc
"Book": "A place to write down all your thoughts and discoveries, allowing you to learn a lot more quickly.",
"Dumbbells": "Heavy tools used in strenuous exercise to toughen up and accumulate strength even faster than before.",
"Personal Squire": "Assists you in completing day to day activities, giving you more time to be productive at work.",
"Steel Longsword": "A fine blade used to slay enemies even quicker in combat and therefore gain more experience.",
"Butler": "Keeps your household clean at all times and also prepares three delicious meals per day, leaving you in a happier, stress-free mood.",
"Sapphire Charm": "Embedded with a rare sapphire, this charm activates more mana channels within your body, providing a much easier time learning magic.",
"Study Desk": "A dedicated area which provides many fine stationary and equipment designed for furthering your progress in research.",
"Library": "Stores a collection of books, each containing vast amounts of information from basic life skills to complex magic spells.",
"Observatory": "Used for observing terrestrial, marine and celestial events.",
"Mind's Eye": "Lets you see memories, remember images, and even see new pictures and ideas.",
"Void Necklace": "Helps you shape and manipulate void matter, even transmute and rebuild it into anything of your choosing.",
"Void Armor": "Generates an innate armor as a part of you body, which is resistant to attacks, harm or pain.",
"Void Blade": "Forged from void dust and dark matter, this blade can slash through dimensional barriers. It's a weapon of choice for every Void Reaver.",
"Void Orb": "When the orb touches non void entities, it instantly disintegrates them by harnessing its power from Void realm.",
"Void Dust": "Purest version of void created material; a teaspoon of it is as heavy as a small planet.",
"Celestial Robe": "The most powerful and essential equipment of any Celestial. Acts as a source of infinite power.",
"Universe Fragment": "From the time the universe was born. Can create more small universes.",
"Multiverse Fragment": "Came into existance long before our universe was created, this strange looking object with no shape radiates unlimited energy.",
// Essence Milestones
"Magic Eye": "The Eye in your Amulet starts to glow.",
"Almighty Eye": "The Eye in your Amulet shines like a star.",
"Deal with the Devil": "You made a deal with the Devil.",
"Transcendent Master": "You've mastered Transcendence.",
"Eternal Time": "Does time matter now?",
"Hell Portal": "You've opened a portal to Hell.",
"Inferno": "You are at the last level of Hell. What is next?",
"God's Blessings": "God bless you!",
"Faint Hope": "Maybe there is hope?",
"New Beginning": "Try to upgrade One Above All to level 2000",
// Heroic Milestones
"Rise of Great Heroes": "Every active Great job or skill will increase Essence gain a bit.",
"Lazy Heroes": "Total Hero XP multiplier is 5e20",
"Dirty Heroes": "Total Hero XP multiplier is 5e35",
"Angry Heroes": "Total Hero XP multiplier is 5e50",
"Tired Heroes": "Total Hero XP multiplier is 5e65",
"Scared Heroes": "Total Hero XP multiplier is 5e80",
"Good Heroes": "Total Hero XP multiplier is 5e95",
"Funny Heroes": "Total Hero XP multiplier is 5e120",
"Beautiful Heroes": "Total Hero XP multiplier is 5e170",
"Awesome Heroes": "Total Hero XP multiplier is 5e180",
"Furious Heroes": "Total Hero XP multiplier is 5e198",
"Superb Heroes": "Total Hero XP multiplier is 5e201",
"A new beginning": "Unlocks the ability to reset for Dark Matter",
// Dark Milestones
"Mind Control": "Control the Devil by making him give you even more Evil per second",
"Galactic Emperor": "Commander of the Galactic Council grants you the privilege to automatically collect Essence from the nearby planets",
"Dark Matter Harvester": "Harvest the universe to extract even more Dark Matter from it.",
"A Dark Era": "Start a new era of Dark Matter.",
"Dark Orbiter": "Using some wizardry you can improve your Dark Orb generators massively.",
"Dark Matter Mining": "Mine a huge amount of Dark Matter from each planet you visit.",
"The new gold": "Essence might become the new gold due to mass adoption.",
"The Devil inside you": "Shady deals with the Devil grant you a huge Evil bonus.",
"Strange Magic": "A strange wizard offers you a few secret spells which might be usefull.",
"Life is valueable": "Time is limited... Even as the ruler of the universe.",
"Speed speed speed": "You can affect the speed of the universe with your gigantic amount of Dark Matter.",
"Dark Matter Millionaire": "This secret spell will help you reach your quest to become the first Dark Matter millionaire.",
"The new Dark Matter": "",
}
File diff suppressed because it is too large Load Diff
+219
View File
@@ -0,0 +1,219 @@
function softcap(value, cap, power = 0.5) {
if (value <= cap) return value
return Math.pow(value, power) * Math.pow(cap, 1 - power)
}
function format(number, decimals = 1) {
const units = ["", "k", "M", "B", "T", "Qa", "Qi", "Sx", "Sp", "O", "N", "D", "Ud", "Dd", "Td", "Qad", "Qid", "Sxd", "Spd", "Od", "Nd", "V", "Uv", "Dv", "Tv",
"Qav", "Qiv", "Sxv", "Spv", "Ov", "Nv", "Tr", "Ut", "Dt", "Tt"]
// what tier? (determines SI symbol)
const tier = Math.log10(number) / 3 | 0;
if (tier <= 0) return math.floor(number, decimals).toFixed(decimals);
if ((gameData.settings.numberNotation == 0 || tier < 3) && (tier < units.length)) {
const suffix = units[tier];
const scale = Math.pow(10, tier * 3);
const scaled = number / scale;
return math.floor(scaled, decimals).toFixed(decimals) + suffix;
} else {
if (gameData.settings.numberNotation == 1) {
const exp = Math.log10(number) | 0;
const scale = Math.pow(10, exp);
const scaled = number / scale;
return math.floor(scaled, decimals).toFixed(decimals) + "e" + exp;
}
else {
const exp = Math.log10(number) / 3 | 0;
const scale = Math.pow(10, exp * 3);
const scaled = number / scale;
return math.floor(scaled, decimals).toFixed(decimals) + "e" + exp * 3;
}
}
}
function getCoinsData() {
switch (gameData.settings.currencyNotation) {
case 0: return [
{ "name": "p", "color": "#79b9c7", "value": 1e6 },
{ "name": "g", "color": "#E5C100", "value": 10000 },
{ "name": "s", "color": "#a8a8a8", "value": 100 },
{ "name": "c", "color": "#a15c2f", "value": 1 },
];
case 1: return [
{ "name": " 𒀱", "color": "#ffffff", "value": 1e62, "class": "currency-shadow-rainbow" },
{ "name": " 𒀱", "color": "#ffffff", "value": 1e47, "class": "currency-shadow" },
{ "name": " 𒇫", "color": "#66ccff", "value": 1e41, "class": "currency-shadow" },
{ "name": "🜊", "color": "#00ff00", "value": 1e35, "class": "currency-bold" },
{ "name": "✹", "color": "#ffffcc", "value": 1e30 },
{ "name": "∰", "color": "#ff0083", "value": 1e26 },
{ "name": "Φ", "color": "#27b897", "value": 1e23 },
{ "name": "Ξ", "color": "#cd72ff", "value": 1e20 },
{ "name": "Δ", "color": "#f5c211", "value": 1e17 },
{ "name": "d", "color": "#ffffff", "value": 1e14 },
{ "name": "r", "color": "#ed333b", "value": 1e12 },
{ "name": "S", "color": "#6666ff", "value": 1e10 },
{ "name": "e", "color": "#2ec27e", "value": 1e8 },
{ "name": "p", "color": "#79b9c7", "value": 1e6 },
{ "name": "g", "color": "#E5C100", "value": 10000 },
{ "name": "s", "color": "#a8a8a8", "value": 100 },
{ "name": "c", "color": "#a15c2f", "value": 1 },
];
case 2: return [
{ "name": "", "color": "#E5C100", "value": 240, "prefix": "£" },
{ "name": "s", "color": "#a8a8a8", "value": 12 },
{ "name": "d", "color": "#a15c2f", "value": 1 },
];
default: throw new Error("Invalid currency notation set");
}
}
function formatWhole(number, decimals = 1) {
if (number >= 1e3 || (number <= 0.99 && number != 0)) {
return format(number, decimals)
}
return format(number, 0);
}
function formatCoins(coins, element) {
for (const c of element.children) {
c.textContent = "";
}
switch (gameData.settings.currencyNotation) {
case 0:
case 1:
case 2:
const money2 = getCoinsData()
let coinsUsed = 0
for (let i = 0; i < money2.length; i++) {
const m = money2[i];
const prev = money2[i - 1];
const diff = prev ? prev.value / m.value : Infinity;
const amount = Math.floor(coins / m.value) % diff;
if ((amount > 0 || (coins < 1 && m.value == 1))) {
element.children[coinsUsed].textContent = (m.prefix ?? "") + format(amount, amount < 1000 ? 0 : 2) + m.name
element.children[coinsUsed].style.color = m.color
element.children[coinsUsed].className = m.class ? m.class : ""
coinsUsed++
}
if (coinsUsed >= 2 || amount >= 100) break;
}
break;
case 3:
element.children[0].textContent = "$" + format(coins / 100, 2)
element.children[0].style.color = "#E5C100"
element.children[0].className = ""
break;
default:
throw new Error("Invalid currency notation set");
}
}
function formatTime(sec_num, show_ms = false) {
if (sec_num == null) {
return "unknown"
}
if (sec_num < 0) {
return '-' + formatTime(-sec_num, show_ms)
}
if (sec_num >= 31536000) {
let years = Math.floor(sec_num / 31536000)
if (years >= 1000) {
return formatWhole(years) + ' years'
}
return years + 'y ' + formatTime(sec_num % 31536000, show_ms)
}
if (sec_num >= 86400) {
let days = Math.floor(sec_num / 86400)
return days + 'd ' + formatTime(sec_num % 86400, show_ms)
}
let hours = Math.floor(sec_num / 3600)
let minutes = Math.floor((sec_num - (hours * 3600)) / 60)
let seconds = Math.floor(sec_num - (hours * 3600) - (minutes * 60))
let ms = Math.floor((sec_num - Math.floor(sec_num)) * 1000)
let mss = (show_ms ? "." + ms.toString().padStart(3, "0") : "")
if (hours < 10) hours = "0" + hours
if (minutes < 10) minutes = "0" + minutes
if (seconds < 10) seconds = "0" + seconds
return hours + ':' + minutes + ':' + seconds + mss
}
function formatLevel(level) {
if (level >= 100000)
return format(level)
return level.toLocaleString()
}
function formatAge(days) {
const years = daysToYears(days)
const day = getCurrentDay(days)
if (years > 10000)
return "Age " + format(years)
else
return "Age " + years + " Day " + day
}
function getBaseLog(x, y) {
return Math.log(y) / Math.log(x);
}
function yearsToDays(years) {
return years * 365
}
function daysToYears(days) {
return Math.floor(days / 365)
}
function getCurrentDay(days) {
return Math.floor(days - daysToYears(days) * 365)
}
function getElementsByClass(className) {
return document.getElementsByClassName(removeSpaces(className))
}
function removeSpaces(string) {
return string.replace(/ /g, "")
}
function removeStrangeCharacters(string) {
return string.replace(/'/g, "")
}
function bigIntToExponential(value) {
if(typeof value !== 'bigint') throw new Error("Argument must be a bigint, but a " + (typeof value) + " was supplied.");
const isNegative = value < 0;
if (isNegative) value = -value; // Using the absolute value for the digits.
const str = value.toString();
const exp = str.length - 1;
if (exp == 0) return (isNegative ? "-" : '') + str + "e0";
const mantissaDigits = str.replace(/(0+)$/, ''); // Remove any mathematically insignificant zeroes.
// Use the single first digit for the integral part of the mantissa
const mantissa = mantissaDigits.charAt(0);
return (isNegative ? "-" : '') + mantissa + "e" + exp.toString();
}
function exponentialToRawNumberString(value) {
if (value == "" || value.length == 0)
return "0"
const split = value.split("e")
const first = split[0]
const exponent = Number(split[1])
return first + [...Array(exponent)].map(() => "0").join("")
}
File diff suppressed because one or more lines are too long