├── assets ├── img │ ├── cue.png │ ├── hand.png │ ├── rack.png │ ├── tick.png │ ├── 8ball.png │ ├── aiIcon.png │ ├── aiLevel.png │ ├── aiWin.png │ ├── bgLarge.png │ ├── cloth.png │ ├── cross.png │ ├── famobi.png │ ├── marker.png │ ├── mover.png │ ├── panel.png │ ├── panel2.png │ ├── panel3.png │ ├── panel4d.png │ ├── pockets.png │ ├── rackBG.png │ ├── rosette.png │ ├── score.png │ ├── shade.png │ ├── shadow.png │ ├── success.png │ ├── switch.png │ ├── title.png │ ├── bonusDisc.png │ ├── bonusStar.png │ ├── clockIcon.png │ ├── cueShadow.png │ ├── guiPanel1.png │ ├── guiPanel2.png │ ├── guiSolids.png │ ├── helpMouse.png │ ├── helpTouch.png │ ├── highscore.png │ ├── humanIcon.png │ ├── pVpButton.png │ ├── playerWin.png │ ├── tableTop.png │ ├── turnArrow.png │ ├── bonusStar2.png │ ├── cueBallSpot.png │ ├── dottedLine.png │ ├── foulDisplay.png │ ├── guiStripes.png │ ├── helpButton.png │ ├── illegalBreak.png │ ├── illegalShots.png │ ├── loaderBase.png │ ├── loaderFill.png │ ├── menuButton.png │ ├── minusButton.png │ ├── mouseSprite.png │ ├── muteButton.png │ ├── pVAIButton.png │ ├── playButton.png │ ├── plusButton.png │ ├── powerBarBG.png │ ├── powerBarBase.png │ ├── powerBarTop.png │ ├── quitButton.png │ ├── replayButton.png │ ├── statsButton.png │ ├── foulHighlight.png │ ├── gameController.png │ ├── settingsButton.png │ ├── spinSetterZoom.png │ ├── ballSpriteSheet10.png │ ├── ballSpriteSheet11.png │ ├── ballSpriteSheet12.png │ ├── ballSpriteSheet13.png │ ├── ballSpriteSheet14.png │ ├── ballSpriteSheet15.png │ ├── ballSpriteSheet9.png │ ├── cueBallSpotZoom.png │ ├── illegalContacts.png │ ├── loaderHighlight.png │ ├── solidsSpriteSheet.png │ ├── spinSetterLarge.png │ ├── spotSpriteSheet.png │ └── marker.json ├── audio │ ├── cheer.wav │ ├── ding.wav │ ├── cueHit.wav │ ├── shimmer.wav │ ├── ballHit2.wav │ ├── cushionHit.wav │ └── pocketHit.wav ├── fonts │ ├── Font.png │ ├── font1.png │ ├── font2.png │ ├── font3.png │ ├── font5.png │ ├── font6.png │ ├── Font.fnt │ ├── font3.fnt │ ├── font1.fnt │ ├── font2.fnt │ └── font6.fnt └── src │ ├── 08render.js │ ├── 11timer.js │ ├── 10effects.js │ ├── 09sound.js │ ├── 16boot.js │ ├── 03contactListener.js │ ├── 05levelData.js │ ├── 02Ball.js │ ├── 06maths.js │ ├── 07vector2d.js │ ├── 12load.js │ ├── 04billiardPhysics.js │ ├── 13mainMenu.js │ └── 14setup.js ├── html5games ├── images │ ├── logo.png │ ├── leaderboard2.svg │ └── icon.svg └── gameapi │ ├── detection.js │ ├── fenster.js │ ├── famobi_analytics_v1.js │ └── zepto.min.js ├── famobi.json ├── index.html ├── README.md └── sdk_interface.js /assets/img/cue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/cue.png -------------------------------------------------------------------------------- /assets/img/hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/hand.png -------------------------------------------------------------------------------- /assets/img/rack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/rack.png -------------------------------------------------------------------------------- /assets/img/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/tick.png -------------------------------------------------------------------------------- /assets/audio/cheer.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/cheer.wav -------------------------------------------------------------------------------- /assets/audio/ding.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/ding.wav -------------------------------------------------------------------------------- /assets/fonts/Font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/fonts/Font.png -------------------------------------------------------------------------------- /assets/fonts/font1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/fonts/font1.png -------------------------------------------------------------------------------- /assets/fonts/font2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/fonts/font2.png -------------------------------------------------------------------------------- /assets/fonts/font3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/fonts/font3.png -------------------------------------------------------------------------------- /assets/fonts/font5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/fonts/font5.png -------------------------------------------------------------------------------- /assets/fonts/font6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/fonts/font6.png -------------------------------------------------------------------------------- /assets/img/8ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/8ball.png -------------------------------------------------------------------------------- /assets/img/aiIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/aiIcon.png -------------------------------------------------------------------------------- /assets/img/aiLevel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/aiLevel.png -------------------------------------------------------------------------------- /assets/img/aiWin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/aiWin.png -------------------------------------------------------------------------------- /assets/img/bgLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/bgLarge.png -------------------------------------------------------------------------------- /assets/img/cloth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/cloth.png -------------------------------------------------------------------------------- /assets/img/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/cross.png -------------------------------------------------------------------------------- /assets/img/famobi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/famobi.png -------------------------------------------------------------------------------- /assets/img/marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/marker.png -------------------------------------------------------------------------------- /assets/img/mover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/mover.png -------------------------------------------------------------------------------- /assets/img/panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/panel.png -------------------------------------------------------------------------------- /assets/img/panel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/panel2.png -------------------------------------------------------------------------------- /assets/img/panel3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/panel3.png -------------------------------------------------------------------------------- /assets/img/panel4d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/panel4d.png -------------------------------------------------------------------------------- /assets/img/pockets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/pockets.png -------------------------------------------------------------------------------- /assets/img/rackBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/rackBG.png -------------------------------------------------------------------------------- /assets/img/rosette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/rosette.png -------------------------------------------------------------------------------- /assets/img/score.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/score.png -------------------------------------------------------------------------------- /assets/img/shade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/shade.png -------------------------------------------------------------------------------- /assets/img/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/shadow.png -------------------------------------------------------------------------------- /assets/img/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/success.png -------------------------------------------------------------------------------- /assets/img/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/switch.png -------------------------------------------------------------------------------- /assets/img/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/title.png -------------------------------------------------------------------------------- /assets/audio/cueHit.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/cueHit.wav -------------------------------------------------------------------------------- /assets/audio/shimmer.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/shimmer.wav -------------------------------------------------------------------------------- /assets/img/bonusDisc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/bonusDisc.png -------------------------------------------------------------------------------- /assets/img/bonusStar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/bonusStar.png -------------------------------------------------------------------------------- /assets/img/clockIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/clockIcon.png -------------------------------------------------------------------------------- /assets/img/cueShadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/cueShadow.png -------------------------------------------------------------------------------- /assets/img/guiPanel1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/guiPanel1.png -------------------------------------------------------------------------------- /assets/img/guiPanel2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/guiPanel2.png -------------------------------------------------------------------------------- /assets/img/guiSolids.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/guiSolids.png -------------------------------------------------------------------------------- /assets/img/helpMouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/helpMouse.png -------------------------------------------------------------------------------- /assets/img/helpTouch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/helpTouch.png -------------------------------------------------------------------------------- /assets/img/highscore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/highscore.png -------------------------------------------------------------------------------- /assets/img/humanIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/humanIcon.png -------------------------------------------------------------------------------- /assets/img/pVpButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/pVpButton.png -------------------------------------------------------------------------------- /assets/img/playerWin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/playerWin.png -------------------------------------------------------------------------------- /assets/img/tableTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/tableTop.png -------------------------------------------------------------------------------- /assets/img/turnArrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/turnArrow.png -------------------------------------------------------------------------------- /assets/audio/ballHit2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/ballHit2.wav -------------------------------------------------------------------------------- /assets/audio/cushionHit.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/cushionHit.wav -------------------------------------------------------------------------------- /assets/audio/pocketHit.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/audio/pocketHit.wav -------------------------------------------------------------------------------- /assets/img/bonusStar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/bonusStar2.png -------------------------------------------------------------------------------- /assets/img/cueBallSpot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/cueBallSpot.png -------------------------------------------------------------------------------- /assets/img/dottedLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/dottedLine.png -------------------------------------------------------------------------------- /assets/img/foulDisplay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/foulDisplay.png -------------------------------------------------------------------------------- /assets/img/guiStripes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/guiStripes.png -------------------------------------------------------------------------------- /assets/img/helpButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/helpButton.png -------------------------------------------------------------------------------- /assets/img/illegalBreak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/illegalBreak.png -------------------------------------------------------------------------------- /assets/img/illegalShots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/illegalShots.png -------------------------------------------------------------------------------- /assets/img/loaderBase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/loaderBase.png -------------------------------------------------------------------------------- /assets/img/loaderFill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/loaderFill.png -------------------------------------------------------------------------------- /assets/img/menuButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/menuButton.png -------------------------------------------------------------------------------- /assets/img/minusButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/minusButton.png -------------------------------------------------------------------------------- /assets/img/mouseSprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/mouseSprite.png -------------------------------------------------------------------------------- /assets/img/muteButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/muteButton.png -------------------------------------------------------------------------------- /assets/img/pVAIButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/pVAIButton.png -------------------------------------------------------------------------------- /assets/img/playButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/playButton.png -------------------------------------------------------------------------------- /assets/img/plusButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/plusButton.png -------------------------------------------------------------------------------- /assets/img/powerBarBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/powerBarBG.png -------------------------------------------------------------------------------- /assets/img/powerBarBase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/powerBarBase.png -------------------------------------------------------------------------------- /assets/img/powerBarTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/powerBarTop.png -------------------------------------------------------------------------------- /assets/img/quitButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/quitButton.png -------------------------------------------------------------------------------- /assets/img/replayButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/replayButton.png -------------------------------------------------------------------------------- /assets/img/statsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/statsButton.png -------------------------------------------------------------------------------- /html5games/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/html5games/images/logo.png -------------------------------------------------------------------------------- /assets/img/foulHighlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/foulHighlight.png -------------------------------------------------------------------------------- /assets/img/gameController.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/gameController.png -------------------------------------------------------------------------------- /assets/img/settingsButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/settingsButton.png -------------------------------------------------------------------------------- /assets/img/spinSetterZoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/spinSetterZoom.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet10.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet11.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet12.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet13.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet14.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet15.png -------------------------------------------------------------------------------- /assets/img/ballSpriteSheet9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/ballSpriteSheet9.png -------------------------------------------------------------------------------- /assets/img/cueBallSpotZoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/cueBallSpotZoom.png -------------------------------------------------------------------------------- /assets/img/illegalContacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/illegalContacts.png -------------------------------------------------------------------------------- /assets/img/loaderHighlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/loaderHighlight.png -------------------------------------------------------------------------------- /assets/img/solidsSpriteSheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/solidsSpriteSheet.png -------------------------------------------------------------------------------- /assets/img/spinSetterLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/spinSetterLarge.png -------------------------------------------------------------------------------- /assets/img/spotSpriteSheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afzalimdad9/8Ball-Pool-HTML5/HEAD/assets/img/spotSpriteSheet.png -------------------------------------------------------------------------------- /famobi.json: -------------------------------------------------------------------------------- 1 | {"features":{"highscores":1,"credits":1,"multiplayer_local":1},"game_i18n":{"default":{"filename.png":"fg_i18n/{lang}/images/filename.png"}}} -------------------------------------------------------------------------------- /assets/src/08render.js: -------------------------------------------------------------------------------- 1 | function renderScreen(){for(var a=playState.gameInfo,c=0;c{this.master=!e,this.updateMute()},this.setMute=(e=!1)=>{this.slave=!e,this.updateMute()},this.updateMute=()=>{this.on=this.master&&this.slave}};Sound.Play=function(e,t){(void 0===t&&(t=1),Sound.on)&&new Phaser.Sound(game,e,t).play()},Sound.createNewAudioContext=function(){game.sound.context=new AudioContext,game.sound.masterGain.disconnect(),game.sound.masterGain=game.sound.context.createGain(),game.sound.masterGain.connect(game.sound.context.destination)},Sound.checkAudioContext=function(){this.isSuspended()&&this.startCheckingSuspended();const e=game.sound.context.currentTime;setTimeout((()=>{const t=game.sound.context.currentTime;e===t&&this.createNewAudioContext()}),1e3)},Sound.startCheckingSuspended=function(){clearInterval(this.intervalId),this.intervalId=setInterval((()=>{this.isSuspended()?game.sound.context.resume():clearInterval(this.intervalId)}),1e3)},Sound.isSuspended=function(){return game.sound.usingWebAudio&&"suspended"===game.sound.context.state},setInterval(Sound.checkAudioContext.bind(Sound),1e3); -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 8 Ball Billiards Classic
-------------------------------------------------------------------------------- /html5games/gameapi/detection.js: -------------------------------------------------------------------------------- 1 | var detection=function(){var n,t={is:{}},i=navigator.userAgent;for(n in t.detect={html5:function(){return void 0!==document.createElement("canvas").getContext},touch:function(){return!!("ontouchstart"in window||navigator.msMaxTouchPoints)},android:function(){return!!i.match(/Android/i)},ios:function(){return!!i.match(/iPhone|iPad|iPod/i)},ios7:function(){return t.detect.ios&&i.match(/version\/7\./i)},bb10:function(){return!!i.match(/BB10/i)},windows:function(){return!!i.match(/Windows/i)},webkitVersion:function(){var n=new RegExp(/AppleWebKit\/([\d.]+)/).exec(i);return null!==n&&parseFloat(n[1])},androidStockBrowser:function(){return!!(t.is.android&&t.is.webkitVersion&&t.is.webkitVersion<537)},standalone:function(){return!!window.navigator.standalone},smartphone:function(){return!!i.match(/Android.*Mobile|iPhone|IEMobile|WPDesktop|BB10/i)},tablet:function(){var n=t.is.android&&!t.is.smartphone,o=!!i.match(/iPad/i);return n||o},pc:function(){return!t.is.smartphone&&!t.is.tablet},phantom:function(){return!(!window.callPhantom&&!i.match(/PhantomJS/))},iframe:function(){return window.self!=window.top}},t.detect)"function"==typeof t.detect[n]&&(t.is[n]=t.detect[n]());return t}(); -------------------------------------------------------------------------------- /html5games/gameapi/fenster.js: -------------------------------------------------------------------------------- 1 | "undefined"!=typeof window&&"undefined"==typeof fenster&&void 0===window.fenster&&function(t,e){const n=function(){let t=!1;try{const e=new URL(window.location.href).searchParams;t=["1","true"].includes(e.get("debug"))}catch(t){}let e=window.innerWidth,n=window.innerHeight,i=null,o=null;function f(){if(void 0===window.famobi||"function"!=typeof window.famobi.getOffsets)return;window.famobi.getOffsets().top;let t=window.famobi.getOffsets().right||0,i=window.famobi.getOffsets().bottom||0;window.famobi.getOffsets().left;e=window.innerWidth-t,n=window.innerHeight-i,"function"==typeof o&&o()}return addEventListener("resize",(t=>{f()})),i=setInterval((()=>{void 0!==window.famobi&&void 0!==window.famobi.adapters&&"function"==typeof window.famobi.adapters.list&&void 0!==window.famobi.adapters.list().viewport&&(clearInterval(i),window.famobi.adapters.add("viewport","offsetChanged",(t=>{f()})),f())}),250),{get innerHeight(){return n},get innerWidth(){return e},update:f,subscribeToOffsetUpdates:function(t){o=t},test:function(t=0,e=0){const n={top:0,right:t,bottom:e,left:0};window.famobi.getOffsets=()=>n,window.famobi.adapters.run("viewport","offsetChanged",n)}}}();e.fenster=n}(0,window); -------------------------------------------------------------------------------- /html5games/images/leaderboard2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🎱 8Ball Pool - HTML5 Game 2 | 3 | A **classic 8-ball pool game** built using **HTML5, JavaScript, and CSS**. Play solo, challenge an AI opponent, or compete with a friend in this realistic and interactive billiards experience. 4 | 5 | ## 🌟 Features 6 | 7 | - 🎮 **Single & Multiplayer Mode** – Play against AI or a second player. 8 | - 🏆 **Smooth Gameplay** – Realistic ball physics using HTML5 Canvas. 9 | - 🎨 **Customizable Tables & Balls** – Personalize the game to your liking. 10 | - 🔊 **Sound Effects** – Enjoy realistic pool sounds. 11 | - 🎯 **Cue Ball Aiming Guide** – Helps players aim their shots. 12 | 13 | ## 🚀 Demo 14 | 15 | 🔗 **[Play Now](https://8-ball-pool-html-5.vercel.app/)** 16 | 17 | ## 📸 Screenshots 18 | 19 | ![8Ball Pool](https://github.com/user-attachments/assets/e869d275-fe94-49cc-b7c6-d46978a1daed) 20 | 21 | ## 🛠️ Tech Stack 22 | 23 | - **HTML5** (Canvas API) 24 | - **JavaScript** (Game logic & physics) 25 | - **CSS3** (UI styling) 26 | 27 | ## 🔧 Installation 28 | 29 | 1. Clone the repository: 30 | 31 | ```bash 32 | git clone https://github.com/yourusername/8Ball-Pool-HTML5.git 33 | ``` 34 | 35 | 2. Navigate into the project directory: 36 | 37 | ```bash 38 | cd 8Ball-Pool-HTML5 39 | ``` 40 | 41 | 3. Open index.html in your browser. 42 | 43 | ## 🎮 How to Play 44 | 45 | - **Objective:** Pocket all your designated balls (solid/striped) and finish with the 8-ball. 46 | - **Controls:** 47 | - Drag and aim with the mouse. 48 | - Release to shoot. 49 | 50 | ## 📜 License 51 | 52 | This project is licensed under the **MIT License**. 53 | 54 | ## 📬 Contact 55 | 56 | For suggestions or contributions, reach out at [afzalimdad9@gmail.com](mailto:afzalimdad9@gmail.com) or create an issue. 57 | 58 | --- 59 | 60 | ✨ *Enjoy playing pool in your browser!* 🎱 61 | -------------------------------------------------------------------------------- /assets/fonts/Font.fnt: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /assets/src/16boot.js: -------------------------------------------------------------------------------- 1 | var _parent;_parent="mygame";var game=new Phaser.Game(1920,1080,Phaser.CANVAS,_parent,{},!0),projectInfo=new Object;Sound.on=!0,projectInfo.alertSent=!1,projectInfo.tutorialPlayed=!1;var bootState={init:function(){window.famobi_analytics.trackScreen("SCREEN_SPLASH");Math.min(fenster.innerWidth,document.documentElement.clientWidth),Math.min(fenster.innerHeight,document.documentElement.clientHeight);document.getElementsByTagName("body")[0].style.backgroundColor="black",document.getElementsByTagName("body")[0].style.backgroundImage="url(assets/img/bgLarge.png)",document.getElementsByTagName("body")[0].style.backgroundPosition="center",document.getElementsByTagName("body")[0].style.backgroundSize="cover",document.getElementsByTagName("body")[0].style.margin=0,document.getElementsByTagName("body")[0].style.padding=0,document.getElementById("mygame").style.maxWidth="100%",document.getElementById("mygame").style.maxHeight="100%",game.device.desktop?game.device.firefox?(document.getElementsByTagName("body")[0].style.margin=0,document.getElementsByTagName("body")[0].style.padding=0,document.getElementById("mygame").style.width="99vw",document.getElementById("mygame").style.height="99vh",document.getElementById("mygame").style.margin=0):game.scale.pageAlignHorizontally=!0:document.getElementById("mygame").style.minHeight="100%",game.time.advancedTiming=!0,game.scale.windowConstraints.bottom="visual",game.scale.pageAlignVertically=!0,game.scale.scaleMode=Phaser.ScaleManager.SHOW_ALL,game.input.maxPointers=1,game.stage.disableVisibilityChange=famobi.hasFeature("external_focus")},preload:function(){this.load.image("title","assets/img/title.png"),this.load.image("rack","assets/img/rack.png"),this.load.image("loaderBase","assets/img/loaderBase.png"),this.load.image("loaderFill","assets/img/loaderFill.png"),this.load.image("loaderHighlight","assets/img/loaderHighlight.png")},create:function(){game.state.start("load")}};game.state.add("load",loadState),game.state.add("mainMenu",menuState),game.state.add("play",playState),game.state.add("boot",bootState),game.state.start("boot"); -------------------------------------------------------------------------------- /assets/src/03contactListener.js: -------------------------------------------------------------------------------- 1 | function onContact(e){var t,o=playState.gameInfo,a=e,l=a.ball,i=new Object;(i.position=l.position,i.targetPosition=a.target.position,i.velocity=a.ballVelocity,i.collisionType=a.collisionType,i.screw=l.screw,"ball"==a.collisionType&&(i.target=a.target,i.targetVelocity=a.targetVelocity,i.deltaScrew=a.deltaScrew),i.type=a.collisionType,"ball"==a.collisionType)&&(l.contactArray.push(i),0==o.trial&&((t=i.velocity.minus(i.targetVelocity).magnitude/6e3)>1&&(t=1),Sound.Play("ballHit",t)));"line"!=a.collisionType&&"vertex"!=a.collisionType||(l.contactArray.push(i),0==o.trial&&((t=a.normalVelocity.magnitude/3e3)>2&&(t=2),Sound.Play("cushionHit",t)));"pocket"==a.collisionType&&(l.active=!1,l.velocity=new Vector2D(0,0),l.contactArray.push(i),0==o.trial&&(playPocketSound(a),playPocketAnimation(a),projectInfo.tutorial||awardBonuses(a)),0==l.id?o.scratched=!0:o.ballsRemaining--)}function playPocketSound(e){var t=e.speed/5e3;t>1.5&&(t=1.5),t<.3&&(t=.3),Sound.Play("pocketHit",t)}function awardBonuses(e){var t=playState.gameInfo;if(0!=e.ball.id){var o=e.target;t.numBalls--,t.pottedBallArray.push(e.ball.id),checkLevelComplete(),t.ballPotted=!0,1==projectInfo.mode&&"p1"==t.turn&&(createBonusText(0,String(10*t.multiplier),"font6",o.dropPosition.x*t.physScale,o.dropPosition.y*t.physScale,56,!1),game.time.events.add(1.5*Phaser.Timer.SECOND,(function(){if(projectInfo.score+=10*t.multiplier,projectInfo.score>t.bestScore){t.bestScore=projectInfo.score;try{window.famobi.localStorage.setItem("bestScore",t.bestScore)}catch(e){}}t.multiplier++,t.multiplierText.text="x"+t.multiplier;var e=game.add.tween(t.multiplierText);e.from({size:42},2e3),e.start()}),this))}else t.fouled=!0}function checkLevelComplete(){playState.gameInfo.numBalls<=1&&(projectInfo.levelComplete=!0)}function playPocketAnimation(e){var t=playState.gameInfo;if(0==t.trial){var o=e.ball,a=e.target,l=e.speed;o.pocketTweenComplete=!1,0!=o.id?(o.shadow.parent.removeChild(o.shadow),o.shadow=null):o.shadow.visible=!1;var i=.1;l<5e3&&(i=.2),l<3e3&&(i=.3),l<2e3&&(i=.4),l<1e3&&(i=.5),i*=300;var n=game.add.tween(o.mc);n.to({x:a.dropPosition.x*t.physScale,y:a.dropPosition.y*t.physScale},i),n.onComplete.add((function(){var e=o.mc.x,a=o.mc.y;t.ballCanvas.removeChild(o.mc),t.tunnelCanvas.addChild(o.mc),o.mc.x=e,o.mc.y=a,c.start()}),this),n.start();var c=game.add.tween(o.mc);c.to({x:.7*a.dropPosition.x*t.physScale,y:.7*a.dropPosition.y*t.physScale},1.2*i,Phaser.Easing.Linear.In),0!=o.id?c.onComplete.add((function(){!function(e){0!=e.id&&(t.tunnelCanvas.removeChild(e.mc),e.pocketTweenComplete=!0)}(o)}),this):c.onComplete.add((function(){t.tunnelCanvas.removeChild(o.mc),t.ballCanvas.addChild(o.mc),o.pocketTweenComplete=!0,o.mc.visible=!1}),this)}} -------------------------------------------------------------------------------- /html5games/images/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/src/05levelData.js: -------------------------------------------------------------------------------- 1 | var setBallPositions=function(a){var l=new Array,i=15e3*a.adjustmentScale,n=.05+.05*Math.random(),s=1+(.05+.05*Math.random()),e=1.732+n,b=projectInfo.level;switch(b>a.numLevels&&(b=a.numLevels),1==projectInfo.tutorial&&(b=100),b=15){case 1:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[3]=new Point(i+e*a.ballRadius,-a.ballRadius*s);break;case 2:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[3]=new Point(i+e*a.ballRadius,-a.ballRadius*s),l[4]=new Point(i+2*e*a.ballRadius,0);break;case 3:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[3]=new Point(i+e*a.ballRadius,-a.ballRadius*s),l[4]=new Point(i+2*e*a.ballRadius,2*a.ballRadius*s),l[5]=new Point(i+2*e*a.ballRadius,-2*a.ballRadius*s),l[6]=new Point(i+2*e*a.ballRadius,0);break;case 4:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[3]=new Point(i+e*a.ballRadius,-a.ballRadius*s),l[6]=new Point(i+2*e*a.ballRadius,0),l[4]=new Point(i+2*e*a.ballRadius,2*a.ballRadius*s),l[5]=new Point(i+2*e*a.ballRadius,-2*a.ballRadius*s),l[7]=new Point(i+3*e*a.ballRadius,-a.ballRadius*s),l[8]=new Point(i+3*e*a.ballRadius,a.ballRadius*s);break;case 5:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[3]=new Point(i+e*a.ballRadius,-a.ballRadius*s),l[9]=new Point(i+2*e*a.ballRadius,0),l[4]=new Point(i+2*e*a.ballRadius,2*a.ballRadius*s),l[5]=new Point(i+2*e*a.ballRadius,-2*a.ballRadius*s),l[6]=new Point(i+3*e*a.ballRadius,a.ballRadius*s),l[7]=new Point(i+3*e*a.ballRadius,-a.ballRadius*s),l[8]=new Point(i+4*e*a.ballRadius,0);break;case 6:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[3]=new Point(i+e*a.ballRadius,-a.ballRadius*s),l[9]=new Point(i+2*e*a.ballRadius,0),l[4]=new Point(i+2*e*a.ballRadius,2*a.ballRadius*s),l[5]=new Point(i+2*e*a.ballRadius,-2*a.ballRadius*s),l[6]=new Point(i+3*e*a.ballRadius,a.ballRadius*s),l[7]=new Point(i+3*e*a.ballRadius,-a.ballRadius*s),l[8]=new Point(i+4*e*a.ballRadius,0);break;case 15:l[0]=new Point(-i,0),l[1]=new Point(i,0),l[2]=new Point(i+e*a.ballRadius,a.ballRadius*s),l[15]=new Point(i+e*a.ballRadius,-a.ballRadius*s),l[8]=new Point(i+2*e*a.ballRadius,0),l[5]=new Point(i+2*e*a.ballRadius,2*a.ballRadius*s),l[10]=new Point(i+2*e*a.ballRadius,-2*a.ballRadius*s),l[7]=new Point(i+3*e*a.ballRadius,1*a.ballRadius*s),l[4]=new Point(i+3*e*a.ballRadius,3*a.ballRadius*s),l[9]=new Point(i+3*e*a.ballRadius,-1*a.ballRadius*s),l[6]=new Point(i+3*e*a.ballRadius,-3*a.ballRadius*s),l[11]=new Point(i+4*e*a.ballRadius,0),l[12]=new Point(i+4*e*a.ballRadius,2*a.ballRadius*s),l[13]=new Point(i+4*e*a.ballRadius,-2*a.ballRadius*s),l[14]=new Point(i+4*e*a.ballRadius,4*a.ballRadius*s),l[3]=new Point(i+4*e*a.ballRadius,-4*a.ballRadius*s);break;case 100:l[0]=new Point(-i,0),l[1]=new Point(i+1e4,-1e4);break}return l}; -------------------------------------------------------------------------------- /assets/src/02Ball.js: -------------------------------------------------------------------------------- 1 | var Ball=function(t,s){var h;this.ballRotation=new Array(1,0,0,0),this.rX=0,this.rY=0,this.rZ=0,this.circRad=0,this.ballCanvas,this.ball,this.canvas,this.spot,this.spotHolder,this._mask,this.shading,this.highlightCanvas,this.highlight,this.ballColor,this.ballType,this.circRad=t,s<=8?(this.ballType=0,h="solidsSpriteSheet"):(this.ballType=1,h="ballSpriteSheet"+String(s)),Phaser.Group.call(this,game,this,"ball"),this.sprite=new Phaser.Sprite(game,0,0,h),this.sprite.width=2*this.circRad,this.sprite.height=2*this.circRad,this.sprite.anchor=new Phaser.Point(.5,.5),this.addChild(this.sprite),1==this.ballType||(this.sprite.frame=s),this.spotHolder=new Phaser.Group(game,this,"spotHolder"),this.spot=new Phaser.Sprite(game,0,0,"spotSpriteSheet"),this.spot.anchor=new Phaser.Point(.5,.5),this.spotHolder.addChild(this.spot),this.spot.frame=s,this.spot.alpha=1,this.shade=new Phaser.Sprite(game,0,0,"shade"),this.addChild(this.shade),this.shade.anchor=new Point(.5,.5),this.shade.width=2.1*t,this.shade.height=2.1*t,this.updateRotation(10*Math.random()-5,10*Math.random()-5,10*Math.random()-5)};Ball.prototype=Object.create(Phaser.Group.prototype),Ball.prototype.constructor=Ball,Ball.prototype.updateRotation=function(t,s,h){var i=-t,a=h,o=s,r=Math.sqrt(i*i+a*a+o*o);r>.01&&(this.ballRotation=this.rotateQuat(this.ballRotation,a/r,i/r,o/r,r/this.circRad),this.ballRotation=this.normalize(this.ballRotation),this.renderBall(this.ballRotation))},Ball.prototype.renderBall=function(t){var s=t[0],h=t[1],i=t[2],a=t[3],o=Math.atan2(2*s*a-2*h*i,1-2*s*s-2*i*i)+Math.PI,r=Math.asin(2*h*s+2*i*a)+Math.PI,e=Math.atan2(2*h*a-2*s*i,1-2*h*h-2*i*i)+Math.PI,l=h*s+i*a;if(!(l>.499||l<-.499)){if(this.angle=180/Math.PI*o,this.shade.angle=-this.angle,1==this.ballType){var p=(r-.5*Math.PI)/Math.PI;this.sprite.frame=41-Math.round(41*p)}this.spotHolder.x=0,this.spotHolder.y=0,this.spotHolder.angle=0,this.spot.x=0,this.spot.y=0,this.spot.angle=0,this.spot.width=1*this.circRad,this.spot.height=1*this.circRad,r3*Math.PI/2?e>Math.PI/2&&e<3*Math.PI/2?(this.spotHolder.y=this.circRad*Math.cos(e)*Math.sin(r),this.spotHolder.x=this.circRad*Math.sin(e)):(this.spotHolder.y=-this.circRad*Math.cos(e)*Math.sin(r),this.spotHolder.x=-this.circRad*Math.sin(e)):e>Math.PI/2&&e<3*Math.PI/2?(this.spotHolder.y=-this.circRad*Math.cos(e)*Math.sin(r),this.spotHolder.x=-this.circRad*Math.sin(e)):(this.spotHolder.y=this.circRad*Math.cos(e)*Math.sin(r),this.spotHolder.x=this.circRad*Math.sin(e));var n=Math.sqrt(this.spotHolder.x*this.spotHolder.x+this.spotHolder.y*this.spotHolder.y)/this.circRad,d=Math.cos(n*Math.PI/2),c=Math.atan2(this.spotHolder.y,this.spotHolder.x);this.spotHolder.scale=new Point(1,d),this.spotHolder.angle=180/Math.PI*c+90,this.spot.angle=-this.spotHolder.angle,this.spot.alpha=d+.2}},Ball.prototype.rotateQuat=function(t,s,h,i,a){var o=Math.sqrt(s*s+h*h+i*i),r=s/o,e=h/o,l=i/o,p=Math.sin(.5*a),n=r*p,d=e*p,c=l*p,M=Math.cos(.5*a),P=t[0],y=t[1],H=t[2],R=t[3],g=P*M+y*c-H*d+R*n,b=-P*c+y*M+H*n+R*d,u=P*d-y*n+H*M+R*c,m=-P*n-y*d-H*c+R*M,w=new Array;return w[0]=g,w[1]=b,w[2]=u,w[3]=m,w},Ball.prototype.normalize=function(t){var s=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]),h=new Array;return h[0]=t[0]/s,h[1]=t[1]/s,h[2]=t[2]/s,h[3]=t[3]/s,h}; -------------------------------------------------------------------------------- /assets/src/06maths.js: -------------------------------------------------------------------------------- 1 | var Maths=function(){},Point=function(t,e){this.x=t,this.y=e};Point.interpolate=function(t,e,n){var r=Maths.fixNumber((1-n)*t.x+n*e.x),i=Maths.fixNumber((1-n)*t.y+n*e.y);return new Point(r,i)},Point.prototype.equals=function(t){return this.x==t.x&&this.y==t.y},Maths.lineIntersectLine2=function(t,e,n,r){var i,x,a,u;if(t.x==e.x&&t.y==e.y||n.x==r.x&&n.y==r.y)return null;var s=new Point(e.x-t.x,e.y-t.y),y=new Point(n.x-t.x,n.y-t.y),f=new Point(r.x-t.x,r.y-t.y);return i=Maths.fixNumber(Math.sqrt(s.x*s.x+s.y*s.y)),x=Maths.fixNumber(s.x/i),a=Maths.fixNumber(s.y/i),__c=new Point(y.x*x+y.y*a,y.y*x-y.x*a),__d=new Point(f.x*x+f.y*a,f.y*x-f.x*a),__c.y<0&&__d.y<0||__c.y>=0&&__d.y>=0||(u=Maths.fixNumber(__d.x+(__c.x-__d.x)*__d.y/(__d.y-__c.y)))<0||u>i?null:new Point(t.x+u*x,t.y+u*a)},Maths.lineIntersectLine=function(t,e,n,r,i){var x,a,u,s,y,f,o;a=e.y-t.y,s=t.x-e.x,f=e.x*t.y-t.x*e.y,u=r.y-n.y,y=n.x-r.x,o=r.x*n.y-n.x*r.y;var h=a*y-u*s;if(0==h)return null;if((x=new Point).x=(s*o-y*f)/h,x.y=(u*f-a*o)/h,x.x=Maths.fixNumber(x.x),x.y=Maths.fixNumber(x.y),1){if((x.x-t.x)*(x.x-e.x)>0||(x.y-t.y)*(x.y-e.y)>0||(x.x-n.x)*(x.x-r.x)>0||(x.y-n.y)*(x.y-r.y)>0)return null}return x},Maths.lineIntersectCircle2=function(t,e,n,r){var i=new Object;i.inside=!1,i.tangent=!1,i.intersects=!1,i.enter=null,i.exit=null;var x=new Vector2D(t.x,t.y),a=new Vector2D(e.x,e.y),u=new Vector2D(n.x,n.y),s=a.minus(x),y=x.minus(u),f=s.dot(s),o=2*y.dot(s),h=o*o-4*f*(y.dot(y)-r*r);if(h<0)return i;if(0==(h=Maths.fixNumber(Math.sqrt(h))))return i.tangent=!0,i;var c=Maths.fixNumber((-o-h)/(2*f)),M=Maths.fixNumber((-o+h)/(2*f));return c>1&&M>1||c<0&&M<0?i:c<0&&M>1?(i.inside=!0,i):c>=0&&c<=1?(i.enter=Point.interpolate(t,e,M),i.enter=new Point(Maths.fixNumber(i.enter.x),Maths.fixNumber(i.enter.y)),i.intersects=!0,i):M>=0&&M<=1?(i.exit=Point.interpolate(t,e,c),i.exit=new Point(Maths.fixNumber(i.exit.x),Maths.fixNumber(i.exit.y)),i.intersects=!0,i):i},Maths.circleIntersectCircle=function(t,e,n,r,i,x){var a=new Object;if(n<0||x<0)return a=null;var u=x,s=n,y=Math.sqrt((t-r)*(t-r)+(e-i)*(e-i));if(y>n+x)return a=null;var f=(s*s+y*y-u*u)/(2*y),o=Math.sqrt(s*s-f*f);return a.x3=(r-t)*f/y+(i-e)*o/y+t,a.y3=(i-e)*f/y-(r-t)*o/y+e,a.x4=(r-t)*f/y-(i-e)*o/y+t,a.y4=(i-e)*f/y+(r-t)*o/y+e,a},Maths.lineIntersectCircle=function(t,e,n,r){var i=new Object;i.inside=!1,i.tangent=!1,i.intersects=!1,i.enter=null,i.exit=null;var x=(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y),a=2*((e.x-t.x)*(t.x-n.x)+(e.y-t.y)*(t.y-n.y)),u=n.x*n.x+n.y*n.y+t.x*t.x+t.y*t.y-2*(n.x*t.x+n.y*t.y)-r*r,s=Maths.fixNumber(a*a-4*x*u);if(s<=0)i.inside=!1;else{var y=Maths.fixNumber(Math.sqrt(s)),f=Maths.fixNumber((-a+y)/(2*x)),o=Maths.fixNumber((-a-y)/(2*x));(f<0||f>1)&&(o<0||o>1)?i.inside=!(f<0&&o<0||f>1&&o>1):(0<=o&&o<=1&&(i.enter=Point.interpolate(t,e,o),i.enter=new Point(Maths.fixNumber(i.enter.x),Maths.fixNumber(i.enter.y))),0<=f&&f<=1&&(i.exit=Point.interpolate(t,e,f),i.exit=new Point(Maths.fixNumber(i.exit.x),Maths.fixNumber(i.exit.y))),i.intersects=!0,null!=i.exit&&null!=i.enter&&i.exit.equals(i.enter)&&(i.tangent=!0))}return i},Maths.findBearing=function(t,e){var n=180/Math.PI*Math.atan2(e,t);return Maths.fixNumber(n)},Maths.angleDiff=function(t,e){var n=Maths.wrapValue(t+180-e)-180;return Maths.fixNumber(n)},Maths.wrapValue=function(t){return t>360&&(t-=360),t<0&&(t+=360),t},Maths.wrapInfinite=function(t){},Maths.fixNumber=function(t){return isNaN(Number(t))?0:Math.round(1e4*Number(t))/1e4},Maths.createVectorFrom2Points=function(t,e){return new Vector2D(e.x-t.x,e.y-t.y)},Maths.checkObjectsConverging=function(t,e,n,r){var i=r.minus(n),x=e.minus(t).normalize();return i.angleBetween(x)>90}; -------------------------------------------------------------------------------- /assets/src/07vector2d.js: -------------------------------------------------------------------------------- 1 | var Vector2D=function(t,e){this.xValue=Maths.fixNumber(t),this.yValue=Maths.fixNumber(e)};Vector2D.prototype={get x(){return this.xValue},set x(t){this.xValue=Maths.fixNumber(t)},get y(){return this.yValue},set y(t){this.yValue=Maths.fixNumber(t)},get angle(){return Maths.fixNumber(Math.atan2(this.yValue,this.xValue)*(180/Math.PI))},set angle(t){var e=0;isNaN(Number(t))||(e=Number(t)*(Math.PI/180));var a=Math.sqrt(Math.pow(this.xValue,2)+Math.pow(this.yValue,2));this.xValue=Maths.fixNumber(a*Math.cos(e)),this.yValue=Maths.fixNumber(a*Math.sin(e))},get magnitude(){return Maths.fixNumber(Math.sqrt(this.xValue*this.xValue+this.yValue*this.yValue))},get magnitudeSquared(){return Maths.fixNumber(this.xValue*this.xValue+this.yValue*this.yValue)},set magnitude(t){isNaN(Number(t))&&(this.xValue=this.yValue=0);var e=Math.sqrt(Math.pow(this.xValue,2)+Math.pow(this.yValue,2));0=e.angleBetweenCos(a)&&(u*=-1),e=e.rotate(u)}return e},Vector2D.prototype.dot=function(t){return t instanceof Vector2D?Maths.fixNumber(this.xValue*t.xValue+this.yValue*t.yValue):0},Vector2D.prototype.cross=function(t){return t instanceof Vector2D?Math.abs(Maths.fixNumber(this.xValue*t.yValue-this.yValue*t.xValue)):0},Vector2D.prototype.angleBetween=function(t){return t instanceof Vector2D?Maths.fixNumber(Math.acos(this.dot(t)/(this.magnitude*t.magnitude))*(180/Math.PI)):0},Vector2D.prototype.angleBetweenSin=function(t){return t instanceof Vector2D?Maths.fixNumber(this.cross(t)/(this.magnitude*t.magnitude)):0},Vector2D.prototype.angleBetweenCos=function(t){return t instanceof Vector2D?Maths.fixNumber(this.dot(t)/(this.magnitude*t.magnitude)):0},Vector2D.prototype.swap=function(t){if(t instanceof Vector2D){var e=this.xValue,a=this.yValue;this.xValue=t.xValue,this.yValue=t.yValue,t.xValue=e,t.yValue=a}return this},Vector2D.prototype.getRightNormal=function(){return new Vector2D(this.yValue,-this.xValue)},Vector2D.prototype.getLeftNormal=function(){return new Vector2D(-this.yValue,this.xValue)},Vector2D.prototype.isNormalTo=function(t){return t instanceof Vector2D&&0===this.dot(t)},Vector2D.prototype.isEqualTo=function(t){return t instanceof Vector2D&&this.xValue===t.xValue&&this.yValue===t.yValue}; -------------------------------------------------------------------------------- /html5games/gameapi/famobi_analytics_v1.js: -------------------------------------------------------------------------------- 1 | !function(E,e){var t={stats:{},events:[],currentScreen:"",pageTitle:"",trackStats:function(E,e,n){return new Promise((function(r,S){var T={},a={};"string"==typeof E&&(a[E]=e);if(!function(){for(var e in a){if(!("string"==typeof E&&E.length&&E.length<=42&&E.match(/^[a-z\_0-9]+$/)))return!1}return!0}())return S("trackStats(): invalid params "+JSON.stringify(E,e)),!1;var i=function(E,e){if("string"==typeof E&&E.length)return E in t.stats&&null==e?delete t.stats[E]:void 0!==e&&e&&(t.stats[E]=e),!0;throw"trackStats(): key is not a string or an Object";return!1};if(E&&"object"==typeof E){for(var L in E)i(L,e=E[L]);T=E}else i(E,e),T[E]=e;famobi.hasOwnProperty("adapters")&&famobi.adapters.run("analytics","trackStats",E,e,n),r(T)}))},getStats:function(){return new Promise((function(E,e){E(t.stats)}))},trackEvent:function(E,e){return new Promise((function(n,r){if(void 0===t[E])return r("trackEvent(): unknown event '"+E+"'"),!1;if("object"!=typeof(e=e||{})&&null!==e)return r("trackEvent(): second parameter needs to be an object"),!1;if(!function(){var t={levelName:"",reason:["timeout","dead","wrong_answer","quit","draw"],levelScore:-0,liveScore:-0,totalScore:-0,bgmVolume:0,sfxVolume:0},n={EVENT_LEVELFAIL:["levelName","reason"],EVENT_LEVELRESTART:["levelName"],EVENT_LEVELSTART:["levelName"],EVENT_LEVELSUCCESS:["levelName"],EVENT_LEVELSCORE:["levelName","levelScore"],EVENT_LIVESCORE:["liveScore"],EVENT_TOTALSCORE:["totalScore"],EVENT_VOLUMECHANGE:["bgmVolume","sfxVolume"],EVENT_CUSTOM:[]};if(void 0!==n[E]&&0===Object.keys(e).length)return!1;if(void 0===n[E])return!0;for(var r=0,S="",T=null;r-1){if(!window.famobi.hasFeature("highscores"))return n(E,e);switch(E){case"EVENT_LEVELSCORE":famobi.submitHighscore(e.levelName,e.levelScore,!0);break;case"EVENT_TOTALSCORE":famobi.submitHighscore("TOTAL",e.totalScore,!0);break;default:}return Promise.all([]).then((function(){n(E,e)}))}return t.TRIGGER_LEVELSUCCESS.indexOf(E)>-1?Promise.all([window.famobi.showAd()]).then((function(){n(E,e)})):t.TRIGGER_LEVELFAIL.indexOf(E)>-1?"quit"==e.reason?n(E,e):Promise.all([window.famobi.showAd()]).then((function(){n(E,e)})):t.TRIGGER_LEVELSTART.indexOf(E)>-1?Promise.all([]).then((function(){n(E,e)})):t.TRIGGER_LIVESCORE.indexOf(E)>-1?(famobi.sendLiveScore(e.liveScore),n(E,e)):n(E,e)}))},getEvents:function(){return new Promise((function(E,e){E(t.events)}))},EVENT_CUSTOM:"EVENT_CUSTOM",EVENT_LEVELFAIL:"EVENT_LEVELFAIL",EVENT_LEVELRESTART:"EVENT_LEVELRESTART",EVENT_LEVELSTART:"EVENT_LEVELSTART",EVENT_LEVELSUCCESS:"EVENT_LEVELSUCCESS",EVENT_LIVESCORE:"EVENT_LIVESCORE",EVENT_LEVELSCORE:"EVENT_LEVELSCORE",EVENT_TOTALSCORE:"EVENT_TOTALSCORE",EVENT_TUTORIALCOMPLETED:"EVENT_TUTORIALCOMPLETED",EVENT_TUTORIALSKIPPED:"EVENT_TUTORIALSKIPPED",EVENT_VOLUMECHANGE:"EVENT_VOLUMECHANGE",EVENT_PAUSE:"EVENT_PAUSE",EVENT_RESUME:"EVENT_RESUME",trackScreen:function(E,e){return new Promise((function(n,r){return void 0===t[E]?(r("trackScreen(): unknown screen '"+E+"'"),!1):!e&&E.indexOf(["SCREEN_OTHER"])>-1?(r("trackScreen(): screen '"+E+"' requires param 'pageTitle'"),!1):e&&"string"!=typeof e?(r("trackScreen(): required param 'pageTitle' has to be a non-empty string"),!1):(t.currentScreen=E,t.pageTitle=e,famobi.hasOwnProperty("adapters")&&famobi.adapters.run("analytics","trackScreen",E,e),void n(E,e))}))},getScreen:function(){return t.currentScreen},getPageTitle:function(){return t.pageTitle},SCREEN_OTHER:"SCREEN_OTHER",SCREEN_BONUS:"SCREEN_BONUS",SCREEN_CHARACTER:"SCREEN_CHARACTER",SCREEN_CREDITS:"SCREEN_CREDITS",SCREEN_GAMERESULT:"SCREEN_GAMERESULT",SCREEN_HELP:"SCREEN_HELP",SCREEN_HOME:"SCREEN_HOME",SCREEN_LEVEL:"SCREEN_LEVEL",SCREEN_LEVELINTRO:"SCREEN_LEVELINTRO",SCREEN_LEVELLOADING:"SCREEN_LEVELLOADING",SCREEN_LEVELRESULT:"SCREEN_LEVELRESULT",SCREEN_LEVELSELECT:"SCREEN_LEVELSELECT",SCREEN_PAUSE:"SCREEN_PAUSE",SCREEN_SETTINGS:"SCREEN_SETTINGS",SCREEN_SHOP:"SCREEN_SHOP",SCREEN_SPLASH:"SCREEN_SPLASH",SCREEN_TUTORIAL:"SCREEN_TUTORIAL",TRIGGER_SCORE:["EVENT_LEVELSCORE","EVENT_TOTALSCORE"],TRIGGER_LIVESCORE:["EVENT_LIVESCORE"],TRIGGER_LEVELFAIL:["EVENT_LEVELFAIL"],TRIGGER_LEVELSUCCESS:["EVENT_LEVELSUCCESS"],TRIGGER_LEVELSTART:["EVENT_LEVELSTART","EVENT_LEVELRESTART"]};e.famobi_analytics=t}(0,window); -------------------------------------------------------------------------------- /sdk_interface.js: -------------------------------------------------------------------------------- 1 | const SDK_LOG=e=>{if(!SDK_INTERFACE.getDebugLevel())return},SDK_ERROR=e=>{if(!SDK_INTERFACE.getDebugLevel())return},SDK_INTERFACE_SETTINGS={isProd:!0,debugLevel:1,forceMockObject:!0,interstitial:{enabled:!0,initial:!1,preload:250,retry:2e3,timout:250,cooldown:0},rewarded:{enabled:!1,preload:250,retry:2e3,timout:250,reward:!0},externalFiles:["crazygames-sdk-v2.js"],features:{auto_quality:!1,copyright:!0,credits:!0,external_achievements:!1,external_leaderboard:!1,external_mute:!1,external_pause:!1,external_start:!1,forced_mode:!1,leaderboard:!1,multiplayer:!1,multiplayer_local:!0,skip_title:!1,skip_tutorial:!1,revive:!1,rewarded:!1},forced_mode:{},aid:"A1234-5",name:"Crazygames",branding_url:"",branding_image:"logo",show_splash:!1,menuless:!0},SDK_INTERFACE_CUSTOM_SETTINGS={useBanner:!1,lastRefresh:0,interval:90,remainingBanners:60,skipFirstInterstitial:!0,elementId:"banner-container",bannerConfig:{portrait:{show:!0,align:"bottom",width:"100%",height:"60",getPixel(){return`${this.height}px`},getDimensions(){return{width:this.width,height:this.getPixel()}}},landscape:{show:!0,align:"bottom",width:"100%",height:"60",getPixel(){return`${this.height}px`},getDimensions(){return{width:this.width,height:this.getPixel()}}}},margin:"1px"},SDK_INTERFACE_OVERRIDES={famobi:{showInterstitialAd:function(e,t){let n={};return"object"==typeof e?n=e:(n.callback="function"==typeof e?e:"function"==typeof t?t:void 0,n.eventId="string"==typeof e?e:"string"==typeof t?t:void 0),SDK_LOG(),"function"==typeof n.callback&&n.callback(),Promise.resolve()}},famobi_analytics:{trackEvent:function(e,t){return SDK_LOG(0),new Promise((function(n,i){switch(e){case"EVENT_LEVELSUCCESS":case"EVENT_LEVELFAIL":window.CrazyGames.SDK.game.gameplayStop(),SDK_BANNER&&SDK_BANNER.hide(),t.reason;break;case"EVENT_LEVELRESTART":case"EVENT_LEVELSTART":return window.CrazyGames.SDK.game.gameplayStart(),SDK_BANNER?.show?.(),famobi.showAd((function(){n()}));break;case"EVENT_PAUSE":window.CrazyGames.SDK.game.gameplayStop();break;case"EVENT_RESUME":window.CrazyGames.SDK.game.gameplayStart();break;default:}return n(e,t)}))}}},SDK_INTERFACE_PRELOAD_AD=function(e){return new Promise((function(e,t){e()}))},SDK_INTERFACE_SHOW_AD=function(){return new Promise((function(e,t){if(SDK_INTERFACE_CUSTOM_SETTINGS.skipFirstInterstitial)return SDK_INTERFACE_CUSTOM_SETTINGS.skipFirstInterstitial=!1,void e();SDK_LOG();const n={adStarted:()=>{SDK_LOG()},adFinished:()=>{SDK_LOG(),e()},adError:t=>{SDK_LOG(),e()}};window.CrazyGames.SDK.ad.requestAd("midgame",n)}))},SDK_INTERFACE_REWARDED_AD=function(){return new Promise((function(e,t){SDK_LOG();const n={adStarted:()=>{SDK_LOG()},adFinished:()=>{SDK_LOG(),e(!0)},adError:t=>{SDK_LOG(),SDK_INTERFACE.getDebugLevel(),e(!1)}};window.CrazyGames.SDK.ad.requestAd("rewarded",n)}))};var SDK_BANNER=null;const SDK_INTERFACE_BANNER=function(){let e=SDK_INTERFACE_CUSTOM_SETTINGS.bannerConfig[famobi.getOrientation()],t=function(e="bottom"){switch(e){case"top":return["center","flex-start"];default:case"bottom":return["center","flex-end"];case"left":return["flex-start","center"];case"right":return["flex-end","center"]}}(e.align);const n=document.createElement("div");n.style.cssText=`\n\t\tposition: absolute;\n\t\ttop: 0px;\n\t\tleft: 0px;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tz-index: 1;\n\n\t\tpointer-events: none;\n\n\t\tdisplay: flex;\n\t\tjustify-content: ${t[0]};\n\t\talign-items: ${t[1]};\n\t`,document.body.appendChild(n);let i=e.getDimensions();const a=document.createElement("div");a.style.cssText=`\n\t\twidth: ${i.width};\n\t\theight: ${i.height};\n\n\t\tmargin: ${SDK_INTERFACE_CUSTOM_SETTINGS.margin};\n\n\t\tdisplay: flex;\n\t\tjustify-content: ${t[0]};\n\t\talign-items: ${t[1]};\n\t`,a.id=SDK_INTERFACE_CUSTOM_SETTINGS.elementId||"banner-container",n.appendChild(a),this.banner=a,this.overlay=n,this.wasRequested=!1,this.visible=!1,SDK_LOG(),this.onOrientationChange=()=>{this.visible&&(this.hide(),this.show())},setInterval((()=>{SDK_INTERFACE_BANNER_AD(!1)}),6e4),this.show=function(){if(this.wasRequested&&SDK_INTERFACE_CUSTOM_SETTINGS.useBanner){SDK_INTERFACE_CUSTOM_SETTINGS.bannerConfig[famobi.getOrientation()].show&&setTimeout((()=>{window.famobi?.adapters&&famobi.setOffsets(0,0,60,0),this.visible=!0,this.overlay.style.display="flex",this.banner.style.display="flex"}),1e3)}},this.hide=function(){window.famobi?.adapters&&famobi.setOffsets(0,0,0,0),this.banner.style.display="none",this.visible=!1}},SDK_INTERFACE_BANNER_AD=function(e=!0){return new Promise((function(t,n){let i=!0;if(SDK_INTERFACE_CUSTOM_SETTINGS.useBanner||(i=!1),Date.now()/1e3-SDK_INTERFACE_CUSTOM_SETTINGS.lastRefresh{i?(SDK_LOG(),n()):(SDK_LOG(),null!=SDK_BANNER&&(SDK_BANNER.wasRequested=!0,e&&SDK_BANNER.hide()),t())}))}))},SDK_INTERFACE_MOCK_OBJECT=function(){return new Promise((function(e,t){e()}))},SDK_INTERFACE_INIT=function(){return new Promise((function(e,t){SDK_LOG();let n=!1,i=()=>{n||(SDK_LOG(),e(),n=!0)};setTimeout(i,5e3),SDK_INTERFACE_BANNER_AD().then((()=>{window.addEventListener("resize",(()=>{null!=SDK_BANNER&&SDK_BANNER.onOrientationChange()})),i()}),(()=>{SDK_LOG(),i()}))}))};SDK_INTERFACE.init(SDK_INTERFACE_SETTINGS); -------------------------------------------------------------------------------- /assets/src/12load.js: -------------------------------------------------------------------------------- 1 | var loadState=new Object;loadState.init=function(){this.loaderInfo=new Object;var e=this.loaderInfo;e.loaderProgress=0,game.scale.setResizeCallback(this.onResize,this),fenster.subscribeToOffsetUpdates((()=>{this.onResize()})),e.loaderCanvas=new Phaser.Group(game,game.stage,"loaderCanvas"),e.loaderCanvas.alpha=0,e.loaderCanvas.x=game.width/2,e.loaderCanvas.y=game.height/2,game.stage.addChild(e.loaderCanvas),e.title=new Phaser.Sprite(game,0,0,"title"),e.loaderCanvas.addChild(e.title),e.title.anchor=new Point(.5,.5),e.rack=new Phaser.Sprite(game,0,0,"rack"),e.loaderCanvas.addChild(e.rack),e.rack.anchor=new Point(.5,.5),e.loaderBase=new Phaser.Sprite(game,0,800,"loaderBase"),e.loaderBase.anchor=new Point(.5,0),e.loaderCanvas.addChild(e.loaderBase),e.loaderFill=new Phaser.Sprite(game,0,800,"loaderFill"),e.loaderFill.anchor=new Point(.5,0),e.loaderCanvas.addChild(e.loaderFill),e.graphics=game.add.graphics(0,0),e.graphics.beginFill(16777215),e.loaderFill.mask=e.graphics,e.loaderHighlight=new Phaser.Sprite(game,0,80,"loaderHighlight"),e.loaderHighlight.anchor=new Point(.5,0),e.loaderCanvas.addChild(e.loaderHighlight),e.progress=new Object,e.progress.val=0,this.resizeGame();game.add.tween(e.loaderCanvas).to({alpha:1},1e3,Phaser.Easing.Linear.None,!0,500)},loadState.resizeGame=function(e,s){var t=this.loaderInfo,a=(Math.min(fenster.innerWidth,document.documentElement.clientWidth),Math.min(fenster.innerHeight,document.documentElement.clientHeight));"portrait"==window.famobi.getOrientation()?(game.scale.setGameSize(1080,1920),t.title.y=-game.height/2*.5):(game.scale.setGameSize(1920,1080),t.title.y=-game.height/2*.6);String(Math.abs(a-document.getElementById("mygame").clientHeight)/2);t.loaderCanvas.x=game.width/2,t.loaderCanvas.y=game.height/2,t.loaderBase.y=.6*game.height/2,t.loaderFill.y=.6*game.height/2,t.loaderHighlight.y=.6*game.height/2,t.rack.y=game.height/2*.1,t.graphics.clear(),t.graphics.beginFill(16777215),t.graphics.drawRect(game.width/2-187.5,game.height/2+t.loaderBase.y+8,3.75*t.loaderProgress,30)},loadState.onResize=function(e,s){this.resizeGame(e,s)},loadState.preload=function(){this.load.spritesheet("muteButton","assets/img/muteButton.png",256,256),this.load.spritesheet("playButton","assets/img/playButton.png",256,256),this.load.spritesheet("playButton","assets/img/playButton.png",256,256),this.load.spritesheet("quitButton","assets/img/quitButton.png",256,256),this.load.spritesheet("replayButton","assets/img/replayButton.png",256,256),this.load.spritesheet("helpButton","assets/img/helpButton.png",256,256),this.load.spritesheet("statsButton","assets/img/statsButton.png",256,256),this.load.spritesheet("settingsButton","assets/img/settingsButton.png",256,256),this.load.spritesheet("menuButton","assets/img/menuButton.png",256,256),this.load.spritesheet("solidsSpriteSheet","assets/img/solidsSpriteSheet.png",48,48,9),this.load.spritesheet("ballSpriteSheet9","assets/img/ballSpriteSheet9.png",50,50,41),this.load.spritesheet("ballSpriteSheet10","assets/img/ballSpriteSheet10.png",50,50,41),this.load.spritesheet("ballSpriteSheet11","assets/img/ballSpriteSheet11.png",50,50,41),this.load.spritesheet("ballSpriteSheet12","assets/img/ballSpriteSheet12.png",50,50,41),this.load.spritesheet("ballSpriteSheet13","assets/img/ballSpriteSheet13.png",50,50,41),this.load.spritesheet("ballSpriteSheet14","assets/img/ballSpriteSheet14.png",50,50,41),this.load.spritesheet("ballSpriteSheet15","assets/img/ballSpriteSheet15.png",50,50,41),this.load.spritesheet("spotSpriteSheet","assets/img/spotSpriteSheet.png",38,38,16),this.load.spritesheet("bonusStarSpriteSheet","assets/img/bonusStar.png",59,67,1.5),this.load.spritesheet("mouseSprite","assets/img/mouseSprite.png",132,116),this.load.spritesheet("humanIcon","assets/img/humanIcon.png",256,256),this.load.spritesheet("aiIcon","assets/img/aiIcon.png",256,256),this.load.spritesheet("guiSolids","assets/img/guiSolids.png",102,102),this.load.spritesheet("guiStripes","assets/img/guiStripes.png",101,102),this.load.spritesheet("turnArrow","assets/img/turnArrow.png",128,128),this.load.spritesheet("pVpButton","assets/img/pVpButton.png",460,195),this.load.spritesheet("pVAIButton","assets/img/pVAIButton.png",460,195),this.load.spritesheet("aiLevel","assets/img/aiLevel.png",128,128),this.load.spritesheet("illegalContacts","assets/img/illegalContacts.png",345,137),this.load.spritesheet("illegalShots","assets/img/illegalShots.png",324,324),this.load.spritesheet("switch","assets/img/switch.png",152,55),this.load.spritesheet("plusButton","assets/img/plusButton.png",128,128),this.load.spritesheet("minusButton","assets/img/minusButton.png",128,128),this.load.atlas("marker","assets/img/marker.png","assets/img/marker.json"),game.load.bitmapFont("font1","assets/fonts/font1.png","assets/fonts/font1.fnt"),game.load.bitmapFont("font2","assets/fonts/font2.png","assets/fonts/font2.fnt"),game.load.bitmapFont("font3","assets/fonts/font3.png","assets/fonts/font3.fnt"),game.load.bitmapFont("font5","assets/fonts/font5.png","assets/fonts/font5.fnt"),game.load.bitmapFont("font6","assets/fonts/font6.png","assets/fonts/font6.fnt"),game.load.bitmapFont("font7","assets/fonts/Font.png","assets/fonts/Font.fnt"),this.load.image("more_games",window.famobi.getBrandingButtonImage()),this.load.image("pockets","assets/img/pockets.png"),this.load.image("cloth","assets/img/cloth.png"),this.load.image("tableTop","assets/img/tableTop.png"),this.load.image("shade","assets/img/shade.png"),this.load.image("shadow","assets/img/shadow.png"),this.load.image("cue","assets/img/cue.png"),this.load.image("cueShadow","assets/img/cueShadow.png"),this.load.image("bonusDisc","assets/img/bonusDisc.png"),this.load.image("powerBarBase","assets/img/powerBarBase.png"),this.load.image("powerBarTop","assets/img/powerBarTop.png"),this.load.image("powerBarBG","assets/img/powerBarBG.png"),this.load.image("bonusStar","assets/img/bonusStar2.png"),this.load.image("panel","assets/img/panel.png"),this.load.image("panel2","assets/img/panel2.png"),this.load.image("panel3","assets/img/panel3.png");let e=famobi.hasFeature("external_mute");this.load.image("panel4",e?"assets/img/panel4e.png":"assets/img/panel4d.png"),this.load.image("helpMouse","assets/img/helpMouse.png"),this.load.image("helpTouch","assets/img/helpTouch.png"),this.load.image("guiPanel1","assets/img/guiPanel1.png"),this.load.image("guiPanel2","assets/img/guiPanel2.png"),this.load.image("score","assets/img/score.png"),this.load.image("highScore","assets/img/highscore.png"),this.load.image("success","assets/img/success.png"),this.load.image("hand","assets/img/hand.png"),this.load.image("dottedLine","assets/img/dottedLine.png"),this.load.image("rackBG","assets/img/rackBG.png"),this.load.image("mover","assets/img/mover.png"),this.load.image("8ball","assets/img/8ball.png"),this.load.image("spinSetterSmall","assets/img/spinSetterLarge.png"),this.load.image("cueBallSpot","assets/img/cueBallSpot.png"),this.load.image("spinSetterZoom","assets/img/spinSetterZoom.png"),this.load.image("cueBallSpotZoom","assets/img/cueBallSpotZoom.png"),this.load.image("clockIcon","assets/img/clockIcon.png"),this.load.image("aiWin","assets/img/aiWin.png"),this.load.image("playerWin","assets/img/playerWin.png"),this.load.image("rosette","assets/img/rosette.png"),this.load.image("illegalBreak","assets/img/illegalBreak.png"),this.load.image("foulDisplay","assets/img/foulDisplay.png"),this.load.image("foulHighlight","assets/img/foulHighlight.png"),this.load.image("cross","assets/img/cross.png"),this.load.image("tick","assets/img/tick.png"),this.load.image("gameController","assets/img/gameController.png"),this.load.image("famobi","assets/img/famobi.png"),this.load.audio("ballHit",["assets/audio/ballHit2.wav","assets/audio/ballHit2.mp3"]),this.load.audio("cushionHit",["assets/audio/cushionHit.wav","assets/audio/cushionHit.mp3"]),this.load.audio("pocketHit",["assets/audio/pocketHit.wav","assets/audio/pocketHit.mp3"]),this.load.audio("cueHit",["assets/audio/cueHit.wav","assets/audio/cueHit.mp3"]),this.load.audio("shimmer",["assets/audio/shimmer.wav","assets/audio/shimmer.mp3"]),this.load.audio("ding",["assets/audio/ding.wav","assets/audio/ding.mp3"]),this.load.audio("cheer",["assets/audio/cheer.wav","assets/audio/cheer.mp3"]),game.load.onFileComplete.add(this.updateProgressBar,this)},loadState.updateProgressBar=function(){var e=this.loaderInfo;e.loaderProgress=game.load.progress,e.graphics.clear(),e.graphics.beginFill(16777215),e.graphics.drawRect(game.width/2-187.5,game.height/2+e.loaderBase.y+8,3.75*e.loaderProgress,30)},loadState.render=function(){},loadState.create=function(){var e=this.loaderInfo;function s(){projectInfo.levelComplete=!1,game.state.start("mainMenu")}game.time.events.add(2*Phaser.Timer.SECOND,(function(){game.add.tween(e.loaderCanvas).to({alpha:0},1e3,Phaser.Easing.Linear.None,!0).onComplete.add(s,this)}),this)},loadState.update=function(){},loadState.shutdown=function(){var e=this.loaderInfo;game.stage.removeChild(e.loaderCanvas),e.loaderCanvas=null,e=null}; -------------------------------------------------------------------------------- /assets/img/marker.json: -------------------------------------------------------------------------------- 1 | {"frames":[{"filename":"marker0025","frame":{"x":0,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0026","frame":{"x":935,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0027","frame":{"x":187,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0028","frame":{"x":187,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0029","frame":{"x":0,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0030","frame":{"x":187,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0031","frame":{"x":374,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0032","frame":{"x":374,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0033","frame":{"x":374,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0034","frame":{"x":0,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0035","frame":{"x":187,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0036","frame":{"x":374,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0037","frame":{"x":561,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0038","frame":{"x":561,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0039","frame":{"x":561,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0040","frame":{"x":561,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0041","frame":{"x":0,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0042","frame":{"x":187,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0043","frame":{"x":374,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0044","frame":{"x":561,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0045","frame":{"x":748,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0046","frame":{"x":748,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0047","frame":{"x":748,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0048","frame":{"x":748,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0049","frame":{"x":748,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0050","frame":{"x":0,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0051","frame":{"x":187,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0052","frame":{"x":374,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0053","frame":{"x":561,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0054","frame":{"x":748,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0055","frame":{"x":0,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0056","frame":{"x":935,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0057","frame":{"x":935,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0058","frame":{"x":935,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0059","frame":{"x":935,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0060","frame":{"x":935,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0001","frame":{"x":0,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0002","frame":{"x":187,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0003","frame":{"x":374,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0004","frame":{"x":561,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0005","frame":{"x":748,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0006","frame":{"x":935,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0007","frame":{"x":1122,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0008","frame":{"x":1122,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0009","frame":{"x":1122,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0010","frame":{"x":1122,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0011","frame":{"x":1122,"y":748,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0012","frame":{"x":1122,"y":935,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0013","frame":{"x":1122,"y":1122,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0014","frame":{"x":0,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0015","frame":{"x":187,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0016","frame":{"x":374,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0017","frame":{"x":561,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0018","frame":{"x":748,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0019","frame":{"x":935,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0020","frame":{"x":1122,"y":1309,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0021","frame":{"x":1309,"y":0,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0022","frame":{"x":1309,"y":187,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0023","frame":{"x":1309,"y":374,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}},{"filename":"marker0024","frame":{"x":1309,"y":561,"w":186,"h":186},"rotated":false,"trimmed":false,"spriteSourceSize":{"x":0,"y":0,"w":186,"h":186},"sourceSize":{"w":186,"h":186}}],"meta":{"app":"https://www.leshylabs.com/apps/sstool/","version":"Leshy SpriteSheet Tool v0.8.4","image":"marker.png","size":{"w":1495,"h":1495},"scale":1}} 2 | -------------------------------------------------------------------------------- /assets/src/04billiardPhysics.js: -------------------------------------------------------------------------------- 1 | function billiardPhysics(t,i,e,o,s,n){this.targetID=-1,this.omissionArray=new Array,this.ballArray=i,this.lineArray=e,this.vertexArray=o,this.pocketArray=s,this.simType=n,this.simType=0,this.contactEvent=t}billiardPhysics.prototype={set ballData(t){this.ballArray=t},set frameNumber(t){this.frame=t}},billiardPhysics.prototype.updatePhysics=function(){this.predictCollisions(),this.updateFriction()},billiardPhysics.prototype.predictCollisions=function(){var t=0,i=0;do{var e,o=1;s&&s.length;var s=new Array,n=Maths.fixNumber(1-t),r=0;0==this.simType&&(r=this.ballArray.length),1==this.simType&&(r=1),2==this.simType&&(r=-1==this.targetID?1:this.ballArray.length);for(var a=0;a0&&($=!0)}if(1==$&&1==m){var tt,it=new Point(c.position.x,c.position.y),et=new Point(y.x,y.y),ot=new Point(Z.position.x,Z.position.y);tt=Z.radius?Z.radius:this.pocketRadius;var st=Maths.lineIntersectCircle(it,et,ot,tt);if(1==st.intersects||1==st.inside){var nt,rt,at;if(null!=st.enter&&(nt=st.enter),null!=st.exit&&(nt=st.exit),1==st.intersects){rt=new Vector2D(nt.x,nt.y);var lt=Maths.createVectorFrom2Points(it,et),ct=Maths.createVectorFrom2Points(it,nt);at=Maths.fixNumber(t+ct.magnitude/lt.magnitude*n)}if(1==st.inside){var yt=Maths.createVectorFrom2Points(ot,it).normalize();rt=new Vector2D(ot.x,ot.y).plus(yt.times(tt)),at=t}at0&&this.resolveCollision(s);var pt=Maths.fixNumber(o-t);1!=this.simType&&this.moveBalls(pt),t=o,i++}while(s.length>0&&i<20)},billiardPhysics.prototype.resolveCollision=function(t){var i=playState.gameInfo;this.omissionArray=new Array,t.length;for(var e=0;e450&&(s.grip=0),d.lastCollisionObject=s,s.lastCollisionObject=d}if("line"==o.type){o.time,i.collisions++,(d=o.object).position=o.objectIntersectPoint;var m=o.target;this.omissionArray.push(d),d.ySpin+=-d.velocity.dot(m.direction)/100;d.ySpin>50&&(d.ySpin=50),d.ySpin<-50&&(d.ySpin=-50);a=m.normal.times(d.velocity.dot(m.normal)),l=m.direction.times(d.velocity.dot(m.direction));0==d.id&&(l=l.plus(m.direction.times(Maths.fixNumber(.2*d.english*d.velocity.magnitude))),d.english=Maths.fixNumber(.5*d.english),d.english>-.1&&d.english<.1&&(d.english=0)),d.velocity=a.times(-this.cushionRestitution).plus(l),0==this.simType&&a.magnitude>700&&(d.grip=0),d.lastCollisionObject=m,d.position=d.position.plus(m.normal.times(200)),0==d.id&&(d.deltaScrew=d.deltaScrew.times(.8))}if("vertex"==o.type){i.collisions++,(d=o.object).position=o.objectIntersectPoint;var v=o.target;this.omissionArray.push(d);var u;n=v.position.minus(d.position).normalize(),r=(u=new Vector2D(n.x,n.y)).getRightNormal(),a=u.times(d.velocity.dot(u)),l=r.times(d.velocity.dot(r));d.velocity=a.times(-this.cushionRestitution).plus(l),d.position=d.position.minus(u.times(200)),d.id,d.lastCollisionObject=v,d.lastVertex=v.name,0==d.id&&(d.deltaScrew=new Vector2D(0,0))}if("pocket"==o.type){var d;o.time,t.length,(d=o.object).position=o.objectIntersectPoint;o.target;this.omissionArray.push(d);var b=d.velocity.magnitude;d.hasOwnProperty("mc")}var g=new Object;g.collisionType=o.type,g.ball=d,g.target=o.target,g.ballVelocity=d.velocity,"ball"==o.type&&(g.targetVelocity=s.velocity,0==d.id&&(g.deltaScrew=d.deltaScrew)),"line"!=o.type&&"vertex"!=o.type||(g.normalVelocity=a),"pocket"==o.type&&(g.speed=b),this.sendContactEvent(g),"ball"==o.type&&((g=new Object).collisionType=o.type,g.ball=o.target,g.target=d,g.ballVelocity=o.target.velocity,g.targetVelocity=d.velocity,0==s.id&&(g.deltaScrew=o.target.deltaScrew),this.sendContactEvent(g))}t.length},billiardPhysics.prototype.sendContactEvent=function(t){this.contactEvent.dispatch(t)},billiardPhysics.prototype.moveBalls=function(t){for(var i=0;i0&&(i.deltaScrew=i.deltaScrew.times(.8),i.deltaScrew.magnitude<1&&(i.deltaScrew=new Vector2D(0,0))));var e=i.velocity.magnitude;e-=this.friction;var o=i.velocity.normalize();if(i.velocity=o.times(e),i.velocity.magnitude=.2&&(i.ySpin-=.2),i.ySpin<=-.2&&(i.ySpin+=.2),i.ySpin>=-.2&&i.ySpin<=.2&&(i.ySpin=0),0!=i.ySpin){var s=i.velocity.getLeftNormal().normalize().times(.3*i.ySpin*i.velocity.magnitude/800);i.velocity=i.velocity.plus(s)}}}; -------------------------------------------------------------------------------- /assets/fonts/font3.fnt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /assets/fonts/font1.fnt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /assets/fonts/font2.fnt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /assets/src/13mainMenu.js: -------------------------------------------------------------------------------- 1 | var menuState={init:function(){if(window.famobi_analytics.trackScreen("SCREEN_HOME"),this.menuInfo=new Object,game.scale.setResizeCallback(this.onResize,this),null==window.famobi.localStorage.getItem("guideOn")){projectInfo.guideOn=1;try{window.famobi.localStorage.setItem("guideOn",1)}catch(t){}}else projectInfo.guideOn=window.famobi.localStorage.getItem("guideOn");if(null==window.famobi.localStorage.getItem("aiRating")){projectInfo.aiRating=2;try{window.famobi.localStorage.setItem("aiRating",2)}catch(t){}}else projectInfo.aiRating=window.famobi.localStorage.getItem("aiRating");if(null==window.famobi.localStorage.getItem("bestScore")){projectInfo.bestScore=0;try{window.famobi.localStorage.setItem("bestScore",0)}catch(t){projectInfo.alertSent}}else projectInfo.bestScore=window.famobi.localStorage.getItem("bestScore");if(null==window.famobi.localStorage.getItem("numGames")){projectInfo.numGames=0;try{window.famobi.localStorage.setItem("numGames",0)}catch(t){projectInfo.alertSent}}else projectInfo.numGames=window.famobi.localStorage.getItem("numGames");if(null==window.famobi.localStorage.getItem("bestTime")){projectInfo.bestTime=0;try{window.famobi.localStorage.setItem("bestTime",0)}catch(t){projectInfo.alertSent}}else projectInfo.bestTime=window.famobi.localStorage.getItem("bestTime")},onResize:function(t,e){this.resizeGame(t,e)},create:function(){var t=this.menuInfo;this.resizeGame=function(e,n){Math.min(fenster.innerWidth,document.documentElement.clientWidth);var a=Math.min(fenster.innerHeight,document.documentElement.clientHeight);"portrait"==window.famobi.getOrientation()?(game.scale.setGameSize(1080,1920),t.playButton.x=0,t.playButton.y=game.height/2*.4,t.playButton.anchor=new Phaser.Point(.5,0),t.playButton.scale=new Point(.75,.75),t.statsButton.x=-150,t.statsButton.y=game.height/2*.4,t.statsButton.anchor=new Point(1,0),t.statsButton.scale=new Point(.5,.5),t.helpButton.x=150,t.helpButton.y=game.height/2*.4,t.helpButton.anchor=new Point(0,0),t.helpButton.scale=new Point(.5,.5),t.settingsButton.x=game.width/2-100,t.settingsButton.y=-game.height/2+100,t.settingsButton.anchor=new Point(1,0),t.settingsButton.scale=new Point(.5,.5),t.settingsWindow.y=0,t.statsWindow.x=game.width/2+0,t.statsWindow.y=game.height/2,t.pVpButton.x=0,t.pVpButton.y=.07*game.height,t.pVAIButton.x=0,t.pVAIButton.y=.07*-game.height,t.famobiMoreGames.x=0,t.famobiMoreGames.y=game.height/2*.9,t.famobiMoreGames.anchor=new Point(.5,1),t.title.y=-game.height/2*.5):(game.scale.setGameSize(1920,1080),t.playButton.x=0,t.playButton.y=game.height/2*.9,t.playButton.anchor=new Phaser.Point(.5,1),t.playButton.scale=new Point(.75,.75),t.statsButton.x=-150,t.statsButton.y=game.height/2*.9,t.statsButton.anchor=new Point(1,1),t.statsButton.scale=new Point(.5,.5),t.settingsButton.x=game.width/2-100,t.settingsButton.y=-game.height/2+100,t.settingsButton.anchor=new Point(1,0),t.settingsButton.scale=new Point(.5,.5),t.helpButton.x=150,t.helpButton.y=game.height/2*.9,t.helpButton.anchor=new Point(0,1),t.helpButton.scale=new Point(.5,.5),t.settingsWindow.y=120,t.statsWindow.x=game.width/2+0,t.statsWindow.y=game.height/2+120,t.pVpButton.x=0,t.pVpButton.y=.16*game.height,t.pVAIButton.x=0,t.pVAIButton.y=.05*-game.height,t.famobiMoreGames.x=-game.width/2*.9,t.famobiMoreGames.y=game.height/2*.8,t.famobiMoreGames.anchor=new Point(0,1),t.famobiMoreGames.y=t.copyright.y+.5*t.copyright.height,t.title.y=-game.height/2*.6);String(Math.abs(a-document.getElementById("mygame").clientHeight)/2);t.menuCanvas.x=game.width/2,t.menuCanvas.y=game.height/2,t.rack.y=game.height/2*.1,t.copyright.x=game.width/2-40,t.copyright.y=game.height/2-40},projectInfo.tutorial=!1,projectInfo.clickedHelpButton=!1,game.stage.backgroundColor="#666666",t.menuCanvas=new Phaser.Group(game,game.stage,"menuCanvas"),t.menuCanvas.alpha=0,t.menuCanvas.x=game.width/2,t.menuCanvas.y=game.height/2,t.menuVisible=!0,t.copyright=new Phaser.Sprite(game,0,0,"famobi"),t.copyright.anchor=new Point(1,1),window.famobi.hasFeature("credits")&&t.menuCanvas.addChild(t.copyright),t.title=new Phaser.Sprite(game,0,0,"title"),t.menuCanvas.addChild(t.title),t.title.anchor=new Point(.5,.5),t.rack=new Phaser.Sprite(game,0,0,"rack"),t.menuCanvas.addChild(t.rack),t.rack.anchor=new Point(.5,.5),t.playButton=new Phaser.Button(game,0,0,"playButton",(function(){g(),t.pVpButton.alpha=0,t.pVpButton.visible=!0,game.add.tween(t.pVpButton).to({alpha:1},500,"Linear",!0),t.pVAIButton.alpha=0,t.pVAIButton.visible=!0,game.add.tween(t.pVAIButton).to({alpha:1},500,"Linear",!0),window.famobi_analytics.trackScreen("SCREEN_LEVELSELECT")}),this,1,0,1,0),t.menuCanvas.addChild(t.playButton),t.playButton.anchor=new Phaser.Point(.5,1),t.pVpButton=new Phaser.Button(game,0,0,"pVpButton",(function(){projectInfo.mode=2,projectInfo.levelName="2players",game.add.tween(t.menuCanvas).to({alpha:0},1e3,Phaser.Easing.Linear.None,!0).onComplete.add(h,this)}),this,1,0,1,0),window.famobi.hasFeature("multiplayer_local")&&t.menuCanvas.addChild(t.pVpButton),t.pVpButton.anchor=new Phaser.Point(.5,0),t.pVpButton.visible=!1,t.pVAIButton=new Phaser.Button(game,0,0,"pVAIButton",(function(){projectInfo.mode=1,projectInfo.levelName="1player_"+projectInfo.aiRating.toString(),game.add.tween(t.menuCanvas).to({alpha:0},1e3,Phaser.Easing.Linear.None,!0).onComplete.add(h,this)}),this,1,0,1,0),t.menuCanvas.addChild(t.pVAIButton),t.pVAIButton.anchor=new Phaser.Point(.5,0),t.pVAIButton.visible=!1,t.statsButton=new Phaser.Button(game,0,0,"statsButton",(function(){t.menuVisible=!1,t.statsWindow.alpha=0,t.statsWindow.visible=!0,game.add.tween(t.statsWindow).to({alpha:1},500,"Linear",!0),g(),window.famobi_analytics.trackScreen("SCREEN_OTHER","SCREEN_STATISTICS")}),this,1,0,1,0),t.menuCanvas.addChild(t.statsButton),t.helpButton=new Phaser.Button(game,0,0,"helpButton",(function(){projectInfo.tutorial=!0,projectInfo.mode=2,projectInfo.clickedHelpButton=!0,game.state.start("play"),window.famobi_analytics.trackScreen("SCREEN_HELP")}),this,1,0,1,0),t.menuCanvas.addChild(t.helpButton),t.settingsButton=new Phaser.Button(game,0,0,"settingsButton",(function(){t.menuVisible=!1,t.settingsWindow.alpha=0,t.settingsWindow.visible=!0,game.add.tween(t.settingsWindow).to({alpha:1},500,"Linear",!0),g(),window.famobi_analytics.trackScreen("SCREEN_SETTINGS")}),this,1,0,1,0),t.menuCanvas.addChild(t.settingsButton),t.statsWindow=new Phaser.Group(game,t.menuCanvas,"statsWindow",!0),t.statsWindow.anchor=new Point(.5,.5),t.statsWindow.visible=!1;let e=-50;var n=new Phaser.Sprite(game,-150,-170,"highScore");n.anchor=new Point(.5,.5),n.scale=new Point(.9,.9),t.statsWindow.addChild(n);var a=new Phaser.Sprite(game,-150,e,"clockIcon");a.anchor=new Point(.5,.5),a.scale=new Point(.9,.9),t.statsWindow.addChild(a);var o=new Phaser.Sprite(game,-150,70,"gameController");o.anchor=new Point(.5,.5),t.statsWindow.addChild(o),t.highscoreText=new Phaser.BitmapText(game,150,-170,"font7",projectInfo.bestScore,77),t.highscoreText.anchor=new Point(.5,.5),t.statsWindow.addChild(t.highscoreText);var i=Math.floor(projectInfo.bestTime/60),s=Math.floor(i/60),m=Math.ceil(i%60),u=m.toString();m<10&&(u="0"+m.toString());var r=s.toString()+":"+u;0==projectInfo.bestTime&&(r="--:--"),t.bestTimeText=new Phaser.BitmapText(game,150,e,"font7",r,77),t.bestTimeText.anchor=new Point(.5,.5),t.statsWindow.addChild(t.bestTimeText),t.numGamesText=new Phaser.BitmapText(game,150,70,"font7",projectInfo.numGames,77),t.numGamesText.anchor=new Point(.5,.5),t.statsWindow.addChild(t.numGamesText),t.quitStatsButton=new Phaser.Button(game,0,288,"quitButton",(function(){showMenuItems()}),this,1,0,1,0),t.quitStatsButton.anchor=new Point(.5,.5),t.quitStatsButton.scale=new Point(.6,.6),t.statsWindow.addChild(t.quitStatsButton);let l=famobi.hasFeature("external_mute");t.settingsWindow=new Phaser.Sprite(game,0,0,"panel4"),t.menuCanvas.addChild(t.settingsWindow),t.settingsWindow.anchor=new Point(.5,.5),t.settingsWindow.visible=!1,t.quitSettingsButton=new Phaser.Button(game,0,238,"quitButton",(function(){showMenuItems()}),this,1,0,1,0),t.quitSettingsButton.anchor=new Point(.5,.5),t.quitSettingsButton.scale=new Point(.6,.6),t.settingsWindow.addChild(t.quitSettingsButton);t.guideSwitch=new Phaser.Button(game,15+(l?-200:-295),12,"switch",(function(){if(0==projectInfo.guideOn){projectInfo.guideOn=1,t.guideSwitch.setFrames(0,0,0);try{window.famobi.localStorage.setItem("guideOn",1)}catch(t){}}else{projectInfo.guideOn=0,t.guideSwitch.setFrames(1,1,1);try{window.famobi.localStorage.setItem("guideOn",0)}catch(t){}}}),this,0,0,0,0),t.guideSwitch.anchor=new Point(.5,.5),t.settingsWindow.addChild(t.guideSwitch),0==projectInfo.guideOn?(t.guideSwitch.setFrames(1,1,1),window.famobi.log("setting switch off")):window.famobi.log("guideOn: "+projectInfo.guideOn),t.soundSwitch=new Phaser.Button(game,310,12,"switch",(function(){0==Sound.slave?(Sound.setMute(!1),t.soundSwitch.setFrames(0,0,0),window.famobi_analytics.trackEvent(famobi_analytics.EVENT_VOLUMECHANGE,{bgmVolume:0,sfxVolume:1})):(Sound.setMute(!0),t.soundSwitch.setFrames(1,1,1),window.famobi_analytics.trackEvent(famobi_analytics.EVENT_VOLUMECHANGE,{bgmVolume:0,sfxVolume:0}))}),this,0,0,0,0),t.soundSwitch.anchor=new Point(.5,.5),t.settingsWindow.addChild(t.soundSwitch),0==Sound.slave&&t.soundSwitch.setFrames(1,1,1),t.soundSwitch.visible=!l;let d=l?200:0;t.minusButton=new Phaser.Button(game,d-75,12,"minusButton",(function(){if(projectInfo.aiRating>1){projectInfo.aiRating--,t.ratingText.text=projectInfo.aiRating.toString();try{window.famobi.localStorage.setItem("aiRating",projectInfo.aiRating)}catch(t){}}}),this,1,0,1,0),t.minusButton.anchor=new Point(.5,.5),t.minusButton.scale=new Point(.6,.6),t.settingsWindow.addChild(t.minusButton),t.ratingText=new Phaser.BitmapText(game,d-5,20,"font7",projectInfo.aiRating.toString(),56),t.ratingText.anchor=new Point(.5,.5),t.settingsWindow.addChild(t.ratingText),t.plusButton=new Phaser.Button(game,d+75,12,"plusButton",(function(){if(projectInfo.aiRating<5){projectInfo.aiRating++,t.ratingText.text=projectInfo.aiRating.toString();try{window.famobi.localStorage.setItem("aiRating",projectInfo.aiRating)}catch(t){}}}),this,1,0,1,0),t.plusButton.anchor=new Point(.5,.5),t.plusButton.scale=new Point(.6,.6),t.settingsWindow.addChild(t.plusButton),t.famobiMoreGames=new Phaser.Button(game,0,0,"more_games",(function(){window.famobi.moreGamesLink()}),this,0,0,0,0),t.menuCanvas.addChild(t.famobiMoreGames),t.famobiMoreGames.scale.x=.6,t.famobiMoreGames.scale.y=.6,this.resizeGame();game.add.tween(t.menuCanvas).to({alpha:1},1e3,Phaser.Easing.Linear.None,!0,500);function h(){window.famobi_analytics.trackEvent("EVENT_LEVELSTART",{levelName:projectInfo.levelName}).then(function(){"true"!=window.famobi.localStorage.getItem("showTutorial")&&null!=window.famobi.localStorage.getItem("showTutorial")||0==projectInfo.tutorialPlayed&&(projectInfo.tutorial=!0),projectInfo.lastBreaker="none",game.state.start("play")}.bind(this))}function g(){t.rack.visible=!1,t.playButton.visible=!1,t.statsButton.visible=!1,t.helpButton.visible=!1,t.settingsButton.visible=!1}function c(){game.halt=!1,game.paused=!1}window.famobi_onPauseRequested=function(){window.famobi_wasVisibilityChangeDisabled=game.stage.disableVisibilityChange,game.stage.disableVisibilityChange=!0,game.paused=!0,window.famobi_pausedByAd=!0},window.famobi_onResumeRequested=function(){window.famobi_pausedByAd=!1,game.paused=!1,game.stage.disableVisibilityChange=window.famobi_wasVisibilityChangeDisabled},window.famobi.onRequest("disableAudio",(()=>{Sound.setMasterMute(!0),isGameMuted=!0})),window.famobi.onRequest("enableAudio",(()=>{Sound.setMasterMute(!1),isGameMuted=!1})),window.famobi.onRequest("pauseGameplay",(()=>{game.halt=!0,game.paused=!0})),window.famobi.onRequest("resumeGameplay",(()=>{game.halt=!1,game.paused=!1})),window.addEventListener("blur",(function(){game.halt=!0,game.paused=!0})),window.addEventListener("focus",(function(){c()})),document.addEventListener("visibilitychange",(function(){"visible"===document.visibilityState&&c()})),0==famobi.getVolume()?(Sound.setMasterMute(!0),isGameMuted=!0):Sound.setMasterMute(!1),window.famobi.gameReady(),window.famobi.playerReady()},update:function(){var t=this.menuInfo;game.input.activePointer.isDown&&t.statsWindow.visible},shutdown:function(){menuInfo=this.menuInfo,game.stage.removeChild(menuInfo.menuCanvas),menuInfo.menuCanvas.destroy(),menuInfo=null}};function showMenuItems(){var t=menuState.menuInfo;t.settingsWindow.visible=!1,t.statsWindow.visible=!1,t.rack.visible=!0,t.rack.alpha=0,game.add.tween(t.rack).to({alpha:1},500,"Linear",!0),t.playButton.visible=!0,t.playButton.alpha=0,game.add.tween(t.playButton).to({alpha:1},500,"Linear",!0),t.statsButton.visible=!0,t.statsButton.alpha=0,game.add.tween(t.statsButton).to({alpha:1},500,"Linear",!0),t.helpButton.visible=!0,t.helpButton.alpha=0,game.add.tween(t.helpButton).to({alpha:1},500,"Linear",!0),t.settingsButton.visible=!0,t.settingsButton.alpha=0,game.add.tween(t.settingsButton).to({alpha:1},500,"Linear",!0),t.menuVisible=!0,window.famobi_analytics.trackScreen("SCREEN_HOME")} -------------------------------------------------------------------------------- /assets/fonts/font6.fnt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | -------------------------------------------------------------------------------- /html5games/gameapi/zepto.min.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"function"==typeof define&&define.amd?define((function(){return e(t)})):e(t)}(this,(function(t){var e=function(){function e(t){return null==t?String(t):U[X.call(t)]||"object"}function n(t){return"function"==e(t)}function r(t){return null!=t&&t==t.window}function i(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function o(t){return"object"==e(t)}function a(t){return o(t)&&!r(t)&&Object.getPrototypeOf(t)==Object.prototype}function s(t){var e=!!t&&"length"in t&&t.length,n=T.type(t);return"function"!=n&&!r(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function u(t){return t.length>0?T.fn.concat.apply([],t):t}function c(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function l(t){return t in $?$[t]:$[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function f(t,e){return"number"!=typeof e||F[c(t)]?e:e+"px"}function h(t){return"children"in t?A.call(t.children):T.map(t.childNodes,(function(t){return 1==t.nodeType?t:void 0}))}function p(t,e){var n,r=t?t.length:0;for(n=0;r>n;n++)this[n]=t[n];this.length=r,this.selector=e||""}function d(t,e,n){for(j in e)n&&(a(e[j])||G(e[j]))?(a(e[j])&&!a(t[j])&&(t[j]={}),G(e[j])&&!G(t[j])&&(t[j]=[]),d(t[j],e[j],n)):e[j]!==E&&(t[j]=e[j])}function m(t,e){return null==e?T(t):T(t).filter(e)}function v(t,e,r,i){return n(e)?e.call(t,r,i):e}function g(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function y(t,e){var n=t.className||"",r=n&&n.baseVal!==E;return e===E?r?n.baseVal:n:void(r?n.baseVal=e:t.className=e)}function x(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?T.parseJSON(t):t):t}catch(e){return t}}function b(t,e){e(t);for(var n=0,r=t.childNodes.length;r>n;n++)b(t.childNodes[n],e)}var E,j,T,w,S,C,N=[],O=N.concat,P=N.filter,A=N.slice,D=t.document,L={},$={},F={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},k=/^\s*<(\w+|!)[^>]*>/,M=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Z=/^(?:body|html)$/i,z=/([A-Z])/g,q=["val","css","html","text","data","width","height","offset"],H=D.createElement("table"),I=D.createElement("tr"),V={tr:D.createElement("tbody"),tbody:H,thead:H,tfoot:H,td:I,th:I,"*":D.createElement("div")},_=/complete|loaded|interactive/,B=/^[\w-]*$/,U={},X=U.toString,J={},W=D.createElement("div"),Y={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},G=Array.isArray||function(t){return t instanceof Array};return J.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=W).appendChild(t),r=~J.qsa(i,e).indexOf(t),o&&W.removeChild(t),r},S=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},C=function(t){return P.call(t,(function(e,n){return t.indexOf(e)==n}))},J.fragment=function(t,e,n){var r,i,o;return M.test(t)&&(r=T(D.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(R,"<$1>")),e===E&&(e=k.test(t)&&RegExp.$1),e in V||(e="*"),(o=V[e]).innerHTML=""+t,r=T.each(A.call(o.childNodes),(function(){o.removeChild(this)}))),a(n)&&(i=T(r),T.each(n,(function(t,e){q.indexOf(t)>-1?i[t](e):i.attr(t,e)}))),r},J.Z=function(t,e){return new p(t,e)},J.isZ=function(t){return t instanceof J.Z},J.init=function(t,e){var r;if(!t)return J.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&k.test(t))r=J.fragment(t,RegExp.$1,e),t=null;else{if(e!==E)return T(e).find(t);r=J.qsa(D,t)}else{if(n(t))return T(D).ready(t);if(J.isZ(t))return t;if(G(t))r=function(t){return P.call(t,(function(t){return null!=t}))}(t);else if(o(t))r=[t],t=null;else if(k.test(t))r=J.fragment(t.trim(),RegExp.$1,e),t=null;else{if(e!==E)return T(e).find(t);r=J.qsa(D,t)}}return J.Z(r,t)},T=function(t,e){return J.init(t,e)},T.extend=function(t){var e,n=A.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){d(t,n,e)})),t},J.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,a=B.test(o);return t.getElementById&&a&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:A.call(a&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},T.contains=D.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},T.type=e,T.isFunction=n,T.isWindow=r,T.isArray=G,T.isPlainObject=a,T.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},T.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},T.inArray=function(t,e,n){return N.indexOf.call(e,t,n)},T.camelCase=S,T.trim=function(t){return null==t?"":String.prototype.trim.call(t)},T.uuid=0,T.support={},T.expr={},T.noop=function(){},T.map=function(t,e){var n,r,i,o=[];if(s(t))for(r=0;r=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return N.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return n(t)?this.not(this.not(t)):T(P.call(this,(function(e){return J.matches(e,t)})))},add:function(t,e){return T(C(this.concat(T(t,e))))},is:function(t){return this.length>0&&J.matches(this[0],t)},not:function(t){var e=[];if(n(t)&&t.call!==E)this.each((function(n){t.call(this,n)||e.push(this)}));else{var r="string"==typeof t?this.filter(t):s(t)&&n(t.item)?A.call(t):T(t);this.forEach((function(t){r.indexOf(t)<0&&e.push(t)}))}return T(e)},has:function(t){return this.filter((function(){return o(t)?T.contains(this,t):T(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!o(t)?t:T(t)},last:function(){var t=this[this.length-1];return t&&!o(t)?t:T(t)},find:function(t){var e=this;return t?"object"==typeof t?T(t).filter((function(){var t=this;return N.some.call(e,(function(e){return T.contains(e,t)}))})):1==this.length?T(J.qsa(this[0],t)):this.map((function(){return J.qsa(this,t)})):T()},closest:function(t,e){var n=[],r="object"==typeof t&&T(t);return this.each((function(o,a){for(;a&&!(r?r.indexOf(a)>=0:J.matches(a,t));)a=a!==e&&!i(a)&&a.parentNode;a&&n.indexOf(a)<0&&n.push(a)})),T(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=T.map(n,(function(t){return(t=t.parentNode)&&!i(t)&&e.indexOf(t)<0?(e.push(t),t):void 0}));return m(e,t)},parent:function(t){return m(C(this.pluck("parentNode")),t)},children:function(t){return m(this.map((function(){return h(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||A.call(this.childNodes)}))},siblings:function(t){return m(this.map((function(t,e){return P.call(h(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return T.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=function(t){var e,n;return L[t]||(e=D.createElement(t),D.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),L[t]=n),L[t]}(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=n(t);if(this[0]&&!e)var r=T(t).get(0),i=r.parentNode||this.length>1;return this.each((function(n){T(this).wrapAll(e?t.call(this,n):i?r.cloneNode(!0):r)}))},wrapAll:function(t){if(this[0]){T(this[0]).before(t=T(t));for(var e;(e=t.children()).length;)t=e.first();T(t).append(this)}return this},wrapInner:function(t){var e=n(t);return this.each((function(n){var r=T(this),i=r.contents(),o=e?t.call(this,n):t;i.length?i.wrapAll(o):r.append(o)}))},unwrap:function(){return this.parent().each((function(){T(this).replaceWith(T(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var e=T(this);(t===E?"none"==e.css("display"):t)?e.show():e.hide()}))},prev:function(t){return T(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return T(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;T(this).empty().append(v(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=v(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each((function(n){if(1===this.nodeType)if(o(t))for(j in t)g(this,j,t[j]);else g(this,t,v(this,e,n,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:E},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){g(this,t)}),this)}))},prop:function(t,e){return t=Y[t]||t,1 in arguments?this.each((function(n){this[t]=v(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=Y[t]||t,this.each((function(){delete this[t]}))},data:function(t,e){var n="data-"+t.replace(z,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?x(r):E},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=v(this,t,e,this.value)}))):this[0]&&(this[0].multiple?T(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=T(this),r=v(this,e,t,n.offset()),i=n.offsetParent().offset(),o={top:r.top-i.top,left:r.left-i.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(D.documentElement!==this[0]&&!T.contains(D.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,n){if(arguments.length<2){var r=this[0];if("string"==typeof t){if(!r)return;return r.style[S(t)]||getComputedStyle(r,"").getPropertyValue(t)}if(G(t)){if(!r)return;var i={},o=getComputedStyle(r,"");return T.each(t,(function(t,e){i[e]=r.style[S(e)]||o.getPropertyValue(e)})),i}}var a="";if("string"==e(t))n||0===n?a=c(t)+":"+f(t,n):this.each((function(){this.style.removeProperty(c(t))}));else for(j in t)t[j]||0===t[j]?a+=c(j)+":"+f(j,t[j])+";":this.each((function(){this.style.removeProperty(c(j))}));return this.each((function(){this.style.cssText+=";"+a}))},index:function(t){return t?this.indexOf(T(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&N.some.call(this,(function(t){return this.test(y(t))}),l(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){w=[];var n=y(this);v(this,t,e,n).split(/\s+/g).forEach((function(t){T(this).hasClass(t)||w.push(t)}),this),w.length&&y(this,n+(n?" ":"")+w.join(" "))}})):this},removeClass:function(t){return this.each((function(e){if("className"in this){if(t===E)return y(this,"");w=y(this),v(this,t,e,w).split(/\s+/g).forEach((function(t){w=w.replace(l(t)," ")})),y(this,w.trim())}}))},toggleClass:function(t,e){return t?this.each((function(n){var r=T(this);v(this,t,n,y(this)).split(/\s+/g).forEach((function(t){(e===E?!r.hasClass(t):e)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===E?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===E?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),r=Z.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(T(t).css("margin-top"))||0,n.left-=parseFloat(T(t).css("margin-left"))||0,r.top+=parseFloat(T(e[0]).css("border-top-width"))||0,r.left+=parseFloat(T(e[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||D.body;t&&!Z.test(t.nodeName)&&"static"==T(t).css("position");)t=t.offsetParent;return t}))}},T.fn.detach=T.fn.remove,["width","height"].forEach((function(t){var e=t.replace(/./,(function(t){return t[0].toUpperCase()}));T.fn[t]=function(n){var o,a=this[0];return n===E?r(a)?a["inner"+e]:i(a)?a.documentElement["scroll"+e]:(o=this.offset())&&o[t]:this.each((function(e){(a=T(this)).css(t,v(this,n,e,a[t]()))}))}})),["after","prepend","before","append"].forEach((function(n,r){var i=r%2;T.fn[n]=function(){var n,o,a=T.map(arguments,(function(t){var r=[];return"array"==(n=e(t))?(t.forEach((function(t){return t.nodeType!==E?r.push(t):T.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(J.fragment(t)))})),r):"object"==n||null==t?t:J.fragment(t)})),s=this.length>1;return a.length<1?this:this.each((function(e,n){o=i?n:n.parentNode,n=0==r?n.nextSibling:1==r?n.firstChild:2==r?n:null;var u=T.contains(D.documentElement,o);a.forEach((function(e){if(s)e=e.cloneNode(!0);else if(!o)return T(e).remove();o.insertBefore(e,n),u&&b(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},T.fn[i?n+"To":"insert"+(r?"Before":"After")]=function(t){return T(t)[n](this),this}})),J.Z.prototype=p.prototype=T.fn,J.uniq=C,J.deserializeValue=x,T.zepto=J,T}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function n(t){return t._zid||(t._zid=h++)}function r(t,e,r,o){if((e=i(e)).ns)var a=function(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}(e.ns);return(v[n(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||a.test(t.ns))&&(!r||n(t.fn)===n(r))&&(!o||t.sel==o)}))}function i(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function o(t,e){return t.del&&!y&&t.e in x||!!e}function a(t){return b[t]||y&&x[t]||t}function s(t,r,s,u,l,h,p){var d=n(t),m=v[d]||(v[d]=[]);r.split(/\s/).forEach((function(n){if("ready"==n)return e(document).ready(s);var r=i(n);r.fn=s,r.sel=l,r.e in b&&(s=function(t){var n=t.relatedTarget;return!n||n!==this&&!e.contains(this,n)?r.fn.apply(this,arguments):void 0}),r.del=h;var d=h||s;r.proxy=function(e){if(!(e=c(e)).isImmediatePropagationStopped()){e.data=u;var n=d.apply(t,e._args==f?[e]:[e].concat(e._args));return!1===n&&(e.preventDefault(),e.stopPropagation()),n}},r.i=m.length,m.push(r),"addEventListener"in t&&t.addEventListener(a(r.e),r.proxy,o(r,p))}))}function u(t,e,i,s,u){var c=n(t);(e||"").split(/\s/).forEach((function(e){r(t,e,i,s).forEach((function(e){delete v[c][e.i],"removeEventListener"in t&&t.removeEventListener(a(e.e),e.proxy,o(e,u))}))}))}function c(t,n){return(n||!t.isDefaultPrevented)&&(n||(n=t),e.each(w,(function(e,r){var i=n[e];t[e]=function(){return this[r]=E,i&&i.apply(n,arguments)},t[r]=j})),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==f?n.defaultPrevented:"returnValue"in n?!1===n.returnValue:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=E)),t}function l(t){var e,n={originalEvent:t};for(e in t)T.test(e)||t[e]===f||(n[e]=t[e]);return c(n,t)}var f,h=1,p=Array.prototype.slice,d=e.isFunction,m=function(t){return"string"==typeof t},v={},g={},y="onfocusin"in t,x={focus:"focusin",blur:"focusout"},b={mouseenter:"mouseover",mouseleave:"mouseout"};g.click=g.mousedown=g.mouseup=g.mousemove="MouseEvents",e.event={add:s,remove:u},e.proxy=function(t,r){var i=2 in arguments&&p.call(arguments,2);if(d(t)){var o=function(){return t.apply(r,i?i.concat(p.call(arguments)):arguments)};return o._zid=n(t),o}if(m(r))return i?(i.unshift(t[r],t),e.proxy.apply(null,i)):e.proxy(t[r],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var E=function(){return!0},j=function(){return!1},T=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,w={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,r,i,o){var a,c,h=this;return t&&!m(t)?(e.each(t,(function(t,e){h.on(t,n,r,e,o)})),h):(m(n)||d(i)||!1===i||(i=r,r=n,n=f),(i===f||!1===r)&&(i=r,r=f),!1===i&&(i=j),h.each((function(f,h){o&&(a=function(t){return u(h,t.type,i),i.apply(this,arguments)}),n&&(c=function(t){var r,o=e(t.target).closest(n,h).get(0);return o&&o!==h?(r=e.extend(l(t),{currentTarget:o,liveFired:h}),(a||i).apply(o,[r].concat(p.call(arguments,1)))):void 0}),s(h,t,i,r,n,c||a)})))},e.fn.off=function(t,n,r){var i=this;return t&&!m(t)?(e.each(t,(function(t,e){i.off(t,n,e)})),i):(m(n)||d(r)||!1===r||(r=n,n=f),!1===r&&(r=j),i.each((function(){u(this,t,r,n)})))},e.fn.trigger=function(t,n){return(t=m(t)||e.isPlainObject(t)?e.Event(t):c(t))._args=n,this.each((function(){t.type in x&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,o;return this.each((function(a,s){(i=l(m(t)?e.Event(t):t))._args=n,i.target=s,e.each(r(s,t.type||t),(function(t,e){return o=e.proxy(i),!i.isImmediatePropagationStopped()&&void 0}))})),o},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){m(t)||(t=(e=t).type);var n=document.createEvent(g[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),c(n)}}(e),function(e){function n(t,n,r){var i=e.Event(n);return e(t).trigger(i,r),!i.isDefaultPrevented()}function r(t,e,r,i){return t.global?n(e||y,r,i):void 0}function i(t){t.global&&0==e.active++&&r(t,null,"ajaxStart")}function o(t){t.global&&!--e.active&&r(t,null,"ajaxStop")}function a(t,e){var n=e.context;return!1!==e.beforeSend.call(n,t,e)&&!1!==r(e,n,"ajaxBeforeSend",[t,e])&&void r(e,n,"ajaxSend",[t,e])}function s(t,e,n,i){var o=n.context,a="success";n.success.call(o,t,a,e),i&&i.resolveWith(o,[t,a,e]),r(n,o,"ajaxSuccess",[e,n,t]),c(a,e,n)}function u(t,e,n,i,o){var a=i.context;i.error.call(a,n,e,t),o&&o.rejectWith(a,[n,e,t]),r(i,a,"ajaxError",[n,i,t||e]),c(e,n,i)}function c(t,e,n){var i=n.context;n.complete.call(i,e,t),r(n,i,"ajaxComplete",[e,n]),o(n)}function l(){}function f(t){return t&&(t=t.split(";",2)[0]),t&&(t==T?"html":t==j?"json":b.test(t)?"script":E.test(t)&&"xml")||"text"}function h(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function p(t,n,r,i){return e.isFunction(n)&&(i=r,r=n,n=void 0),e.isFunction(r)||(i=r,r=void 0),{url:t,data:n,success:r,dataType:i}}function d(t,n,r,i){var o,a=e.isArray(n),s=e.isPlainObject(n);e.each(n,(function(n,u){o=e.type(u),i&&(n=r?i:i+"["+(s||"object"==o||"array"==o?n:"")+"]"),!i&&a?t.add(u.name,u.value):"array"==o||!r&&"object"==o?d(t,u,r,n):t.add(n,u)}))}var m,v,g=+new Date,y=t.document,x=/)<[^<]*)*<\/script>/gi,b=/^(?:text|application)\/javascript/i,E=/^(?:text|application)\/xml/i,j="application/json",T="text/html",w=/^\s*$/,S=y.createElement("a");S.href=t.location.href,e.active=0,e.ajaxJSONP=function(n,r){if(!("type"in n))return e.ajax(n);var i,o,c=n.jsonpCallback,l=(e.isFunction(c)?c():c)||"Zepto"+g++,f=y.createElement("script"),h=t[l],p=function(t){e(f).triggerHandler("error",t||"abort")},d={abort:p};return r&&r.promise(d),e(f).on("load error",(function(a,c){clearTimeout(o),e(f).off().remove(),"error"!=a.type&&i?s(i[0],d,n,r):u(null,c||"error",d,n,r),t[l]=h,i&&e.isFunction(h)&&h(i[0]),h=i=void 0})),!1===a(d,n)?(p("abort"),d):(t[l]=function(){i=arguments},f.src=n.url.replace(/\?(.+)=\?/,"?$1="+l),y.head.appendChild(f),n.timeout>0&&(o=setTimeout((function(){p("timeout")}),n.timeout)),d)},e.ajaxSettings={type:"GET",beforeSend:l,success:l,error:l,complete:l,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:j,xml:"application/xml, text/xml",html:T,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:l},e.ajax=function(n){var r,o,c=e.extend({},n||{}),p=e.Deferred&&e.Deferred();for(m in e.ajaxSettings)void 0===c[m]&&(c[m]=e.ajaxSettings[m]);i(c),c.crossDomain||((r=y.createElement("a")).href=c.url,r.href=r.href,c.crossDomain=S.protocol+"//"+S.host!=r.protocol+"//"+r.host),c.url||(c.url=t.location.toString()),(o=c.url.indexOf("#"))>-1&&(c.url=c.url.slice(0,o)),function(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=h(t.url,t.data),t.data=void 0)}(c);var d=c.dataType,g=/\?.+=\?/.test(c.url);if(g&&(d="jsonp"),!1!==c.cache&&(n&&!0===n.cache||"script"!=d&&"jsonp"!=d)||(c.url=h(c.url,"_="+Date.now())),"jsonp"==d)return g||(c.url=h(c.url,c.jsonp?c.jsonp+"=?":!1===c.jsonp?"":"callback=?")),e.ajaxJSONP(c,p);var x,b=c.accepts[d],E={},j=function(t,e){E[t.toLowerCase()]=[t,e]},T=/^([\w-]+:)\/\//.test(c.url)?RegExp.$1:t.location.protocol,C=c.xhr(),N=C.setRequestHeader;if(p&&p.promise(C),c.crossDomain||j("X-Requested-With","XMLHttpRequest"),j("Accept",b||"*/*"),(b=c.mimeType||b)&&(b.indexOf(",")>-1&&(b=b.split(",",2)[0]),C.overrideMimeType&&C.overrideMimeType(b)),(c.contentType||!1!==c.contentType&&c.data&&"GET"!=c.type.toUpperCase())&&j("Content-Type",c.contentType||"application/x-www-form-urlencoded"),c.headers)for(v in c.headers)j(v,c.headers[v]);if(C.setRequestHeader=j,C.onreadystatechange=function(){if(4==C.readyState){C.onreadystatechange=l,clearTimeout(x);var t,n=!1;if(C.status>=200&&C.status<300||304==C.status||0==C.status&&"file:"==T){if(d=d||f(c.mimeType||C.getResponseHeader("content-type")),"arraybuffer"==C.responseType||"blob"==C.responseType)t=C.response;else{t=C.responseText;try{t=function(t,e,n){if(n.dataFilter==l)return t;var r=n.context;return n.dataFilter.call(r,t,e)}(t,d,c),"script"==d?(0,eval)(t):"xml"==d?t=C.responseXML:"json"==d&&(t=w.test(t)?null:e.parseJSON(t))}catch(t){n=t}if(n)return u(n,"parsererror",C,c,p)}s(t,C,c,p)}else u(C.statusText||null,C.status?"error":"abort",C,c,p)}},!1===a(C,c))return C.abort(),u(null,"abort",C,c,p),C;var O=!("async"in c)||c.async;if(C.open(c.type,c.url,O,c.username,c.password),c.xhrFields)for(v in c.xhrFields)C[v]=c.xhrFields[v];for(v in E)N.apply(C,E[v]);return c.timeout>0&&(x=setTimeout((function(){C.onreadystatechange=l,C.abort(),u(null,"timeout",C,c,p)}),c.timeout)),C.send(c.data?c.data:null),C},e.get=function(){return e.ajax(p.apply(null,arguments))},e.post=function(){var t=p.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=p.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,r){if(!this.length)return this;var i,o=this,a=t.split(/\s/),s=p(t,n,r),u=s.success;return a.length>1&&(s.url=a[0],i=a[1]),s.success=function(t){o.html(i?e("
").html(t.replace(x,"")).find(i):t),u&&u.apply(o,arguments)},e.ajax(s),this};var C=encodeURIComponent;e.param=function(t,n){var r=[];return r.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(C(t)+"="+C(n))},d(r,t,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,(function(r,o){n=o.type,(e=o.name)&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())})),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach((function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))})),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(n){var e=getComputedStyle;t.getComputedStyle=function(t,n){try{return e(t,n)}catch(t){return null}}}}(),e})); -------------------------------------------------------------------------------- /assets/src/14setup.js: -------------------------------------------------------------------------------- 1 | var playState=new Object;playState.init=function(){this.menuInfo=new Object},playState.create=function(){window.famobi.onOrientationChange((function(){resizeGame()})),resizeGame=function(a,t){Math.min(fenster.innerWidth,document.documentElement.clientWidth),Math.min(fenster.innerHeight,document.documentElement.clientHeight);if("portrait"==window.famobi.getOrientation()){e.landscape=!1,game.scale.setGameSize(1080,1920),e.gameCanvas.x=game.width/2+30,e.gameCanvas.y=game.height/2-50,e.gameCanvas.angle=-90,projectInfo.tutorial&&(e.skipText.x=game.world.centerX+30,e.skipText.y=game.world.centerY+230,e.tutorialText.x=game.world.centerX+30,e.tutorialText.y=320,game.device.touch&&(e.hand.scale.x=-1,e.tutStage>=6&&(e.hand.angle=0,e.pointerStart=e.pointerStartP,e.pointerEnd=e.pointerEndP),6!=e.tutStage&&7!=e.tutStage||(e.hand.x=e.pointerStart.x,e.hand.y=e.pointerStart.y),e.tutStage>=8&&(e.hand.x=e.pointerStart.x-e.pointerProgress,e.hand.y=e.pointerStart.y,e.powerBarMask.x=0,e.powerBarMask.y=e.pointerProgress))),e.guiPanel1.x=game.width/2-e.guiPanel2.width/2-20+25,e.guiPanel1.y=100,e.guiPanel2.x=game.width/2+25,e.guiPanel2.y=100,e.guiPanel3.x=game.width/2+e.guiPanel2.width/2+20+25,e.guiPanel3.y=100,e.timerText.x=e.guiPanel3.x+e.guiPanel3.width/2,e.timerText.y=100,e.scoreText.x=game.width/2+25,e.scoreText.y=100,e.multiplierText.x=e.guiPanel1.x-e.guiPanel1.width/2,e.multiplierText.y=100,e.menuButton.x=game.width-65,e.menuButton.y=10,e.menuButton.scale=new Point(.35,.35),game.device.touch&&(e.powerBar.angle=-90,e.powerBar.x=60,e.powerBar.y=game.height/2,e.powerBarCueMask.clear(),e.powerBarCueMask.beginFill(16777215),e.powerBarCueMask.drawRect(e.powerBar.x,e.powerBar.y-250,26,500),e.powerBarMask.clear(),e.powerBarMask.beginFill(16711680),e.powerBarMask.drawRect(e.powerBar.x-26,e.powerBar.y-750,26,500)),e.successIcon.angle=90,e.gameOverPanel.x=game.width/2+35,e.gameOverPanel.y=game.height/2,e.gameOverPanelBG.angle=-90,e.GOhighScoreIcon.x=80,e.GOhighScoreIcon.y=-346,e.gameOverPanel.text2.x=145,e.gameOverPanel.text2.y=-349,e.playerWin.x=-240,e.playerWin.y=-405,e.popUpPanel.x=game.width/2+25,e.popUpPanel.y=game.height/2,e.popUpPanelBG.angle=0;let a=famobi.hasFeature("external_mute");e.playButtonPU.x=0,e.playButtonPU.y=-90,e.muteButtonPU.x=-170,e.muteButtonPU.y=130,e.replayButtonPU.x=a?-85:0,e.replayButtonPU.y=130,e.quitButtonPU.x=a?85:170,e.quitButtonPU.y=130,e.humanIcon.x=170,e.humanIcon.y=game.height-95,e.humanIcon.scale=new Point(.35,.35),e.aiIcon.x=170,e.aiIcon.y=game.height-0,e.aiIcon.anchor=new Point(0,1),e.aiIcon.scale=new Point(.35,.35),e.turnArrow1.x=125,e.turnArrow1.scale=new Point(.5,.5),e.turnArrow1.y=game.height-110,e.turnArrow2.x=125,e.turnArrow2.scale=new Point(.5,.5),e.turnArrow2.y=game.height-20,e.rackSolids.x=game.width/2+25,e.rackSolids.y=game.height-100,e.rackStripes.x=game.width/2+25,e.rackStripes.y=game.height-10,"SOLIDS"==e.p1TargetType&&(e.rackStripes.y=game.height-10,e.rackSolids.y=game.height-100),"STRIPES"==e.p1TargetType&&(e.rackSolids.y=game.height-10,e.rackStripes.y=game.height-100),e.spinSetter.x=game.width-135,e.spinSetter.y=game.height-105,e.spinSetterZoom.x=game.width/2+30,e.spinSetterZoom.y=game.height/2-50,e.foulWindow.x=game.width/2+25,e.foulWindow.y=game.height/2,e.quitButton2.y=250,e.replayButton.y=250}else{e.landscape=!0,game.scale.setGameSize(1920,1080),e.gameCanvas.x=game.width/2,e.gameCanvas.y=game.height/2-75,projectInfo.tutorial&&(e.skipText.x=game.world.centerX,e.skipText.y=game.world.centerY+230,e.tutorialText.x=game.world.centerX,e.tutorialText.y=game.world.centerY-320,game.device.touch&&(e.hand.scale.x=1,e.hand.scale.y=1,e.tutStage>=6&&(e.hand.angle=180,e.pointerStart=e.pointerStartL,e.pointerEnd=e.pointerEndL),6!=e.tutStage&&7!=e.tutStage||(e.hand.x=e.pointerStart.x,e.hand.y=e.pointerStart.y),e.tutStage>=8&&(e.hand.x=e.pointerStart.x-e.pointerProgress,e.hand.y=e.pointerStart.y,e.powerBarMask.y=0,e.powerBarMask.x=-e.pointerProgress))),e.rackSolids.x=game.width/4,e.rackSolids.y=game.height-40,e.rackStripes.x=3*game.width/4,e.rackStripes.y=game.height-40,"SOLIDS"==e.p1TargetType&&(e.rackSolids.x=game.width/4,e.rackStripes.x=3*game.width/4),"STRIPES"==e.p1TargetType&&(e.rackSolids.x=3*game.width/4,e.rackStripes.x=game.width/4),e.guiPanel1.x=game.width/2-e.guiPanel2.width/2-20,e.guiPanel1.y=game.height-40,e.guiPanel2.x=game.width/2,e.guiPanel2.y=game.height-40,e.guiPanel3.x=game.width/2+e.guiPanel2.width/2+20,e.guiPanel3.y=game.height-40,e.timerText.x=e.guiPanel3.x+e.guiPanel3.width/2,e.timerText.y=game.height-40,e.scoreText.x=game.width/2,e.scoreText.y=game.height-40,e.multiplierText.x=e.guiPanel1.x-e.guiPanel1.width/2,e.multiplierText.y=game.height-40,e.gameCanvas.angle=0,e.humanIcon.x=120,e.humanIcon.y=game.height-20,e.humanIcon.anchor=new Point(0,1),e.humanIcon.scale=new Point(.4,.4),e.aiIcon.x=game.width-120-e.aiIcon.width,e.aiIcon.y=game.height-20,e.aiIcon.anchor=new Point(0,1),e.aiIcon.scale=new Point(.4,.4),e.turnArrow1.x=75,e.turnArrow1.y=game.height-40,e.turnArrow2.scale=new Point(.5,.5),e.turnArrow2.x=game.width-75,e.turnArrow2.y=game.height-40,e.turnArrow2.scale=new Point(-.5,.5),e.menuButton.x=game.width-80,e.menuButton.y=20,e.menuButton.scale=new Point(.5,.5),e.spinSetter.x=game.width-90,e.spinSetter.y=game.height/2,e.spinSetterZoom.x=game.width/2,e.spinSetterZoom.y=game.height/2-75,game.device.touch&&(e.powerBar.angle=-90,e.powerBar.x=100,e.powerBar.y=game.height/2,e.powerBarCueMask.clear(),e.powerBarCueMask.beginFill(16777215),e.powerBarCueMask.drawRect(e.powerBar.x,e.powerBar.y-250,26,500),e.powerBarMask.clear(),e.powerBarMask.beginFill(16711680),e.powerBarMask.drawRect(e.powerBar.x-26,e.powerBar.y-750,26,500)),e.successIcon.angle=0,e.gameOverPanel.x=game.width/2,e.gameOverPanel.y=game.height/2-10-75,e.gameOverPanelBG.angle=0,e.GOhighScoreIcon.x=220,e.GOhighScoreIcon.y=-246,e.gameOverPanel.text2.x=285,e.gameOverPanel.text2.y=-249,e.playerWin.x=-400,e.playerWin.y=-265,e.popUpPanel.x=game.width/2,e.popUpPanel.y=game.height/2-75,e.popUpPanelBG.angle=0;let a=famobi.hasFeature("external_mute");e.playButtonPU.x=0,e.playButtonPU.y=-90,e.muteButtonPU.x=-170,e.muteButtonPU.y=130,e.replayButtonPU.x=a?-85:0,e.replayButtonPU.y=130,e.quitButtonPU.x=a?85:170,e.quitButtonPU.y=130,e.foulWindow.x=game.width/2,e.foulWindow.y=game.height/2-75,e.quitButton2.y=170,e.replayButton.y=170}String(Math.abs(fenster.innerHeight-document.getElementById("mygame").clientHeight)/2);e.debugText.x=game.width-25,e.debugText.y=30,e.successIcon.x=0,e.successIcon.y=0},this.gameInfo=new Object;var e=this.gameInfo;function a(){playState.resumeGame()}function t(){0==Sound.slave?(Sound.setMute(!1),e.muteButtonPU.setFrames(1,0,1,0),window.famobi_analytics.trackEvent(famobi_analytics.EVENT_VOLUMECHANGE,{bgmVolume:0,sfxVolume:1})):(Sound.setMute(!0),e.muteButtonPU.setFrames(3,2,3,2),window.famobi_analytics.trackEvent(famobi_analytics.EVENT_VOLUMECHANGE,{bgmVolume:0,sfxVolume:0})),playState.resumeGame()}function n(){1!=e.foulWindow.visible&&0==e.gameOver&&(window.famobi_analytics.trackScreen("SCREEN_PAUSE"),e.gameRunning=!1,e.popUpPanel.visible=!0,e.quitButtonPU.input.enabled=!0,e.replayButtonPU.input.enabled=!0,e.playButtonPU.input.enabled=!0,e.muteButtonPU.input.enabled=!0)}function r(){game.add.tween(e.guiCanvas).to({alpha:0},1e3,Phaser.Easing.Linear.None,!0),game.add.tween(e.guiBaseCanvas).to({alpha:0},1e3,Phaser.Easing.Linear.None,!0);game.add.tween(e.gameCanvas).to({alpha:0},1e3,Phaser.Easing.Linear.None,!0).onComplete.add((function(){if(e.gameOver)return void game.state.start("mainMenu");window.famobi_analytics.trackEvent("EVENT_LEVELFAIL",{levelName:projectInfo.levelName,reason:"quit"}).then((function(){game.state.start("mainMenu")}),(function(){game.state.start("mainMenu")}))}),this)}function o(){projectInfo.lastBreaker="none",e.gameOver?window.famobi_analytics.trackEvent("EVENT_LEVELRESTART",{levelName:projectInfo.levelName}).then((function(){game.state.start("play")}),(function(){game.state.start("play")})):Promise.all([window.famobi_analytics.trackEvent("EVENT_LEVELFAIL",{levelName:projectInfo.levelName,reason:"quit"}),window.famobi_analytics.trackEvent("EVENT_LEVELRESTART",{levelName:projectInfo.levelName})]).then((function(){game.state.start("play")}),(function(){game.state.start("play")}))}e.adjustmentScale=2.3,e.settingSpin=!1,e.pointerStartL=new Point(-850,-200),e.pointerStartP=new Point(100,-450),e.pointerEndL=new Point(-850,-50),e.pointerEndP=new Point(-80,-450),e.pointerProgress=0,e.numLevels=6,e.ballRadius=1e3*e.adjustmentScale,e.physScale=.01,e.friction=1.5,e.gameOver=!1,e.counter=0,e.transferCounter=0,e.bonusStarOn=!1,e.starNumber=2,e.timerStarted=!1,e.ballPotted=!1,e.ballsPotted=0,e.fouled=!1,e.multiplier=1,e.frictionSpeedThreshold=85,e.pocketRadius=2250,e.minVelocity=2,e.cushionRestitution=.6,e.ballRestitution=.94,e.maxPower=5e3,e.trial=!1,e.overlap=!1,e.cueBallInHand=!0,e.preventAim=!1,e.preventSetPower=!1,e.preventUpdateCue=!1,e.cueSet=!1,e.shotRunning=!1,e.settingPower=!1,e.executeStrike=!1,e.beginStrike=!1,e.cueTweenComplete=!1,e.firstTouch=!1,e.tutStage=0,e.shotComplete=!1,e.rulingsApplied=!1,e.shotNum=0,e.scratched=!1,e.trial=!1,e.pottedBallArray=new Array,e.time=0,e.scratchFoulShown=!1,e.p1TargetType="ANY",e.p2TargetType="ANY",e.scratch=!1,e.foulMessage="",e.shotNum=0,e.turnExtended=!1,e.ballsPottedSameType=!1,e.typesPotted="",e.trial=!1,e.initVars=!1,e.shotReset=!0,e.drawGuide=!0,e.allowTransferPoints=!1,e.placedInCenter=!1,e.foulDisplayComplete=!0,e.transfer1Complete=!0,e.transfer2Complete=!0,e.aimDirectionVector=new Vector2D(1,0).normalize(),function(){0==projectInfo.levelComplete?projectInfo.level=1:projectInfo.level++;0==projectInfo.tutorial&&window.famobi_analytics.trackScreen("SCREEN_LEVEL")}(),function(){0==projectInfo.levelComplete?projectInfo.score=0:projectInfo.levelComplete=!1;switch(projectInfo.level){case 1:projectInfo.startTime=50;break;case 2:projectInfo.startTime=60;break;case 3:projectInfo.startTime=80;break;case 4:projectInfo.startTime=90;break;case 5:projectInfo.startTime=100;break}projectInfo.level>=e.numLevels&&(projectInfo.startTime-=10)}(),function(){e.bgCanvas=new Phaser.Group(game,game.stage,"bgCanvas"),e.guiBaseCanvas=new Phaser.Group(game,game.stage,"guiBaseCanvas"),e.gameCanvas=new Phaser.Group(game,game.stage,"gameCanvas"),e.gameCanvas.x=game.width/2,e.gameCanvas.y=game.height/2-15,e.tableCanvas=new Phaser.Group(game,e.gameCanvas,"tableCanvas"),e.tableCanvas.y+=2,e.timerCanvas=new Phaser.Group(game,e.gameCanvas,"timerCanvas"),e.ballCanvas=new Phaser.Group(game,e.gameCanvas,"ballCanvas"),e.guiCanvas=new Phaser.Group(game,game.stage,"guiCanvas"),e.cueBaseCanvas=new Phaser.Group(game,e.gameCanvas,"cueCanvas"),e.cueCanvas=new Phaser.Group(game,e.cueBaseCanvas,"cueCanvas"),e.guideCanvas=new Phaser.Group(game,e.gameCanvas,"guideCanvas"),e.tutCanvas=new Phaser.Group(game,e.gameCanvas,"tutCanvas");game.add.tween(e.cueBaseCanvas).from({alpha:0},1e3,Phaser.Easing.Linear.None,!0,500),game.add.tween(e.guiCanvas).from({alpha:0},1e3,Phaser.Easing.Linear.None,!0,500),game.add.tween(e.guiBaseCanvas).from({alpha:0},1e3,Phaser.Easing.Linear.None,!0,500),game.add.tween(e.gameCanvas).from({alpha:0},1e3,Phaser.Easing.Linear.None,!0,500)}(),function(){e.pockets=new Phaser.Sprite(game,0,0,"pockets"),e.pockets.anchor=new Phaser.Point(.5,.5),e.tableCanvas.add(e.pockets),e.tunnelCanvas=new Phaser.Group(game,e.tableCanvas,"tunnels"),e.cloth=new Phaser.Sprite(game,0,0,"cloth"),e.cloth.anchor=new Phaser.Point(.5,.5),e.tableCanvas.add(e.cloth),e.shadowCanvas=new Phaser.Group(game,e.tableCanvas,"shadows"),e.tableTop=new Phaser.Sprite(game,0,0,"tableTop"),e.tableTop.anchor=new Phaser.Point(.5,.5),e.tableCanvas.add(e.tableTop);var a,t,n=600*e.adjustmentScale;e.pocketArray=new Array,e.vertexArray=new Array,e.lineArray=new Array,(t=new Object).position=new Vector2D(-50*n-e.pocketRadius/2,-25*n-e.pocketRadius/4),t.dropPosition=new Vector2D(-51*n-e.pocketRadius/2,-26*n-e.pocketRadius/4),t.starPosition=new Vector2D(-50.4*n-e.pocketRadius/2,-25.8*n-e.pocketRadius/4),t.id=0,e.pocketArray.push(t),(t=new Object).position=new Vector2D(0*n,-25*n-e.pocketRadius),t.dropPosition=new Vector2D(0*n,-25.5*n-e.pocketRadius),t.starPosition=new Vector2D(-.2*n,-25.5*n-e.pocketRadius),t.id=1,e.pocketArray.push(t),(t=new Object).position=new Vector2D(50*n+e.pocketRadius/2,-25*n-e.pocketRadius/4),t.dropPosition=new Vector2D(51*n+e.pocketRadius/2,-26*n-e.pocketRadius/4),t.starPosition=new Vector2D(50*n+e.pocketRadius/2,-26*n-e.pocketRadius/4),t.id=2,e.pocketArray.push(t),(t=new Object).position=new Vector2D(-50*n-e.pocketRadius/2,25*n+e.pocketRadius/4),t.dropPosition=new Vector2D(-51*n-e.pocketRadius/2,26*n+e.pocketRadius/4),t.starPosition=new Vector2D(-50.3*n-e.pocketRadius/2,25.5*n+e.pocketRadius/4),t.id=3,e.pocketArray.push(t),(t=new Object).position=new Vector2D(0*n,25*n+e.pocketRadius),t.dropPosition=new Vector2D(0*n,25.5*n+e.pocketRadius),t.starPosition=new Vector2D(-.2*n,25.3*n+e.pocketRadius),t.id=4,e.pocketArray.push(t),(t=new Object).position=new Vector2D(50*n+e.pocketRadius/2,25*n+e.pocketRadius/4),t.dropPosition=new Vector2D(51*n+e.pocketRadius/2,26*n+e.pocketRadius/4),t.starPosition=new Vector2D(50*n+e.pocketRadius/2,27*n-e.pocketRadius/4),t.id=5,e.pocketArray.push(t);(o=new Object).name="AB",o.p1=new Vector2D(-50*n,-29*n),o.p2=new Vector2D(-46*n,-25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="B",e.vertexArray.push(a),(o=new Object).name="BC",o.p1=new Vector2D(-46*n,-25*n),o.p2=new Vector2D(-4*n,-25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="C",e.vertexArray.push(a),(o=new Object).name="CD",o.p1=new Vector2D(-4*n,-25*n),o.p2=new Vector2D(-2*n,-29*n),e.lineArray.push(o),(o=new Object).name="EF",o.p1=new Vector2D(2*n,-29*n),o.p2=new Vector2D(4*n,-25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="F",e.vertexArray.push(a),(o=new Object).name="FG",o.p1=new Vector2D(4*n,-25*n),o.p2=new Vector2D(46*n,-25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="G",e.vertexArray.push(a),(o=new Object).name="GH",o.p1=new Vector2D(46*n,-25*n),o.p2=new Vector2D(50*n,-29*n),e.lineArray.push(o),(o=new Object).name="IJ",o.p1=new Vector2D(54*n,-25*n),o.p2=new Vector2D(50*n,-21*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="J",e.vertexArray.push(a),(o=new Object).name="JK",o.p1=new Vector2D(50*n,-21*n),o.p2=new Vector2D(50*n,21*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="K",e.vertexArray.push(a),(o=new Object).name="KL",o.p1=new Vector2D(50*n,21*n),o.p2=new Vector2D(54*n,25*n),e.lineArray.push(o),(o=new Object).name="MN",o.p1=new Vector2D(50*n,29*n),o.p2=new Vector2D(46*n,25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="N",e.vertexArray.push(a),(o=new Object).name="NO",o.p1=new Vector2D(46*n,25*n),o.p2=new Vector2D(4*n,25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="O",e.vertexArray.push(a),(o=new Object).name="OP",o.p1=new Vector2D(4*n,25*n),o.p2=new Vector2D(2*n,29*n),e.lineArray.push(o),(o=new Object).name="QR",o.p1=new Vector2D(-2*n,29*n),o.p2=new Vector2D(-4*n,25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="R",e.vertexArray.push(a),(o=new Object).name="RS",o.p1=new Vector2D(-4*n,25*n),o.p2=new Vector2D(-46*n,25*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="S",e.vertexArray.push(a),(o=new Object).name="ST",o.p1=new Vector2D(-46*n,25*n),o.p2=new Vector2D(-50*n,29*n),e.lineArray.push(o),(o=new Object).name="UV",o.p1=new Vector2D(-54*n,25*n),o.p2=new Vector2D(-50*n,21*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="V",e.vertexArray.push(a),(o=new Object).name="VW",o.p1=new Vector2D(-50*n,21*n),o.p2=new Vector2D(-50*n,-21*n),e.lineArray.push(o),(a=new Object).position=new Vector2D(o.p2.x,o.p2.y),a.name="W",e.vertexArray.push(a),(o=new Object).name="WX",o.p1=new Vector2D(-50*n,-21*n),o.p2=new Vector2D(-54*n,-25*n),e.lineArray.push(o);game.add.graphics(e.gameCanvas.x,e.gameCanvas.y);for(var r=0;r8&&(n.targetType="STRIPES"),8==t&&(n.targetType="8 BALL"),n.position=new Vector2D(a[t].x,a[t].y),n.velocity=new Vector2D(0,0),n.lastCollisionObject=null,n.id=t,n.active=!0,n.firstContact=!1,n.contactArray=new Array,0==t&&(n.screw=0,n.english=0,n.deltaScrew=new Vector2D(0,0)),n.grip=1,n.ySpin=0,n.pocketTweenComplete=!0,n.propelling=!1,e.ballArray.push(n)}}(),e.guide=new Phaser.Graphics(game),e.guideCanvas.addChild(e.guide),function(){e.debugText=new Phaser.BitmapText(game,game.width-1,20,"font7","",34),e.guiCanvas.addChild(e.debugText),e.debugText.anchor.x=1,e.debugText.visible=!1,e.spinSetter=new Phaser.Sprite(game,0,0,"spinSetterSmall"),e.guiCanvas.addChild(e.spinSetter),e.spinSetter.anchor=new Point(.5,.5),e.spinSetter.inputEnabled=!0,e.spinSetter.ignoreChildInput=!0,e.cueBallSpot=new Phaser.Sprite(game,0,0,"cueBallSpot"),e.spinSetter.addChild(e.cueBallSpot),e.cueBallSpot.anchor=new Point(.5,.5),e.spinSetterZoom=new Phaser.Sprite(game,0,0,"spinSetterZoom"),e.guiCanvas.addChild(e.spinSetterZoom),e.spinSetterZoom.anchor=new Point(.5,.5),e.spinSetterZoom.inputEnabled=!0,e.spinSetterZoom.ignoreChildInput=!0,e.cueBallSpotZoom=new Phaser.Sprite(game,0,0,"cueBallSpotZoom"),e.spinSetterZoom.addChild(e.cueBallSpotZoom),e.cueBallSpotZoom.anchor=new Point(.5,.5),e.spinSetterZoom.visible=!1,e.rackSolids=new Phaser.Group(game,e.guiCanvas,"rackSolids"),e.rackBGSolids=new Phaser.Sprite(game,0,0,"rackBG"),e.rackSolids.addChild(e.rackBGSolids),e.rackBGSolids.x=1,e.rackBGSolids.y=0,e.rackBGSolids.anchor=new Point(.5,1),e.rackSolidsArray=new Array,e.rackSpotNumberArray=new Array;for(var i=0;i<7;i++)e.rackSolidsArray[i]=new Phaser.Sprite(game,0,0,"guiSolids",i),e.rackSolids.addChild(e.rackSolidsArray[i]),e.rackSolidsArray[i].x=50*i-200,e.rackSolidsArray[i].y=7,e.rackSolidsArray[i].anchor=new Point(0,1),e.rackSolidsArray[i].visible=!1,e.rackSpotNumberArray[i+1]=e.rackSolidsArray[i];e.rackSolids8ball=new Phaser.Sprite(game,0,0,"8ball"),e.rackSolids.addChild(e.rackSolids8ball),e.rackSolids8ball.x=-185,e.rackSolids8ball.y=-11,e.rackSolids8ball.anchor=new Point(0,1),e.rackSolids8ball.visible=!1,e.rackStripes=new Phaser.Group(game,e.guiCanvas,"rackStripes"),e.rackBGStripes=new Phaser.Sprite(game,0,0,"rackBG"),e.rackStripes.addChild(e.rackBGStripes),e.rackBGStripes.x=1,e.rackBGStripes.y=0,e.rackBGStripes.anchor=new Point(.5,1),e.rackStripesArray=new Array;for(i=0;i<7;i++){e.rackStripesArray[i]=new Phaser.Sprite(game,0,0,"guiStripes",i),e.rackStripes.addChild(e.rackStripesArray[i]),e.rackStripesArray[i].x=50*i-200,e.rackStripesArray[i].y=7,e.rackStripesArray[i].anchor=new Point(0,1),e.rackStripesArray[i].visible=!1,e.rackSpotNumberArray[i+9]=e.rackStripesArray[i]}if(e.rackStripes8ball=new Phaser.Sprite(game,0,0,"8ball"),e.rackStripes.addChild(e.rackStripes8ball),e.rackStripes8ball.x=-185,e.rackStripes8ball.y=-11,e.rackStripes8ball.anchor=new Point(0,1),e.rackStripes8ball.visible=!1,e.turnArrow1=new Phaser.Sprite(game,0,0,"turnArrow"),e.guiCanvas.addChild(e.turnArrow1),e.turnArrow1.anchor=new Point(.5,1),e.turnArrow1.scale=new Point(.5,.5),e.turnArrow2=new Phaser.Sprite(game,0,0,"turnArrow"),e.guiCanvas.addChild(e.turnArrow2),e.turnArrow2.anchor=new Point(.5,1),e.turnArrow2.scale=new Point(-.5,.5),e.humanIcon=new Phaser.Sprite(game,0,0,"humanIcon"),2==projectInfo.mode){(l=new Phaser.BitmapText(game,124,-(e.humanIcon.height-204),"font7","1",80)).anchor=new Phaser.Point(.5,.5),l.tint=0,e.humanIcon.addChild(l)}if(e.guiCanvas.addChild(e.humanIcon),e.humanIcon.anchor=new Point(0,1),e.humanIcon.scale=new Point(.5,.5),1==projectInfo.mode)e.aiIcon=new Phaser.Sprite(game,0,0,"aiIcon");else{e.aiIcon=new Phaser.Sprite(game,0,0,"humanIcon"),(c=new Phaser.BitmapText(game,124,-(e.humanIcon.height-81),"font7","2",80)).anchor=new Phaser.Point(.5,.5),c.tint=0,e.aiIcon.addChild(c)}e.guiCanvas.addChild(e.aiIcon),e.aiIcon.anchor=new Point(1,1),e.aiIcon.scale=new Point(.5,.5),e.guiPanel1=new Phaser.Sprite(game,0,0,"guiPanel1"),e.guiBaseCanvas.addChild(e.guiPanel1),e.guiPanel1.anchor.x=1,e.guiPanel1.anchor.y=1,e.guiPanel2=new Phaser.Sprite(game,0,0,"guiPanel1"),e.guiBaseCanvas.addChild(e.guiPanel2),e.guiPanel2.anchor.x=.5,e.guiPanel2.anchor.y=1,e.guiPanel3=new Phaser.Sprite(game,0,0,"guiPanel1"),e.guiBaseCanvas.addChild(e.guiPanel3),e.guiPanel3.anchor.x=0,e.guiPanel3.anchor.y=1,e.timerText=new Phaser.BitmapText(game,0,0,"font7","0:00",56),e.guiCanvas.addChild(e.timerText),e.timerText.anchor.x=.5,e.timerText.anchor.y=1,window.gi=e,e.scoreText=new Phaser.BitmapText(game,0,0,"font7",projectInfo.score,56),e.guiCanvas.addChild(e.scoreText),e.scoreText.anchor.x=.5,e.scoreText.anchor.y=1,e.multiplierText=new Phaser.BitmapText(game,0,0,"font7","x"+e.multiplier,56),e.guiCanvas.addChild(e.multiplierText),e.multiplierText.anchor.x=.5,e.multiplierText.anchor.y=1,2==projectInfo.mode&&(e.timerText.visible=!1,e.scoreText.visible=!1,e.multiplierText.visible=!1);e.menuButton=new Phaser.Button(game,0,0,"menuButton",n,this,1,0,1),e.menuButton.scale=new Phaser.Point(.5,.5),e.guiCanvas.addChild(e.menuButton),e.menuButton.anchor=new Phaser.Point(.5,0),game.device.touch&&(e.powerBar=new Phaser.Group(game,e.guiCanvas,"powerBar"),e.powerBarBG=new Phaser.Sprite(game,0,0,"powerBarBG"),e.powerBarBG.anchor=new Point(.5,.5),e.powerBar.addChild(e.powerBarBG),e.powerBarBase=new Phaser.Sprite(game,0,-13,"powerBarBase"),e.powerBarBase.anchor=new Point(.5,.5),e.powerBar.addChild(e.powerBarBase),e.powerBarMask=game.add.graphics(e.powerBar.x,e.powerBar.y),e.powerBarBase.mask=e.powerBarMask,e.powerBarTop=new Phaser.Sprite(game,0,-13,"powerBarTop"),e.powerBarTop.anchor=new Point(.5,.5),e.powerBar.addChild(e.powerBarTop),e.powerBarCue=new Phaser.Sprite(game,250,13,"cue"),e.powerBar.addChild(e.powerBarCue),e.powerBarCue.anchor=new Point(1,.5),e.powerBarCueMask=game.add.graphics(e.powerBar.x,e.powerBar.y),e.powerBarCue.mask=e.powerBarCueMask);e.gameOverPanel=new Phaser.Group(game,e.guiCanvas,"gameOverPanel"),e.gameOverPanel.anchor=new Point(.5,.5),e.gameOverPanel.visible=!1,e.gameOverPanelBG=new Phaser.Sprite(game,0,0,"panel3"),e.gameOverPanelBG.anchor=new Point(.5,.5),e.gameOverPanel.addChild(e.gameOverPanelBG),e.gameOverWindow=new Phaser.Sprite(game,-180,-201,"guiPanel2"),e.gameOverPanel.addChild(e.gameOverWindow),e.aiWin=new Phaser.Sprite(game,0,0,"aiWin"),e.aiWin.scale=new Phaser.Point(.5,.5),e.aiWin.anchor=new Phaser.Point(.6,.6),e.gameOverPanel.addChild(e.aiWin),e.aiWin.visible=!1,e.playerWin=new Phaser.Sprite(game,0,0,"playerWin"),e.playerWin.scale=new Phaser.Point(.5,.5),e.playerWin.anchor=new Phaser.Point(0,0),e.gameOverPanel.addChild(e.playerWin),e.playerWin.visible=!1,e.GOscoreIcon=new Phaser.Sprite(game,-78,-180,"score"),e.GOscoreIcon.anchor=new Phaser.Point(.5,.1),e.GOscoreIcon.scale=new Phaser.Point(.45,.45),e.gameOverPanel.addChild(e.GOscoreIcon),e.GOhighScoreIcon=new Phaser.Sprite(game,270,-256,"highScore"),e.GOhighScoreIcon.anchor=new Phaser.Point(.5,.25),e.GOhighScoreIcon.scale=new Phaser.Point(.5,.5),e.gameOverPanel.addChild(e.GOhighScoreIcon),e.GOaiLevel=new Phaser.Sprite(game,70,-5,"aiLevel"),e.GOaiLevel.anchor=new Phaser.Point(.5,.5),e.GOaiLevel.scale=new Phaser.Point(.8,.8),e.gameOverPanel.addChild(e.GOaiLevel),e.GOclockIcon=new Phaser.Sprite(game,-180,-5,"clockIcon"),e.GOclockIcon.anchor=new Phaser.Point(.5,.5),e.GOclockIcon.scale=new Phaser.Point(.55,.55),e.gameOverPanel.addChild(e.GOclockIcon);let s={x:-140,y:-120};var l;e.p1Icon=new Phaser.Sprite(game,s.x,s.y,"humanIcon"),e.p1Icon.anchor=new Phaser.Point(.5,.5),e.p1Icon.scale=new Phaser.Point(.5,.5),e.gameOverPanel.addChild(e.p1Icon),(l=new Phaser.BitmapText(game,-4,81,"font7","1",80)).anchor=new Phaser.Point(.5,.5),l.tint=0,e.p1Icon.addChild(l),(u=new Phaser.Sprite(game,-128,-128,"rosette")).anchor=new Phaser.Point(.5,.5),u.scale=new Phaser.Point(1,1),e.p1Icon.addChild(u),e.p1Icon.rosette=u,e.p1Icon.visible=!1;let p={x:140,y:-120};var c,u;e.p2Icon=new Phaser.Sprite(game,p.x,p.y,"humanIcon"),e.p2Icon.anchor=new Phaser.Point(.5,.5),e.p2Icon.scale=new Phaser.Point(.5,.5),e.gameOverPanel.addChild(e.p2Icon),(c=new Phaser.BitmapText(game,-4,81,"font7","2",80)).anchor=new Phaser.Point(.5,.5),c.tint=0,e.p2Icon.addChild(c),(u=new Phaser.Sprite(game,-128,-128,"rosette")).anchor=new Phaser.Point(.5,.5),u.scale=new Phaser.Point(1,1),e.p2Icon.addChild(u),e.p2Icon.rosette=u,e.p2Icon.visible=!1,e.gameOverPanel.text1=new Phaser.BitmapText(game,0,-180,"font7","xxx",56),e.gameOverPanel.text2=new Phaser.BitmapText(game,0,-209,"font7","xxx",56),e.gameOverPanel.text3=new Phaser.BitmapText(game,-110,-28,"font7","xxx",56),e.gameOverPanel.text4=new Phaser.BitmapText(game,135,-28,"font7","xxx",56),e.gameOverPanel.addChild(e.gameOverPanel.text1),e.gameOverPanel.addChild(e.gameOverPanel.text2),e.gameOverPanel.addChild(e.gameOverPanel.text3),e.gameOverPanel.addChild(e.gameOverPanel.text4);e.quitButton2=new Phaser.Button(game,90,170,"quitButton",r,this,1,0,1),e.quitButton2.anchor=new Phaser.Point(.5,.5),e.quitButton2.scale=new Phaser.Point(.5,.5),e.gameOverPanel.addChild(e.quitButton2),e.replayButton=new Phaser.Button(game,-90,170,"replayButton",o,this,1,0,1),e.replayButton.anchor=new Phaser.Point(.5,.5),e.replayButton.scale=new Phaser.Point(.5,.5),e.gameOverPanel.addChild(e.replayButton),e.quitButton2.input.enabled=!1,e.replayButton.input.enabled=!1,e.popUpPanel=new Phaser.Group(game,e.guiCanvas,"popUpPanel"),e.popUpPanel.anchor=new Point(.5,.5),e.popUpPanel.visible=!1,e.popUpPanelBG=new Phaser.Sprite(game,0,0,"panel2"),e.popUpPanelBG.scale=new Point(.75,1),e.popUpPanelBG.anchor=new Point(.5,.5),e.popUpPanel.addChild(e.popUpPanelBG),e.playButtonPU=new Phaser.Button(game,0,0,"playButton",a,this,1,0,1,0),e.playButtonPU.scale=new Point(.75,.75),e.popUpPanel.addChild(e.playButtonPU),e.playButtonPU.anchor=new Phaser.Point(.5,.5),e.quitButtonPU=new Phaser.Button(game,-57,0,"quitButton",r,this,1,0,1,0),e.popUpPanel.addChild(e.quitButtonPU),e.quitButtonPU.anchor=new Phaser.Point(.5,.5),e.quitButtonPU.scale=new Phaser.Point(.5,.5),e.replayButtonPU=new Phaser.Button(game,-170,0,"replayButton",o,this,1,0,1,0),e.popUpPanel.addChild(e.replayButtonPU),e.replayButtonPU.anchor=new Phaser.Point(.5,.5),e.replayButtonPU.scale=new Phaser.Point(.5,.5),e.muteButtonPU=new Phaser.Button(game,57,0,"muteButton",t,this,1,0,1,0),e.popUpPanel.addChild(e.muteButtonPU),e.muteButtonPU.anchor=new Phaser.Point(.5,.5),e.muteButtonPU.scale=new Phaser.Point(.5,.5),1==Sound.slave?e.muteButtonPU.setFrames(1,0,1,0):e.muteButtonPU.setFrames(3,2,3,2);e.quitButtonPU.input.enabled=!1,e.replayButtonPU.input.enabled=!1,e.playButtonPU.input.enabled=!1,e.muteButtonPU.input.enabled=!1,e.muteButtonPU.visible=!famobi.hasFeature("external_mute"),e.foulWindow=new Phaser.Group(game,e.guiCanvas,"foulWindow"),e.foulWindow.visible=!1,e.foulWindow.background=new Phaser.Sprite(game,0,0,"foulDisplay"),e.foulWindow.addChild(e.foulWindow.background),e.foulWindow.background.anchor=new Point(.5,.5),e.foulWindow.display1=new Phaser.Sprite(game,-172,-126,"illegalContacts"),e.foulWindow.addChild(e.foulWindow.display1);var h=new Phaser.Sprite(game,e.foulWindow.display1.width/2,e.foulWindow.display1.height/2+20,"cross");h.anchor=new Point(.5,0),e.foulWindow.display1.addChild(h),e.foulWindow.display2=new Phaser.Sprite(game,-172,30,"illegalContacts"),e.foulWindow.addChild(e.foulWindow.display2);var d=new Phaser.Sprite(game,e.foulWindow.display2.width/2,e.foulWindow.display2.height/2+20,"tick");d.anchor=new Point(.5,0),e.foulWindow.display2.addChild(d),e.foulWindow.display3=new Phaser.Sprite(game,0,0,"illegalShots"),e.foulWindow.addChild(e.foulWindow.display3),e.foulWindow.display3.anchor=new Point(.5,.5),e.foulWindow.display4=new Phaser.Sprite(game,0,0,"illegalBreak"),e.foulWindow.addChild(e.foulWindow.display4),e.foulWindow.display4.anchor=new Point(.5,.5),e.foulWindow.highlight=new Phaser.Sprite(game,-262,-237,"foulHighlight"),e.foulWindow.addChild(e.foulWindow.highlight),1==projectInfo.tutorial&&(game.device.touch,e.menuButton.visible=!1,e.turnArrow1.visible=!1,e.turnArrow2.visible=!1,e.humanIcon.visible=!1,e.aiIcon.visible=!1,e.rackSolids.visible=!1,e.rackStripes.visible=!1,e.spinSetter.visible=!1)}(),e.cueShadow=new Phaser.Sprite(game,0,0,"cueShadow"),e.cueCanvas.addChild(e.cueShadow),e.cueShadow.anchor=new Point(1,8/53),e.cue=new Phaser.Sprite(game,0,0,"cue"),e.cueCanvas.addChild(e.cue),e.cue.anchor=new Point(1,.5),function(){this.contactEvent=new Phaser.Signal,this.contactEvent.add(onContact,this)}(),function(){e.phys=new billiardPhysics(this.contactEvent,e.ballArray,e.lineArray,e.vertexArray,e.pocketArray,0),e.phys.friction=e.friction,e.phys.ballRadius=e.ballRadius,e.phys.pocketRadius=e.pocketRadius,e.phys.physScale=e.physScale,e.phys.minVelocity=e.minVelocity,e.phys.cushionRestitution=e.cushionRestitution,e.phys.ballRestitution=e.ballRestitution}(),renderScreen(),function(){e.levelText=new Phaser.BitmapText(game,0,-100,"font1",projectInfo.level,48),e.timerCanvas.addChild(e.levelText),e.levelText.anchor.x=.5,e.levelText.anchor.y=.5,e.levelText.alpha=.2,e.successIcon=new Phaser.Sprite(game,0,0,"success"),e.timerCanvas.addChild(e.successIcon),e.successIcon.visible=!1,e.successIcon.anchor=new Point(.5,.5),e.successIcon.alpha=.25,1==projectInfo.tutorial&&(e.levelText.visible=!1);e.levelText.visible=!1}(),1==projectInfo.tutorial&&(game.device.touch?(e.hand=new Phaser.Sprite(game,0,0,"hand"),e.tutCanvas.addChild(e.hand),e.hand.alpha=0):(e.mouseSprite=new Phaser.Sprite(game,0,0,"mouseSprite"),e.tutCanvas.addChild(e.mouseSprite),e.mouseSprite.alpha=0,e.mouseSprite.anchor=new Point(1,-.5))),"none"==projectInfo.lastBreaker?Math.random()<.5?(e.turn="p1",e.turnArrow1.frame=1,e.turnArrow2.frame=0):(e.turn="p2",e.turnArrow1.frame=0,e.turnArrow2.frame=1):"p2"==projectInfo.lastBreaker?(e.turn="p1",e.turnArrow1.frame=1,e.turnArrow2.frame=0):(e.turn="p2",e.turnArrow1.frame=0,e.turnArrow2.frame=1),function(){e.skipText=new Phaser.BitmapText(game,game.world.centerX,game.world.centerY+230,"font3","Click to skip",64),e.guiCanvas.addChild(e.skipText),e.skipText.anchor.x=.5,e.skipText.anchor.y=.5,e.skipText.alpha=.8,projectInfo.tutorial&&(e.skipText.visible=!0);e.skipText.visible=!1}(),function(){e.tutorialText=new Phaser.BitmapText(game,0,0,"font3","Tutorial",78),e.guiCanvas.addChild(e.tutorialText),e.tutorialText.anchor.x=.5,e.tutorialText.anchor.y=.5,e.tutorialText.alpha=.8,projectInfo.tutorial&&(e.tutorialText.visible=!0);e.tutorialText.visible=!1}(),resizeGame(),e.gameRunning=!0},playState.resumeGame=function(){var e=this.gameInfo;1!=e.gameOver&&(window.famobi_analytics.trackScreen("SCREEN_LEVEL"),e.gameRunning=!0),e.popUpPanel.visible=!1,e.quitButtonPU.input.enabled=!1,e.replayButtonPU.input.enabled=!1,e.playButtonPU.input.enabled=!1,e.muteButtonPU.input.enabled=!1},playState.shutdown=function(){var e=this.gameInfo;e.gameCanvas.destroy(),e.guiCanvas.destroy(),e.guiBaseCanvas.destroy(),e.cueBaseCanvas.destroy()}; --------------------------------------------------------------------------------