forked from sent/waves
298 lines
9.3 KiB
JavaScript
298 lines
9.3 KiB
JavaScript
// Determine if browser is mobile
|
|
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 = 700;
|
|
const CANVAS_HEIGHT = 500;
|
|
const FPS = 40;
|
|
const BAR_HEIGHT = 50;
|
|
const BAR_TEXT_FIX = 10;
|
|
const TILE_SIZE = 25;
|
|
const KEY_SIZE = 15;
|
|
const TILES_X = 28;
|
|
const TILES_Y = 20;
|
|
const PLAYER_SIZE = 17.5;
|
|
const ENEMY_SIZE = 10.3;
|
|
const ENEMY_SIZE_HIT = 7.8;
|
|
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 = .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 = 50;
|
|
const RAINBOW_SPEED = 0.02;
|
|
const WALLS_PURPLE = 30;
|
|
const WALLS_RED = 40;
|
|
const TOTAL_LEVELS = 50;
|
|
const MENU_IMG_WIDTH = 700;
|
|
const MENU_IMG_HEIGHT = 500;
|
|
const DOOR_OPEN_SPEED = 0.025;
|
|
|
|
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 img_mainMenu_moreGames;
|
|
var loadedImages = 0;
|
|
var totalImagesSet = 1;
|
|
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 sfx_door;
|
|
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 = 700;
|
|
var canvasHeight = 500;
|
|
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 = 3;
|
|
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 cheat_levelsDone = LS_ALL_TOT;
|
|
var coinsSave = [-99];
|
|
var keysSave = [-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;
|
|
}
|
|
|
|
// convert width, height for scaling
|
|
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; |