<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>DogePunks Invaders</title>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'></script>
<style>
#gameboard {
background-color: black;
}
#game-wrapper {
margin: 0 auto;
width: 500px;
}
body {
background-image: url('https://luminex-public.s3.eu-west-1.amazonaws.com/collections/dogepunks/media/dogepunks-invaders-bg.webp');
}
</style>
</head>
<body>
<br>
<div id='game-wrapper'>
<canvas id='gameboard' width='500' height='500'></canvas>
</div>
<script>
// Global level variable
var level = 1;
var AlienFlock = function AlienFlock() {
this.invulnrable = true;
this.dx = 10;
this.dy = 0;
this.hit = 1;
this.lastHit = 0;
this.speed = 10;
this.draw = function() {};
this.die = function() {
if (Game.board.nextLevel()) {
Game.loadBoard(new GameBoard(Game.board.nextLevel()));
} else {
Game.callbacks['win']();
}
}
this.step = function(dt) {
if (this.hit && this.hit != this.lastHit) {
this.lastHit = this.hit;
this.dy = this.speed;
} else {
this.dy = 0;
}
this.dx = this.speed * this.hit;
var max = {},
cnt = 0;
this.board.iterate(function() {
if (this instanceof Alien) {
if (!max[this.x] || this.y > max[this.x]) {
max[this.x] = this.y;
}
cnt++;
}
});
if (cnt == 0) {
this.die();
}
this.max_y = max;
return true;
};
}
var Alien = function Alien(opts) {
this.flock = opts['flock'];
this.frame = 0;
this.mx = 0;
}
Alien.prototype.draw = function(canvas) {
Sprites.draw(canvas, this.name, this.x, this.y, this.frame);
}
Alien.prototype.die = function() {
GameAudio.play('die');
this.flock.speed += 1;
this.board.remove(this);
}
Alien.prototype.step = function(dt) {
this.mx += dt * this.flock.dx;
this.y += this.flock.dy;
if (Math.abs(this.mx) > 10) {
if (this.y == this.flock.max_y[this.x]) {
this.fireSometimes();
}
this.x += this.mx;
this.mx = 0;
this.frame = (this.frame + 1) % 2;
if (this.x > Game.width - Sprites.map.alien1.w * 2) this.flock.hit = -1;
if (this.x < Sprites.map.alien1.w) this.flock.hit = 1;
}
return true;
}
Alien.prototype.fireSometimes = function() {
if (Math.random() * 100 < 10) {
this.board.addSprite('missile', this.x + this.w / 2 - Sprites.map.missile.w / 2,
this.y + this.h, {
dy: 100
});
}
}
var Player = function Player(opts) {
this.reloading = 0;
}
Player.prototype.draw = function(canvas) {
Sprites.draw(canvas, 'player', this.x, this.y);
}
Player.prototype.die = function() {
GameAudio.play('die');
Game.callbacks['die']();
}
Player.prototype.step = function(dt) {
if (Game.keys['left']) {
this.x -= 100 * dt;
}
if (Game.keys['right']) {
this.x += 100 * dt;
}
if (this.x < 0) this.x = 0;
if (this.x > Game.width - this.w) this.x = Game.width - this.w;
this.reloading--;
// Missiles limit
if (Game.keys['fire'] && this.reloading <= 0 && this.board.missiles < 3 * (1 + (level / 3))) {
GameAudio.play('fire');
this.board.addSprite('missile',
this.x + this.w / 2 - Sprites.map.missile.w / 2,
this.y - this.h, {
dy: -100,
player: true
});
this.board.missiles++;
this.reloading = 10;
}
return true;
}
var Missile = function Missile(opts) {
this.dy = opts.dy;
this.player = opts.player;
}
Missile.prototype.draw = function(canvas) {
Sprites.draw(canvas, 'missile', this.x, this.y);
}
Missile.prototype.step = function(dt) {
this.y += this.dy * dt;
var enemy = this.board.collide(this);
if (enemy) {
enemy.die();
return false;
}
return (this.y < 0 || this.y > Game.height) ? false : true;
}
Missile.prototype.die = function() {
if (this.player) this.board.missiles--;
if (this.board.missiles < 0) this.board.missiles = 0;
this.board.remove(this);
}
var levelData = {
1: [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0]
],
2: [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0],
[0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
],
3: [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
],
4: [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 2, 2, 0, 0, 0, 2, 2, 0, 0],
[0, 2, 1, 1, 2, 0, 2, 1, 1, 2, 0],
[0, 2, 1, 1, 2, 2, 2, 1, 1, 2, 0],
[0, 0, 2, 2, 0, 2, 0, 2, 2, 0, 0],
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
]
};
for (var l = 5; l < 25; l++) {
var level_data = [];
// Generate random levels after level 4
var rows = 11;
var cols = 11;
// var enemySpeed = 50 + 10 * level; // Increase enemy speed with each level
var enemyCount = 0
for (var i = 0; i < rows; i++) {
var enemyRow = [];
for (var j = 0; j < cols; j++) {
var enemyType = Math.floor(Math.random() * 3); // Random enemy type (0, 1, or 2)
if (enemyType > 0) {
enemyCount++;
}
if (enemyCount > 8 * (l * 1.55)) {
enemyType = 0;
}
// var x = 30 + j * 30 + [0, 4, 0][enemyType - 1] * j;
// var y = 30 + i * 30;
// var enemy = new Enemy(enemyType, enemySpeed, x, y);
enemyRow.push(enemyType);
}
level_data.push(enemyRow);
levelData[l] = level_data;
}
};
var Game = new function() {
var KEY_CODES = {
37: 'left',
39: 'right',
32: 'fire'
};
this.keys = {};
this.initialize = function(canvas_dom, level_data, sprite_data, callbacks) {
this.canvas_elem = $(canvas_dom)[0];
this.canvas = this.canvas_elem.getContext('2d');
this.width = $(this.canvas_elem).attr('width');
this.height = $(this.canvas_elem).attr('height');
$(window).keydown(function(event) {
if (KEY_CODES[event.keyCode]) Game.keys[KEY_CODES[event.keyCode]] = true;
});
$(window).keyup(function(event) {
if (KEY_CODES[event.keyCode]) Game.keys[KEY_CODES[event.keyCode]] = false;
});
this.level_data = level_data;
this.callbacks = callbacks;
Sprites.load(sprite_data, this.callbacks['start']);
};
this.loadBoard = function(board) {
Game.board = board;
};
this.loop = function() {
Game.board.step(30 / 1000);
Game.board.render(Game.canvas);
setTimeout(Game.loop, 30);
};
};
var Sprites = new function() {
this.map = {};
this.load = function(sprite_data, callback) {
this.map = sprite_data;
this.image = new Image();
this.image.onload = callback;
this.image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkBAMAAAAxqGI4AAAAKlBMVEUAAAD///9GlUbZAAD///9t///z1uHj///g9fjFxcUA/AD8/PygZQDh//9v4QupAAAABXRSTlP/////APu2DlMAAAF3SURBVHgB7NLBaQMxFIThwbDJ2R0sTgfpIOACdNn7nnzO7bkDbwtuYauM5GGNIPIlvNnwQD9ImZM+JzFedXQMwGFE4+7IK+Q08qq3DjmM2z6M7kiJCLc3QoMvczJ35OPzlA8Rbm+kfliJMCLMG6n/2fWXwB/hIZI3kYi/SfnsRLjdkRwfBqodE2m0F3I+n78ckSGhcYdEpsSr3gJkSES4NcijlFfiLlI4hH+hqZwE/uSJhwzTs1TtiEh5micB2wb8kRwRbglSPjsRbjECbjgj9cNKZMA0IRHhFiCNlMixXQxknjchTxVyuQAwMyBPGTI/kTch8m7sW4osesSMSL6VyHUPJDO3fCmRAlyXHRBTI0bEMiZD7nYrygO5C5GFiCkR2wPZEiLtFMhaFxapCRYWWX8VFFkbhUTWZh3pSEc68qc60hGw+Ai2giM0WEf+H3F4oyM/k969e+PwsESA5wAj7S3hvUCCJaOW3L07TCyRvXv34qglmAAAk810EB8H3DYAAAAASUVORK5CYII=';
};
this.draw = function(canvas, sprite, x, y, frame) {
var s = this.map[sprite];
if (!frame) frame = 0;
canvas.drawImage(this.image, s.sx + frame * s.w, s.sy, s.w, s.h, x, y, s.w, s.h);
};
}
var GameScreen = function GameScreen(text, text2, text_level, callback) {
this.step = function(dt) {
if (Game.keys['fire'] && callback) callback();
};
this.render = function(canvas) {
canvas.clearRect(0, 0, Game.width, Game.height);
var myImage = new Image();
myImage.src = 'data:image/webp;base64,UklGRvQJAABXRUJQVlA4WAoAAAAQAAAAPwAAPwAAQUxQSBcCAAABx8SgbSRHn8wV/oznvmGIiLz4l1cQOZa3VKTSyAmhDqnNQgYNIpaQDscepVLDYI4pt4TbUmnKI8eHyheyJck2bauPbdvXOLZt27Zt2z79uZdzzhiXjxH9T/zbrFzwS73zOjsSckp88MXJBr8iaeKBD5ePNy1FlX1h+AWp+1QchEA+YImq08b4CCfIOja9UH219gqigX031B1n20PQe5gGl10RkCt6pslWGuSaaTIWYQG51Csa7OdYQC7uigYvrdaQcx+hQbc7JGOPqS+GaOgu9fW2kIw4oPZ+NhaSdj3UXVeE2kA0dJSapzJIN1E9W/wR0uVPVMwPl0LerXCcP/c6WOEXOA/z55XXlvgFRbf8+Xm31hbinnNUHkZCPGSHyrt0iOffUV0P6Q8b1Cz6QjZokrrHAojatFM/5gbJiH3qL+MhmXlP/cVnSNbQYNUXkm/3qB+wgWTgNvV1EHXqpe5lKAyyfp3PVL8UQzr1lurrZEjnPVF9/h7SJdRcJ0K6hpq7dEhXUnOTAunwCaq7XSEeuU7VXTrkXaapesyCvNsMVc/5kPdepuqlEOJWYZtUlkLYJ7dr/pbK0VQ/C8g5FszdU3uzVuUEKee2OxrdN9hCxq7pgYYnbyATtE3Ts3eQcRqiaY8zhD4t0Oi50w9iwdVTF9TdrjZ6QNI9rrp/bvPo5Pj7ztJgXYY/xG08/KNivkZ/DfGyxf8MAFZQOCC2BwAAkCMAnQEqQABAAAAAACWUAeBOYHe37keBvxG3v8gXWR+o/Jn+q+831N+Jx0kfMB+qX+0/yvtAepj8JfVN6y30DP4Z/VfS6/Xn4M/21/aD2lrsp+AfhP+lvqn+B/A/w/8E/1g/rmiD+hfw38Lv2Y/vGuBfhX8V/i/4Xfsx/S9EC9FPjP8Q/GX+t/9r/IcYB+AHwD/i38x/FL+s84NQA/hf8c/qP9P/qv9y/qX/v+y79a/tv42f2D2O/kX9D/un8z/ZL+1/YD/DP47/PP6v/d/7v/d/+7++P4q+vr9gPYo/RpLILWma2Vxk1rUqEWeweWUHkfjmGrUtd3RsGxjU1OFeDPjAj3GwYsGGCFILvwTWfhJiuUZKgH6JkceojKZlW2c8u+Bqa0AA/v/fbxH//8W/azLyIYdu8M487EacgAAPbATdZYjdMJBtWah7Ldj9BJn//T0AYgPgaisQDbHJUWzxyyPHQY242Eu4REX8d/QBSV7IO7u88d/N8NUNcqWNRIMztCtobC8KDY8qm3CpBxw9VzNqiYrb0/MspfVUlJrPymMvUQBcxe5kN9w+414RQzdOb0Lmy/tgVc7EJEvBjnLZXwtxQRC3//0prGvYwp5EGEAYiFH2sdhcmbyGhGqfYAJQ5abuFxItS9j3eJEGamZap+xXhkxd/xZiPHKTWcP3aRAg///41sWF816EG98XBou+vhnJLAPap41+79HLEVrnZ3rj7MrkAuCx0RuFy1R/fhlkj60c//X9jVhX/sAHR1Ek9ttynbJ52NG0scRWF6MWrRy7QMInEGpI5AgEPy/j0gGaHMmxYWjODxsnjv1TCfJ5ko5cZNyL5DHFcmkLuml4X4n2GVk2prjNB+yp5pnwkKe6gnKADDTPdBtFb1/YIx9Qx6Nad0mnY+d/heX8L/brWbIpMKRjuWaixORBPBbFe4K8CglFQly3dU8miIG8BcCzC/TK4cIVzvo5YrFPsPNnfeO+hZOONMQ0otsbtIrFFX0Shf7Fg5+o2uszzJ+N8Z4mDBhXPXF16gXDJaOvtF23Niv4Ek1XMC5BCoTYWTy73wspkDyRREimfFmDlmEw//9hybSM8Bfol4kSkErYfcRsGvoUntDXY3k6KOZK9sUoSlmXQ6BXDDtse+/PZqm6leHPFLC9VuXLXrZ6DcyQw+hYr6sWNKp2JHk4zZ+2oH4ITApNloF7VOKBBw6N93mXrK3xMJP3/1+QnkQaJ+/T1//u1I+95l5LAuOJZo2uRWXgiS+T56Ck1dKQOuNY80fc/8Ilj71PLDeYeJ7tOUXxksJxH3Ts6YfZ6l//8EHQ+RQ+G+r5wLuu941OkpoXlS3YHudbISAcHHgJ2Kz38Jp9cA1tqgDNphdMdOvtnjXYHXu6sCfQ5tPMRqgyoxcYIN5ZpXPaWqyZA4aT3w7JnQyXUdeKHL3p6btd359ozC0//sE2sBuOxDHFKv8dp7L5HqWOBXTf6RZd09nV34LtydIUqkw9fIuIFI5VyAXreqffpDnKoX98/EEq1tRP3SEkxHlpAAOmbL4yKf90Xoi0FLd7Q0k1roKXR1kZlOuSd6b5oOazIC0a7aDTrTd5oLsTczJ8S2iWXnpo/zS6uC5YX5gPPugpKFw0RkdosEbTDwjfEr0S5JDczGEgWLqgppJcT8zJdCDzA3lw5uRgMZQBdUuJaweLbwJEY9u8Eg1eznnzgC7irp66iX2QTQ7c9wFP63X7KXvsKfhrsFJ/wFmNqqUqzbOB+iQuzoh03A427kUthq+BNd+6AJKmtLT6Sd1cwlueddlkiLTXKJ6H3bRY1OJGH4s4uIFQTYe3U1ohxZhiCUDeqioBgE8hPHdMMY3ep5yIOp6LTEFc+GW6307757UOroaoQU/0nQkq40RrbQuWO9OJzPtPjm8o0Bxyf/jKb2t48ljeqJX62f7NrKiY8F61I+leVjYGhB9nJTTTWbG1XrVNp6U6MPP8hPMGsXh7QpfaFV78jIsonvWkz1VrLPQ2R3fv/vL3VCLjLCzOkJ9PmNtN85uWaiBKevJ3+K8MQ8P8dHwL9hbyv51IJwvnbUkQIyE1//3HIY4I87Xs0yj84LyUUSlCKB2Gf/9vCUwRU31ebk/nnoimXT1V7b/3y1uJRMShNOWib7jLhT3O/ZcMgJAXzvnts34mA/Ppz//+rSV5dxqiqXf7em5s7l1g0v//0kwY7B+aLQ3qzPt3eAtVZ9XlxTFdWvxzwXYn1XcF/jx4SgEQu9jCxlfIOOPY/EU/79Y1R5figglnt5fqevWAg0Py7kAXd/OtrkoecuMTV2lNORPW9EcP4YdRjmVb7idY9iV2j0f7Jv4fIaApKzorKMow+Wg+WByCrfvu4kZowcoE6h429eAlfXa21/5qAbVLmau2rtTGuSLQzEiH9KSWI+aaagvBZQWqkZVrXk7OTpw6XR0bmCoy//4pYgtfjeWGmxASVUvdb6bCE9Fo8nQMRG40H8A5ItgUKCgaBDWSKnheR8mLVcEn155huPhu5ELpHRVoJR9qBW11q/Q7dknjsA4K///hPl5zDZlo61zK0qlUwdJSlPO8gmKcAEjEEkxT8DjM2ISl9h17HAlI1J5V7epe9WOuX5cWymWt3u3Iur8QwtV2nWmgAAAA'
// Draw the image on the canvas
var imageX = (Game.width - myImage.width) - 70;
var imageY = (Game.height - myImage.height) - 170;
canvas.drawImage(myImage, imageX, imageY);
canvas.font = "bold 40px arial";
var measure = canvas.measureText(text);
canvas.fillStyle = "#FFFFFF";
canvas.fillText(text, Game.width / 2 - measure.width / 2, Game.height / 2);
canvas.font = "bold 20px arial";
var measure2 = canvas.measureText(text2);
canvas.fillText(text2, Game.width / 2 - measure2.width / 2, Game.height / 2 + 40);
canvas.font = "bold 15px arial";
var measure3 = canvas.measureText(text_level);
canvas.fillText(text_level, Game.width / 2 - measure3.width / 2, Game.height / 2 + 75);
canvas.font = "bold 15px arial";
var about = "https://dogepunks.xyz/"
var measure4 = canvas.measureText(about);
canvas.fillText(about, 20, Game.height - 15);
};
};
function Enemy(type, speed, x, y) {
this.type = type;
this.speed = speed;
this.x = x;
this.y = y;
// Additional properties and methods specific to the enemy
}
var GameBoard = function GameBoard(level_number) {
this.removed_objs = [];
this.missiles = 0;
this.level = level_number;
var board = this;
this.add = function(obj) {
obj.board = this;
this.objects.push(obj);
return obj;
};
this.remove = function(obj) {
this.removed_objs.push(obj);
};
this.addSprite = function(name, x, y, opts) {
var sprite = this.add(new Sprites.map[name].cls(opts));
sprite.name = name;
sprite.x = x;
sprite.y = y;
sprite.w = Sprites.map[name].w;
sprite.h = Sprites.map[name].h;
return sprite;
};
this.iterate = function(func) {
for (var i = 0, len = this.objects.length; i < len; i++) {
func.call(this.objects[i]);
}
};
this.detect = function(func) {
for (var i = 0, val = null, len = this.objects.length; i < len; i++) {
if (func.call(this.objects[i])) return this.objects[i];
}
return false;
};
this.step = function(dt) {
this.removed_objs = [];
this.iterate(function() {
if (!this.step(dt)) this.die();
});
for (var i = 0, len = this.removed_objs.length; i < len; i++) {
var idx = this.objects.indexOf(this.removed_objs[i]);
if (idx != -1) this.objects.splice(idx, 1);
}
};
this.render = function(canvas) {
canvas.clearRect(0, 0, Game.width, Game.height);
// Draw the current level text on the top right corner
canvas.font = "bold 23px arial";
canvas.fillStyle = "#FFFFFF";
var levelText = "DogePunks Invaders";
canvas.fillText(levelText, Game.width / 2 + 10 - canvas.measureText(levelText).width - 10, 30);
// Draw the current level text on the top right corner
canvas.font = "bold 20px arial";
canvas.fillStyle = "#FFFFFF";
var levelText = "Level: " + this.level;
canvas.fillText(levelText, Game.width - canvas.measureText(levelText).width - 10, 30);
this.iterate(function() {
this.draw(canvas);
});
};
this.collision = function(o1, o2) {
return !((o1.y + o1.h - 1 < o2.y) || (o1.y > o2.y + o2.h - 1) ||
(o1.x + o1.w - 1 < o2.x) || (o1.x > o2.x + o2.w - 1));
};
this.collide = function(obj) {
return this.detect(function() {
if (obj != this && !this.invulnrable)
return board.collision(obj, this) ? this : false;
});
};
this.loadLevel = function(level) {
this.objects = [];
this.player = this.addSprite('player', // Sprite
Game.width / 2, // X
Game.height - Sprites.map['player'].h - 10); // Y
var flock = this.add(new AlienFlock());
for (var y = 0, rows = level.length; y < rows; y++) {
for (var x = 0, cols = level[y].length; x < cols; x++) {
var alien = Sprites.map['alien' + level[y][x]];
if (alien) {
this.addSprite('alien' + level[y][x], // Which Sprite
(alien.w + 10) * x, // X
alien.h * y, // Y
{
flock: flock
}); // Options
}
}
}
};
this.nextLevel = function() {
level = level_number + 1;
return Game.level_data[level_number + 1] ? (level_number + 1) : false
};
this.loadLevel(Game.level_data[level_number]);
};
var GameAudio = new function() {
this.load_queue = [];
this.loading_sounds = 0;
this.sounds = {};
var channel_max = 10;
audio_channels = new Array();
for (a = 0; a < channel_max; a++) {
audio_channels[a] = new Array();
audio_channels[a]['channel'] = new Audio();
audio_channels[a]['finished'] = -1;
}
this.load = function(files, callback) {
var audioCallback = function() {
GameAudio.finished(callback);
}
for (name in files) {
var filename = files[name];
this.loading_sounds++;
var snd = new Audio();
this.sounds[name] = snd;
snd.addEventListener('canplaythrough', audioCallback, false);
snd.src = filename;
snd.load();
}
};
this.finished = function(callback) {
this.loading_sounds--;
if (this.loading_sounds == 0) {
callback();
}
};
this.play = function(s) {
for (a = 0; a < audio_channels.length; a++) {
thistime = new Date();
if (audio_channels[a]['finished'] < thistime.getTime()) {
audio_channels[a]['finished'] = thistime.getTime() + this.sounds[s].duration * 1000;
audio_channels[a]['channel'].src = this.sounds[s].src;
audio_channels[a]['channel'].load();
audio_channels[a]['channel'].play();
break;
}
}
};
};
var spriteData = {
'alien1': {
sx: 0,
sy: 0,
w: 23,
h: 18,
cls: Alien,
frames: 2
},
'alien2': {
sx: 0,
sy: 18,
w: 23,
h: 18,
cls: Alien,
frames: 2
},
'player': {
sx: 0,
sy: 36,
w: 26,
h: 17,
cls: Player
},
'missile': {
sx: 0,
sy: 86,
w: 3,
h: 14,
cls: Missile
}
}
function startGame() {
var screen = new GameScreen("DogePunks Invaders", "press space to start", "Level: " + level,
function() {
Game.loadBoard(new GameBoard(1));
});
Game.loadBoard(screen);
Game.loop();
}
function endGame() {
var screen = new GameScreen("Game Over", "(press space to restart)", "Level: " + level,
function() {
Game.loadBoard(new GameBoard(1));
});
Game.loadBoard(screen);
}
function winGame() {
var screen = new GameScreen("You Win!", "(press space to restart)", "Level: " + level,
function() {
Game.loadBoard(new GameBoard(1));
});
Game.loadBoard(screen);
}
$(function() {
GameAudio.load({
'fire': 'data:audio/ogg;base64,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',
'die': 'data:audio/ogg;base64,T2dnUwACAAAAAAAAAABexCxRAAAAAJIgdncBHgF2b3JiaXMAAAAAAUSsAAAAAAAAAHcBAAAAAAC4AU9nZ1MAAAAAAAAAAAAAXsQsUQEAAACR37+uEC3//////////////////8kDdm9yYmlzHQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMDkwNzA5AAAAAAEFdm9yYmlzKUJDVgEACAAAADFMIMWA0JBVAAAQAABgJCkOk2ZJKaWUoSh5mJRISSmllMUwiZiUicUYY4wxxhhjjDHGGGOMIDRkFQAABACAKAmOo+ZJas45ZxgnjnKgOWlOOKcgB4pR4DkJwvUmY26mtKZrbs4pJQgNWQUAAAIAQEghhRRSSCGFFGKIIYYYYoghhxxyyCGnnHIKKqigggoyyCCDTDLppJNOOumoo4466ii00EILLbTSSkwx1VZjrr0GXXxzzjnnnHPOOeecc84JQkNWAQAgAAAEQgYZZBBCCCGFFFKIKaaYcgoyyIDQkFUAACAAgAAAAABHkRRJsRTLsRzN0SRP8ixREzXRM0VTVE1VVVVVdV1XdmXXdnXXdn1ZmIVbuH1ZuIVb2IVd94VhGIZhGIZhGIZh+H3f933f930gNGQVACABAKAjOZbjKaIiGqLiOaIDhIasAgBkAAAEACAJkiIpkqNJpmZqrmmbtmirtm3LsizLsgyEhqwCAAABAAQAAAAAAKBpmqZpmqZpmqZpmqZpmqZpmqZpmmZZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZlmVZQGjIKgBAAgBAx3Ecx3EkRVIkx3IsBwgNWQUAyAAACABAUizFcjRHczTHczzHczxHdETJlEzN9EwPCA1ZBQAAAgAIAAAAAABAMRzFcRzJ0SRPUi3TcjVXcz3Xc03XdV1XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVYHQkFUAAAQAACGdZpZqgAgzkGEgNGQVAIAAAAAYoQhDDAgNWQUAAAQAAIih5CCa0JrzzTkOmuWgqRSb08GJVJsnuamYm3POOeecbM4Z45xzzinKmcWgmdCac85JDJqloJnQmnPOeRKbB62p0ppzzhnnnA7GGWGcc85p0poHqdlYm3POWdCa5qi5FJtzzomUmye1uVSbc84555xzzjnnnHPOqV6czsE54Zxzzonam2u5CV2cc875ZJzuzQnhnHPOOeecc84555xzzglCQ1YBAEAAAARh2BjGnYIgfY4GYhQhpiGTHnSPDpOgMcgppB6NjkZKqYNQUhknpXSC0JBVAAAgAACEEFJIIYUUUkghhRRSSCGGGGKIIaeccgoqqKSSiirKKLPMMssss8wyy6zDzjrrsMMQQwwxtNJKLDXVVmONteaec645SGultdZaK6WUUkoppSA0ZBUAAAIAQCBkkEEGGYUUUkghhphyyimnoIIKCA1ZBQAAAgAIAAAA8CTPER3RER3RER3RER3RER3P8RxREiVREiXRMi1TMz1VVFVXdm1Zl3Xbt4Vd2HXf133f141fF4ZlWZZlWZZlWZZlWZZlWZZlCUJDVgEAIAAAAEIIIYQUUkghhZRijDHHnINOQgmB0JBVAAAgAIAAAAAAR3EUx5EcyZEkS7IkTdIszfI0T/M00RNFUTRNUxVd0RV10xZlUzZd0zVl01Vl1XZl2bZlW7d9WbZ93/d93/d93/d93/d939d1IDRkFQAgAQCgIzmSIimSIjmO40iSBISGrAIAZAAABACgKI7iOI4jSZIkWZImeZZniZqpmZ7pqaIKhIasAgAAAQAEAAAAAACgaIqnmIqniIrniI4oiZZpiZqquaJsyq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7rukBoyCoAQAIAQEdyJEdyJEVSJEVyJAcIDVkFAMgAAAgAwDEcQ1Ikx7IsTfM0T/M00RM90TM9VXRFFwgNWQUAAAIACAAAAAAAwJAMS7EczdEkUVIt1VI11VItVVQ9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1TRN0zSB0JCVAAAZAAAjQQYZhBCKcpBCbj1YCDHmJAWhOQahxBiEpxAzDDkNInSQQSc9uJI5wwzz4FIoFURMg40lN44gDcKmXEnlOAhCQ1YEAFEAAIAxyDHEGHLOScmgRM4xCZ2UyDknpZPSSSktlhgzKSWmEmPjnKPSScmklBhLip2kEmOJrQAAgAAHAIAAC6HQkBUBQBQAAGIMUgophZRSzinmkFLKMeUcUko5p5xTzjkIHYTKMQadgxAppRxTzinHHITMQeWcg9BBKAAAIMABACDAQig0ZEUAECcA4HAkz5M0SxQlSxNFzxRl1xNN15U0zTQ1UVRVyxNV1VRV2xZNVbYlTRNNTfRUVRNFVRVV05ZNVbVtzzRl2VRV3RZV1bZl2xZ+V5Z13zNNWRZV1dZNVbV115Z9X9ZtXZg0zTQ1UVRVTRRV1VRV2zZV17Y1UXRVUVVlWVRVWXZlWfdVV9Z9SxRV1VNN2RVVVbZV2fVtVZZ94XRVXVdl2fdVWRZ+W9eF4fZ94RhV1dZN19V1VZZ9YdZlYbd13yhpmmlqoqiqmiiqqqmqtm2qrq1bouiqoqrKsmeqrqzKsq+rrmzrmiiqrqiqsiyqqiyrsqz7qizrtqiquq3KsrCbrqvrtu8LwyzrunCqrq6rsuz7qizruq3rxnHrujB8pinLpqvquqm6um7runHMtm0co6rqvirLwrDKsu/rui+0dSFRVXXdlF3jV2VZ921fd55b94WybTu/rfvKceu60vg5z28cubZtHLNuG7+t+8bzKz9hOI6lZ5q2baqqrZuqq+uybivDrOtCUVV9XZVl3zddWRdu3zeOW9eNoqrquirLvrDKsjHcxm8cuzAcXds2jlvXnbKtC31jyPcJz2vbxnH7OuP2daOvDAnHjwAAgAEHAIAAE8pAoSErAoA4AQAGIecUUxAqxSB0EFLqIKRUMQYhc05KxRyUUEpqIZTUKsYgVI5JyJyTEkpoKZTSUgehpVBKa6GU1lJrsabUYu0gpBZKaS2U0lpqqcbUWowRYxAy56RkzkkJpbQWSmktc05K56CkDkJKpaQUS0otVsxJyaCj0kFIqaQSU0mptVBKa6WkFktKMbYUW24x1hxKaS2kEltJKcYUU20txpojxiBkzknJnJMSSmktlNJa5ZiUDkJKmYOSSkqtlZJSzJyT0kFIqYOOSkkptpJKTKGU1kpKsYVSWmwx1pxSbDWU0lpJKcaSSmwtxlpbTLV1EFoLpbQWSmmttVZraq3GUEprJaUYS0qxtRZrbjHmGkppraQSW0mpxRZbji3GmlNrNabWam4x5hpbbT3WmnNKrdbUUo0txppjbb3VmnvvIKQWSmktlNJiai3G1mKtoZTWSiqxlZJabDHm2lqMOZTSYkmpxZJSjC3GmltsuaaWamwx5ppSi7Xm2nNsNfbUWqwtxppTS7XWWnOPufVWAADAgAMAQIAJZaDQkJUAQBQAAEGIUs5JaRByzDkqCULMOSepckxCKSlVzEEIJbXOOSkpxdY5CCWlFksqLcVWaykptRZrLQAAoMABACDABk2JxQEKDVkJAEQBACDGIMQYhAYZpRiD0BikFGMQIqUYc05KpRRjzknJGHMOQioZY85BKCmEUEoqKYUQSkklpQIAAAocAAACbNCUWByg0JAVAUAUAABgDGIMMYYgdFQyKhGETEonqYEQWgutddZSa6XFzFpqrbTYQAithdYySyXG1FpmrcSYWisAAOzAAQDswEIoNGQlAJAHAEAYoxRjzjlnEGLMOegcNAgx5hyEDirGnIMOQggVY85BCCGEzDkIIYQQQuYchBBCCKGDEEIIpZTSQQghhFJK6SCEEEIppXQQQgihlFIKAAAqcAAACLBRZHOCkaBCQ1YCAHkAAIAxSjkHoZRGKcYglJJSoxRjEEpJqXIMQikpxVY5B6GUlFrsIJTSWmw1dhBKaS3GWkNKrcVYa64hpdZirDXX1FqMteaaa0otxlprzbkAANwFBwCwAxtFNicYCSo0ZCUAkAcAgCCkFGOMMYYUYoox55xDCCnFmHPOKaYYc84555RijDnnnHOMMeecc845xphzzjnnHHPOOeecc44555xzzjnnnHPOOeecc84555xzzgkAACpwAAAIsFFkc4KRoEJDVgIAqQAAABFWYowxxhgbCDHGGGOMMUYSYowxxhhjbDHGGGOMMcaYYowxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGFtrrbXWWmuttdZaa6211lprrQBAvwoHAP8HG1ZHOCkaCyw0ZCUAEA4AABjDmHOOOQYdhIYp6KSEDkIIoUNKOSglhFBKKSlzTkpKpaSUWkqZc1JSKiWlllLqIKTUWkottdZaByWl1lJqrbXWOgiltNRaa6212EFIKaXWWostxlBKSq212GKMNYZSUmqtxdhirDGk0lJsLcYYY6yhlNZaazHGGGstKbXWYoy1xlprSam11mKLNdZaCwDgbnAAgEiwcYaVpLPC0eBCQ1YCACEBAARCjDnnnHMQQgghUoox56CDEEIIIURKMeYcdBBCCCGEjDHnoIMQQgghhJAx5hx0EEIIIYQQOucchBBCCKGEUkrnHHQQQgghlFBC6SCEEEIIoYRSSikdhBBCKKGEUkopJYQQQgmllFJKKaWEEEIIoYQSSimllBBCCKWUUkoppZQSQgghlFJKKaWUUkIIoZRQSimllFJKCCGEUkoppZRSSgkhhFBKKaWUUkopIYQSSimllFJKKaUAAIADBwCAACPoJKPKImw04cIDUGjISgCADAAAcdhq6ynWyCDFnISWS4SQchBiLhFSijlHsWVIGcUY1ZQxpRRTUmvonGKMUU+dY0oxw6yUVkookYLScqy1dswBAAAgCAAwECEzgUABFBjIAIADhAQpAKCwwNAxXAQE5BIyCgwKx4Rz0mkDABCEyAyRiFgMEhOqgaJiOgBYXGDIB4AMjY20iwvoMsAFXdx1IIQgBCGIxQEUkICDE2544g1PuMEJOkWlDgIAAAAAAAEAHgAAkg0gIiKaOY4Ojw+QEJERkhKTE5QAAAAAAOABgA8AgCQFiIiIZo6jw+MDJERkhKTE5AQlAAAAAAAAAAAACAgIAAAAAAAEAAAACAhPZ2dTAADANgAAAAAAAF7ELFECAAAAfusK8kE4NuX51u3t4B0cHR0pLBwcLR4xNDAyMTEvJzMyMTEyNDIzNTg4Mi4xMzI2MzoyMDIxMi8zLjAyHy4yHx0dLTIibXT5dFDZhVQs2sL8Gf9uAuXag6BHU2wsRvTiZ+qG9/97poOjIyzqS4c8uUSVqfES5s1Zv0kCOBIAnPl0vhpDY1ddiBD+FTWCMqrifCZU25A/qb+PwHf8FZgXKlrG2iznyx3Ph0UKR2QiCswnwPUDmjfcCPMwAYsfJPLnFfvD61Ef+aAOZQK9sa2USBrFQghlenMrnD0+mKTrop0/lIfXNj39bwyhtfUqdV02FWVJnfV8XGhZMKBHe/c9slkiW5porQFp/BloN7tKcA6DGnvo7yaov/BZQBE4BZZ3g/kPImYYHnSrdyYXspkny6enikHwCvd9Ldx9RM/Y+vvTcSr7StPnM8H4YrrmkKjYbzl9weGClGrGMqvFCCP1pNELH1ntn6KlYrC9cUilQXerMb5atNa6Mit6HaSzXFZmVwhchAit2w8gqV8gkEeB8tzHdsUsPg4mAN4YzIMIRwGlkRLH3LLovc2ypOWBscuexvJLe5ZJ9WN19fe92R/T3s549d7qQNq/exczLn5+LU0FCSSmW5QB8/TnQy/ooC2Nvd6a5+ZYPAdwFgddOBG+TnOdW++s1Qa8ykRG7qQOCWRDxnHr5cmioBdlZlKtH58R4J61/ohqmEGIhmwiyciT0FBcS9GE88dA8TTHyFXnzfE7KuEBlLa7iqQhhkKxCUI+u17elcceyc/pOQMetBFgdDEpbZib+P1UUwgJEGa2boQoIXf2rRLaw7ZN+L2VIKHSyP7s+6zn49A41KZhYwbLbOslgiS9zCr7JBIY6pDOHKTUAb455AgD8YBbvBjKYVx82/gDNB0YJ9VOlGbNgpmjD1x4Wz/4joe33t/f8j5mTPvs23PaB98rGQbJPhZIK98p85ZZNH/4087zMp9kX4OnMU2+B9/6aYo7O1UFikrQGoBjC6p9gDsUtvfmeW2ZbYCqWzXi0q0UZSdFMcNGp9OJjwdsoXGdzR7OERhnP9MXkFcNLCBqvZzTn+rsspdHWSTLqihfCE4zAlOfq4OiNHJxWmfGtaQNJvpZRgdW3xtUPuilcqVE54gIlaKFBkKn6AXAjRnR2UVX6ABeKvQIg0iBbQkU+HFtllwRDaCrmCaldUKMIcV3t0a7V+22+N7Tm8ert2NvT+/capuvhbL2XPKiUaSCto290rl1gv4hJ2li1DysUXVDdCj4+0Z/u8C94zPRxaEqI1XQmQuj18X7WJAmaFI5TV1td6rtueHMOXpKs+/+QKT3676e361g0t0G6dVa6x7lGcqljvKPJW3cr5BLa5/TpEdx4SQTq3VYZwphLTSG4L7jRQEsBln4qX6MnrT9KhgWKndnhAX4ZFGdPiPjDk0mQVK3v2ktiDBEWnt6Xf6lXGrbC/JI+wrLh3PWujI2IjkYLQA+uzwMBTkcoIF374c3DcAYrmpL1tpF7eiHA5bP7+7a5Is/DqTZPbv2I5rTG2nmWJ7ZrczEVJxMBfP+lkzlaB2y42eTRPIDpbhIN1ZvHnxk4dDaEY+fQjbfErK0NZ3lokCr1WSjhT/xZTEDv9I3oP2gn0/VkULYZXJxMWCyegDAdW4sq9OEnGb+VcWsVsBxDSD9SJGZvgvif1WROgtFAr6Cb0HalnfnPMVtN3myWe69hYM3ssbGboRC91eX3qg5YtQfXlzm/tigC/kK8CcpaA86g/IroeZtuA2ZiYGYip1z+7M6fscy5RcQxV9/0CYWKk2+JpMEvsB779bj7ZLtjWExRGCsqujkqGXNFH0m1+3V63HswMfuz08P59Ru7vGtq8xk289tGoldVnKE4H00mmFJrFxh2lsdUTisaX9VtMji/s5TC0rpN6IK5C/qsVGzr9VPTQ8O4PxTH+K4frU69j//2Ct0RP60TvlVhdHt1YpSmLazbHkc0Yj3uO2JQGH6smxM/Nrr+SWen90sJy0l4VaLEEX1L2bl5bRNy1fzZFJ85HnU4OGn3HscS3M/FqjJlpNJqaiP6shy8YVWS3lgMqlYTgb2blq13h+SnSyAETxmny8gntkwxh0AA5hOoLcvK7IiK/r169evXwIAPGafLyBeYZjiDkCA6QS6+7IiK7KiX79+/brOADxiny8gnlkwxh0AA5hOoLsvK7IiK/r169evXwQAPGKfLyBeIRjjDoABTCfQ05cVWZEV/fr169cvAgAsWuFvgDnCrrYBRkJ5AnnPq6qKRVG0f4bBjFNTM5Haqxet//////8PSGxm68blX7t/cPQNwEiYmMDFOdrkZmzbMVv464UfePY6L5mampqamsL9/PxMTG6fLiA/QzDFfQABpiTQYH5WZEVW9OvXr1/XGVRu3w8Q1zCMOwAATCew+NysWFZVVtXiPW0jnQBsauMFiJGFw8wkE3ADuSXPEGSr9l1Wk0P6sz/ot5yzuh7y+hkcmnNBf+/nV0REYj8PkJ8umDYAAkxOYMvsrKqsqqyqf/u/fY07Kh6MNmEHsMbhj3MLwJ2jp5xMJpPJPOmTPumTPumTPumTJkv87/+f8/7+b/7//895/94BvGZVhnV1/k3XmckBuGOdz7mGWq1W+/t//+9n/uzP/uzP/uzPXsqzPXudl1Cw+PdX//wMAIx205DRgXDYDcCdZQH8PFqlt9pk6f/vseu2ZrV+jVbaOW7ts2aV36OVdtYtdVt2AERKhWRESXFgvgG4Y2WAJRaa3pvJjbrGYI0TPn0AFdXlLzFY44QP9Cuq7WMMFfhLVnYDJEJlB05ywWIDcDz3DeCTo8vVdpaouuFvu866Y1tp1qzWOar4zy1vrbOZip+jit1DABQGddEAoAKmcgbcyOnhhSTX1ohV5XU5VusvT/2Mhxwgs6zhyLocyz7yueZ3J6/hLjvMJd0ADvHBegNwh+kEvhfMWamKpVu+3ZpP8oM1n+QH/ar1g37V+kG/Ktf1q9Y6HewdWQaAA/O4A0gJkxN4ZviAoibbEZ4n8+fJ7p7s7snunuzuye6eAEQWtYMpOE8OypwHkI6lsfON9Xq9/v+HePyTBovF4kH/Itj83yH29/f/7///fx9Se/VyAbReJ8PI4XIXtE8agDuH388aaiTbv1wul8vlw6U1/vr3//6JLi4uLv79hdGDz/7sJVUAtE7lChRYcP/mANKxq61FGu/LkM8vnd09CPLznKcFte5WGv8XXa3OfiIT3w+R4vIxAHQS2QEEKzdQPk7AHeNfFc/mmLR/hfd1bPNygL9/9wDSZxvg7wfKn62WV+DjwhP/rQGcLskEnJgBwpwH4C5aFlt7XBh3t+vy2z+OCtd8+8dRV99e+Yr8i5XTZO5Lst7Xns7aDVRm6wUIYv2gl3EDcOe+AazXIeaZqXhmO8roPnmO+ODPu+5d+RMuzunZ3pnLC61Z7J9h1AA8bmUlrItfp8y2BZAOpYC4grVyy83dafs65G9sJUXkbLmP5nzNu95MHZrzrb2ds+bFDoRiXaTJLT7T2XcAd6wsgL/vUquKmRziONki0PkZY7X93y11W7Na/7lFafsJid1baGR2ACwuPdK+hEtOVtsB3EUtYKqvF1ZkHKGY5pWMscdP/zQGa5zw6Z+RWXX+lyw1sXX5y4jsnnwALEbRqJSefHplpn7IDcDiscmABMsn58jKysp60jOf5Emf9EnX/+/0eX7qGqxXr169Um+TSsTffwA0MpVVU42e30AJwg5gk5MTeHmhosXFxcXF6zXdy329/vt/X9Ez7h8+fLgMHYDNy4cPl/qmxcXrAqQ6FWds1svEn3e/A3DL3IvYnFLXFmeFb2H/e/4XDrvdM36wx1ERZH6+8jdInK7VLZIDXHJbA30thPUO4An7BzB5VVU521c4PWlGzJ3Y+1EfXluhlPUHWg5bs1T81kNlDGxqa+LpksrCVuR/B3CH3QF8OHhAyhGKrQhm3uM5PPb0vzztH7P+bWMYIK01HJUblFOcQkMgymvfJFziLweQrp7XiY5nSHGWt3OeFnSceFrQcc4SXuL/buHtHLfwZrmJznhDTwVcLm1gzedRBM7NP3ECaYQ5Pm4gaa++xHYW2zLMPbb7kNdS5hlvnegD/Scc/Ot5xP+iAqQ+Q2LatB8tojn66hnAXf3eLDQE2bEa70UnZBw+6rt01PPKH/X1M2Nfh7SA9BkO6c/+xj0SAIRehzVQPacScrodIJ27AQemtG6rr1TH2ueX884WD/p1Hl1rxzknqo3437324XGrbX2/Dlwmo9GeGVuTiNKKCT8hgXIpLscNVYPIfjyO7f7hkvePx7F5ru3+4ZJzXysqCT6jAl+dKJqa8uNZAwAUPm8GQzLqB6W4dgBrYSJAR4e8laqYvtKNB0GeOqu2/907h90FeepMo5TvFX23yFMDAPQ5L5nBKOKDXlcbgHWYnMCvw5pyMyXP8t9/Wmv83d11XvLxjOYlZxHkpr/GUAEBAFQWZ9HQNm1NiL+fA9LVNy6iMyVr23Fvqm6xycXG7Vrd5OptRJBw9cGqUkXUWl/lo9UAFEanDGDjg8ttAO7cN4Dlk+KKZpTF1gd/8hzxwe9nViuTX/JMKKeiPq1ZJheanYwaAJRGByLZQfr6hx9+IkA6H35yOXVNEigXx4h7D94z6dNll8ENuIzKTuzt7Y2GpEc7seMCbHrvA7DJhMvsAG5g3wCWt6rSO8qW4zXJeG5i6Yi3rdn1HtIBH9KhD6o+9lnS8hCkQiPWxMB8+RepKTcvCVTyc6qTU+pl4+P//QlOwaecxNFNQTLa6N/OfUENgISbq9Y+Sx2ETrsChV0LqseZOAF3TgdnTDarV7FlDeV16VdRXU5YCy8+/S93dxef/seHpFkDTGqPiWZL+i/IHmcDSIfJCSwIuguMae27OaWd49ZgO58f1IlTf7jdumOU2NzyQxICZGrnSvjA1ovXk+sNIC1rAXe/opErM8quT94fnzbYHutlrkcEjtXphFZBdsOHWHIBqAJccj8OUJ9qGDcAAkxOYLHZWVVZVVlV//Z/+xrcMWwAbHJ/zoRMg+GIO4BrMDGBczM5qtKh5FCfpupGdSt9HG76YJVb4beLo/+FOHqsAHxa+1Brorbzm1194gSs05i/kJWhOfuaujjEFvzZv805X01ddLkbk6/6zx4NveW6hW4ARGY/DpCfbhg3AAJMTmCx2VlVWVVZVf/2f/sadwxbADxmn/cgXtkwxh0AA5hOoG9uVsyKrOjXr1+/fkUAPGafLyCe2TDGHQADmE6guy8rsiIr+vXr169fBAA8YrcVsNSBc2wArsF0Apt6siopRXXa5Q9W+Rv4Fyt9Ytz07fZee8a3r9xy6wVcMmFAN+7dgkLVzzNAOrZp2qonkwwbr3yYdYqwxqERrm93qZi/S/vi5atxSAtdAPYcAPw9Pw9QjyyYNgBB2DeA9RursqqyqrKeXNUkM9H9PUYHXwByyPx/jtYWlgA2sM/953me5yiKohjVNaUVBUAIKABgyKizcvv4Nx+q1eOz0/v2Utn3/PP93GNFEEzTmJ3rxH9vVfusnOt+ZJfWen8pjQ8L+ePzNG1ZifxdnoqKqN6XrQhGEzDBhl6rPRzGTvEST2dnUwAAwHUAAAAAAABexCxRAwAAAMDeeJxNICEfLzNeHR8eLzFfKzAgHR4dHh0dMDIhHyAuMCAwMiEdNDIgIC80ITEzITEwLiYvMDEyMDEwMTIwLTEvMS4vLzMxMi43LzQy4+bR3MfkOZ8vIFy8cMoNAFXA/gG0HVulj6zIyuCozxA9SnR+A+Q5n28gLH7wgRsAQsL+AbSMrdJHVmRlyEyGJF3ng5ZjAeQ5n/cgnmEY4w6ABGD/ABpbqqzIiqz+/fv3z56ASAEMCoUJVMIzmL/TAdLBfgyL8Z6enGDxoJ9aa+305ct5145zTvoP7b6Dq0CPr7bUVFQ6yaYPYXCJzrvzHcA6JyYwSNRKtXKU+sVzrj/Oqv4+rWf7lO5XuMjD6R7NqDo/lp2GArJp/f+uNUwBHGCf+w7DMGSWZVmejoPSFAAAAMBpZHL4+bA9ZBQc3W/ef4/WClX9d9fLHMquO45tt8+quPNHdq4z/L1vts/KuaI809bI0t2WVcfvl6eVZ4k4Ps+uFAAsYp8uIF5hmOI+gIQpCdRYkBWzIiv69evXr2GhASxeny4gP0MwxX0ARpiSQJ35WTErsqJfv379mo0IvgIsXp8uID9DMMV9AEaYkkC9+VkxK7KiX79+Rb82gAc8YrdBh8LFRy6RbTuAa1CbwKFuRVWlKqr6/HI6jtPp9P/0/7slE/5JaCSqDVKiAVxq22K1JeuFpIWPth3ADUxMYHa1it2qTXZ5LB+uwJbhgwOoqC5/udsa0mfDeQUwNQXSef3/rC1MBhxgn/sdhmEYyrIsy9NxUJoCAAAAWOBPH5/+Pg9o3MHK9sbvfq1CVf/d9TKHyl53HNtun5Vz3Y/sXCf+Yb7ZPuO+omjaGg7dbVkTmS9PqyMRr0tqhxUTD1xm909OMkuZJYw7gA4RhhPY83epbNH7fee2WNDpxE+y7uZuc4gVoN7RHwBMWvPMh7Qgg7O73AHSOZxAP4fVJvIG702p+fHoRmS3TYflymb9eqUjx/W7no2degAsVj8PkJ8qmDYADGByAjOzs6qyqrKq/u3/9jU6ar4RABxWny4gP0MwxX0ABjAlgTrzs2JWZEW/fm2/fhEAHFafLiCeWTDFfQAGMCWBBvOzYlZkRb9+/fr1SyIAHFafLqDeQzDFHQADmE6g/vysyIqs6NevX79+bQAcVp8uIN+zYYw7AAYwnUDd+VmRFVnRr1+/fv2aBQAcVp/3IJ7ZMG4AGMB0AgPnZsWsyIp2/GzHjl8RABxWn/cgXtkwxh0AA5hOoG9uVsyKrOjXr1+/fhEARC4dZzdABvf3BbhzuqevL6Mp6+303//PbQoe90nXz/k3h7g1E6nE/+61H3wSol8WPBqhAsg2gJzZANKVdgdwvM42yrI302YAFZn+juYVWbYMv6LVVns65U1/F5ii5o62hwIcTj8PUO9uGDcAAbBvAOs2VmVVZVVlPbmeXJktQ38PSAAMTp/3IJ7ZMMYdAAXYP4DWY6v0kRVZ/fv3739kcEsAFE4/D5Dvapg2AAGwbwATx1ZlVWVVZT25nlxpytDKDBNsPmUETkUnT59EAOkc1jucOqZ14Q92386tXdWsP2U+9s0z/kNcBd3NiErrcnkHZGKnZA6AG469A7hzbwDNCWSrbEfo9zi2+2WY6xN9oM6/Wn1egWnhvJRp9ffqfKoBVG4/D1Cvbhg3AAxg3wDGj63KqsqqynpyPbnSlKG/DwBsWkMCgAPn2gHcuRvwftrWOfxK/2rWdwudpxPtx1Xafw5xM9nNfvBx0f9ZPonEEgBMJhHJJEEIB+VnBZAuWrimP0zJ6cd9F7fHuo0V+CYytup6VrlodLdpRSUttBeNqMdPDRxOPw+Q7y6YNgCMMDmBLbOzqrKqsqr+7f/2E7nGXxOFBwxOny4gP8Mwxh0AA5hOoP78rMiKrOjXr1+/fDEQPCZBYDlIHZ1Kjvf7Atyxs56+vky8py8wfXw5teP/fxNjtT1utaV29v97zvv01MfNRC8CADwqoSVG5ZqFeH8HSMf2Al53jvXzZpzK+pdV05a8C99+Hdu2zs6ejp9tZvwdOqEhnYIfLFo/N1DvLpg2AAxg3wAmjq3KqsqqynpyPbkyk6E/MwAsWj8PkJ9qGDcABcC+AYwdW5VVlVWV9eR6cmW2DBUdACw2ZQSADuMOkM6zA+7J8hcoSwPldm6b1OmLHP2YgqZ4hjN/om3DD5LXqrTvW6IC1CmNNZLtxIFC9z2AdFYBlWvt2mRnK4vXj8/i9Xq9jvcP4bYMn+3Z67wEpq9P9O8vslBdAOw5n28gvzB85gaAI+wfQKumKiuyIivDE82goKtOARrsBAwelQOACuMG4I7tBnx0QnvR11+Zrrb/0H6S9UM8nrf/C2biV/0et3OOm7z9N7rX0gEUChGlAQhQdgCbYg+gyxy9tSJ9O+QH4hvP2yfOu/7tYreVwtpwz7aLHO4fJ7v/uIV8Ux4MRj8PkJ8umDYADAGYnMCc2VlVWVVZVf/2f/sad/wiwDn8RdcBgPhgswG4czqBJbr1sazexh6Hr3JvoIIn9tutbB+3+2gur3FgyWSuNZ+yg0wAjCqZAwAH5fcAysViz5Ex6SnaWYFjsljmdctQbW830eWlUE3eUGt8GKVpnqWUWs8CbGLzkAEcWG0A7twbwJHt8oXilCPEMEBsrWFmWUNF1lCRVeVWVytZ1jpW61jxBlxuPw4QRxZMG4DBYN8AVjRW6aOsqqwn111zV69fYWm1OhIHbJsBdEKlA4AM7t8BpGOTBmFBMsUvL7F9GvfzphRj52NU4nLlfl5/5Z9I1Wo/F4vGsAHEFYVgAFBh2gJwx+oAbuTO88zkyuIYrHHCp38aQ/l/vXsARSXL7ADKa/s0Bn3uAQDkFUkGgAnDDcCd5QH8WHtGNcuvMt9+yylVnKl4RY/O7X7bY5+xCsuVxvg2N/xPKUsFRB6hBQAHswOUK+0BXFjS4c70c6SemE4klLQO7WXjCLRSVEjb+Ilo49o7HHfokkVqFAAsXs8BBCl+cOgdwA1MJ9A3kxXztupWrLwmGc9NfJPOn9PHfVB1xX5IB8ymz35Gezs8VmsFkPLm1e8NIJ21CbTeVlVt0jmylPZ/v+iWRUDt9N85p6auH4J+K2/w32Bq6h0AXFbDcMiMT5zlBpDOiQm8uE1LdtRV0fwlT//zzDMeD9ta+wnrJFs9oSG1Ku1XkSkSVGbXWSDAD46zA7iBiQk86tq6pMwqKfuPcLHJxfY43PTBHoebPljluhr4hs197enMCkwmOTcigYP7z7C6XDT0H2eW6+T1d/7Yt3vaVyiOQCFZwV1gnTYeB7g65Kjw82CGHSgB/CFlBYAJ8w3AnXsDONSlS9e0oyxG9yH/WEv5B3/IP9ZJ+eg+5KyW8tGu49OaydUARP6wAQAA8wpIKcaDtWhxolxsu9l/vnc48dajz/40VeSUWbs1Y9ZpLyQ5nSgDTDrVBJwehzbumWQC7jC30p+bzWazz16BZ3/2kj/+9UtP9ET/+vXi4tF//ft//0QXARw6bQVdqwuGG0A6JwLcJeyLS+tDTHEbqnX2Roe8Ux+d2LJa50gxK36OFLPi+4MA/ClDAlLYSTngDmCdtYBrycflyZblflG7X+H8OLu7Asu/T8sVrqp6+gCL7DMGWD0cBwQ+z6GiMwmbDcAdJibQ16OoTmeJ/jc8OvopraKVds7V+s8tfdGdZOq2ZrXOTAL0OW8TcMbecJwdwJ2TEzhb3KgqZnnktuL7mublp4rq8qmip/er6OldabG7eI+qASQGsTIAcHD/AXAX0y3nOlNMt2Ke6gvT8QTqlVrzn54AKW75j6SA0uj/Saa44EsARC5VsIbKkMXR+LMF4I65BZX29mcN26//d1Z2/7ACn/59Rc/27P1/t/r8QWrxRAMlfjwDRD55BAE6jDtAOicAztOxtKJJkfJUxqvjCz5tG2IoTM1r/OnHrmRlld2MVOgmi7EoAFRaW6Pd6O2CXukdwJ17A9hf3dVTNmdnL5crS2wVf6u/H3nGsz97/7FvtTBTfJRSKKEGRFpdBoALVnsA7qwTAGvuVIysdDfZ08aet3rW/7SQAe3Dse2WW8V23PHT5TEcDSRaqRVYANzNHkAa7JEAy9yncmRlZWUtFovFYvHgwYP+B4tFoLH/Px78P5611/7B/zPRq1cvFwBULiljAFDBbADWuQdw5MhOmBA1xpwvHbsjjvvDJ8+NYo2dUsz6rdR6yn3n6n61CmwqsVFQRgiamc+Acnk6d6mYenugwm+/XZfvRLP69KB5f7LeOvGd1hTb0PfYe65b3xy1VQBsRo3hmxVkhA13gHTuDmB8VXZ2qzZKf398Rn7/MMT+cUY2L62xPFH/DOorFYXqMi1rABq5HJNBGvObOnBRefzvedmYp9PpHGLNc28JxklSFY12WgvG3AlPELyuHecvCrLysjB3c9o3vWf/+c5BDGTcSW/OndbPHWzmbPqOvW8H1fky22FYpaDuurgP0fNs2oAXv2rEHbIWlADAmf1pz8ISE+TauZRo0nHwxHUbaoXr5KFwIxpLIYoqoSwDqdrw8GqgbcUYEBdg8nWl/tq7VeSJs51/jtlLpkFQVmnhAl0dgMgfTmX5MtizOWlcbYXInaf+7LAKirFOiHFAXMT20oixuJ6CcbfuOR0j4Ans1kXbqn1h4aoDfurcWyocaLsEXCLGf6s9UCM+yhh0aVsxKV87rRUe8126vkze7LTen1vbrYz3D/++UBmWTWOV1n6utfwOuD1XjAbU5xb65/a0VgcG3X1Nbef0sNAMJAS3lte5LdMHgJn+qm7l3JFGMAv+OTig6UkyS7ruwtu0GniF8DtoZnIGsNkePOCoua9BaXweqnCPIUFiXvvfBfTc3N2MxqXG4i6eRldYgCaU7TzOGR/gC5KJI3KRCWuLlu9z0hKz8qk8OSFgdkGeTLQIpbTwNIfXWmIu3Qli1YLBK/1E4Rv23MwJCFoYzcEDJADeuZx7KULFdoGTcG91OdFLG97AtKpKlrU2moFc5uBHfyB/kXnn7p+LT9POGfjq2ief2wUj6HzW2168fYCTQMOLlt1ukaOcAZBz1RqpjTEBdLm+jv3TADTtK2er7lQOwHRrr/8UURGajltflL4AbuYvq/+iXgSG2WIGiOqiNtRGapPLB12s9pbHyB50I9rSUN4dPM90Hx6TUweMKcpUem0h5uEOr3ACmLfsGZdK3YPnV34wyj6yDxyAxL17W9kwraanwQO0Xfs9yKVGeM0ROPfRAb4IjXVbZ4S9PjRS+vzhBwBAAOGqqqi11o4CZYUIAIsr2wYN5GvEYSI7f/bkbLVb/bikw/pVHCl90XNfv/l626KN8H3K+Id+c1UsCDDTIt5fr9dqUgTC+NffspoUAMa//pbVpAAw/vW3rMYCwPhfv9UiCyRMR//9RcaHw/KvJ7oIoXBY/t3xLEJJOCy/5UQHtZJYyeXiohamssX9/KzGU9nifn7GeGpKmOcLjKemhLnSMDU1xcYiTE352VgYpqZiNhaGqamYjYVx9lTMhjDjrbNpheRxdh0zEMbX1gCeKF3qrSDSgGcDfgAAGmCsqpK1VooBXANAw1hzmjWqS+7gXi7/1KZBg6b2JhyXsq3qtb/uW2r88N8kksE6u3nqpC5lqCVcxazuPpldr2SOWUhvKe+xtR5LKWQT9tjkDiulpAmD44O+todo8hzpnSSthGQ+PHqHiNHEPJ57yYkUzGIez/UFhmCWfC4wTnpSUl5El7SQTtzurYTsGMu76EJ24NNcmJAdsmGWe8uOBbC8izouplGt5CqDuDXBb+a3mWdmlemqchYAT2dnUwAEuosAAAAAAABexCxRBAAAAI/UNtgGs9uux8ZWvse8Lq9FEwNs4AcAIAFjRa2V1poBYG8AYJHvFZvZml3GycXMMe185uGx7rZcj5vlzM4n/lrxyes6V/kDc4PAsvaZN+0K6t4d3cwPKdsSuNDf+O4vE5NKf+DG+irtlK3zeZWe9+Y+1+an099E/7BV6jDxVvtEd6UJe7hrL0FZxSexGPk+cgtAjN5XGu2SSIL60eQW0QSSmx9iTe4LJGtHH5OsfogjYcLi9EP3OWqh/zoQpQF+SJz6JaAAMN1QBQsz2rACGKuqtNZadgzok38fU5JSw7Rfpx6NP+b8GrRlmsoefnLA/pWP55bUArhGiy5fWsae8PKX7F1d6djPPqhm16uAYYGLh1S2ANp29Zk8pH7UjGsc+hI9BNlMP2PvLGhRR3xQzaLAy1+4KLSMYbZ35pnOyNbLxq7QT0K2xWcuwkiLz1wgtPg8SQi59/gZAZrHfKSF4T1JWjwZj58R75Go3bflMR+BGPHmvi0cmkcy2uNi5iMtIhK6xkPlfiiMH8eZtSBq8ZknhD26pgQGLgCeZvx57JVQT4gb+AEAAIgVwyFmoSkATEwA4O2K/ZHnN/PWwRd389aUi2P7elaU7h5Tq+5aT64cUn+d81z+9pUr9wZcXuN8e2vGr6O9NWPHfFK0+YeeZHTZjvnk15rX50VxmdeJSdHp26xpTd9mJYOwm/okT/rLbii+XLexBZG1vuc8O9HVD2hFwAAvubDb1K2DeLZnPg1yo1P4/ta6zOyk1KU1OtbxK7TsZUFGBwC+Z5zaErgAwBtlACLnXgBjVZXRWmsFIILY/JqUZU905HZzvnN7OUWZP/jk3fNZtvlmsk7qTkTWt21qxEjffss5M48CrfqHxlHAPpLBxgtIEC34oG019LadzzwKtOxD4yhgiGSw8QIShAVvbeuhtq2XeRQD2dJxFEQQyWBnQT8IC97a9qX14zsyWjENGHysfpqP/eQAro+fKMIXjbQ0aFoaH9s2tj0/gONIIkIUjW5RaJo+28DYjzmwjiOKgCjKG6BpPBsD17EA3mbc+1pAGwCwz5sEmDtnxlhVFbVWGgDn/piTtXbqJnazGLV9E3tm8Ffw6B/1oy8RJmhu61t3NrfYgLRwr1km+6H30OMOmIXIpy5in8Ea8eYjKA8jagaQlQfIMn4yrmNGQp72SwozIOx8yBUUaGk/wwWLhf77cdCPtKhPXURh6M8q60cQdYSVKAzdwsr6EQRWHLC0COZRvweQe/MRDytpeSQo3nxE8UpaHgkVbz6iGEnLQwBmHmnM0aNqaHtoYSD35gQ8khYA/mX87ywbTWxwgOUYULJSAAAAwO9PXUoqe2FT1qPW/Dqu2j/WZM5VRfjqRLPU0nf/fgwl4E1/UVRc2tT+PPjxoL5FtgQAoE1WPrW7GXpsAmUKhFsDNQA='
},
function() {
Game.initialize("#gameboard", levelData, spriteData, {
"start": startGame,
"die": endGame,
"win": winGame
});
});
});
</script>
</body>
</html>
163 days ago
1 year ago