├── Classic ├── css │ ├── odometr.css │ └── style.css ├── deps │ ├── odometr.js │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── static │ ├── autopilot.png │ ├── autoplay.png │ ├── cinema.png │ ├── doubletime.png │ ├── easy.png │ ├── flashlight.png │ ├── halftime.png │ ├── hardrock.png │ ├── hidden.png │ ├── mask.svg │ ├── nightcore.png │ ├── nofail.png │ ├── perfect.png │ ├── relax.png │ ├── spunout.png │ ├── suddendeath.png │ ├── target.png │ └── v2.png ├── DarkAndWhite ├── deps │ ├── css │ │ └── main.css │ └── js │ │ ├── countUp.js │ │ └── reconnecting-websocket.min.js ├── index.html └── index.js ├── InGame1 ├── deps │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── index.css ├── index.html ├── index.js └── resources │ └── MPLUSRounded1c-ExtraBold.ttf ├── InGame2 ├── deps │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── index.css ├── index.html ├── index.js └── resources │ └── MPLUSRounded1c-ExtraBold.ttf ├── InGame3 ├── deps │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── index.css ├── index.html ├── index.js └── resources │ └── MPLUSRounded1c-ExtraBold.ttf ├── Kerli1 ├── css │ └── style.css ├── deps │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── static │ ├── autopilot.png │ ├── autoplay.png │ ├── cinema.png │ ├── doubletime.png │ ├── easy.png │ ├── flashlight.png │ ├── halftime.png │ ├── hardrock.png │ ├── hidden.png │ ├── mask.svg │ ├── nightcore.png │ ├── nofail.png │ ├── perfect.png │ ├── relax.png │ ├── spunout.png │ ├── suddendeath.png │ ├── target.png │ └── v2.png ├── Kerli2 ├── css │ └── style.css ├── deps │ └── reconnecting-websocket.min.js ├── index.html └── index.js ├── LICENSE ├── Luscent ├── Ellipse.png ├── deps │ ├── Chart.min.js │ ├── reconnecting-websocket.min.js │ └── smooth.js ├── fonts │ ├── Cabin-Bold.ttf │ ├── Cabin-BoldItalic.ttf │ ├── Cabin-Italic.ttf │ ├── Cabin-Medium.ttf │ ├── Cabin-MediumItalic.ttf │ ├── Cabin-Regular.ttf │ ├── Cabin-SemiBold.ttf │ └── Cabin-SemiBoldItalic.ttf ├── index.html ├── index.js ├── main.png ├── maskWebcam.svg ├── maskbg.svg ├── masktext.svg ├── odometr.css ├── odometr.js └── style.css ├── MaximalLime ├── css │ ├── all.min.css │ └── main.css ├── deps │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── MinimalLime ├── css │ ├── all.min.css │ └── main.css ├── deps │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── MonokaiPane ├── css │ ├── all.min.css │ ├── fonts │ │ ├── ubuntu-v15-latin-300.woff │ │ ├── ubuntu-v15-latin-300.woff2 │ │ ├── ubuntu-v15-latin-500.woff │ │ ├── ubuntu-v15-latin-500.woff2 │ │ ├── ubuntu-v15-latin-regular.woff │ │ └── ubuntu-v15-latin-regular.woff2 │ ├── odometr.css │ └── style.css ├── deps │ ├── odometr.js │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── webfonts │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── OldClassic ├── css │ ├── odometr.css │ └── style.css ├── deps │ ├── Chart.min.js │ ├── odometr.js │ ├── reconnecting-websocket.min.js │ └── smooth.js ├── index.html ├── index.js └── static │ ├── Junegull-Regular.ttf │ └── mask.svg ├── Overlay ├── README.md ├── deps │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── index.css ├── index.html ├── index.js └── resources │ ├── Roboto-Bold.ttf │ ├── scorebar-bg.png │ └── scorebar-colour.png ├── README.md ├── Simplistic ├── deps │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── style.css ├── TrafficLight ├── css │ ├── FA.css │ └── main.css ├── deps │ └── reconnecting-websocket.min.js ├── index.html ├── index.js └── webfonts │ └── fa-solid-900.woff2 ├── UnstableRate ├── deps │ ├── Roboto-Bold.ttf │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── index.css ├── index.html └── index.js ├── VictimCrasherCompact ├── css │ ├── odometr.css │ └── style.css ├── deps │ ├── odometr.js │ └── reconnecting-websocket.min.js ├── fonts │ └── QTVagaRound-Bold.otf ├── index.html ├── index.js └── static │ ├── autopilot.png │ ├── autoplay.png │ ├── cinema.png │ ├── doubletime.png │ ├── easy.png │ ├── flashlight.png │ ├── halftime.png │ ├── hardrock.png │ ├── hidden.png │ ├── mask.svg │ ├── nightcore.png │ ├── nofail.png │ ├── nomod.png │ ├── perfect.png │ ├── relax.png │ ├── spunout.png │ ├── suddendeath.png │ ├── target.png │ └── v2.png ├── VictimCrasherOverlay ├── css │ ├── odometr.css │ └── style.css ├── deps │ ├── Chart.min.js │ ├── countUp.js │ ├── odometr.js │ ├── reconnecting-websocket.min.js │ └── smooth.js ├── fonts │ └── QTVagaRound-Bold.otf ├── index.html ├── index.js └── static │ ├── autopilot.png │ ├── autoplay.png │ ├── cinema.png │ ├── doubletime.png │ ├── easy.png │ ├── flashlight.png │ ├── halftime.png │ ├── hardrock.png │ ├── hidden.png │ ├── hpbar.png │ ├── nightcore.png │ ├── nofail.png │ ├── nomod.png │ ├── ovbot.png │ ├── ovup.png │ ├── perfect.png │ ├── relax.png │ ├── spunout.png │ ├── suddendeath.png │ ├── target.png │ └── v2.png ├── WaveTournament ├── css │ └── style.css ├── deps │ ├── countUp.js │ └── reconnecting-websocket.min.js ├── fonts │ ├── GOTHICB.TTF │ ├── Rubik-Light.ttf │ └── Rubik-SemiBold.ttf ├── index.html ├── index.js └── static │ ├── bottomchat.png │ ├── bottomplay.png │ └── top.png ├── quickstart-example ├── deps │ ├── countUp.js │ ├── main.css │ └── reconnecting-websocket.min.js ├── index.html └── index.js └── reComfortaa ├── css ├── all.min.css ├── fonts │ ├── comfortaa-v29-latin-300.woff │ ├── comfortaa-v29-latin-500.woff │ ├── comfortaa-v29-latin-600.woff │ ├── comfortaa-v29-latin-700.woff │ └── comfortaa-v29-latin-regular.woff └── style.css ├── deps ├── countUp.js └── reconnecting-websocket.min.js ├── index.html ├── index.js └── webfonts ├── fa-regular-400.woff ├── fa-regular-400.woff2 ├── fa-solid-900.woff └── fa-solid-900.woff2 /Classic/css/odometr.css: -------------------------------------------------------------------------------- 1 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | } 35 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 36 | display: block; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 39 | display: block; 40 | -webkit-backface-visibility: hidden; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 43 | display: block; 44 | -webkit-transform: translateZ(0); 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 47 | position: absolute; 48 | } 49 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 50 | -webkit-transition: -webkit-transform 300ms; 51 | -moz-transition: -moz-transform 300ms; 52 | -ms-transition: -ms-transform 300ms; 53 | -o-transition: -o-transform 300ms; 54 | transition: transform 300ms; 55 | } 56 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 57 | -webkit-transform: translateY(-100%); 58 | -moz-transform: translateY(-100%); 59 | -ms-transform: translateY(-100%); 60 | -o-transform: translateY(-100%); 61 | transform: translateY(-100%); 62 | } 63 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 64 | -webkit-transform: translateY(-100%); 65 | -moz-transform: translateY(-100%); 66 | -ms-transform: translateY(-100%); 67 | -o-transform: translateY(-100%); 68 | transform: translateY(-100%); 69 | } 70 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 71 | -webkit-transition: -webkit-transform 300ms; 72 | -moz-transition: -moz-transform 300ms; 73 | -ms-transition: -ms-transform 300ms; 74 | -o-transition: -o-transform 300ms; 75 | transition: transform 300ms; 76 | -webkit-transform: translateY(0); 77 | -moz-transform: translateY(0); 78 | -ms-transform: translateY(0); 79 | -o-transform: translateY(0); 80 | transform: translateY(0); 81 | } 82 | 83 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 84 | font-family: "Helvetica Neue", sans-serif; 85 | line-height: 1.1em; 86 | } 87 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 88 | text-align: center; 89 | } 90 | -------------------------------------------------------------------------------- /Classic/css/style.css: -------------------------------------------------------------------------------- 1 | body,html{ 2 | padding: 0; 3 | margin: 0; 4 | overflow-x: hidden; 5 | } 6 | #main{ 7 | font-size: 20px; 8 | font-family: Arial, Helvetica, sans-serif; 9 | font-weight: bold; 10 | color: white; 11 | height: 270px; 12 | width: 500px; 13 | position: relative; 14 | -webkit-filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.4)); 15 | -moz-filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.4)); 16 | -ms-filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.4)); 17 | -o-filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.4)); 18 | margin: 20px; 19 | } 20 | #target{ 21 | position: relative; 22 | height: 210px; 23 | width: 500px; 24 | -webkit-mask-image: url(../static/mask.svg); 25 | mask-image: url(../static/mask.svg); 26 | } 27 | 28 | #bg{ 29 | background-color: rgb(71, 83, 109); 30 | position: absolute; 31 | height: 210px; 32 | width: 500px; 33 | object-fit: cover; 34 | z-index: -1; 35 | } 36 | #bgDark{ 37 | position: absolute; 38 | height: 210px; 39 | width: 500px; 40 | background-color: rgba(0, 0, 0, 0.65); 41 | } 42 | #title{ 43 | position: absolute; 44 | left: 105px; 45 | width: max-content; 46 | max-height: 30px; 47 | overflow:hidden; 48 | transform: translate(400px); 49 | animation: slide 15s linear infinite; 50 | } 51 | 52 | @keyframes slide { 53 | 0% {transform: translate(310px);} 54 | 100% { transform: translate(-100%);; } 55 | } 56 | .currentPP{ 57 | width: 100px; 58 | position: absolute; 59 | top: 35px; 60 | text-align: center; 61 | justify-content: center; 62 | } 63 | .ifFC{ 64 | width: 100px; 65 | position: absolute; 66 | top: 35px; 67 | text-align: center; 68 | right: 0; 69 | justify-content: center; 70 | } 71 | #mapStatus{ 72 | position: absolute; 73 | bottom: 5px; 74 | display: flex; 75 | justify-content: space-around; 76 | width: 500px; 77 | text-align: center; 78 | } 79 | #mapStatus hr{ 80 | height: 5px; 81 | width: 80px; 82 | border-radius: 6px; 83 | border: none; 84 | } 85 | .status{ 86 | line-height: 4px; 87 | width: calc(max-content + 100px); 88 | } 89 | #cs hr{ 90 | background-color: #9C9236; 91 | } 92 | #ar hr{ 93 | background-color: #4A9C36; 94 | } 95 | #od hr{ 96 | background-color: #36849C; 97 | } 98 | #hp hr{ 99 | background-color: #9C365B; 100 | } 101 | #state{ 102 | background-color: #171717; 103 | z-index: -1; 104 | position: absolute; 105 | bottom: 20px; 106 | display: grid; 107 | grid-template-columns: 1fr 1fr 1fr; 108 | text-align: center; 109 | width: 375px; 110 | margin-left: 62px; 111 | height: 45px; 112 | border-radius: 0 0 14px 14px; 113 | align-items: center ; 114 | transition: ease-in-out 500ms; 115 | } 116 | #mods{ 117 | position: fixed; 118 | display: flex; 119 | bottom: 120px; 120 | right: 20px; 121 | justify-items: flex-end; 122 | margin-right: 25px; 123 | } 124 | .mod img{ 125 | position: relative; 126 | height: 50px; 127 | width: 50px; 128 | z-index: 1; 129 | object-fit: cover; 130 | margin-right: -25px; 131 | -webkit-filter: drop-shadow( -5px 5px 5px rgba(0,0,0,0.7)); 132 | -moz-filter: drop-shadow(-5px 5px 10px rgba(0,0,0,0.7)); 133 | -ms-filter: drop-shadow(-5px 5px 10px rgba(0,0,0,0.7)); 134 | -o-filter: drop-shadow(-5px 5px 10px rgba(0,0,0,0.7)); 135 | } 136 | .text{ 137 | display: flex; 138 | justify-content: center; 139 | } -------------------------------------------------------------------------------- /Classic/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /Classic/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 | PP: 19 |
20 |
21 |
22 |
23 |
24 | FC: 25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | x100 50 |
51 |
52 |
53 |
54 |
55 | x50 56 |
57 |
58 |
59 |
60 |
61 | xMiss 62 |
63 |
64 |
65 |
66 | 67 | 68 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Classic/static/autopilot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/autopilot.png -------------------------------------------------------------------------------- /Classic/static/autoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/autoplay.png -------------------------------------------------------------------------------- /Classic/static/cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/cinema.png -------------------------------------------------------------------------------- /Classic/static/doubletime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/doubletime.png -------------------------------------------------------------------------------- /Classic/static/easy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/easy.png -------------------------------------------------------------------------------- /Classic/static/flashlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/flashlight.png -------------------------------------------------------------------------------- /Classic/static/halftime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/halftime.png -------------------------------------------------------------------------------- /Classic/static/hardrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/hardrock.png -------------------------------------------------------------------------------- /Classic/static/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/hidden.png -------------------------------------------------------------------------------- /Classic/static/mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Classic/static/nightcore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/nightcore.png -------------------------------------------------------------------------------- /Classic/static/nofail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/nofail.png -------------------------------------------------------------------------------- /Classic/static/perfect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/perfect.png -------------------------------------------------------------------------------- /Classic/static/relax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/relax.png -------------------------------------------------------------------------------- /Classic/static/spunout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/spunout.png -------------------------------------------------------------------------------- /Classic/static/suddendeath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/suddendeath.png -------------------------------------------------------------------------------- /Classic/static/target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/target.png -------------------------------------------------------------------------------- /Classic/static/v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Classic/static/v2.png -------------------------------------------------------------------------------- /DarkAndWhite/deps/css/main.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Roboto:wght@500&display=swap"); 2 | * { 3 | padding: 0; 4 | margin: 0; 5 | -webkit-box-sizing: border-box; 6 | box-sizing: border-box; 7 | } 8 | 9 | body { 10 | font-family: "Roboto", sans-serif; 11 | color: white; 12 | font-size: 50px; 13 | background-color: transparent; 14 | } 15 | 16 | .main { 17 | -webkit-box-pack: center; 18 | -ms-flex-pack: center; 19 | justify-content: center; 20 | -webkit-box-align: center; 21 | -ms-flex-align: center; 22 | align-items: center; 23 | position: absolute; 24 | display: -webkit-box; 25 | display: -ms-flexbox; 26 | display: flex; 27 | top: 20px; 28 | left: 30px; 29 | padding: 20px 40px; 30 | background: black; 31 | border-radius: 6px; 32 | -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5), 0 4px 20px rgba(0, 0, 0, 0.5); 33 | box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5), 0 4px 20px rgba(0, 0, 0, 0.5); 34 | z-index: 0; 35 | } 36 | 37 | .main .line { 38 | position: absolute; 39 | top: 5px; 40 | left: 15px; 41 | width: calc(100% - 30px); 42 | height: 4px; 43 | background: rgba(255, 255, 255, 0.3); 44 | border-radius: 100px; 45 | overflow: hidden; 46 | } 47 | 48 | .main .line::after { 49 | content: ""; 50 | position: absolute; 51 | top: 0; 52 | left: 0; 53 | width: var(--progress); 54 | height: 100%; 55 | background: white; 56 | -webkit-transition: all 0.5s ease; 57 | transition: all 0.5s ease; 58 | } 59 | 60 | .main .hits { 61 | -webkit-box-pack: center; 62 | -ms-flex-pack: center; 63 | justify-content: center; 64 | -webkit-box-align: center; 65 | -ms-flex-align: center; 66 | align-items: center; 67 | position: relative; 68 | display: -webkit-box; 69 | display: -ms-flexbox; 70 | display: flex; 71 | color: black; 72 | width: 480px; 73 | background: white; 74 | border-radius: 10px; 75 | -webkit-box-shadow: 0 6px 0 #ccc; 76 | box-shadow: 0 6px 0 #ccc; 77 | -webkit-transition: all 1s ease; 78 | transition: all 1s ease; 79 | } 80 | 81 | .main .hits .h100, 82 | .main .hits .h50, 83 | .main .hits .h0 { 84 | font-size: 45px; 85 | padding: 0 15px; 86 | } 87 | 88 | .main .hits .h100::after, 89 | .main .hits .h50::after, 90 | .main .hits .h0::after { 91 | font-size: 30px; 92 | opacity: 0.5; 93 | } 94 | 95 | .main .hits .h100::after { 96 | content: "x100"; 97 | } 98 | 99 | .main .hits .h50::after { 100 | content: "x50"; 101 | } 102 | 103 | .main .hits .h0::after { 104 | content: "x0"; 105 | } 106 | 107 | .main .pp { 108 | position: relative; 109 | text-align: center; 110 | margin-right: 40px; 111 | width: 180px; 112 | -webkit-transition: all 1s ease; 113 | transition: all 1s ease; 114 | } 115 | 116 | .main .pp span { 117 | white-space: nowrap; 118 | } 119 | 120 | .main .pp span::after { 121 | content: "PP"; 122 | } 123 | 124 | .songSelect .main .hits { 125 | width: 320px; 126 | } 127 | 128 | .songSelect .main .pp { 129 | width: 340px; 130 | } 131 | 132 | .songSelect .main .pp span::after { 133 | content: ""; 134 | } 135 | 136 | .songSelect .main .pp span::before { 137 | content: "/b/"; 138 | } 139 | /*# sourceMappingURL=main.css.map */ 140 | -------------------------------------------------------------------------------- /DarkAndWhite/deps/js/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /DarkAndWhite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | yep 1 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /DarkAndWhite/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | 3 | socket.onopen = () => console.log("Successfully Connected"); 4 | 5 | socket.onclose = event => { 6 | console.log("Socket Closed Connection: ", event); 7 | socket.send("Client Closed!"); 8 | }; 9 | 10 | socket.onerror = error => console.log("Socket Error: ", error); 11 | 12 | let animation = { 13 | pp: { 14 | current: new CountUp('pp', 0, 0, 0, .5, { useEasing: true, useGrouping: true, separator: " ", decimal: "." }), 15 | }, 16 | h100: document.getElementById('h100'), 17 | h50: document.getElementById('h50'), 18 | h0: document.getElementById('h0'), 19 | }; 20 | 21 | let cache = { 22 | id: 0, 23 | time: 0, 24 | pp: { 25 | current: 0, 26 | fc: 0 27 | }, 28 | hits: { 29 | 100: 0, 30 | 50: 0, 31 | 0: 0, 32 | } 33 | }; 34 | 35 | socket.onmessage = event => { 36 | try { 37 | let data = JSON.parse(event.data), 38 | menu = data.menu, 39 | play = data.gameplay; 40 | document.documentElement.style.setProperty('--progress', `${(menu.bm.time.current / menu.bm.time.full * 100).toFixed(2)}%`); 41 | if (menu.state == 2) { 42 | if (cache.id != 0) cache.id = 0; 43 | if (menu.bm.time.firstObj > menu.bm.time.current) { 44 | animation.h100.innerHTML = 0; 45 | animation.h50.innerHTML = 0; 46 | animation.h0.innerHTML = 0; 47 | }; 48 | document.body.classList.remove('songSelect'); 49 | if (menu.bm.time.current > menu.bm.time.firstObj) { 50 | if (cache.pp.current != play.pp.current) { 51 | cache.pp.current = play.pp.current; 52 | animation.pp.current.update(play.pp.current); 53 | }; 54 | if (cache.hits[100] != play.hits[100]) { 55 | cache.hits[100] = play.hits[100]; 56 | animation.h100.innerHTML = play.hits[100]; 57 | }; 58 | if (cache.hits[50] != play.hits[50]) { 59 | cache.hits[50] = play.hits[50]; 60 | animation.h50.innerHTML = play.hits[50]; 61 | }; 62 | if (cache.hits[0] != play.hits[0]) { 63 | cache.hits[0] = play.hits[0]; 64 | animation.h0.innerHTML = play.hits[0]; 65 | }; 66 | } else animation.pp.current.update(0); 67 | } else if (menu.state != 7) { 68 | document.body.classList.add('songSelect'); 69 | if (cache.id != menu.bm.id) { 70 | animation.pp.current.update(menu.bm.id); 71 | cache.id = menu.bm.id; 72 | }; 73 | animation.h100.innerHTML = 0; 74 | animation.h50.innerHTML = 0; 75 | animation.h0.innerHTML = 0; 76 | }; 77 | } catch (err) { console.log(err); }; 78 | }; -------------------------------------------------------------------------------- /InGame1/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); -------------------------------------------------------------------------------- /InGame1/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Custom-Font"; 3 | src: url("./resources/MPLUSRounded1c-ExtraBold.ttf"); 4 | } 5 | 6 | body,html{ 7 | padding: 0; 8 | margin: 0; 9 | overflow: hidden; 10 | font-family: "Custom-Font"; 11 | } 12 | 13 | #wrapper{ 14 | position: absolute; 15 | transition: 300ms ease-in-out; 16 | transform: translateX(-110%); 17 | width: 240px; 18 | height: 133px; 19 | } 20 | 21 | .ifFcpp{ 22 | position: absolute; 23 | background: linear-gradient(272.81deg, #0F0F0F 0%, #0C0C0C 100%), #0F0F0F; 24 | box-shadow: 0px 0px 10px #000000; 25 | border-radius: 10px; 26 | color: #582A7D; 27 | font-size: 18px; 28 | padding: 5px; 29 | top:10px; 30 | left: 226px; 31 | transform: translateX(-50%); 32 | transition: 300ms ease-in-out; 33 | opacity: 0; 34 | } 35 | #ifFcpp{ 36 | color: white; 37 | } 38 | 39 | .base{ 40 | position: absolute; 41 | height: 108px; 42 | width: 226px; 43 | border-radius: 0 12px 12px 0; 44 | background: linear-gradient(84.26deg, #0F0F0F 1.44%, #0C0C0C 96.32%); 45 | font-size: 30px; 46 | top: 25px; 47 | } 48 | 49 | .pp{ 50 | color: #582A7D; 51 | display: flex; 52 | justify-content: center; 53 | padding-top: 2px; 54 | } 55 | #pp{ 56 | color: white; 57 | } 58 | 59 | .hitsLine{ 60 | display: flex; 61 | justify-content: space-around; 62 | color: white; 63 | } 64 | .hits{ 65 | width: 75px; 66 | text-align: center; 67 | } 68 | 69 | .hitsUnderline{ 70 | height: 4px; 71 | width: 8px; 72 | border-radius: 2px; 73 | margin: 0 auto 0 auto; 74 | } 75 | 76 | #hunUnderline{ 77 | background-color: #2A7D3D; 78 | box-shadow: 0 0 10px #2A7D3D; 79 | } 80 | 81 | #fivUnderline{ 82 | background-color: #2A377D; 83 | box-shadow: 0 0 10px #2A377D; 84 | } 85 | 86 | #missUnderline{ 87 | background-color: #7D2A2A; 88 | box-shadow: 0 0 10px #7D2A2A; 89 | 90 | } -------------------------------------------------------------------------------- /InGame1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | In game Small 12 | 13 | 14 | 15 |
16 |
17 |
0pp
18 |
19 |
20 |
0
21 |
22 |
23 |
24 |
0
25 |
26 |
27 |
28 |
0
29 |
30 |
31 |
32 |
33 |
0pp
34 |
35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /InGame1/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let wrapper = document.getElementById('wrapper'); 3 | let ifFcpp = document.getElementsByClassName('ifFcpp')[0]; 4 | 5 | socket.onopen = () => console.log("Successfully Connected"); 6 | socket.onclose = event => { 7 | console.log("Socket Closed Connection: ", event); 8 | socket.send("Client Closed!"); 9 | }; 10 | socket.onerror = error => console.log("Socket Error: ", error); 11 | 12 | let animation = { 13 | pp: new CountUp('pp', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 14 | ifFcpp: new CountUp('ifFcpp', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 15 | hun: new CountUp('hun', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 16 | fiv: new CountUp('fiv', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 17 | miss: new CountUp('miss', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 18 | }; 19 | 20 | let tempState 21 | 22 | socket.onmessage = event => { 23 | let data = JSON.parse(event.data) 24 | 25 | if (data.menu.state !== tempState) { 26 | tempState = data.menu.state 27 | if (tempState !== 2) { 28 | wrapper.style.transform = "translateX(-110%)" 29 | } else { 30 | wrapper.style.transform = "translateX(0)" 31 | } 32 | 33 | } 34 | if (data.gameplay.pp.current !== '' && data.gameplay.pp.current !== 0) { 35 | animation.pp.update(data.gameplay.pp.current) 36 | } else { 37 | animation.pp.update(0) 38 | } 39 | if (data.gameplay.pp.fc !== '' && data.gameplay.pp.fc !== 0) { 40 | animation.ifFcpp.update(data.gameplay.pp.fc) 41 | } else { 42 | animation.ifFcpp.update(0) 43 | } 44 | if (data.gameplay.hits[100] > 0) { 45 | animation.hun.update(data.gameplay.hits[100]) 46 | } else { 47 | animation.hun.update(0) 48 | } 49 | if (data.gameplay.hits[50] > 0) { 50 | animation.fiv.update(data.gameplay.hits[50]) 51 | } else { 52 | animation.fiv.update(0) 53 | } 54 | if (data.gameplay.hits[0] > 0) { 55 | animation.miss.update(data.gameplay.hits[0]) 56 | } else { 57 | animation.miss.update(0) 58 | } 59 | 60 | if (data.gameplay.hits[0] > 0 || data.gameplay.hits.sliderBreaks > 0) { 61 | ifFcpp.style.opacity = 1 62 | } else { 63 | ifFcpp.style.opacity = 0 64 | } 65 | } -------------------------------------------------------------------------------- /InGame1/resources/MPLUSRounded1c-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/InGame1/resources/MPLUSRounded1c-ExtraBold.ttf -------------------------------------------------------------------------------- /InGame2/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); -------------------------------------------------------------------------------- /InGame2/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Custom-Font"; 3 | src: url("./resources/MPLUSRounded1c-ExtraBold.ttf"); 4 | } 5 | 6 | body,html{ 7 | padding: 0; 8 | margin: 0; 9 | overflow: hidden; 10 | font-family: "Custom-Font"; 11 | } 12 | 13 | .ifFcpp{ 14 | position: absolute; 15 | background: linear-gradient(272.81deg, #0F0F0F 0%, #0C0C0C 100%), #0F0F0F; 16 | box-shadow: 0px 0px 10px #000000; 17 | border-radius: 10px; 18 | color: #582A7D; 19 | font-size: 18px; 20 | padding: 5px; 21 | top:10px; 22 | left: 325px; 23 | transform: translateX(-50%); 24 | transition: 300ms ease-in-out; 25 | opacity: 0; 26 | } 27 | #ifFcpp{ 28 | color: white; 29 | } 30 | 31 | .base{ 32 | position: absolute; 33 | height: 72px; 34 | width: 325px; 35 | border-radius: 10px 10px 10px 10px; 36 | background: linear-gradient(84.26deg, #0F0F0F 1.44%, #0C0C0C 96.32%); 37 | top: 25px; 38 | } 39 | 40 | .pp{ 41 | position: absolute; 42 | color: #582A7D; 43 | display: flex; 44 | justify-content: center; 45 | padding-top: 2px; 46 | font-size: 30px; 47 | right: 10px; 48 | top: 50%; 49 | transform: translateY(-50%); 50 | } 51 | #pp{ 52 | color: white; 53 | } 54 | .progress{ 55 | position: absolute; 56 | width: 178px; 57 | height: 4px; 58 | top: 15px; 59 | left: 10px; 60 | background-color: #272727; 61 | border-radius: 4px; 62 | } 63 | #progress{ 64 | height: 4px; 65 | width: 50%; 66 | border-radius: 4px; 67 | background-color: #582A7D; 68 | transition: 300ms; 69 | } 70 | .hitsLine{ 71 | position: absolute; 72 | display: flex; 73 | justify-content: space-around; 74 | color: white; 75 | font-size: 20px; 76 | width: 178px; 77 | margin-left: 10px; 78 | bottom: 10px; 79 | 80 | } 81 | .hits{ 82 | width: 60px; 83 | text-align: center; 84 | } 85 | 86 | .hitsUnderline{ 87 | height: 4px; 88 | width: 8px; 89 | border-radius: 2px; 90 | margin: 0 auto 0 auto; 91 | } 92 | 93 | #hunUnderline{ 94 | background-color: #2A7D3D; 95 | box-shadow: 0 0 10px #2A7D3D; 96 | } 97 | 98 | #fivUnderline{ 99 | background-color: #2A377D; 100 | box-shadow: 0 0 10px #2A377D; 101 | } 102 | 103 | #missUnderline{ 104 | background-color: #7D2A2A; 105 | box-shadow: 0 0 10px #7D2A2A; 106 | 107 | } -------------------------------------------------------------------------------- /InGame2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | In game Small 12 | 13 | 14 | 15 |
16 |
0pp
17 |
18 |
19 |
20 |
21 |
22 |
0
23 |
24 |
25 |
26 |
0
27 |
28 |
29 |
30 |
0
31 |
32 |
33 |
34 |
35 |
0pp
36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /InGame2/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let wrapper = document.getElementById('wrapper'); 3 | let ifFcpp = document.getElementsByClassName('ifFcpp')[0]; 4 | let progress = document.getElementById("progress"); 5 | 6 | socket.onopen = () => console.log("Successfully Connected"); 7 | socket.onclose = event => { 8 | console.log("Socket Closed Connection: ", event); 9 | socket.send("Client Closed!"); 10 | }; 11 | socket.onerror = error => console.log("Socket Error: ", error); 12 | 13 | let animation = { 14 | pp: new CountUp('pp', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 15 | ifFcpp: new CountUp('ifFcpp', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 16 | hun: new CountUp('hun', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 17 | fiv: new CountUp('fiv', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 18 | miss: new CountUp('miss', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 19 | }; 20 | 21 | let tempState; 22 | let seek; 23 | let fullTime; 24 | let onepart; 25 | 26 | socket.onmessage = event => { 27 | let data = JSON.parse(event.data) 28 | 29 | 30 | if (data.menu.state !== tempState) { 31 | tempState = data.menu.state 32 | 33 | 34 | } 35 | if (data.gameplay.pp.current !== '' && (tempState === 2 || tempState === 7)) { 36 | animation.pp.update(data.gameplay.pp.current) 37 | } 38 | if(data.menu.pp[100] !== '' && (tempState !== 2 && tempState !== 7)){ 39 | animation.pp.update(data.menu.pp[100]) 40 | } 41 | if (data.gameplay.pp.fc !== '' && data.gameplay.pp.fc !== 0) { 42 | animation.ifFcpp.update(data.gameplay.pp.fc) 43 | } else { 44 | animation.ifFcpp.update(0) 45 | } 46 | if (data.gameplay.hits[100] > 0) { 47 | animation.hun.update(data.gameplay.hits[100]) 48 | } else { 49 | animation.hun.update(0) 50 | } 51 | if (data.gameplay.hits[50] > 0) { 52 | animation.fiv.update(data.gameplay.hits[50]) 53 | } else { 54 | animation.fiv.update(0) 55 | } 56 | if (data.gameplay.hits[0] > 0) { 57 | animation.miss.update(data.gameplay.hits[0]) 58 | } else { 59 | animation.miss.update(0) 60 | } 61 | 62 | if (data.gameplay.hits[0] > 0 || data.gameplay.hits.sliderBreaks > 0) { 63 | ifFcpp.style.opacity = 1 64 | } else { 65 | ifFcpp.style.opacity = 0 66 | } 67 | if(fullTime !== data.menu.bm.time.mp3){ 68 | fullTime = data.menu.bm.time.mp3 69 | onepart = 178/fullTime 70 | } 71 | if(seek !== data.menu.bm.time.current && fullTime !== undefined && fullTime != 0){ 72 | seek = data.menu.bm.time.current; 73 | progress.style.width = onepart*seek+'px' 74 | } 75 | } -------------------------------------------------------------------------------- /InGame2/resources/MPLUSRounded1c-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/InGame2/resources/MPLUSRounded1c-ExtraBold.ttf -------------------------------------------------------------------------------- /InGame3/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); -------------------------------------------------------------------------------- /InGame3/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Custom-Font"; 3 | src: url("./resources/MPLUSRounded1c-ExtraBold.ttf"); 4 | } 5 | 6 | body,html{ 7 | padding: 0; 8 | margin: 0; 9 | overflow: hidden; 10 | font-family: "Custom-Font"; 11 | } 12 | 13 | 14 | .base{ 15 | position: absolute; 16 | padding: 5px 10px; 17 | border-radius: 10px 10px 10px 10px; 18 | background: linear-gradient(84.26deg, #0F0F0F 1.44%, #0C0C0C 96.32%); 19 | } 20 | 21 | .pp{ 22 | color: #582A7D; 23 | font-size: 30px; 24 | right: 10px; 25 | } 26 | 27 | #pp{ 28 | color: white; 29 | } 30 | 31 | .ifFcpp{ 32 | position: absolute; 33 | background: linear-gradient(272.81deg, #0F0F0F 0%, #0C0C0C 100%), #0F0F0F; 34 | box-shadow: 0px 0px 10px #000000; 35 | border-radius: 10px; 36 | color: #582A7D; 37 | font-size: 18px; 38 | padding: 5px; 39 | transition: opacity 300ms ease-in-out; 40 | opacity: 1; 41 | transform: translateX(-50%); 42 | left: 110px; 43 | top: 35px; 44 | } 45 | #ifFcpp{ 46 | color: white; 47 | } -------------------------------------------------------------------------------- /InGame3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | In game Small 12 | 13 | 14 | 15 |
16 |
0pp
17 |
18 |
0pp
19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /InGame3/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let ifFcpp = document.getElementsByClassName('ifFcpp')[0]; 3 | let base = document.getElementById('base') 4 | 5 | socket.onopen = () => console.log("Successfully Connected"); 6 | socket.onclose = event => { 7 | console.log("Socket Closed Connection: ", event); 8 | socket.send("Client Closed!"); 9 | }; 10 | socket.onerror = error => console.log("Socket Error: ", error); 11 | 12 | let animation = { 13 | pp: new CountUp('pp', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 14 | ifFcpp: new CountUp('ifFcpp', 0, 0, 0, 0.5, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 15 | }; 16 | 17 | let tempState; 18 | 19 | socket.onmessage = event => { 20 | let data = JSON.parse(event.data) 21 | 22 | if (data.menu.state !== tempState) { 23 | tempState = data.menu.state 24 | } 25 | if (data.gameplay.pp.current !== '' && (tempState === 2 || tempState === 7)) { 26 | animation.pp.update(data.gameplay.pp.current) 27 | } 28 | if(data.menu.pp[100] !== '' && (tempState !== 2 && tempState !== 7)){ 29 | animation.pp.update(data.menu.pp[100]) 30 | } 31 | if (data.gameplay.pp.fc !== '' && data.gameplay.pp.fc !== 0) { 32 | animation.ifFcpp.update(data.gameplay.pp.fc) 33 | } else { 34 | animation.ifFcpp.update(0) 35 | } 36 | if (data.gameplay.hits[0] > 0 || data.gameplay.hits.sliderBreaks > 0) { 37 | ifFcpp.style.opacity = 1 38 | } else { 39 | ifFcpp.style.opacity = 0 40 | } 41 | } -------------------------------------------------------------------------------- /InGame3/resources/MPLUSRounded1c-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/InGame3/resources/MPLUSRounded1c-ExtraBold.ttf -------------------------------------------------------------------------------- /Kerli1/css/style.css: -------------------------------------------------------------------------------- 1 | body,html{ 2 | padding: 0; 3 | margin: 0; 4 | overflow-x: hidden; 5 | } 6 | #main{ 7 | font-size: 20px; 8 | font-family: Arial, Helvetica, sans-serif; 9 | font-weight: bold; 10 | color: white; 11 | height: 124px; 12 | width: 794px; 13 | position: relative; 14 | } 15 | #target{ 16 | position: relative; 17 | height: 124px; 18 | width: 794px; 19 | -webkit-mask-image: url(../static/mask.svg); 20 | mask-image: url(../static/mask.svg); 21 | } 22 | #bg{ 23 | background-color: rgb(71, 83, 109); 24 | position: absolute; 25 | height: 124px; 26 | width: 794px; 27 | object-fit: cover; 28 | z-index: -1; 29 | } 30 | #bgDark{ 31 | position: absolute; 32 | height: 124px; 33 | width: 794px; 34 | background-color: rgba(0, 0, 0, 0.65); 35 | } 36 | #title{ 37 | font-size: 30px; 38 | position: absolute; 39 | top: 15px; 40 | width: max-content; 41 | max-height: 37px; 42 | overflow:hidden; 43 | transform: translate(700px); 44 | animation: slide 15s linear infinite; 45 | } 46 | @keyframes slide { 47 | 0% {transform: translate(830px);} 48 | 100% { transform: translate(-100%);; } 49 | } 50 | #mapStatus{ 51 | font-size: 24px; 52 | position: absolute; 53 | bottom: 5px; 54 | display: flex; 55 | justify-content: space-around; 56 | width: 500px; 57 | text-align: center; 58 | } 59 | #mapStatus hr{ 60 | height: 10px; 61 | width: 100px; 62 | border-radius: 10px; 63 | border: none; 64 | } 65 | .status span.odometer-value, .status { 66 | line-height: 4px; 67 | width: calc(max-content + 100px); 68 | } 69 | #cs hr { 70 | background-color: #9C9236; 71 | } 72 | #ar hr{ 73 | background-color: #4A9C36; 74 | } 75 | #od hr{ 76 | background-color: #36849C; 77 | } 78 | #hp hr{ 79 | background-color: #9C365B; 80 | } 81 | #mods{ 82 | position: absolute; 83 | width: 754px; 84 | margin-right: 40px; 85 | margin-top: 60px; 86 | display: flex; 87 | justify-content: flex-end; 88 | } 89 | .mod img{ 90 | position: relative; 91 | height: 50px; 92 | width: 50px; 93 | z-index: 1; 94 | object-fit: cover; 95 | margin-right: -25px; 96 | -webkit-filter: drop-shadow( -5px 5px 5px rgba(0,0,0,0.7)); 97 | -moz-filter: drop-shadow(-5px 5px 10px rgba(0,0,0,0.7)); 98 | -ms-filter: drop-shadow(-5px 5px 10px rgba(0,0,0,0.7)); 99 | -o-filter: drop-shadow(-5px 5px 10px rgba(0,0,0,0.7)); 100 | } 101 | .text{ 102 | display: flex; 103 | justify-content: center; 104 | } -------------------------------------------------------------------------------- /Kerli1/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /Kerli1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Kerli1/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let mapid = document.getElementById('mapid'); 3 | 4 | let bg = document.getElementById("bg"); 5 | let title = document.getElementById("title"); 6 | let cs = document.getElementById("cs"); 7 | let ar = document.getElementById("ar"); 8 | let od = document.getElementById("od"); 9 | let hp = document.getElementById("hp"); 10 | let mods = document.getElementById("mods"); 11 | const modsImgs = { 12 | 'ez': './static/easy.png', 13 | 'nf': './static/nofail.png', 14 | 'ht': './static/halftime.png', 15 | 'hr': './static/hardrock.png', 16 | 'sd': './static/suddendeath.png', 17 | 'pf': './static/perfect.png', 18 | 'dt': './static/doubletime.png', 19 | 'nc': './static/nightcore.png', 20 | 'hd': './static/hidden.png', 21 | 'fl': './static/flashlight.png', 22 | 'rx': './static/relax.png', 23 | 'ap': './static/autopilot.png', 24 | 'so': './static/spunout.png', 25 | 'at': './static/autoplay.png', 26 | 'cn': './static/cinema.png', 27 | 'v2': './static/v2.png', 28 | } 29 | 30 | socket.onopen = () => { 31 | console.log("Successfully Connected"); 32 | }; 33 | 34 | socket.onclose = event => { 35 | console.log("Socket Closed Connection: ", event); 36 | socket.send("Client Closed!") 37 | }; 38 | 39 | socket.onerror = error => { 40 | console.log("Socket Error: ", error); 41 | }; 42 | let tempImg; 43 | let tempCs; 44 | let tempAr; 45 | let tempOd; 46 | let tempHp; 47 | let tempTitle; 48 | let tempMods; 49 | 50 | socket.onmessage = event => { 51 | let data = JSON.parse(event.data); 52 | if(tempImg !== data.menu.bm.path.full){ 53 | tempImg = data.menu.bm.path.full 54 | data.menu.bm.path.full = data.menu.bm.path.full.replace(/#/g,'%23').replace(/%/g,'%25') 55 | bg.setAttribute('src',`http://127.0.0.1:24050/Songs/${data.menu.bm.path.full}?a=${Math.random(10000)}`) 56 | } 57 | if(tempTitle !== data.menu.bm.metadata.artist + ' - ' + data.menu.bm.metadata.title){ 58 | tempTitle = data.menu.bm.metadata.artist + ' - ' + data.menu.bm.metadata.title; 59 | title.innerHTML = tempTitle 60 | } 61 | if(data.menu.bm.stats.CS != tempCs){ 62 | tempCs = data.menu.bm.stats.CS 63 | cs.innerHTML= `CS: ${Math.round(tempCs * 10) / 10}
` 64 | } 65 | if(data.menu.bm.stats.AR != tempAr){ 66 | tempAr = data.menu.bm.stats.AR 67 | ar.innerHTML= `AR: ${Math.round(tempAr * 10) / 10}
` 68 | } 69 | if(data.menu.bm.stats.OD != tempOd){ 70 | tempOd = data.menu.bm.stats.OD 71 | od.innerHTML= `OD: ${Math.round(tempOd * 10) / 10}
` 72 | } 73 | if(data.menu.bm.stats.HP != tempHp){ 74 | tempHp = data.menu.bm.stats.HP 75 | hp.innerHTML= `HP: ${Math.round(tempHp * 10) / 10}
` 76 | } 77 | if(tempMods != data.menu.mods.str){ 78 | tempMods = data.menu.mods.str 79 | if (tempMods == "" || tempMods == "NM"){ 80 | mods.innerHTML = ''; 81 | } 82 | else{ 83 | mods.innerHTML = ''; 84 | let modsApplied = tempMods.toLowerCase(); 85 | 86 | if(modsApplied.indexOf('nc') != -1){ 87 | modsApplied = modsApplied.replace('dt','') 88 | } 89 | if(modsApplied.indexOf('pf') != -1){ 90 | modsApplied = modsApplied.replace('sd','') 91 | } 92 | let modsArr = modsApplied.match(/.{1,2}/g); 93 | for(let i = 0; i < modsArr.length; i++){ 94 | let mod = document.createElement('div'); 95 | mod.setAttribute('class','mod'); 96 | let modImg = document.createElement('img'); 97 | modImg.setAttribute('src', modsImgs[modsArr[i]]); 98 | mod.appendChild(modImg); 99 | mods.appendChild(mod); 100 | } 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Kerli1/static/autopilot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/autopilot.png -------------------------------------------------------------------------------- /Kerli1/static/autoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/autoplay.png -------------------------------------------------------------------------------- /Kerli1/static/cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/cinema.png -------------------------------------------------------------------------------- /Kerli1/static/doubletime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/doubletime.png -------------------------------------------------------------------------------- /Kerli1/static/easy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/easy.png -------------------------------------------------------------------------------- /Kerli1/static/flashlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/flashlight.png -------------------------------------------------------------------------------- /Kerli1/static/halftime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/halftime.png -------------------------------------------------------------------------------- /Kerli1/static/hardrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/hardrock.png -------------------------------------------------------------------------------- /Kerli1/static/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/hidden.png -------------------------------------------------------------------------------- /Kerli1/static/mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Kerli1/static/nightcore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/nightcore.png -------------------------------------------------------------------------------- /Kerli1/static/nofail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/nofail.png -------------------------------------------------------------------------------- /Kerli1/static/perfect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/perfect.png -------------------------------------------------------------------------------- /Kerli1/static/relax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/relax.png -------------------------------------------------------------------------------- /Kerli1/static/spunout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/spunout.png -------------------------------------------------------------------------------- /Kerli1/static/suddendeath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/suddendeath.png -------------------------------------------------------------------------------- /Kerli1/static/target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/target.png -------------------------------------------------------------------------------- /Kerli1/static/v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Kerli1/static/v2.png -------------------------------------------------------------------------------- /Kerli2/css/style.css: -------------------------------------------------------------------------------- 1 | body,html{ 2 | padding: 0; 3 | margin: 0; 4 | overflow: hidden; 5 | } 6 | #main{ 7 | font-size: 20px; 8 | font-family: Arial, Helvetica, sans-serif; 9 | font-weight: bold; 10 | color: white; 11 | height: 204px; 12 | width: 353px; 13 | position: relative; 14 | } 15 | 16 | .ppWrapper{ 17 | margin-top: 37px; 18 | display: flex; 19 | justify-content: space-around; 20 | } 21 | .pp{ 22 | background-color: #232323; 23 | width: 136px; 24 | height: 42px; 25 | text-align: center; 26 | border-radius: 15px; 27 | font-size: 30px; 28 | padding-top: 10px; 29 | } 30 | 31 | .mistakesWrapper{ 32 | display: flex; 33 | justify-content: space-around; 34 | text-align: center; 35 | margin-top: 30px; 36 | font-size: 30px; 37 | } 38 | 39 | .mistakesWrapper hr{ 40 | height: 10px; 41 | width: 80px; 42 | border-radius: 10px; 43 | border: none; 44 | } 45 | 46 | #hun hr{ 47 | background-color: #158713; 48 | } 49 | 50 | #fiv hr{ 51 | background-color: #132C87; 52 | } 53 | 54 | #miss hr{ 55 | background-color: #871313; 56 | } 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /Kerli2/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /Kerli2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |

20 |

21 |

22 |
23 |
24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Kerli2/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | 3 | let currentPP = document.getElementById("curentPP"); 4 | let ifFC = document.getElementById("PPifFc"); 5 | let hun = document.getElementById("hun"); 6 | let fifty = document.getElementById("fiv"); 7 | let miss = document.getElementById("miss"); 8 | 9 | socket.onopen = () => { 10 | console.log("Successfully Connected"); 11 | }; 12 | 13 | socket.onclose = event => { 14 | console.log("Socket Closed Connection: ", event); 15 | socket.send("Client Closed!") 16 | }; 17 | 18 | socket.onerror = error => { 19 | console.log("Socket Error: ", error); 20 | }; 21 | 22 | socket.onmessage = event => { 23 | let data = JSON.parse(event.data); 24 | if(data.gameplay.pp.current != ''){ 25 | let ppData = data.gameplay.pp.current 26 | currentPP.innerHTML = Math.round(ppData) 27 | }else{ 28 | currentPP.innerHTML = 0 29 | } 30 | if(data.gameplay.pp.fc != ''){ 31 | let ppData = data.gameplay.pp.fc 32 | ifFC.innerHTML = Math.round(ppData) 33 | }else{ 34 | ifFC.innerHTML = 0 35 | } 36 | if(data.gameplay.hits[100] > 0){ 37 | hun.innerHTML = `${data.gameplay.hits[100]}
` 38 | }else{ 39 | hun.innerHTML = `0
` 40 | } 41 | if(data.gameplay.hits[50] > 0){ 42 | fifty.innerHTML = `${data.gameplay.hits[50]}
` 43 | }else{ 44 | fifty.innerHTML = `0
` 45 | } 46 | if(data.gameplay.hits[0] > 0){ 47 | miss.innerHTML = `${data.gameplay.hits[0]}
` 48 | }else{ 49 | miss.innerHTML = `0
` 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 l3lackShark 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Luscent/Ellipse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/Ellipse.png -------------------------------------------------------------------------------- /Luscent/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /Luscent/deps/smooth.js: -------------------------------------------------------------------------------- 1 | function smooth(arr, windowSize, getter = (value) => value, setter) { 2 | const get = getter 3 | const result = [] 4 | 5 | for (let i = 0; i < arr.length; i += 1) { 6 | const leftOffeset = i - windowSize 7 | const from = leftOffeset >= 0 ? leftOffeset : 0 8 | const to = i + windowSize + 1 9 | 10 | let count = 0 11 | let sum = 0 12 | for (let j = from; j < to && j < arr.length; j += 1) { 13 | sum += get(arr[j]) 14 | count += 1 15 | } 16 | 17 | result[i] = setter ? setter(arr[i], sum / count) : sum / count 18 | } 19 | 20 | return result 21 | } 22 | 23 | exports = smooth -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-Bold.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-BoldItalic.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-Italic.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-Medium.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-MediumItalic.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-Regular.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-SemiBold.ttf -------------------------------------------------------------------------------- /Luscent/fonts/Cabin-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/fonts/Cabin-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /Luscent/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 | 20 |
21 |
22 | 23 |
24 |
25 |
26 |
27 | 28 |
29 |
30 |
31 | 32 |
33 |
34 |
0
-->
0
pp
35 | 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Luscent/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Luscent/main.png -------------------------------------------------------------------------------- /Luscent/maskWebcam.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Luscent/maskbg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Luscent/masktext.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Luscent/odometr.css: -------------------------------------------------------------------------------- 1 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | } 35 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 36 | display: block; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 39 | display: block; 40 | -webkit-backface-visibility: hidden; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 43 | display: block; 44 | -webkit-transform: translateZ(0); 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 47 | position: absolute; 48 | } 49 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 50 | -webkit-transition: -webkit-transform 300ms; 51 | -moz-transition: -moz-transform 300ms; 52 | -ms-transition: -ms-transform 300ms; 53 | -o-transition: -o-transform 300ms; 54 | transition: transform 300ms; 55 | } 56 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 57 | -webkit-transform: translateY(-100%); 58 | -moz-transform: translateY(-100%); 59 | -ms-transform: translateY(-100%); 60 | -o-transform: translateY(-100%); 61 | transform: translateY(-100%); 62 | } 63 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 64 | -webkit-transform: translateY(-100%); 65 | -moz-transform: translateY(-100%); 66 | -ms-transform: translateY(-100%); 67 | -o-transform: translateY(-100%); 68 | transform: translateY(-100%); 69 | } 70 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 71 | -webkit-transition: -webkit-transform 300ms; 72 | -moz-transition: -moz-transform 300ms; 73 | -ms-transition: -ms-transform 300ms; 74 | -o-transition: -o-transform 300ms; 75 | transition: transform 300ms; 76 | -webkit-transform: translateY(0); 77 | -moz-transform: translateY(0); 78 | -ms-transform: translateY(0); 79 | -o-transform: translateY(0); 80 | transform: translateY(0); 81 | } 82 | 83 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 84 | font-family: "Helvetica Neue", sans-serif; 85 | line-height: 1.1em; 86 | } 87 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 88 | text-align: center; 89 | } 90 | -------------------------------------------------------------------------------- /Luscent/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Cabin Regular"; 3 | src: url("fonts/Cabin-Regular.ttf"); 4 | } 5 | 6 | 7 | body,html{ 8 | font-family: "Cabin Regular"; 9 | padding: 0; 10 | margin: 0; 11 | overflow-x: hidden; 12 | overflow-y: hidden; 13 | } 14 | #main{ 15 | font-size: 20px; 16 | font-weight: bold; 17 | color: white; 18 | height: 1080px; 19 | width: 1920px; 20 | position: relative; 21 | } 22 | #target{ 23 | position: relative; 24 | height: 1080px; 25 | width: 1920px; 26 | -webkit-mask-image: url(maskWebcam.svg); 27 | mask-image: url(maskWebcam.svg); 28 | } 29 | #bg{ 30 | background-color: rgb(71, 83, 109); 31 | position: absolute; 32 | left: -10px; 33 | top: -10px; 34 | width: 2000px; 35 | object-fit: cover; 36 | z-index: -1; 37 | filter: blur(10px) saturate(200%) brightness(0.8); 38 | transition: ease; 39 | } 40 | #bgwparrer{ 41 | position: absolute; 42 | height: 1080px; 43 | width: 1920px; 44 | -webkit-mask-image: url(maskbg.svg); 45 | mask-image: url(maskbg.svg); 46 | } 47 | #hud{ 48 | position: absolute; 49 | z-index: 1; 50 | } 51 | #bgDark{ 52 | position: absolute; 53 | height: 1080px; 54 | width: 1920px; 55 | background-color: rgba(0, 0, 0, 0.3); 56 | } 57 | #title{ 58 | position: absolute; 59 | color: rgba(255, 255, 255, 0.8); 60 | z-index: 2; 61 | font-weight: 100; 62 | font-size: 30px; 63 | position: absolute; 64 | top: 920px; 65 | width: max-content; 66 | overflow:hidden; 67 | animation: slide 20s linear infinite; 68 | } 69 | #textWrapper{ 70 | position: absolute; 71 | z-index: 2; 72 | height: 1080px; 73 | width: 1920px; 74 | -webkit-mask-image: url(masktext.svg); 75 | mask-image: url(masktext.svg); 76 | } 77 | #bmlink{ 78 | color: rgba(255, 255, 255, 0.7); 79 | left: 390px; 80 | top: 885px; 81 | font-weight: 100; 82 | font-size: 20px; 83 | position: absolute; 84 | z-index: 2; 85 | } 86 | #canvas{ 87 | position: absolute; 88 | bottom: 0; 89 | filter: blur(2px); 90 | } 91 | #canvasSecond{ 92 | filter: blur(2px); 93 | } 94 | #progress{ 95 | bottom: 0; 96 | position: absolute; 97 | width: 1920px; 98 | overflow: hidden; 99 | transition: ease 600ms; 100 | } 101 | #pp{ 102 | display: flex; 103 | border-radius: 100px; 104 | padding: 10px 20px 10px 20px; 105 | position: absolute; 106 | right: 760px; 107 | bottom: 100px; 108 | color: rgba(199, 199, 199, 0.8); 109 | font-size: 25px; 110 | transition: ease-in-out 400ms; 111 | z-index: -4; 112 | } 113 | .ppNum{ 114 | padding: 0 10px 0 10px; 115 | } 116 | .ppText{ 117 | margin-left: -10px; 118 | } 119 | @keyframes slide { 120 | 0% {transform: translate(990px);} 121 | 100% { transform: translate(-105%);; } 122 | } 123 | -------------------------------------------------------------------------------- /MaximalLime/css/main.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color1: #83A87C; 3 | --color2: #456255; 4 | --color-m-1: #5B7556; 5 | --color-m-2: #212F29; 6 | --color-l-1: #334231; 7 | --color-l-2: #0A0E0C; 8 | } 9 | * { 10 | padding: 0; 11 | margin: 0; 12 | box-sizing: border-box; 13 | } 14 | ::selection { 15 | background: #456255 !important; 16 | } 17 | html, body { 18 | overflow: hidden; 19 | font-size: 40px; 20 | font-family: 'Roboto', sans-serif; 21 | color: white; 22 | width: 1920px; 23 | height: 1080px; 24 | background: transparent; 25 | border-right: 2px solid white; 26 | border-bottom: 2px solid white; 27 | } 28 | .main { 29 | position: relative; 30 | width: 800px; 31 | height: 300px; 32 | border-radius: 20px; 33 | box-shadow: 0 6px 0 var(--color-l-1); 34 | overflow: hidden; 35 | } 36 | 37 | .map-info { 38 | position: relative; 39 | width: 100%; 40 | height: 200px; 41 | } 42 | .w100xh { 43 | width: 100%; 44 | height: 100%; 45 | } 46 | .background img {position: relative;object-fit: cover;z-index: 0;} 47 | 48 | .time, .star { 49 | position: absolute; 50 | font-size: .7rem; 51 | padding: 10px 20px; 52 | border-radius: 10px; 53 | z-index: 2; 54 | } 55 | 56 | .link { 57 | position: absolute; 58 | top: 60%; 59 | left: 50%; 60 | transform: translate(-50%, -50%); 61 | z-index: 2; 62 | } 63 | .link i { 64 | font-size: 2rem; 65 | color: var(--color1); 66 | text-shadow: 0 1px 0 var(--color-m-1), 0 2px 0 var(--color-m-1), 0 3px 0 var(--color-m-1), 0 4px 0 var(--color-m-1), 0 0 20px rgba(0, 0, 0, .5); 67 | } 68 | 69 | .link span {position: relative;font-size: 2rem;color: white;text-shadow: 0 0.5px 0 #CCCCCC, 0 1px 0 #CCCCCC, 0 1.5px 0 #CCCCCC, 0 2px 0 #CCCCCC, 0 0 10px black;} 70 | 71 | .link span:before {content: '';position: absolute;left: 0;bottom: -10px;width: 100%;height: 8px;background: var(--color1);border-radius: 100px;box-shadow: 0 1px 0 var(--color-m-1), 0 2px 0 var(--color-m-1), 0 3px 0 var(--color-m-1), 0 4px 0 var(--color-m-1), 0 0 15px rgba(0, 0, 0, .5);transition: all .3s;} 72 | 73 | .background:before {content: '';position: absolute;top: 0;left: 0;right: 0;bottom: 0;background: linear-gradient(0deg, #00000000, rgba(0, 0, 0, .5));z-index: 1;} 74 | 75 | .background { 76 | position: relative; 77 | } 78 | .play-info { 79 | justify-content: center; 80 | align-items: center; 81 | position: relative; 82 | display: flex; 83 | height: 100px; 84 | background: linear-gradient(-10deg, var(--color2), var(--color1)); 85 | text-shadow: 0 1px 0 black, 0 2px 0 black; 86 | } 87 | 88 | .pp { 89 | justify-content: center; 90 | align-items: center; 91 | position: relative; 92 | display: flex; 93 | font-size: 1.2rem; 94 | width: 35%; 95 | height: 100%; 96 | margin-right: 5%; 97 | } 98 | 99 | .hits { 100 | display: flex; 101 | width: 60%; 102 | } 103 | 104 | .h100, .h50, .h0 { 105 | list-style-type: none; 106 | } 107 | 108 | .hits>* { 109 | position: relative; 110 | width: 33.3%; 111 | } 112 | 113 | .h100 li, .h50 li, .h0 li { 114 | text-align: center; 115 | font-size: .8rem; 116 | } 117 | 118 | .h100 li:nth-child(1), .h50 li:nth-child(1), .h0 li:nth-child(1) { 119 | color: #ffffff; 120 | } 121 | 122 | .h100 li:nth-child(2), .h50 li:nth-child(2), .h0 li:nth-child(2) { 123 | font-size: 1rem; 124 | color: white; 125 | } 126 | .pp:before {content: '';position: absolute;top: 0;right: 0;bottom: 0;width: 4px;background: var(--color-l-1);opacity: .2;} 127 | .time { 128 | top: 10px; 129 | left: 20px; 130 | background: var(--color1); 131 | box-shadow: 0 6px 0 var(--color-m-1), 0 0 20px black; 132 | } 133 | 134 | .star { 135 | top: 10px; 136 | right: 20px; 137 | background: var(--color1); 138 | box-shadow: 0 6px 0 var(--color-m-1), 0 0 20px black; 139 | } 140 | -------------------------------------------------------------------------------- /MaximalLime/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /MaximalLime/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | 15 | 0s 16 |
17 |
18 | 19 | 0 20 |
21 | 24 |
25 | 26 |
27 |
28 |
29 |
30 | 0pp 31 |
32 |
33 |
    34 |
  • x100
  • 35 |
  • 0
  • 36 |
37 |
    38 |
  • x50
  • 39 |
  • 0
  • 40 |
41 |
    42 |
  • xMiss
  • 43 |
  • 0
  • 44 |
45 |
46 |
47 |
48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /MaximalLime/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | 3 | let bg = document.getElementById("bg"); 4 | let star = document.getElementById("star"); 5 | let pp = document.getElementById("pp"); 6 | let hun = document.getElementById("h100"); 7 | let fifty = document.getElementById("h50"); 8 | let miss = document.getElementById("h0"); 9 | let time = document.getElementById("time"); 10 | 11 | socket.onopen = () => { 12 | console.log("Successfully Connected"); 13 | }; 14 | 15 | socket.onclose = event => { 16 | console.log("Socket Closed Connection: ", event); 17 | socket.send("Client Closed!") 18 | }; 19 | 20 | socket.onerror = error => { 21 | console.log("Socket Error: ", error); 22 | }; 23 | 24 | let tempState; 25 | let tempImg; 26 | socket.onmessage = event => { 27 | let data = JSON.parse(event.data); 28 | if (tempState !== data.menu.bm.path.full) { 29 | tempState = data.menu.bm.path.full 30 | bg.setAttribute('src', `http://127.0.0.1:24050/Songs/${data.menu.bm.path.full}?a=${Math.random(10000)}`) 31 | } 32 | if (data.menu.bm.time.current > 1000) { 33 | let seconds = (data.menu.bm.time.current/1000).toFixed(0); 34 | let minutes = Math.floor(seconds % 3600 / 60).toString(); 35 | 36 | if (seconds > 60) { 37 | time.innerHTML = `${minutes}m ${seconds-(minutes*60)}s` 38 | } else { 39 | time.innerHTML = `${seconds}s` 40 | } 41 | } 42 | if (data.gameplay.pp.current != '') { 43 | let ppData = data.gameplay.pp.current; 44 | pp.innerHTML = Math.round(ppData) + "pp" 45 | } else { 46 | pp.innerHTML = 0 + "pp" 47 | } 48 | if (data.menu.bm.stats.SR != '') { 49 | let SR = data.menu.bm.stats.SR; 50 | star.innerHTML = SR.toFixed(2) 51 | } else { 52 | star.innerHTML = 0 53 | } 54 | if (data.gameplay.hits[100] > 0) { 55 | hun.innerHTML = data.gameplay.hits[100]; 56 | } else { 57 | hun.innerHTML = 0 58 | } 59 | if (data.gameplay.hits[50] > 0) { 60 | fifty.innerHTML = data.gameplay.hits[50]; 61 | } else { 62 | fifty.innerHTML = 0 63 | } 64 | if (data.gameplay.hits[0] > 0) { 65 | miss.innerHTML = data.gameplay.hits[0]; 66 | } else { 67 | miss.innerHTML = 0 68 | } 69 | } 70 | 71 | 72 | 73 | //Received: '{"menuContainer":{"osuState":2,"bmID":1219126,"bmSetID":575767,"CS":4,"AR":9.5,"OD":8,"HP":6,"bmInfo":"BTS - Not Today [Tomorrow]","bmFolder":"575767 BTS - Not Today","pathToBM":"BTS - Not Today (DeRandom Otaku) [Tomorrow].osu","bmCurrentTime":8861,"bmMinBPM":0,"bmMaxBPM":0},"gameplayContainer":{"300":21,"100":0,"50":0,"miss":0,"accuracy":100,"score":24612,"combo":36,"gameMode":0,"appliedMods":2048,"maxCombo":36,"pp":""}}' -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /MaximalLime/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MaximalLime/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /MinimalLime/css/main.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-bg: #7ca8a4; 3 | --color2-bg: #45625F; 4 | --color-100: #83A87C; 5 | --color2-100: #456255; 6 | --color-50: #A8A87C; 7 | --color2-50: #626245; 8 | --color-0: #A87C7C; 9 | --color2-0: #624545; 10 | } 11 | * { 12 | padding: 0; 13 | margin: 0; 14 | box-sizing: border-box; 15 | } 16 | ::selection {background: #ffffff !important;} 17 | html, body { 18 | text-shadow: 0 1px 0 black, 0 2px 0 black; 19 | font-size: 40px; 20 | font-family: 'Roboto', sans-serif; 21 | color: white; 22 | width: 1920px; 23 | height: 1080px; 24 | /*background: #8c8c8c;*/ 25 | border-right: 2px solid white; 26 | border-bottom: 2px solid white; 27 | } 28 | .main { 29 | position: relative; 30 | width: 600px; 31 | margin: 20px; 32 | } 33 | .stat { 34 | justify-content: center; 35 | align-items: center; 36 | text-align: center; 37 | position: relative; 38 | display: flex; 39 | height: 80px; 40 | padding: 0 10px; 41 | background: linear-gradient(125deg, var(--color-bg), var(--color2-bg)); 42 | border-radius: 250px; 43 | box-shadow: 0 6px 0 var(--color2-bg), 0 10px 20px black; 44 | z-index: 1; 45 | } 46 | .pp {width: 30%;} 47 | .hits { 48 | display: flex; 49 | width: 70%; 50 | } 51 | .hits>* { 52 | width: 33.3%; 53 | } 54 | .hits>*>span { 55 | padding: 5px 15px; 56 | border-radius: 10px; 57 | } 58 | .h100 span { 59 | background: linear-gradient(45deg, var(--color-100), var(--color2-100)); 60 | box-shadow: 0 4px 0 var(--color2-100), 0 3px 10px rgba(0, 0, 0, .5); 61 | } 62 | .h50 span { 63 | background: linear-gradient(45deg, var(--color-50), var(--color2-50)); 64 | box-shadow: 0 4px 0 var(--color2-50), 0 3px 10px rgba(0, 0, 0, .5); 65 | } 66 | .h0 span { 67 | background: linear-gradient(45deg, var(--color-0), var(--color2-0)); 68 | box-shadow: 0 4px 0 var(--color2-0), 0 3px 10px rgba(0, 0, 0, .5); 69 | } -------------------------------------------------------------------------------- /MinimalLime/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /MinimalLime/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |
16 | 0pp 17 |
18 |
19 |
20 | 0 21 |
22 |
23 | 0 24 |
25 |
26 | 0 27 |
28 |
29 |
30 |
31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /MinimalLime/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | 3 | let pp = document.getElementById("pp"); 4 | let hun = document.getElementById("h100"); 5 | let fifty = document.getElementById("h50"); 6 | let miss = document.getElementById("h0"); 7 | let link = document.getElementById("link"); 8 | 9 | socket.onopen = () => { 10 | console.log("Successfully Connected"); 11 | }; 12 | 13 | socket.onclose = event => { 14 | console.log("Socket Closed Connection: ", event); 15 | socket.send("Client Closed!") 16 | }; 17 | 18 | socket.onerror = error => { 19 | console.log("Socket Error: ", error); 20 | }; 21 | let tempState; 22 | let tempImg; 23 | socket.onmessage = event => { 24 | let data = JSON.parse(event.data); 25 | if (data.gameplay.pp.current != '') { 26 | let ppData = data.gameplay.pp.current; 27 | pp.innerHTML = Math.round(ppData) + "pp" 28 | } else { 29 | pp.innerHTML = 0 + "pp" 30 | } 31 | if (data.gameplay.hits[100] > 0) { 32 | hun.innerHTML = data.gameplay.hits[100]; 33 | } else { 34 | hun.innerHTML = 0 35 | } 36 | if (data.gameplay.hits[50] > 0) { 37 | fifty.innerHTML = data.gameplay.hits[50]; 38 | } else { 39 | fifty.innerHTML = 0 40 | } 41 | if (data.gameplay.hits[0] > 0) { 42 | miss.innerHTML = data.gameplay.hits[0]; 43 | } else { 44 | miss.innerHTML = 0 45 | } 46 | } 47 | 48 | 49 | 50 | //Received: '{"menuContainer":{"osuState":2,"bmID":1219126,"bmSetID":575767,"CS":4,"AR":9.5,"OD":8,"HP":6,"bmInfo":"BTS - Not Today [Tomorrow]","bmFolder":"575767 BTS - Not Today","pathToBM":"BTS - Not Today (DeRandom Otaku) [Tomorrow].osu","bmCurrentTime":8861,"bmMinBPM":0,"bmMaxBPM":0},"gameplayContainer":{"300":21,"100":0,"50":0,"miss":0,"accuracy":100,"score":24612,"combo":36,"gameMode":0,"appliedMods":2048,"maxCombo":36,"pp":""}}' -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /MinimalLime/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MinimalLime/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /MonokaiPane/css/fonts/ubuntu-v15-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/css/fonts/ubuntu-v15-latin-300.woff -------------------------------------------------------------------------------- /MonokaiPane/css/fonts/ubuntu-v15-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/css/fonts/ubuntu-v15-latin-300.woff2 -------------------------------------------------------------------------------- /MonokaiPane/css/fonts/ubuntu-v15-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/css/fonts/ubuntu-v15-latin-500.woff -------------------------------------------------------------------------------- /MonokaiPane/css/fonts/ubuntu-v15-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/css/fonts/ubuntu-v15-latin-500.woff2 -------------------------------------------------------------------------------- /MonokaiPane/css/fonts/ubuntu-v15-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/css/fonts/ubuntu-v15-latin-regular.woff -------------------------------------------------------------------------------- /MonokaiPane/css/fonts/ubuntu-v15-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/css/fonts/ubuntu-v15-latin-regular.woff2 -------------------------------------------------------------------------------- /MonokaiPane/css/odometr.css: -------------------------------------------------------------------------------- 1 | :root{ 2 | --spin-duration: 300ms 3 | } 4 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 5 | display: inline-block; 6 | vertical-align: middle; 7 | *vertical-align: auto; 8 | *zoom: 1; 9 | *display: inline; 10 | position: relative; 11 | } 12 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 13 | display: inline-block; 14 | vertical-align: middle; 15 | *vertical-align: auto; 16 | *zoom: 1; 17 | *display: inline; 18 | position: relative; 19 | } 20 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 21 | display: inline-block; 22 | vertical-align: middle; 23 | *vertical-align: auto; 24 | *zoom: 1; 25 | *display: inline; 26 | visibility: hidden; 27 | } 28 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 29 | text-align: left; 30 | display: block; 31 | position: absolute; 32 | top: 0; 33 | left: 0; 34 | right: 0; 35 | bottom: 0; 36 | overflow: hidden; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 39 | display: block; 40 | } 41 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 42 | display: block; 43 | -webkit-backface-visibility: hidden; 44 | } 45 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 46 | display: block; 47 | -webkit-transform: translateZ(0); 48 | } 49 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 50 | position: absolute; 51 | } 52 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 53 | -webkit-transition: -webkit-transform var(--spin-duration); 54 | -moz-transition: -moz-transform var(--spin-duration); 55 | -ms-transition: -ms-transform var(--spin-duration); 56 | -o-transition: -o-transform var(--spin-duration); 57 | transition: transform var(--spin-duration); 58 | } 59 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 60 | -webkit-transform: translateY(-100%); 61 | -moz-transform: translateY(-100%); 62 | -ms-transform: translateY(-100%); 63 | -o-transform: translateY(-100%); 64 | transform: translateY(-100%); 65 | } 66 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 67 | -webkit-transform: translateY(-100%); 68 | -moz-transform: translateY(-100%); 69 | -ms-transform: translateY(-100%); 70 | -o-transform: translateY(-100%); 71 | transform: translateY(-100%); 72 | } 73 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 74 | -webkit-transition: -webkit-transform var(--spin-duration); 75 | -moz-transition: -moz-transform var(--spin-duration); 76 | -ms-transition: -ms-transform var(--spin-duration); 77 | -o-transition: -o-transform var(--spin-duration); 78 | transition: transform var(--spin-duration); 79 | -webkit-transform: translateY(0); 80 | -moz-transform: translateY(0); 81 | -ms-transform: translateY(0); 82 | -o-transform: translateY(0); 83 | transform: translateY(0); 84 | } 85 | 86 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 87 | line-height: 1.1em; 88 | } 89 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 90 | text-align: center; 91 | } 92 | -------------------------------------------------------------------------------- /MonokaiPane/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /MonokaiPane/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | MonokaiPane 10 | 11 | 12 |
13 |
14 |
15 |
16 |
17 | pp 18 |
19 |
20 | x100 21 |
22 |
23 | x50 24 |
25 |
26 | xMiss 27 |
28 |
29 |
30 | 31 |
32 |
33 |
34 | Song Name 35 |
36 |
37 | Artist 38 |
39 |
40 |
Mapper's Name
41 |
42 |
43 |
Difficulty Name
44 |
45 |
46 |
47 |
48 |
49 |
50 | 51 | 52 | 53 | 65 | 66 | -------------------------------------------------------------------------------- /MonokaiPane/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /MonokaiPane/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/MonokaiPane/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /OldClassic/css/odometr.css: -------------------------------------------------------------------------------- 1 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | } 35 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 36 | display: block; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 39 | display: block; 40 | -webkit-backface-visibility: hidden; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 43 | display: block; 44 | -webkit-transform: translateZ(0); 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 47 | position: absolute; 48 | } 49 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 50 | -webkit-transition: -webkit-transform 300ms; 51 | -moz-transition: -moz-transform 300ms; 52 | -ms-transition: -ms-transform 300ms; 53 | -o-transition: -o-transform 300ms; 54 | transition: transform 300ms; 55 | } 56 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 57 | -webkit-transform: translateY(-100%); 58 | -moz-transform: translateY(-100%); 59 | -ms-transform: translateY(-100%); 60 | -o-transform: translateY(-100%); 61 | transform: translateY(-100%); 62 | } 63 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 64 | -webkit-transform: translateY(-100%); 65 | -moz-transform: translateY(-100%); 66 | -ms-transform: translateY(-100%); 67 | -o-transform: translateY(-100%); 68 | transform: translateY(-100%); 69 | } 70 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 71 | -webkit-transition: -webkit-transform 300ms; 72 | -moz-transition: -moz-transform 300ms; 73 | -ms-transition: -ms-transform 300ms; 74 | -o-transition: -o-transform 300ms; 75 | transition: transform 300ms; 76 | -webkit-transform: translateY(0); 77 | -moz-transform: translateY(0); 78 | -ms-transform: translateY(0); 79 | -o-transform: translateY(0); 80 | transform: translateY(0); 81 | } 82 | 83 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 84 | font-family: "Helvetica Neue", sans-serif; 85 | line-height: 1.1em; 86 | } 87 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 88 | text-align: center; 89 | } 90 | -------------------------------------------------------------------------------- /OldClassic/css/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Junegull"; 3 | src: url("../static/Junegull-Regular.ttf"); 4 | 5 | } 6 | 7 | body,html{ 8 | padding: 0; 9 | margin: 0; 10 | overflow-x: hidden; 11 | } 12 | #main{ 13 | font-family: Junegull; 14 | height: 190px; 15 | width: 500px; 16 | overflow: hidden; 17 | color: white; 18 | } 19 | #target{ 20 | position: relative; 21 | height: 190px; 22 | width: 500px; 23 | -webkit-mask-image: url(../static/mask.svg); 24 | mask-image: url(../static/mask.svg); 25 | } 26 | 27 | #bg{ 28 | position: absolute; 29 | height: 125px; 30 | width: 500px; 31 | object-fit: cover; 32 | z-index: -1; 33 | } 34 | #bgDark{ 35 | position: absolute; 36 | height: 125px; 37 | width: 500px; 38 | background-color: rgba(0, 0, 0, 0.65); 39 | } 40 | #title{ 41 | position: absolute; 42 | font-size: 25px; 43 | width: max-content; 44 | max-height: 35px; 45 | top: 5px; 46 | overflow:hidden; 47 | animation: slide 15s linear infinite; 48 | } 49 | @keyframes slide { 50 | 0% {transform: translate(510px);} 51 | 100% { transform: translate(-100%);; } 52 | } 53 | #status{ 54 | height: 65px; 55 | width: 500px; 56 | background-color: #141414; 57 | position: absolute; 58 | top:125px; 59 | display: flex; 60 | justify-content: space-between; 61 | } 62 | .pp{ 63 | width: 200px; 64 | height: 65px; 65 | display: flex; 66 | align-items: center; 67 | justify-content: center 68 | } 69 | #ppWrapper{ 70 | font-size: 40px; 71 | 72 | } 73 | #mistakes{ 74 | display: flex; 75 | margin-top: 6px; 76 | margin-bottom: 10px; 77 | justify-content: space-around; 78 | width: 300px; 79 | font-size: 20px; 80 | text-align: center !important; 81 | color: #7C7879; 82 | } 83 | .mistakes{ 84 | margin-top: 5px; 85 | color: white; 86 | } 87 | .text{ 88 | font-family: Junegull !important; 89 | } 90 | 91 | .odometer .odometer-digit .odometer-value { 92 | width: 100%; 93 | } 94 | #canvas{ 95 | position: absolute; 96 | bottom: 65px; 97 | } 98 | #progress{ 99 | bottom: 65px; 100 | position: absolute; 101 | width: 500px; 102 | overflow: hidden; 103 | transition: ease 600ms; 104 | } -------------------------------------------------------------------------------- /OldClassic/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /OldClassic/deps/smooth.js: -------------------------------------------------------------------------------- 1 | function smooth(arr, windowSize, getter = (value) => value, setter) { 2 | const get = getter 3 | const result = [] 4 | 5 | for (let i = 0; i < arr.length; i += 1) { 6 | const leftOffeset = i - windowSize 7 | const from = leftOffeset >= 0 ? leftOffeset : 0 8 | const to = i + windowSize + 1 9 | 10 | let count = 0 11 | let sum = 0 12 | for (let j = from; j < to && j < arr.length; j += 1) { 13 | sum += get(arr[j]) 14 | count += 1 15 | } 16 | 17 | result[i] = setter ? setter(arr[i], sum / count) : sum / count 18 | } 19 | 20 | return result 21 | } 22 | 23 | exports = smooth -------------------------------------------------------------------------------- /OldClassic/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 |
22 |
23 | 24 |
25 |
26 |
27 | 28 |
29 |
30 |
31 |
32 |
33 |
PP 34 |
35 |
36 |
37 |
38 |
100
39 |
40 |
41 | 42 |
43 |
50
44 |
45 |
46 |
47 |
MISS
48 |
49 |
50 |
51 |
52 |
53 |
54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /OldClassic/static/Junegull-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/OldClassic/static/Junegull-Regular.ttf -------------------------------------------------------------------------------- /OldClassic/static/mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Overlay/README.md: -------------------------------------------------------------------------------- 1 | # How to use 2 | 3 | ### Font 4 | To set custom font you need to add font file to resources folder and change src url in index.css file to your font. 5 | All elements in index.css file have property font-size amount of pixels can be modified as you want. 6 | 7 | ### Score bar 8 | To change Score bar image you need to add scorebar-bg and scorebar-colour to resource folder and set them in index.html, 9 | also you need to specified width property of your scorebar-colour in index.css in sbColor element. 10 | 11 | ### Position 12 | all elements positioned absolutely in 1920 x 1080 area in index.css you can find properties: top left right and bottom 13 | For example left: 0 and bottom: 0 will position element to the left bottom corner 14 | -------------------------------------------------------------------------------- /Overlay/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /Overlay/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "CustomFont"; 3 | src: url("./resources/Roboto-Bold.ttf"); 4 | } 5 | 6 | body,html{ 7 | margin:0; 8 | padding:0; 9 | width: 1920px; 10 | height: 1080px; 11 | font-family: "CustomFont"; 12 | } 13 | 14 | #wrapper{ 15 | opacity: 0; 16 | transition: 300ms; 17 | } 18 | #sb{ 19 | position: absolute; 20 | top: 0; 21 | left: 0; 22 | } 23 | #sbBg{ 24 | position: absolute; 25 | top: 0; 26 | left: 0; 27 | } 28 | #sbColor{ 29 | position: absolute; 30 | top: 8px; 31 | left: 12px; 32 | transition: 300ms; 33 | overflow: hidden; 34 | width: 645px; 35 | } 36 | #score{ 37 | position: absolute; 38 | top: 0px; 39 | right: 5px; 40 | font-size: 80px; 41 | color: white; 42 | text-shadow: 43 | -2px -2px 0 #000, 44 | 2px -2px 0 #000, 45 | -2px 2px 0 #000, 46 | 2px 2px 0 #000; 47 | } 48 | #acc{ 49 | position: absolute; 50 | top: 90px; 51 | right: 5px; 52 | font-size: 50px; 53 | color: white; 54 | text-shadow: 55 | -2px -2px 0 #000, 56 | 2px -2px 0 #000, 57 | -2px 2px 0 #000, 58 | 2px 2px 0 #000; 59 | display: flex; 60 | } 61 | 62 | #combo{ 63 | position: absolute; 64 | bottom: 0px; 65 | left: 10px; 66 | font-size: 80px; 67 | color: white; 68 | text-shadow: 69 | -2px -2px 0 #000, 70 | 2px -2px 0 #000, 71 | -2px 2px 0 #000, 72 | 2px 2px 0 #000; 73 | display: flex; 74 | } 75 | -------------------------------------------------------------------------------- /Overlay/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | overlay 9 | 10 | 11 | 12 |
13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 |
21 |
22 |
%
23 |
x
24 | 25 | 26 | 27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /Overlay/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let scoreColor = document.getElementById('sbColor') 3 | let score = document.getElementById('score'); 4 | let wrapper = document.getElementById('wrapper'); 5 | let widthBase = scoreColor.offsetWidth; 6 | 7 | //score.innerHTML = '0'.padStart(8,"0") 8 | 9 | socket.onopen = () => { 10 | console.log("Successfully Connected"); 11 | }; 12 | 13 | socket.onclose = event => { 14 | console.log("Socket Closed Connection: ", event); 15 | socket.send("Client Closed!") 16 | }; 17 | 18 | socket.onerror = error => { 19 | console.log("Socket Error: ", error); 20 | }; 21 | 22 | 23 | let animation = { 24 | acc: new CountUp('accdata', 0, 0, 2, .2, {useEasing: true, useGrouping: true, separator: " ", decimal: "." }), 25 | combo: new CountUp('combodata', 0, 0, 0, .2, {useEasing: true, useGrouping: true, separator: " ", decimal: "." }), 26 | } 27 | 28 | let tempState; 29 | 30 | socket.onmessage = event => { 31 | let data = JSON.parse(event.data); 32 | if(tempState !== data.menu.state){ 33 | tempState = data.menu.state; 34 | if(tempState == 2 ){ 35 | wrapper.style.opacity = 1; 36 | } 37 | else{ 38 | wrapper.style.opacity = 0; 39 | } 40 | } 41 | if(data.gameplay.hp.smooth != "" || data.gameplay.hp.smooth != null || data.gameplay.hp.smooth != undefined){ 42 | let step = widthBase/200; 43 | scoreColor.style.width = step * data.gameplay.hp.smooth +'px' 44 | } 45 | if(data.gameplay.score != ""){ 46 | let text = data.gameplay.score.toString().padStart(8,"0"); 47 | score.innerHTML = text; 48 | } 49 | if(data.gameplay.accuracy != ""){ 50 | animation.acc.update(data.gameplay.accuracy) 51 | } 52 | if(data.gameplay.combo.current != ""){ 53 | animation.combo.update(data.gameplay.combo.current) 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Overlay/resources/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Overlay/resources/Roboto-Bold.ttf -------------------------------------------------------------------------------- /Overlay/resources/scorebar-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Overlay/resources/scorebar-bg.png -------------------------------------------------------------------------------- /Overlay/resources/scorebar-colour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/Overlay/resources/scorebar-colour.png -------------------------------------------------------------------------------- /Simplistic/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); -------------------------------------------------------------------------------- /Simplistic/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Simplistic 10 | 11 | 12 | 13 |
14 |
15 | SS 16 |
17 |
18 |
19 |
20 | 123 21 | 123 22 |
23 |
24 | 25 |
26 |
27 | 999pp 28 |
29 |
30 |
31 | 123 32 |
33 |
34 |
35 | 123 36 |
37 |
38 |
39 | 123 40 |
41 |
42 |
43 |
44 | 45 |
46 |
47 | 234pp 48 |
49 |
50 |
51 |
52 |
53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /TrafficLight/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /TrafficLight/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 0 14 |
15 |
16 |
17 |
18 | 22 |
23 | 24 |
25 |
26 | 27 |
28 |
29 |
30 | 0 31 | 0 32 | 0 33 |
34 |
35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /TrafficLight/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let mapid = document.getElementById('mapid'); 3 | 4 | let bg = document.getElementById("bg"); 5 | let pp = document.getElementById("pp"); 6 | let hun = document.getElementById("green"); 7 | let fifty = document.getElementById("purple"); 8 | let miss = document.getElementById("red"); 9 | 10 | 11 | socket.onopen = () => { 12 | console.log("Successfully Connected"); 13 | }; 14 | 15 | socket.onclose = event => { 16 | console.log("Socket Closed Connection: ", event); 17 | socket.send("Client Closed!") 18 | }; 19 | 20 | socket.onerror = error => { 21 | console.log("Socket Error: ", error); 22 | }; 23 | let tempState; 24 | let tempImg; 25 | socket.onmessage = event => { 26 | let data = JSON.parse(event.data); 27 | if (tempState !== data.menu.bm.path.full) { 28 | tempState = data.menu.bm.path.full 29 | bg.setAttribute('src', `http://127.0.0.1:24050/Songs/${data.menu.bm.path.full}?a=${Math.random(10000)}`) 30 | mapid.innerHTML = data.menu.bm.id; 31 | } 32 | if (data.gameplay.pp.current != '') { 33 | let ppData = data.gameplay.pp.current; 34 | pp.innerHTML = Math.round(ppData) + "pp" 35 | } else { 36 | pp.innerHTML = 0 + "pp" 37 | } 38 | if (data.gameplay.hits[100] > 0) { 39 | hun.innerHTML = data.gameplay.hits[100]; 40 | } else { 41 | hun.innerHTML = 0 42 | } 43 | if (data.gameplay.hits[50] > 0) { 44 | fifty.innerHTML = data.gameplay.hits[50]; 45 | } else { 46 | fifty.innerHTML = 0 47 | } 48 | if (data.gameplay.hits[0] > 0) { 49 | miss.innerHTML = data.gameplay.hits[0]; 50 | } else { 51 | miss.innerHTML = 0 52 | } 53 | } 54 | 55 | 56 | 57 | //Received: '{"menuContainer":{"osuState":2,"bmID":1219126,"bmSetID":575767,"CS":4,"AR":9.5,"OD":8,"HP":6,"bmInfo":"BTS - Not Today [Tomorrow]","bmFolder":"575767 BTS - Not Today","pathToBM":"BTS - Not Today (DeRandom Otaku) [Tomorrow].osu","bmCurrentTime":8861,"bmMinBPM":0,"bmMaxBPM":0},"gameplayContainer":{"300":21,"100":0,"50":0,"miss":0,"accuracy":100,"score":24612,"combo":36,"gameMode":0,"appliedMods":2048,"maxCombo":36,"pp":""}}' -------------------------------------------------------------------------------- /TrafficLight/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/TrafficLight/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /UnstableRate/deps/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/UnstableRate/deps/Roboto-Bold.ttf -------------------------------------------------------------------------------- /UnstableRate/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /UnstableRate/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Roboto-Bold"; 3 | src: url("deps/Roboto-Bold.ttf"); 4 | } 5 | #ur{ 6 | opacity: 0; 7 | font-size: 24px; 8 | transition: 300ms ease-in-out; 9 | color: white; 10 | font-family: "Roboto-Bold"; 11 | text-align: center; 12 | width: 300px; 13 | } -------------------------------------------------------------------------------- /UnstableRate/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ur 9 | 10 | 11 | 12 |
13 | 0 14 |
15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /UnstableRate/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | let ur = document.getElementById('ur') 3 | socket.onopen = () => { 4 | console.log("Successfully Connected"); 5 | }; 6 | 7 | socket.onclose = event => { 8 | console.log("Socket Closed Connection: ", event); 9 | socket.send("Client Closed!") 10 | }; 11 | 12 | socket.onerror = error => { 13 | console.log("Socket Error: ", error); 14 | }; 15 | let animation = { 16 | ur: new CountUp('ur', 0, 0, 2, 1, { decimalPlaces: 2, useEasing: true, useGrouping: false, separator: " ", decimal: "." }), 17 | }; 18 | let tempState; 19 | socket.onmessage = event => { 20 | let data = JSON.parse(event.data); 21 | if (tempState !== data.menu.state) { 22 | tempState = data.menu.state; 23 | if (tempState == 2) { 24 | ur.style.opacity = 1 25 | } else { 26 | ur.style.opacity = 0 27 | } 28 | } 29 | if (data.gameplay.hits.unstableRate != '') { 30 | animation.ur.update(data.gameplay.hits.unstableRate) 31 | } else { 32 | animation.ur.update(0) 33 | } 34 | } -------------------------------------------------------------------------------- /VictimCrasherCompact/css/odometr.css: -------------------------------------------------------------------------------- 1 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | } 35 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 36 | display: block; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 39 | display: block; 40 | -webkit-backface-visibility: hidden; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 43 | display: block; 44 | -webkit-transform: translateZ(0); 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 47 | position: absolute; 48 | } 49 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 50 | -webkit-transition: -webkit-transform 300ms; 51 | -moz-transition: -moz-transform 300ms; 52 | -ms-transition: -ms-transform 300ms; 53 | -o-transition: -o-transform 300ms; 54 | transition: transform 300ms; 55 | } 56 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 57 | -webkit-transform: translateY(-100%); 58 | -moz-transform: translateY(-100%); 59 | -ms-transform: translateY(-100%); 60 | -o-transform: translateY(-100%); 61 | transform: translateY(-100%); 62 | } 63 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 64 | -webkit-transform: translateY(-100%); 65 | -moz-transform: translateY(-100%); 66 | -ms-transform: translateY(-100%); 67 | -o-transform: translateY(-100%); 68 | transform: translateY(-100%); 69 | } 70 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 71 | -webkit-transition: -webkit-transform 300ms; 72 | -moz-transition: -moz-transform 300ms; 73 | -ms-transition: -ms-transform 300ms; 74 | -o-transition: -o-transform 300ms; 75 | transition: transform 300ms; 76 | -webkit-transform: translateY(0); 77 | -moz-transform: translateY(0); 78 | -ms-transform: translateY(0); 79 | -o-transform: translateY(0); 80 | transform: translateY(0); 81 | } 82 | 83 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 84 | font-family: "Helvetica Neue", sans-serif; 85 | line-height: 1.1em; 86 | } 87 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 88 | text-align: center; 89 | } 90 | -------------------------------------------------------------------------------- /VictimCrasherCompact/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /VictimCrasherCompact/fonts/QTVagaRound-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/fonts/QTVagaRound-Bold.otf -------------------------------------------------------------------------------- /VictimCrasherCompact/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 | 16 |
17 |
18 |
19 |
20 |
21 |
22 |
CS
23 | 24 |
25 |
AR
26 | 27 |
28 |
OD
29 | 30 |
31 |
HP
32 | 33 |
34 |
35 |
36 |
37 | 38 | pp 39 |
40 |
41 |
42 |
43 | 0 44 |
45 |
46 |
47 | 0 48 |
49 |
50 |
51 | 0 52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /VictimCrasherCompact/static/autopilot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/autopilot.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/autoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/autoplay.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/cinema.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/doubletime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/doubletime.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/easy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/easy.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/flashlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/flashlight.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/halftime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/halftime.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/hardrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/hardrock.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/hidden.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/mask.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | mask 9 | 11 | 12 | -------------------------------------------------------------------------------- /VictimCrasherCompact/static/nightcore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/nightcore.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/nofail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/nofail.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/nomod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/nomod.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/perfect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/perfect.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/relax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/relax.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/spunout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/spunout.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/suddendeath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/suddendeath.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/target.png -------------------------------------------------------------------------------- /VictimCrasherCompact/static/v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherCompact/static/v2.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/css/odometr.css: -------------------------------------------------------------------------------- 1 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | padding-left: 5px; 35 | padding-right: 5px; 36 | margin-left: -5px; 37 | margin-right: -5px; 38 | } 39 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 40 | display: block; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 43 | display: block; 44 | -webkit-backface-visibility: hidden; 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 47 | display: block; 48 | -webkit-transform: translateZ(0); 49 | } 50 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 51 | position: absolute; 52 | } 53 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 54 | -webkit-transition: -webkit-transform 300ms; 55 | -moz-transition: -moz-transform 300ms; 56 | -ms-transition: -ms-transform 300ms; 57 | -o-transition: -o-transform 300ms; 58 | transition: transform 300ms; 59 | } 60 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 61 | -webkit-transform: translateY(-100%); 62 | -moz-transform: translateY(-100%); 63 | -ms-transform: translateY(-100%); 64 | -o-transform: translateY(-100%); 65 | transform: translateY(-100%); 66 | } 67 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 68 | -webkit-transform: translateY(-100%); 69 | -moz-transform: translateY(-100%); 70 | -ms-transform: translateY(-100%); 71 | -o-transform: translateY(-100%); 72 | transform: translateY(-100%); 73 | } 74 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 75 | -webkit-transition: -webkit-transform 300ms; 76 | -moz-transition: -moz-transform 300ms; 77 | -ms-transition: -ms-transform 300ms; 78 | -o-transition: -o-transform 300ms; 79 | transition: transform 300ms; 80 | -webkit-transform: translateY(0); 81 | -moz-transform: translateY(0); 82 | -ms-transform: translateY(0); 83 | -o-transform: translateY(0); 84 | transform: translateY(0); 85 | } 86 | 87 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 88 | font-family: "Helvetica Neue", sans-serif; 89 | line-height: 1.1em; 90 | } 91 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 92 | text-align: center; 93 | } 94 | -------------------------------------------------------------------------------- /VictimCrasherOverlay/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /VictimCrasherOverlay/deps/smooth.js: -------------------------------------------------------------------------------- 1 | function smooth(arr, windowSize, getter = (value) => value, setter) { 2 | const get = getter 3 | const result = [] 4 | 5 | for (let i = 0; i < arr.length; i += 1) { 6 | const leftOffeset = i - windowSize 7 | const from = leftOffeset >= 0 ? leftOffeset : 0 8 | const to = i + windowSize + 1 9 | 10 | let count = 0 11 | let sum = 0 12 | for (let j = from; j < to && j < arr.length; j += 1) { 13 | sum += get(arr[j]) 14 | count += 1 15 | } 16 | 17 | result[i] = setter ? setter(arr[i], sum / count) : sum / count 18 | } 19 | 20 | return result 21 | } 22 | 23 | exports = smooth -------------------------------------------------------------------------------- /VictimCrasherOverlay/fonts/QTVagaRound-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/fonts/QTVagaRound-Bold.otf -------------------------------------------------------------------------------- /VictimCrasherOverlay/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |
19 | player: 20 | 21 | 22 | 23 | % 24 |
25 |
26 |
27 | 28 | 29 | 30 | 31 | 32 |
33 |
34 | 35 |
36 |
37 |
38 |
39 |
40 | 41 |
42 |
43 | 44 |
45 |
46 |
47 | 48 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/autopilot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/autopilot.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/autoplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/autoplay.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/cinema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/cinema.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/doubletime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/doubletime.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/easy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/easy.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/flashlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/flashlight.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/halftime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/halftime.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/hardrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/hardrock.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/hidden.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/hpbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/hpbar.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/nightcore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/nightcore.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/nofail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/nofail.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/nomod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/nomod.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/ovbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/ovbot.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/ovup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/ovup.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/perfect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/perfect.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/relax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/relax.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/spunout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/spunout.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/suddendeath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/suddendeath.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/target.png -------------------------------------------------------------------------------- /VictimCrasherOverlay/static/v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/VictimCrasherOverlay/static/v2.png -------------------------------------------------------------------------------- /WaveTournament/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /WaveTournament/fonts/GOTHICB.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/WaveTournament/fonts/GOTHICB.TTF -------------------------------------------------------------------------------- /WaveTournament/fonts/Rubik-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/WaveTournament/fonts/Rubik-Light.ttf -------------------------------------------------------------------------------- /WaveTournament/fonts/Rubik-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/WaveTournament/fonts/Rubik-SemiBold.ttf -------------------------------------------------------------------------------- /WaveTournament/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Team Blue
20 |
21 |
22 |
23 |
Team Red
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
Commentator
33 |
34 |
35 |
36 |
37 |
Now Playing
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /WaveTournament/static/bottomchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/WaveTournament/static/bottomchat.png -------------------------------------------------------------------------------- /WaveTournament/static/bottomplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/WaveTournament/static/bottomplay.png -------------------------------------------------------------------------------- /WaveTournament/static/top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/WaveTournament/static/top.png -------------------------------------------------------------------------------- /quickstart-example/deps/main.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Roboto:wght@500&display=swap"); 2 | 3 | * { 4 | padding: 0; 5 | margin: 0; 6 | box-sizing: border-box; 7 | } 8 | 9 | body { 10 | font-family: "Roboto", sans-serif; 11 | color: white; 12 | font-size: 40px; 13 | background-color: white; 14 | } -------------------------------------------------------------------------------- /quickstart-example/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /quickstart-example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | yep 1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /quickstart-example/index.js: -------------------------------------------------------------------------------- 1 | let socket = new ReconnectingWebSocket("ws://127.0.0.1:24050/ws"); 2 | 3 | socket.onopen = () => console.log("Successfully Connected"); 4 | 5 | socket.onclose = event => { 6 | console.log("Socket Closed Connection: ", event); 7 | socket.send("Client Closed!"); 8 | }; 9 | 10 | socket.onerror = error => console.log("Socket Error: ", error); 11 | 12 | let pp = new CountUp('pp', 0, 0, 0, .5, { useEasing: true, useGrouping: true, separator: " ", decimal: "." }) 13 | let h100 = new CountUp('h100', 0, 0, 0, .5, { useEasing: true, useGrouping: true, separator: " ", decimal: "." }) 14 | let h50 = new CountUp('h50', 0, 0, 0, .5, { useEasing: true, useGrouping: true, separator: " ", decimal: "." }) 15 | let h0 = new CountUp('h0', 0, 0, 0, .5, { useEasing: true, useGrouping: true, separator: " ", decimal: "." }) 16 | 17 | socket.onmessage = event => { 18 | try { 19 | let data = JSON.parse(event.data), menu = data.menu, play = data.gameplay; 20 | pp.update(play.pp.current); 21 | h100.update(play.hits[100]); 22 | h50.update(play.hits[50]); 23 | h0.update(play.hits[0]); 24 | } catch (err) { console.log(err); }; 25 | }; -------------------------------------------------------------------------------- /reComfortaa/css/fonts/comfortaa-v29-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/css/fonts/comfortaa-v29-latin-300.woff -------------------------------------------------------------------------------- /reComfortaa/css/fonts/comfortaa-v29-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/css/fonts/comfortaa-v29-latin-500.woff -------------------------------------------------------------------------------- /reComfortaa/css/fonts/comfortaa-v29-latin-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/css/fonts/comfortaa-v29-latin-600.woff -------------------------------------------------------------------------------- /reComfortaa/css/fonts/comfortaa-v29-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/css/fonts/comfortaa-v29-latin-700.woff -------------------------------------------------------------------------------- /reComfortaa/css/fonts/comfortaa-v29-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/css/fonts/comfortaa-v29-latin-regular.woff -------------------------------------------------------------------------------- /reComfortaa/deps/reconnecting-websocket.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.ReconnectingWebSocket=b()}(this,function(){function a(b,c,d){function l(a,b){var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,!1,!1,b),c}var e={debug:!1,automaticOpen:!0,reconnectInterval:1e3,maxReconnectInterval:3e4,reconnectDecay:1.5,timeoutInterval:2e3};d||(d={});for(var f in e)this[f]="undefined"!=typeof d[f]?d[f]:e[f];this.url=b,this.reconnectAttempts=0,this.readyState=WebSocket.CONNECTING,this.protocol=null;var h,g=this,i=!1,j=!1,k=document.createElement("div");k.addEventListener("open",function(a){g.onopen(a)}),k.addEventListener("close",function(a){g.onclose(a)}),k.addEventListener("connecting",function(a){g.onconnecting(a)}),k.addEventListener("message",function(a){g.onmessage(a)}),k.addEventListener("error",function(a){g.onerror(a)}),this.addEventListener=k.addEventListener.bind(k),this.removeEventListener=k.removeEventListener.bind(k),this.dispatchEvent=k.dispatchEvent.bind(k),this.open=function(b){h=new WebSocket(g.url,c||[]),b||k.dispatchEvent(l("connecting")),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","attempt-connect",g.url);var d=h,e=setTimeout(function(){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","connection-timeout",g.url),j=!0,d.close(),j=!1},g.timeoutInterval);h.onopen=function(){clearTimeout(e),(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onopen",g.url),g.protocol=h.protocol,g.readyState=WebSocket.OPEN,g.reconnectAttempts=0;var d=l("open");d.isReconnect=b,b=!1,k.dispatchEvent(d)},h.onclose=function(c){if(clearTimeout(e),h=null,i)g.readyState=WebSocket.CLOSED,k.dispatchEvent(l("close"));else{g.readyState=WebSocket.CONNECTING;var d=l("connecting");d.code=c.code,d.reason=c.reason,d.wasClean=c.wasClean,k.dispatchEvent(d),b||j||((g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onclose",g.url),k.dispatchEvent(l("close")));var e=g.reconnectInterval*Math.pow(g.reconnectDecay,g.reconnectAttempts);setTimeout(function(){g.reconnectAttempts++,g.open(!0)},e>g.maxReconnectInterval?g.maxReconnectInterval:e)}},h.onmessage=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onmessage",g.url,b.data);var c=l("message");c.data=b.data,k.dispatchEvent(c)},h.onerror=function(b){(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","onerror",g.url,b),k.dispatchEvent(l("error"))}},1==this.automaticOpen&&this.open(!1),this.send=function(b){if(h)return(g.debug||a.debugAll)&&console.debug("ReconnectingWebSocket","send",g.url,b),h.send(b);throw"INVALID_STATE_ERR : Pausing to reconnect websocket"},this.close=function(a,b){"undefined"==typeof a&&(a=1e3),i=!0,h&&h.close(a,b)},this.refresh=function(){h&&h.close()}}return a.prototype.onopen=function(){},a.prototype.onclose=function(){},a.prototype.onconnecting=function(){},a.prototype.onmessage=function(){},a.prototype.onerror=function(){},a.debugAll=!1,a.CONNECTING=WebSocket.CONNECTING,a.OPEN=WebSocket.OPEN,a.CLOSING=WebSocket.CLOSING,a.CLOSED=WebSocket.CLOSED,a}); 2 | -------------------------------------------------------------------------------- /reComfortaa/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | MiniCounter 9 | 10 | 11 |
12 |
13 |
14 | Song - Artist 15 |
16 |
17 |
difficulty Difficulty
18 |  
  19 |
mapper Mapper
20 |
21 |
22 |
23 |
24 |
pp
25 |
26 |
0
27 |
0
28 |
0
29 |
30 |
31 |
32 |
33 | 34 |
35 |
36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /reComfortaa/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /reComfortaa/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /reComfortaa/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /reComfortaa/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/l3lackShark/static/123bc4f4118112a09348ac7c6e190d91f8654e45/reComfortaa/webfonts/fa-solid-900.woff2 --------------------------------------------------------------------------------