richardgrechko2

Eternity Meta HUD

Mar 17th, 2026 (edited)
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Eternity Meta HUD (give credit to richardgrechko2 before making a copy of it)
  2. (async function () {
  3.     if (document.getElementById("hud")) return;
  4.  
  5.     // break_eternity.js
  6.     await new Promise((res, rej) => {
  7.         if (!window.Decimal) {
  8.             const s = document.createElement("script");
  9.             s.src = "https://cdn.jsdelivr.net/npm/break_eternity.js";
  10.             s.onload = res;
  11.             s.onerror = () => {
  12.                 const s2 = document.createElement("script");
  13.                 s2.src = "https://unpkg.com/break_eternity.js";
  14.                 s2.onload = res;
  15.                 s2.onerror = rej;
  16.                 document.head.appendChild(s2);
  17.             };
  18.             document.head.appendChild(s);
  19.             return
  20.         }
  21.         return res()
  22.     });
  23.  
  24.     // === CREATE HUD ===
  25.     const hud = document.createElement("div");
  26.     hud.id = "hud";
  27.     Object.assign(hud.style, {
  28.         position: "fixed",
  29.         background: "rgba(0,0,0,0.85)",
  30.         color: "#fff",
  31.         padding: "15px 25px",
  32.         borderRadius: "12px",
  33.         fontFamily: "monospace",
  34.         textAlign: "center",
  35.         zIndex: "99999",
  36.         minWidth: "260px",
  37.         userSelect: "none",
  38.         cursor: "default"
  39.     });
  40.  
  41.     // === CLOSE BUTTON ===
  42.     const closeBtn = document.createElement("div");
  43.     closeBtn.textContent = "×";
  44.     Object.assign(closeBtn.style, {
  45.         position: "absolute",
  46.         top: "5px",
  47.         right: "10px",
  48.         cursor: "pointer",
  49.         fontWeight: "bold",
  50.         fontSize: "18px",
  51.         color: "#fff",
  52.         userSelect: "none"
  53.     });
  54.     closeBtn.addEventListener("click", () => {
  55.         hud.remove();
  56.     });
  57.     hud.appendChild(closeBtn);
  58.  
  59.     // === CENTER HUD FUNCTION ===
  60.     function centerHUD() {
  61.         if (dragging) return; // don't auto-center while dragging
  62.         const rect = hud.getBoundingClientRect();
  63.         hud.style.left = (window.innerWidth / 2 - rect.width / 2) + "px";
  64.         hud.style.top = (window.innerHeight / 2 - rect.height / 2) + "px";
  65.     }
  66.  
  67.     // Initial center (after rendering children)
  68.     setTimeout(centerHUD, 0);
  69.     window.addEventListener("resize", centerHUD);
  70.  
  71.     // === DRAGGABLE ===
  72.     let dragging = false, offsetX = 0, offsetY = 0;
  73.  
  74.     hud.addEventListener("mousedown", (e) => {
  75.         if (e.target === closeBtn) return; // ignore drag if clicking close button
  76.         dragging = true;
  77.         const rect = hud.getBoundingClientRect();
  78.         offsetX = e.clientX - rect.left;
  79.         offsetY = e.clientY - rect.top;
  80.         hud.style.cursor = "move";
  81.     });
  82.  
  83.     document.addEventListener("mousemove", (e) => {
  84.         if (!dragging) return;
  85.         hud.style.left = (e.clientX - offsetX) + "px";
  86.         hud.style.top = (e.clientY - offsetY) + "px";
  87.     });
  88.  
  89.     document.addEventListener("mouseup", () => {
  90.         if (dragging) dragging = false;
  91.         hud.style.cursor = "default";
  92.     });
  93.  
  94.     const app = document.createElement("div");
  95.     app.id = "app"
  96.     app.classList.add("layer-background")
  97.    
  98.     const layersText = document.createElement("div");
  99.     layersText.id = "layers"
  100.     Object.assign(layersText.style, {
  101.         fontSize: "26px",
  102.     })
  103.    
  104.     const totalAText = document.createElement("div");
  105.     totalAText.id = "totalA"
  106.    
  107.     const currentLayerText = document.createElement("div");
  108.     currentLayerText.id = "currentLayer"
  109.    
  110.     Object.assign(currentLayerText.style, {
  111.         color: "#8ec5e8",
  112.     })
  113.    
  114.     const eternitiesText = document.createElement("div");
  115.     eternitiesText.id = "eternities"
  116.    
  117.     Object.assign(eternitiesText.style, {
  118.         color: "#9f65e6",
  119.     })
  120.  
  121.     app.appendChild(layersText)
  122.     app.appendChild(totalAText)
  123.     app.appendChild(currentLayerText)
  124.     app.appendChild(eternitiesText)
  125.     hud.appendChild(app)
  126.     document.body.appendChild(hud);
  127.     // formatting in eternity meta
  128.     function commaFormat(num) {
  129.         let portions = num.split(".")
  130.         portions[0] = portions[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")
  131.         if (portions.length == 1)
  132.             return portions[0]
  133.         return portions[0] + "." + portions[1]
  134.     }
  135.     function fullFormat(options) {
  136.         options = {
  137.             num: options.num || new Decimal("1"),
  138.             precision: options.precision ?? 3,
  139.         }
  140.         if (options.num.gte("10^^1e6")) {
  141.             return "F" + fullFormat({num: options.num.slog().floor(), precision: 0});
  142.         } else if (options.num.gte("10^^10")) {
  143.             return fullFormat({num: new Decimal(10).pow(options.num.slog().sub(options.num.slog().floor())), precision: 3}) + "F" + fullFormat({num: options.num.slog().floor(), precision: 0});
  144.         } else if (options.num.gte("ee10")) {
  145.             return "e" + fullFormat({num: options.num.log10().floor(), precision: 0});
  146.         } else if (options.num.gte("e10")) {
  147.             return fullFormat({num: new Decimal(10).pow(options.num.log10().sub(options.num.log10().floor())), precision: 3}) + "e" + fullFormat({num: options.num.log10().floor(), precision: 0});
  148.         } else if (options.num.gte("1000000")) {
  149.             return commaFormat(options.num.floor().toString());
  150.         } else if (options.num.gte("1000")) {
  151.             return commaFormat(Number(options.num).toFixed(options.precision));
  152.         } else if (options.num.gte("0")) {
  153.             return Number(options.num).toFixed(options.precision);
  154.         };
  155.     }
  156.     // data in eternity meta
  157.     var data = {
  158.         number: new Decimal("1"),
  159.         layer: new Decimal("1"),
  160.         totalA: new Decimal("1"),
  161.         eternities: new Decimal("0"),
  162.         tetration: 0,
  163.         layerHTML: "",
  164.     }
  165.     var functions = {
  166.         convertToLayer(number,mode="Normal") {
  167.             let layers = {
  168.                 letters: "abcdefghijklmnopqrstuvwxyz",
  169.                 infinity: {
  170.                     default: "Pts..∞..∑..▾..ϱ..Ϗ..₣..Cr..Id..Vt..Im..Atr..Is..Sv..Fat..Ins..Unf..Cal..Fut..Fin..Uni".split(".."),
  171.                     tier1: "Sup-..Hyp-..Ult-..Abs-..Meta-".split(".."),
  172.                 },
  173.             };
  174.             switch (mode) {
  175.                 case "Normal":
  176.                     if (number.gte("10^^1e308")) {
  177.                         return "<[Ω]>";
  178.                     } else if (number.gte("10^^5")) {
  179.                         return "<[" + this.convertToLayer(number.slog().floor().sub(1)) + "]>:" + this.convertToLayer(new Decimal(10).pow(new Decimal(10).pow(number.slog().sub(number.slog().floor()))));
  180.                     } else if (number.gte("ee10")) {
  181.                         return "<sub>{" + this.convertToLayer(number.mul(26).add(1).log(27).floor().sub(1)) + "}</sub>◇";
  182.                     } else if (number.gte(5646683826135)) {
  183.                         return "<sub>{" + this.convertToLayer(number.mul(26).add(1).log(27).floor().sub(1)) + "}</sub>" + this.convertToLayer(new Decimal(27).pow(number.mul(26).add(1).log(27).sub(number.mul(26).add(1).log(27).floor())).mul(26).add(1).mul(26).add(1));
  184.                     } else if (number.gte(27)) {
  185.                         return this.convertToLayer(number.sub(1).div(26).floor()) + this.convertToLayer(number.sub(1).sub(number.sub(1).div(26).floor().mul(26)).add(1));
  186.                     } else {
  187.                         return layers.letters[number.sub(1).floor()];
  188.                     };
  189.                 case "Infinity":
  190.                     if (number.gte("10^^1e308")) {
  191.                         return "◇<sup>◇[Ω]◇</sup>";
  192.                     } else if (number.gte("10^^5")) {
  193.                         return this.convertToLayer(new Decimal(10).pow(new Decimal(10).pow(number.slog().sub(number.slog().floor()))),"Infinity") + "<sup>◇[" + this.convertToLayer(number.slog().floor().sub(1),"Infinity") + "]◇</sup>";
  194.                     } else if (number.gte(new Decimal(20).pow(160000))) {
  195.                         return "α<sub>[" + this.convertToLayer(number.sub(2).log(20).floor(),"Infinity") + "]</sub>◇";
  196.                     } else if (number.gte(160002)) {
  197.                         return "α<sub>[" + this.convertToLayer(number.sub(2).log(20).floor(),"Infinity") + "]</sub>" + this.convertToLayer(number.sub(2).div(new Decimal(20).pow(number.sub(2).log(20).sub(1).floor())).add(2),"Infinity");
  198.                     } else if (number.gte(102)) {
  199.                         return this.convertToLayer(number.sub(2).div(20).floor(),"Infinity") + "→" + this.convertToLayer(number.sub(2).sub(number.sub(2).div(20).floor().mul(20)).add(2),"Infinity");
  200.                     } else if (number.gte(22)) {
  201.                         return layers.infinity.tier1[number.sub(2).div(20).floor()] + this.convertToLayer(number.sub(2).sub(number.sub(2).div(20).floor().mul(20)).add(2),"Infinity");
  202.                     } else {
  203.                         return layers.infinity.default[number.sub(1).floor()];
  204.                     };
  205.                 default:
  206.                     return this.convertToLayer(number,"Normal");
  207.             }
  208.         },
  209.         getSaveCode() {
  210.             return btoa(unescape(encodeURIComponent(JSON.stringify(data))))
  211.         },
  212.         save() {
  213.             localStorage.setItem("EternalAlphabetLayersSave",functions.getSaveCode());
  214.         },
  215.         load() {
  216.             function loadValue(value,alternate) {
  217.                 return (value  !== undefined) ? value : alternate;
  218.             };
  219.             let item = localStorage.getItem("EternalAlphabetLayersSave");
  220.             if (item != null) {
  221.                 let object;
  222.                 try {
  223.                     object = JSON.parse(decodeURIComponent(escape(atob(item))))
  224.                 } catch (e) {
  225.                     alert("Error loading game.\nReason: " + e);
  226.                     return;
  227.                 };
  228.                 data.number = loadValue(new Decimal(object.number), new Decimal("1"));
  229.                 data.layer = loadValue(new Decimal(object.layer), new Decimal("1"));
  230.                 data.totalA = loadValue(new Decimal(object.totalA), new Decimal("1"));
  231.                 data.eternities = loadValue(new Decimal(object.eternities), new Decimal("0"));
  232.                 data.tetration = loadValue(object.tetration, 0);
  233.                 data.layerHTML = loadValue(object.layerHTML, "Couldn't load.");
  234.             };
  235.         },
  236.         hardReset() {
  237.             let a = prompt("Are you sure?").toLowerCase();
  238.             if (a == "yes" || a == "y") {
  239.                 let b = prompt("Are you really sure? You will lose your progress.").toLowerCase();
  240.                 if (b == "yes" || b == "y") {
  241.                     data.number = new Decimal("1");
  242.                     data.layer = new Decimal("1");
  243.                     data.totalA = new Decimal("1");
  244.                     data.eternities = new Decimal("0");
  245.                     data.tetration = 0;
  246.                     data.layerHTML = "Loading";
  247.                 };
  248.             };
  249.         },
  250.         update() {
  251.             data.tetration = data.tetration || 0;
  252.             data.tetration += ((data.tetration >= 1) ? .0001/(data.tetration**2) : .0005) * data.eternities.add(1).sqrt();
  253.             data.tetration *= (data.tetration >= 1) ? 1 + (.00005 * Math.log10(data.tetration) * data.eternities.add(1).root(1.25)) : 1;
  254.             if (data.tetration == Infinity) {
  255.                 data.eternities = data.eternities.add(1);
  256.                 data.tetration = 0;
  257.             }
  258.             data.mode = "Normal";
  259.             data.totalA = new Decimal("10").tetrate(data.tetration || 0);
  260.             let layerFormula = data.totalA.log(Number.MAX_VALUE).log(2).add(1).root(2).sub(1).div(1.5).pow(2).add(1).root(data.totalA.slog().div(new Decimal(Number.MAX_VALUE).slog()).max(1).log(2).add(1).mul(1.5))
  261.             let html = document.getElementsByTagName("html")[0]
  262.             data.number = data.totalA.gte(Number.MAX_VALUE)
  263.                 ? new Decimal(Number.MAX_VALUE).pow(layerFormula.sub(layerFormula.floor()))
  264.                 : data.totalA;
  265.             data.layer = data.totalA.gte(Number.MAX_VALUE) ? layerFormula.floor().add(1) : data.totalA.log(Number.MAX_VALUE).floor().add(1);
  266.             document.getElementById("layers").innerHTML = data.layerHTML = data.layer.gte("10^^10") ? `<span style="color: hsl(${data.layer.slog().log10().mul(180)} 100 ${50+(Math.sin(data.layer.slog().log10())*20)+20}); text-shadow: currentcolor 0 0 0.6em, currentcolor 0 0 0.4em, currentcolor 0 0 0.2em;">${functions.convertToLayer(data.layer,data.mode)}</span>` :
  267.                 data.layer.gte("ee10") ? `<span style="color: hsl(${data.layer.slog().mul(180)} 100 ${55+(Math.sin(data.layer.slog())*10)+10}); text-shadow: currentcolor 0 0 0.6em, currentcolor 0 0 0.4em, currentcolor 0 0 0.2em;">${functions.convertToLayer(data.layer,data.mode)}</span>` :
  268.                 data.layer.gte("1e6") ? `<span style="color: hsl(${data.layer.log10().log10().mul(180)} 100 ${60+(Math.sin(data.layer.log10().log10())*5)+5}); text-shadow: currentcolor 0 0 0.6em, currentcolor 0 0 0.4em, currentcolor 0 0 0.2em;">${functions.convertToLayer(data.layer,data.mode)}</span>` :
  269.                 `${fullFormat({num: data.number})}<span style="color: hsl(${data.layer.log10().mul(120)} ${data.layer.gte("10") ? 100 : data.layer.mul(10)} 75); text-shadow: currentcolor 0 0 ${data.layer.gte("100") ? 0.6 : data.layer.sqrt().div(20).mul(1.2)}em, currentcolor 0 0 ${data.layer.gte("100") ? 0.4 : data.layer.sqrt().div(20).mul(0.8)}em, currentcolor 0 0 ${data.layer.gte("100") ? 0.2 : data.layer.sqrt().div(20).mul(0.4)}em;">${functions.convertToLayer(data.layer,data.mode)}</span>`;
  270.         document.getElementsByClassName("layer-background")[0].style.background = data.layer.gte("10^^10") ? `linear-gradient(to bottom, hsl(${data.layer.slog().log10().mul(180)} 100 ${(50+(Math.sin(data.layer.slog().log10())*15)+15)/4}), #000)` :
  271.                 data.layer.gte("ee10") ? `linear-gradient(to bottom, hsl(${data.layer.slog().mul(180)} 100 ${(55+(Math.sin(data.layer.slog())*10)+10)/4}), #000)` :
  272.                 data.layer.gte("1e6") ? `linear-gradient(to bottom, hsl(${data.layer.log10().log10().mul(180)} 100 ${(60+(Math.sin(data.layer.log10().log10())*5)+5)/4}), #000)` :
  273.                 `linear-gradient(to bottom, hsl(${data.layer.log10().mul(120)} ${data.layer.gte("10") ? 100 : data.layer.mul(10)} 18), #000)`;
  274.             document.getElementById("totalA").innerHTML = data.layer.gte("2") ? `That is also ${fullFormat({num: data.totalA})}<span style="color: hsl(0 10 75);">a</span>` : "";
  275.             document.getElementById("currentLayer").innerHTML = `You're currently in Layer ${fullFormat({num: data.layer, precision: 0})}`;
  276.             document.getElementById("eternities").innerHTML = `You have <span style="font-weight: 700;">${fullFormat({num: data.eternities, precision: 0})}</span> eternities.`;
  277.             requestAnimationFrame(functions.update)
  278.         }
  279.     };
  280.     functions.load()
  281.     functions.update();
  282.     setInterval(functions.save,200)
  283.  
  284. })();
Advertisement
Add Comment
Please, Sign In to add comment