diff --git a/bookmarklets.html b/bookmarklets.html index c6c34d68..123e32e2 100644 --- a/bookmarklets.html +++ b/bookmarklets.html @@ -17,7 +17,7 @@ - Selenite + Bookmarklets | Selenite >>6:(n<65536?t[o++]=224|n>>>12:(t[o++]=240|n>>>18,t[o++]=128|n>>>12&63),t[o++]=128|n>>>6&63),t[o++]=128|63&n);return t},n.buf2binstring=function(e){return f(e,e.length)},n.binstring2buf=function(e){for(var t=new l.Buf8(e.length),n=0,r=t.length;n>10&1023,i[a++]=56320|1023&n)}return f(i,a)},n.utf8border=function(e,t){for(var n=(t=(t=t||e.length)>e.length?e.length:t)-1;0<=n&&128==(192&e[n]);)n--;return!(n<0)&&0!==n&&n+d[e[n]]>t?n:t}},"zlib/inflate.js":function(e,t,n){"use strict";var R=e("../utils/common"),A=e("./adler32"),O=e("./crc32"),I=e("./inffast"),P=e("./inftrees"),z=0,F=-2,N=1,r=852,o=592;function Z(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new R.Buf16(320),this.work=new R.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=N,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new R.Buf32(r),t.distcode=t.distdyn=new R.Buf32(o),t.sane=1,t.back=-1,z):F}function s(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):F}function l(e,t){var n,r;return!e||!e.state||(r=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=e.wsize?(R.arraySet(e.window,t,n-e.wsize,e.wsize,0),e.wnext=0,e.whave=e.wsize):(r<(o=e.wsize-e.wnext)&&(o=r),R.arraySet(e.window,t,n-r,o,e.wnext),(r-=o)?(R.arraySet(e.window,t,n-r,r,0),e.wnext=r,e.whave=e.wsize):(e.wnext+=o,e.wnext===e.wsize&&(e.wnext=0),e.whave>>8&255,n.check=O(n.check,U,2,0),f=d=0,n.mode=2;else if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&d)<<8)+(d>>8))%31)e.msg="incorrect header check",n.mode=30;else if(8!=(15&d))e.msg="unknown compression method",n.mode=30;else{if(f-=4,_=8+(15&(d>>>=4)),0===n.wbits)n.wbits=_;else if(_>n.wbits){e.msg="invalid window size",n.mode=30;break}n.dmax=1<<_,e.adler=n.check=1,n.mode=512&d?10:12,f=d=0}}break;case 2:for(;f<16;){if(0===s)break e;s--,d+=r[i++]<>8&1),512&n.flags&&(U[0]=255&d,U[1]=d>>>8&255,n.check=O(n.check,U,2,0)),f=d=0,n.mode=3;case 3:for(;f<32;){if(0===s)break e;s--,d+=r[i++]<>>8&255,U[2]=d>>>16&255,U[3]=d>>>24&255,n.check=O(n.check,U,4,0)),f=d=0,n.mode=4;case 4:for(;f<16;){if(0===s)break e;s--,d+=r[i++]<>8),512&n.flags&&(U[0]=255&d,U[1]=d>>>8&255,n.check=O(n.check,U,2,0)),f=d=0,n.mode=5;case 5:if(1024&n.flags){for(;f<16;){if(0===s)break e;s--,d+=r[i++]<>>8&255,n.check=O(n.check,U,2,0)),f=d=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&((h=s<(h=n.length)?s:h)&&(n.head&&(_=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),R.arraySet(n.head.extra,r,i,h,_)),512&n.flags&&(n.check=O(n.check,r,h,i)),s-=h,i+=h,n.length-=h),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===s)break e;for(h=0;_=r[i+h++],n.head&&_&&n.length<65536&&(n.head.name+=String.fromCharCode(_)),_&&h>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=12;break;case 10:for(;f<32;){if(0===s)break e;s--,d+=r[i++]<>>=7&f,f-=7&f,n.mode=27;else{for(;f<3;){if(0===s)break e;s--,d+=r[i++]<>>=1)){case 0:n.mode=14;break;case 1:var L,L=T=void 0,T=n;if(W){for(D=new R.Buf32(512),H=new R.Buf32(32),L=0;L<144;)T.lens[L++]=8;for(;L<256;)T.lens[L++]=9;for(;L<280;)T.lens[L++]=7;for(;L<288;)T.lens[L++]=8;for(P(1,T.lens,0,288,D,0,T.work,{bits:9}),L=0;L<32;)T.lens[L++]=5;P(2,T.lens,0,32,H,0,T.work,{bits:5}),W=!1}if(T.lencode=D,T.lenbits=9,T.distcode=H,T.distbits=5,n.mode=20,6!==t)break;d>>>=2,f-=2;break e;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=30}d>>>=2,f-=2}break;case 14:for(d>>>=7&f,f-=7&f;f<32;){if(0===s)break e;s--,d+=r[i++]<>>16^65535)){e.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&d,f=d=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(h=n.length){if(0===(h=l<(h=s>>=5,f-=5,n.ndist=1+(31&d),d>>>=5,f-=5,n.ncode=4+(15&d),d>>>=4,f-=4,286>>=3,f-=3}for(;n.have<19;)n.lens[B[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,S={bits:n.lenbits},x=P(0,n.lens,0,19,n.lencode,0,n.work,S),n.lenbits=S.bits,x){e.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,p=65535&C,!((m=C>>>24)<=f);){if(0===s)break e;s--,d+=r[i++]<>>=m,f-=m,n.lens[n.have++]=p;else{if(16===p){for(E=m+2;f>>=m,f-=m,0===n.have){e.msg="invalid bit length repeat",n.mode=30;break}_=n.lens[n.have-1],h=3+(3&d),d>>>=2,f-=2}else if(17===p){for(E=m+3;f>>=m)),d>>>=3,f=f-m-3}else{for(E=m+7;f>>=m)),d>>>=7,f=f-m-7}if(n.have+h>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=30;break}for(;h--;)n.lens[n.have++]=_}}if(30===n.mode)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,S={bits:n.lenbits},x=P(1,n.lens,0,n.nlen,n.lencode,0,n.work,S),n.lenbits=S.bits,x){e.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,S={bits:n.distbits},x=P(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,S),n.distbits=S.bits,x){e.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(6<=s&&258<=l){e.next_out=a,e.avail_out=l,e.next_in=i,e.avail_in=s,n.hold=d,n.bits=f,I(e,c),a=e.next_out,o=e.output,l=e.avail_out,i=e.next_in,r=e.input,s=e.avail_in,d=n.hold,f=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;w=(C=n.lencode[d&(1<>>16&255,p=65535&C,!((m=C>>>24)<=f);){if(0===s)break e;s--,d+=r[i++]<>v)])>>>16&255,p=65535&C,!(v+(m=C>>>24)<=f);){if(0===s)break e;s--,d+=r[i++]<>>=v,f-=v,n.back+=v}if(d>>>=m,f-=m,n.back+=m,n.length=p,0===w){n.mode=26;break}if(32&w){n.back=-1,n.mode=12;break}if(64&w){e.msg="invalid literal/length code",n.mode=30;break}n.extra=15&w,n.mode=22;case 22:if(n.extra){for(E=n.extra;f>>=n.extra,f-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;w=(C=n.distcode[d&(1<>>16&255,p=65535&C,!((m=C>>>24)<=f);){if(0===s)break e;s--,d+=r[i++]<>v)])>>>16&255,p=65535&C,!(v+(m=C>>>24)<=f);){if(0===s)break e;s--,d+=r[i++]<>>=v,f-=v,n.back+=v}if(d>>>=m,f-=m,n.back+=m,64&w){e.msg="invalid distance code",n.mode=30;break}n.offset=p,n.extra=15&w,n.mode=24;case 24:if(n.extra){for(E=n.extra;f>>=n.extra,f-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===l)break e;if(n.offset>(h=c-l)){if((h=n.offset-h)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=30;break}b=h>n.wnext?(h-=n.wnext,n.wsize-h):n.wnext-h,h>n.length&&(h=n.length),g=n.window}else g=o,b=a-n.offset,h=n.length;for(l-=h=l>>16&65535|0,a=0;0!==n;){for(n-=a=2e3>>1:n>>>1;e[t]=n}return e}();t.exports=function(e,t,n,r){var o=s,i=r+n;e^=-1;for(var a=r;a>>8^o[255&(e^t[a])];return-1^e}},"zlib/inffast.js":function(e,t,n){"use strict";t.exports=function(e,t){var n,r,o,i,a,s,l=e.state,d=e.next_in,f=e.input,u=d+(e.avail_in-5),c=e.next_out,h=e.output,b=c-(t-e.avail_out),g=c+(e.avail_out-257),m=l.dmax,w=l.wsize,p=l.whave,v=l.wnext,k=l.window,y=l.hold,_=l.bits,x=l.lencode,S=l.distcode,E=(1<>>=r=n>>>24,_-=r,0==(r=n>>>16&255))h[c++]=65535&n;else{if(!(16&r)){if(0==(64&r)){n=x[(65535&n)+(y&(1<>>=r,_-=r),_<15&&(y+=f[d++]<<_,_+=8,y+=f[d++]<<_,_+=8),n=S[y&C];;){if(y>>>=r=n>>>24,_-=r,!(16&(r=n>>>16&255))){if(0==(64&r)){n=S[(65535&n)+(y&(1<>>=r,_-=r,(r=c-b)>3)<<3))-1,e.next_in=d-=o,e.next_out=c,e.avail_in=dh?(g=A[O+a[v]],B[L+a[v]]):(g=96,0),l=1<<(b=p-S),k=d=1<>S)+(d-=l)]=b<<24|g<<16|m|0,0!==d;);for(l=1<>=1;if(U=0!==l?(U&l-1)+l:0,v++,0==--T[p]){if(p===y)break;p=t[n+a[v]]}if(_e.length||31!=e[0]||139!=e[1])return!1;var r=e[3];if(4&r){if(t+2>e.length)return!1;if((t+=2+e[t]+(e[t+1]<<8))>e.length)return!1}if(8&r){for(;te.length)return!1;t++}return 16&r&&String.fromCharCode.apply(null,e.subarray(t,t+n.length+1))==n+"\0"}}};function m(n){b(n);var e=u.fetchWithProgress,t=u[n],t=/file:\/\//.exec(t)?"same-origin":void 0;return e(u[n],{method:"GET",companyName:u.companyName,productName:u.productName,control:"no-store",mode:t,onProgress:function(e){b(n,e)}}).then(function(e){return a=e.parsedBody,s=u[n],new Promise(function(e,t){try{for(var n in g){var r,o,i;if(g[n].hasUnityMarker(a))return s&&console.log('You can reduce startup time if you configure your web server to add "Content-Encoding: '+n+'" response header when serving "'+s+'" file.'),(r=g[n]).worker||(o=URL.createObjectURL(new Blob(["this.require = ",r.require.toString(),"; this.decompress = ",r.decompress.toString(),"; this.onmessage = ",function(e){e={id:e.data.id,decompressed:this.decompress(e.data.compressed)};postMessage(e,e.decompressed?[e.decompressed.buffer]:[])}.toString(),"; postMessage({ ready: true });"],{type:"application/javascript"})),r.worker=new Worker(o),r.worker.onmessage=function(e){e.data.ready?URL.revokeObjectURL(o):(this.callbacks[e.data.id](e.data.decompressed),delete this.callbacks[e.data.id])},r.worker.callbacks={},r.worker.nextCallbackId=0),i=r.worker.nextCallbackId++,r.worker.callbacks[i]=e,void r.worker.postMessage({id:i,compressed:a},[a.buffer])}e(a)}catch(e){t(e)}});var a,s}).catch(function(e){var t="Failed to download file "+u[n];"file:"==location.protocol?d(t+". Loading web pages via a file:// URL without a web server is not supported by this browser. Please use a local development web server to host Unity content, or use the Unity Build and Run option.","error"):console.error(t)})}function w(){Promise.all([m("frameworkUrl").then(function(e){var s=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Promise(function(i,e){var a=document.createElement("script");a.src=s,a.onload=function(){if("undefined"==typeof unityFramework||!unityFramework){var e,t=[["br","br"],["gz","gzip"]];for(e in t){var n,r=t[e];if(u.frameworkUrl.endsWith("."+r[0]))return n="Unable to parse "+u.frameworkUrl+"!","file:"==location.protocol?void d(n+" Loading pre-compressed (brotli or gzip) content via a file:// URL without a web server is not supported by this browser. Please use a local development web server to host compressed Unity content, or use the Unity Build and Run option.","error"):(n+=' This can happen if build compression was enabled but web server hosting the content was misconfigured to not serve the file with HTTP Response Header "Content-Encoding: '+r[1]+'" present. Check browser Console and Devtools Network tab to debug.',"br"==r[0]&&"http:"==location.protocol&&(r=-1!=["localhost","127.0.0.1"].indexOf(location.hostname)?"":"Migrate your server to use HTTPS.",n=/Firefox/.test(navigator.userAgent)?"Unable to parse "+u.frameworkUrl+'!
If using custom web server, verify that web server is sending .br files with HTTP Response Header "Content-Encoding: br". Brotli compression may not be supported in Firefox over HTTP connections. '+r+' See https://bugzilla.mozilla.org/show_bug.cgi?id=1670675 for more information.':"Unable to parse "+u.frameworkUrl+'!
If using custom web server, verify that web server is sending .br files with HTTP Response Header "Content-Encoding: br". Brotli compression may not be supported over HTTP connections. Migrate your server to use HTTPS.'),void d(n,"error"))}d("Unable to parse "+u.frameworkUrl+"! The file is corrupt, or compression was misconfigured? (check Content-Encoding HTTP Response Header on web server)","error")}var o=unityFramework;unityFramework=null,a.onload=null,URL.revokeObjectURL(s),i(o)},a.onerror=function(e){d("Unable to load file "+u.frameworkUrl+"! Check that the file exists on the remote server. (also check browser Console and Devtools Network tab to debug)","error")},document.body.appendChild(a),u.deinitializers.push(function(){document.body.removeChild(a)})})}),m("codeUrl")]).then(function(e){u.wasmBinary=e[1],e[0](u)});var e=m("dataUrl");u.preRun.push(function(){u.addRunDependency("dataUrl"),e.then(function(e){var t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=0,r="UnityWebData1.0\0";if(!String.fromCharCode.apply(null,e.subarray(n,n+r.length))==r)throw"unknown data format";var o=t.getUint32(n+=r.length,!0);for(n+=4;n { + createUnityInstance(gameContainerCanvas, config, (progress) => { + UnityProgress(progress); + }).then((unityInstance) => { + console.log("Unity Instance created"); + gameInstance = unityInstance; + CallParameterless = gameInstance.Module.cwrap('call_cb_v', null, []); + SendMessageInt = gameInstance.Module.cwrap('call_cb_vi', null, ['number']); + SendMessageFloat = gameInstance.Module.cwrap('call_cb_vf', null, ['number']); + SendMessageString = gameInstance.Module.cwrap('call_cb_vs', null, ['string']); + SendMessageByteArray = gameInstance.Module.cwrap('call_cb_vb', null, ['number', 'number']); + SendMessageVector3 = gameInstance.Module.cwrap('call_cb_vv3', null, ['number']); + c_vv3json = gameInstance.Module.cwrap('call_cb_vv3json', null, ['string']); + c_vx = gameInstance.Module.cwrap('call_cb_vx', null, ['number', 'number', 'number', 'number']); + c_vxjson = gameInstance.Module.cwrap('call_cb_vxjson', null, ['string']); + c_i = gameInstance.Module.cwrap('call_cb_i', 'number', []); + c_f = gameInstance.Module.cwrap('call_cb_f', 'number', []); + c_s = gameInstance.Module.cwrap('call_cb_s', 'string', []); + + gameInstance.SendMessage = function (param) { + //console.log("gameInstance.SendMessage: " + param); + if (param === undefined) { + if (typeof this.SendMessage_vss != 'function') + this.SendMessage_vss = CallParameterless; + this.SendMessage_vss(); + } else if (typeof param === "string") { + //console.log("SendMessage string "); + + if (typeof this.SendMessage_vsss != 'function') + this.SendMessage_vsss = SendMessageString; + this.SendMessage_vsss(param); + } else if (typeof param === "number") { + if (typeof this.SendMessage_vssn != 'function') + this.SendMessage_vssn = SendMessageFloat; + this.SendMessage_vssn(param); + } else if (param instanceof Uint8Array) { + if (typeof this.SendMessage_vb != 'function') + this.SendMessage_vb = SendMessageByteArray; + var ptr = gameInstance.Module._malloc(param.byteLength); + var dataHeap = new Uint8Array(gameInstance.Module.HEAPU8.buffer, ptr, param.byteLength); + dataHeap.set(param); + + this.SendMessage_vb(ptr, param.length); + } else + throw "" + param + " is does not have a type which is supported by SendMessage."; + }; + var getPlayerIdObj = { + eventName : "getPlayerId", + data : { + playerId : window.player_id + } + }; + gameInstance.SendMessage(JSON.stringify(getPlayerIdObj)); + }).catch((message) => { + alert(message); + }); + }; + + } +); + +document.body.appendChild(script); + +// this function is called from page to send data to Unity +window.sendMessageToUnity = function (data) { + + if (!(data instanceof Uint8Array)) { + //data = msgpack.encode(data) + } + + if (window.gameInstance.SendMessage === undefined) { + console.log("Undefined SendMessage function"); + } else { + //console.log("gameInstance 2 == " + gameInstance.SendMessage); + gameInstance.SendMessage(data); + } +}; + +async function fetchAsync (url) { + let response = await fetch(url); + let data = await response.json(); + return data; +} + +function getUserGeneratedSkins() { + fetchAsync("https://skins.hole-io.com/skins/getAll").then(function(result) { + //console.log( result ); + var struct = { + eventName : "userGeneratedSkins", + data : { + list : {} + } + } + struct.data.list = result; + sendMessageToUnity(JSON.stringify(struct)); + }); +} + +function getSkin(id){ + fetchAsync("https://skins.hole-io.com/skins/" + id).then(function(result) { + //console.log( result ); + var struct = { + eventName : "getUserGeneratedSkin", + data : { + skin : {} + } + } + struct.data.skin = result; + sendMessageToUnity(JSON.stringify(struct)); + }); +} + +function getSkinPreview(id){ + fetchAsync("https://skins.hole-io.com/skins/" + id + "/activePreview").then(function(result) { + console.log( result ); + var struct = { + eventName : "userGeneratedSkinPreview", + data : { + preview : {} + } + } + struct.data.preview = result; + sendMessageToUnity(JSON.stringify(struct)); + }); +} + +// this function is called from Unity to send data to server +function sendMessageToServer(bytes) { + //gameWebSocket.send(bytes); +} + +// this function is called by Unity when game is loaded +function gameReady() { + window.gameStart(); +// hide web and show webGL unity div +} +// this function is called by Unity when game is over and score is sent to server +function gameOver() { + window.gameOverParent(); +// hide webGL unity div and show web div +} diff --git a/holeio/favicon.png b/holeio/favicon.png new file mode 100644 index 00000000..1a3f1475 Binary files /dev/null and b/holeio/favicon.png differ diff --git a/holeio/images/hole-io.png b/holeio/images/hole-io.png new file mode 100644 index 00000000..a328c571 Binary files /dev/null and b/holeio/images/hole-io.png differ diff --git a/holeio/index.html b/holeio/index.html new file mode 100644 index 00000000..495f2df9 --- /dev/null +++ b/holeio/index.html @@ -0,0 +1,415 @@ + + + + + + + + Hole.io + + + + + + + + + + + + + + + + + + + +
+ +
+
+
Loading...
+
+
+ +
+
+
 
+
+ +
+
+

Today's top scores:

+ + + +
+
+
+

Today's top killers:

+ + + +
+
+
+ Switch +
+
+ + + + + + + + + +
+ + + + +
+ + + + + + + + \ No newline at end of file diff --git a/holeio/libs/jquery-3.3.1.min.js b/holeio/libs/jquery-3.3.1.min.js new file mode 100644 index 00000000..4d9b3a25 --- /dev/null +++ b/holeio/libs/jquery-3.3.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" - + - + - Selenite + Projects | Selenite
-                 - +
-         diff --git a/settings.html b/settings.html index 17a05725..99581bc1 100644 --- a/settings.html +++ b/settings.html @@ -1,89 +1,58 @@ - - + - - - - - + - + - Selenite + Settings | Selenite - + - - + + - + + - -
- - + +
+ Home + Bookmarklets + Suggestions + Settings + Feedback + Discord + Support +
-
- -

selenite

-
- -
+
+

Settings

Website Name


@@ -106,13 +75,14 @@
- -
+ + + + + diff --git a/style.css b/style.css index 25b5eb01..0eeca35c 100644 --- a/style.css +++ b/style.css @@ -72,6 +72,7 @@ main { flex-wrap: wrap; margin: auto; margin-top: 4rem; + width: 90%; } main#main.noscroll { justify-content: center; @@ -102,8 +103,12 @@ h2 { h3 { font-size: 20px; } +p, a { + font-size: 16px; + color: white; +} -button { +button, input#websubmit.submit, input[type=submit]#panic { cursor: pointer; background-color: #5a189a; border-color: #3c096c; @@ -112,20 +117,22 @@ button { border-style: solid; padding: 10px; color: white; - margin-left: 10px; - margin-right: 10px; + margin-left: 20px; + margin-right: 20px; transition-duration: 0.5s; margin: 10px; } -button:hover { +button:hover, input#websubmit.submit:hover, input[type=submit]#panic:hover { border-color: #240046; background-color: #3c096c; + transform: scale(1.07); } img { width: 100%; aspect-ratio: auto; + user-select: none; } .img-container a { @@ -149,9 +156,16 @@ img { width: 15%; border-radius: 20px; display: inline-block; - background-color: black; + background-color: #240046; margin: 15px; cursor: pointer; + box-shadow: 0px 0px 5px 5px #240046; +} + +.game:hover { + transform: scale(1.1); + background-color: #2f005a; + box-shadow: 0px 0px 5px 5px #2f005a; } .game h1 { @@ -188,7 +202,7 @@ img.star { } a { - font-size: 20px; + font-size: 16px; } input[type="text"] { @@ -205,6 +219,11 @@ input[type="text"] { border: 2px solid #5a189a; border-radius: 5px; transition: opacity 0.25s ease-in-out; + opacity: 70%; + transition-duration: 0.5s; +} +input[type=text]:hover { + opacity: 100%; } .bookmarkletdiv { @@ -221,3 +240,7 @@ input[type="text"] { font-size: 30px; color: white; } + +form { + width: 100%; +} \ No newline at end of file diff --git a/support.html b/support.html new file mode 100644 index 00000000..c1d4b478 --- /dev/null +++ b/support.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + Support | Selenite + + + + + + + + + + + +
+ Home + Bookmarklets + Suggestions + Settings + Feedback + Discord + Support +
+ +
+

support selenite

+

i dont make anything off of this website, so anything would be greatly appreciated!

+
+
+ +
+
+
+ + + + diff --git a/thirtydollarwebsite/assets/action_bg.png b/thirtydollarwebsite/assets/action_bg.png new file mode 100644 index 00000000..9735ee80 Binary files /dev/null and b/thirtydollarwebsite/assets/action_bg.png differ diff --git a/thirtydollarwebsite/assets/action_combine.png b/thirtydollarwebsite/assets/action_combine.png new file mode 100644 index 00000000..4ecf64d5 Binary files /dev/null and b/thirtydollarwebsite/assets/action_combine.png differ diff --git a/thirtydollarwebsite/assets/action_cut.png b/thirtydollarwebsite/assets/action_cut.png new file mode 100644 index 00000000..0a9df78c Binary files /dev/null and b/thirtydollarwebsite/assets/action_cut.png differ diff --git a/thirtydollarwebsite/assets/action_divider.png b/thirtydollarwebsite/assets/action_divider.png new file mode 100644 index 00000000..29627ac9 Binary files /dev/null and b/thirtydollarwebsite/assets/action_divider.png differ diff --git a/thirtydollarwebsite/assets/action_flash.png b/thirtydollarwebsite/assets/action_flash.png new file mode 100644 index 00000000..d6c99510 Binary files /dev/null and b/thirtydollarwebsite/assets/action_flash.png differ diff --git a/thirtydollarwebsite/assets/action_jump.png b/thirtydollarwebsite/assets/action_jump.png new file mode 100644 index 00000000..bb198491 Binary files /dev/null and b/thirtydollarwebsite/assets/action_jump.png differ diff --git a/thirtydollarwebsite/assets/action_loop.png b/thirtydollarwebsite/assets/action_loop.png new file mode 100644 index 00000000..4e745b0b Binary files /dev/null and b/thirtydollarwebsite/assets/action_loop.png differ diff --git a/thirtydollarwebsite/assets/action_loopmany.png b/thirtydollarwebsite/assets/action_loopmany.png new file mode 100644 index 00000000..8305ebdc Binary files /dev/null and b/thirtydollarwebsite/assets/action_loopmany.png differ diff --git a/thirtydollarwebsite/assets/action_looptarget.png b/thirtydollarwebsite/assets/action_looptarget.png new file mode 100644 index 00000000..ac64797b Binary files /dev/null and b/thirtydollarwebsite/assets/action_looptarget.png differ diff --git a/thirtydollarwebsite/assets/action_pulse.png b/thirtydollarwebsite/assets/action_pulse.png new file mode 100644 index 00000000..f49f8146 Binary files /dev/null and b/thirtydollarwebsite/assets/action_pulse.png differ diff --git a/thirtydollarwebsite/assets/action_speed.png b/thirtydollarwebsite/assets/action_speed.png new file mode 100644 index 00000000..364b8ee4 Binary files /dev/null and b/thirtydollarwebsite/assets/action_speed.png differ diff --git a/thirtydollarwebsite/assets/action_startpos.png b/thirtydollarwebsite/assets/action_startpos.png new file mode 100644 index 00000000..532c7f20 Binary files /dev/null and b/thirtydollarwebsite/assets/action_startpos.png differ diff --git a/thirtydollarwebsite/assets/action_stop.png b/thirtydollarwebsite/assets/action_stop.png new file mode 100644 index 00000000..8505fad1 Binary files /dev/null and b/thirtydollarwebsite/assets/action_stop.png differ diff --git a/thirtydollarwebsite/assets/action_target.png b/thirtydollarwebsite/assets/action_target.png new file mode 100644 index 00000000..5cf6523c Binary files /dev/null and b/thirtydollarwebsite/assets/action_target.png differ diff --git a/thirtydollarwebsite/assets/action_transpose.png b/thirtydollarwebsite/assets/action_transpose.png new file mode 100644 index 00000000..dc373248 Binary files /dev/null and b/thirtydollarwebsite/assets/action_transpose.png differ diff --git a/thirtydollarwebsite/assets/action_volume.png b/thirtydollarwebsite/assets/action_volume.png new file mode 100644 index 00000000..d59bb53f Binary files /dev/null and b/thirtydollarwebsite/assets/action_volume.png differ diff --git a/thirtydollarwebsite/assets/check_off.svg b/thirtydollarwebsite/assets/check_off.svg new file mode 100644 index 00000000..72504499 --- /dev/null +++ b/thirtydollarwebsite/assets/check_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/dont_you_lecture_me.wav b/thirtydollarwebsite/assets/dont_you_lecture_me.wav new file mode 100644 index 00000000..a5baaba8 Binary files /dev/null and b/thirtydollarwebsite/assets/dont_you_lecture_me.wav differ diff --git a/thirtydollarwebsite/assets/download.svg b/thirtydollarwebsite/assets/download.svg new file mode 100644 index 00000000..91b227c4 --- /dev/null +++ b/thirtydollarwebsite/assets/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/load.svg b/thirtydollarwebsite/assets/load.svg new file mode 100644 index 00000000..e57e30c1 --- /dev/null +++ b/thirtydollarwebsite/assets/load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/play.png b/thirtydollarwebsite/assets/play.png new file mode 100644 index 00000000..fc026965 Binary files /dev/null and b/thirtydollarwebsite/assets/play.png differ diff --git a/thirtydollarwebsite/assets/reset.png b/thirtydollarwebsite/assets/reset.png new file mode 100644 index 00000000..8dff0172 Binary files /dev/null and b/thirtydollarwebsite/assets/reset.png differ diff --git a/thirtydollarwebsite/assets/save.svg b/thirtydollarwebsite/assets/save.svg new file mode 100644 index 00000000..a5d27eb7 --- /dev/null +++ b/thirtydollarwebsite/assets/save.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/section_deselect.png b/thirtydollarwebsite/assets/section_deselect.png new file mode 100644 index 00000000..c6c12913 Binary files /dev/null and b/thirtydollarwebsite/assets/section_deselect.png differ diff --git a/thirtydollarwebsite/assets/section_hide.png b/thirtydollarwebsite/assets/section_hide.png new file mode 100644 index 00000000..8642097d Binary files /dev/null and b/thirtydollarwebsite/assets/section_hide.png differ diff --git a/thirtydollarwebsite/assets/section_next.png b/thirtydollarwebsite/assets/section_next.png new file mode 100644 index 00000000..36606bc9 Binary files /dev/null and b/thirtydollarwebsite/assets/section_next.png differ diff --git a/thirtydollarwebsite/assets/section_previous.png b/thirtydollarwebsite/assets/section_previous.png new file mode 100644 index 00000000..cac00d7f Binary files /dev/null and b/thirtydollarwebsite/assets/section_previous.png differ diff --git a/thirtydollarwebsite/assets/section_show.png b/thirtydollarwebsite/assets/section_show.png new file mode 100644 index 00000000..45ab5768 Binary files /dev/null and b/thirtydollarwebsite/assets/section_show.png differ diff --git a/thirtydollarwebsite/assets/social_tiktok.svg b/thirtydollarwebsite/assets/social_tiktok.svg new file mode 100644 index 00000000..3da85e64 --- /dev/null +++ b/thirtydollarwebsite/assets/social_tiktok.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/social_twitter.svg b/thirtydollarwebsite/assets/social_twitter.svg new file mode 100644 index 00000000..d16b6a7d --- /dev/null +++ b/thirtydollarwebsite/assets/social_twitter.svg @@ -0,0 +1,16 @@ + + + diff --git a/thirtydollarwebsite/assets/social_youtube.svg b/thirtydollarwebsite/assets/social_youtube.svg new file mode 100644 index 00000000..552c295f --- /dev/null +++ b/thirtydollarwebsite/assets/social_youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/stop.png b/thirtydollarwebsite/assets/stop.png new file mode 100644 index 00000000..192a0fab Binary files /dev/null and b/thirtydollarwebsite/assets/stop.png differ diff --git a/thirtydollarwebsite/assets/tab_actions.svg b/thirtydollarwebsite/assets/tab_actions.svg new file mode 100644 index 00000000..a49fdf92 --- /dev/null +++ b/thirtydollarwebsite/assets/tab_actions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/tab_all.svg b/thirtydollarwebsite/assets/tab_all.svg new file mode 100644 index 00000000..00c4a0c2 --- /dev/null +++ b/thirtydollarwebsite/assets/tab_all.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/tab_notes.svg b/thirtydollarwebsite/assets/tab_notes.svg new file mode 100644 index 00000000..d224ce01 --- /dev/null +++ b/thirtydollarwebsite/assets/tab_notes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/tab_percussion.svg b/thirtydollarwebsite/assets/tab_percussion.svg new file mode 100644 index 00000000..748d8a7b --- /dev/null +++ b/thirtydollarwebsite/assets/tab_percussion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/tab_recent.svg b/thirtydollarwebsite/assets/tab_recent.svg new file mode 100644 index 00000000..5638d69d --- /dev/null +++ b/thirtydollarwebsite/assets/tab_recent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/thirtydollarwebsite/assets/white_people_be_like.wav b/thirtydollarwebsite/assets/white_people_be_like.wav new file mode 100644 index 00000000..7e0dbc78 Binary files /dev/null and b/thirtydollarwebsite/assets/white_people_be_like.wav differ diff --git a/thirtydollarwebsite/assets/you_deadass_built_like_a.wav b/thirtydollarwebsite/assets/you_deadass_built_like_a.wav new file mode 100644 index 00000000..f948b264 Binary files /dev/null and b/thirtydollarwebsite/assets/you_deadass_built_like_a.wav differ diff --git a/thirtydollarwebsite/assets/🗿.png b/thirtydollarwebsite/assets/🗿.png new file mode 100644 index 00000000..910c14dc Binary files /dev/null and b/thirtydollarwebsite/assets/🗿.png differ diff --git a/thirtydollarwebsite/icons/21.png b/thirtydollarwebsite/icons/21.png new file mode 100644 index 00000000..d6769a30 Binary files /dev/null and b/thirtydollarwebsite/icons/21.png differ diff --git a/thirtydollarwebsite/icons/BABA.png b/thirtydollarwebsite/icons/BABA.png new file mode 100644 index 00000000..5426f05b Binary files /dev/null and b/thirtydollarwebsite/icons/BABA.png differ diff --git a/thirtydollarwebsite/icons/DEFEAT.png b/thirtydollarwebsite/icons/DEFEAT.png new file mode 100644 index 00000000..75acd28e Binary files /dev/null and b/thirtydollarwebsite/icons/DEFEAT.png differ diff --git a/thirtydollarwebsite/icons/SLAM.png b/thirtydollarwebsite/icons/SLAM.png new file mode 100644 index 00000000..436dcb06 Binary files /dev/null and b/thirtydollarwebsite/icons/SLAM.png differ diff --git a/thirtydollarwebsite/icons/YOU.png b/thirtydollarwebsite/icons/YOU.png new file mode 100644 index 00000000..c8356fb0 Binary files /dev/null and b/thirtydollarwebsite/icons/YOU.png differ diff --git a/thirtydollarwebsite/icons/adofai_fire.png b/thirtydollarwebsite/icons/adofai_fire.png new file mode 100644 index 00000000..89705878 Binary files /dev/null and b/thirtydollarwebsite/icons/adofai_fire.png differ diff --git a/thirtydollarwebsite/icons/adofai_ice.png b/thirtydollarwebsite/icons/adofai_ice.png new file mode 100644 index 00000000..592cab02 Binary files /dev/null and b/thirtydollarwebsite/icons/adofai_ice.png differ diff --git a/thirtydollarwebsite/icons/adofaicymbal.png b/thirtydollarwebsite/icons/adofaicymbal.png new file mode 100644 index 00000000..bc449a22 Binary files /dev/null and b/thirtydollarwebsite/icons/adofaicymbal.png differ diff --git a/thirtydollarwebsite/icons/adofaikick.png b/thirtydollarwebsite/icons/adofaikick.png new file mode 100644 index 00000000..889653c0 Binary files /dev/null and b/thirtydollarwebsite/icons/adofaikick.png differ diff --git a/thirtydollarwebsite/icons/airhorn.png b/thirtydollarwebsite/icons/airhorn.png new file mode 100644 index 00000000..7ddca353 Binary files /dev/null and b/thirtydollarwebsite/icons/airhorn.png differ diff --git a/thirtydollarwebsite/icons/americano.png b/thirtydollarwebsite/icons/americano.png new file mode 100644 index 00000000..a618f733 Binary files /dev/null and b/thirtydollarwebsite/icons/americano.png differ diff --git a/thirtydollarwebsite/icons/amogus.png b/thirtydollarwebsite/icons/amogus.png new file mode 100644 index 00000000..808e5b94 Binary files /dev/null and b/thirtydollarwebsite/icons/amogus.png differ diff --git a/thirtydollarwebsite/icons/amogus_emergency.png b/thirtydollarwebsite/icons/amogus_emergency.png new file mode 100644 index 00000000..9d5a0cf1 Binary files /dev/null and b/thirtydollarwebsite/icons/amogus_emergency.png differ diff --git a/thirtydollarwebsite/icons/amogus_kill.png b/thirtydollarwebsite/icons/amogus_kill.png new file mode 100644 index 00000000..e68a6c3d Binary files /dev/null and b/thirtydollarwebsite/icons/amogus_kill.png differ diff --git a/thirtydollarwebsite/icons/amongdrip.png b/thirtydollarwebsite/icons/amongdrip.png new file mode 100644 index 00000000..cf20047d Binary files /dev/null and b/thirtydollarwebsite/icons/amongdrip.png differ diff --git a/thirtydollarwebsite/icons/amongus.png b/thirtydollarwebsite/icons/amongus.png new file mode 100644 index 00000000..eba95be1 Binary files /dev/null and b/thirtydollarwebsite/icons/amongus.png differ diff --git a/thirtydollarwebsite/icons/boing.png b/thirtydollarwebsite/icons/boing.png new file mode 100644 index 00000000..e0c4ae2d Binary files /dev/null and b/thirtydollarwebsite/icons/boing.png differ diff --git a/thirtydollarwebsite/icons/bong.png b/thirtydollarwebsite/icons/bong.png new file mode 100644 index 00000000..f84f6c9d Binary files /dev/null and b/thirtydollarwebsite/icons/bong.png differ diff --git a/thirtydollarwebsite/icons/boom.png b/thirtydollarwebsite/icons/boom.png new file mode 100644 index 00000000..910c14dc Binary files /dev/null and b/thirtydollarwebsite/icons/boom.png differ diff --git a/thirtydollarwebsite/icons/boowomp.png b/thirtydollarwebsite/icons/boowomp.png new file mode 100644 index 00000000..dcc6a85f Binary files /dev/null and b/thirtydollarwebsite/icons/boowomp.png differ diff --git a/thirtydollarwebsite/icons/bruh.png b/thirtydollarwebsite/icons/bruh.png new file mode 100644 index 00000000..3eead237 Binary files /dev/null and b/thirtydollarwebsite/icons/bruh.png differ diff --git a/thirtydollarwebsite/icons/builttoscale.png b/thirtydollarwebsite/icons/builttoscale.png new file mode 100644 index 00000000..a7e5d565 Binary files /dev/null and b/thirtydollarwebsite/icons/builttoscale.png differ diff --git a/thirtydollarwebsite/icons/bup.png b/thirtydollarwebsite/icons/bup.png new file mode 100644 index 00000000..368cb36a Binary files /dev/null and b/thirtydollarwebsite/icons/bup.png differ diff --git a/thirtydollarwebsite/icons/buttonpop.png b/thirtydollarwebsite/icons/buttonpop.png new file mode 100644 index 00000000..a9930f2b Binary files /dev/null and b/thirtydollarwebsite/icons/buttonpop.png differ diff --git a/thirtydollarwebsite/icons/buzzer.png b/thirtydollarwebsite/icons/buzzer.png new file mode 100644 index 00000000..47f2b8da Binary files /dev/null and b/thirtydollarwebsite/icons/buzzer.png differ diff --git a/thirtydollarwebsite/icons/bwomp.png b/thirtydollarwebsite/icons/bwomp.png new file mode 100644 index 00000000..57b39e97 Binary files /dev/null and b/thirtydollarwebsite/icons/bwomp.png differ diff --git a/thirtydollarwebsite/icons/celeste_dash.png b/thirtydollarwebsite/icons/celeste_dash.png new file mode 100644 index 00000000..85786e7a Binary files /dev/null and b/thirtydollarwebsite/icons/celeste_dash.png differ diff --git a/thirtydollarwebsite/icons/celeste_death.png b/thirtydollarwebsite/icons/celeste_death.png new file mode 100644 index 00000000..7c583c12 Binary files /dev/null and b/thirtydollarwebsite/icons/celeste_death.png differ diff --git a/thirtydollarwebsite/icons/celeste_diamond.png b/thirtydollarwebsite/icons/celeste_diamond.png new file mode 100644 index 00000000..7d71fa6e Binary files /dev/null and b/thirtydollarwebsite/icons/celeste_diamond.png differ diff --git a/thirtydollarwebsite/icons/celeste_spring.png b/thirtydollarwebsite/icons/celeste_spring.png new file mode 100644 index 00000000..5e02de77 Binary files /dev/null and b/thirtydollarwebsite/icons/celeste_spring.png differ diff --git a/thirtydollarwebsite/icons/choruskid.png b/thirtydollarwebsite/icons/choruskid.png new file mode 100644 index 00000000..d0efbc3b Binary files /dev/null and b/thirtydollarwebsite/icons/choruskid.png differ diff --git a/thirtydollarwebsite/icons/cowbell.png b/thirtydollarwebsite/icons/cowbell.png new file mode 100644 index 00000000..c4265ea4 Binary files /dev/null and b/thirtydollarwebsite/icons/cowbell.png differ diff --git a/thirtydollarwebsite/icons/dimrainsynth.png b/thirtydollarwebsite/icons/dimrainsynth.png new file mode 100644 index 00000000..38966032 Binary files /dev/null and b/thirtydollarwebsite/icons/dimrainsynth.png differ diff --git a/thirtydollarwebsite/icons/dodgeball.png b/thirtydollarwebsite/icons/dodgeball.png new file mode 100644 index 00000000..95ba87ef Binary files /dev/null and b/thirtydollarwebsite/icons/dodgeball.png differ diff --git a/thirtydollarwebsite/icons/e.png b/thirtydollarwebsite/icons/e.png new file mode 100644 index 00000000..92be0fdf Binary files /dev/null and b/thirtydollarwebsite/icons/e.png differ diff --git a/thirtydollarwebsite/icons/eight.png b/thirtydollarwebsite/icons/eight.png new file mode 100644 index 00000000..eaed8862 Binary files /dev/null and b/thirtydollarwebsite/icons/eight.png differ diff --git a/thirtydollarwebsite/icons/empty.png b/thirtydollarwebsite/icons/empty.png new file mode 100644 index 00000000..855346ad Binary files /dev/null and b/thirtydollarwebsite/icons/empty.png differ diff --git a/thirtydollarwebsite/icons/explosion.png b/thirtydollarwebsite/icons/explosion.png new file mode 100644 index 00000000..e8682d25 Binary files /dev/null and b/thirtydollarwebsite/icons/explosion.png differ diff --git a/thirtydollarwebsite/icons/familyguy.png b/thirtydollarwebsite/icons/familyguy.png new file mode 100644 index 00000000..1b8c2153 Binary files /dev/null and b/thirtydollarwebsite/icons/familyguy.png differ diff --git a/thirtydollarwebsite/icons/flipnote.png b/thirtydollarwebsite/icons/flipnote.png new file mode 100644 index 00000000..d016796b Binary files /dev/null and b/thirtydollarwebsite/icons/flipnote.png differ diff --git a/thirtydollarwebsite/icons/fnf_death.png b/thirtydollarwebsite/icons/fnf_death.png new file mode 100644 index 00000000..b96565e0 Binary files /dev/null and b/thirtydollarwebsite/icons/fnf_death.png differ diff --git a/thirtydollarwebsite/icons/fnf_down.png b/thirtydollarwebsite/icons/fnf_down.png new file mode 100644 index 00000000..cfe07bee Binary files /dev/null and b/thirtydollarwebsite/icons/fnf_down.png differ diff --git a/thirtydollarwebsite/icons/fnf_left.png b/thirtydollarwebsite/icons/fnf_left.png new file mode 100644 index 00000000..0e9c57ba Binary files /dev/null and b/thirtydollarwebsite/icons/fnf_left.png differ diff --git a/thirtydollarwebsite/icons/fnf_right.png b/thirtydollarwebsite/icons/fnf_right.png new file mode 100644 index 00000000..11725547 Binary files /dev/null and b/thirtydollarwebsite/icons/fnf_right.png differ diff --git a/thirtydollarwebsite/icons/fnf_up.png b/thirtydollarwebsite/icons/fnf_up.png new file mode 100644 index 00000000..208f0c17 Binary files /dev/null and b/thirtydollarwebsite/icons/fnf_up.png differ diff --git a/thirtydollarwebsite/icons/gaster.png b/thirtydollarwebsite/icons/gaster.png new file mode 100644 index 00000000..b2863474 Binary files /dev/null and b/thirtydollarwebsite/icons/gaster.png differ diff --git a/thirtydollarwebsite/icons/gd_coin.png b/thirtydollarwebsite/icons/gd_coin.png new file mode 100644 index 00000000..c6ab23fe Binary files /dev/null and b/thirtydollarwebsite/icons/gd_coin.png differ diff --git a/thirtydollarwebsite/icons/gd_diamonds.png b/thirtydollarwebsite/icons/gd_diamonds.png new file mode 100644 index 00000000..10b8a598 Binary files /dev/null and b/thirtydollarwebsite/icons/gd_diamonds.png differ diff --git a/thirtydollarwebsite/icons/gd_orbs.png b/thirtydollarwebsite/icons/gd_orbs.png new file mode 100644 index 00000000..44f6e835 Binary files /dev/null and b/thirtydollarwebsite/icons/gd_orbs.png differ diff --git a/thirtydollarwebsite/icons/gd_quit.png b/thirtydollarwebsite/icons/gd_quit.png new file mode 100644 index 00000000..47726ebf Binary files /dev/null and b/thirtydollarwebsite/icons/gd_quit.png differ diff --git a/thirtydollarwebsite/icons/gdcrash.png b/thirtydollarwebsite/icons/gdcrash.png new file mode 100644 index 00000000..e173d4b7 Binary files /dev/null and b/thirtydollarwebsite/icons/gdcrash.png differ diff --git a/thirtydollarwebsite/icons/gdcrash_orbs.png b/thirtydollarwebsite/icons/gdcrash_orbs.png new file mode 100644 index 00000000..9045afed Binary files /dev/null and b/thirtydollarwebsite/icons/gdcrash_orbs.png differ diff --git a/thirtydollarwebsite/icons/gnome.png b/thirtydollarwebsite/icons/gnome.png new file mode 100644 index 00000000..2b491f1d Binary files /dev/null and b/thirtydollarwebsite/icons/gnome.png differ diff --git a/thirtydollarwebsite/icons/granddad.png b/thirtydollarwebsite/icons/granddad.png new file mode 100644 index 00000000..1c19f80f Binary files /dev/null and b/thirtydollarwebsite/icons/granddad.png differ diff --git a/thirtydollarwebsite/icons/gun.png b/thirtydollarwebsite/icons/gun.png new file mode 100644 index 00000000..30091071 Binary files /dev/null and b/thirtydollarwebsite/icons/gun.png differ diff --git a/thirtydollarwebsite/icons/hammer.png b/thirtydollarwebsite/icons/hammer.png new file mode 100644 index 00000000..5e26d734 Binary files /dev/null and b/thirtydollarwebsite/icons/hammer.png differ diff --git a/thirtydollarwebsite/icons/hehehehaw.png b/thirtydollarwebsite/icons/hehehehaw.png new file mode 100644 index 00000000..30bf42c5 Binary files /dev/null and b/thirtydollarwebsite/icons/hehehehaw.png differ diff --git a/thirtydollarwebsite/icons/hitmarker.png b/thirtydollarwebsite/icons/hitmarker.png new file mode 100644 index 00000000..d7764e4d Binary files /dev/null and b/thirtydollarwebsite/icons/hitmarker.png differ diff --git a/thirtydollarwebsite/icons/hoenn.png b/thirtydollarwebsite/icons/hoenn.png new file mode 100644 index 00000000..5f2d8ed1 Binary files /dev/null and b/thirtydollarwebsite/icons/hoenn.png differ diff --git a/thirtydollarwebsite/icons/isaac_dead.png b/thirtydollarwebsite/icons/isaac_dead.png new file mode 100644 index 00000000..531a96d9 Binary files /dev/null and b/thirtydollarwebsite/icons/isaac_dead.png differ diff --git a/thirtydollarwebsite/icons/isaac_hurt.png b/thirtydollarwebsite/icons/isaac_hurt.png new file mode 100644 index 00000000..4e89a39c Binary files /dev/null and b/thirtydollarwebsite/icons/isaac_hurt.png differ diff --git a/thirtydollarwebsite/icons/isaac_mantle.png b/thirtydollarwebsite/icons/isaac_mantle.png new file mode 100644 index 00000000..fa6b9040 Binary files /dev/null and b/thirtydollarwebsite/icons/isaac_mantle.png differ diff --git a/thirtydollarwebsite/icons/karateman_bulb.png b/thirtydollarwebsite/icons/karateman_bulb.png new file mode 100644 index 00000000..e63876bf Binary files /dev/null and b/thirtydollarwebsite/icons/karateman_bulb.png differ diff --git a/thirtydollarwebsite/icons/karateman_hit.png b/thirtydollarwebsite/icons/karateman_hit.png new file mode 100644 index 00000000..37aea1a9 Binary files /dev/null and b/thirtydollarwebsite/icons/karateman_hit.png differ diff --git a/thirtydollarwebsite/icons/karateman_offbeat.png b/thirtydollarwebsite/icons/karateman_offbeat.png new file mode 100644 index 00000000..c449278d Binary files /dev/null and b/thirtydollarwebsite/icons/karateman_offbeat.png differ diff --git a/thirtydollarwebsite/icons/karateman_throw.png b/thirtydollarwebsite/icons/karateman_throw.png new file mode 100644 index 00000000..ec538786 Binary files /dev/null and b/thirtydollarwebsite/icons/karateman_throw.png differ diff --git a/thirtydollarwebsite/icons/lancersplat.png b/thirtydollarwebsite/icons/lancersplat.png new file mode 100644 index 00000000..ed796cb7 Binary files /dev/null and b/thirtydollarwebsite/icons/lancersplat.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_baby.png b/thirtydollarwebsite/icons/mariopaint_baby.png new file mode 100644 index 00000000..d9161d47 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_baby.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_car.png b/thirtydollarwebsite/icons/mariopaint_car.png new file mode 100644 index 00000000..68c564e4 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_car.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_cat.png b/thirtydollarwebsite/icons/mariopaint_cat.png new file mode 100644 index 00000000..61a5eb3a Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_cat.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_dog.png b/thirtydollarwebsite/icons/mariopaint_dog.png new file mode 100644 index 00000000..3322b916 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_dog.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_flower.png b/thirtydollarwebsite/icons/mariopaint_flower.png new file mode 100644 index 00000000..f39d1db1 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_flower.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_gameboy.png b/thirtydollarwebsite/icons/mariopaint_gameboy.png new file mode 100644 index 00000000..14977d8a Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_gameboy.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_luigi.png b/thirtydollarwebsite/icons/mariopaint_luigi.png new file mode 100644 index 00000000..aa80d8db Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_luigi.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_mario.png b/thirtydollarwebsite/icons/mariopaint_mario.png new file mode 100644 index 00000000..246abdb7 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_mario.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_plane.png b/thirtydollarwebsite/icons/mariopaint_plane.png new file mode 100644 index 00000000..7ebce5cc Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_plane.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_star.png b/thirtydollarwebsite/icons/mariopaint_star.png new file mode 100644 index 00000000..68d0e612 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_star.png differ diff --git a/thirtydollarwebsite/icons/mariopaint_swan.png b/thirtydollarwebsite/icons/mariopaint_swan.png new file mode 100644 index 00000000..a382a742 Binary files /dev/null and b/thirtydollarwebsite/icons/mariopaint_swan.png differ diff --git a/thirtydollarwebsite/icons/megalovania.png b/thirtydollarwebsite/icons/megalovania.png new file mode 100644 index 00000000..30d3b017 Binary files /dev/null and b/thirtydollarwebsite/icons/megalovania.png differ diff --git a/thirtydollarwebsite/icons/metalpipe.png b/thirtydollarwebsite/icons/metalpipe.png new file mode 100644 index 00000000..d39d0c00 Binary files /dev/null and b/thirtydollarwebsite/icons/metalpipe.png differ diff --git a/thirtydollarwebsite/icons/midspin.png b/thirtydollarwebsite/icons/midspin.png new file mode 100644 index 00000000..b3afdaca Binary files /dev/null and b/thirtydollarwebsite/icons/midspin.png differ diff --git a/thirtydollarwebsite/icons/minecraft_anvil.png b/thirtydollarwebsite/icons/minecraft_anvil.png new file mode 100644 index 00000000..656b4ef9 Binary files /dev/null and b/thirtydollarwebsite/icons/minecraft_anvil.png differ diff --git a/thirtydollarwebsite/icons/minecraft_bell.png b/thirtydollarwebsite/icons/minecraft_bell.png new file mode 100644 index 00000000..2ea39119 Binary files /dev/null and b/thirtydollarwebsite/icons/minecraft_bell.png differ diff --git a/thirtydollarwebsite/icons/minecraft_explosion.png b/thirtydollarwebsite/icons/minecraft_explosion.png new file mode 100644 index 00000000..2d32ee73 Binary files /dev/null and b/thirtydollarwebsite/icons/minecraft_explosion.png differ diff --git a/thirtydollarwebsite/icons/morshu.png b/thirtydollarwebsite/icons/morshu.png new file mode 100644 index 00000000..95faf80d Binary files /dev/null and b/thirtydollarwebsite/icons/morshu.png differ diff --git a/thirtydollarwebsite/icons/mrbeast.png b/thirtydollarwebsite/icons/mrbeast.png new file mode 100644 index 00000000..36d6916b Binary files /dev/null and b/thirtydollarwebsite/icons/mrbeast.png differ diff --git a/thirtydollarwebsite/icons/necoarc.png b/thirtydollarwebsite/icons/necoarc.png new file mode 100644 index 00000000..9c98e739 Binary files /dev/null and b/thirtydollarwebsite/icons/necoarc.png differ diff --git a/thirtydollarwebsite/icons/nope.png b/thirtydollarwebsite/icons/nope.png new file mode 100644 index 00000000..6b95174d Binary files /dev/null and b/thirtydollarwebsite/icons/nope.png differ diff --git a/thirtydollarwebsite/icons/noteblock_banjo.png b/thirtydollarwebsite/icons/noteblock_banjo.png new file mode 100644 index 00000000..d2d7eb2f Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_banjo.png differ diff --git a/thirtydollarwebsite/icons/noteblock_bass.png b/thirtydollarwebsite/icons/noteblock_bass.png new file mode 100644 index 00000000..1b99d79e Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_bass.png differ diff --git a/thirtydollarwebsite/icons/noteblock_bell.png b/thirtydollarwebsite/icons/noteblock_bell.png new file mode 100644 index 00000000..1dd03296 Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_bell.png differ diff --git a/thirtydollarwebsite/icons/noteblock_bit.png b/thirtydollarwebsite/icons/noteblock_bit.png new file mode 100644 index 00000000..00e04c51 Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_bit.png differ diff --git a/thirtydollarwebsite/icons/noteblock_chime.png b/thirtydollarwebsite/icons/noteblock_chime.png new file mode 100644 index 00000000..61a7c354 Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_chime.png differ diff --git a/thirtydollarwebsite/icons/noteblock_click.png b/thirtydollarwebsite/icons/noteblock_click.png new file mode 100644 index 00000000..458d306b Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_click.png differ diff --git a/thirtydollarwebsite/icons/noteblock_flute.png b/thirtydollarwebsite/icons/noteblock_flute.png new file mode 100644 index 00000000..4583079d Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_flute.png differ diff --git a/thirtydollarwebsite/icons/noteblock_guitar.png b/thirtydollarwebsite/icons/noteblock_guitar.png new file mode 100644 index 00000000..7efa463d Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_guitar.png differ diff --git a/thirtydollarwebsite/icons/noteblock_harp.png b/thirtydollarwebsite/icons/noteblock_harp.png new file mode 100644 index 00000000..557536c0 Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_harp.png differ diff --git a/thirtydollarwebsite/icons/noteblock_pling.png b/thirtydollarwebsite/icons/noteblock_pling.png new file mode 100644 index 00000000..32c76808 Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_pling.png differ diff --git a/thirtydollarwebsite/icons/noteblock_snare.png b/thirtydollarwebsite/icons/noteblock_snare.png new file mode 100644 index 00000000..1b638d70 Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_snare.png differ diff --git a/thirtydollarwebsite/icons/noteblock_xylophone.png b/thirtydollarwebsite/icons/noteblock_xylophone.png new file mode 100644 index 00000000..f9885cda Binary files /dev/null and b/thirtydollarwebsite/icons/noteblock_xylophone.png differ diff --git a/thirtydollarwebsite/icons/obama.png b/thirtydollarwebsite/icons/obama.png new file mode 100644 index 00000000..69949ded Binary files /dev/null and b/thirtydollarwebsite/icons/obama.png differ diff --git a/thirtydollarwebsite/icons/oof.png b/thirtydollarwebsite/icons/oof.png new file mode 100644 index 00000000..58d44ddd Binary files /dev/null and b/thirtydollarwebsite/icons/oof.png differ diff --git a/thirtydollarwebsite/icons/ook.png b/thirtydollarwebsite/icons/ook.png new file mode 100644 index 00000000..efbab026 Binary files /dev/null and b/thirtydollarwebsite/icons/ook.png differ diff --git a/thirtydollarwebsite/icons/op.png b/thirtydollarwebsite/icons/op.png new file mode 100644 index 00000000..a71fd4c2 Binary files /dev/null and b/thirtydollarwebsite/icons/op.png differ diff --git a/thirtydollarwebsite/icons/otto_happy.png b/thirtydollarwebsite/icons/otto_happy.png new file mode 100644 index 00000000..66e129ac Binary files /dev/null and b/thirtydollarwebsite/icons/otto_happy.png differ diff --git a/thirtydollarwebsite/icons/otto_off.png b/thirtydollarwebsite/icons/otto_off.png new file mode 100644 index 00000000..ecf0c544 Binary files /dev/null and b/thirtydollarwebsite/icons/otto_off.png differ diff --git a/thirtydollarwebsite/icons/otto_on.png b/thirtydollarwebsite/icons/otto_on.png new file mode 100644 index 00000000..5c30b7a7 Binary files /dev/null and b/thirtydollarwebsite/icons/otto_on.png differ diff --git a/thirtydollarwebsite/icons/otto_stress.png b/thirtydollarwebsite/icons/otto_stress.png new file mode 100644 index 00000000..86effb87 Binary files /dev/null and b/thirtydollarwebsite/icons/otto_stress.png differ diff --git a/thirtydollarwebsite/icons/pan.png b/thirtydollarwebsite/icons/pan.png new file mode 100644 index 00000000..3fd6ae11 Binary files /dev/null and b/thirtydollarwebsite/icons/pan.png differ diff --git a/thirtydollarwebsite/icons/perfectfail.png b/thirtydollarwebsite/icons/perfectfail.png new file mode 100644 index 00000000..0ff7deba Binary files /dev/null and b/thirtydollarwebsite/icons/perfectfail.png differ diff --git a/thirtydollarwebsite/icons/pingas.png b/thirtydollarwebsite/icons/pingas.png new file mode 100644 index 00000000..6e9a103e Binary files /dev/null and b/thirtydollarwebsite/icons/pingas.png differ diff --git a/thirtydollarwebsite/icons/preecho.png b/thirtydollarwebsite/icons/preecho.png new file mode 100644 index 00000000..7f7aa899 Binary files /dev/null and b/thirtydollarwebsite/icons/preecho.png differ diff --git a/thirtydollarwebsite/icons/puyo.png b/thirtydollarwebsite/icons/puyo.png new file mode 100644 index 00000000..cc8a0446 Binary files /dev/null and b/thirtydollarwebsite/icons/puyo.png differ diff --git a/thirtydollarwebsite/icons/rdclap.png b/thirtydollarwebsite/icons/rdclap.png new file mode 100644 index 00000000..e5da4938 Binary files /dev/null and b/thirtydollarwebsite/icons/rdclap.png differ diff --git a/thirtydollarwebsite/icons/rdmistake.png b/thirtydollarwebsite/icons/rdmistake.png new file mode 100644 index 00000000..8821a62c Binary files /dev/null and b/thirtydollarwebsite/icons/rdmistake.png differ diff --git a/thirtydollarwebsite/icons/ride2.png b/thirtydollarwebsite/icons/ride2.png new file mode 100644 index 00000000..c7f43517 Binary files /dev/null and b/thirtydollarwebsite/icons/ride2.png differ diff --git a/thirtydollarwebsite/icons/robtopphone.png b/thirtydollarwebsite/icons/robtopphone.png new file mode 100644 index 00000000..82285353 Binary files /dev/null and b/thirtydollarwebsite/icons/robtopphone.png differ diff --git a/thirtydollarwebsite/icons/samurai.png b/thirtydollarwebsite/icons/samurai.png new file mode 100644 index 00000000..6203f04f Binary files /dev/null and b/thirtydollarwebsite/icons/samurai.png differ diff --git a/thirtydollarwebsite/icons/sans_voice.png b/thirtydollarwebsite/icons/sans_voice.png new file mode 100644 index 00000000..24410b45 Binary files /dev/null and b/thirtydollarwebsite/icons/sans_voice.png differ diff --git a/thirtydollarwebsite/icons/shaker.png b/thirtydollarwebsite/icons/shaker.png new file mode 100644 index 00000000..f8d8f135 Binary files /dev/null and b/thirtydollarwebsite/icons/shaker.png differ diff --git a/thirtydollarwebsite/icons/shatter.png b/thirtydollarwebsite/icons/shatter.png new file mode 100644 index 00000000..45754909 Binary files /dev/null and b/thirtydollarwebsite/icons/shatter.png differ diff --git a/thirtydollarwebsite/icons/sidestick.png b/thirtydollarwebsite/icons/sidestick.png new file mode 100644 index 00000000..9e365a81 Binary files /dev/null and b/thirtydollarwebsite/icons/sidestick.png differ diff --git a/thirtydollarwebsite/icons/skipshot.png b/thirtydollarwebsite/icons/skipshot.png new file mode 100644 index 00000000..54395090 Binary files /dev/null and b/thirtydollarwebsite/icons/skipshot.png differ diff --git a/thirtydollarwebsite/icons/slip.png b/thirtydollarwebsite/icons/slip.png new file mode 100644 index 00000000..7ca53de4 Binary files /dev/null and b/thirtydollarwebsite/icons/slip.png differ diff --git a/thirtydollarwebsite/icons/sm64_hurt.png b/thirtydollarwebsite/icons/sm64_hurt.png new file mode 100644 index 00000000..5bac2ed1 Binary files /dev/null and b/thirtydollarwebsite/icons/sm64_hurt.png differ diff --git a/thirtydollarwebsite/icons/sm64_painting.png b/thirtydollarwebsite/icons/sm64_painting.png new file mode 100644 index 00000000..20a08dee Binary files /dev/null and b/thirtydollarwebsite/icons/sm64_painting.png differ diff --git a/thirtydollarwebsite/icons/smm_scream.png b/thirtydollarwebsite/icons/smm_scream.png new file mode 100644 index 00000000..1cd36c54 Binary files /dev/null and b/thirtydollarwebsite/icons/smm_scream.png differ diff --git a/thirtydollarwebsite/icons/smw_1up.png b/thirtydollarwebsite/icons/smw_1up.png new file mode 100644 index 00000000..c5dab611 Binary files /dev/null and b/thirtydollarwebsite/icons/smw_1up.png differ diff --git a/thirtydollarwebsite/icons/smw_coin.png b/thirtydollarwebsite/icons/smw_coin.png new file mode 100644 index 00000000..8163b0b9 Binary files /dev/null and b/thirtydollarwebsite/icons/smw_coin.png differ diff --git a/thirtydollarwebsite/icons/smw_kick.png b/thirtydollarwebsite/icons/smw_kick.png new file mode 100644 index 00000000..c8ccf380 Binary files /dev/null and b/thirtydollarwebsite/icons/smw_kick.png differ diff --git a/thirtydollarwebsite/icons/smw_spinjump.png b/thirtydollarwebsite/icons/smw_spinjump.png new file mode 100644 index 00000000..c5c8a10d Binary files /dev/null and b/thirtydollarwebsite/icons/smw_spinjump.png differ diff --git a/thirtydollarwebsite/icons/smw_stomp.png b/thirtydollarwebsite/icons/smw_stomp.png new file mode 100644 index 00000000..c5c0b2e5 Binary files /dev/null and b/thirtydollarwebsite/icons/smw_stomp.png differ diff --git a/thirtydollarwebsite/icons/smw_stomp2.png b/thirtydollarwebsite/icons/smw_stomp2.png new file mode 100644 index 00000000..8fe0ee24 Binary files /dev/null and b/thirtydollarwebsite/icons/smw_stomp2.png differ diff --git a/thirtydollarwebsite/icons/smw_yoshi.png b/thirtydollarwebsite/icons/smw_yoshi.png new file mode 100644 index 00000000..69241cb2 Binary files /dev/null and b/thirtydollarwebsite/icons/smw_yoshi.png differ diff --git a/thirtydollarwebsite/icons/steve_oof.png b/thirtydollarwebsite/icons/steve_oof.png new file mode 100644 index 00000000..66ae0301 Binary files /dev/null and b/thirtydollarwebsite/icons/steve_oof.png differ diff --git a/thirtydollarwebsite/icons/stopposting.png b/thirtydollarwebsite/icons/stopposting.png new file mode 100644 index 00000000..e3eb70e4 Binary files /dev/null and b/thirtydollarwebsite/icons/stopposting.png differ diff --git a/thirtydollarwebsite/icons/subaluwa.png b/thirtydollarwebsite/icons/subaluwa.png new file mode 100644 index 00000000..dec707b6 Binary files /dev/null and b/thirtydollarwebsite/icons/subaluwa.png differ diff --git a/thirtydollarwebsite/icons/tab_actions.png b/thirtydollarwebsite/icons/tab_actions.png new file mode 100644 index 00000000..4d286cc6 Binary files /dev/null and b/thirtydollarwebsite/icons/tab_actions.png differ diff --git a/thirtydollarwebsite/icons/tab_decorations.png b/thirtydollarwebsite/icons/tab_decorations.png new file mode 100644 index 00000000..335f68bc Binary files /dev/null and b/thirtydollarwebsite/icons/tab_decorations.png differ diff --git a/thirtydollarwebsite/icons/tab_rooms.png b/thirtydollarwebsite/icons/tab_rooms.png new file mode 100644 index 00000000..74cf4268 Binary files /dev/null and b/thirtydollarwebsite/icons/tab_rooms.png differ diff --git a/thirtydollarwebsite/icons/tab_rows.png b/thirtydollarwebsite/icons/tab_rows.png new file mode 100644 index 00000000..4187c802 Binary files /dev/null and b/thirtydollarwebsite/icons/tab_rows.png differ diff --git a/thirtydollarwebsite/icons/tab_sounds.png b/thirtydollarwebsite/icons/tab_sounds.png new file mode 100644 index 00000000..25ecacdd Binary files /dev/null and b/thirtydollarwebsite/icons/tab_sounds.png differ diff --git a/thirtydollarwebsite/icons/taiko_don.png b/thirtydollarwebsite/icons/taiko_don.png new file mode 100644 index 00000000..7752eb3e Binary files /dev/null and b/thirtydollarwebsite/icons/taiko_don.png differ diff --git a/thirtydollarwebsite/icons/taiko_ka.png b/thirtydollarwebsite/icons/taiko_ka.png new file mode 100644 index 00000000..d6543b36 Binary files /dev/null and b/thirtydollarwebsite/icons/taiko_ka.png differ diff --git a/thirtydollarwebsite/icons/taunt.png b/thirtydollarwebsite/icons/taunt.png new file mode 100644 index 00000000..29692a53 Binary files /dev/null and b/thirtydollarwebsite/icons/taunt.png differ diff --git a/thirtydollarwebsite/icons/terraria_axe.png b/thirtydollarwebsite/icons/terraria_axe.png new file mode 100644 index 00000000..92ad4e14 Binary files /dev/null and b/thirtydollarwebsite/icons/terraria_axe.png differ diff --git a/thirtydollarwebsite/icons/terraria_guitar.png b/thirtydollarwebsite/icons/terraria_guitar.png new file mode 100644 index 00000000..1d21dd87 Binary files /dev/null and b/thirtydollarwebsite/icons/terraria_guitar.png differ diff --git a/thirtydollarwebsite/icons/terraria_pot.png b/thirtydollarwebsite/icons/terraria_pot.png new file mode 100644 index 00000000..20a0de6c Binary files /dev/null and b/thirtydollarwebsite/icons/terraria_pot.png differ diff --git a/thirtydollarwebsite/icons/terraria_reforge.png b/thirtydollarwebsite/icons/terraria_reforge.png new file mode 100644 index 00000000..7d56412b Binary files /dev/null and b/thirtydollarwebsite/icons/terraria_reforge.png differ diff --git a/thirtydollarwebsite/icons/terraria_star.png b/thirtydollarwebsite/icons/terraria_star.png new file mode 100644 index 00000000..41d468b3 Binary files /dev/null and b/thirtydollarwebsite/icons/terraria_star.png differ diff --git a/thirtydollarwebsite/icons/tf2_crit.png b/thirtydollarwebsite/icons/tf2_crit.png new file mode 100644 index 00000000..2e2fc267 Binary files /dev/null and b/thirtydollarwebsite/icons/tf2_crit.png differ diff --git a/thirtydollarwebsite/icons/thwomp.png b/thirtydollarwebsite/icons/thwomp.png new file mode 100644 index 00000000..5a53a001 Binary files /dev/null and b/thirtydollarwebsite/icons/thwomp.png differ diff --git a/thirtydollarwebsite/icons/toby.png b/thirtydollarwebsite/icons/toby.png new file mode 100644 index 00000000..056a9cfa Binary files /dev/null and b/thirtydollarwebsite/icons/toby.png differ diff --git a/thirtydollarwebsite/icons/tonk.png b/thirtydollarwebsite/icons/tonk.png new file mode 100644 index 00000000..a121f53d Binary files /dev/null and b/thirtydollarwebsite/icons/tonk.png differ diff --git a/thirtydollarwebsite/icons/ultrainstinct.png b/thirtydollarwebsite/icons/ultrainstinct.png new file mode 100644 index 00000000..336a6e4a Binary files /dev/null and b/thirtydollarwebsite/icons/ultrainstinct.png differ diff --git a/thirtydollarwebsite/icons/undertale_crack.png b/thirtydollarwebsite/icons/undertale_crack.png new file mode 100644 index 00000000..efe5bea3 Binary files /dev/null and b/thirtydollarwebsite/icons/undertale_crack.png differ diff --git a/thirtydollarwebsite/icons/undertale_encounter.png b/thirtydollarwebsite/icons/undertale_encounter.png new file mode 100644 index 00000000..11f8758e Binary files /dev/null and b/thirtydollarwebsite/icons/undertale_encounter.png differ diff --git a/thirtydollarwebsite/icons/undertale_hit.png b/thirtydollarwebsite/icons/undertale_hit.png new file mode 100644 index 00000000..e6cb1ffe Binary files /dev/null and b/thirtydollarwebsite/icons/undertale_hit.png differ diff --git a/thirtydollarwebsite/icons/vvvvvv_checkpoint.png b/thirtydollarwebsite/icons/vvvvvv_checkpoint.png new file mode 100644 index 00000000..00bd1be7 Binary files /dev/null and b/thirtydollarwebsite/icons/vvvvvv_checkpoint.png differ diff --git a/thirtydollarwebsite/icons/vvvvvv_flash.png b/thirtydollarwebsite/icons/vvvvvv_flash.png new file mode 100644 index 00000000..c6193512 Binary files /dev/null and b/thirtydollarwebsite/icons/vvvvvv_flash.png differ diff --git a/thirtydollarwebsite/icons/vvvvvv_flip.png b/thirtydollarwebsite/icons/vvvvvv_flip.png new file mode 100644 index 00000000..c17e50e3 Binary files /dev/null and b/thirtydollarwebsite/icons/vvvvvv_flip.png differ diff --git a/thirtydollarwebsite/icons/vvvvvv_hurt.png b/thirtydollarwebsite/icons/vvvvvv_hurt.png new file mode 100644 index 00000000..bcf8f34f Binary files /dev/null and b/thirtydollarwebsite/icons/vvvvvv_hurt.png differ diff --git a/thirtydollarwebsite/icons/whatsapp.png b/thirtydollarwebsite/icons/whatsapp.png new file mode 100644 index 00000000..4c0744ce Binary files /dev/null and b/thirtydollarwebsite/icons/whatsapp.png differ diff --git a/thirtydollarwebsite/icons/whipcrack.png b/thirtydollarwebsite/icons/whipcrack.png new file mode 100644 index 00000000..0d0bdc13 Binary files /dev/null and b/thirtydollarwebsite/icons/whipcrack.png differ diff --git a/thirtydollarwebsite/icons/yahoo.png b/thirtydollarwebsite/icons/yahoo.png new file mode 100644 index 00000000..3f46c755 Binary files /dev/null and b/thirtydollarwebsite/icons/yahoo.png differ diff --git a/thirtydollarwebsite/icons/yoda.png b/thirtydollarwebsite/icons/yoda.png new file mode 100644 index 00000000..7b109efb Binary files /dev/null and b/thirtydollarwebsite/icons/yoda.png differ diff --git a/thirtydollarwebsite/index.html b/thirtydollarwebsite/index.html new file mode 100644 index 00000000..1a632fe9 --- /dev/null +++ b/thirtydollarwebsite/index.html @@ -0,0 +1,400 @@ + + + + DON'T YOU LECTURE ME WITH YOUR THIRTY DOLLAR WEBSITE + + + + + + + + + + + + + + + +
+ +

DON'T YOU LECTURE ME WITH YOUR THIRTY DOLLAR WEBSITE

+ +
+ +
+
+
+

Sounds

+

+ + +

+

Left click to add sound

Right click to preview

+
+
+
+

Loading...

+

+

+
+
+ +
+
+

Actions

+

+ + +

+

Left click to add action

+
+
+ +
+ + + +

Right click to skip intro

+
+ +

Play

+
+ +
+ +

Clear

+
+ +
+
+
+ +
+
+

Sequence

+ +

Left click to remove

+

Right click to preview

+

Shift click to clone

+

Scroll to change pitch

+

Ctrl+scroll to change volume

+ +
+
+
+
+ + + + + + + +
+ +

.🗿

+
+ + + +
+

+ NEW: 12 new sounds for all your particle accelerator needs +

Check out my other silly projects over at gdcolon.com

+
+ +
+

Created by Colon :

+

I own pretty much nothing on this site please don't kill me

+
+ +
+ + +
+ +
+
+ +

PRO MODE

+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/thirtydollarwebsite/sounds.json b/thirtydollarwebsite/sounds.json new file mode 100644 index 00000000..352a16d4 --- /dev/null +++ b/thirtydollarwebsite/sounds.json @@ -0,0 +1,222 @@ +[ + { "id": "_pause", "img": "empty", "name": "Silence", "source": "", "tags": ["note", "percussion"] }, + { "id": "boom", "name": "Vine Boom", "source": "", "tags": ["percussion"] }, + { "id": "bruh", "name": "Bruh Sound Effect #2", "source": "" }, + { "id": "bong", "name": "Bong", "source": "Taco Bell", "tags": ["note"] }, + { "id": "skeleton", "emoji": "💀", "name": "Skeleton", "source": "Minecraft" }, + { "id": "clap", "emoji": "👏", "name": "Reverb Clap", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "dog", "emoji": "🐶", "name": "what the dog doin", "source": "TonyBakerComedy" }, + { "id": "cave", "emoji": "👽", "name": "Cave Noise", "source": "Minecraft" }, + { "id": "bell", "emoji": "🔔", "name": "Bell", "source": "", "tags": ["note"] }, + { "id": "boink", "emoji": "💢", "name": "Boink", "source": "Rhythm Heaven" }, + { "id": "fart", "emoji": "💨", "name": "Reverb Fart", "source": "", "tags": ["percussion"] }, + { "id": "error", "emoji": "🚫", "name": "Error", "source": "Windows XP", "tags": ["note"] }, + + { "id": "kaching", "emoji": "💰", "name": "Kaching", "source": "" }, + { "id": "bonk", "emoji": "🏏", "name": "Bonk", "source": "", "tags": ["percussion"] }, + { "id": "bleep", "emoji": "🤬", "name": "Bleep", "source": "", "tags": ["note"] }, + { "id": "alarm", "emoji": "🚨", "name": "Alarm", "source": "" }, + { "id": "buzzer", "name": "Incorrect Buzzer", "source": "", "tags": ["note"] }, + { "id": "aah", "emoji": "🅰", "name": "aah", "source": "Zaytoven" }, + { "id": "e", "name": "E", "source": "Unknown" }, + { "id": "eight", "name": "8", "source": "The Stanley Parable" }, + { "id": "pizza", "emoji": "🍕", "name": "ayo the pizza here", "source": "CalebCity" }, + { "id": "augh", "emoji": "🐡", "name": "Pufferfish Augh", "source": "Yummyboy" }, + { "id": "quack", "emoji": "🦆", "name": "Quack", "source": "Mac OS" }, + { "id": "honk", "emoji": "🦢", "name": "Honk", "source": "Untitled Goose Game" }, + + { "id": "samsung", "emoji": "📲", "name": "Skyline Notification", "source": "Samsung" }, + { "id": "morningflower", "emoji": "🌄", "name": "Morning Flower", "source": "Samsung" }, + { "id": "shatter", "name": "Glass Shatter", "source": "", "tags": ["percussion"] }, + { "id": "noice", "emoji": "👌", "name": "Noice Click", "source": "Michael Rosen", "tags": ["percussion"] }, + { "id": "slap", "emoji": "🖐", "name": "Slap", "source": "", "tags": ["percussion"] }, + { "id": "krabs", "emoji": "🦀", "name": "Mr. Krabs Walking", "source": "SpongeBob SquarePants" }, + { "id": "wowowow", "emoji": "🚬", "name": "wowowowow", "source": "Kill Bill" }, + { "id": "whatsapp", "name": "Whistle Notification", "source": "Samsung" }, + { "id": "recordscratch", "emoji": "💿", "name": "Record Scratch", "source": "" }, + { "id": "pianoriff", "emoji": "🎹", "name": "Piano Riff", "source": "iPhone" }, + { "id": "alert", "emoji": "❗", "name": "Alert", "source": "Metal Gear Solid" }, + { "id": "slip", "name": "Slip", "source": "" }, + + { "id": "tada", "emoji": "🎉", "name": "Tada", "source": "Windows 3.1" }, + { "id": "pan", "name": "Frying Pan", "source": "Scott the Woz", "tags": ["percussion"] }, + { "id": "gun", "name": "Gun Reload", "source": "" }, + { "id": "hitmarker", "name": "Hitmarker", "source": "Call of Duty", "tags": ["percussion"] }, + { "id": "suspense", "emoji": "😱", "name": "Suspense", "source": "" }, + { "id": "yawn", "emoji": "🥱", "name": "Goofy Yawn", "source": ".mlkey(?)" }, + { "id": "nerdhorn", "emoji": "🤓", "name": "Old Car Horn", "source": "iPhone" }, + { "id": "babylaugh", "emoji": "👶", "name": "Baby Laugh", "source": "" }, + { "id": "airhorn", "name": "Airhorn", "source": "", "tags": ["note"] }, + { "id": "metalpipe", "name": "Metal Pipe", "source": "" }, + { "id": "boing", "name": "Boing", "source": "" }, + { "id": "explosion", "name": "Explosion", "source": "DELTARUNE" }, + + { "id": "dodgeball", "name": "Dodgeball", "source": "", "tags": ["percussion"] }, + { "id": "whipcrack", "name": "Whip Crack", "source": "", "tags": ["percussion"] }, + { "id": "boowomp", "name": "Boowomp", "source": "SpongeBob SquarePants" }, + { "id": "taiko_don", "name": "Don", "source": "Taiko no Tatsujin", "tags": ["percussion"] }, + { "id": "taiko_ka", "name": "Ka", "source": "Taiko no Tatsujin", "tags": ["percussion"] }, + { "id": "puyo", "name": "Puyo", "source": "Puyo Puyo", "tags": ["note"] }, + { "id": "robtopphone", "name": "Xylophone", "source": "", "tags": ["note"] }, + { "id": "waterphone", "emoji": "🎻", "name": "Waterphone", "source": "Hell's Kitchen" }, + { "id": "slapbass", "emoji": "🎸", "name": "Slap Bass", "source": "", "tags": ["note"] }, + { "id": "dimrainsynth", "name": "Synth", "source": "", "tags": ["note"] }, + { "id": "hoenn", "name": "Hoenn Trumpet", "source": "Pokémon", "tags": ["note"] }, + { "id": "zunpet", "emoji": "🎺", "name": "ZUNpet", "source": "Touhou", "tags": ["note"] }, + + { "id": "oof", "name": "Oof", "source": "Roblox" }, + { "id": "steve_oof", "name": "Oof", "source": "Minecraft" }, + { "id": "gnome", "name": "Gnome", "source": "You've Been Gnomed" }, + { "id": "nope", "name": "nope.avi", "source": "Team Fortress 2" }, + { "id": "tf2_crit", "name": "Critical Hit", "source": "Team Fortress 2", "tags": ["percussion"] }, + { "id": "mrbeast", "name": "MR BEAST", "source": "Freshy Kanal" }, + { "id": "obama", "name": "BARACK OBAMA", "source": "ERB", "tags": ["note"] }, + { "id": "op", "name": "op", "source": "Psy" }, + { "id": "SLAM", "name": "SLAM!", "source": "Space Jam" }, + { "id": "stopposting", "name": "Ding", "source": "biggayrapper" }, + { "id": "21", "name": "21", "source": "DREHYPEMSU" }, + { "id": "americano", "name": "dog dancing we no speak americano", "source": "Unknown" }, + + { "id": "taunt", "name": "Taunt", "source": "Pizza Tower", "tags": ["note"] }, + { "id": "subaluwa", "name": "Subaluwa", "source": "Ed, Edd n Eddy" }, + { "id": "necoarc", "name": "Neco-Arc", "source": "Carnival Phantasm" }, + { "id": "samurai", "name": "Samurai Techno", "source": "Rhythm Doctor", "tags": ["note"] }, + { "id": "flipnote", "name": "Frog", "source": "Flipnote Studio" }, + { "id": "familyguy", "name": "Family Guy Intro", "source": "Family Guy", "tags": ["note"] }, + { "id": "pingas", "name": "PINGAS", "source": "AoStH" }, + { "id": "yoda", "name": "Lego Yoda Death", "source": "LEGO Star Wars" }, + { "id": "hehehehaw", "name": "HE HE HE HAW", "source": "Clash Royale" }, + { "id": "ultrainstinct", "name": "Ultra Instinct", "source": "Dragon Ball Z", "tags": ["note"] }, + { "id": "granddad", "name": "GRAND DAD", "source": "Vargskelethor Joel" }, + { "id": "morshu", "name": "Morshu MMMMMMM", "source": "Link: The Faces of Evil", "tags": ["note"] }, + + { "id": "smw_coin", "name": "Coin", "source": "Super Mario World" }, + { "id": "smw_1up", "name": "1-Up", "source": "Super Mario World" }, + { "id": "smw_spinjump", "name": "Spin Jump", "source": "Super Mario World" }, + { "id": "smw_stomp2", "name": "Stomp", "source": "Super Mario World", "tags": ["percussion"] }, + { "id": "smw_kick", "name": "Kick", "source": "Super Mario World" }, + { "id": "smw_stomp", "name": "Boss Stomp", "source": "Super Mario World" }, + { "id": "yahoo", "name": "Long Jump", "source": "Super Mario 64" }, + { "id": "sm64_hurt", "name": "Damage", "source": "Super Mario 64" }, + { "id": "thwomp", "name": "Thwomp", "source": "Super Mario 64" }, + { "id": "bup", "name": "Bup", "source": "Mario Kart 64", "tags": ["note"] }, + { "id": "sm64_painting", "name": "Painting", "source": "Super Mario 64", "tags": ["percussion"] }, + { "id": "smm_scream", "name": "Scream", "source": "Super Mario Maker" }, + + { "id": "mariopaint_mario", "name": "Mario", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_luigi", "name": "Steel Drum", "source": "Super Mario World", "tags": ["note"] }, + { "id": "smw_yoshi", "name": "Yoshi", "source": "Mario Paint" }, + { "id": "mariopaint_star", "name": "Star", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_flower", "name": "Flower", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_gameboy", "name": "Gameboy", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_dog", "name": "Dog", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_cat", "name": "Cat", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_swan", "name": "Swan", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_baby", "name": "Baby", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_plane", "name": "Plane", "source": "Mario Paint", "tags": ["note"] }, + { "id": "mariopaint_car", "name": "Car", "source": "Mario Paint", "tags": ["note"] }, + + { "id": "shaker", "name": "Shaker", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "kick", "emoji": "🥁", "name": "Kick", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "hammer", "name": "Hammer", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "tom", "emoji": "🪘", "name": "Tom Drum", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "sidestick", "name": "Sidestick", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "ride2", "name": "Ride", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "buttonpop", "name": "Pop", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "skipshot", "name": "Skipshot", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "otto_on", "name": "Otto - Enabled", "source": "Rhythm Doctor" }, + { "id": "otto_off", "name": "Otto - Disabled", "source": "Rhythm Doctor" }, + { "id": "otto_happy", "name": "Otto - Happy", "source": "Rhythm Doctor" }, + { "id": "otto_stress", "name": "Otto - Stressed", "source": "A Dance of Fire And Ice" }, + + { "id": "tab_sounds", "name": "Sounds Tab", "source": "Rhythm Doctor", "tags": ["note"] }, + { "id": "tab_rows", "name": "Rows Tab", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "tab_actions", "name": "Actions Tab", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "tab_decorations", "name": "Decorations Tab", "source": "Rhythm Doctor" }, + { "id": "tab_rooms", "name": "Rooms Tab", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "preecho", "name": "Pre-echo Clap", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "tonk", "name": "Tonk", "source": "Rhythm Doctor" }, + { "id": "rdclap", "name": "Clap Hit", "source": "Rhythm Doctor", "tags": ["percussion"] }, + { "id": "rdmistake", "name": "Mistake", "source": "Rhythm Doctor" }, + { "id": "midspin", "name": "Midspin Clack", "source": "A Dance of Fire and Ice", "tags": ["percussion"] }, + { "id": "adofai_fire", "name": "Fire Midspin", "source": "A Dance of Fire and Ice", "tags": ["percussion"] }, + { "id": "adofai_ice", "name": "Ice Midspin", "source": "A Dance of Fire and Ice", "tags": ["percussion"] }, + + { "id": "adofaikick", "name": "Kick", "source": "A Dance of Fire and Ice", "tags": ["percussion"] }, + { "id": "adofaicymbal", "name": "Level Complete", "source": "A Dance of Fire and Ice", "tags": ["percussion"] }, + { "id": "cowbell", "name": "Cowbell", "source": "Rhythm Heaven", "tags": ["percussion"] }, + { "id": "karateman_throw", "name": "Karate Man - Toss", "source": "Rhythm Heaven", "tags": ["percussion"] }, + { "id": "karateman_offbeat", "name": "Karate Man - Offbeat Toss", "source": "Rhythm Heaven", "tags": ["percussion"] }, + { "id": "karateman_hit", "name": "Karate Man - Hit", "source": "Rhythm Heaven", "tags": ["percussion"] }, + { "id": "karateman_bulb", "name": "Karate Man - Bulb", "source": "Rhythm Heaven", "tags": ["percussion"] }, + { "id": "ook", "name": "Ook", "source": "Rhythm Heaven" }, + { "id": "choruskid", "name": "Chorus Kid", "source": "Rhythm Heaven", "tags": ["note"] }, + { "id": "builttoscale", "name": "Widget", "source": "Rhythm Heaven", "tags": ["note"] }, + { "id": "perfectfail", "name": "Perfect Failed", "source": "Rhythm Heaven" }, + { "id": "skillstar", "emoji": "🌟", "name": "Skill Star", "source": "Rhythm Heaven" }, + + { "id": "fnf_left", "name": "Left", "source": "Friday Night Funkin'", "tags": ["note"] }, + { "id": "fnf_down", "name": "Down", "source": "Friday Night Funkin'", "tags": ["note"] }, + { "id": "fnf_up", "name": "Up", "source": "Friday Night Funkin'", "tags": ["note"] }, + { "id": "fnf_right", "name": "Right", "source": "Friday Night Funkin'", "tags": ["note"] }, + { "id": "fnf_death", "name": "Fail", "source": "Friday Night Funkin'" }, + { "id": "gdcrash", "name": "Crash", "source": "Geometry Dash" }, + { "id": "gdcrash_orbs", "name": "Crash + Orbs", "source": "Geometry Dash" }, + { "id": "gd_coin", "name": "Secret Coin", "source": "Geometry Dash" }, + { "id": "gd_orbs", "name": "Mana Orbs", "source": "Geometry Dash" }, + { "id": "gd_diamonds", "name": "Diamond", "source": "Geometry Dash" }, + { "id": "gd_quit", "name": "Quit", "source": "Geometry Dash", "tags": ["note"] }, + { "id": "bwomp", "name": "Blast Processing", "source": "Geometry Dash", "tags": ["note"] }, + + { "id": "undertale_hit", "name": "Damage", "source": "UNDERTALE", "tags": ["percussion"] }, + { "id": "undertale_crack", "name": "Game Over", "source": "UNDERTALE", "tags": ["percussion"] }, + { "id": "sans_voice", "name": "sans", "source": "UNDERTALE" }, + { "id": "megalovania", "name": "Megalovania", "source": "UNDERTALE" }, + { "id": "megalovania_note", "emoji": "🦴", "name": "Megalovania Note", "source": "UNDERTALE", "tags": ["note"] }, + { "id": "undertale_encounter", "name": "Encounter", "source": "UNDERTALE" }, + { "id": "toby", "name": "Bark", "source": "UNDERTALE" }, + { "id": "gaster", "name": "Vanish", "source": "UNDERTALE" }, + { "id": "lancersplat", "name": "Lancer Splat", "source": "DELTARUNE", "tags": ["percussion"] }, + { "id": "isaac_hurt", "name": "Damage", "source": "The Binding of Isaac: Rebirth" }, + { "id": "isaac_dead", "name": "Death", "source": "The Binding of Isaac: Rebirth" }, + { "id": "isaac_mantle", "name": "Holy Mantle", "source": "The Binding of Isaac: Repentance", "tags": ["percussion"] }, + + { "id": "BABA", "name": "MOVE", "source": "Baba Is You" }, + { "id": "YOU", "name": "RULE", "source": "Baba Is You", "tags": ["note"] }, + { "id": "DEFEAT", "name": "DEFEAT", "source": "Baba Is You", "tags": ["percussion"] }, + { "id": "vvvvvv_flip", "name": "Flip", "source": "VVVVVV" }, + { "id": "vvvvvv_hurt", "name": "Sad", "source": "VVVVVV" }, + { "id": "vvvvvv_checkpoint", "name": "Checkpoint", "source": "VVVVVV" }, + { "id": "vvvvvv_flash", "name": "Flash", "source": "VVVVVV", "tags": ["percussion"] }, + { "id": "terraria_star", "name": "Magic", "source": "Terraria" }, + { "id": "terraria_pot", "name": "Shatter", "source": "Terraria" }, + { "id": "terraria_reforge", "name": "Reforge", "source": "Terraria" }, + { "id": "terraria_guitar", "name": "Stellar Tune", "source": "Terraria", "tags": ["note"] }, + { "id": "terraria_axe", "name": "The Axe", "source": "Terraria", "tags": ["note"] }, + + { "id": "celeste_dash", "name": "Dash", "source": "Celeste", "tags": ["percussion"] }, + { "id": "celeste_death", "name": "Death", "source": "Celeste", "tags": ["percussion"] }, + { "id": "celeste_spring", "name": "Spring", "source": "Celeste", "tags": ["percussion"] }, + { "id": "celeste_diamond", "name": "Dash Gem", "source": "Celeste", "tags": ["percussion"] }, + { "id": "amogus_emergency", "name": "Emergency Meeting", "source": "Among Us", "tags": ["note"] }, + { "id": "amogus_kill", "name": "Kill", "source": "Among Us", "tags": ["percussion"] }, + { "id": "amongus", "name": "AMONG US", "source": "Unknown" }, + { "id": "amongdrip", "name": "Among Drip", "source": "Leonz", "tags": ["note"] }, + { "id": "amogus", "name": "Amogus", "source": "Unknown" }, + { "id": "minecraft_explosion", "name": "Explosion", "source": "Minecraft" }, + { "id": "minecraft_anvil", "name": "Anvil", "source": "Minecraft" }, + { "id": "minecraft_bell", "name": "Bell", "source": "Minecraft", "tags": ["note"] }, + + { "id": "noteblock_harp", "name": "Note Block - Harp", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_bass", "name": "Note Block - Bass", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_snare", "name": "Note Block - Snare", "source": "Minecraft", "tags": ["percussion"] }, + { "id": "noteblock_click", "name": "Note Block - Hat", "source": "Minecraft", "tags": ["percussion"] }, + { "id": "noteblock_bell", "name": "Note Block - Bell", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_banjo", "name": "Note Block - Banjo", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_bit", "name": "Note Block - Bit", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_chime", "name": "Note Block - Chime", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_xylophone", "name": "Note Block - Xylophone", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_guitar", "name": "Note Block - Guitar", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_flute", "name": "Note Block - Flute", "source": "Minecraft", "tags": ["note"] }, + { "id": "noteblock_pling", "name": "Note Block - Pling", "source": "Minecraft", "tags": ["note"] } +] \ No newline at end of file diff --git a/thirtydollarwebsite/sounds/21.wav b/thirtydollarwebsite/sounds/21.wav new file mode 100644 index 00000000..a607f239 Binary files /dev/null and b/thirtydollarwebsite/sounds/21.wav differ diff --git a/thirtydollarwebsite/sounds/BABA.wav b/thirtydollarwebsite/sounds/BABA.wav new file mode 100644 index 00000000..54d6bb3c Binary files /dev/null and b/thirtydollarwebsite/sounds/BABA.wav differ diff --git a/thirtydollarwebsite/sounds/DEFEAT.wav b/thirtydollarwebsite/sounds/DEFEAT.wav new file mode 100644 index 00000000..3286e4a3 Binary files /dev/null and b/thirtydollarwebsite/sounds/DEFEAT.wav differ diff --git a/thirtydollarwebsite/sounds/SLAM.wav b/thirtydollarwebsite/sounds/SLAM.wav new file mode 100644 index 00000000..b30fcdad Binary files /dev/null and b/thirtydollarwebsite/sounds/SLAM.wav differ diff --git a/thirtydollarwebsite/sounds/YOU.wav b/thirtydollarwebsite/sounds/YOU.wav new file mode 100644 index 00000000..e33dff3f Binary files /dev/null and b/thirtydollarwebsite/sounds/YOU.wav differ diff --git a/thirtydollarwebsite/sounds/_pause.wav b/thirtydollarwebsite/sounds/_pause.wav new file mode 100644 index 00000000..5c55217d Binary files /dev/null and b/thirtydollarwebsite/sounds/_pause.wav differ diff --git a/thirtydollarwebsite/sounds/aah.wav b/thirtydollarwebsite/sounds/aah.wav new file mode 100644 index 00000000..ecc5903e Binary files /dev/null and b/thirtydollarwebsite/sounds/aah.wav differ diff --git a/thirtydollarwebsite/sounds/adofai_fire.wav b/thirtydollarwebsite/sounds/adofai_fire.wav new file mode 100644 index 00000000..af9746cd Binary files /dev/null and b/thirtydollarwebsite/sounds/adofai_fire.wav differ diff --git a/thirtydollarwebsite/sounds/adofai_ice.wav b/thirtydollarwebsite/sounds/adofai_ice.wav new file mode 100644 index 00000000..8e0cbff1 Binary files /dev/null and b/thirtydollarwebsite/sounds/adofai_ice.wav differ diff --git a/thirtydollarwebsite/sounds/adofaicymbal.wav b/thirtydollarwebsite/sounds/adofaicymbal.wav new file mode 100644 index 00000000..66261ad5 Binary files /dev/null and b/thirtydollarwebsite/sounds/adofaicymbal.wav differ diff --git a/thirtydollarwebsite/sounds/adofaikick.wav b/thirtydollarwebsite/sounds/adofaikick.wav new file mode 100644 index 00000000..d5ad3577 Binary files /dev/null and b/thirtydollarwebsite/sounds/adofaikick.wav differ diff --git a/thirtydollarwebsite/sounds/airhorn.wav b/thirtydollarwebsite/sounds/airhorn.wav new file mode 100644 index 00000000..d01b1753 Binary files /dev/null and b/thirtydollarwebsite/sounds/airhorn.wav differ diff --git a/thirtydollarwebsite/sounds/alarm.wav b/thirtydollarwebsite/sounds/alarm.wav new file mode 100644 index 00000000..cbad48a5 Binary files /dev/null and b/thirtydollarwebsite/sounds/alarm.wav differ diff --git a/thirtydollarwebsite/sounds/alert.wav b/thirtydollarwebsite/sounds/alert.wav new file mode 100644 index 00000000..c6c98892 Binary files /dev/null and b/thirtydollarwebsite/sounds/alert.wav differ diff --git a/thirtydollarwebsite/sounds/americano.wav b/thirtydollarwebsite/sounds/americano.wav new file mode 100644 index 00000000..acd08537 Binary files /dev/null and b/thirtydollarwebsite/sounds/americano.wav differ diff --git a/thirtydollarwebsite/sounds/amogus.wav b/thirtydollarwebsite/sounds/amogus.wav new file mode 100644 index 00000000..5fa96b2e Binary files /dev/null and b/thirtydollarwebsite/sounds/amogus.wav differ diff --git a/thirtydollarwebsite/sounds/amogus_emergency.wav b/thirtydollarwebsite/sounds/amogus_emergency.wav new file mode 100644 index 00000000..8fce2bf5 Binary files /dev/null and b/thirtydollarwebsite/sounds/amogus_emergency.wav differ diff --git a/thirtydollarwebsite/sounds/amogus_kill.wav b/thirtydollarwebsite/sounds/amogus_kill.wav new file mode 100644 index 00000000..7cf3e0f7 Binary files /dev/null and b/thirtydollarwebsite/sounds/amogus_kill.wav differ diff --git a/thirtydollarwebsite/sounds/amongdrip.wav b/thirtydollarwebsite/sounds/amongdrip.wav new file mode 100644 index 00000000..40f12e27 Binary files /dev/null and b/thirtydollarwebsite/sounds/amongdrip.wav differ diff --git a/thirtydollarwebsite/sounds/amongus.wav b/thirtydollarwebsite/sounds/amongus.wav new file mode 100644 index 00000000..82de2ce5 Binary files /dev/null and b/thirtydollarwebsite/sounds/amongus.wav differ diff --git a/thirtydollarwebsite/sounds/augh.wav b/thirtydollarwebsite/sounds/augh.wav new file mode 100644 index 00000000..4f75da8b Binary files /dev/null and b/thirtydollarwebsite/sounds/augh.wav differ diff --git a/thirtydollarwebsite/sounds/babylaugh.wav b/thirtydollarwebsite/sounds/babylaugh.wav new file mode 100644 index 00000000..6eb35a70 Binary files /dev/null and b/thirtydollarwebsite/sounds/babylaugh.wav differ diff --git a/thirtydollarwebsite/sounds/bell.wav b/thirtydollarwebsite/sounds/bell.wav new file mode 100644 index 00000000..dcd0a1db Binary files /dev/null and b/thirtydollarwebsite/sounds/bell.wav differ diff --git a/thirtydollarwebsite/sounds/bleep.wav b/thirtydollarwebsite/sounds/bleep.wav new file mode 100644 index 00000000..1ca535fc Binary files /dev/null and b/thirtydollarwebsite/sounds/bleep.wav differ diff --git a/thirtydollarwebsite/sounds/boing.wav b/thirtydollarwebsite/sounds/boing.wav new file mode 100644 index 00000000..2d3e1984 Binary files /dev/null and b/thirtydollarwebsite/sounds/boing.wav differ diff --git a/thirtydollarwebsite/sounds/boink(1).wav b/thirtydollarwebsite/sounds/boink(1).wav new file mode 100644 index 00000000..59d56749 Binary files /dev/null and b/thirtydollarwebsite/sounds/boink(1).wav differ diff --git a/thirtydollarwebsite/sounds/boink.wav b/thirtydollarwebsite/sounds/boink.wav new file mode 100644 index 00000000..59d56749 Binary files /dev/null and b/thirtydollarwebsite/sounds/boink.wav differ diff --git a/thirtydollarwebsite/sounds/bong.wav b/thirtydollarwebsite/sounds/bong.wav new file mode 100644 index 00000000..1b6ce4c8 Binary files /dev/null and b/thirtydollarwebsite/sounds/bong.wav differ diff --git a/thirtydollarwebsite/sounds/bonk.wav b/thirtydollarwebsite/sounds/bonk.wav new file mode 100644 index 00000000..3df64fd0 Binary files /dev/null and b/thirtydollarwebsite/sounds/bonk.wav differ diff --git a/thirtydollarwebsite/sounds/boom.wav b/thirtydollarwebsite/sounds/boom.wav new file mode 100644 index 00000000..7dfebb12 Binary files /dev/null and b/thirtydollarwebsite/sounds/boom.wav differ diff --git a/thirtydollarwebsite/sounds/boowomp.wav b/thirtydollarwebsite/sounds/boowomp.wav new file mode 100644 index 00000000..90060173 Binary files /dev/null and b/thirtydollarwebsite/sounds/boowomp.wav differ diff --git a/thirtydollarwebsite/sounds/bruh.wav b/thirtydollarwebsite/sounds/bruh.wav new file mode 100644 index 00000000..45542f13 Binary files /dev/null and b/thirtydollarwebsite/sounds/bruh.wav differ diff --git a/thirtydollarwebsite/sounds/builttoscale.wav b/thirtydollarwebsite/sounds/builttoscale.wav new file mode 100644 index 00000000..5d5f4133 Binary files /dev/null and b/thirtydollarwebsite/sounds/builttoscale.wav differ diff --git a/thirtydollarwebsite/sounds/bup.wav b/thirtydollarwebsite/sounds/bup.wav new file mode 100644 index 00000000..258fa95e Binary files /dev/null and b/thirtydollarwebsite/sounds/bup.wav differ diff --git a/thirtydollarwebsite/sounds/buttonpop.wav b/thirtydollarwebsite/sounds/buttonpop.wav new file mode 100644 index 00000000..2cd78271 Binary files /dev/null and b/thirtydollarwebsite/sounds/buttonpop.wav differ diff --git a/thirtydollarwebsite/sounds/buzzer.wav b/thirtydollarwebsite/sounds/buzzer.wav new file mode 100644 index 00000000..2e29cdc8 Binary files /dev/null and b/thirtydollarwebsite/sounds/buzzer.wav differ diff --git a/thirtydollarwebsite/sounds/bwomp.wav b/thirtydollarwebsite/sounds/bwomp.wav new file mode 100644 index 00000000..911decde Binary files /dev/null and b/thirtydollarwebsite/sounds/bwomp.wav differ diff --git a/thirtydollarwebsite/sounds/cave.wav b/thirtydollarwebsite/sounds/cave.wav new file mode 100644 index 00000000..c43be6b7 Binary files /dev/null and b/thirtydollarwebsite/sounds/cave.wav differ diff --git a/thirtydollarwebsite/sounds/celeste_dash.wav b/thirtydollarwebsite/sounds/celeste_dash.wav new file mode 100644 index 00000000..4dbad3f5 Binary files /dev/null and b/thirtydollarwebsite/sounds/celeste_dash.wav differ diff --git a/thirtydollarwebsite/sounds/celeste_death.wav b/thirtydollarwebsite/sounds/celeste_death.wav new file mode 100644 index 00000000..7faefa0d Binary files /dev/null and b/thirtydollarwebsite/sounds/celeste_death.wav differ diff --git a/thirtydollarwebsite/sounds/celeste_diamond.wav b/thirtydollarwebsite/sounds/celeste_diamond.wav new file mode 100644 index 00000000..99b5a1d5 Binary files /dev/null and b/thirtydollarwebsite/sounds/celeste_diamond.wav differ diff --git a/thirtydollarwebsite/sounds/celeste_spring.wav b/thirtydollarwebsite/sounds/celeste_spring.wav new file mode 100644 index 00000000..a5e2b6d2 Binary files /dev/null and b/thirtydollarwebsite/sounds/celeste_spring.wav differ diff --git a/thirtydollarwebsite/sounds/choruskid.wav b/thirtydollarwebsite/sounds/choruskid.wav new file mode 100644 index 00000000..7d6c0165 Binary files /dev/null and b/thirtydollarwebsite/sounds/choruskid.wav differ diff --git a/thirtydollarwebsite/sounds/clap.wav b/thirtydollarwebsite/sounds/clap.wav new file mode 100644 index 00000000..bc30e645 Binary files /dev/null and b/thirtydollarwebsite/sounds/clap.wav differ diff --git a/thirtydollarwebsite/sounds/cowbell.wav b/thirtydollarwebsite/sounds/cowbell.wav new file mode 100644 index 00000000..39a6aee2 Binary files /dev/null and b/thirtydollarwebsite/sounds/cowbell.wav differ diff --git a/thirtydollarwebsite/sounds/dimrainsynth.wav b/thirtydollarwebsite/sounds/dimrainsynth.wav new file mode 100644 index 00000000..36f37de2 Binary files /dev/null and b/thirtydollarwebsite/sounds/dimrainsynth.wav differ diff --git a/thirtydollarwebsite/sounds/dodgeball.wav b/thirtydollarwebsite/sounds/dodgeball.wav new file mode 100644 index 00000000..ec950e34 Binary files /dev/null and b/thirtydollarwebsite/sounds/dodgeball.wav differ diff --git a/thirtydollarwebsite/sounds/dog.wav b/thirtydollarwebsite/sounds/dog.wav new file mode 100644 index 00000000..489cb29c Binary files /dev/null and b/thirtydollarwebsite/sounds/dog.wav differ diff --git a/thirtydollarwebsite/sounds/e.wav b/thirtydollarwebsite/sounds/e.wav new file mode 100644 index 00000000..b2ec2529 Binary files /dev/null and b/thirtydollarwebsite/sounds/e.wav differ diff --git a/thirtydollarwebsite/sounds/eight.wav b/thirtydollarwebsite/sounds/eight.wav new file mode 100644 index 00000000..19f51831 Binary files /dev/null and b/thirtydollarwebsite/sounds/eight.wav differ diff --git a/thirtydollarwebsite/sounds/error.wav b/thirtydollarwebsite/sounds/error.wav new file mode 100644 index 00000000..df684959 Binary files /dev/null and b/thirtydollarwebsite/sounds/error.wav differ diff --git a/thirtydollarwebsite/sounds/explosion.wav b/thirtydollarwebsite/sounds/explosion.wav new file mode 100644 index 00000000..ca3310dd Binary files /dev/null and b/thirtydollarwebsite/sounds/explosion.wav differ diff --git a/thirtydollarwebsite/sounds/familyguy.wav b/thirtydollarwebsite/sounds/familyguy.wav new file mode 100644 index 00000000..430f7032 Binary files /dev/null and b/thirtydollarwebsite/sounds/familyguy.wav differ diff --git a/thirtydollarwebsite/sounds/fart.wav b/thirtydollarwebsite/sounds/fart.wav new file mode 100644 index 00000000..0947e59c Binary files /dev/null and b/thirtydollarwebsite/sounds/fart.wav differ diff --git a/thirtydollarwebsite/sounds/flipnote.wav b/thirtydollarwebsite/sounds/flipnote.wav new file mode 100644 index 00000000..0126707c Binary files /dev/null and b/thirtydollarwebsite/sounds/flipnote.wav differ diff --git a/thirtydollarwebsite/sounds/fnf_death.wav b/thirtydollarwebsite/sounds/fnf_death.wav new file mode 100644 index 00000000..89312eda Binary files /dev/null and b/thirtydollarwebsite/sounds/fnf_death.wav differ diff --git a/thirtydollarwebsite/sounds/fnf_down.wav b/thirtydollarwebsite/sounds/fnf_down.wav new file mode 100644 index 00000000..0ecaea89 Binary files /dev/null and b/thirtydollarwebsite/sounds/fnf_down.wav differ diff --git a/thirtydollarwebsite/sounds/fnf_left.wav b/thirtydollarwebsite/sounds/fnf_left.wav new file mode 100644 index 00000000..e867244e Binary files /dev/null and b/thirtydollarwebsite/sounds/fnf_left.wav differ diff --git a/thirtydollarwebsite/sounds/fnf_right.wav b/thirtydollarwebsite/sounds/fnf_right.wav new file mode 100644 index 00000000..6221e12a Binary files /dev/null and b/thirtydollarwebsite/sounds/fnf_right.wav differ diff --git a/thirtydollarwebsite/sounds/fnf_up.wav b/thirtydollarwebsite/sounds/fnf_up.wav new file mode 100644 index 00000000..15e90d42 Binary files /dev/null and b/thirtydollarwebsite/sounds/fnf_up.wav differ diff --git a/thirtydollarwebsite/sounds/gaster.wav b/thirtydollarwebsite/sounds/gaster.wav new file mode 100644 index 00000000..6f9b5341 Binary files /dev/null and b/thirtydollarwebsite/sounds/gaster.wav differ diff --git a/thirtydollarwebsite/sounds/gd_coin.wav b/thirtydollarwebsite/sounds/gd_coin.wav new file mode 100644 index 00000000..90a1b91c Binary files /dev/null and b/thirtydollarwebsite/sounds/gd_coin.wav differ diff --git a/thirtydollarwebsite/sounds/gd_diamonds.wav b/thirtydollarwebsite/sounds/gd_diamonds.wav new file mode 100644 index 00000000..64eef3f5 Binary files /dev/null and b/thirtydollarwebsite/sounds/gd_diamonds.wav differ diff --git a/thirtydollarwebsite/sounds/gd_orbs.wav b/thirtydollarwebsite/sounds/gd_orbs.wav new file mode 100644 index 00000000..f08bb5ee Binary files /dev/null and b/thirtydollarwebsite/sounds/gd_orbs.wav differ diff --git a/thirtydollarwebsite/sounds/gd_quit.wav b/thirtydollarwebsite/sounds/gd_quit.wav new file mode 100644 index 00000000..dcda0deb Binary files /dev/null and b/thirtydollarwebsite/sounds/gd_quit.wav differ diff --git a/thirtydollarwebsite/sounds/gdcrash.wav b/thirtydollarwebsite/sounds/gdcrash.wav new file mode 100644 index 00000000..671389da Binary files /dev/null and b/thirtydollarwebsite/sounds/gdcrash.wav differ diff --git a/thirtydollarwebsite/sounds/gdcrash_orbs.wav b/thirtydollarwebsite/sounds/gdcrash_orbs.wav new file mode 100644 index 00000000..8e095bce Binary files /dev/null and b/thirtydollarwebsite/sounds/gdcrash_orbs.wav differ diff --git a/thirtydollarwebsite/sounds/gnome.wav b/thirtydollarwebsite/sounds/gnome.wav new file mode 100644 index 00000000..5a83cb07 Binary files /dev/null and b/thirtydollarwebsite/sounds/gnome.wav differ diff --git a/thirtydollarwebsite/sounds/granddad.wav b/thirtydollarwebsite/sounds/granddad.wav new file mode 100644 index 00000000..4d13e261 Binary files /dev/null and b/thirtydollarwebsite/sounds/granddad.wav differ diff --git a/thirtydollarwebsite/sounds/gun.wav b/thirtydollarwebsite/sounds/gun.wav new file mode 100644 index 00000000..fe2f5bd9 Binary files /dev/null and b/thirtydollarwebsite/sounds/gun.wav differ diff --git a/thirtydollarwebsite/sounds/hammer.wav b/thirtydollarwebsite/sounds/hammer.wav new file mode 100644 index 00000000..b4bfae45 Binary files /dev/null and b/thirtydollarwebsite/sounds/hammer.wav differ diff --git a/thirtydollarwebsite/sounds/hehehehaw.wav b/thirtydollarwebsite/sounds/hehehehaw.wav new file mode 100644 index 00000000..684fe0af Binary files /dev/null and b/thirtydollarwebsite/sounds/hehehehaw.wav differ diff --git a/thirtydollarwebsite/sounds/hitmarker.wav b/thirtydollarwebsite/sounds/hitmarker.wav new file mode 100644 index 00000000..2f0f9e29 Binary files /dev/null and b/thirtydollarwebsite/sounds/hitmarker.wav differ diff --git a/thirtydollarwebsite/sounds/hoenn.wav b/thirtydollarwebsite/sounds/hoenn.wav new file mode 100644 index 00000000..48017af6 Binary files /dev/null and b/thirtydollarwebsite/sounds/hoenn.wav differ diff --git a/thirtydollarwebsite/sounds/honk.wav b/thirtydollarwebsite/sounds/honk.wav new file mode 100644 index 00000000..31450ca5 Binary files /dev/null and b/thirtydollarwebsite/sounds/honk.wav differ diff --git a/thirtydollarwebsite/sounds/isaac_dead.wav b/thirtydollarwebsite/sounds/isaac_dead.wav new file mode 100644 index 00000000..5c49067b Binary files /dev/null and b/thirtydollarwebsite/sounds/isaac_dead.wav differ diff --git a/thirtydollarwebsite/sounds/isaac_hurt.wav b/thirtydollarwebsite/sounds/isaac_hurt.wav new file mode 100644 index 00000000..c423784f Binary files /dev/null and b/thirtydollarwebsite/sounds/isaac_hurt.wav differ diff --git a/thirtydollarwebsite/sounds/isaac_mantle.wav b/thirtydollarwebsite/sounds/isaac_mantle.wav new file mode 100644 index 00000000..b8dccf79 Binary files /dev/null and b/thirtydollarwebsite/sounds/isaac_mantle.wav differ diff --git a/thirtydollarwebsite/sounds/kaching.wav b/thirtydollarwebsite/sounds/kaching.wav new file mode 100644 index 00000000..7a96ca20 Binary files /dev/null and b/thirtydollarwebsite/sounds/kaching.wav differ diff --git a/thirtydollarwebsite/sounds/karateman_bulb.wav b/thirtydollarwebsite/sounds/karateman_bulb.wav new file mode 100644 index 00000000..e357c83d Binary files /dev/null and b/thirtydollarwebsite/sounds/karateman_bulb.wav differ diff --git a/thirtydollarwebsite/sounds/karateman_hit.wav b/thirtydollarwebsite/sounds/karateman_hit.wav new file mode 100644 index 00000000..3ad28a39 Binary files /dev/null and b/thirtydollarwebsite/sounds/karateman_hit.wav differ diff --git a/thirtydollarwebsite/sounds/karateman_offbeat.wav b/thirtydollarwebsite/sounds/karateman_offbeat.wav new file mode 100644 index 00000000..38c03691 Binary files /dev/null and b/thirtydollarwebsite/sounds/karateman_offbeat.wav differ diff --git a/thirtydollarwebsite/sounds/karateman_throw.wav b/thirtydollarwebsite/sounds/karateman_throw.wav new file mode 100644 index 00000000..5334c896 Binary files /dev/null and b/thirtydollarwebsite/sounds/karateman_throw.wav differ diff --git a/thirtydollarwebsite/sounds/kick.wav b/thirtydollarwebsite/sounds/kick.wav new file mode 100644 index 00000000..ad11cf5f Binary files /dev/null and b/thirtydollarwebsite/sounds/kick.wav differ diff --git a/thirtydollarwebsite/sounds/krabs.wav b/thirtydollarwebsite/sounds/krabs.wav new file mode 100644 index 00000000..c37eb645 Binary files /dev/null and b/thirtydollarwebsite/sounds/krabs.wav differ diff --git a/thirtydollarwebsite/sounds/lancersplat.wav b/thirtydollarwebsite/sounds/lancersplat.wav new file mode 100644 index 00000000..58b152ad Binary files /dev/null and b/thirtydollarwebsite/sounds/lancersplat.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_baby.wav b/thirtydollarwebsite/sounds/mariopaint_baby.wav new file mode 100644 index 00000000..02701b1a Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_baby.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_car.wav b/thirtydollarwebsite/sounds/mariopaint_car.wav new file mode 100644 index 00000000..64c1186a Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_car.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_cat.wav b/thirtydollarwebsite/sounds/mariopaint_cat.wav new file mode 100644 index 00000000..25100328 Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_cat.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_dog.wav b/thirtydollarwebsite/sounds/mariopaint_dog.wav new file mode 100644 index 00000000..199902cb Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_dog.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_flower.wav b/thirtydollarwebsite/sounds/mariopaint_flower.wav new file mode 100644 index 00000000..d87bad97 Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_flower.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_gameboy.wav b/thirtydollarwebsite/sounds/mariopaint_gameboy.wav new file mode 100644 index 00000000..1b76958e Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_gameboy.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_luigi.wav b/thirtydollarwebsite/sounds/mariopaint_luigi.wav new file mode 100644 index 00000000..069b7894 Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_luigi.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_mario.wav b/thirtydollarwebsite/sounds/mariopaint_mario.wav new file mode 100644 index 00000000..3f24780b Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_mario.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_plane.wav b/thirtydollarwebsite/sounds/mariopaint_plane.wav new file mode 100644 index 00000000..dc7f3229 Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_plane.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_star.wav b/thirtydollarwebsite/sounds/mariopaint_star.wav new file mode 100644 index 00000000..7a828cd4 Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_star.wav differ diff --git a/thirtydollarwebsite/sounds/mariopaint_swan.wav b/thirtydollarwebsite/sounds/mariopaint_swan.wav new file mode 100644 index 00000000..6f793c20 Binary files /dev/null and b/thirtydollarwebsite/sounds/mariopaint_swan.wav differ diff --git a/thirtydollarwebsite/sounds/megalovania.wav b/thirtydollarwebsite/sounds/megalovania.wav new file mode 100644 index 00000000..21d27f11 Binary files /dev/null and b/thirtydollarwebsite/sounds/megalovania.wav differ diff --git a/thirtydollarwebsite/sounds/megalovania_note.wav b/thirtydollarwebsite/sounds/megalovania_note.wav new file mode 100644 index 00000000..cad7af1f Binary files /dev/null and b/thirtydollarwebsite/sounds/megalovania_note.wav differ diff --git a/thirtydollarwebsite/sounds/metalpipe.wav b/thirtydollarwebsite/sounds/metalpipe.wav new file mode 100644 index 00000000..d6ff0a12 Binary files /dev/null and b/thirtydollarwebsite/sounds/metalpipe.wav differ diff --git a/thirtydollarwebsite/sounds/midspin.wav b/thirtydollarwebsite/sounds/midspin.wav new file mode 100644 index 00000000..ceca2162 Binary files /dev/null and b/thirtydollarwebsite/sounds/midspin.wav differ diff --git a/thirtydollarwebsite/sounds/minecraft_anvil.wav b/thirtydollarwebsite/sounds/minecraft_anvil.wav new file mode 100644 index 00000000..9cdbde43 Binary files /dev/null and b/thirtydollarwebsite/sounds/minecraft_anvil.wav differ diff --git a/thirtydollarwebsite/sounds/minecraft_bell.wav b/thirtydollarwebsite/sounds/minecraft_bell.wav new file mode 100644 index 00000000..52813103 Binary files /dev/null and b/thirtydollarwebsite/sounds/minecraft_bell.wav differ diff --git a/thirtydollarwebsite/sounds/minecraft_explosion.wav b/thirtydollarwebsite/sounds/minecraft_explosion.wav new file mode 100644 index 00000000..1f2c8344 Binary files /dev/null and b/thirtydollarwebsite/sounds/minecraft_explosion.wav differ diff --git a/thirtydollarwebsite/sounds/morningflower.wav b/thirtydollarwebsite/sounds/morningflower.wav new file mode 100644 index 00000000..69d8fdaa Binary files /dev/null and b/thirtydollarwebsite/sounds/morningflower.wav differ diff --git a/thirtydollarwebsite/sounds/morshu.wav b/thirtydollarwebsite/sounds/morshu.wav new file mode 100644 index 00000000..3205864b Binary files /dev/null and b/thirtydollarwebsite/sounds/morshu.wav differ diff --git a/thirtydollarwebsite/sounds/mrbeast.wav b/thirtydollarwebsite/sounds/mrbeast.wav new file mode 100644 index 00000000..c249de12 Binary files /dev/null and b/thirtydollarwebsite/sounds/mrbeast.wav differ diff --git a/thirtydollarwebsite/sounds/necoarc.wav b/thirtydollarwebsite/sounds/necoarc.wav new file mode 100644 index 00000000..e2b72bd9 Binary files /dev/null and b/thirtydollarwebsite/sounds/necoarc.wav differ diff --git a/thirtydollarwebsite/sounds/nerdhorn.wav b/thirtydollarwebsite/sounds/nerdhorn.wav new file mode 100644 index 00000000..9d36aa6b Binary files /dev/null and b/thirtydollarwebsite/sounds/nerdhorn.wav differ diff --git a/thirtydollarwebsite/sounds/noice.wav b/thirtydollarwebsite/sounds/noice.wav new file mode 100644 index 00000000..7d7dfacf Binary files /dev/null and b/thirtydollarwebsite/sounds/noice.wav differ diff --git a/thirtydollarwebsite/sounds/nope.wav b/thirtydollarwebsite/sounds/nope.wav new file mode 100644 index 00000000..aa69491c Binary files /dev/null and b/thirtydollarwebsite/sounds/nope.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_banjo.wav b/thirtydollarwebsite/sounds/noteblock_banjo.wav new file mode 100644 index 00000000..3309337b Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_banjo.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_bass.wav b/thirtydollarwebsite/sounds/noteblock_bass.wav new file mode 100644 index 00000000..0680f510 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_bass.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_bell.wav b/thirtydollarwebsite/sounds/noteblock_bell.wav new file mode 100644 index 00000000..f8086f94 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_bell.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_bit.wav b/thirtydollarwebsite/sounds/noteblock_bit.wav new file mode 100644 index 00000000..f190414c Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_bit.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_chime.wav b/thirtydollarwebsite/sounds/noteblock_chime.wav new file mode 100644 index 00000000..1453a634 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_chime.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_click.wav b/thirtydollarwebsite/sounds/noteblock_click.wav new file mode 100644 index 00000000..5d8e05a6 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_click.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_flute.wav b/thirtydollarwebsite/sounds/noteblock_flute.wav new file mode 100644 index 00000000..30f94959 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_flute.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_guitar.wav b/thirtydollarwebsite/sounds/noteblock_guitar.wav new file mode 100644 index 00000000..277545ca Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_guitar.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_harp.wav b/thirtydollarwebsite/sounds/noteblock_harp.wav new file mode 100644 index 00000000..32eebc74 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_harp.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_pling.wav b/thirtydollarwebsite/sounds/noteblock_pling.wav new file mode 100644 index 00000000..0cae501f Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_pling.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_snare.wav b/thirtydollarwebsite/sounds/noteblock_snare.wav new file mode 100644 index 00000000..438af4f0 Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_snare.wav differ diff --git a/thirtydollarwebsite/sounds/noteblock_xylophone.wav b/thirtydollarwebsite/sounds/noteblock_xylophone.wav new file mode 100644 index 00000000..0f0e9cee Binary files /dev/null and b/thirtydollarwebsite/sounds/noteblock_xylophone.wav differ diff --git a/thirtydollarwebsite/sounds/obama.wav b/thirtydollarwebsite/sounds/obama.wav new file mode 100644 index 00000000..a44cfb4f Binary files /dev/null and b/thirtydollarwebsite/sounds/obama.wav differ diff --git a/thirtydollarwebsite/sounds/oof.wav b/thirtydollarwebsite/sounds/oof.wav new file mode 100644 index 00000000..60b9f8f3 Binary files /dev/null and b/thirtydollarwebsite/sounds/oof.wav differ diff --git a/thirtydollarwebsite/sounds/ook.wav b/thirtydollarwebsite/sounds/ook.wav new file mode 100644 index 00000000..e0415cd1 Binary files /dev/null and b/thirtydollarwebsite/sounds/ook.wav differ diff --git a/thirtydollarwebsite/sounds/op.wav b/thirtydollarwebsite/sounds/op.wav new file mode 100644 index 00000000..d8a70808 Binary files /dev/null and b/thirtydollarwebsite/sounds/op.wav differ diff --git a/thirtydollarwebsite/sounds/otto_happy.wav b/thirtydollarwebsite/sounds/otto_happy.wav new file mode 100644 index 00000000..d45099c7 Binary files /dev/null and b/thirtydollarwebsite/sounds/otto_happy.wav differ diff --git a/thirtydollarwebsite/sounds/otto_off.wav b/thirtydollarwebsite/sounds/otto_off.wav new file mode 100644 index 00000000..0a60738c Binary files /dev/null and b/thirtydollarwebsite/sounds/otto_off.wav differ diff --git a/thirtydollarwebsite/sounds/otto_on.wav b/thirtydollarwebsite/sounds/otto_on.wav new file mode 100644 index 00000000..21079136 Binary files /dev/null and b/thirtydollarwebsite/sounds/otto_on.wav differ diff --git a/thirtydollarwebsite/sounds/otto_stress.wav b/thirtydollarwebsite/sounds/otto_stress.wav new file mode 100644 index 00000000..94d9a9a3 Binary files /dev/null and b/thirtydollarwebsite/sounds/otto_stress.wav differ diff --git a/thirtydollarwebsite/sounds/pan.wav b/thirtydollarwebsite/sounds/pan.wav new file mode 100644 index 00000000..f08cfd8c Binary files /dev/null and b/thirtydollarwebsite/sounds/pan.wav differ diff --git a/thirtydollarwebsite/sounds/perfectfail.wav b/thirtydollarwebsite/sounds/perfectfail.wav new file mode 100644 index 00000000..9d7a28ad Binary files /dev/null and b/thirtydollarwebsite/sounds/perfectfail.wav differ diff --git a/thirtydollarwebsite/sounds/pianoriff.wav b/thirtydollarwebsite/sounds/pianoriff.wav new file mode 100644 index 00000000..21679d3a Binary files /dev/null and b/thirtydollarwebsite/sounds/pianoriff.wav differ diff --git a/thirtydollarwebsite/sounds/pingas.wav b/thirtydollarwebsite/sounds/pingas.wav new file mode 100644 index 00000000..069b98e6 Binary files /dev/null and b/thirtydollarwebsite/sounds/pingas.wav differ diff --git a/thirtydollarwebsite/sounds/pizza.wav b/thirtydollarwebsite/sounds/pizza.wav new file mode 100644 index 00000000..b5b5523b Binary files /dev/null and b/thirtydollarwebsite/sounds/pizza.wav differ diff --git a/thirtydollarwebsite/sounds/preecho.wav b/thirtydollarwebsite/sounds/preecho.wav new file mode 100644 index 00000000..8d6e553e Binary files /dev/null and b/thirtydollarwebsite/sounds/preecho.wav differ diff --git a/thirtydollarwebsite/sounds/puyo.wav b/thirtydollarwebsite/sounds/puyo.wav new file mode 100644 index 00000000..2082f7a7 Binary files /dev/null and b/thirtydollarwebsite/sounds/puyo.wav differ diff --git a/thirtydollarwebsite/sounds/quack.wav b/thirtydollarwebsite/sounds/quack.wav new file mode 100644 index 00000000..0b92f5b3 Binary files /dev/null and b/thirtydollarwebsite/sounds/quack.wav differ diff --git a/thirtydollarwebsite/sounds/rdclap.wav b/thirtydollarwebsite/sounds/rdclap.wav new file mode 100644 index 00000000..f6700534 Binary files /dev/null and b/thirtydollarwebsite/sounds/rdclap.wav differ diff --git a/thirtydollarwebsite/sounds/rdmistake.wav b/thirtydollarwebsite/sounds/rdmistake.wav new file mode 100644 index 00000000..65eaeab7 Binary files /dev/null and b/thirtydollarwebsite/sounds/rdmistake.wav differ diff --git a/thirtydollarwebsite/sounds/recordscratch.wav b/thirtydollarwebsite/sounds/recordscratch.wav new file mode 100644 index 00000000..48ddbaa1 Binary files /dev/null and b/thirtydollarwebsite/sounds/recordscratch.wav differ diff --git a/thirtydollarwebsite/sounds/ride2.wav b/thirtydollarwebsite/sounds/ride2.wav new file mode 100644 index 00000000..572de4e8 Binary files /dev/null and b/thirtydollarwebsite/sounds/ride2.wav differ diff --git a/thirtydollarwebsite/sounds/robtopphone.wav b/thirtydollarwebsite/sounds/robtopphone.wav new file mode 100644 index 00000000..85c5f2f5 Binary files /dev/null and b/thirtydollarwebsite/sounds/robtopphone.wav differ diff --git a/thirtydollarwebsite/sounds/samsung.wav b/thirtydollarwebsite/sounds/samsung.wav new file mode 100644 index 00000000..43e5b42e Binary files /dev/null and b/thirtydollarwebsite/sounds/samsung.wav differ diff --git a/thirtydollarwebsite/sounds/samurai.wav b/thirtydollarwebsite/sounds/samurai.wav new file mode 100644 index 00000000..2360235a Binary files /dev/null and b/thirtydollarwebsite/sounds/samurai.wav differ diff --git a/thirtydollarwebsite/sounds/sans_voice.wav b/thirtydollarwebsite/sounds/sans_voice.wav new file mode 100644 index 00000000..542f1e8b Binary files /dev/null and b/thirtydollarwebsite/sounds/sans_voice.wav differ diff --git a/thirtydollarwebsite/sounds/shaker.wav b/thirtydollarwebsite/sounds/shaker.wav new file mode 100644 index 00000000..e113227d Binary files /dev/null and b/thirtydollarwebsite/sounds/shaker.wav differ diff --git a/thirtydollarwebsite/sounds/shatter.wav b/thirtydollarwebsite/sounds/shatter.wav new file mode 100644 index 00000000..aa92b874 Binary files /dev/null and b/thirtydollarwebsite/sounds/shatter.wav differ diff --git a/thirtydollarwebsite/sounds/sidestick.wav b/thirtydollarwebsite/sounds/sidestick.wav new file mode 100644 index 00000000..0f3af78a Binary files /dev/null and b/thirtydollarwebsite/sounds/sidestick.wav differ diff --git a/thirtydollarwebsite/sounds/skeleton.wav b/thirtydollarwebsite/sounds/skeleton.wav new file mode 100644 index 00000000..8c17b9a3 Binary files /dev/null and b/thirtydollarwebsite/sounds/skeleton.wav differ diff --git a/thirtydollarwebsite/sounds/skillstar.wav b/thirtydollarwebsite/sounds/skillstar.wav new file mode 100644 index 00000000..c5059b67 Binary files /dev/null and b/thirtydollarwebsite/sounds/skillstar.wav differ diff --git a/thirtydollarwebsite/sounds/skipshot.wav b/thirtydollarwebsite/sounds/skipshot.wav new file mode 100644 index 00000000..0b413217 Binary files /dev/null and b/thirtydollarwebsite/sounds/skipshot.wav differ diff --git a/thirtydollarwebsite/sounds/slap.wav b/thirtydollarwebsite/sounds/slap.wav new file mode 100644 index 00000000..e8baa068 Binary files /dev/null and b/thirtydollarwebsite/sounds/slap.wav differ diff --git a/thirtydollarwebsite/sounds/slapbass.wav b/thirtydollarwebsite/sounds/slapbass.wav new file mode 100644 index 00000000..b8084e05 Binary files /dev/null and b/thirtydollarwebsite/sounds/slapbass.wav differ diff --git a/thirtydollarwebsite/sounds/slip.wav b/thirtydollarwebsite/sounds/slip.wav new file mode 100644 index 00000000..1c7f2638 Binary files /dev/null and b/thirtydollarwebsite/sounds/slip.wav differ diff --git a/thirtydollarwebsite/sounds/sm64_hurt.wav b/thirtydollarwebsite/sounds/sm64_hurt.wav new file mode 100644 index 00000000..6017bbe1 Binary files /dev/null and b/thirtydollarwebsite/sounds/sm64_hurt.wav differ diff --git a/thirtydollarwebsite/sounds/sm64_painting.wav b/thirtydollarwebsite/sounds/sm64_painting.wav new file mode 100644 index 00000000..11812352 Binary files /dev/null and b/thirtydollarwebsite/sounds/sm64_painting.wav differ diff --git a/thirtydollarwebsite/sounds/smm_scream.wav b/thirtydollarwebsite/sounds/smm_scream.wav new file mode 100644 index 00000000..cb22d72d Binary files /dev/null and b/thirtydollarwebsite/sounds/smm_scream.wav differ diff --git a/thirtydollarwebsite/sounds/smw_1up.wav b/thirtydollarwebsite/sounds/smw_1up.wav new file mode 100644 index 00000000..1fb8e1b9 Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_1up.wav differ diff --git a/thirtydollarwebsite/sounds/smw_coin.wav b/thirtydollarwebsite/sounds/smw_coin.wav new file mode 100644 index 00000000..58b3df33 Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_coin.wav differ diff --git a/thirtydollarwebsite/sounds/smw_kick.wav b/thirtydollarwebsite/sounds/smw_kick.wav new file mode 100644 index 00000000..2784180b Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_kick.wav differ diff --git a/thirtydollarwebsite/sounds/smw_spinjump.wav b/thirtydollarwebsite/sounds/smw_spinjump.wav new file mode 100644 index 00000000..5c1e3462 Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_spinjump.wav differ diff --git a/thirtydollarwebsite/sounds/smw_stomp.wav b/thirtydollarwebsite/sounds/smw_stomp.wav new file mode 100644 index 00000000..2609a31b Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_stomp.wav differ diff --git a/thirtydollarwebsite/sounds/smw_stomp2.wav b/thirtydollarwebsite/sounds/smw_stomp2.wav new file mode 100644 index 00000000..fcbf9b1a Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_stomp2.wav differ diff --git a/thirtydollarwebsite/sounds/smw_yoshi.wav b/thirtydollarwebsite/sounds/smw_yoshi.wav new file mode 100644 index 00000000..d4b5029b Binary files /dev/null and b/thirtydollarwebsite/sounds/smw_yoshi.wav differ diff --git a/thirtydollarwebsite/sounds/steve_oof.wav b/thirtydollarwebsite/sounds/steve_oof.wav new file mode 100644 index 00000000..97bb2546 Binary files /dev/null and b/thirtydollarwebsite/sounds/steve_oof.wav differ diff --git a/thirtydollarwebsite/sounds/stopposting.wav b/thirtydollarwebsite/sounds/stopposting.wav new file mode 100644 index 00000000..b1c54bf5 Binary files /dev/null and b/thirtydollarwebsite/sounds/stopposting.wav differ diff --git a/thirtydollarwebsite/sounds/subaluwa.wav b/thirtydollarwebsite/sounds/subaluwa.wav new file mode 100644 index 00000000..96772a80 Binary files /dev/null and b/thirtydollarwebsite/sounds/subaluwa.wav differ diff --git a/thirtydollarwebsite/sounds/suspense.wav b/thirtydollarwebsite/sounds/suspense.wav new file mode 100644 index 00000000..d909f09f Binary files /dev/null and b/thirtydollarwebsite/sounds/suspense.wav differ diff --git a/thirtydollarwebsite/sounds/tab_actions.wav b/thirtydollarwebsite/sounds/tab_actions.wav new file mode 100644 index 00000000..01254c7f Binary files /dev/null and b/thirtydollarwebsite/sounds/tab_actions.wav differ diff --git a/thirtydollarwebsite/sounds/tab_decorations.wav b/thirtydollarwebsite/sounds/tab_decorations.wav new file mode 100644 index 00000000..aa4c18e7 Binary files /dev/null and b/thirtydollarwebsite/sounds/tab_decorations.wav differ diff --git a/thirtydollarwebsite/sounds/tab_rooms.wav b/thirtydollarwebsite/sounds/tab_rooms.wav new file mode 100644 index 00000000..d620e065 Binary files /dev/null and b/thirtydollarwebsite/sounds/tab_rooms.wav differ diff --git a/thirtydollarwebsite/sounds/tab_rows.wav b/thirtydollarwebsite/sounds/tab_rows.wav new file mode 100644 index 00000000..be1b8bc6 Binary files /dev/null and b/thirtydollarwebsite/sounds/tab_rows.wav differ diff --git a/thirtydollarwebsite/sounds/tab_sounds.wav b/thirtydollarwebsite/sounds/tab_sounds.wav new file mode 100644 index 00000000..816acfd5 Binary files /dev/null and b/thirtydollarwebsite/sounds/tab_sounds.wav differ diff --git a/thirtydollarwebsite/sounds/tada.wav b/thirtydollarwebsite/sounds/tada.wav new file mode 100644 index 00000000..ebab47ec Binary files /dev/null and b/thirtydollarwebsite/sounds/tada.wav differ diff --git a/thirtydollarwebsite/sounds/taiko_don.wav b/thirtydollarwebsite/sounds/taiko_don.wav new file mode 100644 index 00000000..889f6f72 Binary files /dev/null and b/thirtydollarwebsite/sounds/taiko_don.wav differ diff --git a/thirtydollarwebsite/sounds/taiko_ka.wav b/thirtydollarwebsite/sounds/taiko_ka.wav new file mode 100644 index 00000000..38788c93 Binary files /dev/null and b/thirtydollarwebsite/sounds/taiko_ka.wav differ diff --git a/thirtydollarwebsite/sounds/taunt.wav b/thirtydollarwebsite/sounds/taunt.wav new file mode 100644 index 00000000..38a562ab Binary files /dev/null and b/thirtydollarwebsite/sounds/taunt.wav differ diff --git a/thirtydollarwebsite/sounds/terraria_axe.wav b/thirtydollarwebsite/sounds/terraria_axe.wav new file mode 100644 index 00000000..da4ca268 Binary files /dev/null and b/thirtydollarwebsite/sounds/terraria_axe.wav differ diff --git a/thirtydollarwebsite/sounds/terraria_guitar.wav b/thirtydollarwebsite/sounds/terraria_guitar.wav new file mode 100644 index 00000000..4a942c56 Binary files /dev/null and b/thirtydollarwebsite/sounds/terraria_guitar.wav differ diff --git a/thirtydollarwebsite/sounds/terraria_pot.wav b/thirtydollarwebsite/sounds/terraria_pot.wav new file mode 100644 index 00000000..cba9232e Binary files /dev/null and b/thirtydollarwebsite/sounds/terraria_pot.wav differ diff --git a/thirtydollarwebsite/sounds/terraria_reforge.wav b/thirtydollarwebsite/sounds/terraria_reforge.wav new file mode 100644 index 00000000..49aa5ba5 Binary files /dev/null and b/thirtydollarwebsite/sounds/terraria_reforge.wav differ diff --git a/thirtydollarwebsite/sounds/terraria_star.wav b/thirtydollarwebsite/sounds/terraria_star.wav new file mode 100644 index 00000000..ab56844a Binary files /dev/null and b/thirtydollarwebsite/sounds/terraria_star.wav differ diff --git a/thirtydollarwebsite/sounds/tf2_crit.wav b/thirtydollarwebsite/sounds/tf2_crit.wav new file mode 100644 index 00000000..b81bafda Binary files /dev/null and b/thirtydollarwebsite/sounds/tf2_crit.wav differ diff --git a/thirtydollarwebsite/sounds/thwomp.wav b/thirtydollarwebsite/sounds/thwomp.wav new file mode 100644 index 00000000..339402a8 Binary files /dev/null and b/thirtydollarwebsite/sounds/thwomp.wav differ diff --git a/thirtydollarwebsite/sounds/toby.wav b/thirtydollarwebsite/sounds/toby.wav new file mode 100644 index 00000000..13e54cc9 Binary files /dev/null and b/thirtydollarwebsite/sounds/toby.wav differ diff --git a/thirtydollarwebsite/sounds/tom.wav b/thirtydollarwebsite/sounds/tom.wav new file mode 100644 index 00000000..709f3c7b Binary files /dev/null and b/thirtydollarwebsite/sounds/tom.wav differ diff --git a/thirtydollarwebsite/sounds/tonk.wav b/thirtydollarwebsite/sounds/tonk.wav new file mode 100644 index 00000000..37c5bb39 Binary files /dev/null and b/thirtydollarwebsite/sounds/tonk.wav differ diff --git a/thirtydollarwebsite/sounds/ultrainstinct.wav b/thirtydollarwebsite/sounds/ultrainstinct.wav new file mode 100644 index 00000000..edf2546b Binary files /dev/null and b/thirtydollarwebsite/sounds/ultrainstinct.wav differ diff --git a/thirtydollarwebsite/sounds/undertale_crack.wav b/thirtydollarwebsite/sounds/undertale_crack.wav new file mode 100644 index 00000000..7d0b6a64 Binary files /dev/null and b/thirtydollarwebsite/sounds/undertale_crack.wav differ diff --git a/thirtydollarwebsite/sounds/undertale_encounter.wav b/thirtydollarwebsite/sounds/undertale_encounter.wav new file mode 100644 index 00000000..333d51d7 Binary files /dev/null and b/thirtydollarwebsite/sounds/undertale_encounter.wav differ diff --git a/thirtydollarwebsite/sounds/undertale_hit.wav b/thirtydollarwebsite/sounds/undertale_hit.wav new file mode 100644 index 00000000..b08409de Binary files /dev/null and b/thirtydollarwebsite/sounds/undertale_hit.wav differ diff --git a/thirtydollarwebsite/sounds/vvvvvv_checkpoint.wav b/thirtydollarwebsite/sounds/vvvvvv_checkpoint.wav new file mode 100644 index 00000000..9af06846 Binary files /dev/null and b/thirtydollarwebsite/sounds/vvvvvv_checkpoint.wav differ diff --git a/thirtydollarwebsite/sounds/vvvvvv_flash.wav b/thirtydollarwebsite/sounds/vvvvvv_flash.wav new file mode 100644 index 00000000..0ebb2778 Binary files /dev/null and b/thirtydollarwebsite/sounds/vvvvvv_flash.wav differ diff --git a/thirtydollarwebsite/sounds/vvvvvv_flip.wav b/thirtydollarwebsite/sounds/vvvvvv_flip.wav new file mode 100644 index 00000000..899eaf14 Binary files /dev/null and b/thirtydollarwebsite/sounds/vvvvvv_flip.wav differ diff --git a/thirtydollarwebsite/sounds/vvvvvv_hurt.wav b/thirtydollarwebsite/sounds/vvvvvv_hurt.wav new file mode 100644 index 00000000..fc4e7cb9 Binary files /dev/null and b/thirtydollarwebsite/sounds/vvvvvv_hurt.wav differ diff --git a/thirtydollarwebsite/sounds/waterphone.wav b/thirtydollarwebsite/sounds/waterphone.wav new file mode 100644 index 00000000..d5281909 Binary files /dev/null and b/thirtydollarwebsite/sounds/waterphone.wav differ diff --git a/thirtydollarwebsite/sounds/whatsapp.wav b/thirtydollarwebsite/sounds/whatsapp.wav new file mode 100644 index 00000000..03b90bae Binary files /dev/null and b/thirtydollarwebsite/sounds/whatsapp.wav differ diff --git a/thirtydollarwebsite/sounds/whipcrack.wav b/thirtydollarwebsite/sounds/whipcrack.wav new file mode 100644 index 00000000..0443bc66 Binary files /dev/null and b/thirtydollarwebsite/sounds/whipcrack.wav differ diff --git a/thirtydollarwebsite/sounds/wowowow.wav b/thirtydollarwebsite/sounds/wowowow.wav new file mode 100644 index 00000000..9faa67c6 Binary files /dev/null and b/thirtydollarwebsite/sounds/wowowow.wav differ diff --git a/thirtydollarwebsite/sounds/yahoo.wav b/thirtydollarwebsite/sounds/yahoo.wav new file mode 100644 index 00000000..f62d8ec0 Binary files /dev/null and b/thirtydollarwebsite/sounds/yahoo.wav differ diff --git a/thirtydollarwebsite/sounds/yawn.wav b/thirtydollarwebsite/sounds/yawn.wav new file mode 100644 index 00000000..63353dc6 Binary files /dev/null and b/thirtydollarwebsite/sounds/yawn.wav differ diff --git a/thirtydollarwebsite/sounds/yoda.wav b/thirtydollarwebsite/sounds/yoda.wav new file mode 100644 index 00000000..77d8e07e Binary files /dev/null and b/thirtydollarwebsite/sounds/yoda.wav differ diff --git a/thirtydollarwebsite/sounds/zunpet.wav b/thirtydollarwebsite/sounds/zunpet.wav new file mode 100644 index 00000000..2cf42d0f Binary files /dev/null and b/thirtydollarwebsite/sounds/zunpet.wav differ diff --git a/thirtydollarwebsite/▶.js b/thirtydollarwebsite/▶.js new file mode 100644 index 00000000..d1aa5147 --- /dev/null +++ b/thirtydollarwebsite/▶.js @@ -0,0 +1,421 @@ +// hi hello this is the code for actually preloading and playing sequences + +let MAX_BPM_LIMIT = 20_000 // wow this seems suspiciously easy to redefine + +// convert sequence to json +function getSequenceData() { + let sequenceData = $('#sequence div').map(function (index) { + return { + index, + element: $(this), + sound: $(this).attr("sound"), + pitch: $(this).attr("pitch"), + volume: $(this).attr("vol"), + action: $(this).attr("action"), + icon: $(this).attr("img"), + group: +$(this).parent().attr("group") || 0, + amount: $(this).attr("amount"), + operator: $(this).attr("num"), + dualVal: [$(this).attr("val1"), $(this).attr("val2")] + } + }).toArray() + return sequenceData +} + +function beatLength(bpm) { + return 60 / bpm * 1000 +} + +function modifyNumber(num, newNum, operator) { + switch (operator) { + case "add": return num + newNum + case "multiply": return num * newNum + default: return newNum + } +} + +// fetches any uncached sounds in the sequence to prevent lag spikes +async function fetchRequiredSounds(sequence=getSequenceData()) { + // for loops are better for async stuff + let soundKeys = Object.keys(sounds) + for (let i=0; i < sequence.length; i++) { + let x = sequence[i] + if (x.sound && x.sound != "sounds/_pause.wav" && !soundKeys.includes(x.sound)) { + await fetchSound(x.sound) + soundKeys.push(x.sound) + } + } +} + +function preloadSequence(sequence=getSequenceData()) { + let order = [] + + let bpm = defaultTempo + let volume = defaultVolume + let loopTarget = 0 + let transposition = 0 + + let index = 0 + let timer = 0 + let scrubPos = 0 + let pulseID = 0 + + let startPositions = sequence.filter(x => x.action == "startpos" && (selectedDivider >= 0 ? x.group == selectedDivider : true)) + if (startPositions.length) scrubPos = startPositions[startPositions.length - 1].index + else if (selectedDivider >= 0) scrubPos = (sequence.find(x => x.group == selectedDivider) || {}).index || 0 + + let scrubbing = scrubPos > 0 + + function untrigger(idx, except=[]) { + let untriggered = [] + sequence.slice(idx + 1).map((x, y) => { + if (!except.includes(x.action)) { + if (x.triggered) { x.triggered = false; untriggered.push(idx + 1 + y) } + if (x.remaining <= 0) { delete x.remaining; untriggered.push(idx + 1 + y) } + } + return x; + }) + return untriggered + } + + while (index < sequence.length) { + let x = sequence[index] + let incrementTimer = false + + if (scrubbing && index == scrubPos) scrubbing = false + + // if the event is a sound... + if (x.sound) { + let vol = !isNaN(+x.volume) ? +x.volume : 100 // dead certain theres a browser that wont support ?? + // construct the sound data + let soundObj = { + index, + sound: x.sound, + volume: volume * clamp((vol) / 100, 0, 4), + pitch: clamp((+x.pitch || 0) + transposition, -72, 72), + time: timer / 1000, + element: x.element, + img: x.element.find("img") + } + + let nextSound = sequence[index + 1] || {} + if (nextSound.action != "combine") incrementTimer = true + if (!scrubbing) order.push(soundObj) + } + + // if the event is an action... + else if (x.action) { + + let val = Number(x.amount) || 0 + + let actionObj = { + index, + action: x.action, + pulse: true, + trigger: true, + scrub: scrubbing, + time: timer / 1000, + element: x.element, + img: x.element.find("img") + } + + // do something different for each action + switch (x.action) { + + // ⏩ change BPM + case "speed": + bpm = modifyNumber(bpm, val, x.operator) + bpm = Number(clamp(bpm, 5, MAX_BPM_LIMIT).toFixed(4)) + actionObj.bpm = bpm + break; + + // 🔊 change volume + case "volume": + volume = modifyNumber(volume, val, x.operator) + volume = Number(clamp(volume, 0, 600).toFixed(4)) + actionObj.volume = volume + break; + + // ⏸ pause for duration + case "stop": + let beatsRemaining = isNaN(x.remaining) ? val : x.remaining // i could have used ?? but i'm sure theres a browser out there that doesnt support it. fuck webdev + if (!scrubbing && beatsRemaining > 0) { + let timeToRemove = Math.min(1, beatsRemaining) + timer += beatLength(bpm) * timeToRemove + + beatsRemaining -= 1 + if (beatsRemaining < 0) beatsRemaining = 0 + + actionObj.remaining = beatsRemaining + sequence[index].remaining = beatsRemaining + index-- + actionObj.trigger = false + } + else { + actionObj.finished = true + actionObj.duration = val + } + break; + + // 🔁 multiple loops + case "loopmany": + let loopsRemaining = isNaN(x.remaining) ? val : x.remaining + if (!scrubbing && loopsRemaining > 0) { + loopsRemaining-- + actionObj.remaining = loopsRemaining + sequence[index].remaining = loopsRemaining + index = loopTarget - 1 + if (loopsRemaining < 1) actionObj.pulse = false + else actionObj.trigger = false + + // untrigger: single loops, targets + actionObj.untriggered = untrigger(index, ["loopmany"]) + } + else actionObj.skip = true; + break; + + // 🔂 single loop + case "loop": + if (!x.triggered) { + sequence[index].triggered = true + index = loopTarget - 1 + + // untrigger: targets + actionObj.untriggered = untrigger(index, ["loop", "loopmany"]) + } + else actionObj.skip = true; + break; + + // ◇ loop target + case "looptarget": + loopTarget = index + break; + + // ❎ stop sounds + case "cut": + break; // nothing, actually + + // 📍 startpos + case "startpos": + break; // handled earlier + + // ↔ combine + case "combine": + if (scrubbing) actionObj.skip = true + break; // combining is checked for sounds + + // ⏺ go to target + case "jump": + if (!x.triggered) { + let foundTarget = sequence.findIndex(e => e.action == "target" && !e.triggered && e.amount == x.amount) + if (foundTarget >= 0) { + sequence[index].triggered = true + // sequence[foundTarget].triggered = true ??? + actionObj.target = foundTarget + index = foundTarget + } + + actionObj.untriggered = untrigger(index, ["loop", "loopmany", "jump", "target"]) + } + else actionObj.skip = true; + break; + + // ⭕ target + case "target": + actionObj.trigger = false + actionObj.pulse = false + break; // handled by jump action + + // 🔼 raise or lower pitch of all future sounds + case "transpose": + transposition = modifyNumber(transposition, val, x.operator) + transposition = Number(clamp(transposition, -60, 60).toFixed(4)) + break; + + // ⚡ flash + case "flash": + break; // nothing here, go figure + + // ⛶ pulse screen + case "pulse": + if (scrubbing) actionObj.skip = true // disable pulse scrubbing, will fix eventually + else { + actionObj.count = Math.floor(clamp(+x.dualVal[0], 0, 1000)) + actionObj.frequency = clamp(Number(x.dualVal[1]).toFixed(4), 0, 1000) + actionObj.trigger = false + actionObj.pulseID = pulseID + if (!actionObj.frequency) actionObj.skip = true + + if (actionObj.count > 1 && actionObj.frequency > 0) { + for (let i=1; i < actionObj.count; i++) { + let pulseTime = timer + ((beatLength(bpm) * actionObj.frequency * i)) + if (!order.find(e => e.action == x.action && e.time == pulseTime)) order.push({ + index, + action: x.action, + pulse: true, + pulseID, + trigger: i == actionObj.count - 1, + time: pulseTime / 1000, + element: x.element, img: actionObj.img + }) + } + pulseID++ + } + else actionObj.trigger = true + if (actionObj.count < 1) actionObj.stopPulses = true + } + break; + + // 🎨 background color + case "bg": + actionObj.bgColor = x.dualVal[0].match(colorRegex) ? x.dualVal[0] : defaultBG + actionObj.fadeTime = scrubbing ? 0.1 : clamp(Number(x.dualVal[1]).toFixed(4), 0, 200) + break; + } + + if (!actionObj.skip) order.push(actionObj) + + } + + index++ + if (!scrubbing && incrementTimer) timer += beatLength(bpm) + } + return order.sort((a, b) => a.time - b.time) +} + +let lastPos = -200 // last scroll position +let lastPulse = 0 // last pulse action +let startTime = 0 // time when sequence started + +let playingSequence = []; +let nextSoundToQueue = 0; +let nextAction = 0; + +function playSequence(sequence) { + updateTempo(defaultTempo) + setVolume(defaultVolume) + lastPulse = 0 + startTime = soundcloud.currentTime + + playingSequence = sequence; + nextSoundToQueue = 0; + nextAction = 0; + queueSounds(); + checkActions(); +} + +// how many seconds of sound to queue ahead. +const queueAhead = 5; + +function queueSounds() { + for ("tempooptimizer wtf is this for loop -colon"; nextSoundToQueue < playingSequence.length; nextSoundToQueue++) { + let x = playingSequence[nextSoundToQueue]; + if (startTime + x.time > soundcloud.currentTime + queueAhead) break; + + // this is either a sound or a cut + if (x.action === "cut") cutSounds(startTime + x.time); + else if (x.sound !== undefined) { + let pitch = semitonesToPercent(clamp(x.pitch, -72, 72)) + playSound(x.sound, { pitch, playAt: startTime + x.time, index: x.index, volume: x.volume / 200 }) + } + } + if (nextSoundToQueue < playingSequence.length) { + // use setTimeout for background playback, requestAnimationFrame for less lag spikes -TempoOptimizer + // works for me -Colon + setTimeout(queueSounds, 1000); + } +} + +function checkActions() { + if (!active) return; + + // run for each action where time > current time + for ("ksdjfsdf8sdkfjsdkfjak"; nextAction < playingSequence.length; nextAction++) { + let x = playingSequence[nextAction]; + if (startTime + x.time > soundcloud.currentTime) break; // stops the loop + if (x.triggered) continue; // does not stop the loop + + x.triggered = true + let icon = x.element + let img = x.img + + // sounds just bounce! + if (x.sound) { + icon.runAnimation('bounce') + } + + else if (x.action && !settings.noAnimations) { + + if (x.pulse) icon.runAnimation('pulse'); + if (x.trigger) img.runAnimation('triggered'); + + if (x.untriggered && x.untriggered.length) { + x.untriggered.forEach(n => { + let foundUntrigger = $('#sequence div').eq(n) + foundUntrigger.find('img').removeClass('triggered') + }) + } + + // here we go again! + switch (x.action) { + + case "speed": + updateTempo(x.bpm) + break; + + case "volume": + setVolume(x.volume); + break; + + case "stop": + let beatsLeft = icon.find('p') + beatsLeft.attr("triggeredCountdown", true) + if (x.finished) beatsLeft.text(x.duration) + else beatsLeft.text(x.remaining + 1) + break; + + case "loopmany": + let loopsLeft = icon.find('p') + loopsLeft.attr("triggeredCountdown", true) + if (x.remaining <= 0) loopsLeft.text("") + else loopsLeft.text(x.remaining) + break; + + case "jump": + let jumpTarget = $('#sequence div').eq(x.target) + jumpTarget.runAnimation('pulse') + jumpTarget.find('img').runAnimation('triggered') + break; + + case "flash": + if (!x.scrub) $('#everything').runAnimation('screenflash'); + break; + + case "pulse": + if (x.pulseID > lastPulse) lastPulse = x.pulseID + if (!x.scrub && !x.stopPulses && (lastPulse == x.pulseID)) $('body').runAnimation('screenpulse'); + break; + + case "bg": + if (!x.ignore) $('html').css('transition-duration', x.fadeTime + "s").css('background-color', x.bgColor) + } + + } + + if (settings.autoScroll) { + let pixelsBeforeScroll = 600 + let newPos = icon.prop("offsetTop") - 150 + if (Math.abs(newPos - lastPos) > pixelsBeforeScroll) { + $('#everything').stop().animate({ scrollTop: newPos }, 350) + lastPos = newPos + } + if (x.action == "divider") lastPos = -1000 // dividers always trigger autoscroll + } + } + + if (nextAction < playingSequence.length) { + requestAnimationFrame(checkActions); + } else { + cancel({ keepAnimations: true }); + } +} diff --git a/thirtydollarwebsite/🎨.css b/thirtydollarwebsite/🎨.css new file mode 100644 index 00000000..511d63c8 --- /dev/null +++ b/thirtydollarwebsite/🎨.css @@ -0,0 +1,753 @@ +@import url('https://fonts.googleapis.com/css?family=Lato'); + +html { + --bg: #36393c; + --emojired: #DD2E44; + --emojiyellow: #F4900C; + --emojigreen: #77B255; + --emojiblue: #3B88C3; + --emojipurple: #9266CC; + + --yellowfont: #ccff55; + --greenfont: #00FF64; + --bluefont: #00A2FF; + + background-color: var(--bg); + height: 100%; + + overflow: hidden; + transition-duration: 0.2s; + transition-property: background-color; + + --mainhotbarwidth: 855px; + --mobilehotbarwidth: 90%; + --largehotbarwidth: calc(var(--mainhotbarwidth) * 2) +} + +body { + margin: 0 0; + display: flex; + flex-direction: column; + width: 100%; + height: 100%; +} + +body.dragOver { + background-color: rgba(255, 255, 255, 0.2); + transition-duration: 0.2s; +} + +#everything { + position: fixed; + width: 100%; + height: 100%; + overflow: auto; +} + +p, h1, vol { + font-family: Lato, Helvetica, Arial, sans-serif; + font-size: 16px; + color: white; + margin-bottom: 10px; + -webkit-text-size-adjust: none +} + +h1 { + font-size: 24px; +} + +vol { + display: block; + margin: 0px 0px; +} + +a { + color: aqua !important; +} + +img { + -webkit-user-drag: none; +} + +.iconbox, .infobox, .title { + margin: auto; +} + +.iconbox.loadingIcons { + flex-wrap: nowrap; + justify-content: center; +} + +.multiline { + line-height: 27px; +} + +.title { + font-size: 40px; + margin-top: 15px; + margin-bottom: 10px; + white-space: nowrap; + cursor: pointer; +} + +#main { + display: flex; + flex-direction: column; + margin: auto; + padding: 0px 30px; +} + +.sideboxes { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.infobox { + display: flex; + justify-content: space-between; + align-items: flex-end; +} + +.infobox span { + display: flex; + flex-wrap: wrap; + margin-bottom: 10px; +} + +.infobox span p { + margin: 0px 0px; + display: block; +} + +.infobox span p:after { content: "•"; margin: 0px 7px; font-size: 14px; } +.infobox span p:last-child:after { content: none; } + +.iconbox { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + align-items: center; + border-radius: 8px; + background-color: rgba(0, 0, 0, 0.25); + min-height: 80px; + user-select: none; + padding: 20px 10px; + margin-bottom: 20px; + scrollbar-width: thin; + touch-action: manipulation; +} + +.iconbox img, .hotbar img { + cursor: pointer; + border-radius: 8px; + color: white; + object-fit: contain; + width: 56px; + height: 56px; + padding: 5px 5px; + display: block; + font-family: Lato, Helvetica, Arial, sans-serif; + color: rgba(255, 255, 255, 0.7); +} + +.iconbox div, .hotbar div { + border-radius: 8px; + position: relative; +} + +.iconbox div:hover img, .hotbar div:hover img { + background-color: rgba(255, 255, 255, 0.15); +} + +#sequence .holdingShift:hover img { + background-color: rgba(64, 255, 64, 0.33); +} + +.iconbox .group { + width: 1000px; +} + +#icons, #actions, .hotbar { + overflow-y: auto; +} + +#everything::-webkit-scrollbar, .iconbox::-webkit-scrollbar, .fancyScroll::-webkit-scrollbar { + width: 12px; + background: rgba(0, 0, 0, 0.15); + border-radius: 10px; +} + +#everything::-webkit-scrollbar-thumb, .iconbox::-webkit-scrollbar-thumb, .fancyScroll::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.33); + border-radius: 10px; +} + +#everything::-webkit-scrollbar-corner, .iconbox::-webkit-scrollbar-corner, .fancyScroll::-webkit-scrollbar-corner { + background: rgba(0, 0, 0, 0); +} + +#sequence { + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + padding: 20px 7.5px 20px; + margin-bottom: 0px; +} + +#sequence div { + height: 70px; + overflow-y: scroll; + scrollbar-width: none; +} + +#sequence img { + width: 58px; + height: 58px; + padding: 6.5px 6px; + margin-bottom: 200px; + margin-top: 200px; +} + +#sequence div::-webkit-scrollbar { + width: 0px; + background: rgba(0, 0, 0, 0); +} + +#sequence section { + display: flex; + flex-wrap: wrap; + border: 2.5px solid rgba(0, 0, 0, 0); + border-radius: 8px; + min-height: 75px; + min-width: 75px; +} + +section:not(:empty) + section:empty { + background-color: rgba(255, 255, 255, 0.05); +} + +#sequence section:not(:last-child) { + margin-bottom: 40px; +} + +#sequence section.holdingCtrl:not(.removedDivider) { + border-color: aqua; + background-color: rgba(255, 255, 255, 0.1); + cursor: pointer; +} + +#sequence section.selectedDivider { + border-color: lime !important; +} + +#sequence section.sectionHidden:not(.selectedDivider) { + height: 40px; + min-height: 40px; + max-height: 40px; + border-color: rgba(255, 255, 255, 0.25); + overflow: hidden; +} + +#sequence section.sectionHidden { + opacity: 33%; +} + +#sequence section.sectionHidden:not(.selectedDivider) div { + pointer-events: none; +} + +.iconbox p, .iconbox vol { + width: 100%; + font-weight: bold; + text-shadow: 0px 0px 4px black; + position: absolute; +} + +#sequence p { + top: 235px; + white-space: nowrap; + overflow-x: auto; +} + +#sequence vol { + top: 201px; + text-align: right; + white-space: nowrap; + overflow-x: auto; + font-size: 13px; + color: #cccccc; +} + +#actions p { + right: 25px; + top: 16px; + font-size: 26px; +} + +.playbuttons { + display: flex; + justify-content: left; + flex-direction: column; + user-select: none; +} + +.playbuttons div { + display: flex; + align-items: center; + margin-bottom: 18px; + border-radius: 8px; + padding-left: 15px; + transition-duration: 0.1s; + cursor: pointer; +} + +.playbuttons p { + font-size: 16px; + margin: 0px 0px 7px 0px; + text-align: left; +} + +.playbuttons h1 { + margin: 0px 0px 2px 0px; +} + +.playbuttons img { + margin: 12px 16px 12px 0px; + width: 36px; + height: 36px; +} + +.playbuttons div:hover { transform: scale(1.02) } +.playbuttons div:active { transform: scale(1.05) } + +.sectionControls { + display: flex; +} + +.sectionControls img { + height: 40px; + margin-right: 15px; + cursor: pointer; + user-select: none; +} + +.sectionControls img.cantSelect { + opacity: 33%; + pointer-events: none; +} + +.sectionControls img:hover { transform: scale(1.02) } +.sectionControls img:active { transform: scale(1.05) } + +#sectionSettings.pinnedSettings { + position: fixed; + background-color: #262626; + border-top-right-radius: 8px; + border-top: 3px solid #202020; + border-right: 3px solid #202020; + bottom: 0px; + left: 0px; + z-index: 2; + padding: 12px 0px 12px 12px; + transition-duration: 0.2s; + transition-timing-function: ease-in-out; + transition-property: transform; +} + +#sectionSettings.pinnedSettings .noPin { + display: none; +} + +#sectionSettings.pinnedSettings.pinnedHidden { + transform: translateY(250%); +} + +.saveButtons div { + width: 180px; + background-color: var(--emojipurple); + margin: 8px 16px 16px 16px; +} + +.alreadySaved { + pointer-events: none; + opacity: 50%; + /* background-color: rgba(120, 100, 140, 0.5) !important; */ +} + +.credits { + display: flex; + justify-content: center; +} + +.credits p { + color: rgba(255, 255, 255, 0.33) !important; + margin: 10px 20px; +} +.credits a { color: rgba(255, 255, 255, 0.66) !important } + +.socialLinks { + display: flex; + justify-content: center; +} + +.socialTag { + display: flex; + justify-content: center; + align-items: center; + margin-left: 15px; + width: 105px; +} + +.socialTag a { + display: flex; + justify-content: center; + align-items: center; + text-decoration: underline white; +} + +.socialTag p { + font-size: 20px; + margin: 0px 0px 0px 2px; +} + +.socialTag img { + height: 20px; + margin-right: 5px; +} + +.sortPlaceholder { + opacity: 15%; +} + +.shiftPlaceholder { + display: block !important; +} + +.popup { + position: fixed; + display: flex; + align-content: center; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + top: 0; left: 0; right: 0; bottom: 0; + background-color: rgba(0,0,0,0.66); + z-index: 3; + text-align: center; +} + +.popupbox { + background-color: var(--bg); + border-radius: 5px; + width: 500px; + padding: 10px 5px 30px 5px; +} + +.popupdesc { + margin-top: 0px; + width: 400px; + margin: auto; + line-height: 24px; +} + +.popupinput { + margin-top: 20px; + display: flex; + justify-content: center; + align-items: center; +} + +.popupinput p { + margin: 0px 0px 0px 10px; + font-size: 18px; +} + +.extraSetting { + display: flex; + align-items: center; + margin: 5px 00px; + width: 200px; + cursor: pointer; +} + +.extraSetting p { + margin: 0px 5px; + text-align: left; +} + +.extraSetting:hover { + text-decoration: underline; + text-decoration-color: white; + text-decoration-style: dotted; +} + +.settingList { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + padding: 3px 45px; + margin-top: 10px; +} + +.shortcutList { + display: flex; + flex-wrap: wrap; + text-align: left; + height: 515px; + overflow: auto; + justify-content: space-between; + margin: 0px 15px 30px 15px; + padding-left: 30px; + background-color: rgba(0, 0, 0, 0.2); + border-radius: 10px; +} + +.shortcutList .groupName { + text-decoration: underline; +} + +.shortcutSection { + width: 320px; + margin-bottom: 20px; +} + +button, input { + font-family: Lato, Helvetica, Arial, sans-serif; + font-size: 18px; + text-align: center; + color: white; + height: 40px; + border-radius: 5px; + outline: none; + border: none; + background-color: rgba(0, 0, 0, 0.5); +} + +input[type=number] { + font-weight: bold; + width: 90px; + -moz-appearance: textfield; +} + +input[type=checkbox] { + cursor: pointer; + width: 24px; + height: 24px; +} + +input[type=checkbox]:before { + width: 24px; + height: 24px; + display: inline-block; + content: ""; + background-image: url(../assets/check_off.svg); +} + +input[type=checkbox]:checked:before { + background-image: url(../assets/check_on.svg); +} + +input[type=color] { + visibility: hidden; + pointer-events: none; +} + +.colorPreview { + border-radius: 5px; + border: 2px solid black; + width: 38px; + height: 38px; + margin-left: 12px; + cursor: pointer; +} + +button { + width: 100px; + background-color: rgba(255, 255, 255, 0.2); + cursor: pointer; + transition-duration: 0.1s; + margin: 0px 5px; +} + +#proHotbar { + position: fixed; + bottom: 30px; + z-index: 1; + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + pointer-events: none; + --hotbarwidth: var(--mainhotbarwidth); + transition-duration: 0.2s; + transition-timing-function: ease-in-out; + transition-property: transform; +} + +#proHotbar.playing { + transform: translateY(250%); +} + +.hotbar { + pointer-events: all; + border: 3px solid black; + width: var(--hotbarwidth); + height: 140px; + border-radius: 8px; + background-color: #1d1d1d; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + justify-content: flex-start; + align-items: center; + user-select: none; + touch-action: manipulation; + scrollbar-width: thin; + padding: 6px 6px; + overflow: auto; +} + +.hotbar img { + width: 48px; + height: 48px; + padding: 5px 11px; +} + +.hotbar p { + position: absolute; + right: 48px; + top: 8px; + font-size: 24px; +} + +.hotbarLabel { + margin-bottom: 5px; + margin-left: 10px; + text-shadow: 1px 1px 3px black, -1px -1px 3px black, 1px -1px 3px black, -1px 1px 3px black; +} + +.hotbarTabs { + width: var(--hotbarwidth); + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-end; +} + +.hotbarTab { + pointer-events: all; + width: 70px; + height: 36px; + border: 3px solid black; + border-bottom: 0px; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + margin-right: 5px; + background-color: #1d1d1d; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + transition-duration: 0.1s; +} + +.hotbarTab:first-child { + margin-left: 5px +} + +.hotbarTab img { + user-select: none; + height: 65%; + opacity: 50%; + transition-duration: 0.1s; +} + +.hotbarTab.selectedTab { + transform: translateY(3px); + height: 38px; + cursor: default; +} + +.hotbarTab.selectedTab img { + opacity: 100%; +} + +.hotbarTab:hover img { + opacity: 75%; +} + +#hotbarHovertext { + max-width: 445px; +} + +button:hover, .imgButton:hover { transform: scale(1.05); } +button:active, .imgButton:active { transform: scale(1.1); } + +input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0 } + +@media screen and (max-width: 1000px) { + #icons_container { width: 428px !important; } + #main { width: 750px !important; } + .title { width: 720px !important; white-space: normal !important; } + .infobox { flex-direction: column; align-items: flex-start; } + .infobox h1 { margin-bottom: 3px; } + .infobox span p { text-align: right; margin: 4px 0px 0px 0px; } + .infobox span p:after { content: "•"; margin: 0px 4px; font-size: 12px; } + .hotbar, .hotbarTabs { width: var(--mobilehotbarwidth) } + #proHotbar { --hotbarwidth: --mobilehotbarwidth; bottom: 50px; } + #hotbarNotes { height: 250px; } + #hotbarHovertext { max-width: 250px; } + #extraPadding { height: 400px !important } +} +@media screen and (min-width: 1000px) { + .mobileOnly { display: none !important; } +} +@media screen and (min-width: 2500px) { + #hotbarNotes { height: 15vh; } +} +@media screen and (min-width: 3250px) { + #proHotbar { --hotbarwidth: var(--largehotbarwidth) } +} + +.placed { animation: smallbounce 0.3s } +.bounce { animation: bounce 0.4s } +.pulse { animation: pulse 0.4s } +.screenflash { animation: screenflash 0.66s } +.screenpulse { animation: screenpulse 0.33s } +.triggered { animation: greyout 0.2s; animation-fill-mode: forwards; } + +@keyframes bounce { + 0% { transform: translateY(0); animation-timing-function: ease-out; } + 40% { transform: translateY(-15px); animation-timing-function: ease-in; } + 0% { transform: translateY(0); } +} + +@keyframes smallbounce { + 0% { transform: translateY(0); animation-timing-function: ease-out; } + 40% { transform: translateY(-5px); animation-timing-function: ease-in; } + 0% { transform: translateY(0); } +} + +@keyframes pulse { + 0% { transform: scale(1); animation-timing-function: ease-out; } + 50% { transform: scale(1.1); animation-timing-function: ease-in; } + 0% { transform: scale(1); } +} + +@keyframes greyout { + 0% { opacity: 100%; filter: grayscale(0); animation-timing-function: ease-out; } + 100% { opacity: 50%; filter: grayscale(0.15); } +} + +@keyframes screenflash { + 0% { background-color: rgba(255, 255, 255, 0.66); } + 100% { background-color: rgba(255, 255, 255, 0); } +} + +@keyframes screenpulse { + 40% { transform: scale(1.05); animation-timing-function: ease-out; } + 100% { transform: scale(1); animation-timing-function: ease-in; } +} \ No newline at end of file diff --git a/thirtydollarwebsite/💾.js b/thirtydollarwebsite/💾.js new file mode 100644 index 00000000..d75deed6 --- /dev/null +++ b/thirtydollarwebsite/💾.js @@ -0,0 +1,266 @@ +let filename = "sequence" +let extension = ".🗿" + +function enableNewSaving() { + sexySaving = true + $('#saveAsText').text("Save As") + $('#saveBtn').show() +} + +function disableNewSaving() { + sexySaving = false + $('#saveAsText').text("Save") + $('#saveBtn').hide() +} + +let sexySavingSupported = typeof window.showSaveFilePicker === "function" // very few browsers support this awesome api +let sexySaving = !settings.oldSaving && sexySavingSupported +if (!sexySaving) disableNewSaving() +else enableNewSaving() + +$('#saveOptions').show() +if (sexySavingSupported) $('.requiresNewSaving').show() + +// read placed sounds and create sequence file +function generateSequenceFile() { + let startingTime = Date.now() + console.log(`Exporting sequence... (${$('#sequence div').length} icons)`) + let sequenceList = [] + let toAdd = "" + $('#sequence div').each(function() { + let x = $(this) + if (x.attr('sound')) { + let snd = x.attr('str') + let pitch = x.attr('pitch') + let vol = x.attr('vol') + let foundSnd = soundList.find(x => x.id == snd) + let soundID = foundSnd ? (foundSnd.emoji || foundSnd.id) : (snd || "_pause") + let hasPitch = (pitch && pitch != 0) + toAdd = (hasPitch ? `${soundID}@${pitch}` : soundID) + if (vol && vol != 100) toAdd += `${!hasPitch ? "@0" : ""}%${vol}` + } + else if (x.attr('action')) { + let action = x.attr('action') + let actionStr = "!" + action + if (action == "divider") actionStr += "\n" + else if (x.attr('advanced')) { + actionStr += `@${x.attr("val1")},${x.attr("val2")}` + } + else if (x.attr('amount')) { + let num = x.attr('num') + actionStr += ("@" + Number(x.attr('amount'))) + actionStr += (num == "add" ? "@+" : num == "multiply" ? "@x" : "") + } + toAdd = (actionStr) + } + if (sequenceList.length && sequenceList[sequenceList.length - 1][0] == toAdd) sequenceList[sequenceList.length - 1][1]++ + else sequenceList.push([toAdd, 1]) + }) + let finalString = sequenceList.map(x => `${x[0]}${x[1] > 1 ? "=" + x[1] : ""}`).join("|") + console.log(`Exporting took ${+((Date.now() - startingTime) / 1000).toFixed(2)}s`) + return finalString +} + +// upon clicking 'save as' (or just save for old browsers) +$('#downloadBtn').click(function() { + let saveData = generateSequenceFile() + if (!saveData.length) return + let blob = new Blob([saveData], {type: 'text/txt;charset=UTF-8'}); + if (ctrlHeld && altHeld) return openSequencePreview(blob) + return sexySaving ? modernSave(blob) : classicSave(blob) +}) + +// saving through element, for browsers that don't support the new file reading stuff +function classicSave(data) { + let saveData = generateSequenceFile() + if (!saveData.length) return + let downloader = document.createElement('a'); + downloader.href = URL.createObjectURL(data) + downloader.dataset.downloadurl = ['text/txt', downloader.download, downloader.href].join(':'); + downloader.style.display = "none"; downloader.download = filename + extension + downloader.target = "_blank"; document.body.appendChild(downloader); + downloader.click(); document.body.removeChild(downloader); + setUnsavedChanges(false) + $('#saveBtn').addClass('alreadySaved') +} + +// saving through file api, for cool browsers +function modernSave(data) { + window.showSaveFilePicker({suggestedName: filename + extension}) + .then(selectedFile => { + selectedFile.createWritable().then(writable => { + setSaveLocation(selectedFile) + setUnsavedChanges(false) + writable.write(data).then(() => writable.close()).catch(console.error) + }).catch(console.error) + }).catch(console.error) +} + +// moai-ify the filename +function setFilename(name) { + filename = name + if (filename.endsWith(extension)) filename = filename.slice(0, extension.length * -1) + $('#saveName').val(filename) +} + +// set location for quick saving +let saveLocation = null +function setSaveLocation(file) { + setFilename(file.name) + saveLocation = file +} + +// save to last opened/saved file +function quickSave() { + if (!saveLocation || saveLocation.name != filename + extension) return $('#downloadBtn').trigger('click') // save as + let saveData = generateSequenceFile() + if (!saveData.length) return + if (ctrlHeld && altHeld) return openSequencePreview(new Blob([saveData], {type: 'text/txt;charset=UTF-8'})) + saveLocation.createWritable().then(async writable => { + writable.write(saveData).then(() => { + setUnsavedChanges(false) + writable.close() + }).catch((e) => alert(e)) + }).catch(() => {}) +} + +// open sequence preview in new tab +function openSequencePreview(blob) { + let blobURL = URL.createObjectURL(blob) + window.open(blobURL) +} + +// on file input +let reader = new FileReader(); +$("#loadFile").on('change', function() { + readLoadedFile(this.files[0]) +}) + +function readLoadedFile(file) { + if (!file) return + $('#sequence').html("") + $('#loadFile').val("") + reader.readAsText(file) + reader.onload = (function(f) { + loadSequence(f.target.result) + saveLocation = null + setFilename(file.name) + }); +} + +// load/read/parse sequence file +function loadSequence(data) { + let startingTime = Date.now() + console.log(`Loading sequence... (size: ${+(data.length / 1000).toFixed(2)} KB)`) + try { + let sequenceData = ""; + (data || "").replace(/\s/g, "").split("|").forEach(x => { + let [data, count] = x.split("=") + let [main, pitch, num] = data.split("@") + if (!main || !data) return + let isAction = main.startsWith("!") + let element = null + if (isAction) { + main = main.slice(1) // remove ! + element = $(`.action[action=${main}]`).first().clone() + if (!element.length) return + let actionData = actions.find(x => x.name == main) + if (actionData.twoValues) { + if (!element.find("p").length) element.append("

") + for (let i=0; i<(count || 1); i++) sequenceData += addAdvancedAction(actionData.name, pitch.split(","), element, true).prop('outerHTML') + return + } + else if (actionData.amount || actionData.isTarget) { + if (actionData.isTarget && !pitch) pitch = 1 + if (!element.find("p").length) element.append("

") + if (num == "x") num = "multiply" + else if (num == "+") num = "add" + for (let i=0; i<(count || 1); i++) sequenceData += addAction(main, +pitch, num, element, true).prop('outerHTML'); + return + } + } + else { + if (main.includes("%")) { [main, pitch] = main.split("%"); pitch = "%" + pitch } + let [pitchVal, volVal] = (pitch || "").split("%").map(x => +x) + let foundSound = soundList.find(x => x.id != "_pause" && (x.id == main || x.emoji == main)) + element = $(`.sound[str=${foundSound ? foundSound.id : "_pause"}]`).first().clone() + if (foundSound) { + if (pitchVal) { + element.attr('pitch', pitchVal) + element.append(`

${pitchVal > 0 ? "+" : ""}${pitchVal}

`) + } + + if (volVal || volVal === 0 + ) { + element.attr('vol', volVal) + element.append(`${volVal}%`) + } + } + element.removeAttr("soundorigin") + element.removeAttr("soundname") + } + if (element) for (let i=0; i<(count || 1); i++) sequenceData += (element[0].outerHTML) + }) + $('#sequence')[0].innerHTML = sequenceData + deselectSection() + syncSections() + fetchRequiredSounds() + setUnsavedChanges(false) + cancel() + console.log(`Loading took ${+((Date.now() - startingTime) / 1000).toFixed(2)}s`) + } + catch(e) { alert("That file couldn't be loaded!"); console.warn(e) } +} + +// remove unsafe filename characters +function safeFilename(str) { return str.replace(/[/\\:*?"<>|]/g, "") } + +$('#saveName').on('input keydown keyup blur', function() { + let safeName = safeFilename($(this).val()) + filename = safeName || "sequence" + $(this).val(safeName) +}) + +// dragging +$('body').on('dragover dragenter', function(e) { + e.preventDefault(); + e.stopPropagation(); + if (!active && e.originalEvent.dataTransfer.types.includes("Files")) $('body').addClass('dragOver') + return false +}) + +$('body').on('dragleave dragend drop', function(e) { + e.preventDefault(); + e.stopPropagation(); + $('body').removeClass('dragOver') + return false +}) + +$('body').on('drop', function(e){ + if (active) return false + if (e.originalEvent.dataTransfer){ + if (e.originalEvent.dataTransfer.files.length) { + e.preventDefault(); + e.stopPropagation(); + let hasUnsaved = unsavedChanges && $('#sequence').children().length + if (hasUnsaved && !confirm("Are you sure you want to load this file? Any unsaved changes will be lost.")) return + readLoadedFile(e.originalEvent.dataTransfer.files[0]) + } + } +}); + +function setUnsavedChanges(unsaved) { + unsavedChanges = !!unsaved + if (unsavedChanges) $('#saveBtn').removeClass('alreadySaved') + else $('#saveBtn').addClass('alreadySaved') +} + +// exit confirmation +let unsavedChanges = false +$('#sequence').on('DOMSubtreeModified', function() { setUnsavedChanges(true) }); +window.onbeforeunload = function(e) { + if (unsavedChanges && $('#sequence').children().length && settings.exitConfirmation) { + e.returnValue = "🗿"; + return cancel() + } +}; \ No newline at end of file diff --git a/thirtydollarwebsite/🗿.js b/thirtydollarwebsite/🗿.js new file mode 100644 index 00000000..882cda6e --- /dev/null +++ b/thirtydollarwebsite/🗿.js @@ -0,0 +1,1011 @@ +let sounds = {} +let soundcloud = new AudioContext(); +let recent = new Set() + +const mobile = ( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) +if (mobile) $('p[mobile]').each(function() { $(this).text($(this).attr('mobile')); $('.nomobile').hide() }) + +const intros = [ + {name: $('#caption').text(), path: "assets/dont_you_lecture_me.wav" }, + {name: "how you gonna talk behind my back when you deadass built like a", path: "assets/you_deadass_built_like_a.wav" }, + {name: "white people be like", path: "assets/white_people_be_like.wav" } +] + +const actions = [ + { shortcut: "t", action: "Set tempo", amount: true, name: "speed", image: "assets/action_speed.png", default: 300, set: [10, 10000], add: [-10000, 10000], multiply: [0.01, 1000, 0.1] }, + { shortcut: "v", action: "Set volume", amount: true, name: "volume", image: "assets/action_volume.png", default: 100, set: [0, 600, 1, "%"], add: [-600, 600, 1, "%"], multiply: [0.01, 1000, 0.1] }, + { shortcut: "p", action: "Pause for duration", amount: true, name: "stop", image: "assets/action_stop.png", default: 4, set: [0, 1000] }, + { shortcut: "m", action: "Transpose", amount: true, name: "transpose", image: "assets/action_transpose.png", default: 1, set: [-60, 60], add: [-60, 60], multiply: [0.01, 100, 0.1] }, + + { shortcut: "l", action: "Loop", amount: true, name: "loopmany", image: "assets/action_loopmany.png", default: 4, set: [1, 1000] }, + { shortcut: "r", action: "Loop once", name: "loop", image: "assets/action_loop.png" }, + { shortcut: "s", action: "Set loop start point", name: "looptarget", image: "assets/action_looptarget.png" }, + { shortcut: "c", action: "Combine sounds", name: "combine", image: "assets/action_combine.png" }, + + { shortcut: "g", action: "Go to target", isTarget: true, name: "jump", image: "assets/action_jump.png", set: [1, 9999] }, + { shortcut: "a", action: "Target", isTarget: true, name: "target", image: "assets/action_target.png", set: [1, 9999] }, + { shortcut: "x", action: "Stop all sounds", name: "cut", stopSounds: true, image: "assets/action_cut.png" }, + { shortcut: "o", action: "Set start position", name: "startpos", image: "assets/action_startpos.png" }, + + { shortcut: "d", action: "Add divider", name: "divider", image: "assets/action_divider.png" }, + { shortcut: "f", action: "Flash screen", name: "flash", image: "assets/action_flash.png" }, + { shortcut: "u", action: "Pulse screen", amount: true, twoValues: [[0, 1000], [0.1, 128]], scroll: [0, 1], default: [1, 2], name: "pulse", image: "assets/action_pulse.png" }, + { shortcut: "b", action: "Set background color", amount: true, colorMode: true, twoValues: [["color"], [0, 128]], scroll: [1, 0.25], default: ["X", 1], name: "bg", image: "assets/action_bg.png" } +] +actions.forEach(x => { $('#actions').append(`
${x.action}${x.amount ? "

+

" : ""}
`) }) + +let soundList = [] +fetch("./sounds.json").then(x => x.json()).then(list => { + soundList = list + $('#iconboxLoading').hide() + $('#icons').removeClass('loadingIcons') + list.forEach(x => { + let imageLink = (!x.emoji && x.id.match(/[a-z0-9]/i)) ? `icons/${x.img || x.id}.png` : `https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/${(x.emoji || x.id).codePointAt(0).toString(16)}.svg` + $('#icons').append(`
"tag_" + x).join(" ")}>${x.name}
`) + lastGroup = x.group + + if (settings.proMode) { + $('.hotbarTab').first().trigger('click') + $('#proHotbar').show() + $('#extraPadding').show() + buildHotbar() + } + }) +}).catch((e) => { + console.error(e) + $('#icons img').hide() + $('#icons').addClass('loadingIcons') + $('#iconboxLoading').show() + $('#loadingText').text("Something went wrong!") + $('#errorInfo').text(e.message) +}) + +let hotbar = $('#hotbarNotes') +function buildHotbar(filter="sounds") { + $('#hotbarNotes .placed').removeClass('placed') + hotbar.html("") // clear hotbar + + if (filter == "recent") { + let recentNotes = [...recent].slice(-48).reverse() + recentNotes.forEach(x => { + if (x.startsWith(".")) hotbar.append($(`#actions div[action=${x.slice(1)}]`).prop('outerHTML') || "") // action + else hotbar.append($(`#icons div[str=${x}]`).prop('outerHTML') || "") // sound + }) + return + } + + // whether to pull from sounds, actions, or both + let pool = (filter == "actions" ? "#actions div" : ["recent", "favorite"].includes(filter) ? "#icons div, #actions div" : "#icons div") + + $(pool).each(function() { + let x = $(this) + if (filter == "notes" && !x.is('[tag_note]')) return + else if (filter == "percussion" && !x.is('[tag_percussion]')) return + hotbar.append(x.prop('outerHTML')) + }) +} + +function updateRecent(id) { + recent.delete(id); recent.add(id) +} + +let defaultBG = "#36393c" +let colorRegex = /^#[a-f0-9]{6}$/i + +let cloneSort = false + +$('#sequence').sortable({ + tolerance: "pointer", + helper: "clone", + containment: "#sequence", + placeholder: "sortPlaceholder", + items: "div", + cursor: "move", + delay: mobile ? 1500 : 0, + forcePlaceholderSize: true, forceHelperSize: true, + start: function(event, ui) { + cloneSort = shiftHeld || altHeld + if (cloneSort) ui.item.addClass('shiftPlaceholder') + ui.placeholder.html(ui.item.html()) + }, + stop: function(event, ui) { + if (cloneSort) { + ui.item.clone().insertAfter(ui.item); + $(this).sortable('cancel'); + ui.item.clone() + } + cloneSort = false + $('.shiftPlaceholder').removeClass('shiftPlaceholder') + $('.placed').removeClass('placed') + cancel() + if ($("#sequence section").length > 1) { + if (ui.item.attr("action") == "divider") deselectSection() + syncSections() + } + } +}) + +$(document).on('mouseover', '#icons div', function () { + let soundCredit = $(this).attr('soundName') + let soundOrigin = $(this).attr('soundOrigin') + $('#soundText').hide() + $('#soundName').text(soundCredit) + $('#soundOrigin').text(soundOrigin ? ` (${soundOrigin})` : "") + $('#soundInfo').show() +}) + +$(document).on('mouseleave', '#icons div', function () { + $('#soundInfo').hide() + $('#soundText').show() +}) + +$(document).on('mouseover', '#actions div', function () { + $('#actionText').hide() + $('#actionInfo').show() + $('#actionName').text($(this).attr('info')) + if (!mobile && !settings.noActionShortcuts) $('#actionKey').text("(" + $(this).attr('key') + ")").show() + else $('#actionKey').hide() +}) + +$(document).on('mouseleave', '#actions div', function () { + $('#actionInfo').hide() + $('#actionText').show() +}) + +$(document).on('mouseover', '#sequence div', function () { + if (shiftHeld || altHeld) $(this).addClass('holdingShift') +}) + +$(document).on('mouseleave', '#sequence div', function () { + $('.holdingShift').removeClass('holdingShift') +}) + +$(document).on('mouseover', '#sequence section', function () { + if (ctrlHeld && hasDividers()) $(this).addClass('holdingCtrl') +}) + +$(document).on('mouseleave', '#sequence section', function () { + $('.holdingCtrl').removeClass('holdingCtrl') +}) + +$(document).on('mouseleave', '#sequence .removedDivider', function (e) { + if (!e.isTrigger) $(this).removeClass('removedDivider') +}) + +$(document).on('mouseover', '.hotbarTab', function() { + $('#hotbarText').css('color', 'var(--yellowfont)').text($(this).attr('desc')).show() + $('#hotbarContext').css('color', 'var(--yellowfont)').text("(" + ($(this).index() + 1) + ")").show() +}) + +$(document).on('mouseover', '#hotbarNotes div.sound', function() { + let origin = $(this).attr("soundOrigin") + $('#hotbarText').css('color', 'var(--greenfont)').text($(this).attr('soundName')).show() + if (!mobile) $('#hotbarContext').css('color', 'var(--greenfont)').text(origin ? `(${origin})` : "").show() +}) + +$(document).on('mouseover', '#hotbarNotes div.action', function() { + $('#hotbarText').css('color', 'var(--bluefont)').text($(this).attr('info')).show() + if (!mobile && !settings.noActionShortcuts) $('#hotbarContext').css('color', 'var(--bluefont)').text("(" + $(this).attr('key') + ")").show() +}) + +$(document).on('mouseleave', '#hotbarNotes div, .hotbarTab', function (e) { + $('#hotbarText, #hotbarContext').text("").hide() +}) + +// prevents right click menu from showing +$(document).on('click contextmenu', '.iconbox, #proHotbar', function () { return false }) + +$(document).on('click contextmenu', '#icons div, #hotbarNotes div.sound', function (event) { + cancel() + let sound = $(this).attr('sound') + let soundID = $(this).attr('str') + let added = $(this.outerHTML) + let pitch = null + if (event.type == "contextmenu") { + if (!settings.noAnimations) $(this).runAnimation('placed') + playSound(sound) + return false + } + if (pitch) added.append(`

${pitch >= 0 ? "+" : ""}${pitch}

`) // ??? + if (!sound.startsWith("_")) { + if (!settings.noAnimations) added.runAnimation('placed') + playSound(sound, { pitch: semitonesToPercent(pitch)} ) + } + added.removeAttr("soundorigin") + added.removeAttr("soundname") + updateRecent(soundID); + addToSequence(added) +}) + +$(document).on('click contextmenu', '#actions div, #hotbarNotes div.action', function (event) { + cancel() + let actionName = $(this).attr('action') + let action = actions.find(x => x.name == actionName) + if (!action) return + + let added = $(this.outerHTML) + added.removeAttr("info").removeAttr("key") + + if (action.amount) { + stash = added + if (event.type == "contextmenu" && action.default) { + if (action.twoValues) return addAdvancedAction(actionName, action.default) + else return addAction(actionName, action.default) + } + else { + if (shiftHeld) stash.attr("addToStart", true) + let actionPopup = $(`#action_${actionName}`) + actionPopup.css('display', 'flex') + + // action editing - fill values + if (replaceAction && replaceAction.attr("action") == actionName) { + if (action.twoValues) { + $(actionPopup.find('input').first().val(replaceAction.attr("val1"))).trigger('input') + $(actionPopup.find('input').last().val(replaceAction.attr("val2"))).trigger('input') + } + else $(actionPopup.find('input').first().val(replaceAction.attr("amount"))).trigger('input') + } + + return + } + } + else if (action.isTarget) { + let nextFree = 1 + while ($(`.action[action=jump][amount=${nextFree}]`).length && $(`.action[action=target][amount=${nextFree}]`).length) nextFree++ + added.attr("amount", nextFree).append(`

${nextFree}

`) + } + else if (action.set) { + if (action.showPlus) added.attr("num", "plus") + added.attr("amount", action.default).append(`

${getPrefix(added.attr("num"), action.default)}${action.default}

`) + } + if (action.stopSounds) stopSounds() + if (!settings.noAnimations) added.addClass('placed') + if (action.name == "divider") { + if (!shiftHeld && selectedDivider >= 0) selectedDivider++ + } + + updateRecent("." + actionName) + addToSequence(added) +}) + +function getPrefix(num, amt) { + return num == "plus" ? (amt >= 0 ? "+" : "") : num == "add" ? "+" : num == "multiply" ? "⨯" : "" +} + +function addToSequence(element, noPrepend, copyGroup) { + let startAttr = element.attr("addToStart") + if (startAttr) element.removeAttr("addToStart") + let prependMode = (shiftHeld && !noPrepend) || startAttr + let container = $(`#sequence section[group="${selectedDivider}"]`) + if (copyGroup >= 0 && selectedDivider != copyGroup) container = [] + if (!container.length) container = prependMode ? $(`#sequence section`).first() : $(`#sequence section`).last() + if (!container.length) { // jquery isn't exactly good at 'or', whatever + $("#sequence").append(`
`) + return addToSequence(element) + } + prependMode ? container.prepend(element) : appendToSection(container, element) + if (element.attr("action") == "divider") syncSections() +} + +// add to end, or second last if it ends with a divider +function appendToSection(container, element) { + let lastChild = container.children().last() + let hasDivider = (lastChild.attr("action") == "divider") + if (hasDivider) element.insertBefore(lastChild) + else container.append(element) +} + +function addAction(action, input, num="set", element=stash, dontAppend=false) { + if (typeof input == "string" && input.startsWith("#")) input = $(input).val() + if (!element || isNaN(input)) return + let amount = Number(Number(input).toFixed(3)) // tofixed converts to string lmao + let foundAction = actions.find(x => x.name == action) + let actionData = foundAction[num] + + amount = clamp(amount, actionData[0], actionData[1]) + let prefix = getPrefix(num, amount) + let amountStr = prefix + String(amount) + (actionData[3] || "") + //element.attr("min", actionData[0]).attr("max", actionData[1]) + if (num != "set") element.attr("num", num) + if (!isNaN(actionData[2])) element.attr("step", actionData[2]) + if (actionData[3]) element.attr("suffix", actionData[3]) + if (!settings.noAnimations) element.addClass('placed') + element.attr("amount", amount).find('p').text(amountStr) + + if (replaceAction) editAction(element) + else if (!dontAppend) addToSequence(element) + else return element + updateRecent("." + action) + if (stash) stash = null + $('.popup').hide() +} + +// eh i'm just gonna make a new function for this +function addAdvancedAction(action, inputs, element=stash, dontAppend=false) { + let foundAction = actions.find(x => x.name == action) + if (!foundAction || !Array.isArray(inputs)) return + let cleanInputs = inputs.map((x, y) => { + let bounds = foundAction.twoValues[y] + if (bounds == "color") x = x.match(colorRegex) ? x : defaultBG + else if (Array.isArray(bounds)) x = clamp(x, bounds[0], bounds[1]) + return x + }) + + element.attr("advanced", true).attr("val1", cleanInputs[0]).attr("val2", cleanInputs[1]) + + if (foundAction.colorMode) element.find('p').html(` ${cleanInputs[1]}`) + else element.find('p').text(`${cleanInputs[0]}, ${cleanInputs[1]}`) + + if (replaceAction) editAction(element) + else if (!dontAppend) addToSequence(element) + else return element + if (stash) stash = null + $('.popup').hide() +} + +function editAction(element) { + replaceAction.replaceWith(element) + replaceAction.runAnimation('placed') + replaceAction = null +} + +function syncSections() { + let noteGroups = [""] + let dividerIndex = 0 + let collapsedSections = [] + $('.placed').removeClass('placed') + $('.selectedDivider').removeClass('selectedDivider') + $('#sequence div').each(function() { + let isDivider = $(this).attr("action") == "divider" + if (isDivider) { + let oldSection = Number($(this).attr("section")) + if (oldSection >= 0 && $(this).parent().hasClass("sectionHidden")) collapsedSections.push(dividerIndex) + $(this).attr("section", dividerIndex) + } + + noteGroups[dividerIndex] += $(this).prop("outerHTML") + + if (isDivider) { + dividerIndex++ + noteGroups.push("") + } + }) + $('#sequence').html(noteGroups.map((x, y) => `
${x}
`).join("")) + if (dividerIndex > 0) $('#sectionSettings').show() + else $('#sectionSettings').hide() +} + +function hasDividers() { + return $("#sequence section").length > 1 +} + +function deselectSection() { + selectedDivider = -1 + if (ctrlHeld) $('.selectedDivider').addClass('removedDivider') + displaySection() +} + +function changeSection(change, scroll) { + let totalDividers = $('#sequence section').length + if (totalDividers <= 1) return selectedDivider = -1 + + if (selectedDivider == -1 && change < 0) selectedDivider = totalDividers - 1 + else if (selectedDivider == -1 && change > 0) selectedDivider = 0 + else selectedDivider = selectedDivider + change + + if (selectedDivider < 0) selectedDivider = totalDividers - 1 + else if (selectedDivider >= totalDividers) selectedDivider = 0 + + displaySection(scroll) +} + +function displaySection(scroll) { + $(".selectedDivider").removeClass("selectedDivider") + if (selectedDivider >= 0) { + let foundDivider = $(`#sequence section[group="${selectedDivider}"]`) + foundDivider.addClass("selectedDivider") + $('.requiresSelected').removeClass('cantSelect') + $('#selectedSection').text(selectedDivider + 1) + if (foundDivider.hasClass("sectionHidden")) { $('#hideSection').hide(); $('#showSection').show() } + else { $('#hideSection').show(); $('#showSection').hide() } + if (!active && scroll) $('#everything').stop().animate({ scrollTop: foundDivider.prop("offsetTop") - 150 }, 100) + } + else { + $('.requiresSelected').addClass('cantSelect') + $('#selectedSection').text("None") + $('#hideSection').show(); + $('#showSection').hide() + } +} + +function toggleSectionVisibility(section=selectedDivider) { + if (section < 0) return + $(`#sequence section[group="${section}"]`).toggleClass('sectionHidden') + displaySection() +} + +$(document).on('click contextmenu', '#sequence section', function (e) { + if (!ctrlHeld) return + e.stopPropagation() + if (!hasDividers()) return + let dividerGroup = parseInt($(this).attr("group")) + if (isNaN(dividerGroup)) return + + if (e.type == "contextmenu") { + toggleSectionVisibility(dividerGroup) + return false + } + + if ($(this).hasClass("selectedDivider")) return deselectSection() + + else { + selectedDivider = dividerGroup + if (isNaN(selectedDivider)) return selectedDivider = -1 + displaySection() + } +}) + +$(document).on('click', '#sequence div', function () { + if (ctrlHeld) return + cancel() + if (shiftHeld || altHeld) { + let copy = $(this).clone() + if (!settings.noAnimations) copy.addClass('placed') + copy.insertAfter($(this)) + playSound($(this).attr("sound"), { pitch: getPitch($(this)), volume: getVolume($(this)), stopPrevious: true }) + } + else $(this).remove() + if ($(this).attr("action") == "divider") { + deselectSection() + syncSections() + } +}) + +$(document).on('contextmenu', '#sequence div', function () { + if (ctrlHeld || active) return false + + let snd = $(this).attr("sound") + let acn = $(this).attr("action") + if (shiftHeld || altHeld) { // clone and append to end + let copy = $(this).clone() + if (!settings.noAnimations) copy.addClass('placed') + addToSequence(copy, true, Number($(this).parent().attr("group"))) + playSound(snd, { pitch: getPitch($(this)), volume: getVolume($(this)), stopPrevious: true}) + return false + } + + else if ($(this).hasClass("action") && acn) { + let foundAction = actions.find(x => x.name == acn) + if (!foundAction || !foundAction.amount) return false + replaceAction = $(this) + let actionBtn = $(`#actions div[action="${acn}"]`) + if (!actionBtn.length) return + actionBtn.trigger("click") + return false + } + + else if (!active && snd) { + if (!settings.noAnimations) $(this).runAnimation('placed') + playSound(snd, { pitch: getPitch($(this)), volume: getVolume($(this)), stopPrevious: true}) + return false + } +}) + +// hotbar tabs +$(document).on('click', '.hotbarTab:not(.selectedTab)', function () { + $('.selectedTab').removeClass('selectedTab') + $(this).addClass('selectedTab') + buildHotbar($(this).attr("tab")) +}) + +$("#everything").scroll(function(){ + if (settings.dontFadeProBar || mobile) return + let normal = 30 + let top = 200 / 1.5 + let dist = Math.min(normal, ($(this).scrollTop() - 200) / 1.5) + let percent = Math.max(0, ((dist + top) / (normal + top)) * 100) + + $("#proHotbar").css("bottom", dist + "px") + .css("opacity", percent + "%") + .css("visibility", percent < 2 ? "hidden" : "visible") +}); + +// no idea what this is for but probably some sorting bug +function whatthefuck(el, index) { + $('#sequence').sortable('cancel') + el.remove().insertAfter('#sequence div')[index] +} + +let lastY = null +let mobileCooldown = false +$(document).on('wheel touchmove', '#sequence div', function(event) { + let el = $(this) + if (event.type == "touchmove") { + if (mobileCooldown || $('.ui-sortable-helper').length) return + let clientY = event.originalEvent.touches[0].clientY; + let sensitivity = 50 + if (clientY > (lastY + sensitivity)) event.arrowDelta = 21 + else if (clientY < (lastY - sensitivity)) event.arrowDelta = -21 + else return + + lastY = clientY; + mobileCooldown = true + setTimeout(() => { mobileCooldown = false; $('#sequence div').scrollTop(200) }, 25); + $('#sequence div').scrollTop(200) + } + if (active || $(this).hasClass('ui-sortable-helper')) return + let isVolume = (ctrlHeld && el.attr("sound")) + let downward = (event.arrowDelta || event.originalEvent.deltaY) > 0 + let foundAction = actions.find(x => x.name == el.attr("action")) + let foundText = el.attr("amount") || el.attr("pitch") || el.find("p").text() + let shift = Number(foundText) || 0 + if (isVolume) { + shift = Number(el.attr("vol")) + if (isNaN(shift) || shift < 0) shift = 100 + } + + if (el.attr("sound") && !el.attr("str").startsWith("_")) { + let shiftChange = ((downward ? -1 : 1) * (shiftHeld ? (isVolume ? 10 : 6) : altHeld ? 0.2 : 1)) + + if (!isVolume) { + shift += shiftChange + shift = Number(clamp(shift, -60, 60).toFixed(2)) + let prefix = shift > 0 ? "+" : "" + if (foundText && shift == 0) el.find("p").remove() + else if (!el.find("p").length) el.append(`

${prefix + shift}

`) + else el.find("p").text(prefix + shift) + el.attr("pitch", shift) + playSound(el.attr("sound"), { pitch: semitonesToPercent(shift), volume: getVolume(el), stopPrevious: true }) + } + + else { + if (shiftChange == 1 || shiftChange == -1) shiftChange *= 2 + shift += shiftChange + shift = Number(clamp(shift, 0, 400).toFixed(2)) + if (shift == 100) el.find("vol").remove() + else if (!el.find("vol").length) el.append(`${shift}%`) + else el.find("vol").text(shift + "%") + el.attr("vol", shift) + playSound(el.attr("sound"), { pitch: getPitch(el), volume: shift / 100 / 2, stopPrevious: true }) + } + } + else if (el.attr("action") && el.attr("amount")) { + let bounds = foundAction[el.attr("num") || "set"] + let step = bounds[2] || 1 + if (shiftHeld) step *= 10 + else if (altHeld) step /= 10 + shift += downward ? step * -1 : step + shift = Number(shift.toFixed(4)) + shift = clamp(shift, bounds[0], bounds[1] || 999) + el.attr("amount", shift) + el.find("p").text(getPrefix(el.attr("num"), shift) + shift + (bounds[3] || "")) + } + else if (foundAction && el.attr("advanced")) { + let scrollInfo = foundAction.scroll + let valStr = scrollInfo[0] == 0 ? "val1" : "val2" + let scrollVal = +el.attr(valStr) + let twoBounds = foundAction.twoValues[scrollInfo[0]] + let step = +scrollInfo[1] || 1 + if (shiftHeld) step *= 10 + else if (altHeld) step /= 10 + scrollVal += downward ? step * -1 : step + scrollVal = clamp(scrollVal.toFixed(4), twoBounds[0], twoBounds[1]) + el.attr(valStr, scrollVal) + if (foundAction.colorMode) el.find("p").children().last().text(el.attr("val2")) + else el.find("p").text(`${el.attr("val1")}, ${el.attr("val2")}`) + } +}) + +// prevent ctrl+zoom +$('.iconbox, #proHotbar').bind('mousewheel DOMMouseScroll', function(e) { if (e.ctrlKey) e.preventDefault(); }); + +let intro = 0 +let lecture = null +let cachedIntros = [] +let mainNode = new GainNode(soundcloud) + +$('#caption').click(function() { + intro++ + if (intro >= intros.length) intro = 0 + $('#caption').text(intros[intro].name).runAnimation('placed') + stopIntro() + loadIntro() + cancel() +}) + +function loadIntro() { + let introPath = intros[intro].path + if (cachedIntros[introPath]) lecture = cachedIntros[introPath] + else { + fetch(introPath) + .then(res => res.arrayBuffer()) + .then(buffer => soundcloud.decodeAudioData(buffer)) + .then(data => { + cachedIntros[introPath] = data + lecture = data + }) + } +} +loadIntro() + +let activeIntro = null +function playIntro() { + stopIntro() + let introSound = new AudioBufferSourceNode(soundcloud, { buffer: lecture }) + mainNode.connect(soundcloud.destination) + introSound.connect(mainNode) + introSound.start() + activeIntro = introSound + introSound.addEventListener("ended", () => { + if (introSound.dead) return + beginSequence() + stopIntro() + }) +} + +function stopIntro() { + if (!activeIntro) return + activeIntro.dead = true + activeIntro.disconnect() + activeIntro = null +} + +document.addEventListener('scroll', function (event) { if ($(event.target).is("#sequence div")) $(event.target).scrollTop(200) }, true); +$('#sequence').on('DOMSubtreeModified', function(event) { $('#sequence div').scrollTop(200) }); + +// https://stackoverflow.com/a/45036752 +$.fn.runAnimation = function(className) { + if (settings.noAnimations) return + let el = $(this)[0] + el.style.animation = "none" + el.offsetHeight + el.style.animation = null + $(this).addClass(className) +} + +let stash = null +let replaceAction = null +let defaultTempo = 300 +let defaultVolume = 100 + +let preloaded = null +let active = false +let scrubbing = false +let ctrlHeld = false +let shiftHeld = false +let altHeld = false +let onCooldown = false +let selectedDivider = -1 + +let volume = 0 +updateTempo(defaultTempo) +setVolume(defaultVolume) + +function clamp(num, min, max) { return Math.min(Math.max(num , min), max) } +function percentToSemitones(percent) { return Math.log(percent, 2) * 12 } +function semitonesToPercent(semitones) { return Math.pow(2, Number(semitones) / 12) } +function getPitch(element) { return semitonesToPercent(element.find('p').text() || "0") } +function getVolume(element) { return Number(element.find('vol').text().slice(0, -1) || 100) / 200 } + +function cancel(cancelOptions={}) { + if ((!cancelOptions.keepAnimations && active) || cancelOptions.stopSounds) stopSounds() + active = false + preloaded = null + updateTempo(defaultTempo) + setVolume(100) + if (!cancelOptions.keepAnimations) { + $('.bounce').removeClass('bounce') + $('.pulse').removeClass('pulse') + } + $('.playInfo').show() + $('.stopInfo').hide() + $('.pinnedHidden').removeClass("pinnedHidden") + $('#proHotbar').removeClass("playing") + $('.triggered').removeClass('triggered') + $('#sequence p[triggeredCountdown]').each(function() { resetAmount($(this)) }) + $('html').removeAttr("style") + stopIntro() +} + +function resetAmount(el) { + let parent = el.parent() + el.text(getPrefix(parent.attr('num'), +parent.attr('amount')) + parent.attr('amount') + (parent.attr('suffix') || "")) + el.removeAttr("triggeredcountdown") +} + +// on play button +function startSequence(instant=false) { + if (onCooldown || active || $('#sequence div').length < 1) return + onCooldown = true + setTimeout(() => { onCooldown = false }, 250); + stopSounds() + cancel() + active = true + $('#sectionSettings.pinnedSettings').addClass("pinnedHidden") + $('#proHotbar').addClass("playing") + $('.playInfo').hide() + $('.stopInfo').show() + + preloaded = preloadSequence() + + if (!instant && selectedDivider < 0) playIntro() + else beginSequence() +} + +// after "don't you lecture me" +function beginSequence() { + if (!preloaded) return + $('.placed').removeClass('placed') + playSequence(preloaded) +} + +function updateTempo(BPM) { + $('#BPM').text(+BPM.toFixed(4)) +} + +function setVolume(percent) { + volume = Number(clamp(percent / 200, 0, 3).toFixed(4)) + $('#volume').text(+(volume * 200).toFixed(4)) +} + +// currently playing sounds are stored here +let activeSounds = []; + +// remove any finished sounds from the active list +function clearPlayedSounds() { + activeSounds = activeSounds.filter(x => !x.sound.finished) +} + +// destroy sound +function killSound(snd, vol, clearList=true) { + snd.finished = true + snd.disconnect() + vol.disconnect() + if (clearList) clearPlayedSounds() +} + +// stop all sounds +function stopSounds() { + activeSounds.forEach(x => killSound(x.sound, x.gainNode, false)) + nextSoundToQueue = playingSequence.length; + clearPlayedSounds() +} + +// fetches and prepares sound +let currentlyFetching = {} // prevent earrape when trying to load the same sound multiple times +async function fetchSound(name) { + if (!sounds[name] && name != "sounds/pause.wav") { + currentlyFetching[name] = true + let newSound = await fetch(name).then(res => res.arrayBuffer()).then(buffer => soundcloud.decodeAudioData(buffer)) + sounds[name] = newSound + delete currentlyFetching[name] + } +} + +async function playSound(name, soundSettings={}) { + if (!name || name == "sounds/_pause.wav") return + if (currentlyFetching[name] && !soundSettings.playAt) return + if (!sounds[name]) await fetchSound(name) + let snd = new AudioBufferSourceNode(soundcloud, { buffer: sounds[name], playbackRate: soundSettings.pitch || 1 }) + let vol = new GainNode(soundcloud, { gain: !isNaN(soundSettings.volume) ? soundSettings.volume : 0.5 }) + vol.connect(soundcloud.destination) + snd.connect(vol) + + if (soundSettings.stopPrevious) { // clear all sounds with the same name + let foundSameSounds = activeSounds.filter(x => x.name == name) + foundSameSounds.forEach(x => killSound(x.sound, x.gainNode, false)) + clearPlayedSounds() + } + + let start = soundSettings.playAt || 0; + activeSounds.push({sound: snd, gainNode: vol, index: soundSettings.index || 0, name, pitch: soundSettings.pitch || 1, volume, cut: false, start}) + snd.start(start) + + snd.addEventListener("ended", () => { + killSound(snd, vol, !active) + }) +} + +function cutSounds(time) { + activeSounds.forEach(x => { + if (!x.cut && x.start <= time) { + x.cut = true; + x.sound.stop(time); + } + }) +} + +$('.skippableAction').each(function() { + $(this).html('(right click to skip this popup)') + $(this).attr("mobile", "(hold to skip this popup)") +}) + +$('#clearsounds').click(function() { + cancel({ stopSounds: true }); + $('#sequence').html(''); + $('#saveName').val(''); + $('#sectionSettings').hide() + $('.popup').hide(); + filename = "sequence" + saveLocation = null +}) + +$(document).on('keydown', function(e) { + if (e.originalEvent.repeat || e.target.nodeName == "INPUT" || mobile) return + let popupVisible = $('.popup').is(":visible") + + if (e.which == 191) { // slash key (toggle menus) + if (shiftHeld && !$('#shortcutMenu').is(":visible")) $('#settingsMenu').toggle() + else if (ctrlHeld && !$('#settingsMenu').is(":visible")) $('#shortcutMenu').toggle() + } + + else if (!popupVisible) { + if ([13, 32].includes(e.which)) { // enter, space + if (!active) $('#playBtn').triggerHandler('contextmenu') + else $('#stopBtn').click() + e.preventDefault() + } + + else if ([38, 40].includes(e.which)) { // up, down + + if (ctrlHeld) { + let change = e.which == 40 ? 1 : -1 + changeSection(change, true) + } + + else { + $('#sequence div:hover').first().trigger({type: "wheel", arrowDelta: e.which == 40 ? 69 : -69}) + e.preventDefault() + } + + } + + else if (settings.proMode && e.which >= 48 && e.which <= 57) { // number keys + let num = e.which - 48 + if (num <= 0) return + $('.hotbarTab').eq(num - 1).trigger('click') + } + + else if (e.which == 83 && e.ctrlKey) { // ctrl + s + $((sexySaving && !e.shiftKey) ? '#saveBtn' : '#downloadBtn').trigger('click') + e.preventDefault() + } + + else if (e.which == 79 && e.ctrlKey) { // ctrl + o + $("#loadBtn").trigger('click') + e.preventDefault() + } + + else if (e.which == 68 && e.ctrlKey) { // ctrl + d + deselectSection() + e.preventDefault() + } + + else if (e.which == 80 && e.ctrlKey) { + $('#toggleProMode').trigger('click') + e.preventDefault() + } + + else if (!ctrlHeld && !altHeld && !settings.noActionShortcuts) { // actions + let foundAction = actions.find(x => x.shortcut == e.key.toLowerCase()) + if (foundAction) $(`#actions .action[action="${foundAction.name}"]`).trigger("click") + } + } + + // popups + else { + if (e.which == 27) { // esc + $('.popup:not(.importantPopup)').hide() + } + + else if (e.which == 13) { // enter + $('button[actionConfirm=true]:visible').first().click() + } + } + +}); + +function updateKeys(e) { + if (e.repeat || e.ctrlKey === undefined) return + if (e.key === 'Alt') { e.preventDefault() } + shiftHeld = e.shiftKey; + altHeld = e.altKey; + ctrlHeld = e.ctrlKey; + $('#sequence div:hover').trigger((shiftHeld || altHeld) ? 'mouseover' : 'mouseleave') + $('#sequence section:not(.ctrlHeld):hover').trigger(ctrlHeld ? 'mouseover' : 'mouseleave') +} + +$(document).on('keyup keydown click wheel touchmove', updateKeys) +$(window).on('blur focus', updateKeys) + +$(document).on('click', '.popup:not(.importantPopup)', function(e) { + if ($(e.target).is('.popup')) { + $('.popup').hide(); + stash = null + replaceAction = null + } +}); + +$('.colorPreview').click(function() { + $(`.colorSelector[colorgroup=${$(this).attr("colorgroup")}`).trigger('click') +}) + +$('.colorSelector').on('input', function() { + $(`.colorPreview[colorgroup=${$(this).attr("colorgroup")}`).css("background-color", $(this).val()) + $(`.colorTextbox[colorgroup=${$(this).attr("colorgroup")}`).val($(this).val().slice(1)) +}) + +$('.colorTextbox').on('input', function() { + let cleanVal = $(this).val().toLowerCase().replace(/[^a-f0-9]/g, "").slice(0, 6) + $(this).val(cleanVal) + let colorVal = "#" + cleanVal + if (!colorVal.match(colorRegex)) return + else $('.colorSelector').val(colorVal).trigger('input') +}) + +// settings + +let settings = {} +try { + settings = localStorage["🗿"] ? JSON.parse(localStorage["🗿"]) : {} + $('.settingBox[setting]').each(function() { + let setting = $(this).attr('setting') + let foundSetting = settings[setting] + if ($(this).attr('inverted')) foundSetting = !foundSetting + if (foundSetting) $(this).prop('checked', foundSetting) + }) +} +catch(e) { console.error(e) } + +if (settings.pinSectionButtons) $('#sectionSettings').addClass("pinnedSettings") +if (!settings.dontFadeProBar && settings.proMode) $('#everything').trigger('scroll') + +$(document).on('change click', '.settingBox', function() { + let settingName = $(this).attr('setting') + let val = $(this).prop('checked') + if ($(this).attr('inverted')) val = !val + if (!val) delete settings[settingName] + else settings[settingName] = val + localStorage["🗿"] = JSON.stringify(settings) + + if (settingName == "oldSaving") { + if (val) disableNewSaving() + else enableNewSaving() + } + + else if (settingName == "pinSectionButtons") { + if (settings.pinSectionButtons) { + if (active) $('#sectionSettings').addClass("pinnedHidden") + $('#sectionSettings').addClass("pinnedSettings") + } + else $('#sectionSettings').removeClass("pinnedSettings") + } + + else if (settingName == "proMode") { + if (settings.proMode) { + $('.hotbarTab').first().trigger('click') + $('#proHotbar').show() + $('#extraPadding').show() + let pageHeight = $('#everything').prop("scrollHeight") + if (!ctrlHeld) $('#everything').animate({ scrollTop: pageHeight + 1000 }) + } + else { + $('#proHotbar').hide() + $('#extraPadding').hide() + } + } +}); + +$('.extraSetting').hover(function() { + $('#settingInfo').text($(this).attr("title")) + $('#settingInfo').show() + $('#settingHelp').hide() +}, function() { + $('#settingInfo').hide() + $('#settingHelp').show() +}) + +$('.extraSetting').click(function(e) { + if (mobile || e.isTrigger || e.target.nodeName == "INPUT") return + $(this).find('input').trigger('click') +}) diff --git a/thirtydollarwebsitelinks b/thirtydollarwebsitelinks new file mode 100644 index 00000000..3c3cf9bd --- /dev/null +++ b/thirtydollarwebsitelinks @@ -0,0 +1,210 @@ +https://thirtydollar.website/ +https://thirtydollar.website/%F0%9F%8E%A8.css?v=5a +https://thirtydollar.website/assets/stop.wav +https://thirtydollar.website/assets/play.wav +https://thirtydollar.website/assets/reset.wav +https://thirtydollar.website/assets/section_previous.wav +https://thirtydollar.website/assets/section_next.wav +https://thirtydollar.website/%F0%9F%97%BF.js?v=5a +https://thirtydollar.website/%E2%96%B6.js?v=5a +https://thirtydollar.website/%F0%9F%92%BE.js?v=5a +https://thirtydollar.website/assets/section_hide.wav +https://thirtydollar.website/assets/section_show.wav +https://thirtydollar.website/assets/section_deselect.wav +https://thirtydollar.website/assets/save.svg +https://thirtydollar.website/assets/load.svg +https://thirtydollar.website/assets/download.svg +https://thirtydollar.website/assets/tab_actions.svg +https://thirtydollar.website/assets/social_twitter.svg +https://thirtydollar.website/assets/social_tiktok.svg +https://thirtydollar.website/assets/social_youtube.svg +https://thirtydollar.website/assets/tab_all.svg +https://thirtydollar.website/assets/action_bg.wav +https://thirtydollar.website/assets/action_pulse.wav +https://thirtydollar.website/assets/action_flash.wav +https://thirtydollar.website/assets/action_divider.wav +https://thirtydollar.website/assets/action_startpos.wav +https://thirtydollar.website/assets/action_cut.wav +https://thirtydollar.website/assets/action_target.wav +https://thirtydollar.website/assets/action_jump.wav +https://thirtydollar.website/assets/action_loop.wav +https://thirtydollar.website/assets/action_combine.wav +https://thirtydollar.website/assets/action_looptarget.wav +https://thirtydollar.website/assets/action_loopmany.wav +https://thirtydollar.website/assets/action_transpose.wav +https://thirtydollar.website/assets/action_stop.wav +https://thirtydollar.website/assets/action_volume.wav +https://thirtydollar.website/assets/action_speed.wav +https://thirtydollar.website/assets/dont_you_lecture_me.wav +https://thirtydollar.website/sounds.json +https://thirtydollar.website/assets/check_off.svg +https://thirtydollar.website/assets/tab_percussion.svg +https://thirtydollar.website/assets/tab_notes.svg +https://thirtydollar.website/assets/tab_recent.svg +https://thirtydollar.website/sounds/empty.wav +https://thirtydollar.website/sounds/bruh.wav +https://thirtydollar.website/sounds/bong.wav +https://thirtydollar.website/sounds/boom.wav +https://thirtydollar.website/sounds/e.wav +https://thirtydollar.website/sounds/gnome.wav +https://thirtydollar.website/assets/%F0%9F%97%BF.wav +https://thirtydollar.website/sounds/isaac_hurt.wav +https://thirtydollar.website/sounds/toby.wav +https://thirtydollar.website/sounds/lancersplat.wav +https://thirtydollar.website/sounds/gaster.wav +https://thirtydollar.website/sounds/undertale_encounter.wav +https://thirtydollar.website/sounds/megalovania.wav +https://thirtydollar.website/sounds/undertale_crack.wav +https://thirtydollar.website/sounds/sans_voice.wav +https://thirtydollar.website/sounds/undertale_hit.wav +https://thirtydollar.website/sounds/bwomp.wav +https://thirtydollar.website/sounds/gd_quit.wav +https://thirtydollar.website/sounds/gd_diamonds.wav +https://thirtydollar.website/sounds/gd_orbs.wav +https://thirtydollar.website/sounds/gd_coin.wav +https://thirtydollar.website/sounds/gdcrash_orbs.wav +https://thirtydollar.website/sounds/fnf_death.wav +https://thirtydollar.website/sounds/gdcrash.wav +https://thirtydollar.website/sounds/fnf_right.wav +https://thirtydollar.website/sounds/fnf_down.wav +https://thirtydollar.website/sounds/fnf_up.wav +https://thirtydollar.website/sounds/fnf_left.wav +https://thirtydollar.website/sounds/builttoscale.wav +https://thirtydollar.website/sounds/perfectfail.wav +https://thirtydollar.website/sounds/choruskid.wav +https://thirtydollar.website/sounds/ook.wav +https://thirtydollar.website/sounds/karateman_bulb.wav +https://thirtydollar.website/sounds/karateman_throw.wav +https://thirtydollar.website/sounds/karateman_hit.wav +https://thirtydollar.website/sounds/karateman_offbeat.wav +https://thirtydollar.website/sounds/isaac_mantle.wav +https://thirtydollar.website/sounds/cowbell.wav +https://thirtydollar.website/sounds/adofaicymbal.wav +https://thirtydollar.website/sounds/adofai_ice.wav +https://thirtydollar.website/sounds/adofaikick.wav +https://thirtydollar.website/sounds/adofai_fire.wav +https://thirtydollar.website/sounds/midspin.wav +https://thirtydollar.website/sounds/rdmistake.wav +https://thirtydollar.website/sounds/rdclap.wav +https://thirtydollar.website/sounds/tonk.wav +https://thirtydollar.website/sounds/preecho.wav +https://thirtydollar.website/sounds/tab_decorations.wav +https://thirtydollar.website/sounds/tab_actions.wav +https://thirtydollar.website/sounds/tab_rooms.wav +https://thirtydollar.website/sounds/otto_stress.wav +https://thirtydollar.website/sounds/tab_rows.wav +https://thirtydollar.website/sounds/tab_sounds.wav +https://thirtydollar.website/sounds/otto_off.wav +https://thirtydollar.website/sounds/otto_happy.wav +https://thirtydollar.website/sounds/otto_on.wav +https://thirtydollar.website/sounds/ride2.wav +https://thirtydollar.website/sounds/skipshot.wav +https://thirtydollar.website/sounds/buttonpop.wav +https://thirtydollar.website/sounds/sidestick.wav +https://thirtydollar.website/sounds/hammer.wav +https://thirtydollar.website/sounds/shaker.wav +https://thirtydollar.website/sounds/BABA.wav +https://thirtydollar.website/sounds/mariopaint_car.wav +https://thirtydollar.website/sounds/mariopaint_plane.wav +https://thirtydollar.website/sounds/mariopaint_baby.wav +https://thirtydollar.website/sounds/mariopaint_swan.wav +https://thirtydollar.website/sounds/mariopaint_cat.wav +https://thirtydollar.website/sounds/mariopaint_dog.wav +https://thirtydollar.website/sounds/mariopaint_flower.wav +https://thirtydollar.website/sounds/mariopaint_star.wav +https://thirtydollar.website/sounds/mariopaint_gameboy.wav +https://thirtydollar.website/sounds/smw_yoshi.wav +https://thirtydollar.website/sounds/mariopaint_mario.wav +https://thirtydollar.website/sounds/mariopaint_luigi.wav +https://thirtydollar.website/sounds/smm_scream.wav +https://thirtydollar.website/sounds/bup.wav +https://thirtydollar.website/sounds/YOU.wav +https://thirtydollar.website/sounds/sm64_painting.wav +https://thirtydollar.website/sounds/sm64_hurt.wav +https://thirtydollar.website/sounds/thwomp.wav +https://thirtydollar.website/sounds/yahoo.wav +https://thirtydollar.website/sounds/smw_stomp2.wav +https://thirtydollar.website/sounds/smw_kick.wav +https://thirtydollar.website/sounds/smw_stomp.wav +https://thirtydollar.website/sounds/smw_spinjump.wav +https://thirtydollar.website/sounds/smw_1up.wav +https://thirtydollar.website/sounds/smw_coin.wav +https://thirtydollar.website/sounds/morshu.wav +https://thirtydollar.website/sounds/granddad.wav +https://thirtydollar.website/sounds/ultrainstinct.wav +https://thirtydollar.website/sounds/necoarc.wav +https://thirtydollar.website/sounds/yoda.wav +https://thirtydollar.website/sounds/hehehehaw.wav +https://thirtydollar.website/sounds/familyguy.wav +https://thirtydollar.website/sounds/pingas.wav +https://thirtydollar.website/sounds/taunt.wav +https://thirtydollar.website/sounds/samurai.wav +https://thirtydollar.website/sounds/flipnote.wav +https://thirtydollar.website/sounds/subaluwa.wav +https://thirtydollar.website/sounds/21.wav +https://thirtydollar.website/sounds/americano.wav +https://thirtydollar.website/sounds/stopposting.wav +https://thirtydollar.website/sounds/SLAM.wav +https://thirtydollar.website/sounds/op.wav +https://thirtydollar.website/sounds/obama.wav +https://thirtydollar.website/sounds/mrbeast.wav +https://thirtydollar.website/sounds/tf2_crit.wav +https://thirtydollar.website/sounds/nope.wav +https://thirtydollar.website/sounds/steve_oof.wav +https://thirtydollar.website/sounds/oof.wav +https://thirtydollar.website/sounds/hoenn.wav +https://thirtydollar.website/sounds/dimrainsynth.wav +https://thirtydollar.website/sounds/puyo.wav +https://thirtydollar.website/sounds/robtopphone.wav +https://thirtydollar.website/sounds/taiko_ka.wav +https://thirtydollar.website/sounds/taiko_don.wav +https://thirtydollar.website/sounds/boowomp.wav +https://thirtydollar.website/sounds/whipcrack.wav +https://thirtydollar.website/sounds/dodgeball.wav +https://thirtydollar.website/sounds/explosion.wav +https://thirtydollar.website/sounds/boing.wav +https://thirtydollar.website/sounds/metalpipe.wav +https://thirtydollar.website/sounds/airhorn.wav +https://thirtydollar.website/sounds/hitmarker.wav +https://thirtydollar.website/sounds/vvvvvv_hurt.wav +https://thirtydollar.website/sounds/gun.wav +https://thirtydollar.website/sounds/pan.wav +https://thirtydollar.website/sounds/slip.wav +https://thirtydollar.website/sounds/whatsapp.wav +https://thirtydollar.website/sounds/shatter.wav +https://thirtydollar.website/sounds/eight.wav +https://thirtydollar.website/sounds/buzzer.wav +https://thirtydollar.website/sounds/vvvvvv_flip.wav +https://thirtydollar.website/sounds/isaac_dead.wav +https://thirtydollar.website/sounds/amongus.wav +https://thirtydollar.website/sounds/celeste_diamond.wav +https://thirtydollar.website/sounds/celeste_spring.wav +https://thirtydollar.website/sounds/celeste_death.wav +https://thirtydollar.website/sounds/noteblock_flute.wav +https://thirtydollar.website/sounds/noteblock_pling.wav +https://thirtydollar.website/sounds/DEFEAT.wav +https://thirtydollar.website/sounds/minecraft_bell.wav +https://thirtydollar.website/sounds/noteblock_bit.wav +https://thirtydollar.website/sounds/noteblock_bass.wav +https://thirtydollar.website/sounds/noteblock_bell.wav +https://thirtydollar.website/sounds/noteblock_harp.wav +https://thirtydollar.website/sounds/noteblock_xylophone.wav +https://thirtydollar.website/sounds/noteblock_click.wav +https://thirtydollar.website/sounds/noteblock_guitar.wav +https://thirtydollar.website/sounds/noteblock_chime.wav +https://thirtydollar.website/sounds/noteblock_banjo.wav +https://thirtydollar.website/sounds/noteblock_snare.wav +https://thirtydollar.website/sounds/minecraft_anvil.wav +https://thirtydollar.website/sounds/minecraft_explosion.wav +https://thirtydollar.website/sounds/amogus.wav +https://thirtydollar.website/sounds/amogus_kill.wav +https://thirtydollar.website/sounds/terraria_axe.wav +https://thirtydollar.website/sounds/amogus_emergency.wav +https://thirtydollar.website/sounds/amongdrip.wav +https://thirtydollar.website/sounds/terraria_guitar.wav +https://thirtydollar.website/sounds/celeste_dash.wav +https://thirtydollar.website/sounds/terraria_pot.wav +https://thirtydollar.website/sounds/terraria_reforge.wav +https://thirtydollar.website/sounds/terraria_star.wav +https://thirtydollar.website/sounds/vvvvvv_flash.wav +https://thirtydollar.website/sounds/vvvvvv_checkpoint.wav diff --git a/transfer.html b/transfer.html new file mode 100644 index 00000000..8f23d52a --- /dev/null +++ b/transfer.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + Settings | Selenite + + + + + + + + + + + +
+ Home + Bookmarklets + Suggestions + Settings + Feedback + Discord + Support +
+ +
+

Transfer

+

Thank you for considering Selenite! Scroll down to view how to transfer game data from some of your favorite websites!

+
+

3kh0

+

Use the "Download Save" tool available on 3kh0, and click on the button below to import your data.

+ +
+

byvolp

+

Download your data by visiting the Doge Miner game, clicking Settings, and importing this save (make sure to Export Save on Doge Miner if you have any data first), then go to Stats and click Refresh. This will download a file, which you can then import using the Selenite Import Utility or clicking Upload Save on the main page of Selenite.

+ Video Tutorial +

Other Websites

+

Use our Download Save Utility to download your save from any website, as long as you can use bookmarklets!

+
+ + + + + +