您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds Mario-like movement to Drawaria with fly mode, metal mode, star mode, big mode, fire mode, and ice mode, and a draggable menu
// ==UserScript== // @name Drawaria Mario Mod // @namespace http://tampermonkey.net/ // @version 1.1 // @description Adds Mario-like movement to Drawaria with fly mode, metal mode, star mode, big mode, fire mode, and ice mode, and a draggable menu // @author You // @match https://drawaria.online/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Game Constants const GRAVITY = 0.5; // Simulates gravity (adjust as needed) const MAX_SPEED = 10; // Units/second const MIN_SPEED = 2; // Units/second const JUMP_HEIGHT = 15; // Units const FLY_DURATION = 420 * 60; // Frames (7 minutes at 60 FPS) const WING_IMAGE_URL = 'https://img1.picmix.com/output/stamp/thumb/0/4/3/0/2470340_d6215.gif'; const FLY_SOUND_URL = 'https://www.myinstants.com/media/sounds/mario-64-wing-cap.mp3'; const METAL_SOUND_URL = 'https://www.myinstants.com/media/sounds/mario-64-metal-cap.mp3'; const STAR_SOUND_URL = 'https://www.myinstants.com/media/sounds/mario-64-star-power.mp3'; const BIG_SOUND_URL = 'https://www.myinstants.com/media/sounds/mario-mega-mushroom.mp3'; const FIRE_SOUND_URL = 'https://www.myinstants.com/media/sounds/mario-fire-power.mp3'; const ICE_SOUND_URL = 'https://www.myinstants.com/media/sounds/mario-ice-power.mp3'; // Avatar Properties let avatarX = 50; let avatarY = 50; let avatarVX = 0; // Horizontal velocity let avatarVY = 0; // Vertical velocity let isJumping = false; let isFlying = false; let isMetal = false; let isStar = false; let isBig = false; let isFire = false; let isIce = false; let flyFrames = 0; let flyModeActivated = false; let metalModeActivated = false; let starModeActivated = false; let bigModeActivated = false; let fireModeActivated = false; let iceModeActivated = false; let lastFireTime = 0; let starHue = 0; // Keyboard State const keys = {}; // Audio Elements const flySound = new Audio(FLY_SOUND_URL); flySound.loop = true; const metalSound = new Audio(METAL_SOUND_URL); metalSound.loop = true; const starSound = new Audio(STAR_SOUND_URL); starSound.loop = true; const bigSound = new Audio(BIG_SOUND_URL); bigSound.loop = true; const fireSound = new Audio(FIRE_SOUND_URL); fireSound.loop = true; const iceSound = new Audio(ICE_SOUND_URL); iceSound.loop = true; // Wing Element const wingElement = document.createElement('img'); wingElement.src = WING_IMAGE_URL; wingElement.style.position = 'absolute'; wingElement.style.display = 'none'; wingElement.style.width = '100px'; // Increase the size of the wings wingElement.style.height = '100px'; wingElement.style.transform = 'translate(-50%, -50%)'; // Center the wings document.body.appendChild(wingElement); // Create Menu const menu = document.createElement('div'); menu.style.position = 'absolute'; menu.style.top = '50px'; menu.style.left = '50px'; menu.style.width = '300px'; menu.style.background = 'radial-gradient(circle, #fff, #ccc, #999)'; menu.style.borderRadius = '10px'; menu.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)'; menu.style.zIndex = 1000; menu.style.overflow = 'hidden'; document.body.appendChild(menu); // Menu Toggle Symbol const menuToggleSymbol = document.createElement('div'); menuToggleSymbol.style.textAlign = 'center'; menuToggleSymbol.style.cursor = 'pointer'; menuToggleSymbol.style.fontSize = '20px'; menuToggleSymbol.style.marginBottom = '10px'; menuToggleSymbol.textContent = '▼'; menu.appendChild(menuToggleSymbol); // Menu Header const menuHeader = document.createElement('div'); menuHeader.style.background = 'linear-gradient(to right, white, grey)'; menuHeader.style.padding = '10px'; menuHeader.style.textAlign = 'center'; menuHeader.style.cursor = 'move'; menuHeader.textContent = 'Drawaria Mario Mod'; menu.appendChild(menuHeader); // Menu Options Container const menuOptions = document.createElement('div'); menuOptions.style.display = 'none'; // Initially hidden menu.appendChild(menuOptions); // Fly Mode Button const flyButton = document.createElement('button'); flyButton.textContent = 'Activate Fly Mode'; flyButton.style.display = 'block'; flyButton.style.margin = '10px'; flyButton.style.padding = '10px'; flyButton.style.background = 'linear-gradient(to bottom, #4CAF50, white)'; flyButton.style.color = 'black'; flyButton.style.border = 'none'; flyButton.style.borderRadius = '5px'; flyButton.style.cursor = 'pointer'; flyButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; flyButton.style.transition = 'background 0.3s, transform 0.3s'; flyButton.style.fontFamily = 'Arial, sans-serif'; flyButton.style.fontSize = '16px'; flyButton.style.fontWeight = 'bold'; menuOptions.appendChild(flyButton); // Metal Mode Button const metalButton = document.createElement('button'); metalButton.textContent = 'Activate Metal Mode'; metalButton.style.display = 'block'; metalButton.style.margin = '10px'; metalButton.style.padding = '10px'; metalButton.style.background = 'linear-gradient(to bottom, #FF9800, white)'; metalButton.style.color = 'black'; metalButton.style.border = 'none'; metalButton.style.borderRadius = '5px'; metalButton.style.cursor = 'pointer'; metalButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; metalButton.style.transition = 'background 0.3s, transform 0.3s'; metalButton.style.fontFamily = 'Arial, sans-serif'; metalButton.style.fontSize = '16px'; metalButton.style.fontWeight = 'bold'; menuOptions.appendChild(metalButton); // Star Mode Button const starButton = document.createElement('button'); starButton.textContent = 'Activate Star Mode'; starButton.style.display = 'block'; starButton.style.margin = '10px'; starButton.style.padding = '10px'; starButton.style.background = 'linear-gradient(to bottom, #FFD700, white)'; starButton.style.color = 'black'; starButton.style.border = 'none'; starButton.style.borderRadius = '5px'; starButton.style.cursor = 'pointer'; starButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; starButton.style.transition = 'background 0.3s, transform 0.3s'; starButton.style.fontFamily = 'Arial, sans-serif'; starButton.style.fontSize = '16px'; starButton.style.fontWeight = 'bold'; menuOptions.appendChild(starButton); // Big Mode Button const bigButton = document.createElement('button'); bigButton.textContent = 'Activate Big Mode'; bigButton.style.display = 'block'; bigButton.style.margin = '10px'; bigButton.style.padding = '10px'; bigButton.style.background = 'linear-gradient(to bottom, #FF69B4, white)'; bigButton.style.color = 'black'; bigButton.style.border = 'none'; bigButton.style.borderRadius = '5px'; bigButton.style.cursor = 'pointer'; bigButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; bigButton.style.transition = 'background 0.3s, transform 0.3s'; bigButton.style.fontFamily = 'Arial, sans-serif'; bigButton.style.fontSize = '16px'; bigButton.style.fontWeight = 'bold'; menuOptions.appendChild(bigButton); // Fire Mode Button const fireButton = document.createElement('button'); fireButton.textContent = 'Activate Fire Mode'; fireButton.style.display = 'block'; fireButton.style.margin = '10px'; fireButton.style.padding = '10px'; fireButton.style.background = 'linear-gradient(to bottom, #FF4500, white)'; fireButton.style.color = 'black'; fireButton.style.border = 'none'; fireButton.style.borderRadius = '5px'; fireButton.style.cursor = 'pointer'; fireButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; fireButton.style.transition = 'background 0.3s, transform 0.3s'; fireButton.style.fontFamily = 'Arial, sans-serif'; fireButton.style.fontSize = '16px'; fireButton.style.fontWeight = 'bold'; menuOptions.appendChild(fireButton); // Ice Mode Button const iceButton = document.createElement('button'); iceButton.textContent = 'Activate Ice Mode'; iceButton.style.display = 'block'; iceButton.style.margin = '10px'; iceButton.style.padding = '10px'; iceButton.style.background = 'linear-gradient(to bottom, #ADD8E6, white)'; iceButton.style.color = 'black'; iceButton.style.border = 'none'; iceButton.style.borderRadius = '5px'; iceButton.style.cursor = 'pointer'; iceButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; iceButton.style.transition = 'background 0.3s, transform 0.3s'; iceButton.style.fontFamily = 'Arial, sans-serif'; iceButton.style.fontSize = '16px'; iceButton.style.fontWeight = 'bold'; menuOptions.appendChild(iceButton); // Stop Modes Button const stopModesButton = document.createElement('button'); stopModesButton.textContent = 'Stop Modes'; stopModesButton.style.display = 'block'; stopModesButton.style.margin = '10px'; stopModesButton.style.padding = '10px'; stopModesButton.style.background = 'linear-gradient(to bottom, #f44336, white)'; stopModesButton.style.color = 'black'; stopModesButton.style.border = 'none'; stopModesButton.style.borderRadius = '5px'; stopModesButton.style.cursor = 'pointer'; stopModesButton.style.boxShadow = '0 4px 6px rgba(0, 0, 0, 0.1)'; stopModesButton.style.transition = 'background 0.3s, transform 0.3s'; stopModesButton.style.fontFamily = 'Arial, sans-serif'; stopModesButton.style.fontSize = '16px'; stopModesButton.style.fontWeight = 'bold'; menuOptions.appendChild(stopModesButton); // Function to handle movement function updateAvatar() { // 1. Apply Gravity avatarVY += GRAVITY; // 2. Handle horizontal movement (keyboard input) if (keys['ArrowRight']) { avatarVX = Math.min(avatarVX + 0.5, isStar ? MAX_SPEED * 2 : isMetal ? MAX_SPEED * 1.5 : MAX_SPEED); } else if (keys['ArrowLeft']) { avatarVX = Math.max(avatarVX - 0.5, -(isStar ? MAX_SPEED * 2 : isMetal ? MAX_SPEED * 1.5 : MAX_SPEED)); } else { avatarVX *= 0.9; // Friction } // 3. Handle jumping if (keys['ArrowUp'] && !isJumping) { avatarVY = -(isMetal ? JUMP_HEIGHT * 0.7 : isBig ? JUMP_HEIGHT * 0.5 : JUMP_HEIGHT); isJumping = true; } // 4. Handle Flight if (isFlying) { if (flyFrames > 0) { flyFrames--; if (keys['ArrowUp']) { avatarVY = -JUMP_HEIGHT; // Hold jump in fly mode } } else { stopFlyMode(); } } // 5. Handle Fire and Ice Modes if (keys[' '] && (isFire || isIce)) { const currentTime = Date.now(); if (currentTime - lastFireTime >= 2000) { lastFireTime = currentTime; launchFireball(isIce); } } // 6. Update Avatar Position avatarX += avatarVX; avatarY += avatarVY; // 7. Collision Detection (simplified) if (avatarY > 768 - (isBig ? 100 : 50)) { // Assuming ground level is at 768 - 50 avatarY = 768 - (isBig ? 100 : 50); avatarVY = 0; isJumping = false; } // 8. Boundary Check avatarX = Math.max(-900, Math.min(avatarX, 1024 + 100)); // Keep within bounds avatarY = Math.max(-350, Math.min(avatarY, 768 + 50)); // 9. Update visual representation (Draw the avatar) drawAvatar(avatarX, avatarY); // Request next frame requestAnimationFrame(updateAvatar); } // Function to handle keyboard input function handleKeyDown(event) { keys[event.key] = true; } function handleKeyUp(event) { keys[event.key] = false; } // Function to draw the avatar function drawAvatar(x, y) { const avatar = document.querySelector('#selfavatarimage'); if (avatar) { avatar.style.transform = `translate(${x}px, ${y}px)`; avatar.style.border = 'none'; // Make border transparent avatar.style.boxShadow = 'none'; // Make box-shadow transparent if (isFlying) { wingElement.style.display = 'block'; // Position wings behind the avatar const avatarRect = avatar.getBoundingClientRect(); wingElement.style.left = `${avatarRect.left + window.scrollX + (avatarRect.width - wingElement.offsetWidth) / 2}px`; wingElement.style.top = `${avatarRect.top + window.scrollY + (avatarRect.height - wingElement.offsetHeight) / 2}px`; } else { wingElement.style.display = 'none'; } if (isMetal) { avatar.style.filter = 'grayscale(100%) brightness(150%)'; } else if (isStar) { starHue = (starHue + 1) % 360; avatar.style.filter = `hue-rotate(${starHue}deg) brightness(150%)`; } else if (isBig) { avatar.style.transform = `translate(${x}px, ${y}px) scale(2)`; } else if (isFire) { avatar.style.filter = 'brightness(150%) sepia(100%) saturate(500%) hue-rotate(-10deg)'; } else if (isIce) { avatar.style.filter = 'brightness(150%) sepia(100%) saturate(500%) hue-rotate(180deg)'; } else { avatar.style.filter = 'none'; avatar.style.transform = `translate(${x}px, ${y}px)`; } } } // Function to launch a fireball function launchFireball(isIce) { const avatar = document.querySelector('#selfavatarimage'); if (avatar) { const fireball = document.createElement('img'); fireball.src = isIce ? 'https://i.gifer.com/origin/d6/d6abed6047c79b8073fda9af7ba85358_w200.gif' : 'https://media.tenor.com/_dUxi3qy-KIAAAAj/fire-fireball.gif'; fireball.style.position = 'absolute'; fireball.style.width = '50px'; fireball.style.height = '50px'; fireball.style.left = `${avatar.offsetLeft + avatar.offsetWidth / 2}px`; fireball.style.top = `${avatar.offsetTop + avatar.offsetHeight / 2}px`; document.body.appendChild(fireball); let fireballX = avatar.offsetLeft + avatar.offsetWidth / 2; let fireballY = avatar.offsetTop + avatar.offsetHeight / 2; let fireballVX = 5; // Fireball speed to the right let fireballVY = 0; const gravity = 0.5; function moveFireball() { fireballX += fireballVX; fireballY += fireballVY; fireballVY += gravity; // Bounce off the ground if (fireballY > 768 - 25) { fireballY = 768 - 25; fireballVY = -fireballVY * 0.8; // Reduce velocity on bounce } // Remove fireball if it goes off screen if (fireballX < -50 || fireballX > 1024 + 50 || fireballY > 768 + 50) { document.body.removeChild(fireball); } else { fireball.style.left = `${fireballX}px`; fireball.style.top = `${fireballY}px`; requestAnimationFrame(moveFireball); } } moveFireball(); } } // Function to activate fly mode function activateFlyMode() { stopOtherModes(); isFlying = true; flyFrames = FLY_DURATION; flyModeActivated = true; flySound.play(); } // Function to stop fly mode function stopFlyMode() { isFlying = false; wingElement.style.display = 'none'; flySound.pause(); flySound.currentTime = 0; flyModeActivated = false; } // Function to activate metal mode function activateMetalMode() { stopOtherModes(); isMetal = true; metalModeActivated = true; metalSound.play(); } // Function to stop metal mode function stopMetalMode() { isMetal = false; metalSound.pause(); metalSound.currentTime = 0; metalModeActivated = false; } // Function to activate star mode function activateStarMode() { stopOtherModes(); isStar = true; starModeActivated = true; starSound.play(); } // Function to stop star mode function stopStarMode() { isStar = false; starSound.pause(); starSound.currentTime = 0; starModeActivated = false; } // Function to activate big mode function activateBigMode() { stopOtherModes(); isBig = true; bigModeActivated = true; bigSound.play(); } // Function to stop big mode function stopBigMode() { isBig = false; bigSound.pause(); bigSound.currentTime = 0; bigModeActivated = false; } // Function to activate fire mode function activateFireMode() { stopOtherModes(); isFire = true; fireModeActivated = true; fireSound.play(); } // Function to stop fire mode function stopFireMode() { isFire = false; fireSound.pause(); fireSound.currentTime = 0; fireModeActivated = false; } // Function to activate ice mode function activateIceMode() { stopOtherModes(); isIce = true; iceModeActivated = true; iceSound.play(); } // Function to stop ice mode function stopIceMode() { isIce = false; iceSound.pause(); iceSound.currentTime = 0; iceModeActivated = false; } // Function to stop all modes function stopAllModes() { stopFlyMode(); stopMetalMode(); stopStarMode(); stopBigMode(); stopFireMode(); stopIceMode(); } // Function to stop other modes function stopOtherModes() { stopFlyMode(); stopMetalMode(); stopStarMode(); stopBigMode(); stopFireMode(); stopIceMode(); } // Function to toggle menu options visibility function toggleMenuOptions() { if (menuOptions.style.display === 'none') { menuOptions.style.display = 'block'; menuToggleSymbol.textContent = '▲'; menu.style.height = '500px'; // Expand menu height } else { menuOptions.style.display = 'none'; menuToggleSymbol.textContent = '▼'; menu.style.height = 'auto'; // Collapse menu height } } // Make the menu draggable let isDragging = false; let offsetX, offsetY; menuHeader.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; }); // Event listeners for keyboard input document.addEventListener('keydown', handleKeyDown); document.addEventListener('keyup', handleKeyUp); // Event listener for fly mode button flyButton.addEventListener('click', activateFlyMode); // Event listener for metal mode button metalButton.addEventListener('click', activateMetalMode); // Event listener for star mode button starButton.addEventListener('click', activateStarMode); // Event listener for big mode button bigButton.addEventListener('click', activateBigMode); // Event listener for fire mode button fireButton.addEventListener('click', activateFireMode); // Event listener for ice mode button iceButton.addEventListener('click', activateIceMode); // Event listener for stop modes button stopModesButton.addEventListener('click', stopAllModes); // Event listener for menu toggle symbol menuToggleSymbol.addEventListener('click', toggleMenuOptions); // Start the game loop updateAvatar(); })();