|
|
|
var mobile = false; |
|
(function (a) { |
|
if ( |
|
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( |
|
a |
|
) || |
|
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( |
|
a.substr(0, 4) |
|
) |
|
) |
|
mobile = true; |
|
})(navigator.userAgent || navigator.vendor || window.opera); |
|
|
|
|
|
window.AudioContext = window.AudioContext || window.webkitAudioContext; |
|
|
|
const CANVAS_WIDTH = 800; |
|
const CANVAS_HEIGHT = 600; |
|
const FPS = 40; |
|
const BAR_HEIGHT = 50; |
|
const BAR_TEXT_FIX = 10; |
|
const TILE_SIZE = 40; |
|
const TILES_X = 20; |
|
const TILES_Y = 15; |
|
const PLAYER_SIZE = 28; |
|
const ENEMY_SIZE = 16.5; |
|
const ENEMY_SIZE_HIT = 12.5; |
|
const COIN_SIZE = 11.5; |
|
const OUTLINE_SIZE = 4; |
|
const PLAYER_SPEED = 3; |
|
const INTERMISSION_TEXT_SPACE = 5; |
|
const INTERMISSION_Y_FIX = 10; |
|
const INTERMISSION_TIMER_TOT = FPS * 2; |
|
const DIE_FADE_SPEED = 0.03; |
|
const RESPAWN_FADE_SPEED = 0.06; |
|
const CHECK_FLASH_FADE_SPEED = 0.03; |
|
const FINISH_LEVEL_TIMER_TOT = FPS * 2; |
|
const COIN_FADE_SPEED = 0.1; |
|
const COIN_SHINE_FREQ = FPS * 4; |
|
const COIN_SHINE_FADE_IN_SPEED = 0.1; |
|
const COIN_SHINE_FADE_OUT_SPEED = 0.05; |
|
const CARVE = Math.floor(PLAYER_SIZE / 2); |
|
const SHADOW_OPACITY = 0.5; |
|
const WIN_LEVEL_FADE_SPEED = 0.02; |
|
const INGAME_MENU_BG_ALPHA = 0.75; |
|
const INSTRUCTIONS_TEXT_SIZE = 24; |
|
const INSTRUCTIONS_Y_0 = BAR_HEIGHT + 40; |
|
const INSTRUCTIONS_Y_1 = INSTRUCTIONS_Y_0 + 33; |
|
const INSTRUCTIONS_TIMER_TOT = FPS * 10; |
|
const INSTRUCTIONS_FADE_IN_SPEED = 0.05; |
|
const INSTRUCTIONS_FADE_OUT_SPEED = 0.02; |
|
const INSTRUCTIONS_WAIT_TIME_TOT = FPS * 3; |
|
const IG_BUTTONS_TOP = 130; |
|
const IG_BTN_TEXT_SIZE = 25; |
|
const IG_BTN_SPACE = 50; |
|
const LS_PAGE_TOT = 18; |
|
const LS_ALL_TOT = 30; |
|
const RAINBOW_SPEED = 0.02; |
|
const WALLS_PURPLE = 20; |
|
const WALLS_RED = 30; |
|
const TOTAL_LEVELS = 30; |
|
const MENU_IMG_WIDTH = 800; |
|
const MENU_IMG_HEIGHT = 500; |
|
|
|
const LINK_STEPHEN = "https://www.youtube.com/user/CoozyMcMillan"; |
|
const LINK_COOLMATH = "http://www.coolmath-games.com/"; |
|
const LINK_SNAYK = "https://snayk.bandcamp.com/"; |
|
|
|
var hideKeys = false; |
|
|
|
var img_mainMenu; |
|
var img_mainMenu_playGame; |
|
var img_mainMenu_loadGame; |
|
var img_mainMenu_levelSelect; |
|
|
|
var loadedImages = 0; |
|
var totalImagesSet = 4; |
|
if (mobile) { |
|
totalImagesSet = 1; |
|
} |
|
const TOTAL_IMAGES = totalImagesSet; |
|
|
|
var keyUp = false; |
|
var keyDown = false; |
|
var keyRight = false; |
|
var keyLeft = false; |
|
|
|
var music; |
|
var sfx_bounce0; |
|
var sfx_bounce1; |
|
var sfx_checkpoint; |
|
var sfx_click; |
|
var sfx_coin; |
|
var sfx_die; |
|
var sfx_win; |
|
var sfx_intermission; |
|
var soundsToMute = []; |
|
const TOTAL_SOUNDS = 9; |
|
var loadedSounds = 0; |
|
var loadBarAlpha = 1; |
|
var loadBarFade = 0.025; |
|
var loadedAssets = 0; |
|
const TOTAL_ASSETS = TOTAL_IMAGES + TOTAL_SOUNDS; |
|
|
|
var FSOn = false; |
|
var canvasWidth = 800; |
|
var canvasHeight = 600; |
|
var level = 1; |
|
var deaths = 0; |
|
var curCheck = 0; |
|
var checkFlashAlpha = 0; |
|
var muteSFX = (muteMusic = false); |
|
var paused = false; |
|
var mouseX = 0, |
|
mouseY = 0; |
|
var mouseDown = false; |
|
var playerAlpha = 1; |
|
var state = null; |
|
var intermissionTimer = 0; |
|
var finishLevelTimer = 0; |
|
var coinShineTimer = 0; |
|
var instructionsTimer = 0; |
|
var instructionsOn = false; |
|
var instructionsWaiting = false; |
|
var instructionsFadingIn = false; |
|
var instructionsFadingOut = false; |
|
var instructionsAlpha = 0; |
|
var cursorType = 0; |
|
var justClicked = false; |
|
var ls_page = 1; |
|
var instrForLevel = null; |
|
var firstTimeOnMainMenu = true; |
|
var invincible = false; |
|
var invincible_permanent = false; |
|
var hotkeyDown_space = false; |
|
var hotkeyDown_m = false; |
|
var hotkeyDown_p = false; |
|
var bouncingEnabled = false; |
|
var gameTimer = 0; |
|
var oldTime = 0; |
|
var pauseTime = 0; |
|
var justLoaded = false; |
|
var justLoadedTimer = false; |
|
var coinsSave = [-99]; |
|
|
|
var finish_title_spacing = 40; |
|
var finish_text_startX = 258; |
|
var finish_text_startY = 150; |
|
var finish_text_speed_max = 2; |
|
var finish_text_speed_inc = 0.2; |
|
var finish_text_staggerFrames = 5; |
|
var finishText = "YOU WIN!"; |
|
var finishTextSpeed = []; |
|
var finish_data_left = 270; |
|
var finish_data_right = 530; |
|
|
|
function LSOnRightPage(page) { |
|
return ls_page == page; |
|
} |
|
|
|
function correctGamePause(val) { |
|
return paused == val; |
|
} |
|
|
|
|
|
function cw(n) { |
|
var rat = canvasWidth / CANVAS_WIDTH; |
|
n *= rat; |
|
return n; |
|
} |
|
|
|
function ch(n) { |
|
var rat = canvasHeight / CANVAS_HEIGHT; |
|
n *= rat; |
|
return n; |
|
} |
|
|
|
function cwh(n) { |
|
if (mobile) { |
|
var w = cw(n); |
|
var h = ch(n); |
|
if (w > h) return h; |
|
else return w; |
|
} else { |
|
return n; |
|
} |
|
} |
|
|
|
function offset(x, y) { |
|
if (mobile) { |
|
if (x == null) { |
|
x = 0; |
|
} |
|
if (y == null) { |
|
y = 0; |
|
} |
|
this.x = x; |
|
this.y = y; |
|
} else { |
|
this.x = 0; |
|
this.y = 0; |
|
} |
|
} |
|
|
|
var os = new offset(); |
|
|
|
function calcOffset() { |
|
if (mobile) { |
|
var trueRatio = CANVAS_WIDTH / CANVAS_HEIGHT; |
|
var curRatio = canvasWidth / canvasHeight; |
|
|
|
if (curRatio > trueRatio) { |
|
os.x = (canvasWidth - cwh(CANVAS_WIDTH)) / 2; |
|
os.y = 0; |
|
} else if (curRatio < trueRatio) { |
|
os.x = 0; |
|
os.y = (canvasHeight - cwh(CANVAS_HEIGHT)) / 2; |
|
} else { |
|
os.x = 0; |
|
os.y = 0; |
|
} |
|
} else { |
|
os.x = 0; |
|
os.y = 0; |
|
} |
|
} |
|
|
|
const WALL_BORDER_TOP = 1; |
|
const WALL_BORDER_BOTTOM = 2; |
|
const WALL_BORDER_RIGHT = 2; |
|
const WALL_BORDER_LEFT = 1; |
|
|
|
const player_size_min = 0.5; |
|
const player_size_max = 2; |
|
|
|
const player_size_min_less = 0.75; |
|
const player_size_max_less = 1.5; |
|
|
|
const player_size_min_less2 = 0.9; |
|
const player_size_max_less2 = 1.2; |
|
|
|
const bounce_0_y_start = -500; |
|
var bounce_0_y_speed = (bounce_0_y_speed_reset = 0); |
|
const bounce_0_y_speed_max = 20; |
|
const bounce_0_y_accel = 0.3; |
|
|
|
var bounce_0_width_speed = (bounce_0_width_speed_reset = 0); |
|
const bounce_0_width_speed_max = 0.05; |
|
const bounce_0_width_accel = 0.0003; |
|
|
|
var bounce_0_height_speed = (bounce_0_height_speed = 0); |
|
const bounce_0_height_speed_max = 0.05; |
|
const bounce_0_height_accel = 0.0006; |
|
|
|
var bounce_1_size_speed = (bounce_1_size_speed_reset = 0.35); |
|
const bounce_1_size_decel = 0.05; |
|
const bounce_1_size_speed_min = 0.025; |
|
|
|
var bounce_2_size_speed = (bounce_2_size_speed_reset = bounce_1_size_speed_min); |
|
const bounce_2_size_accel = bounce_1_size_decel; |
|
const bounce_2_size_speed_max = bounce_1_size_speed; |
|
|
|
var bounce_3_stage = (bounce_3_stage_reset = 0); |
|
var bounce_3_y_speed = (bounce_3_y_speed_start = bounce_3_y_speed_reset = -5); |
|
const bounce_3_y_accel = 1; |
|
const bounce_3_y_speed_max = -10; |
|
|
|
var bounce_3_width_speed = (bounce_3_width_speed_reset = 0); |
|
const bounce_3_width_accel = 0.015; |
|
|
|
var bounce_3_height_speed = (bounce_3_height_speed_reset = 0); |
|
const bounce_3_height_accel = 0.015; |
|
|
|
var bounce_4_size_speed = (bounce_4_size_speed_reset = 0.2); |
|
const bounce_4_size_decel = 0.025; |
|
const bounce_4_size_speed_min = 0.03; |
|
|
|
var bounce_5_size_speed = (bounce_5_size_speed_reset = bounce_4_size_speed_min); |
|
const bounce_5_size_accel = bounce_4_size_decel; |
|
const bounce_5_size_speed_max = bounce_4_size_speed; |
|
|
|
var bounce_6_stage = (bounce_6_stage_reset = 0); |
|
var bounce_6_y_speed = (bounce_6_y_speed_start = bounce_6_y_speed_reset = -2); |
|
const bounce_6_y_accel = 0.75; |
|
const bounce_6_y_speed_max = -5; |
|
|
|
var bounce_6_width_speed = (bounce_6_width_speed_reset = 0); |
|
const bounce_6_width_accel = 0.01; |
|
|
|
var bounce_6_height_speed = (bounce_6_height_speed_reset = 0); |
|
const bounce_6_height_accel = 0.01; |
|
|
|
var bounce_7_size_speed = (bounce_7_size_speed_reset = 0.05); |
|
const bounce_7_size_decel = 0.0005; |
|
const bounce_7_size_speed_min = 0.01; |
|
|
|
var bounce_8_size_speed = (bounce_8_size_speed_reset = bounce_7_size_speed_min); |
|
const bounce_8_size_accel = bounce_7_size_decel; |
|
const bounce_8_size_speed_max = bounce_7_size_speed; |
|
|