// ==UserScript==
// @name Browser Ponies
// @namespace http://scratch.mit.edu
// @version 1.0
// @description Ponify Scratch!
// @match *://scratch.mit.edu/projects/*
// @author Katherine C.
// ==/UserScript==
//Install base scripts
var basecfg_script = document.createElement('script');
basecfg_script.setAttribute('type', 'text/javascript');
basecfg_script.setAttribute('src', 'https://panzi.github.io/Browser-Ponies/basecfg.js');
basecfg_script.setAttribute('id', 'browser-ponies-config');
document.head.appendChild(basecfg_script);
var browserponies_script = document.createElement('script');
browserponies_script.setAttribute('type', 'text/javascript');
browserponies_script.setAttribute('src', 'https://panzi.github.io/Browser-Ponies/browserponies.js');
browserponies_script.setAttribute('id', 'browser-ponies-script');
document.head.appendChild(browserponies_script);
function installExtensionBrowserPonies() {
var cfg = {
"fadeDuration": 500,
"volume": 1,
"fps": 25,
"speed": 3,
"audioEnabled": false,
"showFps": false,
"showLoadProgress": true,
"speakProbability": 0.1,
"baseurl": "https://panzi.github.io/Browser-Ponies/",
"spawn": {}
};
(function(ext) {
// Cleanup function when the extension is unloaded
ext._shutdown = function() {};
// Status reporting code
// Use this to report missing hardware, plugin or unsupported browser
ext._getStatus = function() {
if(BrowserPoniesBaseConfig.loaded){
return {status: 2, msg: 'Ready'};
}
else if(BrowserPonies != undefined && BrowserPoniesBaseConfig != undefined){
BrowserPonies.setBaseUrl(cfg.baseurl);
BrowserPonies.loadConfig(BrowserPoniesBaseConfig);
BrowserPonies.start();
BrowserPoniesBaseConfig.loaded = true;
return {status: 1, msg: 'Not Ready'};
}
return {status: 0, msg: 'Not Ready'};
};
// Block and block menu descriptions
var descriptor = {
blocks: [
[' ', 'start', 'startPonies'],
[' ', 'stop', 'stopPonies'],
[' ', 'pause', 'pausePonies'],
[' ', 'resume', 'resumePonies'],
[' ', 'toggle ponies in background', 'toggleInBackground'],
[' ', 'remove all ponies', 'removePonies'],
['-'],
[' ', 'add pony %s', 'addPony', 'derpy hooves'],
[' ', 'add random pony', 'addRandomPony']
],
menus: {
ponies: ['derpy hooves', 'applejack','fluttershy','pinkie pie','rainbow dash','rarity','twilight sparkle']
}
};
var ponyNames = [];
//Commands
ext.startPonies = function(){BrowserPonies.start();};
ext.stopPonies = function(){BrowserPonies.stop();};
ext.pausePonies = function(){BrowserPonies.pause();};
ext.resumePonies = function(){BrowserPonies.resume();};
ext.toggleInBackground = function(){BrowserPonies.togglePoniesToBackground()};
ext.removePonies = function(){BrowserPonies.unspawnAll();};
//Adding ponies
ext.addPony = function(name){
addPonyByName(name);
}
ext.addRandomPony = function(){
checkLoaded();
BrowserPonies.spawnRandom()
}
function addPonyByName (name){
checkLoaded();
if(BrowserPonies.ponies()[name] != undefined){
//Check if the pony exists
if(name == 'vinyl scratch'){
//Seizure warning
if(confirm('WARNING:\nContains flashing lights/patterns that may not be suitable for people with photosensitive epilepsy.')){
if(BrowserPonies.ponies()[name] != undefined){
console.log(cfg)
cfg['spawn'] = {};
cfg['spawn'][name] = 1;
BrowserPonies.loadConfig(cfg);
}
}
}
else{
console.log(cfg)
cfg['spawn'] = {};
cfg['spawn'][name] = 1;
BrowserPonies.loadConfig(cfg);
}
}
}
function checkLoaded (){
//Load BrowserPonies if it is not already loaded
if(!BrowserPoniesBaseConfig.loaded){
BrowserPonies.setBaseUrl(cfg.baseurl);
BrowserPonies.loadConfig(BrowserPoniesBaseConfig);
BrowserPonies.start();
BrowserPoniesBaseConfig.loaded = true;
ponyNames = keys(BrowserPonies.ponies());
}
}
// Register the extension
ScratchExtensions.register('Browser Ponies', descriptor, ext);
})({});
}
installExtensionBrowserPonies();