// ==UserScript==
// @name Scratch Ultra Modifier Pro Plus
// @namespace http://tampermonkey.net/
// @version 5.0
// @description The ultimate modification script for Scratch with advanced block colors, Turbo, Speed of Light modes, AI-powered tutorials, and a super complex, draggable, and modern GUI with working API integration.
// @author YourName
// @match https://scratch.mit.edu/projects/*
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @connect api.example.com // Replace with the actual API domain
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js
// ==/UserScript==
(function() {
'use strict';
let isGuiOpen = false;
let isTurboEnabled = false;
let isSpeedOfLightEnabled = false;
let tutorialsLoaded = false;
let currentTutorialPage = 0;
const tutorialPages = [];
// Function to change block colors
function changeBlockColors() {
const blockOuterColor = '#1E90FF';
const blockInnerColor = '#FFD700';
const blockBorderColor = '#8B0000';
$('svg.blocklySvg g.blocklyDraggable .blocklyPath').each(function() {
$(this).css({
'fill': blockOuterColor,
'stroke': blockBorderColor,
'stroke-width': '3px'
});
});
$('svg.blocklySvg g.blocklyDraggable .blocklyPathLight').each(function() {
$(this).css('fill', blockInnerColor);
});
$('svg.blocklySvg g.blocklyDraggable .blocklyPath').each(function() {
const gradientId = `gradient-${Math.random().toString(36).substr(2, 9)}`;
$(this).css('fill', `url(#${gradientId})`);
$('svg defs').append(`
<linearGradient id="${gradientId}" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:${blockOuterColor};stop-opacity:1" />
<stop offset="100%" style="stop-color:${blockInnerColor};stop-opacity:1" />
</linearGradient>
`);
});
console.log('Block colors changed successfully.');
}
// Function to enable Turbo Mode
function enableTurboMode() {
if (Scratch.vm) {
Scratch.vm.setTurboMode(true);
isTurboEnabled = true;
alert("Turbo Mode Enabled! Your project is now running at maximum speed.");
} else {
alert("Failed to enable Turbo Mode. Please try again.");
}
}
// Function to enable Speed of Light Mode
function enableSpeedOfLightMode() {
if (Scratch.vm) {
Scratch.vm.runtime._stepTime = 0.1;
isSpeedOfLightEnabled = true;
alert("Speed of Light Mode Enabled! Hold on, your FPS is going through the roof!");
} else {
alert("Failed to enable Speed of Light Mode. Please try again.");
}
}
// Function to fetch tutorials from an API
function fetchTutorials() {
if (tutorialsLoaded) return;
GM_xmlhttpRequest({
method: 'GET',
url: 'https://api.example.com/tutorials', // Replace with your actual API endpoint
onload: function(response) {
if (response.status === 200) {
const data = JSON.parse(response.responseText);
tutorialPages.push(...data.tutorials);
tutorialsLoaded = true;
displayTutorialPage(0);
} else {
alert('Failed to load tutorials. Please try again later.');
}
},
onerror: function() {
alert('Failed to load tutorials. Network error.');
}
});
}
// Function to display a tutorial page
function displayTutorialPage(index) {
if (index < 0 || index >= tutorialPages.length) return;
currentTutorialPage = index;
$('#tutorialContent').html(tutorialPages[index]);
$('#tutorialContent').show();
}
// Function to create and display popups
function displayPopup(message) {
const popup = $('<div>', {
text: message,
css: {
'background-color': '#333',
'color': '#FFF',
'padding': '15px',
'border-radius': '10px',
'position': 'fixed',
'top': '20px',
'right': '20px',
'z-index': 10000,
'box-shadow': '0 0 15px rgba(0, 0, 0, 0.5)',
'font-family': 'Comic Sans MS, sans-serif'
}
}).appendTo('body');
gsap.to(popup, {
duration: 3,
opacity: 0,
onComplete: () => popup.remove()
});
}
// Function to create and display GUI
function createGUI() {
// Main container for GUI
const guiContainer = $('<div>', { id: 'customGuiContainer' }).appendTo('body');
// Title and close button
const titleBar = $('<div>', {
css: {
'display': 'flex',
'justify-content': 'space-between',
'align-items': 'center',
'padding': '10px',
'background-color': '#FFD700',
'border-radius': '10px 10px 0 0',
'cursor': 'move'
}
}).appendTo(guiContainer);
$('<h1>', {
text: 'Scratch Ultra Modifier Pro Plus',
css: {
'font-family': 'Comic Sans MS, sans-serif',
'color': '#1E90FF',
'margin': 0
}
}).appendTo(titleBar);
const closeButton = $('<button>', {
text: 'X',
click: () => guiContainer.hide(),
css: createButtonStyle('#FF4500', '#FFF')
}).appendTo(titleBar);
// Buttons for GUI functionality
const changeColorButton = createGuiButton('Change Block Colors', changeBlockColors);
guiContainer.append(changeColorButton);
const turboButton = createGuiButton('Enable Turbo Mode', enableTurboMode);
guiContainer.append(turboButton);
const speedButton = createGuiButton('Enable Speed of Light Mode', enableSpeedOfLightMode);
guiContainer.append(speedButton);
const tutorialsButton = createGuiButton('Show Tutorials', fetchTutorials);
guiContainer.append(tutorialsButton);
// Tutorial content area
const tutorialContent = $('<div>', {
id: 'tutorialContent',
css: {
'background-color': '#FFF7E6',
'border': '2px solid #FF5733',
'border-radius': '10px',
'padding': '15px',
'margin-top': '20px',
'font-family': 'Comic Sans MS, sans-serif',
'max-height': '300px',
'overflow-y': 'auto'
}
}).appendTo(guiContainer);
const tutorialCloseButton = $('<button>', {
text: 'X',
click: () => tutorialContent.hide(),
css: createButtonStyle('#FF4500', '#FFF', '5px')
}).appendTo(tutorialContent);
// Navigation buttons for tutorials
const navContainer = $('<div>', { id: 'navContainer' }).appendTo(guiContainer);
const prevButton = $('<button>', {
text: 'Previous',
click: () => displayTutorialPage(currentTutorialPage - 1),
css: createButtonStyle('#333', '#FFF', '5px')
}).appendTo(navContainer);
const nextButton = $('<button>', {
text: 'Next',
click: () => displayTutorialPage(currentTutorialPage + 1),
css: createButtonStyle('#333', '#FFF', '5px')
}).appendTo(navContainer);
// Drag functionality
let isDragging = false;
let offset = { x: 0, y: 0 };
titleBar.on('mousedown', (e) => {
isDragging = true;
offset.x = e.pageX - guiContainer.offset().left;
offset.y = e.pageY - guiContainer.offset().top;
});
$(document).on('mousemove', (e) => {
if (isDragging) {
guiContainer.css({
top: e.pageY - offset.y + 'px',
left: e.pageX - offset.x + 'px'
});
}
}).on('mouseup', () => {
isDragging = false;
});
// Open/Close GUI button
const openGuiButton = $('<button>', {
id: 'openGuiButton',
text: 'Open GUI',
click: () => {
if (isGuiOpen) {
guiContainer.hide();
openGuiButton.text('Open GUI');
} else {
guiContainer.show();
openGuiButton.text('Close GUI');
}
isGuiOpen = !isGuiOpen;
},
css: createButtonStyle('#32CD32', '#FFF')
}).appendTo('body');
guiContainer.hide(); // Start with the GUI hidden
// Additional styling for draggable functionality
GM_addStyle(`
#customGuiContainer {
width: 300px;
height: auto;
background-color: #FFF;
border: 2px solid #1E90FF;
border-radius: 10px;
position: fixed;
top: 50px;
right: 50px;
z-index: 9999;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
}
#tutorialContent {
display: none;
}
#navContainer button {
margin: 5px;
}
`);
}
// Function to create a styled button
function createGuiButton(text, onClick) {
return $('<button>', {
text: text,
click: onClick,
css: createButtonStyle('#4682B4', '#FFF')
});
}
// Function to create dynamic button styles
function createButtonStyle(bgColor, textColor, margin = '10px') {
return {
'background-color': bgColor,
'color': textColor,
'border': 'none',
'padding': '10px 20px',
'margin': margin,
'border-radius': '5px',
'cursor': 'pointer',
'font-family': 'Comic Sans MS, sans-serif',
'font-size': '16px',
'transition': 'background-color 0.3s ease',
'outline': 'none'
};
}
// Initialize the script by creating the GUI
createGUI();
})();