├── LICENSE ├── README.md ├── images ├── esc.png ├── favicon.png ├── screenshot.png └── thumb.jpg ├── index.html ├── js ├── create.js ├── main.js └── words.js ├── netlify.toml ├── sounds ├── pluck.mp3 └── pluck.ogg └── style.css /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2019, Kailash Nadh. https://github.com/knadh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # word pluck 2 | A browser based typing game. Dusted out from a project from 2012. Uses CreateJS (an ancient version) to render game elements. 3 | 4 | [![screenshot](images/screenshot.png)](https://wordpluck.netlify.com) 5 | 6 | 7 | ## Demo 8 | [Play word pluck online](https://wordpluck.netlify.com) 9 | 10 | Licensed under the MIT license. 11 | -------------------------------------------------------------------------------- /images/esc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knadh/wordpluck/3fc5e18ccd2aeb982cfb5d91eef2ac7f8f4a7aca/images/esc.png -------------------------------------------------------------------------------- /images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knadh/wordpluck/3fc5e18ccd2aeb982cfb5d91eef2ac7f8f4a7aca/images/favicon.png -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knadh/wordpluck/3fc5e18ccd2aeb982cfb5d91eef2ac7f8f4a7aca/images/screenshot.png -------------------------------------------------------------------------------- /images/thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knadh/wordpluck/3fc5e18ccd2aeb982cfb5d91eef2ac7f8f4a7aca/images/thumb.jpg -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | word pluck - a browser based typing game 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |

Hello!

21 | 22 |
23 |
24 |

25 | 33 |
34 | 35 |

36 | 37 |
38 |

word pluck — when it rains, start typing.

39 |

Pause / Un-pause the game by pressing the Space key.

40 |

Enable Tips, to get a peek of the upcoming word (reduces scores slightly).

41 |

Turn your speakers down a little! You can turn the sound on / off using the checkbox on the right.

42 |
43 |

44 | 45 |

46 |
47 | 48 | 51 |
52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /js/create.js: -------------------------------------------------------------------------------- 1 | /* 2 | * EaselJS 3 | * Visit http://createjs.com/ for documentation, updates and examples. 4 | * 5 | * Copyright (c) 2011 gskinner.com, inc. 6 | * 7 | * Distributed under the terms of the MIT license. 8 | * http://www.opensource.org/licenses/mit-license.html 9 | * 10 | * This notice shall be included in all copies or substantial portions of the Software. 11 | */ 12 | this.createjs=this.createjs||{};(function(){var c=function(){throw"UID cannot be instantiated";};c._nextID=0;c.get=function(){return c._nextID++};createjs.UID=c})();this.createjs=this.createjs||{}; 13 | (function(){var c=function(){throw"Ticker cannot be instantiated.";};c.useRAF=null;c._listeners=null;c._pauseable=null;c._paused=false;c._inited=false;c._startTime=0;c._pausedTime=0;c._ticks=0;c._pausedTicks=0;c._interval=50;c._lastTime=0;c._times=null;c._tickTimes=null;c._rafActive=false;c._timeoutID=null;c.addListener=function(a,l){a!=null&&(c._inited||c.init(),c.removeListener(a),c._pauseable[c._listeners.length]=l==null?true:l,c._listeners.push(a))};c.init=function(){c._inited=true;c._times=[]; 14 | c._tickTimes=[];c._pauseable=[];c._listeners=[];c._times.push(c._lastTime=c._startTime=c._getTime());c.setInterval(c._interval)};c.removeListener=function(a){var l=c._listeners;l&&(a=l.indexOf(a),a!=-1&&(l.splice(a,1),c._pauseable.splice(a,1)))};c.removeAllListeners=function(){c._listeners=[];c._pauseable=[]};c.setInterval=function(a){c._interval=a;c._inited&&c._setupTick()};c.getInterval=function(){return c._interval};c.setFPS=function(a){c.setInterval(1E3/a)};c.getFPS=function(){return 1E3/c._interval}; 15 | c.getMeasuredFPS=function(a){if(c._times.length<2)return-1;a==null&&(a=c.getFPS()|0);a=Math.min(c._times.length-1,a);return 1E3/((c._times[0]-c._times[a])/a)};c.setPaused=function(a){c._paused=a};c.getPaused=function(){return c._paused};c.getTime=function(a){return c._getTime()-c._startTime-(a?c._pausedTime:0)};c.getTicks=function(a){return c._ticks-(a?c._pausedTicks:0)};c._handleAF=function(){c._rafActive=false;c._setupTick();c._getTime()-c._lastTime>=(c._interval-1)*0.97&&c._tick()};c._handleTimeout= 16 | function(){c.timeoutID=null;c._setupTick();c._tick()};c._setupTick=function(){if(!(c._rafActive||c.timeoutID!=null)){if(c.useRAF){var a=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame;if(a){a(c._handleAF);c._rafActive=true;return}}c.timeoutID=setTimeout(c._handleTimeout,c._interval)}};c._tick=function(){var a=c._getTime();c._ticks++;var l=a-c._lastTime,b=c._paused;b&&(c._pausedTicks++, 17 | c._pausedTime+=l);c._lastTime=a;for(var d=c._pauseable,e=c._listeners.slice(),f=e?e.length:0,g=0;g100;)c._tickTimes.pop();for(c._times.unshift(a);c._times.length>100;)c._times.pop()};var b=window.performance&&(performance.now||performance.mozNow||performance.msNow||performance.oNow||performance.webkitNow);c._getTime=function(){return b&&b.call(performance)|| 18 | (new Date).getTime()};createjs.Ticker=c})();this.createjs=this.createjs||{}; 19 | (function(){var c=function(a,l,b,d,e,c,g,i,j){this.initialize(a,l,b,d,e,c,g,i,j)},b=c.prototype;b.stageX=0;b.stageY=0;b.rawX=0;b.rawY=0;b.type=null;b.nativeEvent=null;b.onMouseMove=null;b.onMouseUp=null;b.target=null;b.pointerID=0;b.primary=false;b.initialize=function(a,l,b,d,e,c,g,i,j){this.type=a;this.stageX=l;this.stageY=b;this.target=d;this.nativeEvent=e;this.pointerID=c;this.primary=g;this.rawX=i==null?l:i;this.rawY=j==null?b:j};b.clone=function(){return new c(this.type,this.stageX,this.stageY, 20 | this.target,this.nativeEvent,this.pointerID,this.primary,this.rawX,this.rawY)};b.toString=function(){return"[MouseEvent (type="+this.type+" stageX="+this.stageX+" stageY="+this.stageY+")]"};createjs.MouseEvent=c})();this.createjs=this.createjs||{}; 21 | (function(){var c=function(a,l,b,d,e,c){this.initialize(a,l,b,d,e,c)},b=c.prototype;c.identity=null;c.DEG_TO_RAD=Math.PI/180;b.a=1;b.b=0;b.c=0;b.d=1;b.tx=0;b.ty=0;b.alpha=1;b.shadow=null;b.compositeOperation=null;b.initialize=function(a,l,b,d,e,c){if(a!=null)this.a=a;this.b=l||0;this.c=b||0;if(d!=null)this.d=d;this.tx=e||0;this.ty=c||0;return this};b.prepend=function(a,l,b,d,e,c){var g=this.tx;if(a!=1||l!=0||b!=0||d!=1){var i=this.a,j=this.c;this.a=i*a+this.b*b;this.b=i*l+this.b*d;this.c=j*a+this.d* 22 | b;this.d=j*l+this.d*d}this.tx=g*a+this.ty*b+e;this.ty=g*l+this.ty*d+c;return this};b.append=function(a,l,b,d,e,c){var g=this.a,i=this.b,j=this.c,k=this.d;this.a=a*g+l*j;this.b=a*i+l*k;this.c=b*g+d*j;this.d=b*i+d*k;this.tx=e*g+c*j+this.tx;this.ty=e*i+c*k+this.ty;return this};b.prependMatrix=function(a){this.prepend(a.a,a.b,a.c,a.d,a.tx,a.ty);this.prependProperties(a.alpha,a.shadow,a.compositeOperation);return this};b.appendMatrix=function(a){this.append(a.a,a.b,a.c,a.d,a.tx,a.ty);this.appendProperties(a.alpha, 23 | a.shadow,a.compositeOperation);return this};b.prependTransform=function(a,l,b,d,e,f,g,i,j){if(e%360)var k=e*c.DEG_TO_RAD,e=Math.cos(k),k=Math.sin(k);else e=1,k=0;if(i||j)this.tx-=i,this.ty-=j;f||g?(f*=c.DEG_TO_RAD,g*=c.DEG_TO_RAD,this.prepend(e*b,k*b,-k*d,e*d,0,0),this.prepend(Math.cos(g),Math.sin(g),-Math.sin(f),Math.cos(f),a,l)):this.prepend(e*b,k*b,-k*d,e*d,a,l);return this};b.appendTransform=function(a,l,b,d,e,f,g,i,j){if(e%360)var k=e*c.DEG_TO_RAD,e=Math.cos(k),k=Math.sin(k);else e=1,k=0;f|| 24 | g?(f*=c.DEG_TO_RAD,g*=c.DEG_TO_RAD,this.append(Math.cos(g),Math.sin(g),-Math.sin(f),Math.cos(f),a,l),this.append(e*b,k*b,-k*d,e*d,0,0)):this.append(e*b,k*b,-k*d,e*d,a,l);if(i||j)this.tx-=i*this.a+j*this.c,this.ty-=i*this.b+j*this.d;return this};b.rotate=function(a){var l=Math.cos(a),a=Math.sin(a),b=this.a,d=this.c,c=this.tx;this.a=b*l-this.b*a;this.b=b*a+this.b*l;this.c=d*l-this.d*a;this.d=d*a+this.d*l;this.tx=c*l-this.ty*a;this.ty=c*a+this.ty*l;return this};b.skew=function(a,l){a*=c.DEG_TO_RAD;l*= 25 | c.DEG_TO_RAD;this.append(Math.cos(l),Math.sin(l),-Math.sin(a),Math.cos(a),0,0);return this};b.scale=function(a,l){this.a*=a;this.d*=l;this.tx*=a;this.ty*=l;return this};b.translate=function(a,l){this.tx+=a;this.ty+=l;return this};b.identity=function(){this.alpha=this.a=this.d=1;this.b=this.c=this.tx=this.ty=0;this.shadow=this.compositeOperation=null;return this};b.invert=function(){var a=this.a,l=this.b,b=this.c,d=this.d,c=this.tx,f=a*d-l*b;this.a=d/f;this.b=-l/f;this.c=-b/f;this.d=a/f;this.tx=(b* 26 | this.ty-d*c)/f;this.ty=-(a*this.ty-l*c)/f;return this};b.isIdentity=function(){return this.tx==0&&this.ty==0&&this.a==1&&this.b==0&&this.c==0&&this.d==1};b.decompose=function(a){a==null&&(a={});a.x=this.tx;a.y=this.ty;a.scaleX=Math.sqrt(this.a*this.a+this.b*this.b);a.scaleY=Math.sqrt(this.c*this.c+this.d*this.d);var b=Math.atan2(-this.c,this.d),h=Math.atan2(this.b,this.a);b==h?(a.rotation=h/c.DEG_TO_RAD,this.a<0&&this.d>=0&&(a.rotation+=a.rotation<=0?180:-180),a.skewX=a.skewY=0):(a.skewX=b/c.DEG_TO_RAD, 27 | a.skewY=h/c.DEG_TO_RAD);return a};b.reinitialize=function(a,b,h,d,c,f,g,i,j){this.initialize(a,b,h,d,c,f);this.alpha=g||1;this.shadow=i;this.compositeOperation=j;return this};b.appendProperties=function(a,b,h){this.alpha*=a;this.shadow=b||this.shadow;this.compositeOperation=h||this.compositeOperation;return this};b.prependProperties=function(a,b,h){this.alpha*=a;this.shadow=this.shadow||b;this.compositeOperation=this.compositeOperation||h;return this};b.clone=function(){var a=new c(this.a,this.b, 28 | this.c,this.d,this.tx,this.ty);a.shadow=this.shadow;a.alpha=this.alpha;a.compositeOperation=this.compositeOperation;return a};b.toString=function(){return"[Matrix2D (a="+this.a+" b="+this.b+" c="+this.c+" d="+this.d+" tx="+this.tx+" ty="+this.ty+")]"};c.identity=new c(1,0,0,1,0,0);createjs.Matrix2D=c})();this.createjs=this.createjs||{};(function(){var c=function(a,b){this.initialize(a,b)},b=c.prototype;b.x=0;b.y=0;b.initialize=function(a,b){this.x=a==null?0:a;this.y=b==null?0:b};b.clone=function(){return new c(this.x,this.y)};b.toString=function(){return"[Point (x="+this.x+" y="+this.y+")]"};createjs.Point=c})();this.createjs=this.createjs||{};(function(){var c=function(a,b,h,d){this.initialize(a,b,h,d)},b=c.prototype;b.x=0;b.y=0;b.width=0;b.height=0;b.initialize=function(a,b,h,d){this.x=a==null?0:a;this.y=b==null?0:b;this.width=h==null?0:h;this.height=d==null?0:d};b.clone=function(){return new c(this.x,this.y,this.width,this.height)};b.toString=function(){return"[Rectangle (x="+this.x+" y="+this.y+" width="+this.width+" height="+this.height+")]"};createjs.Rectangle=c})();this.createjs=this.createjs||{};(function(){var c=function(a,b,h,d){this.initialize(a,b,h,d)},b=c.prototype;c.identity=null;b.color=null;b.offsetX=0;b.offsetY=0;b.blur=0;b.initialize=function(a,b,h,d){this.color=a;this.offsetX=b;this.offsetY=h;this.blur=d};b.toString=function(){return"[Shadow]"};b.clone=function(){return new c(this.color,this.offsetX,this.offsetY,this.blur)};c.identity=new c("transparent",0,0,0);createjs.Shadow=c})();this.createjs=this.createjs||{}; 29 | (function(){var c=function(a){this.initialize(a)},b=c.prototype;b.complete=true;b.onComplete=null;b._animations=null;b._frames=null;b._images=null;b._data=null;b._loadCount=0;b._frameHeight=0;b._frameWidth=0;b._numFrames=0;b._regX=0;b._regY=0;b.initialize=function(a){var b,h,d;if(a!=null){if(a.images&&(h=a.images.length)>0){d=this._images=[];for(b=0;b0?Math.min(this._numFrames-a,g*i):g*i,j= 34 | 0;j>8&255,a=a>>16&255);return c==null?"rgb("+a+","+b+","+d+")":"rgba("+a+","+b+","+d+","+c+")"};b.getHSL=function(a,b,c,e){return e==null?"hsl("+a%360+","+b+"%,"+c+"%)":"hsla("+a%360+","+b+"%,"+c+"%,"+e+")"};b.BASE_64={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9, 36 | K:10,L:11,M:12,N:13,O:14,P:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,a:26,b:27,c:28,d:29,e:30,f:31,g:32,h:33,i:34,j:35,k:36,l:37,m:38,n:39,o:40,p:41,q:42,r:43,s:44,t:45,u:46,v:47,w:48,x:49,y:50,z:51,0:52,1:53,2:54,3:55,4:56,5:57,6:58,7:59,8:60,9:61,"+":62,"/":63};b.STROKE_CAPS_MAP=["butt","round","square"];b.STROKE_JOINTS_MAP=["miter","round","bevel"];b._ctx=(createjs.createCanvas?createjs.createCanvas():document.createElement("canvas")).getContext("2d");b.beginCmd=new c(b._ctx.beginPath, 37 | [],false);b.fillCmd=new c(b._ctx.fill,[],false);b.strokeCmd=new c(b._ctx.stroke,[],false);a._strokeInstructions=null;a._strokeStyleInstructions=null;a._fillInstructions=null;a._instructions=null;a._oldInstructions=null;a._activeInstructions=null;a._active=false;a._dirty=false;a.initialize=function(){this.clear();this._ctx=b._ctx};a.draw=function(a){this._dirty&&this._updateInstructions();for(var b=this._instructions,c=0,e=b.length;ck&&(f=k);g<0&&(g*=o=-1);g>k&&(g=k);i<0&&(i*=n=-1);i>k&&(i=k);j<0&&(j*=q=-1);j>k&&(j=k);this._dirty=this._active=true;var k=this._ctx.arcTo,p=this._ctx.lineTo;this._activeInstructions.push(new c(this._ctx.moveTo,[a+d-g,b]), 46 | new c(k,[a+d+g*o,b-g*o,a+d,b+g,g]),new c(p,[a+d,b+e-i]),new c(k,[a+d+i*n,b+e+i*n,a+d-i,b+e,i]),new c(p,[a+j,b+e]),new c(k,[a-j*q,b+e+j*q,a,b+e-j,j]),new c(p,[a,b+f]),new c(k,[a-f*m,b-f*m,a+f,b,f]),new c(this._ctx.closePath));return this};a.drawCircle=function(a,b,c){this.arc(a,b,c,0,Math.PI*2);return this};a.drawEllipse=function(a,b,d,e){this._dirty=this._active=true;var f=d/2*0.5522848,g=e/2*0.5522848,i=a+d,j=b+e,d=a+d/2,e=b+e/2;this._activeInstructions.push(new c(this._ctx.moveTo,[a,e]),new c(this._ctx.bezierCurveTo, 47 | [a,e-g,d-f,b,d,b]),new c(this._ctx.bezierCurveTo,[d+f,b,i,e-g,i,e]),new c(this._ctx.bezierCurveTo,[i,e+g,d+f,j,d,j]),new c(this._ctx.bezierCurveTo,[d-f,j,a,e+g,a,e]));return this};a.drawPolyStar=function(a,b,d,e,f,g){this._dirty=this._active=true;f==null&&(f=0);f=1-f;g==null?g=0:g/=180/Math.PI;var i=Math.PI/e;this._activeInstructions.push(new c(this._ctx.moveTo,[a+Math.cos(g)*d,b+Math.sin(g)*d]));for(var j=0;j>3,q=c[n];if(!q||o&3)throw"bad path data (@"+e+"): "+m;m=d[n];n||(i=j=0);g.length=0;e++;o=(o>>2&1)+2;for(n=0;n>5?-1:1,p=(p&31)<<6|k[a.charAt(e+1)];o== 49 | 3&&(p=p<<6|k[a.charAt(e+2)]);p=s*p/10;n%2?i=p+=i:j=p+=j;g[n]=p;e+=o}q.apply(this,g)}return this};a.clone=function(){var a=new b;a._instructions=this._instructions.slice();a._activeInstructions=this._activeInstructions.slice();a._oldInstructions=this._oldInstructions.slice();if(this._fillInstructions)a._fillInstructions=this._fillInstructions.slice();if(this._strokeInstructions)a._strokeInstructions=this._strokeInstructions.slice();if(this._strokeStyleInstructions)a._strokeStyleInstructions=this._strokeStyleInstructions.slice(); 50 | a._active=this._active;a._dirty=this._dirty;a.drawAsPath=this.drawAsPath;return a};a.toString=function(){return"[Graphics]"};a.mt=a.moveTo;a.lt=a.lineTo;a.at=a.arcTo;a.bt=a.bezierCurveTo;a.qt=a.quadraticCurveTo;a.a=a.arc;a.r=a.rect;a.cp=a.closePath;a.c=a.clear;a.f=a.beginFill;a.lf=a.beginLinearGradientFill;a.rf=a.beginRadialGradientFill;a.bf=a.beginBitmapFill;a.ef=a.endFill;a.ss=a.setStrokeStyle;a.s=a.beginStroke;a.ls=a.beginLinearGradientStroke;a.rs=a.beginRadialGradientStroke;a.bs=a.beginBitmapStroke; 51 | a.es=a.endStroke;a.dr=a.drawRect;a.rr=a.drawRoundRect;a.rc=a.drawRoundRectComplex;a.dc=a.drawCircle;a.de=a.drawEllipse;a.dp=a.drawPolyStar;a.p=a.decodePath;a._updateInstructions=function(){this._instructions=this._oldInstructions.slice();this._instructions.push(b.beginCmd);this._fillInstructions&&this._instructions.push.apply(this._instructions,this._fillInstructions);this._strokeInstructions&&(this._instructions.push.apply(this._instructions,this._strokeInstructions),this._strokeStyleInstructions&& 52 | this._instructions.push.apply(this._instructions,this._strokeStyleInstructions));this._instructions.push.apply(this._instructions,this._activeInstructions);this._fillInstructions&&this._instructions.push(b.fillCmd);this._strokeInstructions&&this._instructions.push(b.strokeCmd)};a._getEllipseArc=function(a,b,d,e){var f=d/2*0.5522848,g=e/2*0.5522848,i=a+d,j=b+e,d=a+d/2,e=b+e/2;this._activeInstructions.push(new c(this._ctx.moveTo,[a,e]),new c(this._ctx.bezierCurveTo,[a,e-g,d-f,b,d,b]),new c(this._ctx.bezierCurveTo, 53 | [d+f,b,i,e-g,i,e]),new c(this._ctx.bezierCurveTo,[i,e+g,d+f,j,d,j]),new c(this._ctx.bezierCurveTo,[d-f,j,a,e+g,a,e]));return this};a._newPath=function(){this._dirty&&this._updateInstructions();this._oldInstructions=this._instructions;this._activeInstructions=[];this._active=this._dirty=false};a._setProp=function(a,b){this[a]=b};createjs.Graphics=b})();this.createjs=this.createjs||{}; 54 | (function(){var c=function(){this.initialize()},b=c.prototype;c.suppressCrossDomainErrors=false;c._hitTestCanvas=createjs.createCanvas?createjs.createCanvas():document.createElement("canvas");c._hitTestCanvas.width=c._hitTestCanvas.height=1;c._hitTestContext=c._hitTestCanvas.getContext("2d");c._nextCacheID=1;b.alpha=1;b.cacheCanvas=null;b.id=-1;b.mouseEnabled=true;b.name=null;b.parent=null;b.regX=0;b.regY=0;b.rotation=0;b.scaleX=1;b.scaleY=1;b.skewX=0;b.skewY=0;b.shadow=null;b.visible=true;b.x=0; 55 | b.y=0;b.compositeOperation=null;b.snapToPixel=false;b.onPress=null;b.onClick=null;b.onDoubleClick=null;b.onMouseOver=null;b.onMouseOut=null;b.onTick=null;b.filters=null;b.cacheID=0;b.mask=null;b.hitArea=null;b._cacheOffsetX=0;b._cacheOffsetY=0;b._cacheScale=1;b._cacheDataURLID=0;b._cacheDataURL=null;b._matrix=null;b.initialize=function(){this.id=createjs.UID.get();this._matrix=new createjs.Matrix2D};b.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0};b.draw=function(a, 56 | b){var c=this.cacheCanvas;if(b||!c)return false;var d=this._cacheScale;a.drawImage(c,this._cacheOffsetX,this._cacheOffsetY,c.width/d,c.height/d);return true};b.updateContext=function(a){var b,c=this.mask;c&&c.graphics&&(b=c.getMatrix(c._matrix),a.transform(b.a,b.b,b.c,b.d,b.tx,b.ty),c.graphics.drawAsPath(a),a.clip(),b.invert(),a.transform(b.a,b.b,b.c,b.d,b.tx,b.ty));b=this._matrix.identity().appendTransform(this.x,this.y,this.scaleX,this.scaleY,this.rotation,this.skewX,this.skewY,this.regX,this.regY); 57 | createjs.Stage._snapToPixelEnabled&&this.snapToPixel?a.transform(b.a,b.b,b.c,b.d,b.tx+0.5|0,b.ty+0.5|0):a.transform(b.a,b.b,b.c,b.d,b.tx,b.ty);a.globalAlpha*=this.alpha;if(this.compositeOperation)a.globalCompositeOperation=this.compositeOperation;this.shadow&&this._applyShadow(a,this.shadow)};b.cache=function(a,b,c,d,e){e=e||1;if(!this.cacheCanvas)this.cacheCanvas=createjs.createCanvas?createjs.createCanvas():document.createElement("canvas");this.cacheCanvas.width=Math.ceil(c*e);this.cacheCanvas.height= 58 | Math.ceil(d*e);this._cacheOffsetX=a;this._cacheOffsetY=b;this._cacheScale=e||1;this.updateCache()};b.updateCache=function(a){var b=this.cacheCanvas,h=this._cacheOffsetX,d=this._cacheOffsetY,e=this._cacheScale;if(!b)throw"cache() must be called before updateCache()";var f=b.getContext("2d");f.save();a||f.clearRect(0,0,b.width,b.height);f.globalCompositeOperation=a;f.setTransform(e,0,0,e,-h,-d);this.draw(f,true);this._applyFilters();f.restore();this.cacheID=c._nextCacheID++};b.uncache=function(){this._cacheDataURL= 59 | this.cacheCanvas=null;this.cacheID=this._cacheOffsetX=this._cacheOffsetY=0;this._cacheScale=1};b.getCacheDataURL=function(){if(!this.cacheCanvas)return null;if(this.cacheID!=this._cacheDataURLID)this._cacheDataURL=this.cacheCanvas.toDataURL();return this._cacheDataURL};b.getStage=function(){for(var a=this;a.parent;)a=a.parent;return a instanceof createjs.Stage?a:null};b.localToGlobal=function(a,b){var c=this.getConcatenatedMatrix(this._matrix);if(c==null)return null;c.append(1,0,0,1,a,b);return new createjs.Point(c.tx, 60 | c.ty)};b.globalToLocal=function(a,b){var c=this.getConcatenatedMatrix(this._matrix);if(c==null)return null;c.invert();c.append(1,0,0,1,a,b);return new createjs.Point(c.tx,c.ty)};b.localToLocal=function(a,b,c){a=this.localToGlobal(a,b);return c.globalToLocal(a.x,a.y)};b.setTransform=function(a,b,c,d,e,f,g,i,j){this.x=a||0;this.y=b||0;this.scaleX=c==null?1:c;this.scaleY=d==null?1:d;this.rotation=e||0;this.skewX=f||0;this.skewY=g||0;this.regX=i||0;this.regY=j||0;return this};b.getMatrix=function(a){return(a? 61 | a.identity():new createjs.Matrix2D).appendTransform(this.x,this.y,this.scaleX,this.scaleY,this.rotation,this.skewX,this.skewY,this.regX,this.regY).appendProperties(this.alpha,this.shadow,this.compositeOperation)};b.getConcatenatedMatrix=function(a){a?a.identity():a=new createjs.Matrix2D;for(var b=this;b!=null;)a.prependTransform(b.x,b.y,b.scaleX,b.scaleY,b.rotation,b.skewX,b.skewY,b.regX,b.regY).prependProperties(b.alpha,b.shadow,b.compositeOperation),b=b.parent;return a};b.hitTest=function(a,b){var h= 62 | c._hitTestContext,d=c._hitTestCanvas;h.setTransform(1,0,0,1,-a,-b);this.draw(h);h=this._testHit(h);d.width=0;d.width=1;return h};b.clone=function(){var a=new c;this.cloneProps(a);return a};b.toString=function(){return"[DisplayObject (name="+this.name+")]"};b.cloneProps=function(a){a.alpha=this.alpha;a.name=this.name;a.regX=this.regX;a.regY=this.regY;a.rotation=this.rotation;a.scaleX=this.scaleX;a.scaleY=this.scaleY;a.shadow=this.shadow;a.skewX=this.skewX;a.skewY=this.skewY;a.visible=this.visible; 63 | a.x=this.x;a.y=this.y;a.mouseEnabled=this.mouseEnabled;a.compositeOperation=this.compositeOperation;if(this.cacheCanvas)a.cacheCanvas=this.cacheCanvas.cloneNode(true),a.cacheCanvas.getContext("2d").putImageData(this.cacheCanvas.getContext("2d").getImageData(0,0,this.cacheCanvas.width,this.cacheCanvas.height),0,0)};b._applyShadow=function(a,b){b=b||Shadow.identity;a.shadowColor=b.color;a.shadowOffsetX=b.offsetX;a.shadowOffsetY=b.offsetY;a.shadowBlur=b.blur};b._tick=function(a){if(this.onTick)if(a)this.onTick.apply(this, 64 | a);else this.onTick()};b._testHit=function(a){try{var b=a.getImageData(0,0,1,1).data[3]>1}catch(h){if(!c.suppressCrossDomainErrors)throw"An error has occurred. This is most likely due to security restrictions on reading canvas pixel data with local or cross-domain images.";}return b};b._applyFilters=function(){if(this.filters&&this.filters.length!=0&&this.cacheCanvas)for(var a=this.filters.length,b=this.cacheCanvas.getContext("2d"),c=this.cacheCanvas.width,d=this.cacheCanvas.height,e=0;e0&&this.children.length&&this.scaleX!=0&&this.scaleY!=0};b.DisplayObject_draw=b.draw;b.draw=function(a,b){if(this.DisplayObject_draw(a,b))return true;for(var c=this.children.slice(0),d=0,e=c.length;d1){for(var c=0;cthis.children.length)return arguments[c-2];if(c>2){for(var e=0;e1){for(var c=true,d=0;d1){for(var c=[],d=0;dthis.children.length-1)return false; 69 | if(b=this.children[a])b.parent=null;this.children.splice(a,1);return true};b.removeAllChildren=function(){for(var a=this.children;a.length;)a.pop().parent=null};b.getChildAt=function(a){return this.children[a]};b.sortChildren=function(a){this.children.sort(a)};b.getChildIndex=function(a){return this.children.indexOf(a)};b.getNumChildren=function(){return this.children.length};b.swapChildrenAt=function(a,b){var c=this.children,d=c[a],e=c[b];d&&e&&(c[a]=e,c[b]=d)};b.swapChildren=function(a,b){for(var c= 70 | this.children,d,e,f=0,g=c.length;f=d)){for(var e=0;e=0;b--){var c=this.children[b];c._tick&&c._tick(a)}this.DisplayObject__tick(a)};b._getObjectsUnderPoint=function(a,b,h,d){var e=createjs.DisplayObject._hitTestContext,f=createjs.DisplayObject._hitTestCanvas,g=this._matrix,i=d&1&&(this.onPress||this.onClick||this.onDoubleClick)||d&2&&(this.onMouseOver||this.onMouseOut);if(this.cacheCanvas&&i&&(this.getConcatenatedMatrix(g),e.setTransform(g.a,g.b,g.c,g.d,g.tx-a,g.ty-b),e.globalAlpha=g.alpha,this.draw(e),this._testHit(e)))return f.width=0,f.width= 73 | 1,this;for(var j=this.children.length-1;j>=0;j--){var k=this.children[j];if(k.isVisible()&&k.mouseEnabled)if(k instanceof c)if(i){if(k=k._getObjectsUnderPoint(a,b))return this}else{if(k=k._getObjectsUnderPoint(a,b,h,d),!h&&k)return k}else if(!d||i||d&1&&(k.onPress||k.onClick||k.onDoubleClick)||d&2&&(k.onMouseOver||k.onMouseOut)){var m=k.hitArea;k.getConcatenatedMatrix(g);m&&(g.appendTransform(m.x+k.regX,m.y+k.regY,m.scaleX,m.scaleY,m.rotation,m.skewX,m.skewY,m.regX,m.regY),g.alpha*=m.alpha/k.alpha); 74 | e.globalAlpha=g.alpha;e.setTransform(g.a,g.b,g.c,g.d,g.tx-a,g.ty-b);(m||k).draw(e);if(this._testHit(e))if(f.width=0,f.width=1,i)return this;else if(h)h.push(k);else return k}}return null};createjs.Container=c})();this.createjs=this.createjs||{}; 75 | (function(){var c=function(a){this.initialize(a)},b=c.prototype=new createjs.Container;c._snapToPixelEnabled=false;b.autoClear=true;b.canvas=null;b.mouseX=0;b.mouseY=0;b.onMouseMove=null;b.onMouseUp=null;b.onMouseDown=null;b.snapToPixelEnabled=false;b.mouseInBounds=false;b.tickOnUpdate=true;b.mouseMoveOutside=false;b._pointerData=null;b._pointerCount=0;b._primaryPointerID=null;b._mouseOverIntervalID=null;b.Container_initialize=b.initialize;b.initialize=function(a){this.Container_initialize();this.canvas= 76 | a instanceof HTMLCanvasElement?a:document.getElementById(a);this._pointerData={};this._enableMouseEvents(true)};b.update=function(){if(this.canvas){this.autoClear&&this.clear();c._snapToPixelEnabled=this.snapToPixelEnabled;this.tickOnUpdate&&this._tick(arguments.length?arguments:null);var a=this.canvas.getContext("2d");a.save();this.updateContext(a);this.draw(a,false);a.restore()}};b.tick=b.update;b.clear=function(){if(this.canvas){var a=this.canvas.getContext("2d");a.setTransform(1,0,0,1,0,0);a.clearRect(0, 77 | 0,this.canvas.width,this.canvas.height)}};b.toDataURL=function(a,b){b||(b="image/png");var c=this.canvas.getContext("2d"),d=this.canvas.width,e=this.canvas.height,f;if(a){f=c.getImageData(0,0,d,e);var g=c.globalCompositeOperation;c.globalCompositeOperation="destination-over";c.fillStyle=a;c.fillRect(0,0,d,e)}var i=this.canvas.toDataURL(b);if(a)c.clearRect(0,0,d,e),c.putImageData(f,0,0),c.globalCompositeOperation=g;return i};b.enableMouseOver=function(a){if(this._mouseOverIntervalID)clearInterval(this._mouseOverIntervalID), 78 | this._mouseOverIntervalID=null;if(a==null)a=20;else if(a<=0)return;var b=this;this._mouseOverIntervalID=setInterval(function(){b._testMouseOver()},1E3/Math.min(50,a))};b.clone=function(){var a=new c(null);this.cloneProps(a);return a};b.toString=function(){return"[Stage (name="+this.name+")]"};b._enableMouseEvents=function(){var a=this,b=window.addEventListener?window:document;b.addEventListener("mouseup",function(b){a._handleMouseUp(b)},false);b.addEventListener("mousemove",function(b){a._handleMouseMove(b)}, 79 | false);b.addEventListener("dblclick",function(b){a._handleDoubleClick(b)},false);this.canvas&&this.canvas.addEventListener("mousedown",function(b){a._handleMouseDown(b)},false)};b._getPointerData=function(a){var b=this._pointerData[a];if(!b&&(b=this._pointerData[a]={x:0,y:0},this._primaryPointerID==null))this._primaryPointerID=a;return b};b._handleMouseMove=function(a){if(!a)a=window.event;this._handlePointerMove(-1,a,a.pageX,a.pageY)};b._handlePointerMove=function(a,b,c,d){if(this.canvas){var e= 80 | this._getPointerData(a),f=e.inBounds;this._updatePointerPosition(a,c,d);if(f||e.inBounds||this.mouseMoveOutside){a=new createjs.MouseEvent("onMouseMove",e.x,e.y,this,b,a,a==this._primaryPointerID,e.rawX,e.rawY);if(this.onMouseMove)this.onMouseMove(a);if(e.event&&e.event.onMouseMove)a=a.clone(),a.target=e.event.target,e.event.onMouseMove(a)}}};b._updatePointerPosition=function(a,b,c){var d=this._getElementRect(this.canvas);b-=d.left;c-=d.top;var e=this.canvas.width,f=this.canvas.height;b/=(d.right- 81 | d.left)/e;c/=(d.bottom-d.top)/f;d=this._getPointerData(a);if(d.inBounds=b>=0&&c>=0&&b<=e-1&&c<=f-1)d.x=b,d.y=c;else if(this.mouseMoveOutside)d.x=b<0?0:b>e-1?e-1:b,d.y=c<0?0:c>f-1?f-1:c;d.rawX=b;d.rawY=c;if(a==this._primaryPointerID)this.mouseX=d.x,this.mouseY=d.y,this.mouseInBounds=d.inBounds};b._getElementRect=function(a){var b=a.getBoundingClientRect(),c=(window.pageXOffset||document.scrollLeft||0)-(document.clientLeft||document.body.clientLeft||0),d=(window.pageYOffset||document.scrollTop||0)- 82 | (document.clientTop||document.body.clientTop||0),e=window.getComputedStyle?getComputedStyle(a):a.currentStyle,a=parseInt(e.paddingLeft)+parseInt(e.borderLeftWidth),f=parseInt(e.paddingTop)+parseInt(e.borderTopWidth),g=parseInt(e.paddingRight)+parseInt(e.borderRightWidth),e=parseInt(e.paddingBottom)+parseInt(e.borderBottomWidth);return{left:b.left+c+a,right:b.right+c-g,top:b.top+d+f,bottom:b.bottom+d-e}};b._handleMouseUp=function(a){this._handlePointerUp(-1,a,false)};b._handlePointerUp=function(a, 83 | b,c){var d=this._getPointerData(a),e=new createjs.MouseEvent("onMouseUp",d.x,d.y,this,b,a,a==this._primaryPointerID,d.rawX,d.rawY);if(this.onMouseUp)this.onMouseUp(e);if(d.event&&d.event.onMouseUp)e=e.clone(),e.target=d.event.target,d.event.onMouseUp(e);if(d.target&&d.target.onClick&&this._getObjectsUnderPoint(d.x,d.y,null,true,this._mouseOverIntervalID?3:1)==d.target)d.target.onClick(new createjs.MouseEvent("onClick",d.x,d.y,d.target,b,a,a==this._primaryPointerID,d.rawX,d.rawY));if(c){if(a==this._primaryPointerID)this._primaryPointerID= 84 | null;delete this._pointerData[a]}else d.event=d.target=null};b._handleMouseDown=function(a){this._handlePointerDown(-1,a,false)};b._handlePointerDown=function(a,b,c,d){var e=this._getPointerData(a);d!=null&&this._updatePointerPosition(a,c,d);if(this.onMouseDown)this.onMouseDown(new createjs.MouseEvent("onMouseDown",e.x,e.y,this,b,a,a==this._primaryPointerID,e.rawX,e.rawY));if(c=this._getObjectsUnderPoint(e.x,e.y,null,this._mouseOverIntervalID?3:1)){if(c.onPress&&(a=new createjs.MouseEvent("onPress", 85 | e.x,e.y,c,b,a,a==this._primaryPointerID,e.rawX,e.rawY),c.onPress(a),a.onMouseMove||a.onMouseUp))e.event=a;e.target=c}};b._testMouseOver=function(){if(this._primaryPointerID==-1&&!(this.mouseX==this._mouseOverX&&this.mouseY==this._mouseOverY&&this.mouseInBounds)){var a=null;if(this.mouseInBounds)a=this._getObjectsUnderPoint(this.mouseX,this.mouseY,null,3),this._mouseOverX=this.mouseX,this._mouseOverY=this.mouseY;if(this._mouseOverTarget!=a){if(this._mouseOverTarget&&this._mouseOverTarget.onMouseOut)this._mouseOverTarget.onMouseOut(new createjs.MouseEvent("onMouseOut", 86 | this.mouseX,this.mouseY,this._mouseOverTarget));if(a&&a.onMouseOver)a.onMouseOver(new createjs.MouseEvent("onMouseOver",this.mouseX,this.mouseY,a));this._mouseOverTarget=a}}};b._handleDoubleClick=function(a){if(this.onDoubleClick)this.onDoubleClick(new createjs.MouseEvent("onDoubleClick",this.mouseX,this.mouseY,this,a,-1,true));var b=this._getObjectsUnderPoint(this.mouseX,this.mouseY,null,this._mouseOverIntervalID?3:1);if(b&&b.onDoubleClick)b.onDoubleClick(new createjs.MouseEvent("onDoubleClick", 87 | this.mouseX,this.mouseY,b,a,-1,true))};createjs.Stage=c})();this.createjs=this.createjs||{}; 88 | (function(){var c=function(a){this.initialize(a)},b=c.prototype=new createjs.DisplayObject;b.image=null;b.snapToPixel=true;b.sourceRect=null;b.DisplayObject_initialize=b.initialize;b.initialize=function(a){this.DisplayObject_initialize();typeof a=="string"?(this.image=new Image,this.image.src=a):this.image=a};b.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.image&&(this.image.complete||this.image.getContext||this.image.readyState>=2)};b.DisplayObject_draw= 89 | b.draw;b.draw=function(a,b){if(this.DisplayObject_draw(a,b))return true;var c=this.sourceRect;c?a.drawImage(this.image,c.x,c.y,c.width,c.height,0,0,c.width,c.height):a.drawImage(this.image,0,0);return true};b.clone=function(){var a=new c(this.image);this.cloneProps(a);return a};b.toString=function(){return"[Bitmap (name="+this.name+")]"};createjs.Bitmap=c})();this.createjs=this.createjs||{}; 90 | (function(){var c=function(a){this.initialize(a)},b=c.prototype=new createjs.DisplayObject;b.onAnimationEnd=null;b.currentFrame=-1;b.currentAnimation=null;b.paused=true;b.spriteSheet=null;b.snapToPixel=true;b.offset=0;b.currentAnimationFrame=0;b._advanceCount=0;b._animation=null;b.DisplayObject_initialize=b.initialize;b.initialize=function(a){this.DisplayObject_initialize();this.spriteSheet=a};b.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.spriteSheet.complete&& 91 | this.currentFrame>=0};b.DisplayObject_draw=b.draw;b.draw=function(a,b){if(this.DisplayObject_draw(a,b))return true;this._normalizeFrame();var c=this.spriteSheet.getFrame(this.currentFrame);if(c!=null){var d=c.rect;a.drawImage(c.image,d.x,d.y,d.width,d.height,-c.regX,-c.regY,d.width,d.height);return true}};b.play=function(){this.paused=false};b.stop=function(){this.paused=true};b.gotoAndPlay=function(a){this.paused=false;this._goto(a)};b.gotoAndStop=function(a){this.paused=true;this._goto(a)};b.advance= 92 | function(){this._animation?this.currentAnimationFrame++:this.currentFrame++;this._normalizeFrame()};b.clone=function(){var a=new c(this.spriteSheet);this.cloneProps(a);return a};b.toString=function(){return"[BitmapAnimation (name="+this.name+")]"};b.DisplayObject__tick=b._tick;b._tick=function(a){var b=this._animation?this._animation.frequency:1;!this.paused&&(++this._advanceCount+this.offset)%b==0&&this.advance();this.DisplayObject__tick(a)};b._normalizeFrame=function(){var a=this._animation;if(a)if(this.currentAnimationFrame>= 93 | a.frames.length){if(a.next?this._goto(a.next):(this.paused=true,this.currentAnimationFrame=a.frames.length-1,this.currentFrame=a.frames[this.currentAnimationFrame]),this.onAnimationEnd)this.onAnimationEnd(this,a.name)}else this.currentFrame=a.frames[this.currentAnimationFrame];else if(this.currentFrame>=this.spriteSheet.getNumFrames()&&(this.currentFrame=0,this.onAnimationEnd))this.onAnimationEnd(this,null)};b.DisplayObject_cloneProps=b.cloneProps;b.cloneProps=function(a){this.DisplayObject_cloneProps(a); 94 | a.onAnimationEnd=this.onAnimationEnd;a.currentFrame=this.currentFrame;a.currentAnimation=this.currentAnimation;a.paused=this.paused;a.offset=this.offset;a._animation=this._animation;a.currentAnimationFrame=this.currentAnimationFrame};b._goto=function(a){if(isNaN(a)){var b=this.spriteSheet.getAnimation(a);if(b)this.currentAnimationFrame=0,this._animation=b,this.currentAnimation=a,this._normalizeFrame()}else this.currentAnimation=this._animation=null,this.currentFrame=a};createjs.BitmapAnimation=c})();this.createjs=this.createjs||{}; 95 | (function(){var c=function(a){this.initialize(a)},b=c.prototype=new createjs.DisplayObject;b.graphics=null;b.DisplayObject_initialize=b.initialize;b.initialize=function(a){this.DisplayObject_initialize();this.graphics=a?a:new createjs.Graphics};b.isVisible=function(){return Boolean(this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.graphics)};b.DisplayObject_draw=b.draw;b.draw=function(a,b){if(this.DisplayObject_draw(a,b))return true;this.graphics.draw(a);return true};b.clone=function(a){a= 96 | new c(a&&this.graphics?this.graphics.clone():this.graphics);this.cloneProps(a);return a};b.toString=function(){return"[Shape (name="+this.name+")]"};createjs.Shape=c})();this.createjs=this.createjs||{}; 97 | (function(){var c=function(a,b,c){this.initialize(a,b,c)},b=c.prototype=new createjs.DisplayObject;c._workingContext=(createjs.createCanvas?createjs.createCanvas():document.createElement("canvas")).getContext("2d");b.text="";b.font=null;b.color="#000";b.textAlign="left";b.textBaseline="top";b.maxWidth=null;b.outline=false;b.lineHeight=0;b.lineWidth=null;b.DisplayObject_initialize=b.initialize;b.initialize=function(a,b,c){this.DisplayObject_initialize();this.text=a;this.font=b;this.color=c?c:"#000"}; 98 | b.isVisible=function(){return Boolean(this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.text!=null&&this.text!=="")};b.DisplayObject_draw=b.draw;b.draw=function(a,b){if(this.DisplayObject_draw(a,b))return true;this.outline?a.strokeStyle=this.color:a.fillStyle=this.color;a.font=this.font;a.textAlign=this.textAlign||"start";a.textBaseline=this.textBaseline||"alphabetic";this._drawText(a);return true};b.getMeasuredWidth=function(){return this._getWorkingContext().measureText(this.text).width}; 99 | b.getMeasuredLineHeight=function(){return this._getWorkingContext().measureText("M").width*1.2};b.getMeasuredHeight=function(){return this._drawText()*(this.lineHeight||this.getMeasuredLineHeight())};b.clone=function(){var a=new c(this.text,this.font,this.color);this.cloneProps(a);return a};b.toString=function(){return"[Text (text="+(this.text.length>20?this.text.substr(0,17)+"...":this.text)+")]"};b.DisplayObject_cloneProps=b.cloneProps;b.cloneProps=function(a){this.DisplayObject_cloneProps(a);a.textAlign= 100 | this.textAlign;a.textBaseline=this.textBaseline;a.maxWidth=this.maxWidth;a.outline=this.outline;a.lineHeight=this.lineHeight;a.lineWidth=this.lineWidth};b._getWorkingContext=function(){var a=c._workingContext;a.font=this.font;a.textAlign=this.textAlign||"start";a.textBaseline=this.textBaseline||"alphabetic";return a};b._drawText=function(a){var b=!!a;b||(a=this._getWorkingContext());for(var c=String(this.text).split(/(?:\r\n|\r|\n)/),d=this.lineHeight||this.getMeasuredLineHeight(),e=0,f=0,g=c.length;f< 101 | g;f++){var i=a.measureText(c[f]).width;if(this.lineWidth==null||ithis.lineWidth?(b&&this._drawTextLine(a,j,e*d),e++,j=i[k+1]):j+=i[k]+i[k+1];b&&this._drawTextLine(a,j,e*d)}e++}return e};b._drawTextLine=function(a,b,c){this.outline?a.strokeText(b,0,c,this.maxWidth||65535):a.fillText(b,0,c,this.maxWidth||65535)};createjs.Text=c})();this.createjs=this.createjs||{}; 102 | (function(){var c=function(){throw"SpriteSheetUtils cannot be instantiated";};c._workingCanvas=createjs.createCanvas?createjs.createCanvas():document.createElement("canvas");c._workingContext=c._workingCanvas.getContext("2d");c.addFlippedFrames=function(b,a,l,h){if(a||l||h){var d=0;a&&c._flip(b,++d,true,false);l&&c._flip(b,++d,false,true);h&&c._flip(b,++d,true,true)}};c.extractFrame=function(b,a){isNaN(a)&&(a=b.getAnimation(a).frames[0]);var l=b.getFrame(a);if(!l)return null;var h=l.rect,d=c._workingCanvas; 103 | d.width=h.width;d.height=h.height;c._workingContext.drawImage(l.image,h.x,h.y,h.width,h.height,0,0,h.width,h.height);l=new Image;l.src=d.toDataURL("image/png");return l};c.mergeAlpha=function(b,a,c){c||(c=createjs.createCanvas?createjs.createCanvas():document.createElement("canvas"));c.width=Math.max(a.width,b.width);c.height=Math.max(a.height,b.height);var h=c.getContext("2d");h.save();h.drawImage(b,0,0);h.globalCompositeOperation="destination-in";h.drawImage(a,0,0);h.restore();return c};c._flip= 104 | function(b,a,l,h){for(var d=b._images,e=c._workingCanvas,f=c._workingContext,g=d.length/a,i=0;ithis.maxHeight)throw c.ERR_DIMENSIONS;for(var d=0,e=0,f=0;h.length;){var g=this._fillRow(h,d,f,b,a);if(g.w>e)e=g.w;d+=g.h;if(!g.h||!h.length){var i=createjs.createCanvas?createjs.createCanvas():document.createElement("canvas"); 111 | i.width=this._getSize(e,this.maxWidth);i.height=this._getSize(d,this.maxHeight);this._data.images[f]=i;g.h||(e=d=0,f++)}}};b._getSize=function(a,b){for(var c=4;Math.pow(2,++c)=0;k--){var m=a[k],o=this._scale*m.scale,n=m.sourceRect,q=m.source,p=Math.floor(o*n.x-e),s=Math.floor(o*n.y-e),r=Math.ceil(o*n.height+e*2),n=Math.ceil(o*n.width+e*2);if(n>f)throw c.ERR_DIMENSIONS; 112 | if(!(r>g||i+n>f))m.img=h,m.rect=new createjs.Rectangle(i,b,n,r),j=j||r,a.splice(k,1),d[m.index]=[i,b,n,r,h,Math.round(-p+o*q.regX-e),Math.round(-s+o*q.regY-e)],i+=n}return{w:i,h:j}};b._endBuild=function(){this.spriteSheet=new createjs.SpriteSheet(this._data);this._data=null;this._callback&&this._callback(this)};b._run=function(){for(var a=(new Date).getTime()+this._timeSlice,b=false;a>(new Date).getTime();)if(!this._drawNext()){b=true;break}if(b)this._endBuild();else{var c=this;this._timerID=setTimeout(function(){c._run()}, 113 | 50-this._timeSlice)}};b._drawNext=function(){var a=this._frames[this._index],b=a.scale*this._scale,c=a.rect,d=a.sourceRect,e=this._data.images[a.img].getContext("2d");a.funct&&a.funct.apply(a.scope,a.params);e.save();e.beginPath();e.rect(c.x,c.y,c.width,c.height);e.clip();e.translate(Math.ceil(c.x-d.x*b),Math.ceil(c.y-d.y*b));e.scale(b,b);a.source.draw(e);e.restore();return++this._index{ 115 | this.ui.start_box.remove(); 116 | 117 | this.notice("Prepare to start typing ..."); 118 | window.setTimeout(() => { 119 | this.started = true; 120 | createjs.Ticker.setFPS(this.FPS); 121 | // createjs.Ticker.addListener(this.tick, true); 122 | createjs.Ticker.addListener(this.tick.bind(this), true) 123 | 124 | // keyboard event listener 125 | // function onkeypress invoked at this scope... 126 | document.onkeydown = this.onKeyPress.bind(this) 127 | }, 3000); 128 | }); 129 | 130 | // sound checkbox 131 | this.ui.sound.onclick = function() { 132 | if(this.checked) { 133 | this.sound = true; 134 | } else { 135 | this.sound = false; 136 | } 137 | localStorage.sound = this.sound; 138 | }; 139 | if( typeof localStorage.sound == "undefined" || localStorage.sound == "true") { 140 | this.ui.sound.checked = true; this.sound = true; 141 | } else { 142 | this.ui.sound.checked = false; this.sound = false; 143 | } 144 | 145 | // tips checkbox 146 | this.ui.tips.onchange = function() { 147 | this.ui.tip.innerText = ""; 148 | if(this.checked) { 149 | this.tips = true; 150 | } else { 151 | this.tips = false; 152 | } 153 | localStorage.tips = this.tips; 154 | }; 155 | if( typeof localStorage.tips == "undefined" || localStorage.tips == "false") { 156 | this.ui.tips.checked = false; this.tips = false; 157 | } else { 158 | this.ui.tips.checked = true; this.tips = true; 159 | } 160 | 161 | this.canvas.addEventListener('click', () => { 162 | this.toggleGame(); 163 | }) 164 | 165 | // Multiple sound objects that can be played simultaneously. 166 | for(var n=0; n<15; n++) { 167 | var snd = new Audio(); 168 | snd.src = "sounds/pluck." + ( snd.canPlayType("audio/mpeg") ? "mp3" : "ogg" ); 169 | this.sounds.push(snd); 170 | } 171 | this.sounds.p = 1; 172 | 173 | this.positionUI(); 174 | window.onresize = this.positionUI; 175 | } 176 | 177 | // position ui elements 178 | positionUI() { 179 | this.canvas.width = window.innerWidth; 180 | this.canvas.height = window.innerHeight; 181 | 182 | this.bounds.width = this.canvas.width; 183 | this.bounds.height = this.canvas.height; 184 | 185 | this.RADIUS = Math.ceil(this.canvas.width * 0.019); 186 | this.FONT_SIZE = Math.ceil(this.canvas.width * 0.022); 187 | this.BORDER = this.RADIUS * .13; 188 | } 189 | 190 | // show a permanent notice 191 | permaNotice(msg) { 192 | window.clearTimeout(this.notice_timer); 193 | this.ui.notice.innerText = msg; 194 | this.ui.notice.style.display = "block"; 195 | } 196 | // hide notice 197 | clearNotice(msg) { 198 | this.ui.notice.style.display = "none"; 199 | } 200 | 201 | // show a delayed 202 | delayedNotice(msg, delay) { 203 | window.setTimeout(() => { 204 | this.notice(msg); 205 | }, delay*1000); 206 | } 207 | 208 | // show a notice 209 | notice(msg) { 210 | window.clearTimeout(this.notice_timer); 211 | 212 | this.ui.notice.innerText = msg; 213 | this.ui.notice.style.display = "block"; 214 | 215 | this.notice_timer = window.setTimeout(() => { 216 | this.ui.notice.style.display = "none"; 217 | }, 3000) 218 | } 219 | 220 | // play a sound 221 | playSound(s) { 222 | if(!this.sound) return; 223 | 224 | this.sounds[this.sounds.p-1].pause(); 225 | this.sounds[this.sounds.p-1].load(); 226 | this.sounds[this.sounds.p].play(); 227 | 228 | if(this.sounds.p >= this.sounds.length-1) { 229 | this.sounds.p = 1; 230 | } else { 231 | this.sounds.p++; 232 | } 233 | } 234 | 235 | // update ui elements 236 | updateUI() { 237 | this.ui.level.innerText = this.round.level; 238 | this.ui.score.innerText = this.round.score; 239 | this.ui.words.innerText = this.round.pop_count; 240 | this.ui.accuracy.innerText = ((this.round.accuracy / this.round.word_count) * 100).toFixed(1) + "%"; 241 | 242 | var wpm = (( Math.round((this.round.letter_count/5), 0) / this.round.elapsed) * 60).toFixed(2); 243 | this.round.speed = wpm*1 == wpm ? wpm : 0; 244 | this.ui.speed.innerText = this.round.speed; 245 | } 246 | 247 | // level goes up 248 | levelUp() { 249 | this.round.level++; 250 | this.notice("Level " + this.round.level); 251 | this.updateUI(); 252 | this.loadWords(this.round.level); 253 | } 254 | 255 | // create a word and render it 256 | renderWord(word) { 257 | word = word.toUpperCase(); 258 | 259 | var g = new createjs.Graphics(); 260 | 261 | // draw the circle 262 | g.setStrokeStyle(this.BORDER); 263 | g.beginStroke("#333333"); 264 | g.drawCircle(0,0, this.RADIUS); 265 | 266 | 267 | var x = 100, set = []; 268 | for(var n=0; n this.bounds.height) { // if a bubble's crossed the Y boundary, kill it 326 | this.bubbles[word].deleted++; 327 | this.stage.removeChild(this.bubbles[word][n]); 328 | delete this.bubbles[word][n]; 329 | } else { 330 | bubble.y += bubble.speed; 331 | } 332 | } 333 | 334 | // wipe out a fallen word completely 335 | if(this.bubbles[word].deleted == this.bubbles[word].length) { 336 | var popped = this.bubbles[this.cur].pointer >= this.bubbles[this.cur].length; 337 | delete this.bubbles[word]; 338 | this.deleted(popped); 339 | } 340 | } 341 | 342 | this.stage.update(); 343 | }; 344 | 345 | // load words from the dictionary 346 | loadWords(level) { 347 | if(level == 1) { 348 | this.words = THESAURUS.three; 349 | } else if(level == 3) { 350 | this.words = THESAURUS.small; 351 | } else if(level == 5) { 352 | this.words = THESAURUS.medium; 353 | } else if(level == 8) { 354 | this.words = THESAURUS.large; 355 | } else if(level == 10) { 356 | this.words = THESAURUS.big; 357 | } else if(level == 14) { 358 | this.words = THESAURUS.medium; 359 | } else if(this.words.length < 2) { 360 | this.words = THESAURUS.medium; 361 | } 362 | 363 | if(this.prompts.hasOwnProperty(level)) { 364 | this.delayedNotice(this.prompts[level], 5); 365 | } 366 | 367 | this.words = this.shuffle(this.words); 368 | this.words.index = 0; 369 | } 370 | 371 | // up the next word in the queue 372 | nextWord() { 373 | this.renderWord(this.words[this.words.index]); 374 | this.words.index = this.words.index+1 >= this.words.length ? 0 : this.words.index+1; 375 | this.renderTip(this.words[this.words.index]); 376 | } 377 | 378 | // starttime of a word's creation 379 | markStart() { 380 | this.start_time = this.microtime(); 381 | } 382 | 383 | // note elapsed time 384 | elapsed() { 385 | this.round.elapsed += (this.microtime() - this.start_time); 386 | } 387 | 388 | // successful pop of a word 389 | score(word) { 390 | // successful pop of a word 391 | var score = word.length * (this.tips ? this.SCORE_LETTER/2 : this.SCORE_LETTER); 392 | this.round.letter_count+= word.length; 393 | this.round.pop_count++; 394 | 395 | this.elapsed(); 396 | 397 | this.round.score += score; 398 | }; 399 | 400 | // a single character's been popped 401 | popOne(c) { 402 | this.playSound("pop"); 403 | } 404 | 405 | // a word's been successfully popped by the user 406 | popped(word) { 407 | this.score(word); 408 | this.round.accuracy += 1; 409 | this.updateUI(); 410 | }; 411 | 412 | // incorrect keypress 413 | badKey() { 414 | this.bubbles[this.cur].bad++; 415 | this.round.accuracy -= (this.bubbles[this.cur].bad / this.bubbles[this.cur].length); 416 | }; 417 | 418 | // a word's just been deleted off the screen 419 | deleted(popped) { 420 | if(!popped) { // missed a word 421 | this.round.accuracy -= 1; 422 | this.elapsed(); 423 | } 424 | 425 | this.updateUI(); 426 | this.nextWord(); 427 | }; 428 | 429 | // keyboard listener 430 | onKeyPress(e) { 431 | // space key 432 | if(e.keyCode == 32) { 433 | e.preventDefault(); 434 | this.toggleGame(); 435 | return; 436 | } 437 | 438 | if(e.keyCode < 65 || e.keyCode > 91 || e.ctrlKey || e.AltKey) { 439 | return; 440 | } 441 | 442 | if(!createjs.Ticker.getPaused()) { 443 | e.preventDefault(); 444 | } 445 | 446 | if(!this.cur || !this.bubbles[this.cur] || createjs.Ticker.getPaused()) return; 447 | 448 | var c = String.fromCharCode(e.keyCode).toUpperCase(), 449 | p = this.bubbles[this.cur].pointer; 450 | 451 | if(!this.bubbles[this.cur][p]) { 452 | return; 453 | } 454 | if( this.bubbles[this.cur][p].char == c) { // correct keypress 455 | this.bubbles[this.cur][p].speed = 30; 456 | this.bubbles[this.cur].pointer++; 457 | this.popOne(c); 458 | } else { // incorrect keypress 459 | this.badKey(); 460 | } 461 | 462 | if(this.bubbles[this.cur].pointer >= this.bubbles[this.cur].length) { 463 | this.popped(this.cur); 464 | } 465 | } 466 | 467 | // get a random number betwen min and max 468 | random(min, max) { 469 | return Math.floor( Math.random(new Date().getTime()) * (max - min) + min, 0 ); 470 | } 471 | 472 | shuffle(o) { 473 | for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x); 474 | return o; 475 | } 476 | 477 | microtime(get_as_float) { 478 | var unixtime_ms = new Date().getTime(); 479 | var sec = parseInt(unixtime_ms / 1000); 480 | return (unixtime_ms/1000); 481 | } 482 | } 483 | 484 | document.addEventListener("DOMContentLoaded", function() { 485 | let game = new Game() 486 | game.init(); 487 | }, false); 488 | -------------------------------------------------------------------------------- /js/words.js: -------------------------------------------------------------------------------- 1 | var THESAURUS = { 2 | three: ["ACT", "ADD", "AGE", "AGO", "AIR", "ALL", "AND", "ANY", "ARE", "ARM", "ART", "ASK", "BAD", "BAG", "BIG", "BIT", "BOX", "BOY", "BUS", "BUT", "BUY", "CAN", "CAP", "CAR", "CAT", "CRY", "CUP", "CUT", "DAY", "DIE", "DOG", "DRY", "EAR", "EAT", "EGG", "END", "EYE", "FAR", "FAT", "FEW", "FIT", "FIX", "FLY", "FOR", "FOX", "FUN", "GET", "GOD", "GUN", "HAT", "HEN", "HER", "HIM", "HIS", "HIT", "HOT", "HOW", "ICE", "ITS", "JOB", "KEY", "LEG", "LET", "LIE", "LIP", "LOT", "LOW", "MAN", "MAP", "MAY", "MIX", "NET", "NEW", "NOR", "NOT", "NOW", "OFF", "OIL", "OLD", "ONE", "OUR", "OUT", "OWN", "PAN", "PAY", "PEN", "PER", "PIG", "PIN", "PUT", "RED", "ROB", "RUN", "SAD", "SAY", "SEE", "SHE", "SIT", "SIX", "SKY", "SON", "SUN", "TEA", "TEN", "THE", "TIE", "TOE", "TOO", "TOP", "TRY", "USE", "WAS", "WAY", "WET", "WHO", "WHY", "WIN", "YET", "YOU", "ZOO"], 3 | small: ["MIME","SULKS","FRIZZ","ELKS","FILLS","CAST","ICED","METES","PULP","RAPT","ECHO","TUTUS","UNTO","JAPE","SALT","CODAS","WISPY","IDLE","BOUT","HALLO","TELEX","BARK","WIDTH","FARMS","CUTIE","GISMO","KNEEL","LIARS","DRAW","PARED","WERE","FIZZY","FABLE","ROMAN","PINKS","TUSH","NADIR","CUTEY","SNAGS","DOGMA","HASP","TREAT","TWOS","BRAG","UNMET","LUGS","COGS","TRIER","FRIG","POUT","SECS","TRIBE","FEND","LOFTS","HAVOC","DEANS","DITCH","MEEK","YOGA","FJORD","PARTS","HONED","PLOYS","SHANK","HOCKS","BANG","SHARK","GENII","BURNT","PAGE","JOUST","PROXY","FILTH","LURK","LOOS","SAYS","FEAT","PEARS","DWELL","SCRAM","BOAR","BETEL","REELS","PUFFS","LYRIC","FROWN","ANNOY","WADI","BLIP","SLAP","RUMBA","MADE","SNUG","DRILL","TYPE","BLAME","RAMS","HAIR","SPAM","COCOA","HAMMY","HOBS","FLOOR","PITON","SHIRE","VISES","CRIES","GLORY","COLOR","KICK","SAGA","PARRY","GIDDY","CURIO","WAXY","BROW","SUITE","ASHY","AKIN","PESO","PLANE","LEAVE","WATCH","PLIES","LEGIT","DENS","LESS","BACKS","QUIZ","PLEBE","JUNK","TERNS","GILTS","REHAB","EYING","RATE","FLIRT","GIVES","CRAFT","RANK","AIMS","MINDS","DUCT","LIPS","QUIFF","BISON","DECRY","DESK","AGISM","SWIGS","AURAL","FETA","JUDO","PECKS","CHIRP","FORCE","BUFFS","STUMP","VISOR","LIME","MORNS","BEARS","OAKEN","WANDS","RETRO","STINT","BEAT","ROADS","LAMB","ALONE","TACKY","DIVE","AWARD","ORBIT","MERRY","TWEED","TYPO","NAPE","FLEX","FEARS","AHEM","RIOTS","FAILS","SWEAT","IBEX","STOCK","ATOLL","SAXES","LODGE","FECAL","JAMB","FUNGI","QUEUE","GLAZE","CARGO","IKON","SCRIP","VOWS","HAWED","STUNS"], 4 | medium: ["CROCKED","GULLIES","OXIDIZES","INSPECTS","ATROCITY","ELATION","LEERED","KHALIFS","UNPACKED","JAUNTS","INACTIVE","SERAPHIM","CANYON","COMPERES","PERTAINS","SPINNEYS","FATTER","TRIMMER","SCROLLS","CADGERS","ONIONS","FREEHOLD","VOLTAGES","CAVIARE","CRINGES","GENETICS","TOPPING","THERMS","PASTURES","UPTURNED","DRIFTER","EXILES","TITTERS","ZOOMING","EXECUTE","BORSCHT","SEAFRONT","MEANIES","UNCURLS","MISLEAD","TWINSET","RAZZED","AIRING","PUNTER","BOULES","TUNICS","GANGLY","COCCYX","CHEDDAR","RIDDED","OLDIES","CABINET","ADIEUS","BRIERS","REOPEN","CASHIERS","RISOTTOS","SCREEDS","USHERS","NAFFEST","HELLOS","SAPPIER","PHONIEST","WEATHER","CHEERILY","FELONIES","FAGGED","DEFIED","ANTENNAS","RUBELLA","REMAND","LITIGANT","BUSTING","THROAT","TRIALED","SHINDIGS","LUNCHED","TECTONIC","DONKEY","TOPEES","HOARDING","WHEREOF","COMPLIED","FELONS","FUTILE","MONOLITH","DEFACED","TRUSTED","HACKER","MASTHEAD","VALUER","TAVERNS","DEMOBS","WHINED","SCUTTLES","COLLIDED","STRIFE","MARQUE","PREPPIES","WORSEN","ERRANDS","IMPARTED","INFUSION","TWELVES","SOLVES","BEADED","REIGNED","RATTLED","EMPIRE","FOULING","CARREL","IMPETUS","PLAQUE","DYSLEXIA","INSTINCT","DIMWITS","SHREWD","MURDER","SHINER","PRECOOK","MAGPIES","HAPPENS","ENDEARED","CHIPPY","GLARES","WRONGS","BEGGARS","SPAYED","CUTOUTS","MIGRATED","UNEASIER","REGIMES","SLURRED","LOUDEST","PRODIGY","OILIER","SIZZLER","AMPULES","REGION","ROADIES","PEAHENS","GAZUMPED","RAPPERS","VALENCY","VOIDED","CESSPIT","PHONIER","CURIOS","GETAWAYS","PIFFLE","CORNROWS","THINKING","FLASHGUN","HOAXING","SPECTRUM","FALCONRY","DECISIVE","AIRSPACE","CARPET","CREAKING","WHORLS","WELLED","CURTSEYS","PUSHCART","VITIATE","FORWENT","COLLUDED","TRAMPS","SHUTEYE","BURIED","CHARMERS","THRUWAY","TERRAPIN","SOLVENCY","UNVEILED","SCOURERS","ABJECTLY","ISLANDER","BEFALLEN","OVERDID","FEDERAL","SURELY","RESELL","CRUSADE","MANURED","DABBLES","FLESHED","NOBLEST","GUIDING","INFLUX","MINUTING","CLANGOR","HEROISM","SPEECH","BEATERS","RUBIES","MEZZOS","SHEARED","CAUGHT","WHINGERS","REACTANT","MEDICOS","MESSIAH","YARMULKE","SUPREME","PONIED","MAJESTY","SCHEMING","CLAYEY","PICKERS","TROUBLE","PROCTORS","DEPOSES","CLARITY","ARIGHT","ENTRANT","RENOWNED","YAKKING","RODEOS","APHASIA","HEATERS","LANKIER","ROYALTY","BARGAIN","MISSILE","SEVENTH","RUDENESS","CALYXES","RAGGEDLY","MANNERS","ENCHANTS","DATEBOOK","OVERUSE","TRUISMS","SAVIOUR","GRANDADS","PUNISHED","BACKSIDE","BREAKING","BABIES","THRUSH","POWDERY","PRANCES","TRUANCY","REALISES","FLUBBED","PATROLS","STUMPED","SMIRKS","INJURED","SABRES","FELLING","CONDOS","POPLAR","VOCATION","TERROR","RISKING","AERATION","HORNED","UTILISES","HUMANLY","CONFESS","ROUNDEST","TINGLING","ALDERMEN","BLOSSOM","NORMALCY","LODGER","LARKED","PROMPT","BOMBER","ARTISANS","ALLAYED","SUBSUMES","DIVISORS","INFLATES","CREELS","LOVEYS","PREFIXED","ENGAGING","BISCUITS","SURGEONS","LEGATES","SUNBURNT","SUNDERS","TELLER","PENSIONS","RELAYING","DIAGRAMS","CARESSES","CYGNETS","CREEDS","MUTATES","OCTAVE","BEGETS","PURLED","POSSES","TAWDRIER","SIRLOINS","ANYHOW","ATTRACT","DOORBELL","ADEPTS","INGEST","CATHODES","OUTRIDER","COGENCY","SCUTTLED","PLATES","MANAGING","PUPPETRY","DILUTING","RELIEVE","PEACOCKS","CONDORS","SCOURING","HAMMOCK","SCABBARD","CONVICT","HEINOUS","TROUSERS","DANDLING","HISTORY","DISLIKED","NARROWS","GRACING","DRIEST","DEARLY","OVATION","DATABASE","AMICABLE","INFIDEL","OSPREY","RAVAGES","ABASED","EMINENT","RUNDOWNS","MEDICO","BOARDER","CLAPPERS","KIDNAPED","FLUTTERS","HURTLES","CONFINED","DEPRIVED","CRUCIFY","MARVELED","REVERED","DEFRAYS","ELITISTS","ASSESSED","UPBRAIDS","GOGGLING","SMUDGIER","SPOTTER","SPENDERS","HORNPIPE","MUZZLED","YAWING","MARACAS","BUSLOAD","WEBBING","SOMBERLY","TEAMING","PRINCESS","INTERNEE","EMERITUS","SLOPING","STREAK","SCUTTLE","BILIOUS","ATTEMPT","GABBLED","BOASTING","OUTDOOR","CAPTURES","JASMINES","CRAPPIER","REPOSING","ABDOMEN","FORESEE","CONVICTS","INVENT","MUZZLES","PAGEBOYS","PENDULUM","CRAZIES","SAVOYS","SNEERS","CLEANED","SHIPPERS","IONIZE","DEGRADE","NOUGHTS","DISTURBS","DAMAGED","FANZINES","CURSES","MONARCHY","APPLIED","PRANGS","INTRIGUE","GRANDS","GENIAL","DECIPHER","SKITTLES","NUNNERY","GESTALTS","BOSOMY","RUNNER","MINDSET","CHANNELS","RESISTS","SIDELINE","MONOLOG","KEEPING","MANIFOLD","QUACKING","FRIGHTEN","INTERACT","BEDPAN","TEAMED","BECKONED","ROWERS","CUMULUS","APPRISE","VESSEL","HEARTHS","ANALOGUE","GORGEOUS","TERRIBLY","SURROUND","CHESSMAN","STOUTER","CHORALE","BETRAYS","BUSTIERS","ROMPING","COMPLIES","ITEMIZES","HARVESTS","CRANING","TOILETS","ASSISTED","BIOPICS","TARDILY","FUSSPOTS","ELLIPTIC","FATHERLY","OPAQUE","TOUSLED","VIEWER","NEWSCAST","PROVEN","DEBRIS","BLANKS","ERECTION","FETCHING","SCULPT","CANTING","EXHALE","MOTORING","SYNDROME","HEARTS","WASHES","CEMENT","FUSSILY","REFORMS","ELUSIVE","CAMPAIGN","CITADELS","VALIDLY","CASUAL","SKIING","BALLOTS","FREEZERS","EMETICS","SWIMWEAR","PIDDLE","ADVOCATE","DELUDED","CLAWED","TAXABLE","PINGED","PIERCE","BOREHOLE","MISLED","RIPCORDS","PLUMMET","REGARD","REEFED","HUMORIST","DECOYED","WEEVIL","SKITTISH","COWSLIPS","DISTANT","GLOVED","CUDDLIER","POROSITY","BUSSES","CONCURS","EDITOR","PLECTRUM","LABURNUM","EUGENICS","BEETLE","MATRON","HASSLING","LOCUST","SHOGUN","LAUNDERS","GAMIEST","MEDICINE","WITTILY","QUARTOS","CARESS","INCLINE","PEDDLING","BESTING","PONCHOS","RIGIDLY","TOMBOLAS","PERJURED","STEMMED","SHARED","CANTONS","EMULATE","ACCLAIM","SHOWBOAT","SUSPEND","FANFARE","NERVED","ACTIVIST","LEGIBLE","OTTOMANS","SMELTS","MORONS","PERISHER","BASHFUL","TURBOTS","TURTLE","BLITHELY","BIRDIES","CITING","ANIMATOR","EMIGRATE","GOBBING","TANNING","DWELLER","TASKING","POTTIES","PRISED","BOBBIN","LIVENING","CLANGS","RAMBLING","FAMINES","EGGSHELL","PREYING","ECHELONS","ACTING","TIPTOE","PARTIAL","BEADING","PASTRAMI","QUAYSIDE","LODESTAR","STAPLES","RHAPSODY","GIGGING","FAMILIES","OFFERED","FRAUGHT","ANDANTES","SASHES","ORNERY","STRESSES","LANDED","DRIVING","OUTBREAK","BATTERED","JAYWALK","PETITION","LIBELS","SERVANTS","REGISTRY","DOWNCAST","BOLDLY","WISTERIA","DREAMILY","BOUNCED","REVEALS","FURROWS","DECKHAND","WEAPON","LOUVERS","BEDPOST","DEBUTS","VALLEYS","READIED","BUOYED","GRANDAD","CHEMISE","BOOTLEGS","ENDEARS","TURNPIKE","QUINTETS","TEMPLE","BARGES","ORIGAMI","MANDRAKE","STEPPE","UNJUSTLY","REPRESS","LOATHING","MINCER","DREDGER","CRUELLY","BATTLE","HARSHEST","ATOLLS","SMASHED","PICTURED","DERISORY","SNUFFLED","CLEAVED","VICTOR","TALKING","DEFORM","WITHHELD","SUBSUME","DICTUMS","SHAIKHS","SHORTCUT","BLOKES","CATALOGS","DITCHING","DECAMPED","OUTLOOKS","ARCANE","TAFFETA","MISSPELT","OPAQUELY","DAMMIT","LESSEES","GOBBLE","BATTERY","CRISES","SURVEYS","DECODE","SMARTED","BIDDER","KIPPER","UNGUENT","UPSIDE","PLOTTED","DECREPIT","LENIENT","TYPESET","GRIDDLE","SUNSHINE","MUGGED","GRITTERS","MINIMUMS","PURSERS","KEEPER","SADNESS","INCOMER","HIDING","RAREST","DEFROST","REVALUED","KEENLY","PHIALS","FAWNED","MIDGETS","LIKEABLE","PUSTULE","BANDANNA","SKIPPERS","OUTRANK","DRAGONS","LIQUEUR","REPOSES","ATROPHY","CUDDLY","PAYOUT","CURLER","WOMANISE","CAMELS","UNARMED","QUAVERS","ODYSSEYS","CHURNS","LACQUER","BULLFROG","IMPURE","PIPERS","BUTTIES","DOCTORAL","PARRIED","RESTATED","SEAMAN","CLARETS","PLOWMAN","ENDURED","BLEEPED","INTENTS","FLURRIES","MEATLOAF","SPIFFED","PIQUANCY","PARTINGS","PLASMA","WARPED","BUMBAGS","IRONED","TINKLES","IMPEACH","CLIQUISH","POISON","GRASSED","FLITTED","PUDGIER","CLINGY","BLAZED","OFFENCE","DENTURES","TAPPING","SUFFRAGE","NUZZLE","SIDEWALK","FANZINE","CHALICE","BADGER","FINALISE","ALUMINUM","VIOLIN","SPRUCED","UNWARY","MONITORS","LYNCHES","MORBID","TOTTERED","MELAMINE","ARMPITS","BAGGED","OUTCROP","AIRTIME","HUDDLE","SHUTOUT","KITCHENS","FUNFAIRS","LIZARD","RIBALD","CLICKED","TESTIFY","TOUCHE","SATANISM","SMIDGEON","SUBDUE","MENIAL","SCRIPTED","MEASLES","PEEING","INGESTED","IMPINGE","FLOCKED","PLUMPING","WILDER","WARRING","PALPABLE","SINGED","REWORD","DREADING","MELODIES","SEAPORT","RAFFLE","INCHES","RATTLERS","SQUIGGLY","ONLOOKER","HANGMAN","FISHBOWL","PLACEBOS","CURLERS","ENACTS","OVERRIDE","MOBILES","WRINGS","MAILMEN","COMMENDS","ANKLES","REFORMED","FRIEZES","SESSION","HYGIENIC","PREMISES","HOOLIGAN","CREAMERS","FARCICAL","GALLONS","DUALISM","PERTLY","IMPORTER","MOISTEST","ADMITTED","SNIVELED","BEEHIVE","GROYNE","LEARNED","EXPOSING","MENSWEAR","STUDENT","ABSOLVED","HOSEPIPE","STOICAL","CRACKING","LANDFALL","SLAKES","AFFORD","EYEING","THICKENS","SPEECHES","PERSONA","WRECKAGE","MUTING","ELEMENTS","REMOLDED","REFERRED","WEIRDOS","RUMPLING","CUSHIEST","FEVERED","JILTED","TWEETERS","SEAWARD","SWASTIKA","RATINGS","BUDDING","ENDORSED","TOBACCO","FAINTLY","PHASES","SCREAMED","STEAMER","WESTERN","JAGUARS","HENNAS","TOUGHED","NULLIFY","ROUBLES","MONIKERS","AMALGAM","LOUVRED","OUTLAYS","HEATWAVE","LAMBED","GUINEAS","EDIFICE","PATELLA","SUPPERS","NEGLECT","SERPENT","CAMPERS","SCHEMERS","STAIRWAY","PESTLES","FUTURE","DOCUMENT","GLOTTIS","PARKED","PARADISE","WORRYING","GRANARY","COMEDY","ESCAPISM","CAGING","DEMENTIA","TILTING","SCYTHES","COMMIT","RABBINIC","HUNTSMAN","REPENT","GIVERS","GORILLAS","FLYPAPER","SNORKEL","RETRACED","COUGARS","LANDFILL","ENTHUSED","MEADOW","SLIPWAY","BLEATED","THEATERS","LURING","POSSIBLY","INVALID","GAINING","INNOCENT","LAWLESS","ADAPTIVE","QUICHES","AGNOSTIC","SOOTHES","EDGINGS","REFINER","NIACIN","ENIGMA","LEISURED","BEAVER","SUCTION","TOILED","MUTTERED","NECKING","COCOON","ASSESS","CRACKPOT","CARPETS","BUMBLES","TOEHOLD","APIARY","PLONKERS","CULVERT","STROLLER","DIVINES","RETOLD","NAIVELY","LEFTIST","IDOLATRY","MINIMS","FURIOUS","LUMBERS","DOUSED","CREVICE","EMIGRE","HATCHING","COGNATE","HASSLE","LEAFING","MACHETES","BENCHES","BUNKED","TRAIPSES","SUMMITS","SUCCUBUS","PRACTISE","CLENCHED","GADFLIES","FILTER","LANTERNS","VANQUISH","FRAPPE","MARINER","SURVEYED","HUFFILY","SAUNTER","FEEDING","FLINTY","ZEALOUS","MOTTOS","POOLSIDE","BUNCHING","INSISTS","CRIMSON","GRANTING","BREWED","TIDYING","ATHLETE","CREAMIER","CURDLES","VANTAGES","FOISTING","SLOWER","FLUVIAL","RACOONS","BOGGLING","GROMMETS","BOGGIEST","BOSSES","EFFETE","SANDALS","RICHLY","LOITERER","DIDDLING","CIRCUIT","POWERED","GLOSSIER","REGARDED","VESSELS","RATTLES","SPANIELS","GRAYING","COLITIS","VACUOUS","PITIFUL","CINDERS","EXCISING","SOILING","VARSITY","INTRUDED","TRUMPETS","SLURRY","HANGER","HARKEN","STEEPING","BALLOT","TRENDILY","JEWELER","TOPPED","RAMPAGED","PHILTER","FLAVORED","JACKASS","URBANIZE","IMPEDE","MISREADS","PROLOGUE","MAGNUMS","ROADSHOW","APOSTLES","KENNED","SHIELDED","COASTS","GROWTH","SUBPOENA","PALMING","COHORTS","MAJORITY","DEADBEAT","PUNNETS","ARBITER","DROVERS","INFANT","DAHLIA","PARENT","TSUNAMI","NEUTERED","CROSSLY","PEANUT","DRACHMAE","SNIVELS","GARMENT","CHEWIEST","TRENCHER","SENTIENT","ADHERES","CELIBACY","GOURMAND","VANDALS","CRISIS","STASIS","ORCHARD","PAWPAWS","RICKETS","DOWNLOAD","REHASH","CATHOLIC","CROONING","BARGED","SPARKIER","MAYFLY","BEATNIK","STIMULI","VISCERAL","SUPREMO","GYRATING","GRUDGES","MEDDLING","DIVIDERS","UNIFIED","STRUGGLE","NITPICKS","ACOLYTE","TREBLES","YASHMAKS","LADLING","BALLET","SPAYING","SCHERZOS","THROATS","DEVOUTLY","ADOPTING","CORSETED","BLEARILY","PILLAGE","AWNINGS","ALIGHTED","FOOTPATH","SUBJECTS","CRUETS","ATOMIC","POLITE","SPITING","UNWISE","DISAGREE","CARESSED","DEFTLY","NODULE","FREAKS","CANNONED","TOPLESS","BLAZONS","SKILLETS","PERILOUS","CICADA","IGNORANT","OSTLER","FRACTION","ZIGZAG","LUSTROUS","PRODDING","OPERATOR","AGITPROP","SINISTER","MIXTURE","ACCUSING","GAGGING","ICICLES","HOOFED","CORTICAL","MOBILIZE","PUCKERED","DOLPHIN","THWARTS","CORNEAL","RECREATE","SWELTERS","CODIFIED","PRESET","BEARDED","KISSER","BARONY","ARMADAS","PARASITE","PROGRAM","CHANCEL","EMBLEMS","SPEARS","IMPOLITE","FUNDED","ROLLER","VIBRATOS","DISGUSTS","HELMSMEN","SCRAGGY","DESIRES","OVARIES","NYMPHETS","ADAPTER","MANDRILL","BITTEN","MASHED","SPRIGGED","CRAMPONS","PRIMES","RELIABLE","PACIFIES","DRABNESS","MARQUEE","VERTICES","MEANDER","WHELKS","ADROIT","CUPFUL","LAPSES","OUTWITH","COCCYXES","DEVISE","SHAKEUP","JAGUAR","PANELIST","COQUETTE","CHENILLE","DOOLALLY","EXPENDED","MUGGIER","ENLARGE","WRAPPERS","FLYSHEET","GROTTOES","CLUMPING","IMAGINED","RELATED","REVILE","FLUORIDE","OPOSSUMS","DEVELOPS","UNSEAT","INDUSTRY","CULPABLY","FRIGHTS","AMOUNT","HANGARS","ONWARDS","NODDLES","PREMIUM","BUNKING","PARING","DECEIVE","REMARKED","NEURONE","READIES","EXAMINES","LUVVIE","REDUCE","REAWAKEN","GRIFFON","DORMICE","COOLIES","AIRLIFTS","FIRMING","DIALECTS","ANNEXED","LOOKER","TAINTS","CROSSES","CHAPEL","CALIBERS","FOSTERED","KNEELS","RADICALS","DORMANCY","COMMON","PRISONER","CREAMY","CLEANS","RESULTS","FUCHSIAS","DINGIER","NOTCHES","HURRAY","BARFLIES","PLASTIC","PHONIC","SEANCE","WETTED","PRODUCER","FINALLY","NICKED","BLINKED","HOCKED","RESTORE","FIBBER","NIBBLED","REBUKES","LIFESPAN","CHEAPER","VESTRY","BENDIEST","MOLESKIN","SCRUNCH","CLEANSED","INFLICTS","BACKHOE","TRACHEAS","HUGEST","WEEING","CLOCKING","GUMDROP","FAUCETS","PUPILS","LONGWISE","FUDDLES","VIGILS","WAISTS","MEANING","RATTING","KESTRELS","QUORATE","CARRYING","QUAKING","STRADDLE","KEYBOARD","IMMANENT","LIKELIER","TRUSSES","SCISSORS","VERTIGO","BEACHING","TINIEST","CURVED","BOMBERS","WEAVER","SATANIC","FALCONER","HACKLES","PINKING","SYNOPSES","CORTEX","LOUCHE","PIGEON","SOMBRERO","CRISPED","CUPOLAS","CANTORS","HARDER","PRYING","BOTTOMED","GELDING","DRIPPY","SYNERGY","LAUDING","MULLING","GARROTE","PIRACY","TAGGED","ERASURE","PRIESTLY","WINNER","CHARRED","BLOWSY","BLOOMER","PYTHON","SCRAMS","BELITTLE","COSMOS","AMORTISE","MINDING","REWRITE","RHYTHMIC","SHUNTS","HAZARD","TAKEOUTS","GLIMPSE","CRATERED","SNUBBED","PANTHER","PARCHED","OUTFALL","CONNOTES","PERVADE","CISTERNS","CEILIDH","MORASSES","LOWERED","EXTERNAL","LEARNER","CIGGIES","PLAITED","ANIMATE","FIGURINE","FOOLERY","ANORAKS","OPINED","SLUGGER","MALLETS","EMBODIES","SCENERY","RECOURSE","LAPWING","SUBSET","SIGHED","SQUASH","MEADOWS","XEROXED","PHANTASM","SPROCKET","ESCHEWED","DAMPEN","MOVERS","PEDDLED","BRAVER","MONGRELS","CLUNKERS","DEFILES","DEARESTS","FREEDOMS","LOYALTY","LETDOWNS","HOBNOBS","ASTONISH","SPRAYED","TEQUILAS","FORDED","GROOVIER","DOBBING","TWANGED","ANIMALS","TRAGIC","PULLED","BOOZED","ARBOUR","SEALSKIN","UNMOVED","FORSWEAR","BRUISERS","OFFHAND","WANNABES","WARRANT","VARYING","COTTAGES","STILTS","SKYLARK","PUZZLES","DELICATE","DAHLIAS","SHIMMY","MINUTIAE","GRUNGY","BOWLERS","REDUCING","BUTCHER","OUTCRY","BEHEADS","SMELTERS","DARESAY","TENPINS","FERROUS","ATELIER","TREBLING","STRAFE","FRISKED","NAMING","ANTLERS","PREACHY","CORDUROY","SHOWERY","ACROSS","REGALES","ROOMIER","SLAVERS","CORONER","BOOKED","PATENTED","GINSENG","SANDBARS","UNAFRAID","HAWTHORN","GETAWAY","ASHAMED","BLOOMERS","LUSHES","SPAWNED","LOADSTAR","BROCADE","DISUNITE","SLIDING","TOUGHS","SAVANNAH","COMMUTED","MONIES","TEARDROP","REBOUNDS","BOBBINS","CIVILLY","CLINICAL","PLANTING","FETUSES","SCALDING","FEWEST","BULLION","PALEST","HEYDAYS","REPAIRS","PRAIRIES","YOURSELF","STUNNERS","CRAFTILY","MAMMALS","CALMNESS","RETRACE","BRAKING","DRIVEN","LOUVRES","RASHLY","PETERING","MOVINGLY","SOFTENER","BURGLARY","CHIPPER","GERMANE","ROTUND","DEFRAY","DECODING","STOMPING","PLAINS","LINGERIE","PIONEERS","SANDING","HOSTEL","FIXEDLY","PURSUE","BUSKER","COMPEL","WINKING","ENTRIES","RELENT","PERPLEX","EXPONENT","ENCASES","SNIFFER","WHINGED","AIRWAY","BIGHTS","YOGURTS","CUDDLES","TAILGATE","LICENCES","SHIFTS","DINNERS","PLACID","ELEGANCE","CLATTER","TELLING","COMPLEX","INDUCTEE","LANDLESS","STONED","FUNGAL","SINGLET","SPRINTS","CLUNKS","METRICAL","EDIFIED","DECODES","POINTED","FONDNESS","BLURBS","OEUVRES","POKIEST","BRIDGES","INVOLVED","TOOLING","HARKENS","BOOKIES","GOGGLED","BUNDLED","THORAXES","CAUSES","SHADIER","CABARETS","STUMPY","BRIGADES","CALLINGS","HEADMAN","HAMMER","CHILDREN","KIDDOS","SWEETEN","RULINGS","OVERHANG","MOULDIER","EXAMINE","SOMEWAYS","PERKIER","BARRED","SAPPHIRE","ERODES","SURFER","TUMULTS","SIGNALLY","SWILLING","STRICTLY","ADDUCES","LINKING","VISTAS","DELUGES","HAMMERS","SULKILY","REISSUE","HAULIER","ENVIABLE","CHASTEN","RIDDLED","HOMELY","SHOUTED","SUCROSE","HATEFUL","MARSHAL","OVERSELL","MEAGER","RAPTURES","ROUNDERS","LINEAL","DREAMIER","DOVISH","SHIPLOAD","LOAFER","HUMBLES","WALRUSES","DENUDING","SCALPEL","SUITED","SASSIEST","MOOING","PECTIN","GREEDILY","SHORTIES","ACCURACY","RECTUMS","ROUTED","HONOURED","FROSTS","DENIES","LIGHTENS","HICCUP","HERALDIC","MOULTS","STINGER","FUELLING","CANDOUR","FISHIEST","MASCOT","WITHIN","PATELLAE","MICROBES","GOBBLES","SLAVISH","TIPSIEST","JALOPIES","FETLOCK","CHEQUE","STEERED","OUTWARDS","INJURING","STUCCO","WICKETS","TURFING","ENDOWED","QUINCES","SANDBANK","SISTERS","BLENDS","CLAUSE","PERMITS","JUICIER","SPONGED","PIDDLED","GRUMPS","ABODES","RUBRIC","GRATING","FLIRTS","OVERHEAR","PROVING","EMOTIVE","LUSTIEST","ANOTHER","BELLHOPS","PIAZZA","FIERCELY","RECURS","MESSAGE","JERRYCAN","EPICURES","RECITED","REJOICES","HARDCORE","CROOKED","ASPHYXIA","EFFING","HUNKERS","TANDEM","PORING","SOGGIER","OARLOCKS","PADDOCKS","CHIMAERA","PROBED","EXCEED","DEEPEN","BROWSER","UDDERS","CAMPING","BALLGOWN","FATIGUES","FURTHEST","SHAMMING","CHATEAUS","EXPIATED","FEVERISH","GOALPOST","VECTORS","MELLOWED","DEPLETES","PLAYTIME","GROOMING","DOMESTIC","CHOMPED","EFFIGIES","HOOKAHS","CATGUT","FOGBOUND","BEEFIEST","LASERS","JOSHES","WADDLED","DRAGNETS","FRAZZLED","MANGLE","IRRIGATE","JETTED","FUTILITY","PASSIONS","SITTERS","GLIBLY","SCALPED","CRASHES","INWARD","KINDLED","ACORNS","SNICKED","STOPOVER","TERRIFY","SHOWED","MOOTING","SPORTY","COACHMEN","HISSED","TROLLS","CONTUSE","CALENDAR","EJECTS","FRITTERS","BURDENS","LACQUERS","BILKING","PEEKED","NOVICES","BECALMED","WIPERS","DISASTER","UNHOOK","CRIMPING","FLICKS","BIGGIE","CLOTHE","PLAYABLE","UNIONISE","DRAGOON","GARDENER","REALTOR","LACING","JUGGLE","IMPROPER","PREACHER","DRINKING","CULTURE","JAILING","SAWMILLS","UNMASKS","PROPHETS","DOUCHING","COLLIES","SIDELONG","DOUBTER","SLOUCHED","BODGING","HANDYMAN","MECCAS","CONCEDES","RESIDED","TROOPERS","TARTANS","CHIMED","ROWLOCKS","EARRINGS","HOOKED","NEATENS","STROLLS","JOURNO","SUNNIER","SCARRED","TRUCKS","GROUPED","TREELESS","TORTURED","SCALES","STRAINS","WHITEST","DESIGNER","MEDITATE","SNIFTERS","DECISION","HEREBY","POOREST","ANEMONE","RAFFLES","CROSSBAR","BODYSUIT","MUTELY","BAROQUE","LEUKEMIA","BARQUES","BRONZED","EMPORIA","SYMBOLS","CLAIMED","COGWHEEL","WINNING","REFLATE","JOYOUS","PEEPSHOW","CESSION","ABIDED","FORGED","BUZZARD","GROUCHED","SLAYINGS","BINMAN","WELLNESS","VAMPED","FLOUNDER","CARVINGS","QUIFFS","WIDOWS","TRAWLER","DARKEN","BONSAI","FOREPLAY","HOUMUS","FORESEES","REARMOST","PLAYING","HATBOXES","BLATHERS","BAZOOKAS","HYMNAL","COOKER","ESCAPIST","TENTACLE","MATERIAL","PEDESTAL","OUTSOLD","VALIDATE","EQUALISE","BROOMS","BAZAAR","REPLAYED","FOCUSSED","COCKEREL","PATTERS","BILLETED","MESSING","HOEING","EXEMPTED","BANEFUL","VALLEY","SAVAGERY","PUDDINGS","STRATUM","KETCHUP","TENSILE","DEBUGGED","EXTENDED","CROWNING","CADENZA","BLUSTERS","SCOTCH","RACQUETS","FROWNED","HARING","BUMPING","WRITHED","DEVIOUS","MOULDERS","POULTICE","BOTCHING","CHEWIER","MORAINES","OFFSET","LIFELIKE","QUEUES","ADAGIOS","TUMOUR","EARACHE","EVINCED","NICETIES","SWANKS","LIVIDLY","HARPIST","MARATHON","LOOKING","COILING","DOGGIES","WRANGLE","CUCKOO","REVERIE","MARBLES","SHUTTER","BOOKMARK","SHINIEST","TIMELY","SHANGHAI","MUSEUM","ACROBATS","LORRIES","CRABBIER","FEATURED","SLEAZE","PLACENTA","LAUNCHES","DEXTROUS","ALLOYS","FORGER","SOFTWOOD","PRODIGAL","URBANE","SPHERE","BUMPKIN","RISKIEST","PESTER","SOARING","HAMMERED","DEAFNESS","ACCUSED","VAPORISE","COAXING","NITROGEN","SULLYING","FREELOAD","EARTHING","JERKING","PALPATES","WITTIEST","SPARKLY","UNCLES","BORROWED","DORSAL","CHOOSIER","EAGERLY","SLAVED","PEDIGREE","BICKERS","MESSIAHS","REQUITED","ORIGINS","CUSPIDOR","DAMAGES","DISPLAYS","SELFLESS","CAREENS","HANDLING","BINDER","CAGOULE","MELANOMA","CAKEWALK","NAPHTHA","PHRASES","ADDENDUM","SITUATES","VIRTUOSI","MEDIEVAL","CRAPPER","CRETIN","FUSILIER","FELAFELS","FUSTIAN","FERRYMEN","ROADIE","WETNESS","HUMIDITY","ACCEDE","FIREWOOD","ROSTER","INKLINGS","ESCAPES","DARKIES","GUILTILY","LUSTILY","BICARB","SHEARS","FLITTING","TEASING","TARTING","KAOLIN","IMBUING","AMAZONS","ENFORCE","SKINCARE","ASCENT","CHIVYING","REPLAYS","ACOLYTES","LOVELY","SPINES","STRIVE","OCTANE","HORRORS","PORTICO","SIZZLES","UMBRELLA","LINEARLY","IMPOTENT","FLEABAGS","LEARNT","CRYPTIC","ESCAPE","SAUCEPAN","DIPSTICK","WEAVED","WAGGON","NEURONS","PERUSE","GLOBALLY","MANNED"], 5 | big: ["PICNICKED","ADMONITIONS","EXCULPATE","HOSPITABLY","VORACIOUS","PUNCTUATION","LUDICROUS","ENORMOUSLY","QUALIFYING","DISLOCATES","KNOCKOUTS","CAMPANILES","BROADSWORDS","DEMONIACAL","GENERALISTS","PARENTHESES","INFANTRYMEN","PHONETICIAN","LABELLING","FORGETTING","SOBRIQUETS","OUTWEIGHING","INTIMATIONS","SPACEWALKS","DEPRESSANT","PARALYZES","COMBATING","GOALPOSTS","SHOEMAKER","HARDCOVER","CHEMICALLY","STRATEGIES","EXUBERANTLY","DAYDREAMS","PLUPERFECT","WEEKNIGHT","GLOSSINESS","SANITARIUMS","ANAESTHESIA","TENDERIZED","ABDOMINAL","PROPAGATE","SOUNDINGS","CHANCELLORS","PRESSURISE","QUIZZICAL","OUTRUNNING","ANGLICISM","REPELLENT","PEDALLING","RIDICULING","AFTERNOON","PALPITATES","PUNGENTLY","SUCCOURED","CASTRATED","GREENGAGES","PRESIDENT","TRELLISES","JUSTIFIED","UNEARTHING","PHYSIOLOGY","PAUNCHIEST","SYNDICATED","ENSLAVEMENT","INNOCENCE","KINGMAKER","FLABBIEST","SHEIKHDOM","FULMINATE","SUBMISSIONS","HESITATIONS","RESERVING","DEFINITELY","PURCHASED","CARAMELISED","ADRENALINE","DRESSIEST","UPSETTING","WICKEDEST","ENTITLEMENT","POPULARLY","INNUENDOS","BILBERRIES","SHORELINE","ATTAINING","DISCOURAGE","MARTINETS","REMOUNTED","NOBLEWOMEN","OMBUDSMEN","CANCEROUS","FARMLANDS","OVERRULING","GRENADIERS","UNDERSIZED","REVEALING","SKITTISHLY","EVANGELISM","REPUDIATED","ANNEALING","POLICYMAKER","BARRACUDA","CASELOADS","PERMANENCY","PATHOGENS","POLITICALLY","MESMERIZES","DISORDERS","MEGASTARS","ADVERSARY","SEAMANSHIP","BIVOUACKING","BANDSTANDS","APPROBATION","COURTSHIP","OPTICIANS","HAIRSTYLE","PROCLAIMS","FLYWEIGHT","FORGATHERED","UNDERCLASS","CAREGIVER","DISAPPEARS","REDCURRANT","MOBILISING","OVERRATES","CORPUSCLES","SYNAGOGUE","BELABORED","DISPARAGING","IRRITATES","INSANITARY","CREATIONIST","CASTRATING","BUTTONHOLES","ARMADILLOS","FRONTBENCH","CHAINSAWS","REHEARSING","FLAKINESS","PRESUMING","HANDCUFFING","FORTIETHS","CHECKLIST","SPECULATE","SUNDERING","REMOVABLE","BUBBLEGUM","CORPOREAL","THRASHING","MOTIVATIONS","DISLOYALTY","DIGNITARIES","DIRECTIONAL","BYSTANDERS","PORTIONING","IMMIGRATION","REALIGNING","RESTORATIVE","CENTENNIALS","SOCIALITE","PSYCHIATRY","STIGMATIZED","YAMMERING","ELECTRICITY","DATELINES","COLOURIZING","PAROCHIAL","STRANGLED","DISQUALIFY","NANOSECOND","REFERABLE","MAJESTIES","RESPONDING","RESONATED","EGGSHELLS","EXCORIATING","INTOLERANT","CATALYZES","TRIUMPHAL","SALIVATED","REPENTING","INQUIRINGLY","IMMORALLY","BANDLEADERS","SCALLYWAGS","EXPECTORATE","TIMESERVERS","REMINDERS","CATALOGUE","TERMINATION","BLANCMANGE","BESIEGING","SPORTSWEAR","REALIZATION","VIRULENCE","TRAGICALLY","FLOGGINGS","VIBRAPHONE"], 6 | large: ["STRAIGHTENING","DEREGULATING","INEXPRESSIBLY","INTRANSITIVELY","NYMPHOMANIACS","HYSTERECTOMIES","SPECTROSCOPES","COUNTERTENORS","UNFAVOURABLE","WELTERWEIGHT","TECHNOLOGIST","TRACTABILITY","MODERNIZATION","CHECKERBOARDS","STREPTOCOCCAL","REDISTRIBUTES","HOMOEOPATHIC","UNREMITTINGLY","SPEEDOMETERS","PROSELYTIZES","REINSTATEMENT","DECONTAMINATE","ILLEGALITIES","AGRIBUSINESS","NEOCLASSICAL","CHIVALROUSLY","SKITTISHNESS","DISEMBOWELING","REORGANISATION","COLLABORATION","DISASSOCIATES","PERSONALIZED","WHOLEHEARTED","CONCESSIONAIRE","PASTEURIZING","TRANSGRESSED","RHAPSODISING","UNILATERALLY","RESTRUCTURINGS","CHAIRPERSONS","INCREASINGLY","PTERODACTYLS","FASCINATINGLY","PRIZEFIGHTER","EXPLOSIVENESS","ADAPTABILITY","MAGNANIMOUSLY","CRYSTALLIZED","AMATEURISHNESS","EXPANSIONISM","MISREPRESENTED","INDEPENDENTLY","COUNTENANCES","BEATIFICATIONS","SPENDTHRIFTS","CONTRIBUTIONS","EXTERMINATING","ALTERCATIONS","BOWDLERIZING","BLABBERMOUTHS","OUTRAGEOUSLY","REINFORCEMENT","ACQUISITIVENESS","CENTRALIZATION","PRESUMPTIONS","REDUNDANCIES","BLINDFOLDING","SEISMOLOGICAL","UNDERCLOTHING","INDEMNIFYING","COUNTERPANES","WHIPPOORWILL","NONCOMBATANT","WEIGHBRIDGES","BEATIFICATION","INDIVIDUALIZED","RIDICULOUSLY","EXTINGUISHERS","INTRANSITIVES","AUTHORITATIVELY","DISQUALIFIES","CAMOUFLAGING","SUBJECTIVELY","DISINGENUOUSLY","EMBARRASSMENT","PREDETERMINED","SPIRITUALITY","EXTRAORDINARILY","HOUSEMASTERS","DISPOSSESSES","CATASTROPHES","APATHETICALLY","INTERLOCUTOR","ILLEGITIMATELY","AUTHENTICALLY","SOLICITATIONS","ACCEPTABILITY","NYMPHOMANIAC","CONCERTINAED","CONTINUANCES","STRETCHMARKS","OMNIPRESENCE","PHYSIOTHERAPIST","RECAPITALIZED","PORTENTOUSNESS","SCRIPTWRITER","VISCOUNTESSES","INSENSITIVITY","BARNSTORMING","NATURALIZING","RECONSTRUCTS","GUILLOTINING","DIVERSIFICATION","INVINCIBILITY","COMMONWEALTH","ETHNOCENTRIC","DEFICIENCIES","LONGSHOREMEN","COUNTERCULTURES","EXPRESSIVENESS","MANIPULATIONS","INTERPOLATES","STABILISATION","OVERINDULGES","PERFECTIONISTS","FORCEFULNESS","ACADEMICALLY","UNACCOMPANIED","REPRESSIVENESS","UNDERSTANDABLY","CONGRATULATING","CANTANKEROUS","DESTABILIZING","LEGITIMIZING","LEATHERNECKS","INFILTRATION","SENTIMENTALISED","CUMULATIVELY","FORBIDDINGLY","ENCRUSTATION","COLLABORATING","OUTDISTANCED","INCORPORATING","QUANTITATIVELY","APPENDECTOMY","MICROCOMPUTER","INDETERMINACY","REMINISCENCE","DEMORALISATION","DEMILITARISES","DETERMINISTIC","INTERCONNECTING","INGRATIATING","PARTISANSHIP","YELLOWHAMMERS","PRODUCTIVELY","DISCONTINUITIES","DISAPPOINTING","WHITEWASHING","CONGENITALLY","HEARTRENDING","TRANSMOGRIFY","CLIMATOLOGIST","OBSERVATIONS","PORNOGRAPHER","SOCIOLOGICALLY","CLASSIFIABLE","EXTERNALISES","EMASCULATION","CALCULATIONS","UNINTENTIONAL","DESPONDENTLY","CHARACTERISE","DISTRESSINGLY","RENDEZVOUSING","BLABBERMOUTH","DISSIMILARITIES","CONDITIONALLY","RECONSTRUCTIONS","DIAMETRICALLY","READDRESSING","HOUSEKEEPING","CONTINUATION","CAPABILITIES","CONTENTIOUSLY","INTERCEPTING","OXYACETYLENE","STOCKBROKING","APPERTAINING","ENCOURAGEMENTS","RECONNOITRES","GUARDIANSHIP","ACQUAINTANCE","SUMMERHOUSES","RESEMBLANCES","EGOCENTRICALLY","PROBABILITIES","BREATHALYZING","SCOREKEEPERS","MILLIONAIRESS"] 7 | }; -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "./" 3 | -------------------------------------------------------------------------------- /sounds/pluck.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knadh/wordpluck/3fc5e18ccd2aeb982cfb5d91eef2ac7f8f4a7aca/sounds/pluck.mp3 -------------------------------------------------------------------------------- /sounds/pluck.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/knadh/wordpluck/3fc5e18ccd2aeb982cfb5d91eef2ac7f8f4a7aca/sounds/pluck.ogg -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #fff; 3 | margin: 0; 4 | padding: 0; 5 | width: 100%; 6 | height: 100%; 7 | overflow: hidden; 8 | 9 | font-family: "Segoe UI", "Helvetica Neue", Helvetica, Arial; 10 | font-size: 16px; 11 | color: #444; 12 | } 13 | 14 | h1, h2, h3 { 15 | font-weight: normal; 16 | } 17 | button { 18 | background: #111; 19 | color: #fff; 20 | border: 0; 21 | padding: 10px 30px; 22 | border-radius: 3px; 23 | 24 | font-size: 2em; 25 | font-family: "Segoe UI Light", "Helvetica Neue", Helvetica, Arial; 26 | cursor: pointer; 27 | } 28 | .button:hover, 29 | button:hover { 30 | background: #0000bb; 31 | color: #fff; 32 | } 33 | 34 | a { 35 | color: #333; 36 | text-decoration: none; 37 | } 38 | a:hover { 39 | color: #444; 40 | } 41 | .clear { 42 | clear: both; 43 | } 44 | 45 | .container { 46 | position: relative; 47 | z-index: 100; 48 | } 49 | 50 | #stage { 51 | position: absolute; 52 | left: 0; 53 | right: 0; 54 | top: 0; 55 | bottom: 0; 56 | z-index: 10; 57 | } 58 | 59 | #tip { 60 | position: absolute; 61 | left: 0; 62 | right: 0; 63 | top: 100px; 64 | margin: 0; 65 | 66 | color: #999; 67 | text-align: center; 68 | text-transform: uppercase; 69 | letter-spacing: 2px; 70 | } 71 | 72 | #start { 73 | position: relative; 74 | margin: 30vh auto 0 auto; 75 | text-align: center; 76 | } 77 | #start p { 78 | margin: 0 0 10px 0; 79 | } 80 | 81 | #controls { 82 | position: fixed; 83 | top: 20px; 84 | right: 20px; 85 | } 86 | #controls .opt { 87 | padding-top: 10px; 88 | } 89 | #controls .opt label { 90 | margin-top: 10px; 91 | cursor: pointer; 92 | } 93 | 94 | #score { 95 | font-size: 50px; 96 | line-height: 50px; 97 | text-align: center; 98 | } 99 | 100 | #notice { 101 | position: absolute; 102 | right: 0; 103 | top: 100px; 104 | left: 0; 105 | z-index: 1; 106 | font-size: 5em; 107 | text-align: center; 108 | color: #ccc; 109 | display: none; 110 | } 111 | 112 | #stats { 113 | text-align: center; 114 | list-style-type: none; 115 | margin: 40px 0 40px 0; 116 | padding: 0; 117 | } 118 | #stats li { 119 | border: 1px solid #444; 120 | margin-bottom: 15px; 121 | border-radius: 3px; 122 | } 123 | #stats h1 { 124 | margin: 0; 125 | padding: 5px; 126 | } 127 | #stats label { 128 | background: #444; 129 | color: #fff; 130 | font-size: 11px; 131 | padding: 5px; 132 | display: block; 133 | text-transform: uppercase; 134 | } 135 | 136 | #controls .pause { 137 | margin-top: 30px; 138 | font-size: 11px; 139 | text-align: center; 140 | } 141 | 142 | .footer { 143 | position: fixed; 144 | bottom: 10px; 145 | left: 10px; 146 | text-align: center; 147 | } --------------------------------------------------------------------------------