/* =================================== * SnowBoard Alley * 2008 * * authors: * Brozek Krzysztof * brozekkk@yahoo.co.uk * Matyasik Kamil * ti_mo_n@yahoo.com * * =================================== */ var strMntxtQQ = new Array("Instructions", "Play", "More Games", "Highscores", "Skip"); var netQQ; // boolean: is netscape? var mnamQQ = 'ziuta78'; // main div's ID var aimgnmQQ = 'A.jpg'; var bgimglnkQQ = 'S.jpg'; // BG image name var spimglnkQQ = 'klatki1.png'; // sprite image name var blimglnkQQ = 'L.png'; // sprite image name var brimglnkQQ = 'B.png'; // sprite image name var spimgQQ = new Image(); // sprite image var brimgQQ = new Image(); // bar image var blimgQQ = new Image(); // ball image var bgWQQ = 320; // background image's width var bgHQQ = 356; // background image's height var maxslotsQQ = 50; // max visible sprite slots //var maxmemslots = 72; // max memory sprite slots //var memimgs = new Array(maxmemslots); // memory sprite slots var imgsQQ = new Array(maxslotsQQ); // sprite slots var sbQQ = new Array(maxslotsQQ); // slot bindings var zQQ; // main div object var gtQQ = 'SnowBoard Alley'; // game title var udQQ = 'undefined'; // string used for many purposes var sinoneQQ = 'none'; var siinliQQ = 'inline'; var pxtxtQQ = 'px'; var pxspcQQ = 'px, '; var pxentQQ = 'px)'; var ydispQQ = 64; var vistxtQQ = 'visible'; var mgtxtQQ = 'sch();'; var end1txtQQ = '")'; var mnutxtQQ = 'mnu'; var nullstrQQ = ''; var cbg0txtQQ = "zQQ == null"; var bodytxtQQ = 'body'; var htmltxtQQ = 'html'; var urltxtQQ = 'url("'; var pbrtxtQQ = 'pbr'; var pbltxtQQ = 'pbl'; var whttxtQQ = 'white'; var cmtxtQQ = 'cm(0);'; var cm2txQQ = 'cm(2);'; var wyptxt1QQ = 'wypas('; var wyptxt2QQ = ');'; var rcttxQQ = 'rect('; var coltxQQ = ', '; var abstxtQQ = 'absolute'; var statxtQQ = 'static'; var adverQQ = 'advertID'; var advimgQQ = 'advimgID'; var hidtxtQQ = 'hidden'; var nsQQ = 'Netscape'; // string used to detect a netscape-type browser var sperrrQQ = 'Sprite data error at index '; // debug error var actQQ = 0; // 0-mainmenu, 1-instructions, 2-game, 3-moregames, 4-highscores var strArrayQQ = new Array(1); var strPartsQQ = new Array(4); var gamestuffQQ = ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ '
 
 
'+strMntxtQQ[4]+'
'+ ''+ ''+ ''+ ''+ '
'+strMntxtQQ[0]+''+strMntxtQQ[1]+'
'+strMntxtQQ[2]+''+strMntxtQQ[3]+'
'; strPartsQQ[0] = 'Something went wrong'; strPartsQQ[1] = ''; strPartsQQ[2] = '
Something went wrong'; strPartsQQ[3] = '
'; var imgcodeQQ = new Array('', 'm'); var dbginfoQQ = new Array('body: [x: ', ', y: ', ', w: ', ', h: ', "]\nhalfW: ", "\nhalfH: "); // =============================================================================== // =============================================================================== // =============================================================================== // =============================================================================== // =============================================================================== // =============================================================================== //array holds frames info retrieved from main graphics image - 0-X of obj, 1-Y of obj, 2-width of obj, 3-height of obj var sprdataQQ = new Array([397, 64, 47, 69], [300, 66, 45, 64], [204, 64, 44, 68], [207, 285, 37, 76], [190, 171, 46, 69], [274, 169, 45, 72], [359, 171, 40, 69], //anim going left(0-2),straight(3),right(4-6) [183, 422, 41, 66], [255, 418, 56, 74], [332, 409, 43, 92], [406, 404, 42, 102], [479, 401, 45, 108], //jump(7-11) [239, 541, 42, 88], [303, 546, 56, 79], [381, 544, 56, 82], [460, 559, 58, 53], [540, 555, 48, 61], [610, 537, 45, 98], //trick(12-22) [678, 553, 48, 65], [748, 560, 58, 52], [828, 544, 66, 84], [917, 549, 59, 72], [998, 554, 41, 63], [721, 273, 76, 121], [643, 273, 76, 121], //tree(left, right)(23-24) [0, 0, 46, 31], [49, 0, 47, 27], [96, 0, 48, 25], //stumps(25-27) [150, 0, 97, 35], [246, 0, 87, 56], //snow drifts(28-29) [684, 116, 33, 27], [736, 116, 28, 27], //bomb(30-31) [684, 176, 20, 20], [716, 176, 20, 20], [743, 176, 20, 20], [767, 176, 20, 20], [798, 176, 20, 20], [828, 176, 20, 20], [853, 176, 20, 20], [882, 176, 20, 20], // bonus1(32-39) [684, 230, 20, 20], [716, 230, 20, 20], [743, 230, 20, 20], [767, 230, 20, 20], [798, 230, 20, 20], [828, 230, 20, 20], [853, 230, 20, 20], [882, 230, 20, 20], // bonus2(40-47) [684, 93, 22, 19], [723, 94, 30, 20], //sbonus(48-49) [768, 121, 25, 19], //life bonus(50) [340, 0, 42, 42], [382, 0, 42, 42], [424, 0, 42, 42], [466, 0, 42, 42], //bomb explosion (51-54) [516, 0, 98, 35], //'level' caption(55) [539, 75, 47, 15], //'score' caption(56) [678, 0, 292, 44], [678, 44, 292, 44], //'game over' caption(57-58) [538, 52, 10, 14], [548, 52, 10, 14], [558, 52, 10, 14], [568, 52, 10, 14], [578, 52, 10, 14], //small numbers 0-9(59-68) [588, 52, 10, 14], [598, 52, 10, 14], [608, 52, 10, 14], [618, 52, 10, 14], [628, 52, 10, 14], [595, 75, 40, 12], //'lives' caption(69) [640, 46, 28, 34], [668, 46, 28, 34], [696, 46, 28, 34], [724, 46, 28, 34], [752, 46, 28, 34], //big numbers 0-9(70-79) [780, 46, 28, 34], [808, 46, 28, 34], [836, 46, 28, 34], [864, 46, 28, 34], [892, 46, 28, 34], [0, 43, 130, 14], [0, 63, 134, 18], [0, 84, 120, 14], [0, 103, 53, 14], //bomb,stump,tree,life caps (80-83) [0, 125, 86, 14], [0, 149, 140, 18], [0, 170, 110, 38] //bonus,sbonus,snow inv caps(84-86) ); // =============================================================================== // =============================================================================== // game variables start var iClLeft = 0; var iClWidth = 0; var iClHeight = 0; var iLeft = 0; var iTop = 0; var iWidth = 0; var iHeight = 0; var ihalfW = 0; var iHalfH = 0; var mX = 0; var mY = 0; var isM = false; var isCl = false; // =============================================================================== //var trees = new Array(56); //array for 14 trees //array for 4 trees 0-active/not,1-x,2-y,3-slot,4-frame var trees = new Array([0, 0, 0, 43, 0], [0, 0, 0, 42, 0], [0, 0, 0, 41, 0], [0, 0, 0, 40, 0]); //array for captions 0-active/not,1-x,2-y,3-slot,4-opacity //0-bomb, 1-stump, 2-tree, 3-life, 4-bonus, 5-sbonus var captions = new Array([0, 0, 0, 26, 100], [0, 0, 0, 25, 100], [0, 0, 0, 24, 100], [0, 0, 0, 23, 100], [0, 0, 0, 22, 100], [0, 0, 0, 21, 100] ); //objects tuff //var no_trees = 0; //number of trees on the screen //objects graphics slots var bomb_slot = 44; var sdrift_slot = 45; var bonus_slot = 46; var sbonus_slot = 47; var life_slot = 48; var stump_slot = 49; //var tree_slot = 41; var go_slot = 0; //'game over' slot var score_slot = 1; //'score' slot var level_slot = 2; //'level' slot var life_cap_slot = 12; //'lives' slot var sc_ds_slot = 3; //score digits slot(3,4,5,6,7) var lf_ds_slot = 8; //life digits slots(8,9) var snow_inv_slot = 20; //'snowboarder invincible' caption var snow_inv_opac = 0; //caption opacity var snow_inv_active = false; var lv_ds_slot = 10; //level digits slot var lvY = 0; //level caption params var lv_active = false; //items coords var bombX = 0; var bombY = 0; var sdriftX = 0; var sdriftY = 0; var stumpX = 0; var stumpY = 0; var bonusX = 0; var bonusY = 0; var sbonusX = 0; var sbonusY = 0; var lifeX = 0; var lifeY = 0; //var treeX = 0; //var treeY = 0; //random vars var life_del = 0; //holds delay for life to appear var life_fr = 0; var sbon_del = 0; //holds delay for super bonus to appear var sbon_fr = 0; var bon_del = 0; //holds delay for bonus to appear var bon_fr = 0; var stump_del = 0; //holds delay for stump to appear var stump_fr = 0; var bomb_del = 0; //holds delay for bomb to appear var bomb_fr = 0; var sd_del = 0; //holds delay for sdrift to appear var sd_fr = 0; var tree_del = 0; //holds delay for tree to appear //var tree_fr = 0; //var trees_no = 0; //var tree_frame = 0; //items states var bmb_active = false; //is bomb on the screen var sd_active = false; //is snow drift on the screen var bon_active = false; //is bonus on the screen var sbon_active = false; //is super bonus on the screen var lf_active = false; //is bonus life on the screen var stump_active = false; //is stump on the screen //var tree_active = false; //if tree is on the screen //items anim var var bon_start = 0; //bonus first anim frame var bon_end = 0; //bonus last anim frame var bon_cur = 0; //bonus cur anim frame var tree_y_offs = 0; //y offset between trees var bomb_cur = 0; //bomb cur frame var bomb_anim_forw = 0; //bomb explosion anim goes forward/backward //var cur_tree_slot; //cur free slot for tree var life_opac = 0; //life image opacity var bonus_opac = 0; //bonus image opacity var sbonus_opac = 0; //super bonus image opacity //sizes var TREE_W = 71; var TREE_H = 121; var BOMB_W = 26; var BOMB_H = 26; var sdrift_W = 0; //sdrift width changes var SDRIFT_H = 20; var STUMP_W = 46; var STUMP_H = 25; var BONUS_W = 20; var BONUS_H = 20; var SBONUS_W = 24; var SBONUS_H = 20; var LIFE_W = 25; var LIFE_H = 19; //char stuff var char_slot = 39; //char graph slot var charX = 0; //char X, Y var charY = 0; var charW = 35; //char width and height var charH = 76; var char_velX = 0; //char vert & horiz velocity var char_velY = 0; var cur_frame = 0; //current char frame var state = 0; //char state 0-going straight 1-going left 2-going right 3-going up 4-tricks and 'air stuff' 5-going down var invinc = false; //if char is immortal for a while var inv_fr = 0; //cur inv frame var inv_del = 100; //length of being invinc //game related stuff var k = 0; //frame counter var maxlifes = 5; //max number of lives var lives = 0; //current number of lives var score = 0; //score var inair = false; //if char is in air var lend = 0; //turn left anim end var rend = 6; //turn right anim end var jstart = 7; //jump anim start var jend = 11; //jump anim end var jump = false; //char jumps var jump_dur = 0; //jump duration var MAX_JDUR = 35; //max jump duration(75 frames - 3 seconds) var tr_start = 12; //trick 1 start var tr_end = 22; //trick 1 end var trick = false; //triggers trick anim var trick_anim = false; //trick animation var trick_forw = true; //if trick anim goes forward/backward var crash = false; //character crashes var crash_start = 12; //crash anim start-end var crash_end = 22; var str = 3; //str anim nr var scroll = 0; //screen scroll var max_scroll = 4; var levnum = 0; //level number var lvchge = 250; //amount of score after which lv changes var trick_allow = true; //can we do the trick var j = 0; //another frame counter //var change = false; var lY = 0; var iphone = false; //game runs on iphone //var mode = 0; //mode in which game starts var delay = 0; // game variables end // init game function ig () { //detect iphone if(mobileDevice()) iphone = true; else iphone = true;//was false 060509 //randomize level generation //mode = Math.floor(Math.random() * 2); //objects init ci(bonus_slot, 40); ci(life_slot, 50); ci(level_slot, 55); ci(score_slot, 56); mi(score_slot, 2, 2); si(score_slot, true); ci(go_slot, 57); mi(go_slot, 14, 181); ci(life_cap_slot, 69); mi(life_cap_slot, 257, 2); si(life_cap_slot, true); ci(snow_inv_slot, 86); mi(snow_inv_slot, 105, 3); //turn off digits var x = 0; for(x = 3; x < 7; x++) si(x, false); //trees for(x = 0; x < 4; x++) trees[x][0] = 0; //dectivate all trees /*/ if(mode == 1) { for(x = 0; x < 56; x++) trees[x] = 0; cur_tree_slot = 41; createTrees(); }//**/ //captions for(x = 0; x < 6; x++) captions[x][0] = 0; //dectivate all captions for(x = 80; x < 86; x++) ci(captions[x-80][3], x); //assign images //stump, snow drift, bomb stump_del = 50; sd_del = 20; bomb_del = 100; life_del = 1000; sbon_del = 500; bon_del = 200; //tree_del = 130; //item state bmb_active = sd_active = bon_active = sbon_active = lf_active = stump_active = snow_inv_active = /*tree_active =*/ false; maxlifes = 5; lives = maxlifes; //reset item counters /*no_trees = */ life_fr = sbon_fr = bon_fr = stump_fr = bomb_fr = /*tree_fr = */sd_fr = scroll = levnum = score = snow_inv_opac = life_opac = bonus_opac = sbonus_opac = /*trees_no = */0; //level vars max_scroll = 4; k = 1; lvchge = 250; //character char_velX = char_velY = state = inv_fr = 0; invinc = crash = false; charX = 160; charY = 208; cur_frame = 3; ci(char_slot, cur_frame); mi(char_slot, charX - (charW>>1), charY - (charH>>1)); si(char_slot, true); //show level no lvY = bgHQQ; mi(level_slot, 95, lvY); si(level_slot, true); lv_active = true; //draw all numbers drawNr(levnum + 1, 2); drawNr(score, 0); drawNr(lives, 1); } // main game called until false is returned function mg() { k += (iphone == true ? 2 : 1); //update frame counter according to the device //if mouse is 'on' the screen if (isM && !crash && !isCl) { //char pos update //vertical var midX = (charX + (charW>>1)); var midY = (charY + (charH>>1)); if(mX < midX + 2 && charX > 0) { if(midX + 2 - mX > 40) { char_velX = -4; if(!jump) state = 1; } else char_velX = -2; } else if(mX >= midX + 4 && (charX + charW) < bgWQQ) { if(mX - (midX + 4) >= 40) { char_velX = 4; if(!jump) state = 2; } else char_velX = 2; } else { char_velX = 0; if(!jump) state = 0; } //horizontal if(mY < (midY - 2)) { if(((midY - 2) - mY) > 40) char_velY = -4; else char_velY = -2; } else if(mY >= midY) { if((mY - midY) >= 40) char_velY = 4; else char_velY = 2; } else char_velY = 0; } else { if(char_velX > 0) char_velX--; else if(char_velX < 0) char_velX++; if(char_velY > 0) char_velY--; else if(char_velY < 0) char_velY++; if(!jump && !crash) state = 0; } if(charY + char_velY < 0) { char_velY = 0; charY = 0; } else if((charY + charH + char_velY) > bgHQQ) { char_velY = 0; charY = bgHQQ - charH; } //char pos actualize charX += char_velX; charY += char_velY; //animation update if(k&1 == 1) { if(!jump) { //not in air if(state == 0) { //char going straight if(cur_frame > str) cur_frame--; else if(cur_frame < str) cur_frame++; } else if(state == 1) { //left turn if(cur_frame > lend) cur_frame--; } else if (state == 2) { //right turn if(cur_frame < rend) cur_frame++; } else if(state == 6) { //crash animation if(cur_frame < crash_end) {cur_frame++;} else { //scroll goes down if(scroll > 0 && ((k%5) == 0)) scroll--; else if(scroll == 0) { if(lives == 0) { //GAME OVER if(j > 0) j--; else return false; } else { //reset character charX = 160 - (charW>>1); charY = 208 - (charH>>1); cur_frame = 3; state = 0; crash = false; invinc = true; snow_inv_active = true; snow_inv_opac = 100; co(snow_inv_slot, snow_inv_opac); si(snow_inv_slot, true); } } } } } else { //char is in air if(state == 3) { //jump anim prep if(cur_frame > str) cur_frame--; else if(cur_frame < str) cur_frame++; else { cur_frame = jstart; //char_slot = 41; //tree_slot = 43; //ci(tree_slot, tree_frame); //mi(tree_slot, treeX, treeY); //si(tree_slot, (tree_active == true ? true : false)); state = 4; } } else if(state == 4) { //we are going up and are in the air(3 seconds for tricks) if(cur_frame < jend) cur_frame++; else { //finally in air if(jump_dur < MAX_JDUR) { //while we are still in air //trick handling if(isCl && !trick_anim) { //if mouse clicked and trick not being done if(trick_allow) { //if we can do the trick if((mX >= (charX + (charW>>1)) - 10) && (mX <= (charX + (charW>>1)) + 20)) { if((mY >= (charY + (charH>>1)) - 20) && (mY <= (charY + (charH>>1)) + 20)) { trick_allow = false; lY = mY; } } } } else if(!isCl && !trick_allow && !trick_anim) { if((mX >= (charX + (charW>>1)) - 10) && (mX <= (charX + (charW>>1)) + 20)) { if(mY - lY > 15) {trick_forw = false; trick = true;} else if(lY - mY > 15) {trick_forw = true; trick = true;} } trick_allow = true; } jump_dur++; if(trick && !trick_anim) { //trick is triggered trick_anim = true; trick = false; if(trick_forw) cur_frame = tr_start; else cur_frame = tr_end; } if(trick_anim) { //trick animation if(trick_forw) { //goes forward(first trick) if(cur_frame < tr_end) cur_frame++; else { cur_frame = jend; trick_anim = false; trick_allow = true; score += 5; drawNr(score, 0); } } else { //goes backward(second trick) if(cur_frame > tr_start) cur_frame--; else { cur_frame = jend; trick_anim = false; trick_allow = true; score += 5; drawNr(score, 0); } } } } else {state = 5; jump_dur = 0;} //time to gown down } } else if(state == 5) { //we are going down if(trick_anim) { //if trick's not finished if(trick_forw) { //if anim went forward if(cur_frame < tr_end) cur_frame++; else { cur_frame = jend; trick_anim = false; score += 5; drawNr(score, 0); } } else { //if anim went backward if(cur_frame > tr_start) cur_frame--; else { cur_frame = jend; trick_anim = false; score += 5; drawNr(score, 0); } } } else { //going down anim if(cur_frame > jstart) cur_frame--; else { trick_allow = true; trick_anim = false; trick_time = 0; jump = false; cur_frame = str; //char_slot = 43; //tree_slot = 41; //ci(tree_slot, tree_frame); //mi(tree_slot, treeX, treeY); //si(tree_slot, (tree_active == true ? true : false)); state = 0; } } } } } //OBJECTS //object creation //create bonus life if(!lf_active && life_fr == life_del) { //lifeX = ((mode == 0) ? (Math.floor(Math.random() * (320 - LIFE_W))) : (Math.floor(Math.random() * (180 - LIFE_W)) + 60)); lifeX = Math.floor(Math.random() * (bgWQQ - LIFE_W)); lifeY = bgHQQ + (delay > 0 ? delay : 0); life_opac = 100; co(life_slot, life_opac); mi(life_slot, lifeX, lifeY); si(life_slot, true); lf_active = true; life_fr = 0; life_del = Math.floor(Math.random() * 200) + 800; delay += 30; } //create super bonus if(!sbon_active && sbon_fr == sbon_del) { var temp = Math.floor(Math.random() * 2); //sbonusX = ((mode == 0) ? (Math.floor(Math.random() * (320 - SBONUS_W))) : (Math.floor(Math.random() * (180 - SBONUS_W)) + 60)); //sbonusX = (Math.floor(Math.random() * (180 - SBONUS_W)) + 60); sbonusX = Math.floor(Math.random() * (bgWQQ - SBONUS_W)); sbonusY = bgHQQ + (delay > 0 ? delay : 0); ci(sbonus_slot, (temp > 0 ? 49 : 48)); //if (temp == 0) ci(sbonus_slot, 48); //else if(temp == 1) ci(sbonus_slot, 49); sbonus_opac = 100; co(sbonus_slot, sbonus_opac); mi(sbonus_slot, sbonusX, sbonusY); si(sbonus_slot, true); sbon_active = true; sbon_fr = 0; sbon_del = Math.floor(Math.random() * 100) + 100; delay += 30; } //create bonus if(!bon_active && bon_fr == bon_del) { var temp = Math.floor(Math.random() * 2); //bonusX = ((mode == 0) ? (Math.floor(Math.random() * (320 - BONUS_W))) : (Math.floor(Math.random() * (180 - BONUS_W)) + 60)); //bonusX = (Math.floor(Math.random() * (180 - BONUS_W)) + 60); bonusX = Math.floor(Math.random() * (bgWQQ - BONUS_W)); bonusY = bgHQQ + (delay > 0 ? delay : 0); bon_start = (temp > 0 ? 40 : 32); bon_end = (temp > 0 ? 47 : 39); /*/ if (temp == 0) { bon_start = 32; bon_end = 39; } else if(temp == 1) { bon_start = 40; bon_end = 47; }//**/ bon_cur = bon_start; bonus_opac = 100; ci(bonus_slot, bon_start); co(bonus_slot, bonus_opac); mi(bonus_slot, sbonusX, sbonusY); si(bonus_slot, true); bon_active = true; bon_fr = 0; bon_del = Math.floor(Math.random() * 50) + 100; delay += 30; } //create stump if(!stump_active && stump_fr == stump_del) { var temp = Math.floor(Math.random() * 3); //stumpX = ((mode == 0) ? (Math.floor(Math.random() * (320 - STUMP_W))) : (Math.floor(Math.random() * (180 - STUMP_W)) + 60)); //stumpX = (Math.floor(Math.random() * (180 - STUMP_W)) + 60); stumpX = Math.floor(Math.random() * (bgWQQ - STUMP_W)); stumpY = bgHQQ + (delay > 0 ? delay : 0); if (temp == 0) ci(stump_slot, 25); else if(temp == 1) ci(stump_slot, 26); else if(temp == 2) ci(stump_slot, 27); mi(stump_slot, stumpX, stumpY); si(stump_slot, true); stump_active = true; stump_fr = 0; stump_del = Math.floor(Math.random() * 30) + 40; //randomize new value for stump creation delay += 30; } //create bomb if(!bmb_active && bomb_fr == bomb_del) { //bombX = ((mode == 0) ? (Math.floor(Math.random() * (320 - BOMB_W))) : (Math.floor(Math.random() * (180 - BOMB_W)) + 60)); //bombX = (Math.floor(Math.random() * (180 - BOMB_W)) + 60); bombX = Math.floor(Math.random() * (bgWQQ - BOMB_W)); bombY = bgHQQ + (delay > 0 ? delay : 0); bomb_cur = 30; ci(bomb_slot, bomb_cur); mi(bomb_slot, bombX, bombY); si(bomb_slot, true); bmb_active = true; bomb_fr = 0; bomb_del = Math.floor(Math.random() * 50) + 60; //randomize new value for bomb creation delay += 30; } //create sdrift if(!sd_active && sd_fr == sd_del) { var temp = Math.floor(Math.random() * 2); //ranomize which sdrift will be selected sdrift_W = (temp > 0 ? 87 : 97); ci(sdrift_slot, (temp > 0 ? 29 : 28)); /*/ if(temp == 0) { sdrift_W = 97; ci(sdrift_slot, 28); } else if(temp == 1) { sdrift_W = 87; ci(sdrift_slot, 29); }//**/ //sdriftX = ((mode == 0) ? (Math.floor(Math.random() * (320 - sdrift_W))) : (Math.floor(Math.random() * (180 - sdrift_W)) + 60)); //sdriftX = (Math.floor(Math.random() * (180 - sdrift_W)) + 60); sdriftX = Math.floor(Math.random() * (bgWQQ - sdrift_W)); sdriftY = bgHQQ + (delay > 0 ? delay : 0); mi(sdrift_slot, sdriftX, sdriftY); si(sdrift_slot, true); sd_active = true; sd_fr = 0; sd_del = Math.floor(Math.random() * 100) + 100; //randomize new value for bomb creation delay += 40; } //create tree /*/ if(!tree_active && tree_fr == tree_del) { var temp = Math.floor(Math.random() * 2); //ranomize which sdrift will be selected tree_frame = ((temp > 0) ? 23 : 24); ci(tree_slot, tree_frame); treeX = Math.floor(Math.random() * (bgWQQ - TREE_W)); treeY = bgHQQ + ((delay > 0) ? 30 : 0); mi(tree_slot, treeX, treeY); si(tree_slot, true); tree_active = true; tree_fr = 0; tree_del = Math.floor(Math.random() * 40) + 50; //randomize new value for bomb creation delay += 30; }//**/ if(delay > 0) delay--; //COLLISION if(!jump && !crash) { //if not in air and not crashing var colX1 = charX + 15; var colX2 = (charX + charW) - 15; var colY1 = charY + 15; var colY2 = (charY + charH); //tree collision //if((colX1 < 60 || colX2 > 250) && !invinc) { // crash = true; // activateCaption(2, charX, charY - 15); //} //sdrift collision if(sd_active) { if((colY2 >= sdriftY) && (colY1 <= sdriftY + SDRIFT_H)) { if((colX2 >= sdriftX) && (colX1 <= (sdriftX + sdrift_W))) { jump = true; state = 3; } } } //bonus life collision if(lf_active) { if((colY2 >= lifeY) && (colY1 <= lifeY + LIFE_H)) { if((colX2 >= lifeX) && (colX1 <= (lifeX + LIFE_W))) { lives++; drawNr(lives, 1); lf_active = false; //si(life_slot, false); activateCaption(3, charX, charY - 15); life_opac = 100; co(life_slot, life_opac); } } } //bonus collision if(bon_active) { if((colY2 >= bonusY) && (colY1 <= bonusY + BONUS_H)) { if((colX2 >= bonusX) && (colX1 <= (bonusX + BONUS_W))) { score += 10; drawNr(score, 0); bon_active = false; //si(bonus_slot, false); activateCaption(4, charX, charY - 15); bonus_opac = 100; co(bonus_slot, bonus_opac); } } } //super bonus collision if(sbon_active) { if((colY2 >= sbonusY) && (colY1 <= sbonusY + SBONUS_H)) { if((colX2 >= sbonusX) && (colX1 <= (sbonusX + SBONUS_W))) { score += 20; drawNr(score, 0); sbon_active = false; //si(sbonus_slot, false); activateCaption(5, charX, charY - 15); sbonus_opac = 100; co(sbonus_slot, sbonus_opac); } } } //stump collision if(stump_active && !invinc) { if((colY2 >= stumpY) && (colY1 <= stumpY + STUMP_H)) { if((colX2 >= stumpX) && (colX1 <= (stumpX + STUMP_W))) { crash = true; activateCaption(1, charX, charY - 15); } } } //bomb collision if(bmb_active && !invinc) { if((colY2 >= bombY) && (colY1 <= bombY + BOMB_H)) { if((colX2 >= bombX) && (colX1 <= (bombX + BOMB_W))) { crash = true; bomb_cur = 51; bomb_anim_forw = true; activateCaption(0, charX, charY - 15); } } } //tree collision if(!invinc) { var z = 0; for(z = 0; z < 4; z++) { if(trees[z][0] == 1) { //if tree active if((colY2 >= trees[z][2] + 5) && (colY1 <= ((trees[z][2] + TREE_H) - 10))) { if((colX2 >= trees[z][1] + 10) && (colX1 <= ((trees[z][1] + TREE_W)-10))) { crash = true; activateCaption(2, charX, charY - 15); } } } } } /*/ if(tree_active && !invinc) { if((colY2 >= treeY + 5) && (colY1 <= ((treeY + TREE_H) - 10))) { if((colX2 >= treeX + 10) && (colX1 <= ((treeX + TREE_W)-10))) { crash = true; activateCaption(2, charX, charY - 15); } } }//**/ //crash occured if(crash) { state = 6; cur_frame = crash_start; lives--; drawNr(lives, 1); if(lives == 0) { //set game over si(go_slot, true); j = 25; } } } //invinc update if(invinc && (inv_fr < inv_del)) inv_fr++; else {invinc = false; snow_inv_active = false; si(char_slot, true); inv_fr = 0;} //scroll update if(scroll < max_scroll && !crash && ((k&3) == 1)) scroll++; //level change if(score >= lvchge) { nxtLvl(); lvchge += 250; } //take care of trees //createTree(); if(tree_del > 0) tree_del--; handleTrees(); //take care of captions handleCaptions(); //PAINT if(lf_active) { //paint life bonus if(lifeY >= -LIFE_H) { lifeY -= scroll; mi(life_slot, lifeX, lifeY); } else lf_active = false; //out of screen: die and stop painting } else { life_fr++; //increase frame counter if(life_opac > 0) { lifeY -= scroll; life_opac -= 4; co(life_slot, life_opac); mi(life_slot, lifeX, lifeY); } else si(life_slot, false); } if(sbon_active) { //paint super bonus if(sbonusY >= -SBONUS_H) { sbonusY -= scroll; mi(sbonus_slot, sbonusX, sbonusY); } else sbon_active = false; //out of screen: die and stop painting } else { sbon_fr++; //increase frame counter if(sbonus_opac > 0) { sbonusY -= scroll; sbonus_opac -= 4; co(sbonus_slot, sbonus_opac); mi(sbonus_slot, sbonusX, sbonusY); } else si(sbonus_slot, false); } if(bon_active) { //paint bonus if(bonusY >= -BONUS_H) { bonusY -= scroll; if(k&1 == 1) { //bonus anim if(bon_cur < bon_end) bon_cur++; else bon_cur = bon_start; ci(bonus_slot, bon_cur) ; } mi(bonus_slot, bonusX, bonusY); } else bon_active = false; //out of screen: die and stop painting } else { bon_fr++; //increase frame counter if(bonus_opac > 0) { bonusY -= scroll; bonus_opac -= 4; co(bonus_slot, bonus_opac); mi(bonus_slot, bonusX, bonusY); } else si(bonus_slot, false); } if(stump_active) { //paint stump if(stumpY >= -STUMP_H) { stumpY -= scroll; mi(stump_slot, stumpX, stumpY); } else { //out of screen: die and stop painting stump_active = false; si(stump_slot, false); } } else stump_fr++; //increase frame counter if(bmb_active) { //paint bomb if(bombY >= -BOMB_H) { bombY -= scroll; if(k&1 == 1) { //bomb animation if(bomb_cur > 31) { //boom if(bomb_cur < 54 && bomb_anim_forw) bomb_cur++; //anim goes forw else bomb_anim_forw = false; if(bomb_cur > 51 && !bomb_anim_forw) bomb_cur--; //anim goes backw and ends else if(!bomb_anim_forw && bomb_cur == 51) si(bomb_slot, false); } else { //normal animation if(bomb_cur < 31) bomb_cur++; else bomb_cur = 30; } ci(bomb_slot, bomb_cur); } mi(bomb_slot, bombX, bombY); } else { //out of screen: die and stop painting bmb_active = false; si(bomb_slot, false); } } else bomb_fr++; //increase frame counter if(sd_active) { //paint sdrift if(sdriftY >= -90) { sdriftY -= scroll; mi(sdrift_slot, sdriftX, sdriftY); } else { //out of screen: die and stop painting sd_active = false; si(sdrift_slot, false); } } else sd_fr++; //increase frame counter /*/ if(tree_active) { //paint tree if(treeY >= -TREE_H) { treeY -= scroll; mi(tree_slot, treeX, treeY); } else { //out of screen: die and stop painting tree_active = false; si(tree_slot, false); } } else tree_fr++; //increase frame counter //**/ if(lv_active) { //paint level caption while level changes if (lvY >= -35) { lvY -= (scroll - 1); mi(level_slot, 95, lvY); mi(lv_ds_slot, 197, lvY - 1); } else {si(level_slot, false); si(lv_ds_slot, false);} } /**/ //invincible if(!snow_inv_active) { if(snow_inv_opac > 0) { snow_inv_opac -= 5; co(snow_inv_slot, snow_inv_opac); } } ci(char_slot, cur_frame); mi(char_slot, charX, charY); return true; //else return false; } //------------------------------------------------------------ //additional functions //draws current score/lives number/level number on the screen //type: 0-score, 1-life, 2-levnum function drawNr(number, type) { var i = 0; var temp = number; var dig_no = 0; var count_no = 0; var div = 0; var slot = 0; var x = 0; if(temp >= 10000) {count_no = 5; div = 10000;} else if(temp >= 1000) {count_no = 4; div = 1000;} else if(temp >= 100) {count_no = 3; div = 100;} else if(temp >= 10) {count_no = 2; div = 10;} else {count_no = 1; div = 1;} if(type == 0) {slot = sc_ds_slot; x = 53} else if(type == 1) {slot = lf_ds_slot; x = 298} else if(type == 2) {slot = lv_ds_slot; x = 197} for(i = 0; i < count_no; i++) { if(type != 2) { ci(slot + i, 59+(Math.floor(temp/div))); mi(slot + i, x + (i * 11), 3); } else { ci(slot + i, 70+(Math.floor(temp/div))); mi(slot + i, x + (i * 28), lvY - 1); } si(slot + i, true); temp %= div; div /= 10; } } function nxtLvl() { levnum++; max_scroll++; lvY = bgHQQ; mi(level_slot, 95, lvY); si(level_slot, true); lv_active = true; drawNr(levnum + 1, 2); } /*/ function createTree() { var x = 0; for(x = 0; x < 4; x++) { //check all trees if(trees[x][0] == 0 && trees_no < 3) { //tree not active var temp = Math.floor(Math.random() * 2); //ranomize which sdrift will be selected trees[x][4] = ((temp > 0) ? 23 : 24); ci(trees[x][3], trees[x][4]); trees[x][1] = Math.floor(Math.random() * (bgWQQ - TREE_W)); trees[x][2] = bgHQQ + ((delay > 0) ? delay : 0); mi(trees[x][3], trees[x][1], trees[x][2]); si(trees[x][3], true); trees[x][0] = 1; delay += 100; trees_no++; } } }//**/ //handles tree generation and painting through the game //var tree_del = 0; function handleTrees() { var x = 0; for(x = 0; x < 4; x++) { //check all trees if(trees[x][0] == 1) { //tree not active if(trees[x][2] > -TREE_H) { //act trees pos and paint them trees[x][2] -= scroll; mi(trees[x][3], trees[x][1], trees[x][2]); } else trees[x][0] = 0; //trees_no--; } else if(trees[x][0] == 0 && tree_del == 0) { //tree not active var temp = Math.floor(Math.random() * 2); //ranomize which sdrift will be selected trees[x][4] = ((temp > 0) ? 23 : 24); ci(trees[x][3], trees[x][4]); trees[x][1] = Math.floor(Math.random() * (bgWQQ - TREE_W)); trees[x][2] = bgHQQ + ((delay > 0) ? delay : 0); mi(trees[x][3], trees[x][1], trees[x][2]); si(trees[x][3], true); trees[x][0] = 1; //delay += 60; tree_del = 50; //trees_no++; //alert(delay); } } } //creates all trees in the beginning /*/ function createTrees() { var x = 0; var temp = 0; for(x = 0; x < 56; x+=4) { //check all trees //randomize x(left or right part of screen) if((no_trees&1) == 0) trees[x] = (Math.floor(Math.random() * (60 - TREE_W))); else trees[x] = (Math.floor(Math.random() * (90 - TREE_W)) + 240); trees[x+1] = Math.floor(Math.random() * 11) + (Math.floor(no_trees>>1) * 90); //set Y trees[x+2] = cur_tree_slot; //set slot no temp = Math.floor(Math.random() * 2); //random image(left or rihgt) if (temp == 0) trees[x+3] = 23; else if(temp == 1) trees[x+3] = 24; ci(cur_tree_slot, trees[x+3]); mi(cur_tree_slot, trees[x], trees[x+1]); //set image si(cur_tree_slot, true); //show image cur_tree_slot--; //tree slot goes down no_trees++; } } //handles tree generation and painting through the game function handleTrees() { var x = 0; var temp = 0; for(x = 0; x < 56; x+=4) { //check all trees if(trees[x+1] > -TREE_H) { //act trees pos and paint them trees[x+1] -= scroll; mi(trees[x+2], trees[x], trees[x+1]); } else { //create tree on the bottom of the screen var y = 0; if(trees[x] < 70) trees[x] = (Math.floor(Math.random() * (60 - TREE_W))); else trees[x] = (Math.floor(Math.random() * (90 - TREE_W)) + 240); trees[x+1] = Math.floor(Math.random() * 11) + 520; //set Y temp = Math.floor(Math.random() * 2); //random image(left or right) if (temp == 0) ci(trees[x+2], 23); else if(temp == 1) ci(trees[x+2], 24); trees[x+2] = 28; //new tree slot is the lowest no possible for(y = 0; y < 56; y+=4) { //all slot numbers of all trees++; if((y+2)!=(x+2)) { //except the tree we've just created trees[y+2]++; ci(trees[y+2], trees[y+3]); mi(trees[y+2], trees[y], trees[y+1]); } } } } }//**/ //nr-number of caption to be activated function activateCaption(nr, x, y) { captions[nr][0] = 1; captions[nr][1] = x; captions[nr][2] = y; captions[nr][4] = 100; mi(captions[nr][3], captions[nr][1], captions[nr][2]); si(captions[nr][3], true); } function handleCaptions() { var i = 0; for(i = 0; i < 6; i++) { if(captions[i][0] == 1) { //caption acitve if(captions[i][2] >= -20) { captions[i][2] -= scroll - 2; if(captions[i][4] > 0) { captions[i][4] -= 4; co(captions[i][3], captions[i][4]); } mi(captions[i][3], captions[i][1], captions[i][2]); } else captions[i][0] = 0; //deactivate } } }//**/ // =============================================================================== // =============================================================================== // =============================================================================== // =============================================================================== // =============================================================================== // =============================================================================== // move image function mi(slot, lx, ly) { if ((slot < maxslotsQQ) && (slot >= 0)) { imgsQQ[slot].style.left = (lx-sprdataQQ[sbQQ[slot]][0])+pxtxtQQ; imgsQQ[slot].style.top = (ly-sprdataQQ[sbQQ[slot]][1])+pxtxtQQ; } } function sch() { if (mg() == true) window.setTimeout(mgtxtQQ, 40); else cm(0); } // show image function si(slot, bool) { var tmpb; tmpb = new Boolean(bool); if ((slot < maxslotsQQ) && (slot >= 0)) { imgsQQ[slot].style.display = ((tmpb == true) ? siinliQQ : sinoneQQ); } } // clip image function ci(slot, spr) { if ((spr < sprdataQQ.length) && (slot < maxslotsQQ) && (slot >= 0)) { imgsQQ[slot].style.clip = rcttxQQ+sprdataQQ[spr][1]+pxspcQQ+(sprdataQQ[spr][0]+sprdataQQ[spr][2])+pxspcQQ+(sprdataQQ[spr][1]+sprdataQQ[spr][3])+pxspcQQ+sprdataQQ[spr][0]+pxentQQ; sbQQ[slot] = spr; } } //set obj opacity function co(slot, op) { var o; if ((slot < maxslotsQQ) && (slot >= 0)) { o = imgsQQ[slot].style; o.opacity = (op * 0.01); o.MozOpacity = (op * 0.01); o.KhtmlOpacity = (op * 0.01); o.filter = "alpha(opacity=" + op + ")"; } } // change mode function cm(nm) { var i; if ((nm >= 0) && (nm < 6) && (nm != actQQ)) { if (nm != 3) { if (actQQ == 0) { document.getElementById(mnutxtQQ).style.visibility = hidtxtQQ; zQQ.style.backgroundImage = sinoneQQ; } else if (actQQ == 2) { zQQ.onmousemove = null; zQQ.onmouseup = null; zQQ.onmousedown = null; zQQ.onmouseover = null; zQQ.onmouseout = null; for (i = 0; i < maxslotsQQ; i++) si(i, false); } else if (actQQ == 5) { document.getElementById(adverQQ).style.display = sinoneQQ; } } if (nm == 0) { zQQ.style.backgroundImage = urltxtQQ+bgimglnkQQ+end1txtQQ; document.getElementById(mnutxtQQ).style.visibility = vistxtQQ; } else if (nm == 3) { window.open('../index.php', '_blank'); nm = actQQ; } else if (nm == 2) { ig(); zQQ.onmousemove = mm; zQQ.onmouseover = m_o; zQQ.onmouseup = m_up; zQQ.onmousedown = m_dwn; zQQ.onmouseout = m_u; //document.getElementById(bodytxtQQ).backgroundColor = whttxtQQ; sch(); } else if (nm == 5) { document.getElementById(adverQQ).style.display = siinliQQ; window.setTimeout(cm2txQQ, 5000); } else window.setTimeout(cmtxtQQ, 2000); actQQ = nm; } } // mouse down function m_dwn() { isCl = true; } // mouse up function m_up() { isCl = false; } /*/ function cm(nm) { var i; if ((nm >= 0) && (nm < 5) && (nm != actQQ)) { //alert("actQQ: "+actQQ+", nm: "+nm); if (actQQ == 0) { document.getElementById(mnutxtQQ).style.visibility = hidtxtQQ; zQQ.style.backgroundImage = sinoneQQ; } if (actQQ == 2) { zQQ.onmousemove = null; zQQ.onmouseover = null; zQQ.onmouseout = null; for (i = 0; i < maxslotsQQ; i++) si(i, false); } if (nm == 0) { zQQ.style.backgroundImage = urltxtQQ+bgimglnkQQ+end1txtQQ; document.getElementById(mnutxtQQ).style.visibility = vistxtQQ; } else if (nm == 2) { ig(); zQQ.onmousemove = mm; zQQ.onmouseover = m_o; zQQ.onmouseout = m_u; sch(); } else window.setTimeout(cmtxtQQ, 2000); actQQ = nm; } }//**/ // mousemove function mm(e) { var tmpX; var tmpY; var tmpE; if (!e) tmpE = window.event; else tmpE = e; //alert('mm();'); tmpX = (tmpE.clientX - iLeft); tmpY = (tmpE.clientY - iTop - ydispQQ); if (tmpX < 0) tmpX = 0; if (tmpY < 0) tmpY = 0; if (tmpX > bgWQQ) tmpX = bgWQQ; if (tmpY > (bgHQQ+ydispQQ)) tmpY = (bgHQQ + ydispQQ); mX = tmpX; mY = tmpY; } // mouse click function mck(obj) { //alert('id: "'+obj.id+'"'); cm(parseInt(obj.id.substring(3,4))); } // switch classes function sc(obj, nc) { if (obj.className != nc) obj.className = nc; } function m_o() { isM = true; } function m_u() { isM = false; isCl = false; } /*/ function m_u() { isM = false; }//**/ function isWebKit() { return new RegExp("AppleWebKit/").test(navigator.userAgent); } function isMobile() { return (isWebKit() && new RegExp("Mobile/").test(navigator.userAgent)); } function mobileDevice() { if (!isMobile()) { return null; } var fields = new RegExp("(Mozilla/5.0\\()([^;]+)").exec(navigator.userAgent); if (!fields || fields.length < 3) { return null; } return fields[2]; } function wypas(y, h) { var i, z, t, locB; //alert(''+y); //document.getElementById((pbltxtQQ+i)).style.display = siinliQQ; t = parseInt(h); document.getElementById(mnutxtQQ).style.top = (y+pxtxtQQ); if (t != 0) { if (y > 250) { z = Math.floor(((800 - y) / 46)); document.getElementById((pbltxtQQ+z)).style.display = siinliQQ; } if (y < 250) { for (i = 0; i < 12; i++) { locB = document.getElementById((pbltxtQQ+i)); locB.style.display = sinoneQQ; document.getElementById(pbrtxtQQ).style.display = sinoneQQ; //locB.style.left = (103+(i*10)); } t = 0; } } if (y > 0) window.setTimeout(wyptxt1QQ+(y-15)+coltxQQ+(t)+wyptxt2QQ, 30); else document.getElementById(mnutxtQQ).style.top = (0+pxtxtQQ); } // start function s() { var x = document.getElementById(bodytxtQQ); var y = document.getElementById(htmltxtQQ); var locB, locL, locT, locW, locH; var i, j; if (navigator.appname == nsQQ) { netQQ = true; } else netQQ = false; if (netQQ) { strArrayQQ[0] = (strPartsQQ[0] + strPartsQQ[1]); } else { strArrayQQ[0] = (strPartsQQ[2] + strPartsQQ[3]); } if (x != null) { x.innerHTML = strArrayQQ[0]; document.title = gtQQ; zQQ = document.getElementById(mnamQQ); if (zQQ == null) alert(dbg0txtQQ); else { y.style.overflowX = hidtxtQQ; y.style.overflowY = hidtxtQQ; zQQ.style.backgroundImage = urltxtQQ+bgimglnkQQ+end1txtQQ; zQQ.style.backgroundColor = whttxtQQ; j = nullstrQQ; for (i = 0; i < maxslotsQQ; i++) j += imgcodeQQ[0] + imgcodeQQ[1] + i + imgcodeQQ[2]; zQQ.innerHTML = j + gamestuffQQ; for (i = 0; i < maxslotsQQ; i++) { imgsQQ[i] = document.getElementById((imgcodeQQ[1]+i)); imgsQQ[i].style.zIndex = (maxslotsQQ - i - 1); } locB = window.document.body; locL = locB.clientLeft; locT = locB.clientTop; locW = locB.clientWidth; locH = locB.clientHeight; if ((((nullstrQQ+locL).toString()).toLowerCase()) == udQQ) locL = 0; if ((((nullstrQQ+locT).toString()).toLowerCase()) == udQQ) locT = 0; if ((((nullstrQQ+locW).toString()).toLowerCase()) == udQQ) locW = bgWQQ; if ((((nullstrQQ+locH).toString()).toLowerCase()) == udQQ) locH = bgHQQ; iClLeft = locL = parseInt(locL); iTop = locT = parseInt(locT); iWidth = locW = parseInt(locW); iHeight = locH = parseInt(locH); iHalfW = (iWidth >> 1); iHalfH = (iHeight >> 1); zQQ.style.position = abstxtQQ; iLeft = (((locL + locW) >> 1) - (bgWQQ >> 1)); zQQ.style.left = iLeft + pxtxtQQ; zQQ.style.top = locT + ydispQQ + pxtxtQQ; iClWidth = bgWQQ; iClHeight = bgHQQ; //zQQ.style.height = '356px'; spimgQQ.src = spimglnkQQ; // preaload sprite image blimgQQ.src = blimglnkQQ; // preaload ball image brimgQQ.src = brimglnkQQ; // preaload bar image for (i = 0; i < sprdataQQ.length; i++) { if (sprdataQQ[i].length != 4) { alert(sperrrQQ+i); i = sprdataQQ.length + 1; } } document.getElementById(mnutxtQQ).style.position = abstxtQQ; document.getElementById(mnutxtQQ).style.top = (300+pxtxtQQ); document.getElementById(mnutxtQQ).style.left = (60+pxtxtQQ); window.setTimeout(wyptxt1QQ+(800)+coltxQQ+(1)+wyptxt2QQ, 100); document.getElementById(pbrtxtQQ).style.display = siinliQQ; document.getElementById(advimgQQ).style.display = siinliQQ; document.getElementById(advimgQQ).style.position = statxtQQ for (i = 0; i < 12; i++) { locB = document.getElementById((pbltxtQQ+i)); //locB.style.display = siinliQQ; //locB.style.left = (103+(i*10)); locB.style.left = ((103+(i*10))+pxtxtQQ); } // debug info //alert(dbginfoQQ[0]+iClLeft+dbginfoQQ[1]+iTop+dbginfoQQ[2]+iWidth+dbginfoQQ[3]+iHeight+dbginfoQQ[4]+iHalfW+dbginfoQQ[5]+iHalfH); } } }