BFDIA 5b Mod Menu

Mod menu to change level progress, deaths, win tokens, and additional features in BFDIA 5b

// ==UserScript==
// @name         BFDIA 5b Mod Menu
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  Mod menu to change level progress, deaths, win tokens, and additional features in BFDIA 5b
// @author       BakedCake
// @match        https://coppersalts.github.io/HTML5b/
// @license      CC BY-ND 4.0 - See below
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let menu = document.createElement("div");
    menu.style.position = "fixed";
    menu.style.top = "10px";
    menu.style.left = "10px";
    menu.style.padding = "10px";
    menu.style.border = "2px solid white";
    menu.style.fontFamily = "Arial, sans-serif";
    menu.style.zIndex = "9999";
    menu.style.borderRadius = "8px";
    menu.style.width = "300px";
    menu.style.cursor = "move";
    menu.style.userSelect = "none";
    menu.style.transition = "all 0.3s ease-in-out";

    function updateTheme() {
        let hour = new Date().getHours();
        if (hour >= 7 && hour < 19) {
            menu.style.background = "rgba(255, 255, 255, 0.9)";
            menu.style.color = "black";
            menu.style.border = "2px solid black";
        } else {
            menu.style.background = "rgba(0, 0, 0, 0.8)";
            menu.style.color = "white";
            menu.style.border = "2px solid white";
        }
    }

    updateTheme();
    setInterval(updateTheme, 60000);

    let isDragging = false;
    let offsetX, offsetY;

    menu.addEventListener("mousedown", (e) => {
        isDragging = true;
        offsetX = e.clientX - menu.offsetLeft;
        offsetY = e.clientY - menu.offsetTop;
    });

    document.addEventListener("mousemove", (e) => {
        if (isDragging) {
            menu.style.left = `${e.clientX - offsetX}px`;
            menu.style.top = `${e.clientY - offsetY}px`;
        }
    });

    document.addEventListener("mouseup", () => {
        isDragging = false;
    });

    let closeButton = document.createElement("button");
    closeButton.innerText = "X";
    closeButton.style.position = "absolute";
    closeButton.style.top = "5px";
    closeButton.style.right = "5px";
    closeButton.style.cursor = "pointer";
    closeButton.addEventListener("click", () => {
        if (confirm("Are you sure you want to close the mod menu?")) {
            menu.remove();
        }
    });
    menu.appendChild(closeButton);

    let title = document.createElement("h3");
    title.innerText = "BFDIA 5b Mod Menu";
    title.style.margin = "0 0 10px 0";
    title.style.textAlign = "center";
    menu.appendChild(title);

    let inputLevel = document.createElement("input");
    inputLevel.type = "number";
    inputLevel.placeholder = "Enter level...";
    inputLevel.style.width = "100%";
    inputLevel.style.marginBottom = "5px";
    menu.appendChild(inputLevel);

    let buttonLevel = document.createElement("button");
    buttonLevel.innerText = "Set Level";
    buttonLevel.style.width = "100%";
    buttonLevel.style.cursor = "pointer";
    menu.appendChild(buttonLevel);

    let inputDeath = document.createElement("input");
    inputDeath.type = "number";
    inputDeath.placeholder = "Enter deaths...";
    inputDeath.style.width = "100%";
    inputDeath.style.marginBottom = "5px";
    menu.appendChild(inputDeath);

    let buttonDeath = document.createElement("button");
    buttonDeath.innerText = "Set Deaths";
    buttonDeath.style.width = "100%";
    buttonDeath.style.cursor = "pointer";
    menu.appendChild(buttonDeath);

    let levelDisplay = document.createElement("p");
    levelDisplay.style.marginTop = "10px";
    levelDisplay.style.textAlign = "center";
    menu.appendChild(levelDisplay);

    let unlockButton = document.createElement("button");
    unlockButton.innerText = "Unlock all levels";
    unlockButton.style.width = "100%";
    unlockButton.style.cursor = "pointer";
    unlockButton.style.marginTop = "5px";
    menu.appendChild(unlockButton);

    let winTokenButton = document.createElement("button");
    winTokenButton.innerText = "Collect all Win Tokens";
    winTokenButton.style.width = "100%";
    winTokenButton.style.cursor = "pointer";
    winTokenButton.style.marginTop = "5px";
    menu.appendChild(winTokenButton);

    let wipeDataButton = document.createElement("button");
    wipeDataButton.innerText = "Wipe Data";
    wipeDataButton.style.width = "100%";
    wipeDataButton.style.cursor = "pointer";
    wipeDataButton.style.marginTop = "5px";
    menu.appendChild(wipeDataButton);

    function updateLevelDisplay() {
        let currentProgress = localStorage.getItem('levelProgress') || "0";
        let currentDeaths = localStorage.getItem('deathCount') || "0";
        levelDisplay.innerText = `Level Progress: ${currentProgress} | Deaths: ${currentDeaths}`;
    }

    buttonLevel.addEventListener("click", function() {
        let newValue = inputLevel.value;
        if (newValue !== "") {
            localStorage.setItem('levelProgress', newValue);
            updateLevelDisplay();
        }
    });

    buttonDeath.addEventListener("click", function() {
        let newValue = inputDeath.value;
        if (newValue !== "") {
            localStorage.setItem('deathCount', newValue);
            updateLevelDisplay();
        }
    });

    unlockButton.addEventListener("click", function() {
        localStorage.setItem('levelProgress', "53");
        updateLevelDisplay();
    });

    winTokenButton.addEventListener("click", function() {
        localStorage.setItem('gotCoin', 'true,'.repeat(53).slice(0, -1));
    });

    wipeDataButton.addEventListener("click", function() {
        localStorage.clear();
        updateLevelDisplay();
    });

    let credits = document.createElement("p");
    credits.innerHTML = "Thanks to <a href='https://www.youtube.com/@minechat638' target='_blank'>@minechat638</a> | <a href='https://www.youtube.com/@bakedcake02' target='_blank'>BakedCake</a>";
    credits.style.textAlign = "center";
    credits.style.marginTop = "10px";
    menu.appendChild(credits);

    updateLevelDisplay();
    document.body.appendChild(menu);
})();