Skip to content

Instantly share code, notes, and snippets.

@nabbynz
Last active November 2, 2017 20:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nabbynz/fcc6c8b663d46b800ec4216c6065c2e5 to your computer and use it in GitHub Desktop.
Save nabbynz/fcc6c8b663d46b800ec4216c6065c2e5 to your computer and use it in GitHub Desktop.
Fireworks FTW
// ==UserScript==
// @name Fireworks FTW
// @description Shows some fireworks when you win a normal pub game (and/or the raptors)
// @version 0.0.5
// @include http://tagpro-*.koalabeast.com:*
// @include http://*.newcompte.fr:*
// @updateURL https://gist.github.com/nabbynz/fcc6c8b663d46b800ec4216c6065c2e5/raw/Fireworks_FTW.user.js
// @downloadURL https://gist.github.com/nabbynz/fcc6c8b663d46b800ec4216c6065c2e5/raw/Fireworks_FTW.user.js
// @grant none
// @author nabby
// ==/UserScript==
console.log('START: ' + GM_info.script.name + ' (v' + GM_info.script.version + ' by ' + GM_info.script.author + ')');
if ($('script[src]').toArray().some(e => e.src.endsWith('easter-2017.js'))) return; //don't run if eggball (snaps)
// Options...
var showFireworks = true;
var showGordons = true;
var fireworksCount = 5; //the total number of fireworks to show (Default: 5)
var fireworksNumber = 100; //the number of particles per firework (Default: 100)
var fireworksTime = 1; //the max number of seconds that the fireworks are on screen for at the end of the game (Default: 1)
var fireworksType = 'rainbow'; //can be either: 'rainbow' (multi-colors) or 'team' (winning red/blue team color) or 'color' (uses fireworksColor below)
var fireworksColor = '#00ff00'; //only used if fireworksType is 'color' (Default: '#00ff00' - green).
tagpro.ready(function() {
if (showGordons) {
var images = [];
images.push("https://i.imgur.com/ID2lhJS.png");
images.push("https://i.imgur.com/FzoxvLn.png");
images.push("https://i.imgur.com/Ktg8C2D.png");
images.push("https://i.imgur.com/FgWDO4X.png");
images.push("https://i.imgur.com/7ukfF4H.png");
images.push("https://i.imgur.com/FG1pxpS.png");
const raptorSprites = images.map(function(v, i) {
var raptorSprite = new PIXI.Sprite.fromImage(v);
raptorSprite.visible = false;
tagpro.renderer.layers.ui.addChild(raptorSprite);
return raptorSprite;
});
var initRaptor = function(id, speed=5) {
var raptorSprite = raptorSprites[id];
if (raptorSprite.visible) {
return;
}
tagpro.renderer.layers.ui.removeChild(raptorSprite);
tagpro.renderer.layers.ui.addChild(raptorSprite);
raptorSprite.x = tagpro.renderer.renderer.width;
raptorSprite.y = tagpro.renderer.renderer.height - raptorSprite.height;
raptorSprite.visible = true;
var moveRaptor = function(speed) {
raptorSprite.x -= speed;
if (raptorSprite.x < -raptorSprite.width) {
raptorSprite.visible = false;
return;
}
setTimeout(function() {
moveRaptor(speed);
}, 1000 / 60);
};
moveRaptor(speed);
};
}
if (showFireworks) {
var tr = tagpro.renderer;
tagpro.particleDefinitions.firework = {
"alpha": {
"start": 0.28,
"end": 0.74
},
"scale": {
"start": 0.01,
"end": 0.33,
"minimumScaleMultiplier": 0.75
},
"color": {
"start": "#2b0aff",
"end": "#f78d2a"
},
"speed": {
"start": 100,
"end": 750,
"minimumSpeedMultiplier": 1
},
"acceleration": {
"x": 0,
"y": 0
},
"maxSpeed": 0,
"startRotation": {
"min": 180,
"max": 360
},
"noRotation": false,
"rotationSpeed": {
"min": 0,
"max": 200
},
"lifetime": {
"min": 0.5,
"max": 1
},
"blendMode": "normal",
"ease": [
{
"s": 0,
"cp": 0.329,
"e": 0.548
},
{
"s": 0.548,
"cp": 0.767,
"e": 0.876
},
{
"s": 0.876,
"cp": 0.985,
"e": 1
}
],
"frequency": 0.005,
"emitterLifetime": 1,
"maxParticles": fireworksNumber,
"pos": {
"x": 0,
"y": 0
},
"addAtBack": true,
"spawnType": "point"
};
tr.createFireworks = function (x, y) {
if (!tr.options.disableParticles) {
var emitter = new PIXI.particles.Emitter(
tr.layers.foreground,
[tr.particleTexture, tr.particleFireTexture],
tagpro.particleDefinitions.firework
);
emitter.updateSpawnPos(x, y);
tr.emitters.push(emitter);
}
};
var rainbow = function(numOfSteps, step) {
//From: https://stackoverflow.com/questions/1484506/random-color-generator-in-javascript
var r, g, b;
var h = step / numOfSteps;
var i = ~~(h * 6);
var f = h * 6 - i;
var q = 1 - f;
switch(i % 6){
case 0: r = 1; g = f; b = 0; break;
case 1: r = q; g = 1; b = 0; break;
case 2: r = 0; g = 1; b = f; break;
case 3: r = 0; g = q; b = 1; break;
case 4: r = f; g = 0; b = 1; break;
case 5: r = 1; g = 0; b = q; break;
}
var c = "#" + ("00" + (~ ~(r * 255)).toString(16)).slice(-2) + ("00" + (~ ~(g * 255)).toString(16)).slice(-2) + ("00" + (~ ~(b * 255)).toString(16)).slice(-2);
return (c);
};
var initFireworks = function() {
let vpWidth = $('#viewport').width();
let vpHeight = $('#viewport').height();
let startX = tagpro.players[tagpro.playerId].x - vpWidth / 2;
let startY = tagpro.players[tagpro.playerId].y + vpHeight / 2;
let fwPos = vpWidth / (fireworksCount+1);
for (var i=1; i<=fireworksCount; i++) {
let x = startX + fwPos * i;
let y = startY;
let c1, c2;
if (fireworksType === 'team') {
c1 = tagpro.players[tagpro.playerId].team === 1 ? '#ffffff' : '#ffffff';
c2 = tagpro.players[tagpro.playerId].team === 1 ? '#ff0000' : '#0000ff';
} else if (fireworksType === 'color') {
c1 = '#ffffff';
c2 = fireworksColor;
} else {
c1 = rainbow(fireworksCount, i);
c2 = rainbow(fireworksCount, i+1);
}
tagpro.particleDefinitions.firework.color.start = c1;
tagpro.particleDefinitions.firework.color.end = c2;
tagpro.particleDefinitions.firework.emitterLifetime = fireworksTime;
tr.createFireworks(x, y);
}
};
}
tagpro.socket.on("end", function(data) {
if ( (data.winner === 'red' && tagpro.players[tagpro.playerId].team === 1) || (data.winner === 'blue' && tagpro.players[tagpro.playerId].team === 2) ) {
if (showFireworks) {
initFireworks();
}
if (showGordons) {
if (Math.abs(tagpro.score.r - tagpro.score.b) === 3) { //parade if we win 3:0
var interval = 100;
for (var id=0; id<images.length; id++) {
setTimeout(function(id) {
initRaptor(id, 10);
}, interval, id);
interval += 500;
}
} else {
initRaptor(Math.floor(Math.random()*images.length-1)+1);
}
}
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment