Cookie Clicker Mod Menu

Adds a mod menu to Cookie Clicker for additional features.

  1. // ==UserScript==
  2. // @name Cookie Clicker Mod Menu
  3. // @version 1.0
  4. // @description Adds a mod menu to Cookie Clicker for additional features.
  5. // @author John1632
  6. // @license MIT
  7. // @include https://orteil.dashnet.org/cookieclicker/
  8. // @grant none
  9. // @namespace https://greasyfork.org/users/1082028
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. var multipliers = [2, 5, 10, 20, 50, 100, 500, 1000];
  16. var additionalMultipliers = [100, 500, 1000, 5000, 10000, 50000];
  17.  
  18. var modMenu = document.createElement('div');
  19. modMenu.style.position = 'fixed';
  20. modMenu.style.bottom = '20px';
  21. modMenu.style.left = '20px';
  22. modMenu.style.padding = '10px';
  23. modMenu.style.background = '#333';
  24. modMenu.style.border = '1px solid #fff';
  25. modMenu.style.color = '#fff';
  26. modMenu.style.zIndex = '9999';
  27.  
  28. var bigBox;
  29.  
  30. var feature1Button = document.createElement('button');
  31. feature1Button.textContent = 'Open';
  32. feature1Button.style.background = '#555';
  33. feature1Button.style.color = '#fff';
  34. feature1Button.addEventListener('click', function() {
  35. if (bigBox) {
  36. return;
  37. }
  38. bigBox = document.createElement('div');
  39. bigBox.style.position = 'fixed';
  40. bigBox.style.top = '50%';
  41. bigBox.style.left = '50%';
  42. bigBox.style.transform = 'translate(-50%, -50%)';
  43. bigBox.style.width = '400px';
  44. bigBox.style.height = '200px';
  45. bigBox.style.background = '#222';
  46. bigBox.style.border = '1px solid #fff';
  47. bigBox.style.zIndex = '9999';
  48.  
  49. var title = document.createElement('div');
  50. title.textContent = 'Cookie Clicker Mod Menu';
  51. title.style.fontFamily = 'Segoe UI Semibold';
  52. title.style.fontSize = '16px';
  53. title.style.textAlign = 'center';
  54. title.style.marginTop = '20px';
  55. title.style.color = '#fff';
  56. bigBox.appendChild(title);
  57.  
  58. var buttonsContainer = document.createElement('div');
  59. buttonsContainer.style.display = 'flex';
  60. buttonsContainer.style.flexWrap = 'wrap';
  61. buttonsContainer.style.marginTop = '10px';
  62. buttonsContainer.style.marginLeft = '10px';
  63.  
  64. for (var i = 0; i < multipliers.length; i++) {
  65. var multiplierButton = document.createElement('button');
  66. multiplierButton.textContent = multipliers[i] + 'x';
  67. multiplierButton.style.background = '#555';
  68. multiplierButton.style.color = '#fff';
  69. multiplierButton.style.marginRight = '10px';
  70. multiplierButton.addEventListener('click', createClickHandler(multipliers[i]));
  71. buttonsContainer.appendChild(multiplierButton);
  72. }
  73.  
  74. bigBox.appendChild(buttonsContainer);
  75.  
  76. var additionalButtonsContainer = document.createElement('div');
  77. additionalButtonsContainer.style.display = 'flex';
  78. additionalButtonsContainer.style.flexWrap = 'wrap';
  79. additionalButtonsContainer.style.marginTop = '10px';
  80. additionalButtonsContainer.style.marginLeft = '10px';
  81.  
  82. for (var j = 0; j < additionalMultipliers.length; j++) {
  83. var additionalMultiplierButton = document.createElement('button');
  84. additionalMultiplierButton.textContent = '+' + additionalMultipliers[j].toLocaleString();
  85. additionalMultiplierButton.style.background = '#555';
  86. additionalMultiplierButton.style.color = '#fff';
  87. additionalMultiplierButton.style.marginRight = '10px';
  88. additionalMultiplierButton.addEventListener('click', createAdditionClickHandler(additionalMultipliers[j]));
  89. additionalButtonsContainer.appendChild(additionalMultiplierButton);
  90. }
  91.  
  92. bigBox.appendChild(additionalButtonsContainer);
  93.  
  94. var additionalButtons = [
  95. { label: 'All Upgrades', action: function() { Game.SetAllUpgrades(1); } },
  96. { label: 'All Achievements', action: function() { Game.SetAllAchievs(1); } },
  97. { label: 'Max Specials', action: function() { Game.MaxSpecials(); } }
  98. ];
  99.  
  100. var extraButtonsContainer = document.createElement('div');
  101. extraButtonsContainer.style.display = 'flex';
  102. extraButtonsContainer.style.flexWrap = 'wrap';
  103. extraButtonsContainer.style.marginTop = '10px';
  104. extraButtonsContainer.style.marginLeft = '10px';
  105.  
  106. for (var k = 0; k < additionalButtons.length; k++) {
  107. var additionalButton = document.createElement('button');
  108. additionalButton.textContent = additionalButtons[k].label;
  109. additionalButton.style.background = '#555';
  110. additionalButton.style.color = '#fff';
  111. additionalButton.style.marginRight = '10px';
  112. additionalButton.addEventListener('click', additionalButtons[k].action);
  113. extraButtonsContainer.appendChild(additionalButton);
  114. }
  115.  
  116. bigBox.appendChild(extraButtonsContainer);
  117.  
  118. var resetButton = document.createElement('button');
  119. resetButton.textContent = 'RESET GAME';
  120. resetButton.style.background = '#f00';
  121. resetButton.style.color = '#fff';
  122. resetButton.style.position = 'absolute';
  123. resetButton.style.bottom = '10px';
  124. resetButton.style.left = '50%';
  125. resetButton.style.transform = 'translateX(-50%)';
  126. resetButton.addEventListener('click', function() {
  127. var confirmation = confirm('Are you sure you want to reset the game?');
  128. if (confirmation) {
  129. Game.SesameReset();
  130. }
  131. });
  132. bigBox.appendChild(resetButton);
  133.  
  134. document.body.appendChild(bigBox);
  135. });
  136. modMenu.appendChild(feature1Button);
  137.  
  138. var feature2Button = document.createElement('button');
  139. feature2Button.textContent = 'Close';
  140. feature2Button.style.background = '#555';
  141. feature2Button.style.color = '#fff';
  142. feature2Button.style.marginLeft = '10px';
  143. feature2Button.addEventListener('click', function() {
  144. if (!bigBox) {
  145. return;
  146. }
  147. document.body.removeChild(bigBox);
  148. bigBox = null;
  149. });
  150. modMenu.appendChild(feature2Button);
  151.  
  152. var autoClickerButton = document.createElement('button');
  153. autoClickerButton.textContent = 'Auto-Click: OFF';
  154. autoClickerButton.style.background = '#555';
  155. autoClickerButton.style.color = '#fff';
  156. autoClickerButton.style.marginLeft = '10px';
  157. autoClickerButton.addEventListener('click', function() {
  158. if (autoClickerButton.textContent === 'Auto-Click: OFF') {
  159. startAutoClicker();
  160. } else {
  161. stopAutoClicker();
  162. }
  163. });
  164. modMenu.appendChild(autoClickerButton);
  165.  
  166. document.body.appendChild(modMenu);
  167.  
  168. function createClickHandler(multiplier) {
  169. return function() {
  170. var cookies = Game.cookies;
  171. var newAmount = cookies * multiplier;
  172. Game.cookies = newAmount;
  173. };
  174. }
  175.  
  176. function createAdditionClickHandler(value) {
  177. return function() {
  178. Game.cookies += value;
  179. };
  180. }
  181.  
  182. var autoClickerIntervalId;
  183.  
  184. function startAutoClicker() {
  185. autoClickerIntervalId = setInterval(function() {
  186. Game.ClickCookie();
  187. }, 100);
  188. autoClickerButton.textContent = 'Auto-Click: ON';
  189. }
  190.  
  191. function stopAutoClicker() {
  192. clearInterval(autoClickerIntervalId);
  193. autoClickerIntervalId = null;
  194. autoClickerButton.textContent = 'Auto-Click: OFF';
  195. }
  196. })();
  197.