Skip to content

Instantly share code, notes, and snippets.

@PeachFuzzTP
Last active December 16, 2018 22:48
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 PeachFuzzTP/097697b5efed3a76b757c58110c44220 to your computer and use it in GitHub Desktop.
Save PeachFuzzTP/097697b5efed3a76b757c58110c44220 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name TagPro: Peach's Particles
// @version 0.1
// @description Improves in-game particles; adjusts degree, name, and flair; alters scoreboard team colors (borrowed from Browncoat's)
// @include http://*.koalabeast.com:*
// @include http://*.jukejuice.com:*
// @include http://*.newcompte.fr:*
// @match *://*.koalabeast.com/game
// @updateURL https://gist.githubusercontent.com/PeachFuzzTP/097697b5efed3a76b757c58110c44220/raw/peachparticles.js
// @downloadURL https://gist.githubusercontent.com/PeachFuzzTP/097697b5efed3a76b757c58110c44220/raw/peachparticles.js
// @supportURL https://www.reddit.com/message/compose/?to=--spinner--&subject=[Peach%20Particles]
// @author Peach Fuzz (also uses code from browncoat & ballparts)
// ==/UserScript==
if (tagpro) {
var me_id = tagpro.playerId
tagpro.ready(function () {
// OPTIONS
// Team Colors (only affects score text)
var redTeamColor = "BA1A35";
var blueTeamColor = "0E32E2";
var redTeamName = "Red";
var blueTeamName = "Blue";
// END OPTIONS
var tr = tagpro.renderer;
var redColorHex = "#" + redTeamColor;
var blueColorHex = "#" + blueTeamColor;
// Particle Definitions (redPlayerEmitter, bluePlayerEmitter, death, TagPro, Rolling Bomb)
// Use the following link to test particle definitions: https://https://pixijs.io/pixi-particles-editor/
// Red Player Spark Emissions - particle definitions
var redPlayerEmitter = {
"alpha": {
"start": .6,
"end": 0.1
},
"scale": {
"start": .1,
"end": .001,
"minimumScaleMultiplier": 1
},
"color": {
"start": "#BA1A35",
"end": "#ffff00"
},
"speed": {
"start": .5,
"end": 0
},
"acceleration": {
"x": 0,
"y": 0
},
"startRotation": {
"min": 0,
"max": 0
},
"rotationSpeed": {
"min": 0,
"max": 0
},
"lifetime": {
"min": .5,
"max": .5
},
"blendMode": "normal",
"frequency": 0.002,
"emitterLifetime": -1,
"maxParticles": 300,
"pos": {
"x": 20,
"y": 20
},
"addAtBack": false,
"spawnType": "ring",
"spawnCircle": {
"x": 0,
"y": 0,
"r": 19,
"minR": 19
}
};
//Blue Player Spark Emissions - particle definitions
var bluePlayerEmitter = {
"alpha": {
"start": .6,
"end": 0.1
},
"scale": {
"start": .1,
"end": .001,
"minimumScaleMultiplier": 1
},
"color": {
"start": "#0E32E2",
"end": "#5AE71D"
},
"speed": {
"start": .5,
"end": 0
},
"acceleration": {
"x": 0,
"y": 0
},
"startRotation": {
"min": 0,
"max": 0
},
"rotationSpeed": {
"min": 0,
"max": 0
},
"lifetime": {
"min": .5,
"max": .5
},
"blendMode": "normal",
"frequency": 0.002,
"emitterLifetime": -1,
"maxParticles": 300,
"pos": {
"x": 20,
"y": 20
},
"addAtBack": false,
"spawnType": "ring",
"spawnCircle": {
"x": 0,
"y": 0,
"r": 19,
"minR": 19
}
};
// Death Emissions (Pop) - particle definitions
tagpro.particleDefinitions.death = {
"alpha": {
"start": 0.5,
"end": 0.1
},
"scale": {
"start": 0.4,
"end": 0.001,
"minimumScaleMultiplier": 1
},
"color": {
"start": "#ffffff",
"end": "#ffffff"
},
"speed": {
"start": 300,
"end": 200
},
"acceleration": {
"x": 0,
"y": 0
},
"startRotation": {
"min": 0,
"max": 360
},
"rotationSpeed": {
"min": 0,
"max": 0
},
"lifetime": {
"min": 0.001,
"max": 0.4
},
"blendMode": "normal",
"frequency": 0.001,
"emitterLifetime": 0.02,
"maxParticles": 50,
"pos": {
"x": 0,
"y": 0
},
"addAtBack": false,
"spawnType": "ring",
"spawnCircle": {
"x": 0,
"y": 0,
"r": 19,
"minR": 19
}
};
// TagPro - opacity adjustment in particle definitions
tagpro.particleDefinitions.tagproSparks["alpha"] = {"start": .25, "end": 0}
// Rolling Bomb - particle definitions
tagpro.particleDefinitions.rollingBomb = {
"alpha": {
"start": .25,
"end": 0.25
},
"scale": {
"start": 0.15,
"end": 0.2,
"minimumScaleMultiplier": 1
},
"color": {
"start": "#8a7b07",
"end": "#575757"
},
"speed": {
"start": 20,
"end": 10
},
"acceleration": {
"x": 0,
"y": 0
},
"startRotation": {
"min": 0,
"max": 270
},
"rotationSpeed": {
"min": 0,
"max": 0
},
"lifetime": {
"min": 0.01,
"max": .3
},
"blendMode": "normal",
"frequency": 0.001,
"emitterLifetime": -1,
"maxParticles": 200,
"pos": {
"x": 0,
"y": 0
},
"addAtBack": false,
"spawnType": "ring",
"spawnCircle": {
"x": 0,
"y": 0,
"r": 19,
"minR": 19
}
};
// Explosion (bomb & rolling bomb) - particle definitions
tagpro.particleDefinitions.explosion = {
"alpha": {
"start": 0.15,
"end": 0
},
"scale": {
"start": 2.5,
"end": 0.5,
"minimumScaleMultiplier": 0.1
},
"color": {
"start": "#ffdfa0",
"end": "#100f0c"
},
"speed": {
"start": 500,
"end": 0
},
"acceleration": {
"x": 0,
"y": 0
},
"startRotation": {
"min": 0,
"max": 360
},
"rotationSpeed": {
"min": 0,
"max": 200
},
"lifetime": {
"min": 0.25,
"max": .28
},
"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.001,
"emitterLifetime": 0.1,
"maxParticles": 50,
"pos": {
"x": 0,
"y": 0
},
"addAtBack": false,
"spawnType": "point"
};
// Player Spark Emissions - Rendering (borrowed from Browncoat's)
tagpro.renderer.createPlayerEmitter = function (player) {
if (tr.options.disableParticles) {
return;
}
var emitter = player.team == 1 ? redPlayerEmitter : bluePlayerEmitter;
player.sprites.emitter = new PIXI.particles.Emitter(tr.layers.midground, [tr.particleTexture], emitter);
player.sprites.emitter.keep = true;
tr.emitters.push(player.sprites.emitter);
player.sprites.emitter.emit = false;
};
// -Ensures emitter color is changed if a ball swaps teams
var defaultUpdatePlayerColor = tr.updatePlayerColor;
tr.updatePlayerColor = function (player) {
var color = player.team == 1 ? "red" : "blue";
var tileId = color + "ball";
if (player.sprites.actualBall.tileId != tileId) {
tr.emitters.splice(tr.emitters.indexOf(player.sprites.emitter), 1);
tr.createPlayerEmitter(player);
}
defaultUpdatePlayerColor(player);
};
// -Use custom red/blue colors for the death emitter
var defaultStartDeathEmitter = tr.startDeathEmitter;
tr.startDeathEmitter = function (startColor, stopColor, x, y) {
var isRed = startColor == "ff0000";
var color = isRed ? redTeamColor : blueTeamColor;
defaultStartDeathEmitter(color, stopColor, x, y);
};
// Rolling Bomb - Rendering
tr.updateRollingBomb = function (player) {
if (player.bomb) {
if (!player.sprites.bomb) {
if (!tr.options.disableParticles) {
player.sprites.rollingBomb = new PIXI.particles.Emitter(
tr.layers.midground,
[tr.particleTexture],
tagpro.particleDefinitions.rollingBomb);
tr.emitters.push(player.sprites.rollingBomb);
player.sprites.rollingBomb.keep = true;
}
var bomb = player.sprites.bomb = new PIXI.Graphics();
bomb.lineStyle(6.6935, 0xFFFF00).drawCircle(20, 20, 13.34675);
player.sprites.ball.addChild(bomb);
} else {
player.sprites.bomb.alpha = Math.abs(.4 * Math.sin(performance.now() / 250));
if (player.sprites.rollingBomb) {
var emit = !player.dead && player.sprite.visible;
if (emit && !player.sprites.rollingBomb.emit) {
player.sprites.rollingBomb.emit = true;
} else if (!emit && player.sprites.rollingBomb.emit) {
player.sprites.rollingBomb.emit = false;
}
player.sprites.rollingBomb.updateSpawnPos(player.x+20, player.y+20);
}
}
} else {
if (player.sprites.bomb) {
player.sprites.ball.removeChild(player.sprites.bomb);
player.sprites.bomb = null;
}
if (player.sprites.rollingBomb) {
if (player.sprites.rollingBomb instanceof PIXI.particles.Emitter) {
player.sprites.rollingBomb.emit = false;
} else {
player.sprites.rollingBomb.visible = false;
}
}
}
};
// Explosion (bomb & rolling bomb) - Rendering
tr.createExplosion = function (x, y) {
if (tr.options.disableParticles) {
var explosion = new PIXI.Graphics();
explosion.tagpro = {
started: performance.now(),
length: 150,
x: x,
y: y,
size: 5 * 40
};
tr.layers.foreground.addChild(explosion);
tr.explosions.push(explosion);
} else {
var emitter = new PIXI.particles.Emitter(
tr.layers.background,
[tr.particleTexture],
tagpro.particleDefinitions.explosion
);
emitter.updateSpawnPos(x, y);
tr.emitters.push(emitter);
}
};
// Redefine how degrees, names, and flairs are drawn
// -reduces degree text size and opacity
tr.drawDegree = function (player) {
if (!player.sprites.degrees && player.degree) {
player.sprites.degrees = new PIXI.Text(player.degree + "°",
{
font: "6pt Arial",
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 3,
alpha: .7
});
player.sprites.info.addChild(player.sprites.degrees);
}
if (player.sprites.degrees) {
player.sprites.degrees.x = 36;
player.sprites.degrees.y = -5;
}
};
// -reduces name size
tr.drawName = function (player) {
if (!player.sprites.name || player.sprites.name.text != player.name) {
if (player.sprites.name) player.sprites.info.removeChild(player.sprites.name);
var color = player.auth ? "#BFFF00" : "#ffffff";
player.sprites.name = new PIXI.Text(player.name,
{
font: "7pt Arial",
fill: color || "#ffffff",
stroke: "#000000",
strokeThickness: 3,
alpha: 1
});
player.sprites.info.addChild(player.sprites.name);
}
player.sprites.name.x = 32;
player.sprites.name.y = -17;
};
// -scales down and centers flair above ball
tr.drawFlair = function (player) {
if (player.flair && !player.sprites.flair) {
var cacheKey = "flair-" + player.flair.x + "," + player.flair.y;
var flairTexture = tr.getFlairTexture(cacheKey, player.flair);
player.sprites.flair = new PIXI.Sprite(flairTexture);
player.sprites.flair.scale.set(.8, .8)
player.sprites.flair.x = 14;
player.sprites.flair.y = -14;
player.sprites.info.addChild(player.sprites.flair);
}
if (!player.flair && player.sprites.flair) {
player.sprites.info.removeChild(player.sprites.flair);
}
};
// Personalize team score colors (straight from Browncoat's)
tagpro.ui.scores = function () {
var n = tagpro.score.r ? tagpro.score.r.toString() : "0";
var r = tagpro.score.b ? tagpro.score.b.toString() : "0";
if (tagpro.ui.sprites.redScore) {
tagpro.ui.sprites.redScore.text != n && tagpro.ui.sprites.redScore.setText(n);
tagpro.ui.sprites.blueScore.text != r && tagpro.ui.sprites.blueScore.setText(r);
} else {
var redStroke = "#000000";
if (redColorHex == "#000000") {
redStroke = "#FFFFFF"
}
var blueStroke = "#000000";
if (blueColorHex == "#000000") {
blueStroke = "#FFFFFF"
}
tagpro.ui.sprites.redScore = new PIXI.Text(n, {fill: redColorHex, stroke: redStroke, strokeThickness: 2, font: "bold 40pt Arial"});
tagpro.ui.sprites.blueScore = new PIXI.Text(r, {fill: blueColorHex, stroke: blueStroke, strokeThickness: 2, font: "bold 40pt Arial"});
tagpro.ui.sprites.redScore.alpha = .5;
tagpro.ui.sprites.blueScore.alpha = .5;
tagpro.ui.sprites.redScore.anchor.x = 1;
tagpro.ui.sprites.blueScore.anchor.x = 0;
tagpro.renderer.layers.ui.addChild(tagpro.ui.sprites.redScore);
tagpro.renderer.layers.ui.addChild(tagpro.ui.sprites.blueScore);
}
};
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment