Last active
December 16, 2018 22:48
-
-
Save PeachFuzzTP/097697b5efed3a76b757c58110c44220 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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