// Oncanoid created in 2025 // Code & Gfx: Dennis Lange // Web: http://www.lumalab.net // Audio: Jerome Froese // Web: http://www.moonpop.org var ncanvas=document.getElementById("ocanvas");var displayContext=ncanvas.getContext("2d");var ROWS=16;var COLUMNS=9;var ALLBRICKS=ROWS*COLUMNS;var BRICK_XOFFSET=70;var BRICK_YOFFSET=80;var LEVEL=12;var BRICK_WIDTH=42;var BRICK_HEIGHT=18;var PADS=3;var componentSpeed=5;var velocity;var colDirection=0;var gcd=false;var waa=false;var wkaa=false;var aExt;var respond=1;var currentLevel=1;var lastInjectBall=0;var bricksInLevel=0;var score=0;var lastscore=0;var nanopads=PADS;var withCursor="";var cursorblink=0;var keybuffer="";var keycom="";var kblength="";var hsInserted=false;var act=false;var fps=24;var audioSys=1;var option="menu";var debounce=0;var framefak;var varx;var vary;var deltaStep;var pause=0;var injectorAlter=false;var injectorPC=0;var balls=5;var lostball=false;var bcol=0;var pointerOffset=0,injectorOffset=0,posOffset=0;var w=window,d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0];var xWin=w.innerWidth||e.clientWidth||g.clientWidth,yWin=w.innerHeight||e.clientHeight||g.clientHeight;var scaleX;var scaleY;var tempX=0;var tempY=0;var mouseX=-32;var mouseY=-32;var mousePressed=false;var canvasXSize=800;var canvasYSize=600;var scrollY=-600;var padYOffset=32;var xWinCenter=xWin/2;var yWinCenter=yWin/2;var xCanvasCenter=canvasXSize/2;var yCanvasCenter=canvasYSize/2;var xCanvasStart=xWinCenter-xCanvasCenter;var yCanvasStart=canvasYSize-padYOffset;var mouseStartXPos=xCanvasStart;var mouseStartYPos=yCanvasStart;var bp,p;var tempX=50;var x=10;var y=10;var type=0;var lastCalledTime=0;var lastUpdateTime=0;var curFPS=0;var fpsNow=1;var fpsNum=1;var fpsTick=1;var fpsAdd=30;var fpsAverage=30;var brickField=new Array(LEVEL);for(i=0;i0)addAudioTags();if(getCookie("music")==null){setCookie("music","on",1000);}if(getCookie("audioSys")==null){setCookie("audioSys","on",1000);}if(getCookie("audioSys")=="on"){audioSys=getAudioSys();}else {audioSys=0;} var audioCon;var gainNode;let sample;audioSys=getAudioSys();if(audioSys==2){audioCon=new AudioContext();gainNode=audioCon.createGain();waa=true;}else if(audioSys==3){audioCon=new webkitAudioContext();gainNode=audioCon.createGain();wkaa=true;}else if(audioSys==1){waa=wkaa=false;} var channel_max=8;audiochannel=new Array();for(a=0;a1){fetch('audio/'+s+'.ogg').then(response=>response.arrayBuffer()).then(arrayBuffer=>audioCon.decodeAudioData(arrayBuffer)).then(audioBuffer=>{sample=audioCon.createBufferSource();sample.buffer=audioBuffer;sample.connect(audioCon.destination);sample.start();}).catch(e=>console.log('sry'));}} if(audioSys>0){st1Audio=new Audio('audio/amintro.'+aExt);st2Audio=new Audio('audio/amgame.'+aExt); pAudio=st2Audio;pAudio.addEventListener('ended',loopMusic,false); if(audioSys>0){if(getCookie("music")!="off"){pAudio.play();}}} function loopMusic(){pAudio.currentTime=0;if(getCookie("music")!="off"){pAudio.play();}} function requestAnimFrame(){if(!lastCalledTime){lastCalledTime=new Date().getTime();fps=0;return;}delta=(new Date().getTime()-lastCalledTime)/1000;lastCalledTime=new Date().getTime();fps=Math.round(1/delta);return fps;} function deltaMove(){currentTime=new Date().getTime();delta=currentTime-lastUpdateTime;if(!lastUpdateTime){delta=33;}lastUpdateTime=new Date().getTime();return delta;} function padXRange(tempX){if(tempX<=18)tempX=18;if(tempX>=524)tempX=524;return tempX;} function bscroll(scrollY){if(scrollY>=0)scrollY=-600;scrollY=scrollY+1;return scrollY;} function flipPointer(){if(pointerOffset<=-416)pointerOffset=0;pointerOffset=pointerOffset-32;return pointerOffset;} function flipPos(){if(posOffset<=-416)posOffset=0;posOffset=posOffset-32;return posOffset;} function flipBrick(i){if(nBrick[i].clip<=-588){nBrick[i].clip=-588;nBrick[i].fade=false;}nBrick[i].clip=nBrick[i].clip-42;} function flipInjector(){pause++;if(pause==2){if(injectorAlter){injectorPC++;}else {injectorPC--;}if(injectorPC<1){injectorAlter=true;}if(injectorPC>13){injectorAlter=false;}injectorOffset=injectorPC*-28;pause=0;}return injectorOffset;} function checkBallPos(cur){var ds;if(bp<=14)ds=10;if(bp>=580)ds=-10;return ds;} function colbox(x,y,w,h){this.x=x;this.y=y;this.w=w;this.h=h;} function butbox(x,y,w,h,a,pa){this.x=x;this.y=y;this.w=w;this.h=h;this.a=a;this.pa=pa;} function brickbox(){this.x=x;this.y=y;this.w=BRICK_WIDTH;this.h=BRICK_HEIGHT;this.act=false;this.type=0;this.clip=0;this.fade=false;} brickbox.prototype.setXPos=function(bx){this.x=bx;} function dball(dx,dy,degree,act){this.x=x;this.y=y;this.w=16;this.h=16;this.dx=dx;this.dy=dy;this.degree=degree;this.act=false;} dball.prototype.wallCollision=function(){if(this.x<=14)this.dx=Math.floor((Math.random()*5)+1);if(this.y<=14)this.dy=Math.floor((Math.random()*5)+1);if(this.x>=576)this.dx=-Math.floor((Math.random()*5)+1);if(this.y>=576)this.dy=-Math.floor((Math.random()*5)+1);} dball.prototype.interCollision=function(){acol=false;return acol;} dball.prototype.changeDirection=function(){this.dx=this.dx*-1;this.dy=this.dy*-1;} function checkCollision(cola,colb){var leftA,leftB;var rightA,rightB;var topA,topB;var bottomA,bottomB; leftA=cola.x;rightA=cola.x+cola.w;topA=cola.y;bottomA=cola.y+cola.h; leftB=colb.x;rightB=colb.x+colb.w;topB=colb.y;bottomB=colb.y+colb.h; if(rightA<=leftB){return false;}if(leftA>=rightB){return false;}if(bottomA<=topB){return false;}if(topA>=bottomB){return false;}colDirection=0;if(rightA>rightB){colDirection=colDirection+1;}if(bottomA>bottomB){colDirection=colDirection+2;}if(leftA0){nBrick[brickCounter].x=((BRICK_WIDTH+10)*colCounter)+6+BRICK_XOFFSET;nBrick[brickCounter].y=((BRICK_HEIGHT)*rowCounter)+BRICK_YOFFSET;nBrick[brickCounter].act=true;nBrick[brickCounter].fade=false;nBrick[brickCounter].type=brickField[level][brickCounter];nBrick[brickCounter].clip=0;}brickCounter++;}} bricksInLevel=0;for(i in nBrick){if(nBrick[i].act)bricksInLevel++;}} var pad_xoffset=-10;function initBalls(){ for(i=1;i<=2;i++){nBall[i]=new dball();nBall[i].dx=0;nBall[i].dy=0;nBall[i].degree=0;nBall[i].act=false;nBall[i].x=i*40;nBall[i].y=-34;nBall[i].n=i;}} function initBackground(){for(i=1;i<=50;i++){nBall[i]=new dball();nBall[i].x=Math.floor((Math.random()*528)+1);nBall[i].y=Math.floor((Math.random()*528)+1);nBall[i].dx=Math.floor((Math.random()*componentSpeed)+1);nBall[i].dy=Math.floor((Math.random()*componentSpeed)+1); nBall[i].act=true;nBall[i].n=i;}} function injectBall(){var idx,idy,degree;lastInjectBall++;nBall[lastInjectBall]=new dball();nBall[lastInjectBall].x=injectorRecoil.x+7;nBall[lastInjectBall].y=injectorRecoil.y;nBall[lastInjectBall].act=true;if(injectorPC<=1)injectorPC=1;degree=180+(injectorPC*12);idx=Math.floor(componentSpeed*cosTable[degree]);idy=Math.floor(componentSpeed*sinTable[degree]);nBall[lastInjectBall].dx=+idx;nBall[lastInjectBall].dy=+idy;nBall[lastInjectBall].degree=degree;} function initDimension(){w=window,d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],xWin=w.innerWidth||e.clientWidth||g.clientWidth,yWin=w.innerHeight||e.clientHeight||g.clientHeight; xWinCenter=xWin/2;yWinCenter=yWin/2; vdxWin=(yWin/3)*4;vdxWinCenter=vdxWin/2; document.getElementById("centered").style.marginTop="-"+yWinCenter.toString()+"px";document.getElementById("centered").style.marginLeft="-"+vdxWinCenter.toString()+"px"; document.getElementById("ocanvas").style.height=yWin.toString()+"px";document.getElementById("ocanvas").style.width=vdxWin.toString()+"px"; scaleX=vdxWin/800;scaleY=yWin/600; xCanvasCenter=canvasXSize/2;yCanvasCenter=canvasYSize/2; xCanvasStart=xWinCenter-xCanvasCenter;yCanvasStart=canvasYSize-padYOffset; mouseStartXPos=xCanvasStart;mouseStartYPos=yCanvasStart; tempX=padXRange(tempX);scrollY=bscroll(scrollY);} function updateGame(){debounce=debounce+1; if(mousePressed){if(debounce>=5){injectBall();debounce=0;}} for(cur in nBall){ for(i in nBall){if(i !=cur){colDirection=checkCollision(nBall[cur],nBall[i]);if(colDirection){bcol++; bcache=nBall[cur].dy;nBall[cur].dy=nBall[i].dy;nBall[i].dy=bcache;bcache=nBall[cur].dx;nBall[cur].dx=nBall[i].dx;nBall[i].dx=bcache; sia.x=nBall[cur].x;sia.y=nBall[cur].y;sia.h=nBall[cur].h;sia.w=nBall[cur].w;sib.x=nBall[i].x;sib.y=nBall[i].y;sib.h=nBall[i].h;sib.w=nBall[i].w;sia.x+=nBall[cur].dx;sib.x+=nBall[i].dx;sia.y+=nBall[cur].dy;sib.y+=nBall[i].dy;if(checkCollision(sia,sib)){if((nBall[cur].xnBall[i].x)&&(nBall[cur].dx>0))nBall[cur].x=nBall[i].x+nBall[i].w;if((nBall[cur].ynBall[i].y)&&(nBall[cur].dy>0))nBall[cur].y=nBall[i].y+nBall[i].h;} playSound('abrick');}}} for(i in nBrick){if(nBrick[i].act){colDirection=checkCollision(nBall[cur],nBrick[i]);if(colDirection){playSound('abrick');gcd=false;if(colDirection==1){nBall[cur].dx=nBall[cur].dx*-1;gcd=true;}if(colDirection==2){nBall[cur].dy=nBall[cur].dy*-1;gcd=true;}if(colDirection==3){nBall[cur].dx=Math.abs(nBall[cur].dx);nBall[cur].dy=Math.abs(nBall[cur].dy);gcd=true;}if(colDirection==4){nBall[cur].dx=nBall[cur].dx*-1;gcd=true;}if(colDirection==6){nBall[cur].dx=-Math.abs(nBall[cur].dx);nBall[cur].dy=Math.abs(nBall[cur].dy);gcd=true;}if(colDirection==7){nBall[cur].dy=nBall[cur].dy*-1;gcd=true;}if(colDirection==8){nBall[cur].dy=nBall[cur].dy*-1;gcd=true;}if(colDirection==9){nBall[cur].dx=Math.abs(nBall[cur].dx);nBall[cur].dy=-Math.abs(nBall[cur].dy);gcd=true;}if(colDirection==11){nBall[cur].dx=nBall[cur].dx*-1;gcd=true;}if(colDirection==12){nBall[cur].dx=-Math.abs(nBall[cur].dx);nBall[cur].dy=-Math.abs(nBall[cur].dy);gcd=true;}if(colDirection==13){nBall[cur].dy=nBall[cur].dy*-1;gcd=true;}if(colDirection==14){nBall[cur].dx=nBall[cur].dx*-1;gcd=true;}if(!gcd){nBall[cur].dx=nBall[cur].dx*-1;nBall[cur].dy=nBall[cur].dy*-1;}nBrick[i].act=false;nBrick[i].fade=true;nBrick[i].clip=0;bricksInLevel--;score=score+100;}}} if(nBall[cur].x<=14 & nBall[cur].act==true){nBall[cur].dx=Math.abs(nBall[cur].dx);bcol++;}if(nBall[cur].y<=14 & nBall[cur].act==true){nBall[cur].dy=Math.abs(nBall[cur].dy);bcol++;}if(nBall[cur].x>=576){nBall[cur].dx=-Math.abs(nBall[cur].dx);bcol++;}if(nBall[cur].y>=576){nBall[cur].dy=nBall[cur].dy=-Math.abs(nBall[cur].dy);bcol++; nanopads--;lostball=true;}mouseBox.x=tempX,mouseBox.y=mouseStartYPos;mouseBox.h=19;mouseBox.w=70; if(checkCollision(nBall[cur],mouseBox)){nBall[cur].dy=-Math.abs(nBall[cur].dy);nBall[cur].y=mouseStartYPos-nBall[cur].h;bcol++;playSound('apad');} if(checkCollision(nBall[cur],injectorRecoil)){nBall[cur].dy=-Math.abs(nBall[cur].dy);nBall[cur].y=injectorRecoil.y-nBall[cur].h;bcol++;playSound('abrick');} if(nBall[cur].act){framefak=deltaStep/33;varx=nBall[cur].dx*framefak;varx=parseInt(varx);vary=nBall[cur].dy*framefak;vary=parseInt(vary); if(fpsNow>5){nBall[cur].x+=varx;nBall[cur].y+=vary;}}} if(bricksInLevel<=0){playSound('agreat');currentLevel++;if(currentLevel>11)currentLevel=1;initLevel(currentLevel);cur=0;for(cur in nBall){delete nBall[cur];}lastInjectBall=0;initBalls();playSound('astart');} if(lostball){if(nanopads>0){resumeGame();lostball=false;}else {gameOver();lostball=false;}}} function gameOver(){lastscore=score;keybuffer="";score=0;clearLevel();currentLevel=1;initLevel(currentLevel);cur=0;for(cur in nBall){delete nBall[cur];}lastInjectBall=0;initBalls(); initBackground();option="highscore";nanopads=PADS; if(audioSys>0){pAudio.currentTime=0;pAudio.pause();pAudio=st2Audio;if(getCookie("music")!="off"){pAudio.play();}playSound('agameover');}} function resumeGame(){lastscore=score;cbl=Math.floor((Math.random()*2)+1);if(cbl==1){playSound('aohno');}else {playSound('alosepad');} cur=0;for(cur in nBall){delete nBall[cur];}initBalls();bricksInLevel=0;for(cur in nBrick){nBrick[cur].clip=0;if(nBrick[cur].act){bricksInLevel++;}}playSound('astart');} function drawPad(){displayContext.drawImage(padObj,tempX,mouseStartYPos);} function drawInjector(){injectorOffset=flipInjector();injectorContext.clearRect(0,0,28,23);injectorContext.drawImage(injectorObj,injectorOffset,0);injectorRecoil.x=tempX+21;injectorRecoil.y=mouseStartYPos-24;displayContext.drawImage(injectorBuffer,injectorRecoil.x,injectorRecoil.y);} function drawGame(){displayContext.drawImage(scrollObj,7,scrollY);displayContext.drawImage(displayObj,0,0); drawBricks(1);drawPad();drawInjector(); displayContext.font="11pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Player: One",620,27);displayContext.fillText("Score: "+score,620,65);displayContext.fillText("Pads: "+nanopads,620,103);displayContext.fillText("Level: "+currentLevel,620,141); displayContext.fillText("press left",657,432);displayContext.fillText("mousebutton ",647,452);displayContext.fillText("to spawn balls",639,472);displayContext.fillText("or esc",672,492);displayContext.fillText("for menu",662,512); displayContext.font="11pt vera"; drawFps(); for(cur in nBall){displayContext.drawImage(ballObj,nBall[cur].x,nBall[cur].y);}drawPos();} function drawFps(){fpsNow=requestAnimFrame();deltaStep=deltaMove();fpsAdd=parseInt(fpsAdd,10)||0; if(fpsAdd>3000){fpsAdd=30;fpsTick=1;}fpsAdd=fpsAdd+fpsNow;fpsTick=fpsTick+1;fpsAverage=fpsAdd/fpsTick;displayContext.fillText("FPS: "+parseInt(fpsAverage),620,219);} function drawMenu(){debounce=debounce+1; displayContext.drawImage(scrollObj,7,scrollY);displayContext.drawImage(displayObj,0,0); displayContext.font="11pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Player:",620,27);displayContext.fillText("Score:",620,65);displayContext.fillText("Pads:",620,103);displayContext.fillText("Level:",620,141); displayContext.fillText("press F11",652,432);displayContext.fillText("to toggle",656,452);displayContext.fillText("fullscreen ",654,472);displayContext.fillText("waa: "+waa,654,492);displayContext.fillText("wkaa: "+wkaa,654,512); drawFps(); displayContext.font="13pt vera";displayContext.fillStyle="#FFEECC"; displayContext.drawImage(logoObj,68,70); getRIMPos(); if(checkCollision(buttonA,mouseBox)){buttonA.a=b_activeObj;buttonA.pa++;if(buttonA.pa==1){playSound('aknob');}if(mousePressed){if(audioSys>0){if(pAudio.currentTime !=0){pAudio.currentTime=0;}pAudio.pause();pAudio=st1Audio;if(pAudio.currentTime !=0){pAudio.currentTime=0;}if(getCookie("music")!="off"){pAudio.play();}}option="game";playSound('astart');nanopads=PADS;debounce=0;}}else {buttonA.a=b_passiveObj;buttonA.pa=0;}displayContext.drawImage(buttonA.a,buttonA.x,buttonA.y);displayContext.fillText("Start Game",254,265); if(checkCollision(buttonB,mouseBox)){if(mousePressed){if(debounce>=5){option='highscore';initBackground();getScore();debounce=0;mousePressed=false;keybuffer="";}}buttonB.a=b_activeObj;buttonB.pa++;if(buttonB.pa==1){playSound('aknob');}}else {buttonB.a=b_passiveObj;buttonB.pa=0;}displayContext.drawImage(buttonB.a,buttonB.x,buttonB.y);displayContext.fillText("Highscore",260,315); if(checkCollision(buttonC,mouseBox)){if(mousePressed){if(debounce>=5){debounce=0;fadein=0;mousePressed=false;option='options';}}buttonC.a=b_activeObj;buttonC.pa++;if(buttonC.pa==1){playSound('aknob');}}else {buttonC.a=b_passiveObj;buttonC.pa=0;}displayContext.drawImage(buttonC.a,buttonC.x,buttonC.y);displayContext.fillText("Options",268,365); if(checkCollision(buttonD,mouseBox)){if(mousePressed){if(debounce>=5){option='credits';initBackground();debounce=0;}}buttonD.a=b_activeObj;buttonD.pa++;if(buttonD.pa==1){playSound('aknob');}}else {buttonD.a=b_passiveObj;buttonD.pa=0;}displayContext.drawImage(buttonD.a,buttonD.x,buttonD.y);displayContext.fillText("Credits",270,415); drawPointer(); fadein=fadein-0.007; if(fadein>0){faderContext.clearRect(0,0,800,600);faderContext.fillStyle="rgba(0,0,0,"+fadein+")";faderContext.fillRect(0,0,800,600);displayContext.drawImage(buffer,0,0);}} function drawHighscore(){var cur=0; displayContext.drawImage(scrollObj,7,scrollY);displayContext.drawImage(displayObj,0,0); displayContext.font="11pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Player:",620,27);displayContext.fillText("Score:",620,65);displayContext.fillText("Pads:",620,103);displayContext.fillText("Level:",620,141); displayContext.fillText("press esc for",645,432);displayContext.fillText("menu",675,452); drawFps(); for(cur in nBall){framefak=deltaStep/33;varx=nBall[cur].dx*framefak;varx=parseInt(varx);vary=nBall[cur].dy*framefak;vary=parseInt(vary); displayContext.drawImage(ballObj,nBall[cur].x,nBall[cur].y); if(fpsNow>5){nBall[cur].x+=varx;nBall[cur].y+=vary;}nBall[cur].wallCollision();} displayContext.font="13pt vera";displayContext.fillStyle="#FFEECC"; var syoffset var bottomScore; for(i=0;ibottomScore){displayContext.fillText("Enter your nick:",180,515);displayContext.fillText(nullPad(lastscore,10),370,540); cursorblink++;if(cursorblink>5){withCursor=keybuffer+"_";}if(cursorblink==10){cursorblink=0;withCursor=keybuffer;} displayContext.fillText(withCursor,180,540);} if(keycom=="poke"){if(keybuffer==""){keycom="";lastscore=0;}else {reScore(keybuffer,lastscore);keybuffer="";keycom="";lastscore=0;}} displayContext.drawImage(scoreObj,68,70);} function drawCredits(){var cur=0;debounce=debounce+1;if(mousePressed){if(debounce>25){for(cur in nBall){delete nBall[cur];}lastInjectBall=0;initBalls();fadein=0;debounce=0;mousePressed=false;window.open("https://www.paypal.com/donate/?hosted_button_id=JWD4TBPYZGDDL","_blank");option="credits";}} displayContext.drawImage(scrollObj,7,scrollY);displayContext.drawImage(displayObj,0,0);displayContext.font="11pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Player:",620,27);displayContext.fillText("Score:",620,65);displayContext.fillText("Pads:",620,103);displayContext.fillText("Level:",620,141);displayContext.fillText("press esc for",645,432);displayContext.fillText("menu",675,452);drawFps(); displayContext.font="13pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Oncanoid is a lumalab.net & moonpop.org",110,260);displayContext.fillText("game destillation.",110,290);displayContext.fillText("If you like to support this game and get",110,350);displayContext.fillText("your nick or name to this credit page",110,380);displayContext.fillText("you can make a paypal donation of your",110,410);displayContext.fillText("choice.",110,440);displayContext.fillText("For fill in purpose simply use:",110,500);displayContext.fillText("Your nick or name+supports Oncanoid",110,530); displayContext.drawImage(creditsObj,68,70);displayContext.drawImage(donateObj,652,478);getRIMPos();drawPointer();} function drawBalls(){for(cur in nBall){framefak=deltaStep/33;varx=nBall[cur].dx*framefak;varx=parseInt(varx);vary=nBall[cur].dy*framefak;vary=parseInt(vary); displayContext.drawImage(ballObj,nBall[cur].x,nBall[cur].y); if(fpsNow>5){nBall[cur].x+=varx;nBall[cur].y+=vary;}nBall[cur].wallCollision();}} function drawGameOver(){var cur=0;debounce=debounce+1; displayContext.drawImage(scrollObj,7,scrollY);displayContext.drawImage(displayObj,0,0); displayContext.font="11pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Player:",620,27);displayContext.fillText("Score:",620,65);displayContext.fillText("Pads:",620,103);displayContext.fillText("Level:",620,141); displayContext.fillText("Press ESC for",642,422);displayContext.fillText("Menu ",674,442); drawFps(); for(cur in nBall){ framefak=deltaStep/33;varx=nBall[cur].dx*framefak;varx=parseInt(varx);vary=nBall[cur].dy*framefak;vary=parseInt(vary); displayContext.drawImage(ballObj,nBall[cur].x,nBall[cur].y); if(fpsNow>5){nBall[cur].x+=varx;nBall[cur].y+=vary;} nBall[cur].wallCollision(); } displayContext.font="13pt vera";displayContext.fillStyle="#FFEECC"; displayContext.drawImage(gameOverObj,68,200);} function getRIMPos(){padding=(xWin-vdxWin)/2;smouseX=parseInt((mouseX-padding)/scaleX); mouseBox.x=smouseX;mouseBox.y=mouseY/scaleY;mouseBox.h=10;mouseBox.w=10;if(mouseX==-32){mouseBox.x=480,mouseBox.y=260;}} function drawPointer(){pointerOffset=flipPointer();pointerContext.clearRect(0,0,32,32);pointerContext.drawImage(pointerObj,pointerOffset,0);displayContext.drawImage(pointerBuffer,mouseBox.x,mouseBox.y);} function drawPos(){posOffset=flipPos();posContext.clearRect(0,0,32,32);posContext.drawImage(posObj,posOffset,0);displayContext.drawImage(posBuffer,tempX+20,tempY);} function drawBricks(level){for(i=1;i<=ALLBRICKS;i++){if(nBrick[i].act){if(nBrick[i].type==1||nBrick[i].type==6){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickRotRedObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}if(nBrick[i].type==2||nBrick[i].type==7){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickRotOrangeObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}if(nBrick[i].type==3||nBrick[i].type==8){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickRotBlueObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}if(nBrick[i].type==4||nBrick[i].type==9){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickRotGrayObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}}} fadeBricks(level);} function fadeBricks(level){for(i=1;i<=ALLBRICKS;i++){if(nBrick[i].fade){if(nBrick[i].type==1||nBrick[i].type==6){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickScaleRedObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}if(nBrick[i].type==2||nBrick[i].type==7){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickScaleOrangeObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}if(nBrick[i].type==3||nBrick[i].type==8){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickScaleBlueObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}if(nBrick[i].type==4||nBrick[i].type==9){flipBrick(i);brickContext.clearRect(0,0,42,18);brickContext.drawImage(brickScaleGrayObj,nBrick[i].clip,0);displayContext.drawImage(brickBuffer,nBrick[i].x,nBrick[i].y);}}}} function drawOptions(){debounce=debounce+1; displayContext.drawImage(scrollObj,7,scrollY);displayContext.drawImage(displayObj,0,0); displayContext.font="11pt vera";displayContext.fillStyle="#FFEECC";displayContext.fillText("Player:",620,27);displayContext.fillText("Score:",620,65);displayContext.fillText("Pads:",620,103);displayContext.fillText("Level:",620,141); displayContext.fillText("press F11",652,432);displayContext.fillText("to toggle",656,452);displayContext.fillText("fullscreen ",654,472); drawFps(); displayContext.font="13pt vera";displayContext.fillStyle="#FFEECC"; displayContext.drawImage(logoObj,68,70); padding=(xWin-vdxWin)/2;smouseX=parseInt((mouseX-padding)/scaleX);mouseBox.x=smouseX;mouseBox.y=mouseY/scaleY;mouseBox.h=10;mouseBox.w=10;if(mouseX==-32){mouseBox.x=480,mouseBox.y=260;} if(IE){audioSys=0;}var noBrowserOp=(isSafari&&!isChrome||IE);if(noBrowserOp){displayContext.fillText("Sorry,in the moment options only for",124,265);displayContext.fillText("Firefox & Chromium browser!",160,285);}if(!noBrowserOp){if(checkCollision(buttonA,mouseBox)){buttonA.a=b_activeObj;buttonA.pa++;if(buttonA.pa==1)playSound('aknob');if(mousePressed){if(getCookie("music")=="on"){if(debounce>=5){pAudio.pause();setCookie("music","off",1000);debounce=0;}}else {if(debounce>=5){pAudio.play();setCookie("music","on",1000);debounce=0;}}}}else {buttonA.a=b_passiveObj;buttonA.pa=0;}displayContext.drawImage(buttonA.a,buttonA.x,buttonA.y);if(getCookie("music")=="on"){displayContext.fillText("Turn Music Off",235,265);}else {displayContext.fillText("Turn Music On",237,265);}if(checkCollision(buttonB,mouseBox)){buttonB.a=b_activeObj;buttonB.pa++;if(buttonB.pa==1){playSound('aknob');}if(mousePressed){if(getCookie("audioSys")=="on"){if(debounce>=5){audioSys=0;setCookie("audioSys","off",1000);debounce=0;}}else {if(debounce>=5){audioSys=getAudioSys();setCookie("audioSys","on",1000);debounce=0;}}}}else {buttonB.a=b_passiveObj;buttonB.pa=0;}displayContext.drawImage(buttonB.a,buttonB.x,buttonB.y); if(getCookie("audioSys")=="on"){displayContext.fillText("Turn FX Off",252,315);}else {displayContext.fillText("Turn FX On",252,315);}} if(checkCollision(buttonC,mouseBox)){if(mousePressed){if(debounce>=5){option='menu';debounce=0;}}buttonC.a=b_activeObj;buttonC.pa++;if(buttonC.pa==1){playSound('aknob');}}else {buttonC.a=b_passiveObj;buttonC.pa=0;}displayContext.drawImage(buttonC.a,buttonC.x,buttonC.y); displayContext.fillText("Main Menu",252,365); pointerOffset=flipPointer();pointerContext.clearRect(0,0,32,32);pointerContext.drawImage(pointerObj,pointerOffset,0);displayContext.drawImage(pointerBuffer,mouseBox.x,mouseBox.y);} function setCookie(c_name,value,exdays){var exdate=new Date();exdate.setDate(exdate.getDate()+exdays);var c_value=escape(value)+((exdays==null)? "" : ";expires="+exdate.toUTCString());document.cookie=c_name+"="+c_value;} function getCookie(c_name){var i,x,y,ARRcookies=document.cookie.split(";");for(i=0;i0;var isChrome=!isSafari&&testCSS('WebkitTransform');var IE=document.all?true:false;if(IE){audioSys=0;}if(isSafari&&!isChrome){audioSys=0;} initButtons();initInjector();initBalls();initBricks();initLevel(currentLevel);getScore();function appRun(){ switch(option){ case 'highscore': initDimension();drawHighscore();break; case 'menu': initDimension();drawMenu();break; case 'options': initDimension();drawOptions();break; case 'game': initDimension();updateGame();drawGame();break; case 'credits': initDimension();drawCredits();break; case 'over': initDimension();drawGameOver();break;}};initTables();appIntervalID=setInterval(appRun,1000/fps);function getMouseXY(e){if(IE){tempX=event.clientX;tempY=event.clientY;mouseX=event.clientX;mouseY=event.clientY;}else {tempX=e.pageX-mouseStartXPos;tempY=e.pageY;mouseX=e.pageX;mouseY=e.pageY;}return true;} function getTouchXY(e){} function getMouseDown(e){mousePressed=true;return true;} function getMouseUp(e){mousePressed=false;return true;} document.onmousemove=getMouseXY;document.onmousedown=getMouseDown;document.onmouseup=getMouseUp;function getKey(e){var keynum;var keychar;var numcheck; if(window.event){keynum=e.keyCode;}else if(e.which){keynum=e.which;} if(!e.shiftKey&&keynum>=65&&keynum<=90){keynum+=32;} keychar=String.fromCharCode(keynum);if(keynum==16)keychar="";if(keynum==13)keychar="";if(keynum==20)keychar="";if(keynum==8)keychar=""; numcheck="/\d/"; if(keynum==27){currentLevel=1;clearLevel();initLevel(currentLevel);score=0;fadein=0;cur=0;for(cur in nBall){delete nBall[cur];}lastInjectBall=0;initBalls(); if(audioSys>0){if(option=="game"){pAudio.pause();pAudio=st2Audio;pAudio.currentTime=0;if(getCookie("music")!="off"){pAudio.play();}}}option="menu";} keybuffer=keybuffer+keychar;kblength=keybuffer.length;if(kblength>=15){keybuffer=keybuffer.substr(0,15);}if(keynum==8){keybuffer=keybuffer.substr(0,kblength-1);} if(keynum==13){keycom="poke";} return } function reScore(reNick,reScore){if(window.XMLHttpRequest){http=new XMLHttpRequest();}else if(window.ActiveXObject){http=new ActiveXObject("Microsoft.XMLHTTP");} if(http !=null){var param="nick="+reNick+"&score="+reScore;http.open("GET","https://"+window.location.hostname+"/jax/oncanoid/rescore?"+param,true);http.onreadystatechange=scoreResponds;http.setRequestHeader("Content-type","application/x-www-form-urlencoded");http.send(param);}} function getScore(){if(window.XMLHttpRequest){http=new XMLHttpRequest();}else if(window.ActiveXObject){http=new ActiveXObject("Microsoft.XMLHTTP");} if(http !=null){var param="";http.open("GET","https://"+window.location.hostname+"/jax/oncanoid/rescore",true);http.onreadystatechange=scoreResponds;http.setRequestHeader("Content-type","application/x-www-form-urlencoded");http.send(param);}} function scoreResponds(){if(http.readyState==4&&http.status==200){respond=http.responseText;scoreTable=JSON.parse(respond);}}