m ccats ii

hi mom

// ==UserScript==
// @name         m ccats ii
// @namespace    Custom.Script
// @version      2.14
// @author       fartpooper2565
// @description  hi mom
// @match        *://*/*
// @grant        GM_getValue
// @grant        GM_setValue
// @noframes
// @license      GPL-3.0-or-later
// @icon         https://media1.tenor.com/m/HBpfYm9_MVoAAAAC/push-up-cat.gif
// ==/UserScript==

(function () {
    'use strict';

    function color(value) {
        return `hue-rotate(${value % 360}deg)`;
    }
    var labelheight = 160
    const cars = [
        //
        { name: "push up crah", url: "https://media1.tenor.com/m/HBpfYm9_MVoAAAAC/push-up-cat.gif", chance: 30, rarity: "uncommon", sfx:"https://files.catbox.moe/z5r0ku.mp3"},
        { name: "wamter cat", url: "https://media1.tenor.com/m/4VY0Ykn4lN4AAAAd/cat-broken-cat.gif", chance: 45, rarity: "commom", sfx:"https://files.catbox.moe/wyaowt.mp3"},
        { name: "cole cart", url: "https://i.imgur.com/qZdhXiW.gif", chance: 15, rarity: "rare", sfx: "https://files.catbox.moe/5z5f3q.mp3"},
        { name: "caert", url: "https://media1.tenor.com/m/vliHqLcJ0wUAAAAd/cute-kitten.gif", chance: 15, rarity: "rare", sfx: "https://files.catbox.moe/5z5f3q.mp3"},
        { name: "shorwmar kitr", url: "https://media1.tenor.com/m/4L4U7UME9RIAAAAd/kitty-kitten.gif", chance: 30, rarity: "uncommon", sfx: "https://files.catbox.moe/z5r0ku.mp3"},
        { name: "starm", url: "https://i.imgur.com/QYSZzKp.png", chance: 30, rarity: "uncommon", sfx: "https://files.catbox.moe/z5r0ku.mp3"},
        { name: "starm2", url: "https://i.imgur.com/9xPS4G2.png", chance: 15, rarity: "rare", sfx: "https://files.catbox.moe/5z5f3q.mp3"},
        { name: "bimp boops bithday", url: "https://i.imgur.com/9NVjxuT.png", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        //
        { name: "kendca", url: "https://i.imgur.com/3YM93Uq.jpeg", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "ken carteson c", url: "https://i.imgur.com/Si6xk3x.jpeg", chance: 6, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "carti ca", url: "https://i.imgur.com/iEi1UEi.jpeg", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "kaney cartee", url: "https://i.imgur.com/IIqHI78.jpeg", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "exh exh eh e car", url: "https://i.imgur.com/9AWa1jw.jpeg", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "tlye cat", url: "https://i.imgur.com/dTCodhK.jpeg", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "frank eoan car", url: "https://i.imgur.com/0ccBIbS.jpeg", chance: 11, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "ticklel tecca", url: "https://i.imgur.com/Cw428wX.jpeg", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        { name: "21 savage cah", url: "https://i.imgur.com/6hpANfb.gif", chance: 10, rarity: "epic", sfx: "https://files.catbox.moe/ve6jm8.mp3"},
        //
        { name: "I LOVE KITTY", url: "https://i.imgur.com/Mb8OwbB.gif", chance: 3, rarity: "woah sexy", sfx: "https://files.catbox.moe/8dzi3v.mp3"},
        { name: "if daint want me to be straight super rare !!", url: "https://i.imgur.com/XXDzfc3.jpeg", chance: 1, rarity: "SUPER sexy", sfx: "https://files.catbox.moe/8dzi3v.mp3"},
        //
        { name: "I LOVE KITTY", url: "https://i.imgur.com/Mb8OwbB.gif", chance: 6, rarity: "mythic", sfx: "https://files.catbox.moe/nfh98n.mp3"},
        { name: "amril fall", url: "https://media1.tenor.com/m/SV80CXJoQvYAAAAd/apple-cat-apple.gif", chance: 6, rarity: "mythic", sfx: "https://files.catbox.moe/nfh98n.mp3"},
        { name: "oe aprekl", url: "https://media1.tenor.com/m/GBsEFKjmnh4AAAAd/cat-holding-apple-cat.gif", chance: 6, rarity: "mythic", sfx: "https://files.catbox.moe/nfh98n.mp3"},
        { name: "ome april", url: "https://media1.tenor.com/m/kusA5iJZMRQAAAAd/cat-greedy-cat-with-apple.gif", chance: 6, rarity: "mythic", sfx: "https://files.catbox.moe/nfh98n.mp3"},
        { name: "moeange", url: "https://i.imgur.com/Ju0WWV5.png", chance: 6, rarity: "mythic", sfx: "https://files.catbox.moe/nfh98n.mp3"},
        //
        { name: "twine car no", url: "https://media1.tenor.com/m/t25MPZt8VNQAAAAd/twink-femboy.gif", chance: 2, rarity: "extra mythic", sfx: "https://files.catbox.moe/nfh98n.mp3" },
        //
        { name: "naon cat s dide", url: "https://media1.tenor.com/m/xxgy9ivB2rUAAAAd/cats-plushies.gif", chance: 1, rarity: "legendary", sfx: "https://files.catbox.moe/wc54mx.mp3"},
    ];

    const bass = new Audio("https://files.catbox.moe/o5waw2.mp3");

    const colorchange = 10;
    const colorchangetime = 1;

    const bonusbox = Math.random() < 0.025;
    if (bonusbox) {
        for (let i = 0; i < 20; i++) {
            catrain();
        }
    } else {
        spawnBottomRightCat();
    }

        function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
        async function spawnBottomRightCat() {
        const selectedCar = getRandomCar();
        const colorq = Math.random() < 0.2 ? 1 : 5;
        let rainbow = "";

        if (colorq === 1) {
            rainbow = "rainbow ";
        }

        let totalChance = cars.reduce((sum, car) => sum + car.chance, 0);
        totalChance -= totalChance / 6;
        let chance = selectedCar.chance / totalChance;
        if (colorq === 1) chance /= 6;

        const catgif = document.createElement('img');
        catgif.src = selectedCar.url;
        catgif.style.position = 'fixed';
        catgif.style.bottom = '0';
        catgif.style.right = '0';
        catgif.style.zIndex = '999999999';
        catgif.style.width = '150px';
        catgif.style.cursor = 'pointer';
        catgif.style.filter = color(0);
        if (selectedCar.rarity === "mythic") catgif.style.height = '150px';

        const raritysfx = new Audio(selectedCar.sfx);
        const bass = new Audio("https://files.catbox.moe/o5waw2.mp3");
        raritysfx.volume = 1;
        bass.volume = 1;

        catgif.onclick = async () => {
            bass.play();
            await sleep(900)
            bass.play();
            await sleep(900)
            raritysfx.play();
            await sleep(900)
            bass.play();
            await sleep(900)
            bass.play();
            await sleep(900)
            catgif.remove();
            label.remove();
        };

        document.body.appendChild(catgif);

        let numbfound = GM_getValue("numbfound", 0);
        const alreadyFound = GM_getValue(rainbow + selectedCar.name, false);
        let arlfound = "";

        const label = document.createElement('div');

        if (!alreadyFound) {
            GM_setValue(rainbow + selectedCar.name, true);
            numbfound++;
            arlfound = " (new cat)";
            label.textContent = `${selectedCar.rarity + " " + rainbow + selectedCar.name} Chance: ${(chance * 100).toFixed(1)} %${arlfound}, Total found: ${numbfound} / ${cars.length * 2}`;
            label.style.position = 'fixed';
            label.style.bottom = labelheight + "px";
            label.style.right = '0';
            raritystyle(label, selectedCar.rarity);
            document.body.appendChild(label);

            GM_setValue("numbfound", numbfound);
        } else {
            arlfound = " (already found)";
            label.textContent = `${numbfound}/${cars.length * 2}`;
            label.style.position = 'fixed';
            label.style.bottom = labelheight + "px";
            label.style.right = '0';
            raritystyle(label, selectedCar.rarity);
            document.body.appendChild(label);
        }

        let value = 0;
        function updateColor() {
            if (colorq === 1) {
                catgif.style.filter = color(value);
                value += colorchangetime;
            }
        }
        setInterval(updateColor, colorchange);
    }

    function catrain() {
        const selectedCar = getRandomCar();
        const colorq = Math.random() < 0.2 ? 1 : 5;
        let rainbow = "";

        if (colorq === 1) rainbow = "rainbow ";


        const catgif = document.createElement('img');
        catgif.src = selectedCar.url;
        catgif.style.position = 'fixed';
        catgif.style.top = '-150px';
        catgif.style.left = `${Math.random() * (window.innerWidth - 150)}px`;
        catgif.style.zIndex = '999999999';
        catgif.style.width = '150px';
        catgif.style.pointerEvents = 'none';
        catgif.style.filter = color(0);
        document.body.appendChild(catgif);

        const fallDuration = 5 + Math.random() * 2;
        catgif.animate([
            { transform: 'translateY(0px)' },
            { transform: `translateY(${window.innerHeight + 150}px)` }
        ], {
            duration: fallDuration * 1000,
            easing: 'linear'
        });

        setTimeout(() => catgif.remove(), fallDuration * 1000);

        let numbfound = GM_getValue("numbfound", 0);
        const alreadyFound = GM_getValue(rainbow + selectedCar.name, false);
        if (!alreadyFound) {
            GM_setValue(rainbow + selectedCar.name, true);
            numbfound++;
            GM_setValue("numbfound", numbfound);
        }
        const label = document.createElement('div');
        let totalChance = cars.reduce((sum, car) => sum + car.chance, 0);
        totalChance -= totalChance / 6;
        let chance = selectedCar.chance / totalChance;
        if (colorq === 1) chance /= 6;

        let arlfound = alreadyFound ? " (already found)" : " (new cat)";
        label.textContent = `${selectedCar.rarity + " " + rainbow + selectedCar.name} Chance: ${(chance * 100).toFixed(1)} %${arlfound}, Total found: ${numbfound} / ${cars.length * 2}`;
        label.style.position = 'fixed';
        label.style.bottom = labelheight + "px";
        labelheight = labelheight + 25
        label.style.right = '0';
        raritystyle(label, selectedCar.rarity);
        document.body.appendChild(label);

    }

    function getRandomCar() {
        const weightedIndexes = [];
        cars.forEach((car, index) => {
            for (let i = 0; i < car.chance; i++) {
                weightedIndexes.push(index);
            }
        });
        const selectedIndex = weightedIndexes[Math.floor(Math.random() * weightedIndexes.length)];
        return cars[selectedIndex];
    }

    function raritystyle(label, rarity) {
        if (rarity === "commom") label.style.color = 'black';
        if (rarity === "uncommon") label.style.color = 'green';
        if (rarity === "rare") label.style.color = 'blue';
        if (rarity === "epic") label.style.color = 'purple';
        if (rarity === "extra mythic") label.style.color = 'red';
        if (rarity === "mythic") label.style.color = 'red';
        if (rarity === "legendary") label.style.color = 'yellow';
        if (rarity === "woah sexy" || rarity === "SUPER sexy") {
            label.style.color = 'pink';
            label.style.fontFamily = 'cursive';
        } else {
            label.style.fontFamily = 'sans-serif';
        }

        label.style.fontSize = '14px';
        label.style.background = 'rgba(255, 255, 255, 0.8)';
        label.style.padding = '6px 10px';
        label.style.borderRadius = '8px';
        label.style.zIndex = '9999999999';
        label.style.pointerEvents = 'none';
    }
})();