Greasy Fork is available in English.

🐭️ MouseHunt - Shields

Change your MouseHunt shield to an event shield, like the Halloween shield.

// ==UserScript==
// @name         🐭️ MouseHunt - Shields
// @version      1.7.0
// @description  Change your MouseHunt shield to an event shield, like the Halloween shield.
// @license      MIT
// @author       bradp
// @namespace    bradp
// @match        https://www.mousehuntgame.com/*
// @icon         https://i.mouse.rip/mouse.png
// @grant        none
// @run-at       document-end
// @require      https://cdn.jsdelivr.net/npm/mousehunt-utils@1.5.3/mousehunt-utils.js
// @require      https://cdn.jsdelivr.net/npm/script-migration@1.1.1
// ==/UserScript==

((function () {
  'use strict';

  const addClass = (el, shieldClass) => {
    const classToAdd = shieldClass.replace('.', ' ');

    classToAdd.split(' ').forEach((className) => {
      el.classList.add(className);
    });
  };

  const changeShield = () => {
    const classesToUse = [];

    shieldChoices.forEach((shield) => {
      const setting = getSetting(`${shield}-shield`);
      if (setting) {
        classesToUse.push(shield);
      }
    });

    const shieldEl = document.querySelector('.mousehuntHud-shield');
    if (! shieldEl) {
      return;
    }

    // Remove all shield classes.
    shieldEl.classList.remove(...shieldChoices);

    if (classesToUse.length > 1) {
      // If there are multiple shields, use a random one.
      const randomShield = classesToUse[ Math.floor(Math.random() * classesToUse.length) ];
      addClass(shieldEl, randomShield);
    } else if (classesToUse.length === 1) {
      // If there is only one shield, use that one.
      addClass(shieldEl, classesToUse[ 0 ]);
    }
  };

  const titleBadge = () => {
    let title = user.title_name || 'novice';
    title = title.toLowerCase();

    title.replace('lady', 'lord');
    title.replace('wo', '');
    title.replace('ess', '');
    title.replace('duch', 'duke');

    const titleImages = {
      novice: 'https://www.mousehuntgame.com/images/titles/84bc1109b5cd7aa8c24d195bc8207c38.png?cv=2',
      apprentice: 'https://www.mousehuntgame.com/images/titles/3f1e44bbaa7138da4c326819e9f3f0a8.png?cv=2',
      initiate: 'https://www.mousehuntgame.com/images/titles/6f4673dd2d9d1e98b4569667d702a775.png?cv=2',
      journeyman: 'https://www.mousehuntgame.com/images/titles/e96387f7261b95c0eeab9291e4e594e1.png?cv=2',
      master: 'https://www.mousehuntgame.com/images/titles/ad6875955f541159133c6d3798519f81.png?cv=2',
      grandmaster: 'https://www.mousehuntgame.com/images/titles/35ee6056a09037fb13a9195881875045.png?cv=2',
      legendary: 'https://www.mousehuntgame.com/images/titles/0da3761747914f497c16dc2051ba132d.png?cv=2',
      hero: 'https://www.mousehuntgame.com/images/titles/fca35751046f4bcc972716ca484b6d61.png?cv=2',
      knight: 'https://www.mousehuntgame.com/images/titles/398dca9a8c7703de969769491622ca32.png?cv=2',
      lord: 'https://www.mousehuntgame.com/images/titles/9a6acd429a9a3a4849ed13901288b0b8.png?cv=2',
      baron: 'https://www.mousehuntgame.com/images/titles/ea9c0ec2e6d3d81c14e61f5ce924d0e1.png?cv=2',
      count: 'https://www.mousehuntgame.com/images/titles/dd11711a25b80db90e0306193f2e8d78.png?cv=2',
      duke: 'https://www.mousehuntgame.com/images/titles/eb46ac1e8197b13299ab860f07d963db.png?cv=2',
      grandduke: 'https://www.mousehuntgame.com/images/titles/87937fa96bbb3b2dd3225df883002642.png?cv=2',
      archduke: 'https://www.mousehuntgame.com/images/titles/043efe31de4f0f2e0ddca590fe829032.png?cv=2',
      viceroy: 'https://www.mousehuntgame.com/images/titles/e2e79f6f9201a4d4e7a89684fbb5356f.png?cv=2',
      elder: 'https://www.mousehuntgame.com/images/titles/0f3cf224bf98457f6b5bad91ab1c7bd2.png?cv=2',
      sage: 'https://www.mousehuntgame.com/images/titles/cb49e43c5e4460da7c09fe28ca4f44ce.png?cv=2',
      fabled: 'https://www.mousehuntgame.com/images/titles/5daba92a8d609834aa8b789f37544e08.png?cv=2',
    };

    return titleImages[ title ];
  };

  /**
   * Add the settings.
   */
  const addShieldSettings = () => {
    const tab = addSettingsTab();
    const settingSection = {
      id: 'mh-shields',
      name: 'MouseHunt Shields',
      description: 'Replaces the default shield. If multiple shields are enabled, a random one will be used.',
    };

    addSetting('Birthday', 'birthday-shield', false, '', settingSection, tab);
    addSetting('Birthday (Year 10)', 'birthday.year10-shield', false, '', settingSection, tab);
    addSetting('Birthday (Year 11)', 'birthday.year11-shield', false, '', settingSection, tab);
    addSetting('Birthday (Year 12)', 'birthday.year12-shield', false, '', settingSection, tab);
    addSetting('Birthday (Year 13)', 'birthday.year13-shield', false, '', settingSection, tab);
    addSetting('Birthday (Year 14)', 'birthday.year14-shield', false, '', settingSection, tab);
    addSetting('Birthday (Year 15)', 'birthday.year15-shield', false, '', settingSection, tab);
    addSetting('Halloween', 'halloween-shield', false, '', settingSection, tab);
    addSetting('Remembrance Day', 'remembrance_day-shield', false, '', settingSection, tab);
    addSetting('Valentine\'s', 'valentines-shield', false, '', settingSection, tab);
    addSetting('Great Winter Hunter', 'winter_hunt-shield', false, '', settingSection, tab);
    addSetting('Larry\'s Football Challenge', 'larrys_football_challenge-shield', false, '', settingSection, tab);
    addSetting('Spring Egg Hunt', 'eggs-shield', false, '', settingSection, tab);
    addSetting('Title ', 'title-shield', false, 'Hunter Title badge', settingSection, tab);
    addSetting('Fabled ', 'fabled-shield', false, 'Custom shield with Fabled Badge', settingSection, tab);
    addSetting('Scrambles ', 'scrambles-shield', false, 'Bawk!', settingSection, tab);
    addSetting('Jerry ', 'jerry-shield', false, 'Custom shield with Jerry', settingSection, tab);
    addSetting('Romeno ', 'romeno-shield', false, 'Custom shield with Romeno', settingSection, tab);
    addSetting('Captain America', 'capt-america-shield', false, '', settingSection, tab);
    addSetting('Hylian Shield', 'hylian-shield', false, '', settingSection, tab);
  };

  const shieldChoices = [
    'remembrance_day',
    'winter_hunt',
    'valentines',
    'birthday',
    'birthday.year10',
    'birthday.year11',
    'birthday.year12',
    'birthday.year13',
    'birthday.year14',
    'birthday.year15',
    'larrys_football_challenge',
    'halloween',
    'scrambles',
    'jerry',
    'romeno',
    'title',
    'fabled',
    'capt-america',
    'hylian',
    'eggs',
  ];

  onPageChange({ change: changeShield });
  changeShield();

  onPageChange({ change: addShieldSettings });
  addShieldSettings();

  addStyles(`#mh-shields .defaultSettingText {
    display: none;
  }

  #mh-shields .settingRowTable {
    display: inline-block;
    width: 300px;
  }

  #mh-shields .settingRowTable:nth-child(even) {
    margin-right: 50px;
  }

  #mh-shields .settingRow {
    display: flex;
    flex-flow: row wrap;
    align-items: center;
    justify-content: space-between;
  }

  .mousehuntHud-shield.larrys_football_challenge.golden {
    background-image: url(https://www.mousehuntgame.com/images/ui/elements/header_world_cup_golden_shield.png?asset_cache_version=2);
  }

  .mousehuntHud-shield.scrambles.golden {
    background-image: url(https://i.mouse.rip/shield-scrambles-bawk.png), url(https://www.mousehuntgame.com/images/ui/elements/header_golden_shield.gif?asset_cache_version=2);
  }

  .mousehuntHud-shield.scrambles {
    background-image: url(https://i.mouse.rip/shield-scrambles-bawk.png);
  }

  .mousehuntHud-shield.jerry.golden {
    background-image: url(https://i.mouse.rip/shield-jerry.png), url(https://www.mousehuntgame.com/images/ui/elements/header_golden_shield.gif?asset_cache_version=2);
  }

  .mousehuntHud-shield.jerry {
    background-image: url(https://i.mouse.rip/shield-jerry.png);
  }

  .mousehuntHud-shield.capt-america.golden {
    background-image: url(https://i.mouse.rip/shield-capt-america.png), url(https://www.mousehuntgame.com/images/ui/elements/header_golden_shield.gif?asset_cache_version=2);
  }

  .mousehuntHud-shield.capt-america {
    background-image: url(https://i.mouse.rip/shield-capt-america.png);
  }

  .mousehuntHud-shield.hylian::after {
    position: absolute;
    top: -8px;
    left: 7px;
    width: 145px;
    height: 145px;
    content: "";
    background-image: url(https://i.mouse.rip/shield-hylian.png?2);
    background-repeat: no-repeat;
    background-size: contain;
  }

  .mousehuntHud-shield.romeno::after {
    position: absolute;
    bottom: -8px;
    left: -30px;
    z-index: 1;
    width: 140px;
    height: 140px;
    content: "";
    background-image: url(https://i.mouse.rip/shield-romeno.png);
    background-repeat: no-repeat;
    background-size: contain;
  }

  .mousehuntHud-shield.title::after {
    position: absolute;
    top: 3px;
    left: 8px;
    width: 120px;
    height: 120px;
    content: "";
    background-image: url(${titleBadge()});
    filter: drop-shadow(0 0 10px #ff970a);
    background-repeat: no-repeat;
    background-size: contain;
  }

  .mousehuntHud-shield.fabled::after {
    position: absolute;
    top: 3px;
    left: 8px;
    width: 120px;
    height: 120px;
    content: "";
    background-image: url(https://i.mouse.rip/shield-fabled.png);
    filter: drop-shadow(0 0 10px #ff970a);
    background-repeat: no-repeat;
    background-size: contain;
  }

  .mousehuntHud-shield.eggs::after {
    position: absolute;
    position: absolute;
    top: 2px;
    left: 0px;
    width: 137px;
    height: 137px;
    content: "";
    // background-image: url(https://i.mouse.rip/eggs-shield.png);
    background-image: url(https://i.mouse.rip/shield-eggs-alt.png);
    background-repeat: no-repeat;
    background-size: contain
  }
  `);

  migrateUserscript('🐭️ MouseHunt - Shields', 'https://greasyfork.org/en/scripts/454147-mousehunt-shields');
})());