// ==UserScript==
// @name Bloble.io NoobScript V3 GameUtils Fragment
// @namespace http://tampermonkey.net/
// @version 1.1
// @description A fragment of code from NoobScript V3 - The FPS and resolution setter.
// @author NoobishHacker
// @match http://bloble.io/*
// @grant none
// ==/UserScript==
window.UIList = window.UIList || [];
window.initFuncs = window.initFuncs || [];
window.statusItems = window.statusItems || [];
// Resolution and FPS chooser.
var resolution = 1;
var rate = 0;
window.removeEventListener("mousemove", gameInput);
window.gameInput = function (a) {
a.preventDefault();
a.stopPropagation();
mouseX = a.clientX * resolution;
mouseY = a.clientY * resolution;
}
window.addEventListener("mousemove", gameInput, false);
window.removeEventListener("resize", resize);
window.resize = function (n) {
screenWidth = window.innerWidth * resolution;
screenHeight = window.innerHeight * resolution;
scaleFillNative = MathMAX(screenWidth / maxScreenWidth, screenHeight / maxScreenHeight);
if (n !== true) {
mainCanvas.width = screenWidth;
mainCanvas.height = screenHeight;
mainCanvas.style.width = (screenWidth / resolution) + "px";
mainCanvas.style.height = (screenHeight / resolution) + "px";
}
mainContext.setTransform(scaleFillNative, 0, 0, scaleFillNative, Math.floor((screenWidth - maxScreenWidth * scaleFillNative) / 2), Math.floor((screenHeight - maxScreenHeight * scaleFillNative) / 2));
player || renderBackground()
}
window.addEventListener("resize", resize);
window.statusItems.push({
order: 3,
value: function () {
return document.getElementById('fps').textContent;
}
}, {
order: 4,
name: 'Resolution',
value: function () {
return document.getElementById('res').textContent;
}
});
window.UIList.push({
level: 3,
x: 4,
html: '<div id="res" onclick=setRes()>Normal Res</div>'
}, {
level: 3,
x: 5,
html: '<div id="fps" onclick=setFPS()>Unlim FPS</div>'
}, {
level: 3,
x: 1,
html: '<div id="afk" onclick=afk()>AFK off</div>'
});
var afkinterval = false;
window.afk = function () {
var element = document.getElementById('afk');
if (afkinterval) {
clearInterval(afkinterval)
afkinterval = false;
element.textContent = 'AFK off';
} else {
afkinterval = setInterval(function () {
socket.emit("2", Math.round(camX), Math.round(camY));
}, 1000)
element.textContent = 'AFK on';
}
}
window.setRes = function () {
var el = document.getElementById('res');
if (resolution === 2) {
resolution = .5;
el.textContent = 'Low Res';
} else if (resolution === .5) {
resolution = .8;
el.textContent = 'Med Res';
} else if (resolution === .8) {
resolution = 1;
el.textContent = 'Normal Res';
} else if (resolution === 1) {
resolution = 1.5;
el.textContent = 'High Res';
} else {
resolution = 2;
el.textContent = 'Retina Res';
}
unitSprites = {};
resize();
window.statusBar();
}
window.setFPS = function () {
var el = document.getElementById('fps');
if (rate === 0) {
el.textContent = '45 FPS'
rate = 22;
} else if (rate === 22) {
el.textContent = '40 FPS'
rate = 25;
} else if (rate === 25) {
el.textContent = '35 FPS'
rate = 28;
} else if (rate === 28) {
el.textContent = '30 FPS';
rate = 33;
} else if (rate === 33) {
el.textContent = '25 FPS';
rate = 40;
} else if (rate === 40) {
el.textContent = '20 FPS';
rate = 50;
} else {
el.textContent = 'Unlim FPS';
rate = 0;
}
window.statusBar();
}
window.callUpdate = function () {
requestAnimFrame(callUpdate);
currentTime = window.performance.now();
var a = currentTime - then;
if (a >= rate) {
then = currentTime;
updateGameLoop(a);
}
updateMenuLoop(a)
}
window.makeUI = function () {
if (window.hasMadeUI) return;
window.hasMadeUI = true;
window.statusItems.sort(function (a, b) {
return a.order - b.order;
})
var levels = [];
window.UIList.forEach((item) => {
if (!levels[item.level]) levels[item.level] = [];
levels[item.level].push(item)
})
levels = levels.filter((a) => {
if (a) {
a.sort(function (a, b) {
return a.x - b.x;
})
return true;
} else {
return false;
}
})
var headAppend = document.getElementsByTagName("head")[0],
style = document.createElement("div");
var toast = document.createElement('div');
toast.id = "snackbar";
var css = document.createElement('div');
css.innerHTML = '<style>\n\
#snackbar {\n\
visibility: hidden;\n\
min-width: 250px;\n\
margin-left: -125px;\n\
background-color: rgba(40, 40, 40, 0.5);\n\
color: #fff;\n\
text-align: center;\n\
border-radius: 4px;\n\
padding: 10px;\n\
font-family: "regularF";\n\
font-size: 20px;\n\
position: fixed;\n\
z-index: 100;\n\
left: 50%;\n\
top: 30px;\n\
}\n\
#snackbar.show {\n\
visibility: visible;\n\
-webkit-animation: fadein 0.5s;\n\
animation: fadein 0.5s;\n\
}\n\
#snackbar.hide {\n\
visibility: visible;\n\
-webkit-animation: fadeout 0.5s;\n\
animation: fadeout 0.5s;\n\
}\n\
@-webkit-keyframes fadein {\n\
from {top: 0; opacity: 0;}\n\
to {top: 30px; opacity: 1;}\n\
}\n\
@keyframes fadein {\n\
from {top: 0; opacity: 0;}\n\
to {top: 30px; opacity: 1;}\n\
}\n\
@-webkit-keyframes fadeout {\n\
from {top: 30px; opacity: 1;}\n\
to {top: 0; opacity: 0;}\n\
}\n\
@keyframes fadeout {\n\
from {top: 30px; opacity: 1;}\n\
to {top: 0; opacity: 0;}\n\
}\n\
</style>'
var height = levels.length * (14 + 19) + (levels.length - 1) * 7 + 15;
style.innerHTML = "<style>\n\
#noobscriptUI, #noobscriptUI > div > div {\n\
background-color:rgba(40,40,40,.5);\n\
margin-left: 3px;\n\
border-radius:4px;\n\
pointer-events:all\n\
}\n\
#noobscriptUI {\n\
top: -" + (height + 12) + "px;\n\
transition: 1s;\n\
margin-left:10px;\n\
position:absolute;\n\
padding-left:24px;\n\
margin-top:9px;\n\
padding-top:15px;\n\
width:580px;\n\
height: " + height + "px;\n\
font-family:arial;\n\
left:25%\n\
}\n\
#noobscriptUI:hover{\n\
top:0px\n\
}\n\
#noobscriptUI > div > div {\n\
color:#fff;\n\
padding:7px;\n\
height:19px;\n\
display:inline-block;\n\
cursor:pointer;\n\
font-size:15px\n\
}\n\
</style>"
headAppend.appendChild(style);
headAppend.appendChild(css);
var contAppend = document.getElementById("gameUiContainer"),
menuA = document.createElement("div");
var code = ['<div id="noobscriptUI">\n'];
levels.forEach((items, i) => {
code.push(i === 0 ? ' <div>\n' : ' <div style="margin-top:7px;">\n');
items.forEach((el) => {
code.push(' ' + el.html + '\n');
})
code.push(' </div>\n');
})
code.push(' <div id="confinfo" style="margin-top:4px; color: white; text-align: center; font-size: 10px; white-space:pre"></div>')
code.push('</div>');
menuA.innerHTML = code.join("");
contAppend.insertBefore(menuA, contAppend.firstChild)
contAppend.appendChild(toast)
var toastTimeout = false;
window.showToast = function (msg) {
toast.textContent = msg;
if (toastTimeout) clearTimeout(toastTimeout);
else toast.className = "show";
toastTimeout = setTimeout(function () {
toast.className = 'hide'
setTimeout(function () {
toast.className = '';
}, 400);
toastTimeout = false;
}, 3000);
}
window.statusBar = function () {
var el = document.getElementById('confinfo');
var text = [];
window.statusItems.forEach((item, i) => {
if (i !== 0) text.push(' ');
if (item.name) text.push(item.name + ': ');
text.push(item.value());
})
el.textContent = text.join('');
}
window.statusBar();
window.initFuncs.forEach((func) => {
func();
})
}
setTimeout(() => {
window.makeUI();
}, 1000)