{"version":3,"file":"mario.cjs","sources":["../src/browser-compat.js","../src/util.js","../src/input.js","../src/resources.js","../src/sprite.js","../src/entity.js","../src/pipe.js","../src/mushroom.js","../src/fireflower.js","../src/star.js","../src/fireball.js","../src/coin.js","../src/bcoin.js","../src/goomba.js","../src/koopa.js","../src/floor.js","../src/block.js","../src/rubble.js","../src/prop.js","../src/player.js","../src/flag.js","../src/levels/level.js","../src/levels/11.js","../src/levels/11tunnel.js","../src/game.js","../src/index.js"],"sourcesContent":["// Browser compatibility layer for Node.js environment\nlet canvas, ctx, window, document, requestAnimationFrame;\n\nif (typeof window === 'undefined') {\n  // Node.js environment\n  try {\n    const { createCanvas } = require('canvas');\n    \n    // Mock window object\n    global.window = {\n      requestAnimationFrame: (callback) => setTimeout(callback, 1000 / 60),\n      webkitRequestAnimationFrame: null,\n      mozRequestAnimationFrame: null,\n      oRequestAnimationFrame: null,\n      msRequestAnimationFrame: null,\n      setTimeout: global.setTimeout,\n      addEventListener: () => {},\n      innerWidth: 800,\n      innerHeight: 600,\n      Mario: {}\n    };\n    \n    // Mock document object\n    global.document = {\n      createElement: (tagName) => {\n        if (tagName === 'canvas') {\n          return createCanvas(800, 600); // Default size\n        }\n        return {};\n      },\n      body: {\n        appendChild: () => {} // No-op in Node.js\n      },\n      addEventListener: () => {},\n      removeEventListener: () => {}\n    };\n\n    // Export for use in other modules\n    window = global.window;\n    document = global.document;\n    \n  } catch (error) {\n    console.warn('Canvas module not found. Install with: npm install canvas');\n    \n    // Fallback mocks for when canvas is not available\n    global.window = {\n      requestAnimationFrame: (callback) => setTimeout(callback, 1000 / 60),\n      addEventListener: () => {},\n      innerWidth: 800,\n      innerHeight: 600,\n      Mario: {}\n    };\n    \n    global.document = {\n      createElement: () => ({}),\n      body: { appendChild: () => {} },\n      addEventListener: () => {},\n      removeEventListener: () => {}\n    };\n    \n    window = global.window;\n    document = global.document;\n  }\n} else {\n  // Browser environment\n  window = global.window;\n  document = global.document;\n}\n\nexport { window, document };","import { window } from './browser-compat.js';\n\n(function() {\n    if (typeof window.Mario === 'undefined') {\n        window.Mario = {};\n    }\n\n    var Util = window.Mario.Util = {};\n\n    Util.inherits = function(subclass, superclass) {\n        function Surrogate() {};\n\n        Surrogate.prototype = superclass.prototype;\n        subclass.prototype = new Surrogate();\n    }\n})();","(function() {\n    var pressedKeys = {};\n\n    function setKey(event, status) {\n        var code = event.keyCode;\n        var key;\n\n        switch(code) {\n        case 32:\n            key = 'SPACE'; break;\n        case 37:\n            key = 'LEFT'; break;\n        case 38:\n            key = 'UP'; break;\n        case 39:\n            key = 'RIGHT'; break;\n        case 40:\n            key = 'DOWN'; break;\n        case 88:\n            key = 'JUMP'; break;\n        case 90:\n            key = 'RUN'; break;\n        default:\n            key = String.fromCharCode(code);\n        }\n\n        pressedKeys[key] = status;\n    }\n\n    document.addEventListener('keydown', function(e) {\n        setKey(e, true);\n    });\n\n    document.addEventListener('keyup', function(e) {\n        setKey(e, false);\n    });\n\n    window.addEventListener('blur', function() {\n        pressedKeys = {};\n    });\n\n    window.input = {\n        isDown: function(key) {\n            return pressedKeys[key.toUpperCase()];\n        },\n        reset: function() {\n          pressedKeys['RUN'] = false;\n          pressedKeys['LEFT'] = false;\n          pressedKeys['RIGHT'] = false;\n          pressedKeys['DOWN'] = false;\n          pressedKeys['JUMP'] = false;\n        }\n    };\n})();\n","//simple resource loader\n(function() {\n    var resourceCache = {};\n    var loading = [];\n    var readyCallbacks = [];\n\n    // Load an image url or an array of image urls\n    function load(urlOrArr) {\n        if(urlOrArr instanceof Array) {\n            urlOrArr.forEach(function(url) {\n                _load(url);\n            });\n        }\n        else {\n            _load(urlOrArr);\n        }\n    }\n\n    function _load(url) {\n        if(resourceCache[url]) {\n            return resourceCache[url];\n        }\n        else {\n            var img = new Image();\n            img.onload = function() {\n                resourceCache[url] = img;\n\n                if(isReady()) {\n                    readyCallbacks.forEach(function(func) { func(); });\n                }\n            };\n            resourceCache[url] = false;\n            img.src = url;\n        }\n    }\n\n    function get(url) {\n        return resourceCache[url];\n    }\n\n    function isReady() {\n        var ready = true;\n        for(var k in resourceCache) {\n            if(resourceCache.hasOwnProperty(k) &&\n               !resourceCache[k]) {\n                ready = false;\n            }\n        }\n        return ready;\n    }\n\n    function onReady(func) {\n        readyCallbacks.push(func);\n    }\n\n    window.resources = {\n        load: load,\n        get: get,\n        onReady: onReady,\n        isReady: isReady\n    };\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n    window.Mario = {};\n\n  var Sprite = Mario.Sprite = function(img, pos, size, speed, frames, once) {\n    this.pos = pos;\n    this.size = size;\n    this.speed = speed;\n    this._index = 0;\n    this.img = img;\n    this.once = once;\n    this.frames = frames;\n  }\n\n  Sprite.prototype.update = function(dt, gameTime) {\n    if (gameTime && gameTime == this.lastUpdated) return;\n    this._index += this.speed*dt;\n    if (gameTime) this.lastUpdated = gameTime;\n  }\n\n  Sprite.prototype.setFrame = function(frame) {\n    this._index = frame;\n  }\n\n  Sprite.prototype.render = function(ctx, posx, posy, vX, vY) {\n    var frame;\n\n    if (this.speed > 0) {\n      var max = this.frames.length;\n      var idx = Math.floor(this._index);\n      frame = this.frames[idx % max];\n\n      if (this.once && idx >= max) {\n        this.done = true;\n        return;\n      }\n    } else {\n      frame = 0;\n    }\n\n    var x = this.pos[0];\n    var y = this.pos[1];\n\n    x += frame*this.size[0];\n    ctx.drawImage(resources.get(this.img), x + (1/3),y + (1/3), this.size[0] - (2/3), this.size[1] - (2/3), Math.round(posx - vX), Math.round(posy - vY), this.size[0],this.size[1]);\n  }\n})();\n","(function() {\n\tif (typeof Mario === 'undefined')\n\t\twindow.Mario = {};\n\n\tvar Entity = Mario.Entity = function(options) {\n\t  this.vel = [0,0];\n\t  this.acc = [0,0];\n\t\tthis.standing = true;\n\t  this.pos = options.pos;\n\t  this.sprite = options.sprite;\n\t  this.hitbox = options.hitbox;\n\t  this.left = false;\n\t}\n\n\tEntity.prototype.render = function(ctx, vX, vY) {\n\t\tthis.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY)\n\t}\n\n\tEntity.prototype.collideWall = function(wall) {\n\t\t//the wall will always be a 16x16 block with hitbox = [0,0,16,16].\n\t\tif (this.pos[0] > wall.pos[0]) {\n\t\t\t//from the right\n\t\t\tthis.pos[0] = wall.pos[0] + wall.hitbox[2] - this.hitbox[0];\n\t\t\tthis.vel[0] = Math.max(0, this.vel[0]);\n\t\t\tthis.acc[0] = Math.max(0, this.acc[0]);\n\t\t} else {\n\t\t\tthis.pos[0] = wall.pos[0] + wall.hitbox[0] - this.hitbox[2] - this.hitbox[0];\n\t\t\tthis.vel[0] = Math.min(0, this.vel[0]);\n\t\t\tthis.acc[0] = Math.min(0, this.acc[0]);\n\t\t}\n\t}\n\n\tEntity.prototype.bump = function() {;}\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n    window.Mario = {};\n\n\n  //there are too many possible configurations of pipe to capture in a reasonable\n  //set of simple variables. Joints, etc. are just too much.\n  //To that end, the pipe class handles simple pipes, and we'll put together\n  //anything more complex with individual props. OK? OK.\n  Pipe = Mario.Pipe = function(options) {\n    this.pos = options.pos\n\n    //NOTE: direction is the direction you move INTO the pipe.\n    this.direction = options.direction\n    this.destination = options.destination\n    this.length = options.length;\n\n    if (this.direction === \"UP\" || this.direction === \"DOWN\") {\n      this.hitbox = [0,0, 32, this.length * 16];\n      this.midsection = level.pipeUpMid;\n      this.endsection = level.pipeTop;\n    } else {\n      this.hitbox = [0,0, 16*this.length, 32];\n      this.midsection = level.pipeSideMid;\n      this.endsection = level.pipeLeft;\n    }\n  }\n\n  Pipe.prototype.checkPipe = function() {\n    if (this.destination === undefined || !input.isDown(this.direction)) return;\n\n    var h = player.power===0 ? 16 : 32;\n    var x = Math.floor(player.pos[0]);\n    var y = Math.floor(player.pos[1]);\n    switch (this.direction) {\n      case 'RIGHT': if (x === this.pos[0]-16 &&\n                        y >= this.pos[1] &&\n                        y+h <= this.pos[1]+32) {\n                          player.pipe(this.direction, this.destination)\n                        }\n        break;\n      case 'LEFT': if (x === this.pos[0]+16*this.length &&\n                       y >= this.pos[1] &&\n                       y+h <= this.pos[1]+32) {\n                         player.pipe(this.direction, this.destination)\n                       }\n        break;\n      case 'UP': if (y === this.pos[1] + 16*this.length &&\n                     x >= this.pos[0] &&\n                     x+16 <= this.pos[0]+32) {\n                       player.pipe(this.direction, this.destination)\n                     }\n        break;\n      case 'DOWN': if (y+h === this.pos[1] &&\n                    x >= this.pos[0] &&\n                    x+16 <= this.pos[0]+32) {\n                      player.pipe(this.direction, this.destination);\n                    }\n        break;\n    }\n  }\n\n  //Note to self: next time, decide on a convention for which thing checks for collisions\n  //and stick to it. This is a pain.\n  Pipe.prototype.checkCollisions = function() {\n    var that = this;\n    level.enemies.forEach (function(ent) {\n      that.isCollideWith(ent);\n    });\n\n    level.items.forEach (function(ent) {\n      that.isCollideWith(ent);\n    });\n\n    fireballs.forEach(function(ent){\n      that.isCollideWith(ent)\n    });\n\n    if (!player.piping) this.isCollideWith(player);\n  }\n\n  Pipe.prototype.isCollideWith = function (ent) {\n    //long story short: because we scan every item, and and one 'rubble' item is four things with separate positions\n    //we'll crash without this line as soon as we destroy a block. OOPS.\n    if (ent.pos === undefined) return;\n\n\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [Math.floor(this.pos[0] + this.hitbox[0]), Math.floor(this.pos[1] + this.hitbox[1])];\n    var hpos2 = [Math.floor(ent.pos[0] + ent.hitbox[0]), Math.floor(ent.pos[1] + ent.hitbox[1])];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+ent.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+ent.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        //if the entity is over the block, it's basically floor\n        var center = hpos2[0] + ent.hitbox[2] / 2;\n        if (Math.abs(hpos2[1] + ent.hitbox[3] - hpos1[1]) <= ent.vel[1]) {\n          ent.vel[1] = 0;\n          ent.pos[1] = hpos1[1] - ent.hitbox[3] - ent.hitbox[1];\n          ent.standing = true;\n          if (ent instanceof Mario.Player) {\n            ent.jumping = 0;\n          }\n        } else if (Math.abs(hpos2[1] - hpos1[1] - this.hitbox[3]) > ent.vel[1] &&\n        center + 2 >= hpos1[0] && center - 2 <= hpos1[0] + this.hitbox[2]) {\n          //ent is under the block.\n          ent.vel[1] = 0;\n          ent.pos[1] = hpos1[1] + this.hitbox[3];\n          if (ent instanceof Mario.Player) {\n            ent.jumping = 0;\n          }\n        } else {\n          //entity is hitting it from the side, we're a wall\n          ent.collideWall(this);\n        }\n      }\n    }\n  }\n\n  //we COULD try to write some shenanigans so that the check gets put into the\n  //collision code, but there won't ever be more than a handful of pipes in a level\n  //so the performance hit of scanning all of them is miniscule.\n  Pipe.prototype.update = function(dt) {\n    if (this.destination) this.checkPipe();\n  }\n\n  //http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array\n  //I honestly have no idea if javascript does this, but I feel like it makes sense\n  //stylistically to prefer branching outside of loops when possible as convention\n\n  //TODO: edit the spritesheet so UP and LEFT pipes aren't backwards.\n  Pipe.prototype.render = function(ctx, vX, vY) {\n    switch (this.direction) {\n      case \"DOWN\":\n        this.endsection.render(ctx, this.pos[0], this.pos[1], vX, vY);\n        for (var i = 1; i < this.length; i++) {\n          this.midsection.render(ctx, this.pos[0], this.pos[1]+i*16, vX, vY)\n        }\n        break;\n      case \"UP\":\n        this.endsection.render(ctx, this.pos[0], this.pos[1]+16*(this.length-1), vX, vY)\n        for (var i=0; i < this.length - 1; i++) {\n          this.midsection.render(ctx, this.pos[0], this.pos[1]+i*16, vX, vY)\n        }\n        break;\n      case \"RIGHT\":\n        this.endsection.render(ctx, this.pos[0], this.pos[1], vX, vY)\n        for (var i = 1; i < this.length; i++) {\n          this.midsection.render(ctx, this.pos[0]+16*i, this.pos[1], vX, vY)\n        }\n        break;\n      case \"LEFT\":\n        this.endsection.render(ctx, this.pos[0]+16*(this.length-1), this.pos[1], vX, vY)\n        for (var i = 0; i < this.legth-1; i++) {\n          this.midsection.render(ctx, this.pos[0], this.pos[1]+i*16, vX, vY)\n        }\n        break;\n    }\n  }\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  var Mushroom = Mario.Mushroom = function(pos) {\n    this.spawning = false;\n    this.waiting = 0;\n\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: level.superShroomSprite,\n      hitbox: [0,0,16,16]\n    });\n  }\n\n  Mario.Util.inherits(Mushroom, Mario.Entity);\n\n  Mushroom.prototype.render = function(ctx, vX, vY) {\n    if (this.spawning > 1) return;\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  }\n\n  Mushroom.prototype.spawn = function() {\n    if (player.power > 0) {\n      //replace this with a fire flower\n      var ff = new Mario.Fireflower(this.pos)\n      ff.spawn();\n      return;\n    }\n    sounds.itemAppear.play();\n    this.idx = level.items.length;\n    level.items.push(this);\n    this.spawning = 12;\n    this.targetpos = [];\n    this.targetpos[0] = this.pos[0];\n    this.targetpos[1] = this.pos[1] - 16;\n  }\n\n  Mushroom.prototype.update = function(dt) {\n    if (this.spawning > 1) {\n      this.spawning -= 1;\n      if (this.spawning == 1) this.vel[1] = -.5;\n      return;\n    }\n    if (this.spawning) {\n      if (this.pos[1] <= this.targetpos[1]) {\n        this.pos[1] = this.targetpos[1];\n        this.vel[1] = 0;\n        this.waiting = 5;\n        this.spawning = 0;\n        this.vel[0] = 1;\n      }\n    } else {\n      this.acc[1] = 0.2;\n    }\n\n    if (this.waiting) {\n      this.waiting -= 1;\n    } else {\n      this.vel[1] += this.acc[1];\n      this.pos[0] += this.vel[0];\n      this.pos[1] += this.vel[1];\n      this.sprite.update(dt);\n    }\n  }\n\n  Mushroom.prototype.collideWall = function() {\n    this.vel[0] = -this.vel[0];\n  }\n\n  Mushroom.prototype.checkCollisions = function() {\n    if(this.spawning) {\n      return;\n    }\n    var h = this.pos[1] % 16 == 0 ? 1 : 2;\n    var w = this.pos[0] % 16 == 0 ? 1 : 2;\n\n    var baseX = Math.floor(this.pos[0] / 16);\n    var baseY = Math.floor(this.pos[1] / 16);\n\n    if (baseY + h > 15) {\n      delete level.items[this.idx];\n      return;\n    }\n\n    for (var i = 0; i < h; i++) {\n      for (var j = 0; j < w; j++) {\n        if (level.statics[baseY + i][baseX + j]) {\n          level.statics[baseY + i][baseX + j].isCollideWith(this);\n        }\n        if (level.blocks[baseY + i][baseX + j]) {\n          level.blocks[baseY + i][baseX + j].isCollideWith(this);\n        }\n      }\n    }\n\n    this.isPlayerCollided();\n  }\n\n  //we have access to player everywhere, so let's just do this.\n  Mushroom.prototype.isPlayerCollided = function() {\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [player.pos[0] + player.hitbox[0], player.pos[1] + player.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+player.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+player.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        player.powerUp(this.idx);\n      }\n    }\n  }\n\n  Mushroom.prototype.bump = function() {\n    this.vel[1] = -2;\n  }\n\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  var Fireflower = Mario.Fireflower = function(pos) {\n    this.spawning = false;\n    this.waiting = 0;\n\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: level.fireFlowerSprite,\n      hitbox: [0,0,16,16]\n    });\n  }\n\n  Mario.Util.inherits(Fireflower, Mario.Entity);\n\n  Fireflower.prototype.render = function(ctx, vX, vY) {\n    if (this.spawning > 1) return;\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  }\n\n  Fireflower.prototype.spawn = function() {\n    sounds.itemAppear.play();\n    this.idx = level.items.length;\n    level.items.push(this);\n    this.spawning = 12;\n    this.targetpos = [];\n    this.targetpos[0] = this.pos[0];\n    this.targetpos[1] = this.pos[1] - 16;\n  }\n\n  Fireflower.prototype.update = function(dt) {\n    if (this.spawning > 1) {\n      this.spawning -= 1;\n      if (this.spawning == 1) this.vel[1] = -.5;\n      return;\n    }\n    if (this.spawning) {\n      if (this.pos[1] <= this.targetpos[1]) {\n        this.pos[1] = this.targetpos[1];\n        this.vel[1] = 0;\n        this.spawning = 0;\n      }\n    }\n\n      this.vel[1] += this.acc[1];\n      this.pos[0] += this.vel[0];\n      this.pos[1] += this.vel[1];\n      this.sprite.update(dt);\n  }\n\n  Fireflower.prototype.checkCollisions = function() {\n    if (this.spawning) {return;}\n    this.isPlayerCollided();\n  }\n\n  Fireflower.prototype.isPlayerCollided = function() {\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [player.pos[0] + player.hitbox[0], player.pos[1] + player.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+player.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+player.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        player.powerUp(this.idx);\n      }\n    }\n  }\n\n  //This should never be called, but just in case.\n  Fireflower.prototype.bump = function() {;}\n\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  var Star = Mario.Star = function(pos) {\n    this.spawning = false;\n    this.waiting = 0;\n\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: level.starSprite,\n      hitbox: [0,0,16,16]\n    });\n  }\n\n  Mario.Util.inherits(Star, Mario.Entity);\n\n  Star.prototype.render = function(ctx, vX, vY) {\n    if (this.spawning > 1) return;\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  }\n\n  Star.prototype.spawn = function() {\n    this.idx = level.items.length;\n    level.items.push(this);\n    this.spawning = 12;\n    this.targetpos = [];\n    this.targetpos[0] = this.pos[0];\n    this.targetpos[1] = this.pos[1] - 16;\n  }\n\n  Star.prototype.update = function(dt) {\n    if (this.spawning > 1) {\n      this.spawning -= 1;\n      if (this.spawning == 1) this.vel[1] = -.5;\n      return;\n    }\n    if (this.spawning) {\n      if (this.pos[1] <= this.targetpos[1]) {\n        this.pos[1] = this.targetpos[1];\n        this.vel[1] = 0;\n        this.waiting = 5;\n        this.spawning = 0;\n        this.vel[0] = 1;\n      }\n    } else {\n      this.acc[1] = 0.2;\n    }\n\n    if (this.standing) {\n      this.standing = false;\n      this.vel[1] = -3;\n    }\n\n    if (this.waiting) {\n      this.waiting -= 1;\n    } else {\n      this.vel[1] += this.acc[1];\n      this.pos[0] += this.vel[0];\n      this.pos[1] += this.vel[1];\n      this.sprite.update(dt);\n    }\n  }\n\n  Star.prototype.collideWall = function() {\n    this.vel[0] = -this.vel[0];\n  }\n\n  Star.prototype.checkCollisions = function() {\n    if(this.spawning) {\n      return;\n    }\n    var h = this.pos[1] % 16 == 0 ? 1 : 2;\n    var w = this.pos[0] % 16 == 0 ? 1 : 2;\n\n    var baseX = Math.floor(this.pos[0] / 16);\n    var baseY = Math.floor(this.pos[1] / 16);\n\n    if (baseY + h > 15) {\n      delete level.items[this.idx];\n      return;\n    }\n\n    for (var i = 0; i < h; i++) {\n      for (var j = 0; j < w; j++) {\n        if (level.statics[baseY + i][baseX + j]) {\n          level.statics[baseY + i][baseX + j].isCollideWith(this);\n        }\n        if (level.blocks[baseY + i][baseX + j]) {\n          level.blocks[baseY + i][baseX + j].isCollideWith(this);\n        }\n      }\n    }\n\n    this.isPlayerCollided();\n  }\n\n  //we have access to player everywhere, so let's just do this.\n  Star.prototype.isPlayerCollided = function() {\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [player.pos[0] + player.hitbox[0], player.pos[1] + player.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+player.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+player.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        player.star(this.idx);\n      }\n    }\n  }\n\n  Star.prototype.bump = function() {\n    this.vel[1] = -2;\n  }\n\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n    window.Mario = {};\n\n  var Fireball = Mario.Fireball = function(pos) {\n    this.hit = 0;\n    this.standing = false;\n\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: new Mario.Sprite('sprites/items.png', [96, 144], [8,8], 5, [0,1,2,3]),\n      hitbox: [0,0,8,8]\n    });\n  }\n\n  Mario.Util.inherits(Fireball, Mario.Entity);\n\n  Fireball.prototype.spawn = function(left) {\n    sounds.fireball.currentTime = 0;\n    sounds.fireball.play();\n    if (fireballs[0]) {\n      this.idx = 1;\n      fireballs[1] = this;\n    } else {\n      this.idx = 0;\n      fireballs[0] = this;\n    }\n    this.vel[0] = (left ? -5 : 5);\n    this.standing = false;\n    this.vel[1] = 0;\n  }\n\n  Fireball.prototype.render = function(ctx, vX, vY) {\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  }\n\n  Fireball.prototype.update = function(dt) {\n    if (this.hit == 1) {\n      this.sprite.pos = [96, 160];\n      this.sprite.size = [16,16];\n      this.sprite.frames = [0,1,2];\n      this.sprite.speed = 8;\n      this.hit += 1;\n      return;\n    } else if (this.hit == 5) {\n      delete fireballs[this.idx];\n      player.fireballs -= 1;\n      return;\n    } else if (this.hit) {\n      this.hit += 1;\n      return;\n    }\n\n    //In retrospect, the way collision is being handled is RIDICULOUS\n    //but I don't have to use some horrible kludge for this.\n    if (this.standing) {\n      this.standing = false;\n      this.vel[1] = -4;\n    }\n\n    this.acc[1] = 0.5;\n\n    this.vel[1] += this.acc[1];\n    this.pos[0] += this.vel[0];\n    this.pos[1] += this.vel[1];\n    if (this.pos[0] < vX || this.pos[0] > vX + 256) {\n      this.hit = 1;\n    }\n    this.sprite.update(dt);\n  }\n\n  Fireball.prototype.collideWall = function() {\n    if (!this.hit) this.hit = 1;\n  }\n\n  Fireball.prototype.checkCollisions = function() {\n    if (this.hit) return;\n    var h = this.pos[1] % 16 < 8 ? 1 : 2;\n    var w = this.pos[0] % 16 < 8 ? 1 : 2;\n\n    var baseX = Math.floor(this.pos[0] / 16);\n    var baseY = Math.floor(this.pos[1] / 16);\n\n    if (baseY + h > 15) {\n      delete fireballs[this.idx];\n      player.fireballs -= 1;\n      return;\n    }\n\n    for (var i = 0; i < h; i++) {\n      for (var j = 0; j < w; j++) {\n        if (level.statics[baseY + i][baseX + j]) {\n          level.statics[baseY + i][baseX + j].isCollideWith(this);\n        }\n        if (level.blocks[baseY + i][baseX + j]) {\n          level.blocks[baseY + i][baseX + j].isCollideWith(this);\n        }\n      }\n    }\n\n    var that = this;\n    level.enemies.forEach(function(enemy){\n      if (enemy.flipping || enemy.pos[0] - vX > 336){ //stop checking once we get to far away dudes.\n        return;\n      } else {\n        that.isCollideWith(enemy);\n      }\n    });\n  }\n\n  Fireball.prototype.isCollideWith = function(ent) {\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [ent.pos[0] + ent.hitbox[0], ent.pos[1] + ent.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+ent.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+ent.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        this.hit = 1;\n        ent.bump();\n      }\n    }\n  };\n\n  Fireball.prototype.bump = function() {;}\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  var Coin = Mario.Coin = function(pos, sprite) {\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: sprite,\n      hitbox: [0,0,16,16]\n    });\n    this.idx = level.items.length\n  }\n\n  Mario.Util.inherits(Coin, Mario.Entity);\n\n  Coin.prototype.isPlayerCollided = function() {\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [player.pos[0] + player.hitbox[0], player.pos[1] + player.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+player.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+player.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        this.collect();\n      }\n    }\n  }\n\n  Coin.prototype.render = function(ctx, vX, vY) {\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  }\n\n  //money is not affected by gravity, you see.\n  Coin.prototype.update = function(dt) {\n    this.sprite.update(dt);\n  }\n  Coin.prototype.checkCollisions = function() {\n    this.isPlayerCollided();\n  }\n\n  Coin.prototype.collect = function() {\n    sounds.coin.currentTime = 0.05;\n    sounds.coin.play();\n    player.coins += 1;\n    delete level.items[this.idx]\n  }\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  var Bcoin = Mario.Bcoin = function(pos) {\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: level.bcoinSprite(),\n      hitbox: [0,0,16,16]\n    });\n  }\n\n  Mario.Util.inherits(Bcoin, Mario.Entity);\n\n  //I'm not sure whether it makes sense to use an array for vel and acc here\n  //in order to keep with convention, or to just use a single value, since\n  //it's literally impossible for these to move left or right.\n  Bcoin.prototype.spawn = function() {\n    sounds.coin.currentTime = 0.05;\n    sounds.coin.play();\n    this.idx = level.items.length;\n    level.items.push(this);\n    this.active = true;\n    this.vel = -12;\n    this.targetpos = this.pos[1] - 32;\n  }\n\n  Bcoin.prototype.update = function(dt) {\n    if (!this.active) return;\n\n    if (this.vel > 0 && this.pos[1] >= this.targetpos) {\n      player.coins += 1;\n      //spawn a score thingy.\n      delete level.items[this.idx];\n    }\n\n    this.acc = 0.75;\n    this.vel += this.acc;\n    this.pos[1] += this.vel;\n    this.sprite.update(dt);\n  }\n\n  Bcoin.prototype.checkCollisions = function() {;}\n\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  //TODO: On console the hitbox is smaller. Measure it and edit this.\n\n  var Goomba = Mario.Goomba = function(pos, sprite) {\n    this.dying = false;\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: sprite,\n      hitbox: [0,0,16,16]\n    });\n    this.vel[0] = -0.5;\n    this.idx = level.enemies.length;\n  };\n\n  Goomba.prototype.render = function(ctx, vX, vY) {\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  };\n\n  Goomba.prototype.update = function(dt, vX) {\n    if (this.pos[0] - vX > 336) { //if we're too far away, do nothing.\n      return;\n    } else if (this.pos[0] - vX < -32) {\n      delete level.enemies[this.idx];\n    }\n\n    if (this.dying) {\n      this.dying -= 1;\n      if (!this.dying) {\n        delete level.enemies[this.idx];\n      }\n    }\n    this.acc[1] = 0.2;\n    this.vel[1] += this.acc[1];\n    this.pos[0] += this.vel[0];\n    this.pos[1] += this.vel[1];\n    this.sprite.update(dt);\n  };\n\n  Goomba.prototype.collideWall = function() {\n    this.vel[0] = -this.vel[0];\n  };\n\n  Goomba.prototype.checkCollisions = function() {\n    if (this.flipping) {\n      return;\n    }\n\n    var h = this.pos[1] % 16 === 0 ? 1 : 2;\n    var w = this.pos[0] % 16 === 0 ? 1 : 2;\n\n    var baseX = Math.floor(this.pos[0] / 16);\n    var baseY = Math.floor(this.pos[1] / 16);\n\n    if (baseY + h > 15) {\n      delete level.enemies[this.idx];\n      return;\n    }\n\n    for (var i = 0; i < h; i++) {\n      for (var j = 0; j < w; j++) {\n        if (level.statics[baseY + i][baseX + j]) {\n          level.statics[baseY + i][baseX + j].isCollideWith(this);\n        }\n        if (level.blocks[baseY + i][baseX + j]) {\n          level.blocks[baseY + i][baseX + j].isCollideWith(this);\n        }\n      }\n    }\n    var that = this;\n    level.enemies.forEach(function(enemy){\n      if (enemy === that) { //don't check collisions with ourselves.\n        return;\n      } else if (enemy.pos[0] - vX > 336){ //stop checking once we get to far away dudes.\n        return;\n      } else {\n        that.isCollideWith(enemy);\n      }\n    });\n    this.isCollideWith(player);\n  };\n\n  Goomba.prototype.isCollideWith = function(ent) {\n    if (ent instanceof Mario.Player && (this.dying || ent.invincibility)) {\n      return;\n    }\n\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [ent.pos[0] + ent.hitbox[0], ent.pos[1] + ent.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+ent.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+ent.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        if (ent instanceof Mario.Player) { //if we hit the player\n          if (ent.vel[1] > 0) { //then the goomba dies\n            this.stomp();\n          } else if (ent.starTime) {\n            this.bump();\n          } else { //or the player gets hit\n            ent.damage();\n          }\n        } else {\n          this.collideWall();\n        }\n      }\n    }\n  };\n\n  Goomba.prototype.stomp = function() {\n    sounds.stomp.play();\n    player.bounce = true;\n    this.sprite.pos[0] = 32;\n    this.sprite.speed = 0;\n    this.vel[0] = 0;\n    this.dying = 10;\n  };\n\n  Goomba.prototype.bump = function() {\n    sounds.kick.play();\n    this.sprite.img = 'sprites/enemyr.png';\n    this.flipping = true;\n    this.pos[1] -= 1;\n    this.vel[0] = 0;\n    this.vel[1] = -2.5;\n  };\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  var Koopa = Mario.Koopa = function(pos, sprite, para) {\n    this.dying = false;\n    this.shell = false;\n\n    this.para = para; //para. As in, is it a paratroopa?\n\n    //So, funny story. The actual hitboxes don't reach all the way to the ground.\n    //What that means is, as long as I use them to keep things on the floor\n    //making the hitboxes accurate will make enemies sink into the ground.\n    Mario.Entity.call(this, {\n      pos: pos,\n      sprite: sprite,\n      hitbox: [2,8,12,24]\n    });\n    this.vel[0] = -0.5;\n    this.idx = level.enemies.length;\n  };\n\n  Koopa.prototype.render = function(ctx, vX, vY) {\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  };\n\n  Koopa.prototype.update = function(dt, vX) {\n    if (this.turn) {\n      this.vel[0] = -this.vel[0];\n      if (this.shell) sounds.bump.play();\n      this.turn = false;\n    }\n    if (this.vel[0] != 0) {\n      this.left = (this.vel[0] < 0);\n    }\n\n    if (this.left) {\n      this.sprite.img = 'sprites/enemy.png';\n    } else {\n      this.sprite.img = 'sprites/enemyr.png';\n    }\n\n    if (this.pos[0] - vX > 336) { //if we're too far away, do nothing.\n      return;\n    } else if (this.pos[0] - vX < -32) {\n      delete level.enemies[this.idx];\n    }\n\n    if (this.dying) {\n      this.dying -= 1;\n      if (!this.dying) {\n        delete level.enemies[this.idx];\n      }\n    }\n\n    if (this.shell) {\n      if (this.vel[0] == 0) {\n        this.shell -= 1;\n        if (this.shell < 120) {\n          this.sprite.speed = 5;\n        }\n        if (this.shell == 0) {\n          this.sprite = level.koopaSprite();\n          this.hitbox = [2,8,12,24]\n          if (this.left) {\n            this.sprite.img = 'sprites/enemyr.png';\n            this.vel[0] = 0.5;\n            this.left = false;\n          } else {\n            this.vel[0] = -0.5;\n            this.left = true;\n          }\n          this.pos[1] -= 16;\n        }\n      } else {\n        this.shell = 360;\n        this.sprite.speed = 0;\n        this.sprite.setFrame(0);\n      }\n    }\n    this.acc[1] = 0.2;\n    this.vel[1] += this.acc[1];\n    this.pos[0] += this.vel[0];\n    this.pos[1] += this.vel[1];\n    this.sprite.update(dt);\n  };\n\n  Koopa.prototype.collideWall = function() {\n    //This stops us from flipping twice on the same frame if we collide\n    //with multiple wall tiles simultaneously.\n    this.turn = true;\n  };\n\n  Koopa.prototype.checkCollisions = function() {\n    var h = this.shell ? 1 : 2;\n    if (this.pos[1] % 16 !== 0) {\n      h += 1;\n    }\n    var w = this.pos[0] % 16 === 0 ? 1 : 2;\n\n    var baseX = Math.floor(this.pos[0] / 16);\n    var baseY = Math.floor(this.pos[1] / 16);\n\n    if (baseY + h > 15) {\n      delete level.enemies[this.idx];\n      return;\n    }\n\n    if (this.flipping) {\n      return;\n    }\n\n    for (var i = 0; i < h; i++) {\n      for (var j = 0; j < w; j++) {\n        if (level.statics[baseY + i][baseX + j]) {\n          level.statics[baseY + i][baseX + j].isCollideWith(this);\n        }\n        if (level.blocks[baseY + i][baseX + j]) {\n          level.blocks[baseY + i][baseX + j].isCollideWith(this);\n        }\n      }\n    }\n    var that = this;\n    level.enemies.forEach(function(enemy){\n      if (enemy === that) { //don't check collisions with ourselves.\n        return;\n      } else if (enemy.pos[0] - vX > 336){ //stop checking once we get to far away dudes.\n        return;\n      } else {\n        that.isCollideWith(enemy);\n      }\n    });\n    this.isCollideWith(player);\n  };\n\n  Koopa.prototype.isCollideWith = function(ent) {\n    if (ent instanceof Mario.Player && (this.dying || ent.invincibility)) {\n      return;\n    }\n\n    //the first two elements of the hitbox array are an offset, so let's do this now.\n    var hpos1 = [this.pos[0] + this.hitbox[0], this.pos[1] + this.hitbox[1]];\n    var hpos2 = [ent.pos[0] + ent.hitbox[0], ent.pos[1] + ent.hitbox[1]];\n\n    //if the hitboxes actually overlap\n    if (!(hpos1[0] > hpos2[0]+ent.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n      if (!(hpos1[1] > hpos2[1]+ent.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n        if (ent instanceof Mario.Player) {\n          if (ent.vel[1] > 0) {\n            player.bounce = true;\n          }\n          if (this.shell) {\n            sounds.kick.play();\n            if (this.vel[0] === 0) {\n              if (ent.left) { //I'm pretty sure this isn't the real logic.\n                this.vel[0] = -4;\n              } else {\n                this.vel[0] = 4;\n              }\n            } else {\n              if (ent.bounce) {\n                this.vel[0] = 0;\n              } else ent.damage();\n            }\n          } else if (ent.vel[1] > 0) { //then we get BOPPED.\n            this.stomp();\n          } else { //or the player gets hit\n            ent.damage();\n          }\n        } else {\n          if (this.shell && (ent instanceof Mario.Goomba)) {\n            ent.bump();\n          } else this.collideWall();\n        }\n      }\n    }\n  };\n\n  Koopa.prototype.stomp = function() {\n    //Turn this thing into a shell if it isn't already. Kick it if it is.\n    player.bounce = true;\n    if (this.para) {\n      this.para = false;\n      this.sprite.pos[0] -= 32;\n    } else {\n      sounds.stomp.play();\n      this.shell = 360;\n      this.sprite.pos[0] += 64;\n      this.sprite.pos[1] += 16;\n      this.sprite.size = [16,16];\n      this.hitbox = [2,0,12,16];\n      this.sprite.speed = 0;\n      this.frames = [0,1];\n      this.vel = [0,0];\n      this.pos[1] += 16;\n    }\n\n  };\n\n  Koopa.prototype.bump = function() {\n    sounds.kick.play();\n    if (this.flipping) return;\n    this.flipping = true;\n    this.sprite.pos = [160, 0];\n    this.sprite.size = [16,16];\n    this.hitbox = [2, 0, 12, 16];\n    this.sprite.speed = 0;\n    this.vel[0] = 0;\n    this.vel[1] = -2.5;\n  };\n})();\n","(function() {\n\tif (typeof Mario === 'undefined')\n\t\twindow.Mario = {};\n\n\tvar Floor = Mario.Floor = function(pos, sprite) {\n\n\t\tMario.Entity.call(this, {\n\t\t\tpos: pos,\n\t\t\tsprite: sprite,\n\t\t\thitbox: [0,0,16,16]\n\t\t});\n\t}\n\n\tMario.Util.inherits(Floor, Mario.Entity);\n\n\tFloor.prototype.isCollideWith = function (ent) {\n\t\t//the first two elements of the hitbox array are an offset, so let's do this now.\n\t\tvar hpos1 = [Math.floor(this.pos[0] + this.hitbox[0]), Math.floor(this.pos[1] + this.hitbox[1])];\n\t\tvar hpos2 = [Math.floor(ent.pos[0] + ent.hitbox[0]), Math.floor(ent.pos[1] + ent.hitbox[1])];\n\n\t\t//if the hitboxes actually overlap\n\t\tif (!(hpos1[0] > hpos2[0]+ent.hitbox[2] || (hpos1[0]+this.hitbox[2] < hpos2[0]))) {\n\t\t\tif (!(hpos1[1] > hpos2[1]+ent.hitbox[3] || (hpos1[1]+this.hitbox[3] < hpos2[1]))) {\n\t\t\t\tif (!this.standing) {\n\t\t\t\t\tent.bump();\n\t\t\t\t} else {\n\t\t\t\t\t//if the entity is over the block, it's basically floor\n\t\t\t\t\tvar center = hpos2[0] + ent.hitbox[2] / 2;\n\t\t\t\t\tif (Math.abs(hpos2[1] + ent.hitbox[3] - hpos1[1]) <= ent.vel[1]) {\n\t\t\t\t\t\tif (level.statics[(this.pos[1] / 16) - 1][this.pos[0] / 16]) {return};\n\t\t\t\t\t\tent.vel[1] = 0;\n\t\t\t\t\t\tent.pos[1] = hpos1[1] - ent.hitbox[3] - ent.hitbox[1];\n\t\t\t\t\t\tent.standing = true;\n\t\t\t\t\t\tif (ent instanceof Mario.Player) {\n\t\t\t\t\t\t\tent.jumping = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (Math.abs(hpos2[1] - hpos1[1] - this.hitbox[3]) > ent.vel[1] &&\n\t\t\t\t\tcenter + 2 >= hpos1[0] && center - 2 <= hpos1[0] + this.hitbox[2]) {\n\t\t\t\t\t\t//ent is under the block.\n\t\t\t\t\t\tent.vel[1] = 0;\n\t\t\t\t\t\tent.pos[1] = hpos1[1] + this.hitbox[3];\n\t\t\t\t\t\tif (ent instanceof Mario.Player) {\n\t\t\t\t\t\t\tthis.bonk(ent.power);\n\t\t\t\t\t\t\tent.jumping = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//entity is hitting it from the side, we're a wall\n\t\t\t\t\t\tent.collideWall(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tFloor.prototype.bonk = function() {;}\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n    window.Mario = {};\n\n  //TODO: clean up the logic for sprite switching.\n  //TODO: There's a weird bug with the collision logic. Look into it.\n\n  var Block = Mario.Block = function(options) {\n    this.item = options.item;\n    this.usedSprite = options.usedSprite;\n    this.bounceSprite = options.bounceSprite;\n    this.breakable = options.breakable;\n\n    Mario.Entity.call(this, {\n      pos: options.pos,\n      sprite: options.sprite,\n      hitbox: [0,0,16,16]\n    });\n\n    this.standing = true;\n  }\n\n  Mario.Util.inherits(Block, Mario.Floor);\n\n  Block.prototype.break = function() {\n    sounds.breakBlock.play();\n    (new Mario.Rubble()).spawn(this.pos);\n    var x = this.pos[0] / 16, y = this.pos[1] / 16;\n    delete level.blocks[y][x];\n  }\n\n  Block.prototype.bonk = function(power) {\n    sounds.bump.play();\n    if (power > 0 && this.breakable) {\n      this.break();\n    } else if (this.standing){\n      this.standing = false;\n      if (this.item) {\n        this.item.spawn();\n        this.item = null;\n      }\n      this.opos = [];\n      this.opos[0] = this.pos[0];\n      this.opos[1] = this.pos[1];\n      if (this.bounceSprite) {\n        this.osprite = this.sprite;\n        this.sprite = this.bounceSprite;\n      } else {\n        this.sprite = this.usedSprite;\n      }\n\n      this.vel[1] = -2;\n    }\n  }\n\n  Block.prototype.update = function(dt, gameTime) {\n    if (!this.standing) {\n      if (this.pos[1] < this.opos[1] - 8) {\n        this.vel[1] = 2;\n      }\n      if (this.pos[1] > this.opos[1]) {\n        this.vel[1] = 0;\n        this.pos = this.opos;\n        if (this.osprite) {\n          this.sprite = this.osprite;\n        }\n        this.standing = true;\n      }\n    } else {\n      if (this.sprite === this.usedSprite) {\n        var x = this.pos[0] / 16, y = this.pos[1] / 16;\n        level.statics[y][x] = new Mario.Floor(this.pos, this.usedSprite);\n        delete level.blocks[y][x];\n      }\n    }\n\n    this.pos[1] += this.vel[1];\n    this.sprite.update(dt, gameTime);\n  }\n\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  //TODO: make each rubble an entity, use that render and write in Entity.update\n  var Rubble = Mario.Rubble = function() {\n    this.sprites = [];\n    this.poss = [];\n    this.vels = [];\n  }\n\n  Rubble.prototype.spawn = function(pos) {\n    this.idx = level.items.length;\n    level.items.push(this);\n    this.sprites[0] = level.rubbleSprite();\n    this.sprites[1] = level.rubbleSprite();\n    this.sprites[2] = level.rubbleSprite();\n    this.sprites[3] = level.rubbleSprite();\n    this.poss[0] = pos;\n    this.poss[1] = [ pos[0] + 8, pos[1] ];\n    this.poss[2] = [ pos[0], pos[1] + 8 ];\n    this.poss[3] = [ pos[0] + 8, pos[1] + 8 ];\n    this.vels[0] = [-1.25, -5];\n    this.vels[1] = [1.25, -5];\n    this.vels[2] = [-1.25, -3];\n    this.vels[3] = [1.25, -3];\n  }\n\n  Rubble.prototype.update = function(dt) {\n    for(var i = 0; i < 4; i++) {\n      if (this.sprites[i]===undefined) continue;\n      this.vels[i][1] += .3;\n      this.poss[i][0] += this.vels[i][0];\n      this.poss[i][1] += this.vels[i][1];\n      this.sprites[i].update(dt);\n      if (this.poss[i][1] > 256) {\n        delete this.sprites[i];\n      }\n    }\n    if (this.sprites.every(function (el) {return !el})) {\n      delete level.items[this.idx];\n    }\n  }\n\n  //You might argue that things that can't collide are more like scenery\n  //but these move and need to be deleted, and i'd rather deal with the 1d array.\n  Rubble.prototype.checkCollisions = function() {;}\n\n  Rubble.prototype.render = function() {\n    for(var i = 0; i < 4; i++) {\n      if (this.sprites[i] === undefined) continue;\n      this.sprites[i].render(ctx, this.poss[i][0], this.poss[i][1], vX, vY);\n    }\n  }\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n  window.Mario = {};\n\n  //props do even less than entities, so they don't need to inherit really\n  var Prop = Mario.Prop = function(pos, sprite) {\n    this.pos = pos;\n    this.sprite = sprite;\n  }\n\n  //but we will be using the same Render, more or less.\n  Prop.prototype.render = function(ctx, vX, vY) {\n    this.sprite.render(ctx, this.pos[0], this.pos[1], vX, vY);\n  }\n})();\n","(function() {\n\tif (typeof Mario === 'undefined')\n\t\twindow.Mario = {};\n\n\tvar Player = Mario.Player = function(pos) {\n\t\t//I know, I know, there are a lot of variables tracking Mario's state.\n\t\t//Maybe these can be consolidated some way? We'll see once they're all in.\n\t\tthis.power = 0;\n\t\tthis.coins = 0;\n\t\tthis.powering = [];\n\t\tthis.bounce = false;\n\t\tthis.jumping = 0;\n\t\tthis.canJump = true;\n\t\tthis.invincibility = 0;\n\t\tthis.crouching = false;\n\t\tthis.fireballs = 0;\n\t\tthis.runheld = false;\n\t\tthis.noInput = false;\n\t\tthis.targetPos = [];\n\n\t\tMario.Entity.call(this, {\n\t\t\tpos: pos,\n\t\t\tsprite: new Mario.Sprite('sprites/player.png', [80,32],[16,16],0),\n\t\t\thitbox: [0,0,16,16]\n\t\t});\n\t};\n\n\tMario.Util.inherits(Player, Mario.Entity);\n\n\tPlayer.prototype.run = function() {\n\t\tthis.maxSpeed = 2.5;\n\t\tif (this.power == 2 && !this.runheld) {\n\t\t\tthis.shoot();\n\t\t}\n\t\tthis.runheld = true;\n\t}\n\n\tPlayer.prototype.shoot = function() {\n\t\tif (this.fireballs >= 2) return; //Projectile limit!\n\t\tthis.fireballs += 1;\n\t\tvar fb = new Mario.Fireball([this.pos[0]+8,this.pos[1]]); //I hate you, Javascript.\n\t\tfb.spawn(this.left);\n\t\tthis.shooting = 2;\n\t}\n\n\tPlayer.prototype.noRun = function() {\n\t\tthis.maxSpeed = 1.5;\n\t\tthis.moveAcc = 0.07;\n\t\tthis.runheld = false;\n\t}\n\n\tPlayer.prototype.moveRight = function() {\n\t\t//we're on the ground\n\t\tif (this.vel[1] === 0 && this.standing) {\n\t\t\tif (this.crouching) {\n\t\t\t\tthis.noWalk();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.acc[0] = this.moveAcc;\n\t\t\tthis.left = false;\n\t\t} else {\n\t\t\tthis.acc[0] = this.moveAcc;\n\t\t}\n\t};\n\n\tPlayer.prototype.moveLeft = function() {\n\t\tif (this.vel[1] === 0 && this.standing) {\n\t\t\tif (this.crouching) {\n\t\t\t\tthis.noWalk();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.acc[0] = -this.moveAcc;\n\t\t\tthis.left = true;\n\t\t} else {\n\t\t\tthis.acc[0] = -this.moveAcc;\n\t\t}\n\t};\n\n\tPlayer.prototype.noWalk = function() {\n\t\tthis.maxSpeed = 0;\n\t\tif (this.vel[0] === 0) return;\n\n\t\tif (Math.abs(this.vel[0]) <= 0.1) {\n\t\t\tthis.vel[0] = 0;\n\t\t\tthis.acc[0] = 0;\n\t\t}\n\n\t};\n\n\tPlayer.prototype.crouch = function() {\n\t\tif (this.power === 0) {\n\t\t\tthis.crouching = false;\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.standing) this.crouching = true;\n\t}\n\n\tPlayer.prototype.noCrouch = function() {\n\t\tthis.crouching = false;\n\t}\n\n\tPlayer.prototype.jump = function() {\n\t\tif (this.vel[1] > 0) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.jumping) {\n\t\t\tthis.jumping -= 1;\n\t\t} else if (this.standing && this.canJump) {\n\t\t\tthis.jumping = 20;\n\t\t\tthis.canJump = false;\n\t\t\tthis.standing = false;\n\t\t\tthis.vel[1] = -6;\n\t\t\tif (this.power === 0) {\n\t\t\t\tsounds.smallJump.currentTime = 0;\n\t\t\t\tsounds.smallJump.play();\n\t\t\t} else {\n\t\t\t\tsounds.bigJump.currentTime = 0;\n\t\t\t\tsounds.bigJump.play();\n\t\t\t}\n\t\t}\n\t};\n\n\tPlayer.prototype.noJump = function() {\n\t\tthis.canJump = true;\n\t\tif (this.jumping) {\n\t\t\tif (this.jumping <= 16) {\n\t\t\t\tthis.vel[1] = 0;\n\t\t\t\tthis.jumping = 0;\n\t\t\t} else this.jumping -= 1;\n\t\t}\n\t};\n\n  Player.prototype.setAnimation = function() {\n\t\tif (this.dying) return;\n\n\t\tif (this.starTime) {\n\t\t\tvar index;\n\t\t\tif (this.starTime > 60)\n\t\t\t\tindex = Math.floor(this.starTime / 2) % 3;\n\t\t\telse index = Math.floor(this.starTime / 8) % 3;\n\n\t\t\tthis.sprite.pos[1] = level.invincibility[index];\n\t\t\tif (this.power == 0) {\n\t\t\t\tthis.sprite.pos[1] += 32;\n\t\t\t}\n\t\t\tthis.starTime -= 1;\n\t\t\tif (this.starTime == 0) {\n\t\t\t\tswitch(this.power) {\n\t\t\t\t\tcase 0: this.sprite.pos[1] = 32; break;\n\t\t\t\t\tcase 1: this.sprite.pos[1] = 0; break;\n\t\t\t\t\tcase 2: this.sprite.pos[1] = 96; break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//okay cool, now set the sprite\n\t\tif (this.crouching) {\n\t\t\tthis.sprite.pos[0] = 176;\n\t\t\tthis.sprite.speed = 0;\n\t\t\treturn;\n\t\t}\n\n    if (this.jumping) {\n\t\t\tthis.sprite.pos[0] = 160;\n\t\t\tthis.sprite.speed = 0;\n\t\t} else if (this.standing) {\n\t\t\tif (Math.abs(this.vel[0]) > 0) {\n\t\t\t\tif (this.vel[0] * this.acc[0] >= 0) {\n\t\t\t\t\tthis.sprite.pos[0] = 96;\n\t\t\t\t\tthis.sprite.frames = [0,1,2];\n\t\t\t\t\tif (this.vel[0] < 0.2) {\n\t\t\t\t\t\tthis.sprite.speed = 5;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.sprite.speed = Math.abs(this.vel[0]) * 8;\n\t\t\t\t\t}\n\t\t\t\t} else if ((this.vel[0] > 0 && this.left) || (this.vel[0] < 0 && !this.left)){\n\t\t\t\t\tthis.sprite.pos[0] = 144;\n\t\t\t\t\tthis.sprite.speed = 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.sprite.pos[0] = 80;\n\t\t\t\tthis.sprite.speed = 0;\n\t\t\t}\n\t\t\tif (this.shooting) {\n\t\t\t\tthis.sprite.pos[0] += 160;\n\t\t\t\tthis.shooting -= 1;\n\t\t\t}\n\t\t}\n\n\t\tif (this.flagging) {\n\t\t\tthis.sprite.pos[0] = 192;\n\t\t\tthis.sprite.frames = [0,1];\n\t\t\tthis.sprite.speed = 10;\n\t\t\tif (this.vel[1] === 0) this.sprite.frames = [0];\n\t\t}\n\n\t\t//which way are we facing?\n\t\tif (this.left) {\n\t\t\tthis.sprite.img = 'sprites/playerl.png';\n\t\t} else {\n\t\t\tthis.sprite.img = 'sprites/player.png';\n\t\t}\n  };\n\n\tPlayer.prototype.update = function(dt, vX) {\n\t\tif (this.powering.length !== 0) {\n\t\t\tvar next = this.powering.shift();\n\t\t\tif (next == 5) return;\n\t\t\tthis.sprite.pos = this.powerSprites[next];\n\t\t\tthis.sprite.size = this.powerSizes[next];\n\t\t\tthis.pos[1] += this.shift[next];\n\t\t\tif (this.powering.length === 0) {\n\t\t\t\tdelete level.items[this.touchedItem];\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.invincibility) {\n\t\t\tthis.invincibility -= Math.round(dt * 60);\n\t\t}\n\n\t\tif (this.waiting) {\n\t\t\tthis.waiting -= dt;\n\t\t\tif (this.waiting <= 0) {\n\t\t\t\tthis.waiting = 0;\n\t\t\t} else return;\n\t\t}\n\n\t\tif (this.bounce) {\n\t\t\tthis.bounce = false;\n\t\t\tthis.standing = false;\n\t\t\tthis.vel[1] = -3;\n\t\t}\n\n\t\tif (this.pos[0] <= vX) {\n\t\t\tthis.pos[0] = vX;\n\t\t\tthis.vel[0] = Math.max(this.vel[0], 0);\n\t\t}\n\n\t\tif (Math.abs(this.vel[0]) > this.maxSpeed) {\n\t\t\tthis.vel[0] -= 0.05 *  this.vel[0] / Math.abs(this.vel[0]);\n\t\t\tthis.acc[0] = 0;\n\t\t}\n\n\t\tif (this.dying){\n\t\t\tif (this.pos[1] < this.targetPos[1]) {\n\t\t\t\tthis.vel[1] = 1;\n\t\t\t}\n\t\t\tthis.dying -= 1 * dt;\n\t\t\tif (this.dying <= 0) {\n\t\t\t\tplayer = new Mario.Player(level.playerPos);\n\t\t\t\tlevel.loader.call();\n\t\t\t\tinput.reset();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.acc[1] = 0.25\n\t\t\tif (this.pos[1] > 240) {\n\t\t\t\tthis.die();\n\t\t\t}\n\t\t}\n\n\t\tif (this.piping) {\n\t\t\tthis.acc = [0,0];\n\t\t\tvar pos = [Math.round(this.pos[0]), Math.round(this.pos[1])]\n\t\t\tif (pos[0] === this.targetPos[0] && pos[1] === this.targetPos[1]) {\n\t\t\t\tthis.piping = false;\n\t\t\t\tthis.pipeLoc.call();\n\t\t\t}\n\t\t}\n\n\t\tif (this.flagging) {\n\t\t\tthis.acc = [0,0];\n\t\t}\n\n\t\tif (this.exiting) {\n\t\t\tthis.left = false;\n\t\t\tthis.flagging = false;\n\t\t\tthis.vel[0] = 1.5;\n\t\t\tif (this.pos[0] >= this.targetPos[0]) {\n\t\t\t\tthis.sprite.size = [0,0];\n\t\t\t\tthis.vel = [0,0];\n\t\t\t\twindow.setTimeout(function() {\n\t\t\t\t\tplayer.sprite.size = player.power===0 ? [16,16] : [16,32];\n\t\t\t\t\tplayer.exiting = false;\n\t\t\t\t\tplayer.noInput = false;\n\t\t\t\t\tlevel.loader();\n\t\t\t\t\tif (player.power !== 0) player.pos[1] -= 16;\n\t\t\t\t\t// music.overworld.currentTime = 0;\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t}\n\n\t\t//approximate acceleration\n\t\tthis.vel[0] += this.acc[0];\n\t\tthis.vel[1] += this.acc[1];\n\t\tthis.pos[0] += this.vel[0];\n\t\tthis.pos[1] += this.vel[1];\n\n    this.setAnimation();\n\t\tthis.sprite.update(dt);\n\t};\n\n\tPlayer.prototype.checkCollisions = function() {\n\t\tif (this.piping || this.dying) return;\n\t\t//x-axis first!\n\t\tvar h = this.power > 0 ? 2 : 1;\n\t\tvar w = 1;\n\t\tif (this.pos[1] % 16 !== 0) {\n\t\t\th += 1;\n\t\t}\n\t\tif (this.pos[0] % 16 !== 0) {\n\t\t\tw += 1;\n\t\t}\n\t\tvar baseX = Math.floor(this.pos[0] / 16);\n\t\tvar baseY = Math.floor(this.pos[1] / 16);\n\n\t\tfor (var i = 0; i < h; i++) {\n\t\t\tif (baseY + i < 0 || baseY + i >= 15) continue;\n\t\t\tfor (var j = 0; j < w; j++) {\n\t\t\t\tif (baseY < 0) { i++;}\n\t\t\t\tif (level.statics[baseY + i][baseX + j]) {\n\t\t\t\t\tlevel.statics[baseY + i][baseX + j].isCollideWith(this);\n\t\t\t\t}\n\t\t\t\tif (level.blocks[baseY + i][baseX + j]) {\n\t\t\t\t\tlevel.blocks[baseY + i][baseX + j].isCollideWith(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tPlayer.prototype.powerUp = function(idx) {\n\t\tsounds.powerup.play();\n\t  this.powering = [0,5,2,5,1,5,2,5,1,5,2,5,3,5,1,5,2,5,3,5,1,5,4];\n\t\tthis.touchedItem = idx;\n\n\t\tif (this.power === 0) {\n\t\t\tthis.sprite.pos[0] = 80;\n\t\t\tvar newy = this.sprite.pos[1] - 32;\n\t\t\tthis.powerSprites = [[80, newy+32], [80, newy+32], [320, newy], [80, newy], [128, newy]];\n\t\t\tthis.powerSizes = [[16,16],[16,16],[16,32],[16,32],[16,32]];\n\t\t\tthis.shift = [0,16,-16,0,-16];\n\t\t\tthis.power = 1;\n\t\t\tthis.hitbox = [0,0,16,32];\n\t\t} else if (this.power == 1) {\n\t\t\tvar curx = this.sprite.pos[0];\n\t\t\tthis.powerSprites = [[curx, 96], [curx, level.invincibility[0]],\n\t\t\t\t[curx, level.invincibility[1]], [curx, level.invincibility[2]],\n\t\t\t\t[curx, 96]];\n\t\t\tthis.powerSizes[[16,32],[16,32],[16,32],[16,32],[16,32]];\n\t\t\tthis.shift = [0,0,0,0,0];\n\t\t\tthis.power = 2;\n\t\t} else {\n\t\t\tthis.powering = [];\n\t\t\tdelete level.items[idx];\n\t\t\t//no animation, but we play the sound and you get 5000 points.\n\t\t}\n\t};\n\n\tPlayer.prototype.damage = function() {\n\t\tif (this.power === 0) { //if you're already small, you dead!\n\t\t\tthis.die();\n\t\t} else { //otherwise, you get turned into small mario\n\t\t\tsounds.pipe.play();\n\t\t\tthis.powering = [0,5,1,5,2,5,1,5,2,5,1,5,2,5,1,5,2,5,1,5,2,5,3];\n\t\t\tthis.shift = [0,16,-16,16];\n\t\t\tthis.sprite.pos = [160, 0];\n\t\t\tthis.powerSprites = [[160,0], [240, 32], [240, 0], [160, 32]];\n\t\t\tthis.powerSizes = [[16, 32], [16,16], [16,32], [16,16]];\n\t\t\tthis.invincibility = 120;\n\t\t\tthis.power = 0;\n\t\t\tthis.hitbox = [0,0,16,16];\n\t\t}\n\t};\n\n\tPlayer.prototype.die = function () {\n\t\t//TODO: rewrite the way sounds work to emulate the channels of an NES.\n\t\t// music.overworld.pause();\n\t\tmusic.underground.pause();\n\t\t// music.overworld.currentTime = 0;\n\t\tmusic.death.play();\n\t\tthis.noWalk();\n\t\tthis.noRun();\n\t\tthis.noJump();\n\n\t\tthis.acc[0] = 0;\n\t\tthis.sprite.pos = [176, 32];\n\t\tthis.sprite.speed = 0;\n\t\tthis.power = 0;\n\t\tthis.waiting = 0.5;\n\t\tthis.dying = 2;\n\n\t\tif (this.pos[1] < 240) { //falling into a pit doesn't do the animation.\n\t\t\tthis.targetPos = [this.pos[0], this.pos[1]-128];\n\t\t\tthis.vel = [0,-5];\n\t\t} else {\n\t\t\tthis.vel = [0,0];\n\t\t\tthis.targetPos = [this.pos[0], this.pos[1] - 16];\n\t\t}\n\t};\n\n\tPlayer.prototype.star = function(idx) {\n\t\tdelete level.items[idx];\n\t\tthis.starTime = 660;\n\t}\n\n\tPlayer.prototype.pipe = function(direction, destination) {\n\t\tsounds.pipe.play();\n\t\tthis.piping = true;\n\t\tthis.pipeLoc = destination;\n\t\tswitch(direction) {\n\t\t\tcase \"A\":\n\t\t\t\tthis.vel = [-1,0];\n\t\t\t\tthis.targetPos = [Math.round(this.pos[0]-16), Math.round(this.pos[1])]\n\t\t\t\tbreak;\n\t\t\tcase \"D\":\n\t\t\t\tthis.vel = [1,0];\n\t\t\t\tthis.targetPos = [Math.round(this.pos[0]+16), Math.round(this.pos[1])]\n\t\t\t\tbreak;\n\t\t\tcase \"S\":\n\t\t\t\tthis.vel = [0,1];\n\t\t\t\tthis.targetPos = [Math.round(this.pos[0]), Math.round(this.pos[1]+this.hitbox[3])]\n\t\t\t\tbreak;\n\t\t\tcase \"W\":\n\t\t\t\tthis.vel = [0,-1];\n\t\t\t\tthis.targetPos = [Math.round(this.pos[0]), Math.round(this.pos[1]-this.hitbox[3])]\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tPlayer.prototype.flag = function() {\n\t\tthis.noInput = true;\n\t\tthis.flagging = true;\n\t\tthis.vel = [0, 2];\n\t\tthis.acc = [0, 0];\n\t}\n\n\tPlayer.prototype.exit = function() {\n\t\tthis.pos[0] += 16;\n\t\tthis.targetPos[0] = level.exit * 16;\n\t\tthis.left = true;\n\t\tthis.setAnimation();\n\t\tthis.waiting = 1;\n\t\tthis.exiting = true;\n\t}\n})();\n","(function() {\n  if (typeof Mario === 'undefined')\n    window.Mario = {};\n\n  Flag = Mario.Flag = function(pos) {\n    //afaik flags always have the same height and Y-position\n    this.pos = [pos, 49];\n    this.hitbox = [0,0,0,0];\n    this.vel = [0,0];\n    this.acc = [0,0];\n  }\n\n  Flag.prototype.collideWall = function() {;\n  }\n\n  Flag.prototype.update = function(dt){\n    if (!this.done && this.pos[1] >= 170) {\n      this.vel = [0,0];\n      this.pos[1] = 170;\n      player.exit();\n      this.done = true;\n    }\n    this.pos[1] += this.vel[1];\n  }\n\n  Flag.prototype.checkCollisions = function() {\n    this.isPlayerCollided();\n  }\n\n  Flag.prototype.isPlayerCollided = function() {\n    if (this.hit) return;\n    if (player.pos[0] + 8 >= this.pos[0]) {\n      // music.overworld.pause();\n      sounds.flagpole.play();\n      setTimeout(function() {\n        music.clear.play();\n      }, 2000);\n      this.hit = true;\n      player.flag();\n      this.vel = [0, 2];\n    }\n  }\n\n  Flag.prototype.render = function() {\n    level.flagpoleSprites[2].render(ctx, this.pos[0]-8, this.pos[1], vX, vY);\n  }\n})();\n","(function() {\n  var Level = Mario.Level = function(options) {\n    this.playerPos = options.playerPos;\n    this.scrolling = options.scrolling;\n    this.loader = options.loader;\n    this.background = options.background;\n    this.exit = options.exit;\n\n    this.floorSprite = options.floorSprite;\n    this.cloudSprite = options.cloudSprite;\n    this.wallSprite = options.wallSprite;\n    this.brickSprite = options.brickSprite;\n    this.rubbleSprite = options.rubbleSprite;\n    this.brickBounceSprite = options.brickBounceSprite;\n    this.ublockSprite = options.ublockSprite;\n    this.superShroomSprite = options.superShroomSprite;\n    this.fireFlowerSprite = options.fireFlowerSprite;\n    this.starSprite = options.starSprite;\n    this.coinSprite = options.coinSprite;\n    this.bcoinSprite = options.bcoinSprite;\n    this.goombaSprite = options.goombaSprite;\n    this.koopaSprite = options.koopaSprite;\n\n    //prop pipe sprites, to be phased out\n    this.pipeLEndSprite = options.pipeLEndSprite;\n    this.pipeREndSprite = options.pipeREndSprite;\n    this.pipeLMidSprite = options.pipeLMidSprite;\n    this.pipeRMidSprite = options.pipeRMidSprite;\n\n    //real pipe sprites, use these.\n    this.pipeUpMid = options.pipeUpMid;\n    this.pipeSideMid = options.pipeSideMid;\n    this.pipeLeft = options.pipeLeft;\n    this.pipeTop = options.pipeTop;\n\n    this.flagpoleSprites = options.flagPoleSprites;\n\n    this.LPipeSprites = options.LPipeSprites;\n    this.cloudSprites = options.cloudSprites;\n    this.hillSprites = options.hillSprites;\n    this.bushSprite = options.bushSprite;\n    this.bushSprites = options.bushSprites;\n    this.qblockSprite = options.qblockSprite;\n\n    this.invincibility = options.invincibility;\n    this.statics = [];\n    this.scenery = [];\n    this.blocks = [];\n    this.enemies = [];\n    this.items = [];\n    this.pipes = [];\n\n    for (var i = 0; i < 15; i++) {\n      this.statics[i] = [];\n      this.scenery[i] = [];\n      this.blocks[i] = [];\n    }\n\n  };\n\n  Level.prototype.putFloor = function(start, end) {\n    for (var i = start; i < end; i++) {\n      this.statics[13][i] = new Mario.Floor([16*i,208], this.floorSprite);\n      this.statics[14][i] = new Mario.Floor([16*i,224], this.floorSprite);\n    }\n  };\n\n  Level.prototype.putGoomba = function(x, y) {\n    this.enemies.push(new Mario.Goomba([16*x, 16*y], this.goombaSprite() ));\n  };\n\n  Level.prototype.putKoopa = function(x, y) {\n    this.enemies.push(new Mario.Koopa([16*x, 16*y], this.koopaSprite(), false));\n  };\n\n  Level.prototype.putWall = function(x, y, height) {\n    //y is the bottom of the wall in this case.\n    for (var i = y-height; i < y; i++) {\n      this.statics[i][x] = new Mario.Floor([16*x, 16*i], this.wallSprite);\n    }\n  };\n\n  Level.prototype.putPipe = function(x, y, height) {\n    for (var i = y - height; i < y; i++) {\n      if (i === y - height) {\n        this.statics[i][x] = new Mario.Floor([16*x, 16*i], this.pipeLEndSprite);\n        this.statics[i][x+1] = new Mario.Floor([16*x+16, 16*i], this.pipeREndSprite);\n      } else {\n        this.statics[i][x] = new Mario.Floor([16*x, 16*i], this.pipeLMidSprite);\n        this.statics[i][x+1] = new Mario.Floor([16*x+16, 16*i], this.pipeRMidSprite);\n      }\n    }\n  };\n\n  //sometimes, pipes don't go straight up and down.\n  Level.prototype.putLeftPipe = function(x,y) {\n    this.statics[y][x] = new Mario.Floor([16*x, 16*y], this.LPipeSprites[0]);\n    this.statics[y+1][x] = new Mario.Floor([16*x,16*(y+1)], this.LPipeSprites[1]);\n    this.statics[y][x+1] = new Mario.Floor([16*(x+1),16*y], this.LPipeSprites[2]);\n    this.statics[y+1][x+1] = new Mario.Floor([16*(x+1),16*(y+1)], this.LPipeSprites[3]);\n    this.statics[y][x+2] = new Mario.Floor([16*(x+2),16*y], this.LPipeSprites[4]);\n    this.statics[y+1][x+2] = new Mario.Floor([16*(x+2),16*(y+1)], this.LPipeSprites[5]);\n  };\n\n  Level.prototype.putCoin = function(x, y) {\n    this.items.push(new Mario.Coin(\n      [x*16, y*16],\n      this.coinSprite()\n    ));\n  };\n\n  Level.prototype.putCloud = function(x, y) {\n    this.scenery[y][x] = new Mario.Prop([x*16, y*16], this.cloudSprite);\n  };\n\n  Level.prototype.putQBlock = function(x, y, item) {\n    this.blocks[y][x] = new Mario.Block( {\n      pos: [x*16, y*16],\n      item: item,\n      sprite: this.qblockSprite,\n      usedSprite: this.ublockSprite\n    });\n  };\n\n  Level.prototype.putBrick = function(x,y,item) {\n    this.blocks[y][x] = new Mario.Block({\n      pos: [x*16, y*16],\n      item: item,\n      sprite: this.brickSprite,\n      bounceSprite: this.brickBounceSprite,\n      usedSprite: this.ublockSprite,\n      breakable: !item\n    });\n  };\n\n  Level.prototype.putBigHill = function(x, y) {\n    var px = x*16, py = y*16;\n    this.scenery[y][x] = new Mario.Prop([px, py], this.hillSprites[0]);\n    this.scenery[y][x+1] = new Mario.Prop([px+16, py], this.hillSprites[3]);\n    this.scenery[y-1][x+1] = new Mario.Prop([px+16, py-16], this.hillSprites[0]);\n    this.scenery[y][x+2] = new Mario.Prop([px+32, py], this.hillSprites[4]);\n    this.scenery[y-1][x+2] = new Mario.Prop([px+32, py-16], this.hillSprites[3]);\n    this.scenery[y-2][x+2] = new Mario.Prop([px+32, py-32], this.hillSprites[1]);\n    this.scenery[y][x+3] = new Mario.Prop([px+48, py], this.hillSprites[5]);\n    this.scenery[y-1][x+3] = new Mario.Prop([px+48, py-16], this.hillSprites[2]);\n    this.scenery[y][x+4] = new Mario.Prop([px+64, py], this.hillSprites[2]);\n  };\n\n  Level.prototype.putBush = function(x, y) {\n    this.scenery[y][x] = new Mario.Prop([x*16, y*16], this.bushSprite);\n  };\n\n  Level.prototype.putThreeBush = function(x,y) {\n    px = x*16;\n    py = y*16;\n    this.scenery[y][x] = new Mario.Prop([px, py], this.bushSprites[0]);\n    this.scenery[y][x+1] = new Mario.Prop([px+16, py], this.bushSprites[1]);\n    this.scenery[y][x+2] = new Mario.Prop([px+32, py], this.bushSprites[1]);\n    this.scenery[y][x+3] = new Mario.Prop([px+48, py], this.bushSprites[1]);\n    this.scenery[y][x+4] = new Mario.Prop([px+64, py], this.bushSprites[2]);\n  };\n\n  Level.prototype.putTwoBush = function(x,y) {\n    px = x*16;\n    py = y*16;\n    this.scenery[y][x] = new Mario.Prop([px, py], this.bushSprites[0]);\n    this.scenery[y][x+1] = new Mario.Prop([px+16, py], this.bushSprites[1]);\n    this.scenery[y][x+2] = new Mario.Prop([px+32, py], this.bushSprites[1]);\n    this.scenery[y][x+3] = new Mario.Prop([px+48, py], this.bushSprites[2]);\n  };\n\n  Level.prototype.putSmallHill = function(x, y) {\n    var px = x*16, py = y*16;\n    this.scenery[y][x] = new Mario.Prop([px, py], this.hillSprites[0]);\n    this.scenery[y][x+1] = new Mario.Prop([px+16, py], this.hillSprites[3]);\n    this.scenery[y-1][x+1] = new Mario.Prop([px+16, py-16], this.hillSprites[1]);\n    this.scenery[y][x+2] = new Mario.Prop([px+32, py], this.hillSprites[2]);\n  };\n\n  Level.prototype.putTwoCloud = function(x,y) {\n    px = x*16;\n    py = y*16;\n    this.scenery[y][x] = new Mario.Prop([px, py], this.cloudSprites[0]);\n    this.scenery[y][x+1] = new Mario.Prop([px+16, py], this.cloudSprites[1]);\n    this.scenery[y][x+2] = new Mario.Prop([px+32, py], this.cloudSprites[1]);\n    this.scenery[y][x+3] = new Mario.Prop([px+48, py], this.cloudSprites[2]);\n  };\n\n  Level.prototype.putThreeCloud = function(x,y) {\n    px = x*16;\n    py = y*16;\n    this.scenery[y][x] = new Mario.Prop([px, py], this.cloudSprites[0]);\n    this.scenery[y][x+1] = new Mario.Prop([px+16, py], this.cloudSprites[1]);\n    this.scenery[y][x+2] = new Mario.Prop([px+32, py], this.cloudSprites[1]);\n    this.scenery[y][x+3] = new Mario.Prop([px+48, py], this.cloudSprites[1]);\n    this.scenery[y][x+4] = new Mario.Prop([px+64, py], this.cloudSprites[2]);\n  };\n\n  Level.prototype.putRealPipe = function(x, y, length, direction, destination) {\n    px = x*16;\n    py = y*16;\n    this.pipes.push(new Mario.Pipe({\n      pos: [px, py],\n      length: length,\n      direction: direction,\n      destination: destination\n    }));\n  }\n\n  Level.prototype.putFlagpole = function(x) {\n    this.statics[12][x] = new Mario.Floor([16*x, 192], this.wallSprite);\n    for (i=3; i < 12; i++) {\n      this.scenery[i][x] = new Mario.Prop([16*x, 16*i], this.flagpoleSprites[1])\n    }\n    this.scenery[2][x] = new Mario.Prop([16*x, 32], this.flagpoleSprites[0]);\n    this.items.push(new Mario.Flag(16*x));\n  }\n})();\n","var oneone = Mario.oneone = function() {\n  //The things that need to be passed in are basically just dependent on what\n  //tileset we're in, so it makes more sense to just make one variable for that, so\n  //TODO: put as much of this in the Level object definition as possible.\n  level = new Mario.Level({\n    playerPos: [56,192],\n    loader: Mario.oneone,\n    background: \"#7974FF\",\n    scrolling: true,\n    invincibility: [144, 192, 240],\n    exit: 204,\n    floorSprite:  new Mario.Sprite('sprites/tiles.png', [0,0],[16,16],0),\n    cloudSprite:  new Mario.Sprite('sprites/tiles.png', [0,320],[48,32],0),\n    wallSprite: new Mario.Sprite('sprites/tiles.png', [0, 16],[16,16],0),\n    brickSprite: new Mario.Sprite('sprites/tiles.png', [16, 0], [16,16], 0),\n    brickBounceSprite: new Mario.Sprite('sprites/tiles.png',[32,0],[16,16],0),\n    rubbleSprite: function () {\n      return new Mario.Sprite('sprites/items.png', [64,0], [8,8], 3, [0,1])\n    },\n    ublockSprite: new Mario.Sprite('sprites/tiles.png', [48, 0], [16,16],0),\n    superShroomSprite: new Mario.Sprite('sprites/items.png', [0,0], [16,16], 0),\n    fireFlowerSprite: new Mario.Sprite('sprites/items.png', [0,32], [16,16], 20, [0,1,2,3]),\n    starSprite: new Mario.Sprite('sprites/items.png', [0,48], [16,16], 20, [0,1,2,3]),\n    pipeLEndSprite: new Mario.Sprite('sprites/tiles.png', [0, 128], [16,16], 0),\n    pipeREndSprite: new Mario.Sprite('sprites/tiles.png', [16, 128], [16,16], 0),\n    pipeLMidSprite: new Mario.Sprite('sprites/tiles.png', [0, 144], [16,16], 0),\n    pipeRMidSprite: new Mario.Sprite('sprites/tiles.png', [16, 144], [16,16], 0),\n\n    pipeUpMid: new Mario.Sprite('sprites/tiles.png', [0, 144], [32,16], 0),\n    pipeSideMid: new Mario.Sprite('sprites/tiles.png', [48, 128], [16,32], 0),\n    pipeLeft: new Mario.Sprite('sprites/tiles.png', [32, 128], [16,32], 0),\n    pipeTop: new Mario.Sprite('sprites/tiles.png', [0, 128], [32,16], 0),\n    qblockSprite: new Mario.Sprite('sprites/tiles.png', [384, 0], [16,16], 8, [0,0,0,0,1,2,1]),\n    bcoinSprite: function() {\n      return new Mario.Sprite('sprites/items.png', [0,112],[16,16], 20,[0,1,2,3]);\n    },\n    cloudSprites:[\n      new Mario.Sprite('sprites/tiles.png', [0,320],[16,32],0),\n      new Mario.Sprite('sprites/tiles.png', [16,320],[16,32],0),\n      new Mario.Sprite('sprites/tiles.png', [32,320],[16,32],0)\n    ],\n    hillSprites: [\n      new Mario.Sprite('sprites/tiles.png', [128,128],[16,16],0),\n      new Mario.Sprite('sprites/tiles.png', [144,128],[16,16],0),\n      new Mario.Sprite('sprites/tiles.png', [160,128],[16,16],0),\n      new Mario.Sprite('sprites/tiles.png', [128,144],[16,16],0),\n      new Mario.Sprite('sprites/tiles.png', [144,144],[16,16],0),\n      new Mario.Sprite('sprites/tiles.png', [160,144],[16,16],0)\n    ],\n    bushSprite: new Mario.Sprite('sprites/tiles.png', [176, 144], [48, 16], 0),\n    bushSprites: [\n     new Mario.Sprite('sprites/tiles.png', [176,144], [16,16],0),\n     new Mario.Sprite('sprites/tiles.png', [192,144], [16,16],0),\n     new Mario.Sprite('sprites/tiles.png', [208,144], [16,16],0)],\n   goombaSprite: function() {\n     return new Mario.Sprite('sprites/enemy.png', [0, 16], [16,16], 3, [0,1]);\n   },\n   koopaSprite: function() {\n     return new Mario.Sprite('sprites/enemy.png', [96,0], [16,32], 2, [0,1]);\n   },\n   flagPoleSprites: [\n     new Mario.Sprite('sprites/tiles.png', [256, 128], [16,16], 0),\n     new Mario.Sprite('sprites/tiles.png', [256, 144], [16,16], 0),\n     new Mario.Sprite('sprites/items.png', [128, 32], [16,16], 0)\n   ]\n });\n  ground = [[0,69],[71,86],[89,153],[155,212]];\n  player.pos[0] = level.playerPos[0];\n  player.pos[1] = level.playerPos[1];\n  vX = 0;\n\n  //build THE GROUND\n  ground.forEach(function(loc) {\n    level.putFloor(loc[0],loc[1]);\n  });\n\n  //build scenery\n  clouds = [[7,3],[19, 2],[56, 3],[67, 2],[87, 2],[103, 2],[152, 3],[163, 2],[200, 3]];\n  clouds.forEach(function(cloud){\n    level.putCloud(cloud[0],cloud[1]);\n  });\n\n  twoClouds = [[36,2],[132,2],[180,2]];\n  twoClouds.forEach(function(cloud){\n    level.putTwoCloud(cloud[0],cloud[1]);\n  });\n\n  threeClouds = [[27,3],[75,3],[123,3],[171,3]];\n  threeClouds.forEach(function(cloud){\n    level.putThreeCloud(cloud[0],cloud[1]);\n  });\n\n  bHills = [0,48,96,144,192]\n  bHills.forEach(function(hill) {\n    level.putBigHill(hill, 12);\n  });\n\n  sHills = [16,64,111,160];\n  sHills.forEach(function(hill) {\n    level.putSmallHill(hill, 12);\n  });\n\n  bushes = [23,71,118,167];\n  bushes.forEach(function(bush) {\n    level.putBush(bush, 12);\n  });\n\n  twoBushes = [41,89,137];\n  twoBushes.forEach(function(bush) {\n    level.putTwoBush(bush, 12);\n  });\n\n  threeBushes = [11,59,106];\n  threeBushes.forEach(function(bush) {\n    level.putThreeBush(bush, 12);\n  });\n\n  //interactable terrain\n  level.putQBlock(16, 9, new Mario.Bcoin([256, 144]));\n  level.putBrick(20, 9, null);\n  level.putQBlock(21, 9, new Mario.Mushroom([336, 144]));\n  level.putBrick(22, 9, null);\n  level.putQBlock(22, 5, new Mario.Bcoin([352, 80]));\n  level.putQBlock(23, 9, new Mario.Bcoin([368, 144]));\n  level.putBrick(24, 9, null);\n  level.putPipe(28, 13, 2);\n  level.putPipe(38, 13, 3);\n  level.putPipe(46, 13, 4);\n  level.putRealPipe(57, 9, 4, \"DOWN\", Mario.oneonetunnel);\n  level.putBrick(77, 9, null);\n  level.putQBlock(78, 9, new Mario.Mushroom([1248, 144]));\n  level.putBrick(79, 9, null);\n  level.putBrick(80, 5, null);\n  level.putBrick(81, 5, null);\n  level.putBrick(82, 5, null);\n  level.putBrick(83, 5, null);\n  level.putBrick(84, 5, null);\n  level.putBrick(85, 5, null);\n  level.putBrick(86, 5, null);\n  level.putBrick(87, 5, null);\n  level.putBrick(91, 5, null);\n  level.putBrick(92, 5, null);\n  level.putBrick(93, 5, null);\n  level.putQBlock(94, 5, new Mario.Bcoin([1504, 80]));\n  level.putBrick(94, 9, null);\n  level.putBrick(100, 9, new Mario.Star([1600, 144]));\n  level.putBrick(101, 9, null);\n  level.putQBlock(105, 9, new Mario.Bcoin([1680, 144]));\n  level.putQBlock(108, 9, new Mario.Bcoin([1728, 144]));\n  level.putQBlock(108, 5, new Mario.Mushroom([1728, 80]));\n  level.putQBlock(111, 9, new Mario.Bcoin([1776, 144]));\n  level.putBrick(117, 9, null);\n  level.putBrick(120, 5, null);\n  level.putBrick(121, 5, null);\n  level.putBrick(122, 5, null);\n  level.putBrick(123, 5, null);\n  level.putBrick(128, 5, null);\n  level.putQBlock(129, 5, new Mario.Bcoin([2074, 80]));\n  level.putBrick(129, 9, null);\n  level.putQBlock(130, 5, new Mario.Bcoin([2080, 80]));\n  level.putBrick(130, 9, null);\n  level.putBrick(131, 5, null);\n  level.putWall(134, 13, 1);\n  level.putWall(135, 13, 2);\n  level.putWall(136, 13, 3);\n  level.putWall(137, 13, 4);\n  level.putWall(140, 13, 4);\n  level.putWall(141, 13, 3);\n  level.putWall(142, 13, 2);\n  level.putWall(143, 13, 1);\n  level.putWall(148, 13, 1);\n  level.putWall(149, 13, 2);\n  level.putWall(150, 13, 3);\n  level.putWall(151, 13, 4);\n  level.putWall(152, 13, 4);\n  level.putWall(155, 13, 4);\n  level.putWall(156, 13, 3);\n  level.putWall(157, 13, 2);\n  level.putWall(158, 13, 1);\n  level.putPipe(163, 13, 2);\n  level.putBrick(168, 9, null);\n  level.putBrick(169, 9, null);\n  level.putQBlock(170, 9, new Mario.Bcoin([2720, 144]));\n  level.putBrick(171, 9, null);\n  level.putPipe(179, 13, 2);\n  level.putWall(181, 13, 1);\n  level.putWall(182, 13, 2);\n  level.putWall(183, 13, 3);\n  level.putWall(184, 13, 4);\n  level.putWall(185, 13, 5);\n  level.putWall(186, 13, 6);\n  level.putWall(187, 13, 7);\n  level.putWall(188, 13, 8);\n  level.putWall(189, 13, 8);\n  level.putFlagpole(198);\n\n  //and enemies\n  level.putGoomba(22, 12);\n  level.putGoomba(40, 12);\n  level.putGoomba(50, 12);\n  level.putGoomba(51, 12);\n  level.putGoomba(82, 4);\n  level.putGoomba(84, 4);\n  level.putGoomba(100, 12);\n  level.putGoomba(102, 12);\n  level.putGoomba(114, 12);\n  level.putGoomba(115, 12);\n  level.putGoomba(122, 12);\n  level.putGoomba(123, 12);\n  level.putGoomba(125, 12);\n  level.putGoomba(126, 12);\n  level.putGoomba(170, 12);\n  level.putGoomba(172, 12);\n  level.putKoopa(35, 11);\n\n  music.underground.pause();\n  // music.overworld.currentTime = 0;\n  // music.overworld.play();\n};\n","var oneonetunnel = Mario.oneonetunnel = function () {\n  level = new Mario.Level({\n    playerPos: [40, 16],\n    loader: Mario.oneonetunnel,\n    background: \"#000000\",\n    scrolling: false,\n    coinSprite: function () {\n      return new Mario.Sprite('sprites/items.png', [0, 96], [16, 16], 6, [0, 0, 0, 0, 1, 2, 1]);\n    },\n    floorSprite: new Mario.Sprite('sprites/tiles.png', [0, 32], [16, 16], 0),\n    wallSprite: new Mario.Sprite('sprites/tiles.png', [32, 32], [16, 16], 0),\n    brickSprite: new Mario.Sprite('sprites/tiles.png', [16, 0], [16, 16], 0),\n    brickBounceSprite: new Mario.Sprite('sprites/tiles.png', [32, 0], [16, 16], 0),\n    ublockSprite: new Mario.Sprite('sprites/tiles.png', [48, 0], [16, 16], 0),\n    pipeLMidSprite: new Mario.Sprite('sprites/tiles.png', [0, 144], [16, 16], 0),\n    pipeRMidSprite: new Mario.Sprite('sprites/tiles.png', [16, 144], [16, 16], 0),\n    pipeLEndSprite: new Mario.Sprite('sprites/tiles.png', [0, 128], [16, 16], 0),\n    pipeREndSprite: new Mario.Sprite('sprites/tiles.png', [16, 128], [16, 16], 0),\n    pipeUpMid: new Mario.Sprite('sprites/tiles.png', [0, 144], [32, 16], 0),\n    pipeSideMid: new Mario.Sprite('sprites/tiles.png', [48, 128], [16, 32], 0),\n    pipeLeft: new Mario.Sprite('sprites/tiles.png', [32, 128], [16, 32], 0),\n    pipeTop: new Mario.Sprite('sprites/tiles.png', [0, 128], [32, 16], 0),\n\n    LPipeSprites: [\n      new Mario.Sprite('sprites/tiles.png', [32, 128], [16, 16], 0),\n      new Mario.Sprite('sprites/tiles.png', [32, 144], [16, 16], 0),\n      new Mario.Sprite('sprites/tiles.png', [48, 128], [16, 16], 0),\n      new Mario.Sprite('sprites/tiles.png', [48, 144], [16, 16], 0),\n      new Mario.Sprite('sprites/tiles.png', [64, 128], [16, 16], 0),\n      new Mario.Sprite('sprites/tiles.png', [64, 144], [16, 16], 0),\n    ]\n\n  });\n\n  player.pos[0] = level.playerPos[0];\n  player.pos[1] = level.playerPos[1];\n  vX = 0;\n  level.putFloor(0, 16);\n  level.putWall(0, 13, 11);\n  walls = [4, 5, 6, 7, 8, 9, 10];\n  walls.forEach(function (loc) {\n    level.putWall(loc, 13, 3);\n    level.putWall(loc, 3, 1);\n  });\n\n  coins = [[5, 5], [6, 5], [7, 5], [8, 5], [9, 5],\n  [4, 7], [5, 7], [6, 7], [7, 7], [8, 7], [9, 7], [10, 7],\n  [4, 9], [5, 9], [6, 9], [7, 9], [8, 9], [9, 9], [10, 9]];\n  coins.forEach(function (pos) {\n    level.putCoin(pos[0], pos[1]);\n  });\n\n  //level.putLeftPipe(13,11);\n  level.putRealPipe(13, 11, 3, \"RIGHT\", function () {\n    Mario.oneone.call();\n    player.pos = [2616, 177]\n    player.pipe(\"UP\", function () { ; });\n  });\n\n  level.putPipe(15, 13, 13);\n\n  // music.overworld.pause();\n  music.underground.currentTime = 0;\n  music.underground.play();\n};\n","import { window, document } from './browser-compat.js';\n\nvar requestAnimFrame = (function(){\n  return window.requestAnimationFrame       ||\n    window.webkitRequestAnimationFrame ||\n    window.mozRequestAnimationFrame    ||\n    window.oRequestAnimationFrame      ||\n    window.msRequestAnimationFrame     ||\n    function(callback){\n      window.setTimeout(callback, 1000 / 60);\n    };\n})();\n\n//create the canvas\nvar canvas = document.createElement(\"canvas\");\nvar ctx = canvas.getContext ? canvas.getContext('2d') : null;\nvar updateables = [];\nvar fireballs = [];\nvar player = null; // Will be initialized later after Mario is defined\n\n//we might have to get the size and calculate the scaling\n//but this method should let us make it however big.\n//Cool!\n//TODO: Automatically scale the game to work and look good on widescreen.\n//TODO: fiddling with scaled sprites looks BETTER, but not perfect. Hmm.\n//viewport\nvar vX = 0,\n    vY = 0,\n    vWidth = 256,\n    vHeight = 240;\n\ndocument.body.appendChild(canvas);\n\nfunction resizeCanvas() {\n  var width = window.innerWidth || vWidth;\n  var height = window.innerHeight || vHeight;\n  var scale = Math.min(width / vWidth, height / vHeight);\n\n  if (!scale || scale <= 0) {\n    scale = 1;\n  }\n\n  canvas.width = width;\n  canvas.height = height;\n\n  var offsetX = (width - vWidth * scale) / 2;\n  var offsetY = (height - vHeight * scale) / 2;\n\n  ctx.setTransform(scale, 0, 0, scale, offsetX, offsetY);\n  ctx.imageSmoothingEnabled = false;\n}\n\nwindow.addEventListener('resize', resizeCanvas);\nresizeCanvas();\n\n//load our images\nresources.load([\n  'sprites/player.png',\n  'sprites/enemy.png',\n  'sprites/tiles.png',\n  'sprites/playerl.png',\n  'sprites/items.png',\n  'sprites/enemyr.png',\n]);\n\nresources.onReady(init);\nvar level;\nvar sounds;\nvar music;\n\n//initialize\nvar lastTime;\nfunction init() {\n  music = {\n    overworld: new Audio('sounds/aboveground_bgm.ogg'),\n    underground: new Audio('sounds/underground_bgm.ogg'),\n    clear: new Audio('sounds/stage_clear.wav'),\n    death: new Audio('sounds/mariodie.wav')\n  };\n  sounds = {\n    smallJump: new Audio('sounds/jump-small.wav'),\n    bigJump: new Audio('sounds/jump-super.wav'),\n    breakBlock: new Audio('sounds/breakblock.wav'),\n    bump: new Audio('sounds/bump.wav'),\n    coin: new Audio('sounds/coin.wav'),\n    fireball: new Audio('sounds/fireball.wav'),\n    flagpole: new Audio('sounds/flagpole.wav'),\n    kick: new Audio('sounds/kick.wav'),\n    pipe: new Audio('sounds/pipe.wav'),\n    itemAppear: new Audio('sounds/itemAppear.wav'),\n    powerup: new Audio('sounds/powerup.wav'),\n    stomp: new Audio('sounds/stomp.wav')\n  };\n  Mario.oneone();\n  lastTime = Date.now();\n  main();\n}\n\nvar gameTime = 0;\n\n//set up the game loop\nfunction main() {\n  var now = Date.now();\n  var dt = (now - lastTime) / 1000.0;\n\n  update(dt);\n  render();\n\n  lastTime = now;\n  requestAnimFrame(main);\n}\n\nfunction update(dt) {\n  gameTime += dt;\n\n  handleInput(dt);\n  updateEntities(dt, gameTime);\n\n  checkCollisions();\n}\n\nfunction handleInput(dt) {\n  if (player.piping || player.dying || player.noInput) return; //don't accept input\n\n  if (input.isDown('RUN')){\n    player.run();\n  } else {\n    player.noRun();\n  }\n  if (input.isDown('JUMP')) {\n    player.jump();\n  } else {\n    //we need this to handle the timing for how long you hold it\n    player.noJump();\n  }\n\n  if (input.isDown('DOWN')) {\n    player.crouch();\n  } else {\n    player.noCrouch();\n  }\n\n  if (input.isDown('LEFT')) { // 'd' or left arrow\n    player.moveLeft();\n  }\n  else if (input.isDown('RIGHT')) { // 'k' or right arrow\n    player.moveRight();\n  } else {\n    player.noWalk();\n  }\n}\n\n//update all the moving stuff\nfunction updateEntities(dt, gameTime) {\n  player.update(dt, vX);\n  updateables.forEach (function(ent) {\n    ent.update(dt, gameTime);\n  });\n\n  //This should stop the jump when he switches sides on the flag.\n  if (player.exiting) {\n    if (player.pos[0] > vX + 96)\n      vX = player.pos[0] - 96\n  }else if (level.scrolling && player.pos[0] > vX + 80) {\n    vX = player.pos[0] - 80;\n  }\n\n  if (player.powering.length !== 0 || player.dying) { return; }\n  level.items.forEach (function(ent) {\n    ent.update(dt);\n  });\n\n  level.enemies.forEach (function(ent) {\n    ent.update(dt, vX);\n  });\n\n  fireballs.forEach(function(fireball) {\n    fireball.update(dt);\n  });\n  level.pipes.forEach (function(pipe) {\n    pipe.update(dt);\n  });\n}\n\n//scan for collisions\nfunction checkCollisions() {\n  if (player.powering.length !== 0 || player.dying) { return; }\n  player.checkCollisions();\n\n  //Apparently for each will just skip indices where things were deleted.\n  level.items.forEach(function(item) {\n    item.checkCollisions();\n  });\n  level.enemies.forEach (function(ent) {\n    ent.checkCollisions();\n  });\n  fireballs.forEach(function(fireball){\n    fireball.checkCollisions();\n  });\n  level.pipes.forEach (function(pipe) {\n    pipe.checkCollisions();\n  });\n}\n\n//draw the game!\nfunction render() {\n  updateables = [];\n  ctx.save();\n  ctx.setTransform(1, 0, 0, 1, 0, 0);\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.fillStyle = level.background;\n  ctx.fillRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n\n  //scenery gets drawn first to get layering right.\n  for(var i = 0; i < 15; i++) {\n    for (var j = Math.floor(vX / 16) - 1; j < Math.floor(vX / 16) + 20; j++){\n      if (level.scenery[i][j]) {\n        renderEntity(level.scenery[i][j]);\n      }\n    }\n  }\n\n  //then items\n  level.items.forEach (function (item) {\n    renderEntity(item);\n  });\n\n  level.enemies.forEach (function(enemy) {\n    renderEntity(enemy);\n  });\n\n\n\n  fireballs.forEach(function(fireball) {\n    renderEntity(fireball);\n  })\n\n  //then we draw every static object.\n  for(var i = 0; i < 15; i++) {\n    for (var j = Math.floor(vX / 16) - 1; j < Math.floor(vX / 16) + 20; j++){\n      if (level.statics[i][j]) {\n        renderEntity(level.statics[i][j]);\n      }\n      if (level.blocks[i][j]) {\n        renderEntity(level.blocks[i][j]);\n        updateables.push(level.blocks[i][j]);\n      }\n    }\n  }\n\n  //then the player\n  if (player.invincibility % 2 === 0) {\n    renderEntity(player);\n  }\n\n  //Mario goes INTO pipes, so naturally they go after.\n  level.pipes.forEach (function(pipe) {\n    renderEntity(pipe);\n  });\n}\n\nfunction renderEntity(entity) {\n  entity.render(ctx, vX, vY);\n}\n","// Mario.js - Main entry point for the Mario game engine\n\n// Initialize browser compatibility layer first\nimport './browser-compat.js';\n\n// Import all game modules in dependency order  \nimport './util.js';\nimport './input.js';\nimport './resources.js';\nimport './sprite.js';\nimport './entity.js';\nimport './pipe.js';\nimport './mushroom.js';\nimport './fireflower.js';\nimport './star.js';\nimport './fireball.js';\nimport './coin.js';\nimport './bcoin.js';\nimport './goomba.js';\nimport './koopa.js';\nimport './floor.js';\nimport './block.js';\nimport './rubble.js';\nimport './prop.js';\nimport './player.js';\nimport './flag.js';\nimport './levels/level.js';\nimport './levels/11.js';\nimport './levels/11tunnel.js';\nimport './game.js';\n\n// Get Mario from global window (after all imports)\nconst MarioGame = (typeof window !== 'undefined' && window.Mario) || {};\n\n// Initialize game function for easy startup\nMarioGame.init = function(canvasElement) {\n  if (canvasElement && typeof document !== 'undefined') {\n    document.body.appendChild(canvasElement);\n  }\n  return MarioGame;\n};\n\n// Export the complete Mario game engine\nexport default MarioGame;"],"names":["window","document","ctx","fireballs","player","vX","vY","level"],"mappings":"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"}