Files

6255 lines
333 KiB
JavaScript

function applyNewJs() {
document.body.addEventListener("keydown", (function(e) {
32 !== e.keyCode && 38 !== e.keyCode && 40 !== e.keyCode || e.target !== document.body || e.preventDefault()
}), !1), document.getElementById("paused") && document.getElementById("paused").remove(), document.getElementById("mobile-controls") && document.getElementById("mobile-controls").remove();
var e = createElement("div", {
id: "paused"
}),
t = createElement("span");
t.innerText = "CLICK TO UNPAUSE", e.appendChild(t), body.appendChild(e);
var n = createElement("div", {
id: "mobile-controls"
}),
x = createElement("div", {
id: "move-left",
className: "move"
}),
r = createElement("div", {
id: "move-top",
className: "move"
}),
i = createElement("div", {
id: "move-right",
className: "move"
}),
a = createElement("div", {
id: "move-bottom",
className: "move"
}),
o = createElement("div", {
id: "move-fire",
className: "move"
}),
l = createElement("span"),
s = createElement("span"),
d = createElement("span"),
u = createElement("span"),
p = createElement("span");
x.appendChild(l), r.appendChild(s), i.appendChild(d), a.appendChild(u), o.appendChild(p), n.appendChild(x), n.appendChild(r), n.appendChild(i), n.appendChild(a), n.appendChild(o), body.appendChild(n);
var c = document.getElementById("move-right"),
m = document.getElementById("move-left"),
h = document.getElementById("move-top"),
f = document.getElementById("move-bottom"),
g = document.getElementById("move-fire");
c.addEventListener("touchstart", (function(e) {
var t = new KeyboardEvent("keydown", {
bubbles: !0,
cancelable: !0,
keyCode: 68
});
document.body.dispatchEvent(t)
})), c.addEventListener("touchend", (function(e) {
var t = new KeyboardEvent("keyup", {
bubbles: !0,
cancelable: !0,
keyCode: 68
});
document.body.dispatchEvent(t)
})), m.addEventListener("touchstart", (function(e) {
var t = new KeyboardEvent("keydown", {
bubbles: !0,
cancelable: !0,
keyCode: 65
});
document.body.dispatchEvent(t)
})), m.addEventListener("touchend", (function(e) {
var t = new KeyboardEvent("keyup", {
bubbles: !0,
cancelable: !0,
keyCode: 65
});
document.body.dispatchEvent(t)
})), h.addEventListener("touchstart", (function(e) {
var t = new KeyboardEvent("keydown", {
bubbles: !0,
cancelable: !0,
keyCode: 87
});
document.body.dispatchEvent(t)
})), h.addEventListener("touchend", (function(e) {
var t = new KeyboardEvent("keyup", {
bubbles: !0,
cancelable: !0,
keyCode: 87
});
document.body.dispatchEvent(t)
})), f.addEventListener("touchstart", (function(e) {
var t = new KeyboardEvent("keydown", {
bubbles: !0,
cancelable: !0,
keyCode: 83
});
document.body.dispatchEvent(t)
})), f.addEventListener("touchend", (function(e) {
var t = new KeyboardEvent("keyup", {
bubbles: !0,
cancelable: !0,
keyCode: 83
});
document.body.dispatchEvent(t)
})), g.addEventListener("touchstart", (function(e) {
var t = new KeyboardEvent("keydown", {
bubbles: !0,
cancelable: !0,
keyCode: 17
});
document.body.dispatchEvent(t)
})), g.addEventListener("touchend", (function(e) {
var t = new KeyboardEvent("keyup", {
bubbles: !0,
cancelable: !0,
keyCode: 17
});
document.body.dispatchEvent(t)
})), document.getElementById("data_display").style = "width:100%;font-size:13px"
}
function resetData() {
var e;
(e = document.getElementById("data_display")) && body.removeChild(e), window.data || (window.data = new Data)
}
function Data() {
this.playerpower = 1, this.traveled = this.traveledold = 0, this.scorelevs = [100, 200, 400, 500, 800, 1e3, 2e3, 4e3, 5e3, 8e3], this.score = new DataObject(0, 6, "SCORE"), this.time = new DataObject(350, 3, "TIME"), this.world = new DataObject(0, 0, "WORLD"), this.coins = new DataObject(0, 0, "COINS"), this.lives = new DataObject(3, 1, "LIVES"), this.time.dir = -1, this.scoreold = 0
}
function DataObject(e, t, n) {
this.amount = e, this.length = t, this.name = n, this.element = createElement("td", {
className: "indisplay"
})
}
function setDataDisplay() {
var e = createElement("table", {
id: "data_display",
className: "display",
style: {
width: gamescreen.right + 14 + "px"
}
}),
t = ["score", "coins", "world", "time", "lives"];
for (var n in body.appendChild(e), data.display = e, t) e.appendChild(data[t[n]].element), updateDataElement(data[t[n]]);
body.appendChild(data.display), is_mobile && applyNewJs()
}
function clearDataDisplay() {
body.removeChild(data_display)
}
function toggleLuigi() {
window.luigi = !window.luigi, localStorage.luigi = window.luigi, window.player.title = window.luigi ? "Luigi" : "Mario", setThingSprite(window.player)
}
function startDataTime() {
TimeHandler.addEventInterval(updateDataTime, 25, 1 / 0, data.time)
}
function updateDataTime(e) {
1 != e.dir && (100 == e.amount ? playCurrentThemeHurry() : e.amount <= 0 && killPlayer(player, !0)), notime || (map.time = e.amount += e.dir, updateDataElement(e))
}
function updateDataElement(e) {
var t = e.name + "<br />" + ("Infinity" == e.amount ? "Inf" : e.amount);
e.element.innerHTML = t, e.element.style.width = ""
}
function score(e, t, n) {
if (!(t <= 0)) {
if (1 == arguments.length) return score(player, e);
if (localStorage.highscore = max(localStorage.highscore, data.score.amount += t), n) {
var x = addText(t, e.left, e.top);
x.yvel = -unitsized4, TimeHandler.addEvent(killScore, 49, x)
}
for (; data.score > 1e4;) gainLife(), data.score.amount = data.score.amount % 1e4;
updateDataElement(data.score)
}
}
function killScore(e) {
body.contains(e) && body.removeChild(e), killNormal(e), deleteThing(e, texts, texts.indexOf(e))
}
function findScore(e) {
return e < data.scorelevs.length ? data.scorelevs[e] : (gainLife(), -1)
}
function gainLife(e, t) {
data.lives.amount += "number" == typeof e ? e : 1, t || AudioPlayer.play("Gain Life"), updateDataElement(data.lives)
}
function setLives(e) {
data.lives.amount = Number(e), updateDataElement(data.lives)
}
function storePlayerStats() {
data.playerpower = player.power
}
function clearPlayerStats() {
data.playerpower = player.power = 1
}
function loadEditor(e) {
editorClose(), e || (window.canedit = !0, setMap(["Special", "Blank"]), window.canedit = !1), setEditorLibrary(), setEditorHTML(), setEditorControls(), setEditorTriggers(), setEditorLocalRetrieval(), classAdd(body, "editor"), classAdd(editor.sidebar, "expanded"), TimeHandler.addEvent(classRemove, 35, editor.sidebar, "expanded"), map.shifting = !1, window.editing = !0
}
function setEditorLibrary() {
window.editor = {
xloc: 0,
yloc: 0,
playing: !1,
canplace: !0,
offset: {
x: unitsizet2
},
settings: {
night: !1,
setting: "Overworld",
alt: !1
},
defaults: {
width: 8,
height: 8,
widthoff: 0,
heightoff: 0,
minimum: 1,
followerUpdate: editorFollowerUpdateStandard,
prefunc: pushPreThing,
outerok: !0
},
placed: [],
characters: {
Goomba: {},
Koopa: {
height: 12,
arguments: {
smart: Boolean,
movement: ["moveSimple", "moveJumping", "moveFloating"]
},
followerUpdate: function(e, t) {
var n = "True" == t.smart,
x = t.movement,
r = "moveJumping" == x;
return "moveFloating" == x && (r = [8, 72]), [n, r]
},
onadds: {
nocollide: !1
}
},
Beetle: {
width: 8.5,
height: 8.5
},
HammerBro: {
height: 12
},
CheepCheep: {
arguments: {
smart: Boolean
},
attributes: {
nofall: !0
}
},
Lakitu: {
height: 12
},
Podoboo: {
width: 7
},
Blooper: {
height: 12,
onadds: {
nofall: !0
}
},
Bowser: {
width: 16,
height: 16
}
},
solids: {
Floor: {
arguments: {
width: 8
},
mydefaults: {
width: 8
},
prefunc_custom: function(e, t, n, x) {
var r = "Floor, " + e.xloc + ", " + e.yloc;
return x[1] && (r += ", " + x[1]), r
}
},
Brick: {
arguments: {
contents: ["false", "Coins", "Star"]
},
followerUpdate: function(e, t) {
var n = [];
t.contents;
return n.push(window[t.contents]), n
},
prefunc_custom: function(e, t, n, x) {
var r = "Brick, ";
return r += e.xloc + ", " + e.yloc, t.contents && (r += ", " + t.contents[0].name), r
}
},
Block: {
arguments: {
contents: ["Coin", "Mushroom", "Star", "1Up Mushroom"],
hidden: Boolean
},
followerUpdate: function(e, t) {
var n = [];
return "1Up Mushroom" == t.contents ? n.push([Mushroom, 1]) : n.push(window[t.contents]), "True" == t.hidden && (TimeHandler.addEvent((function() {
editor.follower.hidden = !0
})), n.push(1)), n
},
prefunc_custom: function(e, t, n, x) {
var r = "Block, ",
i = t.contents,
a = i[0].name;
return r += e.xloc + ", " + e.yloc, "Coin" != a ? ("Mushroom" == a && i[1] ? r += ", [Mushroom, " + String(i[1]) + "]" : r += ", " + a, t.hidden && (r += ", true")) : t.hidden && (r += ", false, true"), r
}
},
Cannon: {
arguments: {
height: 8
},
sprite_source: "top"
},
Pipe: {
width: 16,
prefunc: pushPrePipe,
prefunc_solo: !0,
arguments: {
height: 8,
Pirhana: Boolean
},
followerUpdate: function(e, t) {
var n = [];
return n.push(Number(t.height)), n.push(Boolean(t.Pirhana)), n
},
sprite_source: "top"
},
Stone: {
arguments: {
width: 8,
height: 8
},
prefunc_custom: function(e, t, n, x) {
var r = "Stone, " + e.xloc + ", " + e.yloc;
return r += ", " + x[1] + ", " + x[2]
}
},
Coral: {
arguments: {
height: 8
}
},
CastleBlock: {
arguments: {
fireballs: 2,
direction: ["CW", "CCW"],
hidden: Boolean
},
followerUpdate: function(e, t) {
return [
[Number(t.fireballs), "CW" == t.direction], "True" == t.hidden
]
}
},
Springboard: {
height: 14.5,
heightoff: 1.5
}
},
scenery: {
Bush1: {
width: 16
},
Bush2: {
width: 24
},
Bush3: {
width: 32
},
Cloud1: {
width: 16,
height: 12
},
Cloud2: {
width: 24,
height: 12
},
Cloud3: {
width: 32,
height: 12
},
HillSmall: {
width: 24,
height: 9.5,
heightoff: -1.5
},
HillLarge: {
width: 40,
height: 17.5,
heightoff: -1.5
},
PlantSmall: {
width: 7,
height: 15,
heightoff: 1
},
PlantLarge: {
height: 23,
heightoff: 1
},
Fence: {},
Water: {
width: 4,
height: 4,
prefunc: fillPreWater,
prefunc_solo: !0,
prefunc_custom: function(e, t, n, x) {
return e.xloc + ", " + e.yloc
}
}
}
};
var e, t, n, x;
editor.defaults;
for (n in editor)
for (x in e = editor[n], editor[n]) t = e[x], proliferate(t, editor.defaults, !0);
for (n in e = editor.scenery) t = e[n], proliferate(t, {
createfunc: function(e) {
return ThingCreate(Sprite, e.spritename)
},
spritename: n,
prefunc_custom: function(e, t, n, x) {
return "'" + n.spritename + "', " + e.xloc + ", " + (e.yloc - n.height)
}
}, !0), t.prefunc == pushPreThing && (t.prefunc = pushPreScenery)
}
function setEditorHTML() {
createEditorGuideLines(), createEditorSidebar(), createEditorBottomBar(), createEditorScrollers(), editor.sectionselect.onchange()
}
function createEditorSidebar() {
var e, t = ["Solids", "Characters", "Scenery", "Settings"],
n = editor.sidebar = createElement("div", {
id: "sidebar"
}),
x = editor.category = createElement("div", {
id: "category",
className: "group first"
}),
r = editor.sectionselect = createElement("select", {
id: "sectionselect",
className: "options big",
onchange: editorSelectSection
}),
i = editor.options = createElement("div", {
id: "options",
className: "options big"
});
for (e in n.appendChild(x), x.appendChild(r), t) r.appendChild(createElement("option", {
innerText: t[e]
}));
n.appendChild(i), body.appendChild(window.sidebar = n)
}
function createEditorBottomBar() {
var e = editor.bottombar = createElement("div", {
id: "bottombar",
things: {}
});
sidebar.appendChild(e)
}
function createEditorScrollers() {
var e, t, n, x = ["right", "left"],
r = {};
for (t = createElement("div", {
id: "scrollers",
style: {
zIndex: 7,
width: innerWidth - 32 + "px"
}
}), settings = {
className: "scroller",
style: {
zIndex: 7,
marginTop: innerHeight / 2 + "px"
},
onmouseover: editorFollowerHide,
onmouseout: editorFollowerShow,
onmousedown: editorScrollingStart,
onmouseup: editorScrollingStop
}, e = x.length - 1; e >= 0; --e) x[e], n = r[x[e]] = createElement("div", settings), t.appendChild(n);
proliferate(r.left, {
id: "left",
className: "scroller flipped off",
dx: -7
}), proliferate(r.right, {
id: "right",
style: {
right: "21px"
},
dx: 7
}), editor.scrollers = r, body.appendChild(t)
}
function editorFollowerHide() {
var e = editor.follower;
e.hiddenOld = e.hidden, e.hidden = !0
}
function editorFollowerShow() {
var e = editor.follower;
e.hidden = e.hiddenOld
}
function editorScrollingStart(e) {
var t = e.target.dx;
editorPreventClicks(), editor.scrolling = TimeHandler.addEventInterval(editorScrolling, 1, 1 / 0, -t), classRemove(editor.scrollers.left, "off")
}
function editorScrollingStop() {
TimeHandler.addEvent(editorClickOff, 3), TimeHandler.clearEvent(editor.scrolling)
}
function editorScrolling(e) {
if (scrollEditor(e), editor.xloc >= 0) return scrollEditor(-editor.xloc), editorScrollingStop(), classAdd(editor.scrollers.left, "off"), !0
}
function createEditorGuideLines() {
var e, t, n, x = {
floor: 0,
ceiling: ceillev,
jumplev1: jumplev1,
jumplev2: jumplev2
},
r = 16 * unitsize + "px",
i = map.floor;
for (e in window.maplines = t = document.createElement("div"), t.style.marginLeft = r, t.id = "maplines", x) n = createElement("div", {
innerText: e,
className: "mapline",
id: e + "_line",
style: {
marginTop: (i - x[e]) * unitsize + "px",
marginLeft: "-" + r,
paddingLeft: r
}
}), t.appendChild(n);
body.appendChild(t)
}
function setEditorControls(e) {
e = e || ["load", "save", "reset", "undo"];
var t, n, x, r = document.getElementById("controls"),
i = createElement("div", {
id: "controls"
}),
a = editor.controls = {
container: i
};
for (x in r && (r.innerHTML = ""), e) t = e[x], n = createElement("div", {
id: t,
alt: t,
className: "control",
style: {
backgroundImage: "url(Theme/" + t + ".gif)"
},
innerHTML: "<div class='controltext'>" + t + "</div>",
onclick: editorClickControl
}), i.appendChild(n), a[t] = n;
sidebar.appendChild(i)
}
function setEditorTriggers() {
var e, t = [maplines, canvas];
for (e = t.length - 1; e >= 0; --e) t[e].onclick = editorMouseClick;
document.onmousemove = editorFollowerFollowsCursor
}
function editorMouseClick(e) {
if (window.editing && !editor.clicking) {
if (editorPreventClicks(), editor.erasing) return editorPlaceEraser(e);
if (!editor.in_settings && editor.canplace) {
var t = editor.section_name,
n = (window[t], editor.current_selected, editor.follower);
editor.placed.push(n), editor.follower = !1, editorSetCurrentThingFromName(null, !0), paused && refillCanvas(), n.was_follower = !0, delete n.onclick, editor.playing && (thingRetrieveVelocity(n), proliferate(n, n.reference.attributes))
}
}
}
function editorSelectSection() {
var e = (this || editor.sectionselect).value.toLowerCase();
(editor.in_settings = "settings" == e) ? (editorSetSection(e, !0), editorSetSectionSettings()) : editorSetSection(e)
}
function editorSetSection(e, t) {
var n, x, r = editor.section = editor[e],
i = editor.bottombar,
a = 0;
if (editor.section_name = e, i.innerHTML = "", !t)
for (e in r) ++a, x = editorAddBottomPreview(i, e, r[e]), n || (n = x);
a ? (i.style.visibility = "visible", editorSetCurrentThingFromCanvas(n)) : i.style.visibility = "hidden"
}
function editorAddBottomPreview(e, t, n) {
var x, r = n.width,
i = n.height,
a = window[t],
o = a ? ThingCreate(a, n.previewargs) : new Thing(Sprite, t),
l = createElement("div", {
width: r * unitsize + "px",
height: i * unitsize + "px",
name: t,
className: "holder " + t,
onclick: editorSetCurrentThing
}),
s = proliferate(getCanvas(r * unitsizet2, i * unitsizet2), {
name: t,
reference: n,
style: {
marginLeft: -roundDigit(r / 2, scale) + "px"
},
onclick: editorSetCurrentThing
}),
d = (e.things, r * unitsizet2),
u = i * unitsizet2,
p = s.getContext("2d");
return canvasDisableSmoothing(s), editor.bottombar.things[t] = s.thing = o, addClass(o, "editor"), x = o.canvas, o.canvases && (x = o.canvases[n.sprite_source || "middle"].canvas), n.previewsize ? (p.fillStyle = p.createPattern(x, "repeat"), p.fillRect(0, 0, d, u)) : p.drawImage(x, 0, 0, d, u), l.appendChild(l.canvas = s), e.appendChild(l), e[t] = l, s
}
function editorSetSectionSettings() {
var e, t = editor.settings,
n = "<table>";
n += "<h3 class='title'>Settings</h3>", n += addArgumentOption("night", Boolean, t.night), n += addArgumentOption("setting", ["Overworld", "Underworld", "Underwater", "Castle", "Sky"], t.setting), n += addArgumentOption("alt", Boolean, t.alt), n += "</table>", options.innerHTML = n, ensureOptionsAboveZero(editorUpdateSettingsOption), e = editor.sidebar.getElementsByTagName("table")[0].rows, editor.settings.night_elem = e[0].cells[1].firstChild, editor.settings.setting_elem = e[1].cells[1].firstChild, editor.settings.alt_elem = e[2].cells[1].firstChild, editor.follower && killNormal(editor.follower), editor.follower = !1
}
function editorUpdateSettingsOption(e) {
var t = editor.settings,
n = t.night = "True" == t.night_elem.value,
x = t.alt = "True" == t.alt_elem.value,
r = (t.setting = t.setting_elem.value) + (n ? " Night" : "") + (x ? " " + x : "");
setAreaSetting(area, r, r != area.setting)
}
function editorSetCurrentThing(e, t) {
var n = e.target,
x = editor.current_thing_name = n.name,
r = editor.current_thing = editor.section[x];
t || updateCurrentArguments(x, r), editorUpdateFollower()
}
function editorSetCurrentThingFromCanvas(e, t) {
editorSetCurrentThing({
target: e
}, t)
}
function editorSetCurrentThingFromName(e, t) {
editorSetCurrentThing({
target: {
name: e || editor.current_thing_name
}
}, t)
}
function updateCurrentArguments(e, t) {
t = t || {};
var n, x = editor.options,
r = "<table>",
i = t.mydefaults || {},
a = t.arguments || {};
for (n in r += "<h3 class='title'>" + e + "</h3>", a.width || (r += addStaticOption("width", t.width)), a.height || (r += addStaticOption("height", t.height)), a) r += addArgumentOption(n.replace("_", "-"), a[n], null, i);
r += "</table>", x.innerHTML = r, ensureOptionsAboveZero()
}
function addStaticOption(e, t) {
return t == 1 / 0 && (t = "Inf."), "<tr id='option_" + e + "' class='auto'><td>" + e + ": </td><td class='auto'>" + t + "</td></tr>"
}
function addArgumentOption(e, t, n, x) {
x = x || {};
var r = "<tr name='" + e + "' id='option_" + e + "'><td>" + e + ": </td><td>";
switch (t) {
case 1 / 0:
r += "Inf";
break;
case Boolean:
r += "<select name='" + e + "' value='" + (t ? "true" : "false") + "'><option>False</option><option>True</select>";
break;
case Number:
r += "<input name='" + e + "' value='" + String(t || 0) + "' type='Number'>";
break;
default:
switch (typeof t) {
case "number":
r += "<span class='optspan'>" + t + "x</span><input name='" + e + "' type='Number' class='text' value='" + (x[e] || 1) + "'>";
break;
case "string":
r += "<input name='" + e + "' type='text' class='text wide' value='" + t + "'>";
break;
case "object":
for (i in r += "<select name='" + e + "'>", t) r += "<option>" + t[i] + "</option>";
r += "<select>"
}
}
return r + "</td></tr>"
}
function ensureOptionsAboveZero(e) {
e = e || editorUpdateFollower;
var t, n = editor.options.getElementsByTagName("input");
for (i = n.length - 1; i >= 0; --i)(t = n[i]).onchange = t.onclick = t.onkeypress = editorInputEnsureAboveZero;
for (n = options.getElementsByTagName("select"), i = n.length - 1; i >= 0; --i)(t = n[i]).onchange = t.onclick = t.onkeypress = editorUpdateFollower
}
function editorInputEnsureAboveZero(e) {
editorUpdateFollower(e)
}
function editorUpdateFollower(e) {
if (editor.in_settings) return editorUpdateSettingsOption(e);
var t, n = editor.current_thing;
(t = editor.follower) && (t.id = "", killNormal(t)), t = n.createfunc ? n.createfunc(editor.current_thing, editorGetArguments()) : ThingCreate(window[editor.current_thing_name], n.followerUpdate(editor.current_thing, editorGetArguments())), editor.follower = t, proliferate(t, {
id: "follower",
libtype: editor.section_name,
lookleft: !0,
nocollide: !0,
reference: n,
onclick: editorMouseClick
}, !0), addThing(t), addClass(t, "editor"), thingRetrieveVelocity(t), thingStoreVelocity(t), editorSetFollowerPosition(t), editor.erasing && (t.hidden = !0)
}
function editorGetArguments() {
var e = arrayMake(editor.options.getElementsByTagName("input")),
t = arrayMake(editor.options.getElementsByTagName("select")),
n = e.concat(t);
return pairs = generateInputNameValuePairs(n), pairs
}
function generateInputNameValuePairs(e) {
var t, n = {};
for (t in e) n[e[t].name] = e[t].value;
return n
}
function editorFollowerFollowsCursor(e) {
var t = editor.follower;
t && editorSetFollowerPosition(t, roundFollowerDigit(e.x) + (editor.current_thing.widthoff - editor.offset.x) * unitsize, roundFollowerDigit(e.y) + editor.current_thing.heightoff * unitsize)
}
function editorSetFollowerPosition(e, t, n) {
t = t || editor.xloc_old || 0, n = n || editor.yloc_old || 0, setLeft(e, t), setTop(e, n), editor.xloc_old = t, editor.yloc_old = n
}
function roundFollowerDigit(e) {
var t = "solids" == editor.section_name ? 8 : 4;
return unitsize * t * round(e / (unitsize * t))
}
function roundFollowerPosition(e, t) {
editorSetFollowerPosition(e, roundFollowerDigit(e.left), roundFollowerDigit(e.top))
}
function editorFollowerUpdateStandard(e, t) {
"True" == t.hidden && TimeHandler.addEvent((function() {
editor.follower.hidden = !0
}));
var n = [];
return t.width && n.push(Number(t.width)), t.height && n.push(Number(t.height)), n
}
function editorClickControl(e) {
editorPreventClicks();
var t = e.target;
t.id || (t = t.parentNode), window["editorControl" + capitalizeFirst(t.id)](), e.preventDefault()
}
function editorPreventClicks() {
editor.clicking = !0, TimeHandler.addEvent(editorClickOff, 3)
}
function editorClickOff() {
window.editor && (editor.clicking = !1)
}
function editorControlUndo() {
var e = editor.placed.pop();
e && !e.player && killNormal(e)
}
function editorControlReset() {
var e = editor.placed.length,
t = roundDigit(35 / e, 21);
TimeHandler.addEventInterval(editorControlUndo, t, e)
}
function editorControlSave() {
var e = editor.rawfunc = editorGetRawFunc();
editorCreateInputWindow("<span style='font-size:1.4em;'>Hit Submit below to start playing!</span><br><p style='font-size:.7em;line-height:140%'>This map will be resumed automatically the next time you use the editor on this computer.<br>Alternately, you may copy this text to work on again later using Load (the button next to Save). </p>", e, editorSubmitGameFuncPlay);
return e
}
function editorControlCancel() {
loadEditor()
}
function editorGetRawFunc() {
var e, t = editor.placed,
n = t.length - 1,
x = new Array(e),
r = " var map = arguments[0] || new Map();\n";
for (r += "\n map.time = " + data.time.amount + ";", r += "\n map.locs = [ new Location(0, true) ];", r += "\n map.areas = [", r += "\n new Area('" + area.setting + "', function() {", r += "\n setLocationGeneration(0);\n\n", e = n; e >= 0; --e) x[e] = new editorPreStatement(t[e]);
for (x.sort(prethingsorter), e = n; e >= 0; --e) x[e] = " " + x[e].statement;
return r += (x = removeDuplicates(x)).join("\n"), r += "\n })", r += "\n ];", r += "\n return map;"
}
function editorPreStatement(e) {
this.placer = e, this.xloc = (gamescreen.left + e.left) / unitsize, this.yloc = map.floor - e.top / unitsize, this.statement = editorGetStatement(this, e, e.reference, e.args)
}
function editorGetStatement(e, t, n, x) {
if (!n && !(n = editor[t.libtype][t.title])) return "";
var r, i, a = (n.prefunc || pushPreThing).name,
o = x.length;
if (n.prefunc_custom) a += "(" + n.prefunc_custom(e, t, n, x) + ");";
else {
r = [], n.prefunc_solo || r.push(t.title), r.push(String(e.xloc)), r.push(String(e.yloc));
for (var l = 1; l < o; ++l) {
switch (typeof(i = x[l])) {
case "undefined":
break;
case "number":
i = String(round(i));
break;
default:
i = String(i)
}
void 0 !== i && r.push(i)
}
a += "(" + r.join(", ") + ");"
}
return a
}
function editorControlErase() {
editor.erasing ? editorControlEraseOff() : editorControlEraseOn()
}
function editorControlEraseOn() {
editor.erasing = editor.follower.hidden = !0, classAdd(body, "erasing"), classAdd(editor.controls.erase, "enabled")
}
function editorControlEraseOff() {
editor.erasing = editor.follower.hidden = !1, classRemove(body, "erasing"), classRemove(editor.controls.erase, "enabled")
}
function editorPlaceEraser(e) {
addThing(Eraser, e.x, e.y)
}
function Eraser(e) {
e.width = e.height = 2, e.nocollide = e.nofall = !0, e.movement = eraserErases, setCharacter(e, "eraser")
}
function eraserErases(e) {
if (window.editor) {
var t, n, x = editor.placed,
r = x.concat(solids).concat(characters).concat(scenery);
for (n = r.length - 1; n >= 0; --n)
if (!(t = r[n]).player && t != editor.follower && objectsTouch(e, t)) {
killNormal(t), x.splice(x.indexOf(t), 1);
break
}
killNormal(e)
}
}
function editorControlLoad() {
editorCreateInputWindow("Paste your work in progress here, and click Submit to continue it.", "", editorSubmitLoad)
}
function addThingsToPlaced() {
var e = editor.placed;
for (editor.placed = (editor.placed || []).concat(characters).concat(solids).concat(scenery), e.sort(prethingsorter), e.splice(e.indexOf(player), 1), i = e.length - 1; i >= 0; --i) placer = e[i], placer.reference = editor[placer.libtype][placer.title]
}
function editorCreateInputWindow(e, t, n) {
var x = gamescreen.unitwidth,
r = editor.input_window = createElement("div", {
id: "input_window",
innerHTML: e || "",
style: {
width: x + "px"
}
}),
i = r.input = editor.window_input = createElement("textarea", {
id: "window_input",
value: t || "",
style: {
width: x - 49 + "px"
}
}),
a = r.submit = createElement("div", {
id: "window_submit",
className: "window_button",
innerText: "Submit",
onclick: n
}),
o = r.cancel = createElement("div", {
id: "window_cancel",
className: "window_button",
innerText: "Cancel",
onclick: editorCloseInputWindow
});
return r.appendChild(i), r.appendChild(a), r.appendChild(o), body.appendChild(r), killNormal(editor.follower = !1), editor.follower = !1, r
}
function editorCloseInputWindow(e) {
editorPreventClicks(), removeChildSafe(window.input_window, body), e || (editorSetCurrentThingFromName(), window.editing = !0), editorUpdateFollower()
}
function editorClose(e) {
if (window.editor) {
classRemove(body, "editor"), classRemove(body, "erasing"), killNormal(editor.follower), editor.follower = !1, delete window.editor;
var t, n = ["maplines", "sidebar", "bottombar", "scrollers"];
for (t in n) removeChildSafe(document.getElementById(n[t]), body);
document.onmousemove = null, window.editing = !1, e && window.map && (map.shifting = !1)
}
}
function scrollEditor(e, t) {
window.editor && (editor.follower && (e = e || 0, t = t || 0, shiftAll(scenery, e, t), shiftAll(solids, e, t), shiftAll(characters, e, t), editor.xloc += e, editor.yloc += t))
}
function editorStoreLocally() {
localStorage.editorLastFunc = editor.rawfunc
}
function setEditorLocalRetrieval() {
localStorage.editorLastFunc && (editor.rawfunc = round, editorSubmitGameFunc())
}
function editorSubmitGameFunc() {
if (!window.editor || !editor.rawfunc) return loadEditor();
editor.rawfunc;
var e = window.custommapfunc = new Function(editor.rawfunc);
mapfuncs.Custom = {
Map: e
}, window.canedit = !0, setMap(["Custom", "Map"]), window.canedit = editor.playing = !1, entryBlank(player), addThingsToPlaced(), editorStoreLocally(), editorCloseInputWindow()
}
function editorSubmitGameFuncPlay() {
editorPreventClicks(), editorSubmitGameFunc(), editorStartPlaying()
}
function editorSubmitLoad() {
if (window.editor && editor.window_input) {
editorPreventClicks();
var e = editor.window_input.value;
loadEditor(), editor.rawfunc = e, editorSubmitGameFunc()
}
}
function editorStartPlaying() {
editorPreventClicks(), editor.playing = !0, placePlayer(), entryPlain(player), nokeys = !1;
var e, t, n, x = editor.placed;
for (n in x) thingRetrieveVelocity(e = x[n]), (t = editor[e.libtype][e.title]) && proliferate(e, t.onadds);
setEditorControls(["Cancel"])
}
function setEditorLocalRetrieval() {
var e = localStorage.editorLastFunc;
if (e) {
editor.rawfunc = e, editorSubmitGameFunc(), editorStoreLocally();
var t, n = editor.placed;
for (t in n) thingStoreVelocity(n[t])
}
}
function resetSeed() {
window.seeder = 1777771 / (window.seed = round(1e7 * random())), window.seedlast = .007, window.getSeed = function() {
return seedlast = "0." + String(seeder / seedlast).substring(4).replace(".", "")
}
}
function pushRandomSectionOverworld(e) {
var t = max(randTrue(117), 1),
n = 0;
if (++map.num_random_sections, pushPreFuncCollider(e, zoneDisableCheeps), map.had_floor = !1, map.needs_floor || t >= 14 || t < 3 || randTrue() ? (pushPreFloor(e, 0, t), map.had_floor = !0) : pushPreThing(Stone, e, n = 0, t), window.randcount_powerup = 3, t <= 3 && map.had_floor) {
if (randTrue()) switch (randTrue(3)) {
case 0:
if (t > 3) {
pushPreScenery("HillSmall", e, 0);
break
}
case 1:
if (t > 2) {
pushPreScenery("Bush1", e + 8 * max(0, randTrue(t - 2)), n);
break
}
case 2:
pushPreScenery("PlantLarge", e + 8 * max(0, randTrue(t - 2)), n);
break;
case 3:
pushPreScenery("PlantSmall", e + 8 * max(0, randTrue(t - 2)), n)
}
} else
for (var x = t - 2, r = 0, i = 0, a = randTrue(2); a < x; a += 3) randTrue(7) && (randTrue(2) ? (map.hadObstacle = !1, (i % 3 == 0 || randTrue()) && (pushRandomChunkEnemy(e, a), ++i), map.had_floor && pushRandomGroundScenery(e + 8 * a, a, t)) : pushRandomObstacle(e, a), !r && randTrue() ? (pushRandomSkyScenery(e + 8 * a), r = !0) : r = !1);
prepareNextGeneratorStandard(e, t, pushRandomSectionOverworld)
}
function startRandomSectionBridge(e) {
pushPreFuncCollider(e - 24, zoneDisableCheeps), pushPreFuncCollider(e, zoneEnableCheeps);
var t = 5 + randTrue(4),
n = t - 4;
map.needs_bridge = !0, map.treelev = map.treeheight = 0, pushPreTree(e, 0, t + 1), pushPreThing(Stone, e + 16, 8, 1, 1), pushPreThing(Stone, e + 24, 16, 1, 2), pushPreThing(Stone, e + 32, 24, n, 3), pushRandomSectionBridge(e + 8 * (t - 1), 24, !0), spawnMap(), map.had_floor = !1
}
function pushRandomSectionBridge(e, t, n) {
var x = !1;
if (t = t || 24 + 16 * randTrue() - 8, randTrue() || map.needs_bridge) switch (randTrue(3)) {
case 0:
switch (randTrue()) {
case 0:
var r = randTrue(3) + 1,
i = 4 * r;
x = !0;
for (var a = 1; a <= 2 * r; a += 2) pushPreBridge(e + 16 * a, t, 3);
break;
case 1:
i = randTrue(7) + 7;
var o = DtB(t, 8);
n || pushPreThing(Stone, e, t, 1, o), pushPreBridge(e + 8, t, i - 1), pushPreThing(Stone, e + 8 * i, t, 1, o)
}
break;
default:
map.needs_bridge = map.treeheight = 0;
o = DtB(t, 8);
i = 17 * (randTrue(3) + 3);
for (a = 0; a < i; a += 17)
if (!a && n || pushPreThing(Stone, e + 8 * a, t, 1, o), pushPreBridge(e + 8 * (a + 1), t, 16), randTrue() && pushRandomSmallEnemy(e + 8 * (a + 8), t), randTrue(2)) {
randTrue();
var l = 3 + randTrue(2);
pushRandomCoinRow(e + 8 * (a + 8), t + 32, l), pushRandomCoinRow(e + 8 * (a + 8), t + 40, getNextCoinRowSize(l))
} else pushPreThing(Block, e + 8 * (a + 8), t + jumplev1, Mushroom);
pushPreThing(Stone, e + 8 * i, t, 1, o)
} else i = 10, pushPreTree(e + 16, 8 * randTrue(), i);
prepareNextGeneratorStandard(e, i + 2, randTrue() ? pushRandomSectionBridge : pushRandomSectionOverworld, !1, x)
}
function pushRandomSectionPreCastle(e, t) {
var n, x, r = randTrue(35) + 35,
i = r - 3,
a = !1;
for (t = t || 0, pushPreFloor(e, 0, r), hadcloud = !1, x = randTrue(3); x < i; x += n || 3) {
switch (randTrue(3)) {
case 0:
switch (n = 3, randTrue(2)) {
case 0:
var o = randTrue(2) + 1;
pushPreThing(Cannon, e + 8 * (x + randTrue(2)), 8 * o, o);
break;
case 1:
for (var l = 0; l < n; ++l) randTrue() || pushPreThing(Stone, e + 8 * (x + l), 8 * (o = randTrue(3) + 1), 1, o);
break;
case 2:
pushPrePipe(e + 8 * (x + randTrue()), 0, 8 * (2 + randTrue(2)), !0)
}
break;
case 1:
switch (n = 7, a = !0, randTrue(2)) {
case 0:
pushPreThing(Koopa, e + 8 * (x + randTrue(7)), 12 + 8 * randTrue(3), randTrue(), !0);
break;
case 1:
randTrue() && pushPreThing(HammerBro, e + 8 * (x + randTrue(7)), 12 + 2 * randTrue(3));
break;
case 2:
n = 10, a = !1;
for (l = 1; l < 8; ++l)
for (var s = jumplev1; s <= jumplev2; s += 32) pushPreThing(Brick, e + 8 * (x + l), s, getRandomBrickItem(!1, randTrue()));
var d = randTrue() ? jumplev1 : jumplev2;
height2 = o == jumplev1 ? jumplev2 : jumplev1, randTrue(2) && pushPreThing(HammerBro, e + 8 * (x + randTrue(3)), d + 12), randTrue(2) && pushPreThing(HammerBro, e + 8 * (x + 4 + randTrue(3)), height2 + 12)
}
}
a && n >= 7 && (pushPreScenery("CastleWall", e + 8 * (x + randTrue()), 0, n - randTrue(2)), randTrue() && pushPreThing(Brick, e + 8 * (x + randTrue(n)), jumplev1, randTrue() ? Mushroom : getRandomBrickItem(!1, randTrue())));
for (s = 0; s < n; s += 3) randTrue(2) && pushRandomGroundScenery(e + 8 * (x + s), 0), !hadcloud && randTrue() ? (pushRandomSkyScenery(e + 8 * (x + s)), hadcloud = !0) : hadcloud = !1
}
pushPreFloor(e + 8 * r, 0, x + 3 - r);
var u = 4 + randTrue(3);
t >= 3 ? endCastleOutsideRandom(e + 8 * (r + u + 1), !0) : pushRandomSectionPreCastle(e + 8 * (r + u), t + 1), spawnMap()
}
function endCastleOutsideRandom(e) {
var t, n;
switch (randTrue()) {
case 0:
for (n = 1 + randTrue(); n < 9; n += 2) pushPreThing(Stone, e + 8 * n, 8 * (n - randTrue()), 1, 1 + randTrue());
pushPreThing(Stone, e + 72, 64, 2), t = 12;
break;
case 1:
for (pushPreFloor(e, 0, 11), n = 1, hadlast = !1; n < 9; ++n) !hadlast || randTrue(2) || 8 == n ? (pushPreThing(Stone, e + 8 * n, 8 * n, 1, n), hadlast = !0) : (hadlast = !1, pushPrePipe(e + 8 * n, 0, 8 * max(n - randTrue(2), 2), !0), ++n);
pushPreThing(Stone, e + 72, 72, 2, 9), t = 7
}
pushPreFloor(e + 88, 0, round(gamescreen.width / 8)), endCastleOutside(e + 8 * (9 + t) + 4, 0, !0, round(gamescreen.width / 8))
}
function startRandomSectionCastle(e) {
e += 32;
var t = randTrue(7) + 3,
n = randTrue(4) + 3;
randTrue(4);
pushPreFloor(e, 24, t), pushPreThing(Stone, e, 88, t, 3), fillPreWater(e + 8 * t, 0, 2 * n), pushPreThing(Podoboo, e + 8 * t + max(0, 8 * randTrue(n - 3)), -32), pushRandomSectionCastle(e + 8 * (t + n), 0), spawnMap()
}
function pushRandomSectionCastle(e, t) {
var n, x;
switch (randTrue(3)) {
case 0:
x = 64 * (n = 1 + randTrue(2)) - 8;
for (var r = 0; r < n; ++r) randTrue() ? (makeCeilingCastle(e + 64 * r, 8), fillPreWater(e + 64 * r, 0, 16), pushPreThing(Platform, e + 64 * r + 8 + 8 * randTrue(2), 8 + 8 * randTrue(max(r + 2, 4)), 4, moveFalling)) : (pushPreFloor(e + 64 * r - 8, 8, 1), pushPrePlatformGenerator(e + 64 * r + 24, 4, 1.75), pushPreFloor(e + 64 * r + 64, 8, 1));
break;
case 1:
var i, a, o;
x = 64 * (n = 2 * (1 + randTrue())) - 8, makeCeilingCastle(e, 8 * n), fillPreWater(e, 0, 16 * n);
for (r = 0; r < n; ++r) {
switch (i = e + 64 * r, a = 8 * randTrue(max(r + 1, 2 + randTrue(2))), o = 2 + randTrue(3), randTrue(2)) {
case 0:
pushPreFloor(i + 8 * randTrue(3), a, o);
break;
case 1:
pushPreThing(Stone, i + 8 * randTrue(3), a, o);
break;
case 2:
pushPreThing(Platform, i += 8 + 8 * randTrue(), 8 * randTrue(3), 4, [moveSliding, i, i + 56 + 8 * randTrue(2), 2])
}
randTrue(2) || o % 2 != 1 || pushPreThing(Block, i + 4 * o - 8, a + 40, Mushroom), o <= 4 && pushPreThing(Podoboo, i + 8 * (o + 1), -32)
}
break;
case 2:
var l;
switch (x = 8 * (n = 14 + randTrue(21)) - 8, p = 1, pushPreFloor(e, 0, n), randTrue()) {
case 0:
makeCeilingCastle(e, n, p = 3);
for (r = 1 + randTrue(); r < n - 6; ++r) l = min(7, n - r), pushPreThing(Stone, e + 8 * r, jumplev1, l), randTrue() && pushPreThing(CastleBlock, e + 8 * (r + l - 4), 0, [6, randTrue()], !0), pushPreThing(CastleBlock, e + 8 * (r + l), jumplev1, 6, randTrue()), randTrue() && pushPreThing(CastleBlock, e + 8 * (r + l + 4), jumplev2 + 8, [6, randTrue()], !0), r += l;
break;
case 1:
makeCeilingCastle(e, n, p);
var s = randTrue(),
d = randTrue();
pushPreThing(Stone, e, 8 * s, n, s);
for (r = randTrue(2); r < n - 3; r += 4) pushPreThing(Stone, e + 8 * (r + d), 16 + 8 * s, 3, 2), pushPreThing(CastleBlock, e + 8 * (r + d + 1), 24 + 8 * s, randTrue(2) ? 6 : 0, randSign()), pushPreThing(Stone, e + 8 * (r + d), 80, 3, 2), r < n - 5 && pushPreThing(CastleBlock, e + 8 * (r + d + 1), 64, randTrue(2) ? 6 : 0, randSign()), r += 1 + randTrue(3)
}
break;
case 3:
x = 8 * (n = 21 + randTrue(21)) - 8;
var u = 1 + randTrue(3),
p = 11 - u - 4;
pushPreFloor(e, 8 * u, n), makeCeilingCastle(e, n, p);
for (r = 0; r < n; r += 8) randTrue() && (pushRandomEnemy(e + 8 * r, 8 * u, 0), randTrue() && (pushRandomEnemy(e + 8 * r + 12, 8 * u, 0), randTrue() && pushRandomEnemy(e + 8 * r + 24, 8 * u, 0)))
}
pushPreThing(GenerationStarter, e + x, ceilmax + 20, t <= 280 ? pushRandomSectionCastle : endCastleInsideRandom, t + x / 8), spawnMap()
}
function endCastleInsideRandom(e) {
var t = 2 + randTrue(2),
n = 8 * randTrue(),
x = n + 24 + 8 * randTrue();
pushPreFloor(e, n, 5 * t);
for (var r = 0; r < t; ++r) pushPreFloor(e + 5 * (r + 1) * 8, x, max(2, randTrue(3)));
var i = e + 5 * t * 8,
a = 8 * randTrue(7);
fillPreWater(i, 0, a), endCastleInsideRandomFinal(i + a), spawnMap()
}
function endCastleInsideRandomFinal(e) {
fillPreWater(e, 0, 16), pushPreFloor(e + 24, 24, 3), endCastleInside(e + 48, 2), randTrue() && pushPreThing(Podoboo, e + 72 + 8 * randTrue(3), -32), randTrue() && fillPreThing(Brick, e + 56 + 8 * randTrue(3), 64, 3 + randTrue(3), 1, 8), randTrue() && pushPreThing(CastleBlock, e + 56 + 8 * randTrue(2), 24, [6, randSign()], !0), spawnMap()
}
function placeRandomCastleNPC(e) {
pushPreThing(Toad, e + 194, 12).object.text = [pushPreText({
innerHTML: "THANK YOU " + window.player.title.toUpperCase() + "!"
}, e + 160, 66).object, pushPreText({
innerHTML: "LOL YOU THOUGHT THERE WOULD BE SOMETHING HERE DIDN'T YOU!"
}, e + 148, 50).object]
}
function pushRandomCoinRow(e, t, n) {
if (n) {
var x;
if (3 == n && (e += 8), randTrue(2)) switch (n) {
case 3:
x = [1, 0, 1];
break;
case 4:
switch (randTrue()) {
case 0:
x = [1, 0, 0, 1];
break;
case 1:
x = [0, 1, 1, 0]
}
break;
case 5:
switch (randTrue()) {
case 0:
x = [1, 0, 1, 0, 1];
break;
case 1:
x = [0, 1, 0, 1, 0]
}
} else x = arrayOf(!0, n);
for (var r = 0; r < n; ++r) x[r] && pushPreThing(Coin, e + 8 * r, t)
}
}
function getNextCoinRowSize(e) {
switch (e) {
case 3:
return 5;
case 5:
return 3;
default:
return e
}
}
function pushRandomSectionTrees(e) {
var t, n, x;
switch (randTrue(7)) {
case 0:
var r, i;
t = randTrue(14) + 7, n = randTrue(3), map.treefunc(e, 8 * n, t);
for (var a = randTrue(2); a < t - 2; a += r - 1) randTrue(2) && pushRandomSmallEnemy(e + 8 * a, 8 * n), randTrue(2) && (r = 3 + (randTrue(3) ? 0 : randTrue(4)), i = 8 * min(9, n + randTrue(7) + 3), map.treefunc(e + 8 * a, i, r), randTrue() && pushRandomSmallEnemy(e + 8 * a, 8 * i), pushRandomSmallEnemy(e + 8 * (a += r - 1), 8 * n));
break;
case 1:
t = 14, n = 7, randTrue(), t = 4 + randTrue(2), pushPrePlatformGenerator(e + 8 * (randTrue() + 1), t, -1), t += randTrue(3) + 3;
break;
default:
t = 4 + randSign() + randTrue(), n = min(randTrue(2) + 4 + randSign(2), map.treelev + 4);
var o = e - 8 * randTrue();
if (n == map.treelev && (n += randSign()), map.treefunc(o, 8 * n, t), t > 3 || randTrue())
if (randTrue(3)) pushRandomSmallEnemy(o + 8 * (randTrue() + 1), 8 * n);
else if (randTrue(2))
for (a = 1; a < t - 1; ++a) pushPreThing(Coin, o + 1 + 8 * a, 8 * (n + 1) - 1)
}++map.sincechange > 7 && randTrue() ? (x = map.randtype, map.sincechange = 0) : x = pushRandomSectionTrees, pushPreThing(GenerationStarter, e + 8 * (t + randSign()), ceilmax + 20, x), spawnMap(), map.treelev = n
}
function pushRandomSmallEnemy(e, t, n) {
switch (randTrue(7)) {
case 1:
case 2:
case 3:
pushPreThing(Koopa, e, t + 12, !0, n);
break;
case 7:
pushPreThing(Beetle, e, t + 8.5);
break;
default:
pushPreThing(Goomba, e, t + 8)
}
}
function pushRandomSectionUnderworld(e) {
var t, n, x = max(randTrue(117), 1),
r = 14,
i = x - x % r;
floor(x / r);
if (pushPreFloor(e, 0, x), window.randcount_powerup = 3, x < r) switch (randTrue()) {
case 0:
for (t = 0; t < x - 2; t += 3) pushRandomChunkEnemy(e + 8 * t, 0, t);
break;
case 1:
for (t = 0; t < x - 2; t += 3) randTrue(2) ? t % 3 == 0 && pushRandomChunkEnemy(e, t) : pushRandomObstacle(e, t)
} else
for (t = 1; t < i; t += r) switch (randTrue(5)) {
case 0:
pushRandomUnderworldSquigglies(e + 8 * t, r), makeCeiling(e + 8 * t, r);
break;
case 1:
var a = 1 + randTrue(),
o = 4 + randTrue(7);
for (t += a, n = 0; n < r; n += 1 + randTrue() / 2) randTrue() && pushRandomSmallEnemy(e + 8 * (t + n), 0);
fillPreThing(Brick, e + 8 * t, 8 * o, 13, 12 - o, 8, 8), t -= a;
break;
case 2:
createTunnel(e + 8 * (t + 2), 10, Brick);
break;
case 3:
pushUnderworldPipes(e + 8 * (t + 2), 12), makeCeiling(e + 8 * (t + 1), r);
break;
case 4:
pushUnderworldStones(e + 8 * (t + 2), 12), makeCeiling(e + 8 * (t + 1), r);
break;
case 5:
for (n = 0; n < 10; n += 3) pushRandomChunkEnemy(e + 8 * (t + n), n);
break;
case 6:
for (n = 0; n < x - 2; n += 3) randTrue(2) ? (t % 3 == 0 || randTrue()) && (pushRandomChunkEnemy(e + 8 * (t + n), n), ++numenemychunks) : pushRandomObstacle(e + 8 * (t + n), n)
}
prepareNextGeneratorStandard(e, x, pushRandomSectionUnderworld, !0), spawnMap()
}
function pushRandomUnderworldSquigglies(e, t, n, x) {
n = n || 1 / 0;
for (var r = 3 + randTrue(2), i = min(n, r + 1 + randTrue(4)), a = 1 == r ? i : randTrue(2) ? r : i, o = 1 + i - r, l = !1, s = i + 16, d = 0; d < t; ++d) {
if (randTrue()) {
for (var u = 0; u < 3; ++u) pushPreThing(Brick, e + 8 * (d + u), 8 * a, randTrue() ? null : getRandomBrickItem());
!x && randTrue(2) && fillPreThing(Coin, e + 1 + 8 * d, 8 * min(s, a + randTrue(4) + 1) - 1, 3 + randTrue(), 1, 8), l || (randTrue() ? pushPreThing(Block, e + 8 * (d + 3), 8 * a, getRandomBlockItem()) : pushPreThing(Brick, e + 8 * (d + 3), 8 * a), l = !0), d += 3
} else fillPreThing(Brick, e + 8 * d, 8 * r, 1, o, 8, 8), a = a == i ? r : i, l = !1;
(d % 3 == 1 || randTrue() && d < t - 3) && pushRandomSmallEnemy(e + 8 * d, 0, !1)
}
}
function pushUnderworldPipes(e, t) {
var n, x, r, i = t - 4,
a = !1;
for (r = 0; r < i; r += 4) switch (randTrue()) {
case 0:
addPipeRandom(e + 8 * (r + (n = randTrue())), 0, 8 * (2 + randTrue(2))), r += 1 - n, a = !0;
break;
case 1:
n = randTrue() || !a, x = 4 + randTrue(4), n && pushPreThing(Brick, e + 8 * r, 8 * max(x - 4, 3 + randTrue()), getRandomBrickItem(!1)), addPipeRandom(e + 8 * (r + n), 0, 8 * x), a = !1
}
for (; r < t - 1; ++r) randTrue() && pushRandomChunkEnemy(e + 8 * r, 0)
}
function pushUnderworldStones(e, t) {
var n, x, r, i = t - 4,
a = !1;
for (r = 0; r < i; r += 2) switch (randTrue()) {
case 0:
pushPreThing(Stone, e + 8 * (r + (n = randTrue())), 8 * (x = 2 + randTrue(2)), 1, x), r += 1 - n, a = !0;
break;
case 1:
n = randTrue() || !a, x = 4 + randTrue(4), n && pushPreThing(Brick, e + 8 * r, 8 * max(x - 4, 3 + randTrue()), getRandomBrickItem(!1)), pushPreThing(Stone, e + 8 * (r + n), 8 * x, 1, x), a = !1
}
for (; r < t - 1; r += 3) randTrue() && pushRandomChunkEnemy(e + 8 * r, 0)
}
function pushRandomSectionUnderwater(e) {
var t = max(randTrue(117), 7);
pushPreFloor(e, 0, t -= t % 3), pushPreScenery("Water", e, ceilmax - 21, 8 * t / 3, 1), pushPreThing(WaterBlock, e, ceilmax, 8 * t), window.randcount_powerup = 3;
for (var n = 0; n < t; n += 4) {
switch (randTrue(21)) {
case 0:
if (n < t - 2) {
pushRandomObstacle(e, n);
break
}
case 1:
pushRandomEnemy(e, 0, n, !0);
break;
default:
switch (randTrue(7)) {
case 0:
var x = randTrue() + 2,
r = randTrue() + 2;
pushPreThing(Stone, e + 8 * n, 8 * r, randTrue(3) + 1, r), pushPreThing(Stone, e + 8 * n, ceillev, randTrue(3) + 1, x);
break;
case 1:
randTrue() && pushPreThing(Stone, e + 8 * n, jumplev1, 4), randTrue() && pushPreThing(Stone, e + 8 * n, jumplev2, 4);
break;
case 2:
fillPreThing(Coin, e + 8 * (n + randTrue()) + 1, 8 * (randTrue(8) + 1) - 1, 3, 1, 8);
break;
default:
if (map.had_coral) {
map.had_coral = !1;
break
}
map.had_coral = !0;
var i, a = randTrue(3) + 2,
o = jumplev1 * (1 + randTrue(2)),
l = e + 8 * n;
if (o == 3 * jumplev1) {
var s = !0;
o -= 8
}
pushPreThing(Stone, e + 8 * n, o, a), i = !s && (randTrue(3) || a <= 3) ? o + 24 : o - 8, randTrue() && pushPreThing(Coral, l, i, 3), randTrue() && a > 3 && o < 64 && pushPreThing(Coral, l + 8 * (a - 1), i, 3), a >= 3 && (n += a - 3)
}
}
map.countCheep > 1 && (pushPreThing(CheepCheep, e + 8 * n, randTrue(80) + 8, randTrue()), map.countCheep = 0), map.countBlooper > 7 && (pushPreThing(Blooper, e + 8 * n, randTrue(80) + 8), map.countBlooper = 0), randTrue(7) && ++map.countCheep, randTrue(3) && ++map.countBlooper
}
if (++map.sincechange < 3) {
var d = prepareNextGeneratorStandard(e, t, pushRandomSectionUnderwater, !1, !0);
pushPreScenery("Water", e + 8 * t, ceilmax - 21, 8 * (d + 1) / 3, 1), pushPreThing(WaterBlock, e + 8 * t, ceilmax, 8 * (d + 1))
} else endRandomSectionUnderwater(e + 8 * t)
}
function endRandomSectionUnderwater(e) {
pushPreFloor(e, 0, 19), pushPreScenery("Water", e, ceilmax - 21, 28, 1), pushPreThing(WaterBlock, e, ceilmax, 157.5), pushPreThing(Stone, e, 8, 5, 1), pushPreThing(Stone, e + 8, 16, 4, 1), pushPreThing(Stone, e + 16, 24, 3, 1), pushPreThing(Stone, e + 24, 32, 2, 1), pushPreThing(Stone, e + 24, 88, 2, 4), pushPreThing(PipeSide, e + 32, 48, ["Random", randTrue() ? "Overworld" : "Underworld", "Up"]), pushPreThing(Stone, e + 40, 88, 14, 11), map.scrollblockerok = !0, pushPreThing(ScrollBlocker, e + 56, 80, !0), spawnMap()
}
function startRandomSectionSky(e) {
pushPreThing(Stone, e, 0, 78), pushPreThing(Platform, e + 88, 24, 6, [collideTransport]), pushRandomSectionSky(e + 80, 1), spawnMap()
}
function pushRandomSectionSky(e, t) {
if (t++ > 7) return fillPreThing(Coin, e + 8, 8, 3, 1, 8), spawnMap();
var n = 0;
if (t % 2) fillPreThing(Coin, e + 1, 71, 3, 1, 8), n = 32;
else switch (randTrue(t)) {
case 3:
pushPreThing(Stone, e + 8, 48, 1, 2), fillPreThing(Coin, e + 25, 63, 7, 1, 8), pushPreThing(Stone, e + 88, 48, 1, 2), n = 104;
break;
case 4:
case 5:
case 6:
pushPreThing(Stone, e + 8, 56, 2);
for (var x = 0; x <= 7; x += 2) pushPreThing(Stone, e + 8 * (x + 5), 56), fillPreThing(Coin, e + 8 * (x + 5) + 1, 63, 2, 1, 8);
n = 104;
break;
default:
fillPreThing(Coin, e + 1, 55 + 8 * randTrue(), 16, 1, 8), n = 128
}
pushPreThing(GenerationStarter, e + n, ceilmax + 20, pushRandomSectionSky, t), spawnMap()
}
function prepareNextGeneratorStandard(e, t, n, x, r) {
var i = 0,
a = 0;
if (r) i = 1;
else switch (randTrue(7)) {
case 0:
t > 7 && map.underwater && !randTrue(7) ? (i = randTrue(3) + 7, pushPreThing(Springboard, e + 8 * (t - 1), 14.5)) : a = !0;
break;
case 1:
var o = max(1, randTrue(7));
i = o + randTrue(3), pushPreFloor(e + 8 * t, 0, o);
for (var l = 1; l <= o; ++l) pushPreThing(Stone, e + 8 * (t + l - 1), 8 * l, 1, l);
if (randTrue()) {
pushPreFloor(e + 8 * (t + i + (o = max(1, randTrue(o))) - 1), 0, o);
for (var s = 0; s < o; ++s) pushPreThing(Stone, e + 8 * (t + i + o + s - 1), 8 * (o - s), 1, o - s);
i += o + o - 2
}
break;
default:
x && randTrue() ? pushPrePlatformGenerator(e + 8 * (t + 1.5), 2 * ((i = randTrue(1) + 4) - 2), randSign()) : a = !0
}
return (a || !i || i < 1) && (i = randTrue(3) + 1), n == pushRandomSectionOverworld && map.num_random_sections >= 3 + randTrue(7) && (n = pushRandomSectionPreCastle), !r && ++map.sincechange > 3 && (n = getRandomNextSection(), map.sincechange = 0, pushPreFuncCollider(e, zoneDisableCheeps)), pushPreThing(GenerationStarter, e + 8 * (t + i), ceilmax + 20, n), spawnMap(), i
}
function getRandomNextSection() {
switch (randTrue()) {
case 0:
return map.treeheight = 0, pushRandomSectionTrees;
case 1:
return startRandomSectionBridge
}
}
function pushRandomChunkEnemy(e, t, n) {
pushRandomEnemy(e, 0, t, n), randTrue(2) && (pushRandomSolidRow(e + 8 * t, jumplev1, randTrue(2) + 1), randTrue() && pushRandomEnemy(e, jumplev1, t + 1, !0), randTrue() && (pushRandomSolidRow(e + 8 * t, jumplev2, randTrue(2) + 1), randTrue() && pushRandomEnemy(e, jumplev2, t + 1, !0)))
}
function pushRandomEnemy(e, t, n, x) {
switch (randTrue(14)) {
case 0:
case 1:
fillPreThing(Beetle, e + 8 * n, t + 8.5, randTrue(2), 1, 12);
break;
case 3:
if (!x) {
switch (randTrue(4)) {
case 0:
pushPreThing(HammerBro, e + 8 * n, t + 12), randTrue() && pushPreThing(HammerBro, e + 8 * n + 16, t + 40);
break;
case 1:
if ("Underworld" != map.randname) {
pushPreThing(Lakitu, e + 8 * n, t + 80, !0);
break
}
case 2:
pushPreThing(Blooper, e + 8 * n, t + 40)
}
break
}
break;
default:
if (!randTrue(3)) return;
switch (randTrue(3)) {
case 1:
fillPreThing(Koopa, e + 8 * n, t + 12, randTrue(2), 1, 12, 0, randTrue() || map.onlysmartkoopas, randTrue());
break;
default:
fillPreThing(Goomba, e + 8 * n, t + 8, randTrue(2), 1, 12)
}
}
}
function addPipeRandom(e, t, n) {
var x;
x = !(n <= 24 || randTrue(2)) && getRandomTransport(), pushPrePipe(e, t, n, randTrue(7), x)
}
function getRandomTransport() {
var e, t = [
["Overworld", "Up"],
["Underworld", "Down"],
["Underwater", "Up"]
];
return t[e = randTrue(t.length - 1)][0] == map.randname && (e = (e + randTrue(t.length - 2) + 1) % t.length), ["Random", t[e][0], t[e][1]]
}
function getAfterSkyTransport() {
switch (randTrue(3)) {
case 0:
return ["Random", "Underworld", "Down"];
default:
return ["Random", "Overworld" + (body.className.indexOf(!0) ? " Night" : ""), "Down"]
}
}
function pushRandomObstacle(e, t) {
var n = randTrue(3);
switch (n > 1 && (map.hadPipe = !1), n) {
case 0:
case 1:
if (t > 1) {
addPipeRandom(e + 8 * t, 0, 8 * (randTrue(2 + (1 == map.hadObstacle && 0 == map.hadPipe && t > 7)) + 2)), map.hadObstacle = map.hadPipe = !0;
break
}
case 2:
for (var x = 0; x < 2; ++x) randTrue() || t < 1 || pushPreThing(Stone, e + 8 * (t + x), 8 * (r = randTrue(2) + 2), 1, r);
break;
default:
x = randTrue(2);
switch (randTrue(7)) {
case 0:
var r;
if (pushPreThing(Cannon, e + 8 * (t + x), 8 * (r = randTrue(2) + 1), r), 1 == r && randTrue(2) && 2 != x) {
var i = randTrue() + 2;
pushPreThing(Cannon, e + 8 * (t + x), 8 * r + 8 * i, i)
}
map.hadObstacle = !0;
break;
case 1:
if (!map.underwater) {
randTrue() && (!map.underwater && randTrue(2) && pushPreThing(Brick, e + 8 * t, jumplev1), pushPreThing(Block, e + 8 * (t + 1), jumplev1, [Mushroom, 1], !0), !map.underwater && randTrue(2) && pushPreThing(Brick, e + 8 * (t + 2), jumplev1), map.hadObstacle = !0);
break
}
case 2:
if (!map.underwater) {
var a = randTrue();
a || pushPreThing(Brick, e + 8 * t, jumplev1, getRandomBrickItem()), pushPreThing(Stone, e + 8 * (t + a), jumplev1, 2), addPipeRandom(e + 8 * (t + a), jumplev1, 24 + 8 * randTrue()), a && pushPreThing(Brick, e + 8 * t, jumplev1, getRandomBrickItem());
break
}
}
}
}
function pushRandomSolidRow(e, t, n) {
for (var x = 0; x < n; ++x) randTrue(2) ? pushPreThing(Brick, e + 8 * x, t, getRandomBrickItem("Overworld" == map.randname && t == jumplev2)) : pushPreThing(Block, e + 8 * x, t, getRandomBlockItem())
}
function getRandomBrickItem(e, t) {
return e && !randTrue(14) ? [Vine, ["Random", "Sky", "Vine"]] : !(!t && randTrue(7)) && (randTrue(3) ? Coin : Star)
}
function getRandomBlockItem() {
return ++randcount_powerup, !(randcount_powerup <= 7) && (!randTrue(7) && Mushroom)
}
function pushRandomGroundScenery(e, t, n) {
switch (randTrue(7)) {
case 2:
if (n - t > 4) {
pushPreScenery("Bush3", e, 0);
break
}
case 1:
if (n - t > 2) {
pushPreScenery("Bush2", e, 0);
break
}
case 0:
pushPreScenery("Bush1", e, 0);
break;
case 3:
if (n - t > 4) {
pushPreScenery("HillLarge", e, 0);
break
}
case 4:
pushPreScenery("HillSmall", e, 0);
break;
case 5:
pushPreScenery("PlantLarge", e, 0);
break;
case 6:
pushPreScenery("PlantSmall", e, 0);
break;
case 7:
pushPreScenery("Fence", e, 0, randTrue(2) + 1)
}
}
function pushRandomSkyScenery(e) {
switch (randTrue(2)) {
case 0:
pushPreScenery("Cloud1", e, 8 * (randTrue(5) + 5));
break;
case 1:
pushPreScenery("Cloud2", e, 8 * (randTrue(4) + 6));
break;
case 2:
pushPreScenery("Cloud3", e, 8 * (randTrue(3) + 7))
}
}
function addDistanceCounter() {
counter = createElement("div", {
className: "indisplay counter randomdisplay",
innerText: data.traveledold + " blocks traveled"
}), body.appendChild(counter), TimeHandler.addEventInterval((function(e) {
data.traveled = max(0, Math.round((player.right + gamescreen.left) / unitsizet8) - 3), e.innerText = data.traveledold + data.traveled + " blocks traveled"
}), 3, 1 / 0, counter)
}
function addSeedDisplay() {}
function createTunnel(e, t, n) {
for (var x = randTrue(2) + 3, r = randTrue(2) + 2, i = !1, a = 0; a < t; ++a) fillPreThing(n, e + 8 * a, 8, 1, r, 8, 8), randTrue(3) || i ? i = !1 : pushRandomSmallEnemy(e + 8 * a, 8 * r), fillPreThing(n, e + 8 * a, 96 - 8 * x, 1, x, 8, 8)
}
function removeRandomDisplays() {
var e, t = body.getElementsByClassName("randomdisplay");
for (e = t.length - 1; e >= 0; --e) body.removeChild(t[e])
}
function resetLibrary() {
window.palette = [
[0, 0, 0, 0],
[255, 255, 255, 255],
[0, 0, 0, 255],
[188, 188, 188, 255],
[116, 116, 116, 255],
[252, 216, 168, 255],
[252, 152, 56, 255],
[252, 116, 180, 255],
[216, 40, 0, 255],
[200, 76, 12, 255],
[136, 112, 0, 255],
[124, 7, 0, 255],
[168, 250, 188, 255],
[128, 208, 16, 255],
[0, 168, 0, 255],
[24, 60, 92, 255],
[0, 128, 136, 255],
[32, 56, 236, 255],
[156, 252, 240, 255],
[60, 188, 252, 255],
[92, 148, 252, 255],
[0, 130, 0, 255]
], window.digitsize = getDigitSize(palette), window.filters = {
Underworld: ["palette", {
"05": "18",
"09": "16"
}],
Castle: ["palette", {
"02": "04",
"05": "01",
"09": "03"
}],
Alt: ["palette", {
11: "01"
}],
Alt2: ["palette", {
"02": "04",
"05": "01",
"09": "03",
13: "01",
19: "08"
}],
star: {
one: ["palette", {}],
two: ["palette", {
"06": "02",
"08": "05",
10: "09"
}],
three: ["palette", {
"06": "01",
"08": "06",
10: "08"
}],
four: ["palette", {
"06": "01",
"08": "06",
10: "14"
}]
},
smart: ["palette", {
14: "08"
}]
}, window.library = {
rawsprites: {
characters: {
Eraser: "p[7,7,7,7]x06,3333x011,x36,x09,x38,x07,x310,x05,311x36,11300033321333312333003332x16,23330333321233212x38,22233222x320,03333x26,3333x05,x28,x06,11x28,x05,x15,x25,110000x16,222111x05,x15,001110000",
Beetle: {
normal: {
normal: "p[0,2,5,8]x022,1111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00222331133322200222203333002222",
two: "p[0,2,5,8]x07,111x010,x18,x07,x110,x05,x17,33111000x18,32311000x19,3311003333x111,001133x110,001113x110,011213x110,011113x110,011113x110,0011233x15,x35,00022331133322x05,22233330222x06,22x05,22000"
},
Underworld: {
normal: "p[0,15,16,18]x022,1111x010,x18,x07,x110,x05,x17,22111000x18,23211000x19,2211002222x111,001122x110,001112x110,011312x110,011112x110,011112x110,0011322x15,x25,00333221122233300333302222003333",
two: "p[0,15,16,18]x07,111x010,x18,x07,x110,x05,x17,22111000x18,23211000x19,2211002222x111,001122x110,001112x110,011312x110,011112x110,011112x110,0011322x15,x25,00033221122233x05,33322220333x06,33x05,33000"
},
Castle: {
normal: "p[0,1,3,4]x022,3333x010,x38,x07,x310,x05,x37,22333000x38,21233000x39,2233002222x311,003322x310,003332x310,033132x310,033332x310,033332x310,0033122x35,x25,00111223322211100111102222001111",
two: "p[0,1,3,4]x07,333x010,x38,x07,x310,x05,x37,22333000x38,21233000x39,2233002222x311,003322x310,003332x310,033132x310,033332x310,033332x310,0033122x35,x25,00011223322211x05,11122220111x06,11x05,11000"
}
},
BeetleShell: {
normal: "p[0,2,5,8]x06,1111x010,x18,x07,1111331111x05,1111322311110000x15,33x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x35,x16,x35,000033311333x010,3333x06,",
Underworld: "p[0,15,16,18]x06,1111x010,x18,x07,1111221111x05,1111233211110000x15,22x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x25,x16,x25,000022211222x010,2222x06,",
Castle: "p[0,1,3,4]x06,3333x010,x38,x07,3333223333x05,3333211233330000x35,22x35,0000x312,000x314,00x314,00x314,00x314,00x314,00x314,0x25,x36,x25,000022233222x010,2222x06,"
},
Blooper: {
normal: {
normal: "p[0,2,5,9]x06,2332x011,232232x09,23222232x07,2232222322x05,223x26,3220002223x26,322202223x28,32220003x28,3x06,x210,x06,2x18,2x06,1221111221x06,2112112112x06,2112112112x05,212211112212000022332222332200003x210,30000220x26,022000032032002302300002202200220220000320320023023x05,2022002202x06,2032002302x06,2002002002x09,2002x06,",
squeeze: "p[0,2,5,9]x06,2332x011,232232x09,23222232x07,2232222322x05,223x26,3220002223x26,322202223x28,32220003x28,3x06,2x18,200003x25,11x25,30x216,32223x26,322232222022002202222032203200230223000222020020222x05,2202002022000"
},
Underwater: {
normal: "p[0,1,2,3]x06,1331x011,131131x09,13111131x07,1131111311x05,113x16,3110001113x16,311101113x18,31110003x18,3x06,x110,x06,1x28,1x06,2112222112x06,1221221221x06,1221221221x05,121122221121000011331111331100003x110,30000110x16,011000031031001301300001101100110110000310310013013x05,1011001101x06,1031001301x06,1001001001x09,1001x06,",
squeeze: "p[0,1,2,3]x06,1331x011,131131x09,13111131x07,1131111311x05,113x16,3110001113x16,311101113x18,31110003x18,3x06,1x28,100003x15,22x15,30x116,31113x16,311131111011001101111031103100130113000111010010111x05,1101001011000"
}
},
Bowser: {
normal: {
normal: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,122233221323333113331x012,1022223332333311331123x010,10113133123333113111223111x09,10003223331113312233112x013,12233111x39,2231x011,2233111x313,1x09,122233111x36,111x35,x010,220033x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,111x36,x019,x35,11113333x019,2x36,x17,x017,1122332222x15,x016,111x210,11x021,1122112222x021,1112111x25,0",
two: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,122233221323333113331x012,1022223332333311331123x010,10113133123333113111223111x09,10003223331113312233112x013,12233111x39,2231x011,2233111x313,1x09,122233111x36,111x35,x010,220033x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,11x37,x019,x35,11113333x020,x36,x17,x019,22332222x15,x018,2222112211211x018,112211121112222x016,111x27,x06,"
},
firing: {
normal: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,112233221323333113331x012,1022223322333311331123x010,101030322x35,113111223111x06,x29,33331113312233112x07,x27,3333111x39,2231x07,x38,111x313,1x010,x35,111x36,111x35,x014,33x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,111x36,x019,x35,11113333x019,2x36,x17,x017,1122332222x15,x016,111x210,11x021,1122112222x021,1112111x25,0",
two: "p[0,1,6,14]x012,111x025,331112x025,3331122x023,113333223x019,200311x37,x018,2023311x38,x017,2221113332x35,x017,222213332223333x017,112233221323333113331x012,1022223322333311331123x010,101030322x35,113111223111x06,x29,33331113312233112x07,x27,3333111x39,2231x07,x38,111x313,1x010,x35,111x36,111x35,x014,33x16,33112333111x015,33222113322333112x011,222001022211x37,22x010,2210222012231x39,1x09,220022220033133311133321x08,210x26,1331133112333x010,200x25,333311333223311x010,10x25,333311x37,111x011,12220x35,1333311322x017,x35,1133323323x018,x35,11x37,x019,x35,11113333x020,x36,x17,x019,22332222x15,x018,2222112211211x018,112211121112222x016,111x27,x06,"
}
},
BowserFire: "p[0,1,6,8]x010,x36,003x010,x316,x06,x35,22332222332222x315,x25,111133x05,3333x213,13000x313,2223333x05,x39,0x36,x09,3300333033003x06,",
BrickShard: {
normal: "p[0,2,9]0021200002221200212121202212221222212221022212220021212000022200",
Underworld: ["filter", ["characters", "BrickShard", "Overworld"], filters.Underworld],
Castle: ["filter", ["characters", "BrickShard", "Overworld"], filters.Castle]
},
BulletBill: "p[0,2,5,8]110x17,x06,2201x25,1110000113x16,2111000112x19,2100113x19,22101131133x15,2121113132212111121111313x26,x17,3111x25,x17,31111222x15,0113x111,00113x110,000110x19,0000110x17,x06,",
Bubble: "p[0,1]0110100110010110",
CastleFireBall: ["same", ["characters", "FireBall"]],
CheepCheep: {
normal: {
normal: "p[0,1,3,6]0003333x013,x35,011x07,x26,11110000121122221111000x16,222111100012121122x15,0001212112211110000x16,221112x05,1211x27,0000333x210,0000233x29,00300233x28,3330023311x26,333033331112222333000x18,20333x05,x15,0000300",
two: "p[0,1,3,6]0003333x013,x35,x010,x26,3x07,1211x25,x06,x16,x25,111001212112222x15,0121211222x16,0x16,22x16,0001211222x16,00333x210,0300233x29,33000233x28,3300023311x26,300033331112222330000x18,203x07,x15,x07,"
},
red: {
normal: "p[0,1,6,8]0002222x013,x25,x010,x36,2x07,1311x35,x06,x16,x35,111001313113333x15,0131311333x16,0x16,33x16,0001311333x16,00222x310,0200322x39,22000322x38,2200032211x36,200022221113333220000x18,302x07,x15,x07,",
two: "p[0,1,6,8]0002222x013,x25,011x07,x36,11110000131133331111000x16,333111100013131133x15,0001313113311110000x16,331113x05,1311x37,0000222x310,0000322x39,00200322x38,2220032211x36,222022221113333222000x18,30222x05,x15,0000200"
}
},
Coin: {
normal: {
normal: {
normal: "p[0,2,6,8]00222211000x26,11002233221102232212211223221221122322122112232212211223221221122322122112232212211223221221102211221100x26,1100022221100",
two: "p[0,2,8]00222211000x26,1100x26,110x25,12211x25,12211x25,12211x25,12211x25,12211x25,12211x25,12211x25,1221102211221100x26,1100022221100",
three: "p[0,2,9,11]00333311000x36,11003322331103323313311332331331133233133113323313311332331331133233133113323313311332331331103311331100x36,1100033331100"
},
Underworld: {
normal: "p[0,6,9,16]00111133000x16,33001122113301121131133112113113311211311331121131133112113113311211311331121131133112113113301133113300x16,3300011113300",
two: "p[0,9,16]00111122000x16,2200x16,220x15,21122x15,21122x15,21122x15,21122x15,21122x15,21122x15,21122x15,2112201122112200x16,2200011112200",
three: "p[0,9,11,16]00222233000x26,33002211223302212232233221223223322122322332212232233221223223322122322332212232233221223223302233223300x26,3300022223300"
}
},
anim: {
normal: "p[0,1,7]000012x08,12x07,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x06,1112x07,12x08,120000",
anim2: "p[0,1,6,7]000022x07,2222x05,x26,000022132200022122322002212232200221223220022122322002212232200221223220002213220000x26,x05,2222x07,220000",
anim3: "p[0,1,6,7]000023x08,23x07,2333x06,2333x06,2333x06,2333x06,1333x06,1333x06,2333x06,2333x06,2333x06,2333x07,23x08,230000",
anim4: "p[0,1,6]x05,2x09,2x09,2x09,2x09,2x09,2x09,1x09,1x09,2x09,2x09,2x09,2x09,2x09,20000"
}
},
FireBall: {
normal: "p[0,1,6,8]0303330000303330300032330033322303322123032212330332233000333300",
two: "p[0,1,6,8]x05,3000333000333233030322230033212x36,2122330332233000333300",
three: "p[0,1,6,8]0033330003322330332122303212233032233300332300030333030000333030",
four: "p[0,1,6,8]0033330003322330332212x36,2123300322230303323330003330003x05,"
},
FireFlower: {
normal: {
normal: "p[0,1,6,8,14]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
two: "p[0,2,5,9,14]0000x28,x06,x212,000222x38,222022333x16,3332222333x16,333220222x38,222000x212,x06,x28,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
three: "p[0,6,8,10,14]0000x18,x06,x112,000111x38,111011333x26,3331111333x26,333110111x38,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
four: "p[0,1,6,14]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,33x07,333000033000033303330003300033300333300330033330003333033033330000333303303333x05,x310,x09,3333x06,"
},
Underworld: {
normal: "p[0,1,6,8,16]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
two: "p[0,15,16,18]0000x38,x06,x312,000333x28,333033222x16,2223333222x16,222330333x28,333000x312,x06,x38,x011,22x07,222000022000022202220002200022200222200220022220002222022022220000222202202222x05,x210,x09,2222x06,",
three: "p[0,6,8,10,16]0000x18,x06,x112,000111x38,111011333x26,3331111333x26,333110111x38,111000x112,x06,x18,x011,44x07,444000044000044404440004400044400444400440044440004444044044440000444404404444x05,x410,x09,4444x06,",
four: "p[0,5,9,16]0000x18,x06,x112,000111x28,111011222x36,2221111222x36,222110111x28,111000x112,x06,x18,x011,33x07,333000033000033303330003300033300333300330033330003333033033330000333303303333x05,x310,x09,3333x06,"
}
},
Firework: ["same", ["solids", "Firework"]],
Goomba: {
normal: "p[0,2,5,9]x06,3333x011,x36,x09,x38,x07,x310,x05,311x36,11300033321333312333003332x16,23330333321233212x38,22233222x320,03333x26,3333x05,x28,x06,11x28,x05,x15,x25,110000x16,222111x05,x15,001110000",
Underworld: "p[0,15,16,18]x06,2222x011,x26,x09,x28,x07,x210,x05,211x26,11200022231222213222002223x16,32220222231322313x28,33322333x220,02222x36,2222x05,x38,x06,11x38,x05,x15,x35,110000x16,333111x05,x15,001110000",
Castle: ["filter", ["characters", "Goomba", "Overworld"], filters.Castle]
},
Hammer: {
normal: "p[0,2,5,8]x08,2x014,12101x010,111101x09,1122232x09,1211131x08,x16,31x08,10011131x09,x15,01x012,2x015,2x015,2x015,2x015,2x015,2x015,2x015,2x07,",
two: "p[0,2,5,8]x073,11x013,10111x011,101211x010,11112110x28,11112122x08,1111211x010,3333x011,1111211x065,",
three: "p[0,2,5,8]x07,2x015,2x015,2x015,2x015,2x015,2x015,2x015,2x012,10x15,x09,13111001x08,13x16,x08,1311121x09,2322211x09,101111x010,10121x014,2x08,",
four: "p[0,2,5,8]x065,1121111x011,3333x010,1121111x08,22121111x28,01121111x010,112101x011,11101x013,11x073,"
},
HammerBro: {
normal: {
normal: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,1133332200x25,313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",
two: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,1211333300002221231x36,x06,10311133313x06,3322113231x06,3222212331x06,3x25,32313x05,33x25,3233x05,33312222322x06,3313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"
},
throwing: {
normal: "p[0,1,6,14]00003333x011,333313x09,3113331x010,31133332x07,231133322x06,x25,12322x06,x25,12222x06,x25,1122233x05,2221x25,333x07,1322223313x06,3322223231x06,33x25,331x06,33322132313x05,33311133233x05,3331x35,22x06,3313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",
two: "p[0,1,6,14]00003333x011,333313x09,3113331x010,31133332x07,231133322x06,x25,12322x06,x25,12222x06,x25,1122233x05,2221x25,333x07,1322223313x06,3322223231x06,33x25,331x06,33322132313x05,33311133233x05,3331x35,22x06,3313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"
},
thrown: {
normal: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,1133332200x25,313333233x06,33123323330000223311223333000022233111133x05,222x35,11110000222233x26,x05,222033x25,x06,2200002222x013,222",
two: "p[0,1,6,14]003333x011,31x35,x08,31113313x09,31133313x08,311x35,x07,221221233x07,x25,122133x05,x25,12113333x06,21231x36,00022210311133313x06,3322113231x06,3222212331x06,x25,1323130000x25,1133233000x25,113333220022223313333233x06,3312333233x06,3311223333x07,33111133x08,x35,1111x07,23322233x08,x27,x010,x25,x012,2222000"
}
},
Koopa: {
normal: {
normal: {
flying: {
normal: "p[0,1,6,14]x019,1x09,11000111x07,1111001112x05,x15,0231122000x15,0023112200112110002311220012111100211122011211110222122201211110023x25,012111010x26,0012x15,022202203312111002200220331113330220221333232333002022133233323200002212x36,23000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",
two: "p[0,1,6,14]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,2211120011100002322122011211000x27,0121111002220022012x15,022000213x17,x05,22133x17,00022133331131110222213332323311002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"
},
normal: {
normal: {
normal: "p[0,1,6,14]x019,1x014,111x013,1112x011,231122x010,231122x010,231122x010,211122x09,2221222x09,23x25,x09,x26,00x35,0002220220323332300220022033232333022022133332311300202213332323130000221232333232000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",
two: "p[0,1,6,14]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,221112x09,2322122x09,x27,x09,22200220x35,00022000213233323x06,2213323233x05,22133332311300222213332323130002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"
},
Underworld: {
normal: "p[0,5,9,16]x019,1x014,111x013,1112x011,231122x010,231122x010,231122x010,211122x09,2221222x09,23x25,x09,x26,00x35,0002220220323332300220022033232333022022133332311300202213332323130000221232333232000221132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000221112331110000x25,x15,22200x25,x06,2222",
two: "p[0,5,9,16]00001x014,111x012,2111x012,23112x010,223112x010,223112x010,221112x09,2322122x09,x27,x09,22200220x35,00022000213233323x06,2213323233x05,22133332311300222213332323130002221232333232000021132x35,2300002132323332320000212333232333x05,1x35,23333x05,113332323111000021112331112x05,222x15,222x06,2220000222x07,2220022200"
}
}
},
smart: ["filter", ["characters", "Koopa", "normal", "normal"], filters.smart]
},
Castle: ["filter", ["characters", "Koopa", "normal"], filters.Castle]
},
Lakitu: {
normal: "p[0,1,6,14]x05,x25,x010,x27,x08,333233322x06,3111311132x06,3x17,323x05,3113131132330000311313113233x05,3332x37,x05,222333322233000x25,33x25,3003x25,11x25,30031222111122213003x112,303x114,33x15,3113x15,33x15,3113x15,33x15,3113x15,33x114,3313x110,3130311131111311130031111333311113003x112,3000311113311113x05,3333003333000",
hiding: "p[0,1,6,14]x0131,2220000222x05,x25,33x25,0000x25,11x25,00003222111122230003x112,303x114,33x15,3113x15,33x15,3113x15,33x15,3113x15,33x114,3313x110,3130311131111311130031111333311113003x112,3000311113311113x05,3333003333000"
},
Mario: {
dead: "p[0,6,8,10]x05,x25,x07,11x27,1100111131311313x16,3313113133x15,33311113331100x35,113333x05,331333313x06,33x16,3x05,222211112220003332233332233003333223322333003333212212333003333x26,333000333x26,3300",
normal: {
normal: {
normal: "p[0,6,8,10]0000x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,3332333x08,333323323330000x35,2222333300011132122123110001111x26,111000111x28,11x05,222202222x06,333300033330000x35,000x35,00",
hopping: ["same", ["characters", "Mario", "normal", "normal", "running", "normal", "two"]],
jumping: "p[0,6,8,10]x013,111x06,x26,0111x05,x29,11x05,33311311333000031311131133300003133111311130000331111x36,x06,x17,33000x35,2333233000x37,2333220311x36,x26,0311112232212212330113x210,3300333x29,330333x28,x05,330x25,x07,",
running: {
skidding: "p[0,6,8,10]x05,x26,x08,x28,33x07,131x37,0000x16,3113111001133113311311100033x16,3111x05,1123332222x05,3332231112220000x36,1113220000x36,112222x05,3333x26,x07,222233322x07,222x35,x09,2333223333x09,2x36,x010,x35,00",
normal: {
normal: "p[0,6,8,10]x05,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x05,x35,2233x05,1113333222333x17,3332122233x15,0x28,0330000x210,33000x211,330033322200222233003333x013,3333x010,",
two: "p[0,6,8,10]x020,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x08,333322333x07,3332212211x06,3333x26,x06,2331112222x07,23112222x09,2223333x09,x38,0000",
three: "p[0,6,8,10]x021,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,x35,2311x06,11x36,11100001112x35,11x05,333x27,x06,33x28,x05,333x27,x06,330003333x012,x35,x05,"
}
},
paddling: {
normal: {
normal: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x06,33x27,x07,33x26,x08,332222x010,30033x014,3x027,",
paddle1: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x05,33x28,x06,33x27,x07,33x25,x09,330333x013,33x026,",
paddle2: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x05,33x25,33111000033x27,111000033x26,00110000330333x013,33x026,",
paddle3: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x07,33x25,x09,330333x013,33x026,"
},
swim2: {
normal: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x07,3x27,x07,33x26,x010,3322x011,333x013,33x028,",
paddle1: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x06,3x28,x06,33x27,x09,33222x010,3333x012,333x027,",
paddle2: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x06,3x25,33111000033x27,111x06,3322220011x05,3333x012,333x027,",
paddle3: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x09,332222x09,3333x012,333x027,"
}
},
climbing: {
normal: "p[0,6,8,10]0000x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x09,222x35,x08,222x36,11100002222x35,111100x26,3333111100x211,33300x211,330000x29,x08,x26,x06,",
two: "p[0,6,8,10]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x08,22x35,111x05,22x36,1111000222x36,1111000x25,122x08,x28,00033000x210,3330000x29,333x05,x28,333x016,"
}
},
large: {
normal: "p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,",
jumping: "p[0,6,8,10]x012,111x012,11311x06,x25,113310000x27,x15,000x28,x35,000x211,33000333113111333300311311331111330031133x18,30031133111311113033x15,x37,0033331111333313000033x18,33x05,2222332333300x36,223233300x38,23323300x38,2232300033113333223320003111133222231000x15,32221222000x15,x28,0001011x29,003011x210,033000x29,33330003x28,x37,233x26,x37,222332222x37,x25,0022x37,x25,x08,3332222x09,33x014,3x015,",
hopping: ["same", ["characters", "Mario", "normal", "large", "running", "normal", "two"]],
crouching: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000331113111311110033x15,x36,000223x15,x35,0033323x19,0033323331113323033332x38,23033332x37,22x36,21x35,22x37,x28,x39,x26,x38,1112222111333231111222211113221111x26,1111202113x06,311200033330000333300x36,0000x36,",
running: {
skidding: "p[0,6,8,10]000x27,x09,11x27,33x06,1x27,333000x26,31133110022113113113111100013311311311110x16,3111213x16,3x15,22313111133331133223110333311113332x05,x15,x35,220003322233111332000333222x15,32000333233x15,3200x37,x15,0000x37,113122200x38,11222200x37,x27,00x36,x27,0000333x25,333x05,x25,x35,x06,x25,x38,0000222333311113x06,233x16,3x07,3112222x010,x27,003x07,222230033x07,22x37,x08,x37,x09,x36,x011,3333x012,3330000",
normal: {
normal: "p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x08,33311x010,222233200010000333322332011100x36,223231110x37,223321110x37,223323130x36,222332330x36,22212313003333x29,000x15,x28,000x15,x28,0031111x29,0330111x27,x35,00023x26,x35,003223x25,x38,22233222x39,2222000x310,2x011,333x013,333x014,333x011,",
two: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,30003333x27,322003333x25,3322200333322223222200033332220022220003333x05,333300033x07,33330003x08,x36,x010,x36,x017,",
three: "p[0,6,8,10]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x05,33x18,x07,222211x09,32332233x07,323333223x07,3233332233x06,3233332223x06,32x35,113x06,3233331111x06,22333311112x05,22233311112200002222331112220000x26,332222x05,x25,33322x07,222x36,x07,22x36,x09,223333x010,3222333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
}
},
paddling: {
normal: {
normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
paddle1: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
paddle2: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
paddle3: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,"
},
swim2: {
normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
paddle1: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,",
paddle2: "p[0,6,8,10]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x028,",
paddle3: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,"
}
},
climbing: {
normal: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x29,30330000x27,x35,x05,x26,x35,x07,22223333x011,x35,x013,33x015,3x018,",
two: "p[0,6,8,10]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,3x06,x210,033000x29,33330000x28,33330000x28,3333x05,x27,3333x064,"
}
},
fiery: {
normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x07,1x25,3x09,31333313x07,3313333133x05,3331333313330003333133331333300333113333113330333311333311x38,x18,x38,1211112133332222x18,x28,x18,22220222x18,2220022x110,22000x112,000x16,00x16,00x15,0000x15,00x15,0000x15,000333300003333000033330000333300x36,0000x312,0000x36,",
jumping: "p[0,5,6,8]x012,222x012,22322x06,x15,223320000x17,x25,000x18,x35,000x111,33000333223222333300322322332222330032233x28,30032233222322223033x25,x37,0033332222333323000033x28,33x05,1111331333300x36,113133300x38,13313300x38,1131300033223333113310003222233111132000x25,31112111000x25,x18,0002222x19,003022x110,033000x19,33330003x18,x37,133x16,x37,111331111x37,x15,0011x37,x15,x08,3331111x09,33x014,3x015,",
hopping: ["same", ["characters", "Mario", "normal", "fiery", "running", "normal", "three"]],
crouching: "p[0,5,6,8]x07,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000332223222322220033x25,x36,000113x25,x35,0033313x29,0033313332223313033331x38,13033331x37,11x36,12x35,11x37,x18,x39,x16,x38,2221111222333132222111122223112222x16,2222101223x06,322100033330000333300x36,0000x36,",
firing: ["same", ["characters", "Mario", "normal", "fiery", "running", "normal", "two"]],
running: {
skidding: "p[0,5,6,8]000x17,x09,22x17,33x06,2x17,333000x16,32233220011223223223222200023322322322220x26,3222123x26,3x25,11323222233332233113220333322223331x05,x25,x35,110003311133222331000333111x25,31000333133x25,3100x37,x25,0000x37,223211100x38,22111100x37,x17,00x36,x17,0000333x15,333x05,x15,x35,x06,x15,x38,0000111333322223x06,133x26,3x07,3221111x010,x17,003x07,111130033x07,11x37,x08,x37,x09,x36,x011,3333x012,3330000",
normal: {
normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x08,33322x010,111133100020000333311331022200x36,113132220x37,113312220x37,113313230x36,111331330x36,11121323003333x19,000x25,x18,000x25,x18,0032222x19,0330222x17,x35,00013x16,x35,003113x15,x38,11133111x39,1111000x310,1x011,333x013,333x014,333x011,",
two: "p[0,5,6,8]x039,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,30003333x17,311003333x15,3311100333311113111100033331110011110003333x05,333300033x07,33330003x08,x36,x010,x36,0",
three: "p[0,5,6,8,10]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000044x25,x35,x05,33x28,x07,111122x09,31331133x07,313333113x07,3133331133x06,3133331113x06,31x35,223x06,3133332222x06,11333322221x05,11133322221100001111332221110000x16,331111x05,x15,33311x07,111x36,x07,11x36,x09,113333x010,3111333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
}
},
paddling: {
normal: {
normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x05,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
paddle2: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,"
},
swim2: {
normal: "p[0,6,8,10]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,",
paddle2: "p[0,5,6,8]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x028,",
paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,"
}
},
climbing: {
normal: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x19,30330000x17,x35,x05,x16,x35,x07,11113333x011,x35,x013,33x015,3x018,",
two: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,3x06,x110,033000x19,33330000x18,33330000x18,3333x05,x17,3333x064,"
}
},
shrooming: {
normal: "p[0,6,8,10]x0261,x25,x010,x29,x07,3331131x08,3131113111x06,31331113111x05,3311113333x08,x17,x08,332333x09,3332332333x05,33332222333300001132122123110000111x26,111000011x28,11x06,22200222x07,3330000333x05,33330000333300",
shrooming2: "p[0,6,8,10]x0134,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,33323333233300033332333323333011002122221200x15,0x28,0x16,x210,11101022220022220100022220000222200003333000033330000333300003333000x35,0000x35,0",
shrooming3: "p[0,6,8,10]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,"
}
},
star: {
normal: ["filter", ["characters", "Mario", "normal"], filters.star.one],
star2: ["filter", ["characters", "Mario", "normal"], filters.star.two],
star3: ["filter", ["characters", "Mario", "normal"], filters.star.three],
star4: ["filter", ["characters", "Mario", "normal"], filters.star.four]
}
},
Luigi: {
dead: "p[0,6,1,21]x05,x25,x07,11x27,1100111131311313x16,3313113133x15,33311113331100x35,113333x05,331333313x06,33x16,3x05,222211112220003332233332233003333223322333003333212212333003333x26,333000333x26,3300",
normal: {
normal: {
normal: "p[0,6,1,21]0000x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,3332333x08,333323323330000x35,2222333300011132122123110001111x26,111000111x28,11x05,222202222x06,333300033330000x35,000x35,00",
hopping: ["same", ["characters", "Luigi", "normal", "normal", "running", "normal", "two"]],
jumping: "p[0,6,1,21]x013,111x06,x26,0111x05,x29,11x05,33311311333000031311131133300003133111311130000331111x36,x06,x17,33000x35,2333233000x37,2333220311x36,x26,0311112232212212330113x210,3300333x29,330333x28,x05,330x25,x07,",
running: {
skidding: "p[0,6,1,21]x05,x26,x08,x28,33x07,131x37,0000x16,3113111001133113311311100033x16,3111x05,1123332222x05,3332231112220000x36,1113220000x36,112222x05,3333x26,x07,222233322x07,222x35,x09,2333223333x09,2x36,x010,x35,00",
normal: {
normal: "p[0,6,1,21]x05,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x05,x35,2233x05,1113333222333x17,3332122233x15,0x28,0330000x210,33000x211,330033322200222233003333x013,3333x010,",
two: "p[0,6,1,21]x020,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x08,333322333x07,3332212211x06,3333x26,x06,2331112222x07,23112222x09,2223333x09,x38,0000",
three: "p[0,6,1,21]x021,x26,x09,x210,x06,33331131x07,33131113111x05,331331113111000033311113333x07,x18,x07,x35,2311x06,11x36,11100001112x35,11x05,333x27,x06,33x28,x05,333x27,x06,330003333x012,x35,x05,"
}
},
paddling: {
normal: {
normal: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x06,33x27,x07,33x26,x08,332222x010,30033x014,3x027,",
paddle1: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x05,33x28,x06,33x27,x07,33x25,x09,330333x013,33x026,",
paddle2: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x05,33x25,33111000033x27,111000033x26,00110000330333x013,33x026,",
paddle3: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x07,33x25,x09,330333x013,33x026,"
},
swim2: {
normal: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,111x06,2x36,11x06,22233332x07,3x27,x07,33x26,x010,3322x011,333x013,33x028,",
paddle1: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,32x35,1111x05,2x36,111x05,222333322x06,3x28,x06,33x27,x09,33222x010,3333x012,333x027,",
paddle2: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3233322x09,2x36,x08,222333311x06,3x25,33111000033x27,111x06,3322220011x05,3333x012,333x027,",
paddle3: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3332333x08,33332333x06,1333322333x05,1113322122x07,33x27,x09,332222x09,3333x012,333x027,"
}
},
climbing: {
normal: "p[0,6,1,21]0000x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x07,3323333x09,222x35,x08,222x36,11100002222x35,111100x26,3333111100x211,33300x211,330000x29,x08,x26,x06,",
two: "p[0,6,1,21]x05,x26,x09,x210,x06,33311311x07,31311131111x05,3133111311110000331111x35,x07,x18,x08,22x35,111x05,22x36,1111000222x36,1111000x25,122x08,x28,00033000x210,3330000x29,333x05,x28,333x016,"
}
},
large: {
normal: "p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,",
jumping: "p[0,6,1,21]x012,111x012,11311x06,x25,113310000x27,x15,000x28,x35,000x211,33000333113111333300311311331111330031133x18,30031133111311113033x15,x37,0033331111333313000033x18,33x05,2222332333300x36,223233300x38,23323300x38,2232300033113333223320003111133222231000x15,32221222000x15,x28,0001011x29,003011x210,033000x29,33330003x28,x37,233x26,x37,222332222x37,x25,0022x37,x25,x08,3332222x09,33x014,3x015,",
hopping: ["same", ["characters", "Luigi", "normal", "large", "running", "normal", "two"]],
crouching: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000331113111311110033x15,x36,000223x15,x35,0033323x19,0033323331113323033332x38,23033332x37,22x36,21x35,22x37,x28,x39,x26,x38,1112222111333231111222211113221111x26,1111202113x06,311200033330000333300x36,0000x36,",
running: {
skidding: "p[0,6,1,21]000x27,x09,11x27,33x06,1x27,333000x26,31133110022113113113111100013311311311110x16,3111213x16,3x15,22313111133331133223110333311113332x05,x15,x35,220003322233111332000333222x15,32000333233x15,3200x37,x15,0000x37,113122200x38,11222200x37,x27,00x36,x27,0000333x25,333x05,x25,x35,x06,x25,x38,0000222333311113x06,233x16,3x07,3112222x010,x27,003x07,222230033x07,22x37,x08,x37,x09,x36,x011,3333x012,3330000",
normal: {
normal: "p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x08,33311x010,222233200010000333322332011100x36,223231110x37,223321110x37,223323130x36,222332330x36,22212313003333x29,000x15,x28,000x15,x28,0031111x29,0330111x27,x35,00023x26,x35,003223x25,x38,22233222x39,2222000x310,2x011,333x013,333x014,333x011,",
two: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,30003333x27,322003333x25,3322200333322223222200033332220022220003333x05,333300033x07,33330003x08,x36,x010,x36,x017,",
three: "p[0,6,1,21]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x05,33x18,x07,222211x09,32332233x07,323333223x07,3233332233x06,3233332223x06,32x35,113x06,3233331111x06,22333311112x05,22233311112200002222331112220000x26,332222x05,x25,33322x07,222x36,x07,22x36,x09,223333x010,3222333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
}
},
paddling: {
normal: {
normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
paddle1: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
paddle2: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,",
paddle3: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x06,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x042,"
},
swim2: {
normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
paddle1: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,",
paddle2: "p[0,6,1,21]x022,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,2x07,322x36,2x06,3222x36,11x05,222x36,11100002222x35,1111000x26,3331111000x210,011000x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x028,",
paddle3: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x08,x36,233x07,x36,223x06,x36,22233x05,x35,x25,3000011333222122200001113x28,0001111x29,000111x29,x07,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x027,"
}
},
climbing: {
normal: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x29,30330000x27,x35,x05,x26,x35,x07,22223333x011,x35,x013,33x015,3x018,",
two: "p[0,6,1,21]x023,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,x35,x06,3x18,x06,3222111x08,3233323x09,32333323x07,332x35,22110000322x37,1111003222x36,1111000222x37,1110002222x36,111000x26,3332x06,x210,x06,x29,3x06,x210,033000x29,33330000x28,33330000x28,3333x05,x27,3333x064,"
}
},
fiery: {
normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x07,1x25,3x09,31333313x07,3313333133x05,3331333313330003333133331333300333113333113330333311333311x38,x18,x38,1211112133332222x18,x28,x18,22220222x18,2220022x110,22000x112,000x16,00x16,00x15,0000x15,00x15,0000x15,000333300003333000033330000333300x36,0000x312,0000x36,",
jumping: "p[0,5,6,8]x012,222x012,22322x06,x15,223320000x17,x25,000x18,x35,000x111,33000333223222333300322322332222330032233x28,30032233222322223033x25,x37,0033332222333323000033x28,33x05,1111331333300x36,113133300x38,13313300x38,1131300033223333113310003222233111132000x25,31112111000x25,x18,0002222x19,003022x110,033000x19,33330003x18,x37,133x16,x37,111331111x37,x15,0011x37,x15,x08,3331111x09,33x014,3x015,",
hopping: ["same", ["characters", "Luigi", "normal", "fiery", "running", "normal", "three"]],
crouching: "p[0,5,6,8]x07,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000332223222322220033x25,x36,000113x25,x35,0033313x29,0033313332223313033331x38,13033331x37,11x36,12x35,11x37,x18,x39,x16,x38,2221111222333132222111122223112222x16,2222101223x06,322100033330000333300x36,0000x36,",
firing: ["same", ["characters", "Luigi", "normal", "fiery", "running", "normal", "two"]],
running: {
skidding: "p[0,5,6,8]000x17,x09,22x17,33x06,2x17,333000x16,32233220011223223223222200023322322322220x26,3222123x26,3x25,11323222233332233113220333322223331x05,x25,x35,110003311133222331000333111x25,31000333133x25,3100x37,x25,0000x37,223211100x38,22111100x37,x17,00x36,x17,0000333x15,333x05,x15,x35,x06,x15,x38,0000111333322223x06,133x26,3x07,3221111x010,x17,003x07,111130033x07,11x37,x08,x37,x09,x36,x011,3333x012,3330000",
normal: {
normal: "p[0,5,6,8]x06,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000333x25,x35,x05,33x28,x08,33322x010,111133100020000333311331022200x36,113132220x37,113312220x37,113313230x36,111331330x36,11121323003333x19,000x25,x18,000x25,x18,0032222x19,0330222x17,x35,00013x16,x35,003113x15,x38,11133111x39,1111000x310,1x011,333x013,333x014,333x011,",
two: "p[0,5,6,8]x039,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,30003333x17,311003333x15,3311100333311113111100033331110011110003333x05,333300033x07,33330003x08,x36,x010,x36,0",
three: "p[0,5,6,8,10]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000044x25,x35,x05,33x28,x07,111122x09,31331133x07,313333113x07,3133331133x06,3133331113x06,31x35,223x06,3133332222x06,11333322221x05,11133322221100001111332221110000x16,331111x05,x15,33311x07,111x36,x07,11x36,x09,113333x010,3111333x09,3333033x08,x35,x011,x37,x011,x35,x05,"
}
},
paddling: {
normal: {
normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x05,33x28,00003333x27,x05,3333x25,x07,33332223x08,3333033x09,3300033x09,300003x058,",
paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x05,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
paddle2: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,",
paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x06,33x18,00003333x17,x05,3333x15,x07,33331113x08,3333033x09,3300033x09,300003x042,"
},
swim2: {
normal: "p[0,6,1,21]x07,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000033x15,331111x05,3113331111x05,322x35,11x05,322x36,1x06,32x36,x08,32x35,23x07,323333223x08,223322233x07,x28,3x07,x25,1222x06,x210,x06,x210,x06,x210,x06,x29,x07,x28,x08,3x25,x09,333222x010,x35,x011,3333x012,333x014,33x043,",
paddle1: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,",
paddle2: "p[0,5,6,8]x022,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,1x07,311x36,1x06,3111x36,22x05,111x36,22200001111x35,2222000x16,3332222000x110,022000x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x028,",
paddle3: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x08,x36,133x07,x36,113x06,x36,11133x05,x35,x15,3000022333111211100002223x18,0002222x19,000222x19,x07,x19,x07,x18,x08,3x15,x09,333111x010,x35,x011,3333x012,333x014,33x027,"
}
},
climbing: {
normal: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,332222x05,3223332222x05,311x35,22x05,311x36,2x06,31x36,x08,31x35,13x07,313333113x08,113311133x07,x18,3x07,x15,2111x06,x110,x06,x110,x06,x110,x06,x19,x07,x19,30330000x17,x35,x05,x16,x35,x07,11113333x011,x35,x013,33x015,3x018,",
two: "p[0,5,6,8]x023,x15,x09,x16,2x08,x16,22x08,x111,x05,333223222x06,322322332222000032233x28,00332233222322220033x25,x36,000033x25,x35,x06,3x28,x06,3111222x08,3133313x09,31333313x07,331x35,11220000311x37,2222003111x36,2222000111x37,2220001111x36,222000x16,3331x06,x110,x06,x19,3x06,x110,033000x19,33330000x18,33330000x18,3333x05,x17,3333x064,"
}
},
shrooming: {
normal: "p[0,6,1,21]x0261,x25,x010,x29,x07,3331131x08,3131113111x06,31331113111x05,3311113333x08,x17,x08,332333x09,3332332333x05,33332222333300001132122123110000111x26,111000011x28,11x06,22200222x07,3330000333x05,33330000333300",
shrooming2: "p[0,6,1,21]x0134,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,33323333233300033332333323333011002122221200x15,0x28,0x16,x210,11101022220022220100022220000222200003333000033330000333300003333000x35,0000x35,0",
shrooming3: "p[0,6,1,21]x06,x25,x09,x26,1x08,x26,11x08,x211,x05,333113111x06,311311331111000031133x18,00331133111311110033x15,x36,000333x15,x35,x05,33x18,x07,2x15,3x09,32333323x07,3323333233x05,3332333323330003333233332333300333223333223330333322333322x38,x28,x38,2122221233331111x28,x18,x28,11110111x28,1110011x210,11000x212,000x26,00x26,00x25,0000x25,00x25,0000x25,000333300003333000033330000333300x36,0000x312,0000x36,"
}
},
star: {
normal: ["filter", ["characters", "Luigi", "normal"], filters.star.one],
star2: ["filter", ["characters", "Luigi", "normal"], filters.star.two],
star3: ["filter", ["characters", "Luigi", "normal"], filters.star.three],
star4: ["filter", ["characters", "Luigi", "normal"], filters.star.four]
}
},
Mushroom: {
normal: "p[0,1,6,8]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,",
gainlife: "p[0,1,6,14]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,",
deathly: "p[0,5,9,16]x06,2222x011,332222x09,33332222x07,x35,x25,x05,22333x27,000x29,3332200x28,x35,202233x25,x35,222333x25,x35,22233x27,333x219,02333x16,3332x05,x18,x08,12x16,x08,12x16,x09,121111x05,"
},
Pirhana: {
normal: {
normal: "p[0,6,14]x022,2002x011,210012x09,22200222x08,12200221x07,2221001222x06,2222002222x05,1212200221210000x25,00x25,0000222120021222000021222002221200002222100122220000212220022212x05,2212002122x06,2222002222x07,12100121x010,2002x06,11x05,11x05,11121100011000112101211001100112100112110110112110001121011012110000111211112111x05,x110,000",
two: "p[0,1,6,14]x034,3x010,30003211x06,112300331x08,1330023311000011332033321x06,12333233331100113333233233100001332x37,x06,x36,23333100133332x35,23100132333302x35,00x35,20033233300333233000333320023333x05,32x36,23x08,323323x05,22x05,22x05,22232200022000223202322002200223200223220220223220002232022023220000222322223222x05,x210,000"
},
Underworld: {
normal: "p[0,9,16]x022,2002x011,210012x09,22200222x08,12200221x07,2221001222x06,2222002222x05,1212200221210000x25,00x25,0000222120021222000021222002221200002222100122220000212220022212x05,2212002122x06,2222002222x07,12100121x010,2002x06,11x05,11x05,11121100011000112101211001100112100112110110112110001121011012110000111211112111x05,x110,000",
two: "p[0,5,9,16]x034,3x010,30003211x06,112300331x08,1330023311000011332033321x06,12333233331100113333233233100001332x37,x06,x36,23333100133332x35,23100132333302x35,00x35,20033233300333233000333320023333x05,32x36,23x08,323323x05,22x05,22x05,22232200022000223202322002200223200223220220223220002232022023220000222322223222x05,x210,000"
},
Castle: ["same", ["characters", "Pirhana", "Underworld"]]
},
Podoboo: "p[0,1,6,8]0000x36,x07,x38,x05,3332222333000333x26,33300332221122233033322111122x35,22x16,22333322x16,22333322x16,223333222111122233332222112222x35,232222323330x35,22x35,00x35,22x35,0003303333033x05,30033003000",
Shell: {
normal: {
normal: {
normal: "p[0,1,6,14]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100011x36,11x07,11333311x09,x16,x011,1111x06,",
peeking: "p[0,1,6,14]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100211x36,11200022211333311222002220x16,02220022000111100022002x012,20"
},
smart: ["filter", ["characters", "Shell", "normal", "normal"], filters.smart]
},
Underworld: {
normal: "p[0,5,9,16]x05,233332x09,33222233x07,3323333233x06,32x36,23x05,32x38,230000232x36,2320002333233332333200x35,2222x35,01113323333233x17,2x36,2111100011x36,11x07,11333311x09,x16,x011,1111x06,",
peeking: "p[0,5,6,9,16]x05,344443x09,44333344x07,4434444344x06,43x46,34x05,43x48,340000343x46,3430003444344443444300x45,3333x45,01114434444344x17,3x46,3111100211x46,11200022211444411222002220x16,02220022000111100022002x012,20"
},
Castle: ["same", ["characters", "Shell", "normal", "normal"]]
},
ShellBeetle: {
normal: "p[0,2,5,9]x06,1111x010,x18,x07,1111331111x05,1111322311110000x15,33x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x35,x16,x35,000033311333x010,3333x06,",
Underworld: "p[0,15,16,18]x06,1111x010,x18,x07,1111221111x05,1111233211110000x15,22x15,0000x112,000x114,00x114,00x114,00x114,00x114,00x114,00x114,0x25,x16,x25,000022211222x010,2222x06,",
Castle: "p[0,1,3,4]x06,3333x010,x38,x07,3333223333x05,3333211233330000x35,22x35,0000x312,000x314,00x314,00x314,00x314,00x314,00x314,0x25,x36,x25,000022233222x010,2222x06,"
},
Spiny: {
normal: "p[0,1,6,8]x024,1x015,1x014,122x08,10000122000010001200122220012000122012222012200012223222312220001122x35,1222003322331123322301113331122233330033133x25,x36,133133222333111333321x35,111x05,222x16,2220002222x06,2222",
two: "p[0,1,6,8]x08,1x015,1x014,122x08,10000122000010001200122220012000122012222012200012223222312220001122x35,1222003322331123322301113331122233330033133x25,x36,133133222333111333321x35,111x05,222x16,22x06,222000222x08,22000220000"
},
SpinyEgg: {
normal: "p[0,1,6,8]x06,22x09,22322322x06,2x36,2x05,x310,00022311x35,22002311x37,200331x39,022x310,2222x310,220x39,133002x37,11320022x35,11322000x310,x05,2x36,2x06,22322322x09,22x06,",
two: "p[0,1,6,8]0000220022x08,233332x05,22x38,2200233311x35,20003311x36,0022331x37,2222x310,220x312,00x312,022x310,2222x37,1332200x36,11330002x35,1133320022x38,22x05,233332x08,2200220000"
},
Star: {
normal: "p[0,6,8]x06,11x012,11x011,1111x010,1111x09,x16,0000x119,2112x15,01111211211110001112112111x05,x18,x06,x18,x05,x110,0000x110,00001111001111000111x06,1110011x08,110",
two: "p[0,2,9]x06,22x012,22x011,2222x010,2222x09,x26,0000x219,1221x25,02222122122220002221221222x05,x28,x06,x28,x05,x210,0000x210,00002222002222000222x06,2220022x08,220",
three: "p[0,5,8]x06,22x012,22x011,2222x010,2222x09,x26,0000x219,1221x25,02222122122220002221221222x05,x28,x06,x28,x05,x210,0000x210,00002222002222000222x06,2220022x08,220",
four: "p[0,6,14]x06,11x012,11x011,1111x010,1111x09,x16,0000x119,2112x15,01111211211110001112112111x05,x18,x06,x18,x05,x110,0000x110,00001111001111000111x06,1110011x08,110"
},
Vine: ["multiple", "vertical", {
top: "p[0,6,14]00222x010,x25,x08,2211122x07,x25,12x09,222022x012,22x012,22x012,22x012,22x012,220022x08,2202222x07,2221112x07,x26,12x06,220x25,",
middle: "p[0,6,14]x06,22x012,22x012,22x08,220022x07,2222022x07,2111222x06,21x26,x06,x25,022x012,22x012,22x012,22x012,220022x08,2202222x07,2221112x07,x26,12x06,220x25,"
}]
},
solids: {
Axe: {
normal: "p[0,2,4,6,9]003x010,3000323300420033130032333322333313032x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,130323333423333130002330042000313000300002200003x09,42x014,22x014,42x014,22x014,42x07,",
two: "p[0,2,4,9]003x010,3000323300320033130032333322333313032x36,2x35,1332x36,2x35,1332x36,2x35,1332x36,2x35,1332x36,2x35,13032x35,23333130002330032000313000300002200003x09,32x014,22x014,32x014,22x014,32x07,",
three: "p[0,2,4,9,11]004x010,4000424400320044140042444422444414042x45,32x45,1442x45,32x45,1442x45,32x45,1442x45,32x45,1442x45,32x45,140424444324444140002440032000414000400002200004x09,32x014,22x014,32x014,22x014,32x07,"
},
Block: {
normal: {
normal: "p[0,2,9]0x114,01x214,1121x210,1211x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,1121x210,1211x214,10x114,0",
unused: {
normal: "p[0,2,6,9]0x314,03x214,1321x210,12132222x35,x25,132223311133222213222331223312221322233122331222132222112333122213x26,3311122213x26,331x25,13x27,11x25,13x26,33x26,13x26,331x25,1321x25,112221213x214,x117,",
two: "p[0,2,9]0x214,0x215,1221x210,121x215,1x26,111x26,1x26,1222212221x26,1222212221x25,11222212221x29,1112221x29,1x25,1x28,11x25,1x215,1x29,1x25,1221x25,11222121x215,x117,",
three: "p[0,2,9,11]0x214,02x314,1231x310,13123333x25,x35,123332211122333312333221332213331233322133221333123333113222133312x36,2211133312x36,221x35,12x37,11x35,12x36,22x36,12x36,221x35,1231x35,113331312x314,x117,"
}
},
Underworld: {
normal: "p[0,9,16]0x214,02x114,2212x110,2122x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,22x114,2212x110,2122x114,20x214,0",
unused: {
normal: "p[0,6,9,16]0x214,02x114,3213x110,31321111x25,x15,321112233322111132111223112231113211122311223111321111331222311132x16,2233311132x16,223x15,32x17,33x15,32x16,22x16,32x16,223x15,3213x15,331113132x114,x317,",
two: "p[0,9,16]0x114,0x115,2112x110,212x115,2x16,222x16,2x16,2111121112x16,2111121112x15,22111121112x19,2221112x19,2x15,2x18,22x15,2x115,2x19,2x15,2112x15,22111212x115,x217,",
three: "p[0,9,11,16]0x114,01x214,3123x210,32312222x15,x25,312221133311222231222113221132223122211322113222312222332111322231x26,1133322231x26,113x25,31x27,33x25,31x26,11x26,31x26,113x25,3123x25,332223231x214,x317,"
}
},
Castle: ["same", ["solids", "Block", "Underworld"]]
},
Brick: {
normal: {
normal: "p[2,5,9]x116,x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,x27,0x27,0x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,",
used: ["same", ["solids", "Block", "Overworld", "used"]]
},
Underworld: {
normal: "p[2,16]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,",
used: ["same", ["solids", "Block", "Overworld", "used"]]
},
Castle: ["filter", ["solids", "Brick", "Overworld"], filters.Castle],
Alt2: ["filter", ["solids", "Brick", "Overworld"], filters.Alt2]
},
BridgeBase: "p[0,2,5,8]111000112221012222x35,222x35,222x35,222x35,22221012211100011",
Cannon: ["multiple", "vertical", {
top: "p[0,2,5,9]222x010,2222111x210,11222x110,x26,1x213,111x210,112x112,2112x112,2112x112,2112x15,22221112112111121111311211211121122113121121112121131312112111212113131211211121133113221122212x16,3122221102x16,302110002x18,3x06,2x18,3x05,2x110,300002x110,3000211x38,1130021333222233313021133x26,3313021133232232331132113233223323113211323322332311321132332233231132113x28,3113211333233233311321133322223331132111x38,11132x114,3",
middle: "p[2,5,9]1x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,21x014,2"
}],
CastleAxe: "p[0,2,4,6,8]003x010,3000323300420033130032333322333313032x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,1332x35,42x35,130323333423333130002330042000313000300002200003x09,42x014,22x014,42x014,22x014,42x07,",
CastleBlock: "p[0,4,9]0x114,01x214,1121x210,1211x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,11x214,1121x210,1211x214,10x114,0",
CastleBridge: "p[1,2,4,8]10001000100010001000100010001000122212223222322232223222322232223222322232223222322232221222122213331333133313331333133313331333",
CastleChain: "p[0,1,3]x014,1x013,1x014,22x011,12x013,22x011,12x012,102x012,22x011,12x012,102x012,22x011,12x013,22x011,12x012,102x012,22x013,",
CastleStone: {
normal: "p[1,2,3,4]0031x06,31000022310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,3102223331x37,13333x116,x06,31x06,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,31x37,1x37,x117,",
Underwater: "p[2,12,14,20]1103x16,03111122031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,0312220003x07,30000x316,x16,03x16,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,03x07,3x07,x317,"
},
Cloud: "p[0,1,2]000x210,x05,2x110,20002x112,2002x112,2002x112,202x114,22x15,2112x15,22x15,2112x15,22x15,2112x15,22x114,2212x110,2120211121111211120021111222211112002x112,2000211112211112x05,2222002222000",
Coral: "p[0,7,8]0000100012x05,110001000120000121001000112000120110100012000020001010011211112000101001x26,100021100120000221000221112x06,2x05,22120001x05,1000012001x06,1011012001000100101001120122010001100012120022000021001122000020000211112x011,22212x06,",
DeadGoomba: {
normal: "p[0,5,9,15]x06,2222x09,x210,000022333222233322022111133331111x218,000x110,x07,x18,x05,x35,0000x35,0",
Underworld: "p[0,15,16,18]x06,2222x09,x210,000022111222211122022333311113333x218,000x310,x07,x38,x05,x15,0000x15,0",
Castle: ["filter", ["solids", "DeadGoomba", "normal"], filters.Castle]
},
Firework: {
normal: "p[0,6,8]x070,2002x010,20222202x09,221122x09,22111122x08,22111122x09,221122x09,20222202x010,2002x070,",
n2: "p[0,1,6,8]x020,3x06,3x09,303303x09,x38,x06,303232232303x05,3321221233x06,3221111223x05,3332111123330000333211112333x05,3221111223x06,3321221233x05,303232232303x06,x38,x09,303303x09,3x06,3x020,",
n3: "p[0,1,6,8]00030033330030000300x38,003000x35,22x35,00303323233232330300323x26,32300033321211212333033232x16,232x35,22x16,22x36,22x16,22x35,232x16,23233033321211212333000323x26,32300303323233232330300x35,22x35,000300x38,00300003003333003000"
},
Flag: {
normal: "p[0,1,14]x116,0x18,x25,1100x16,22121221000x15,211211210000111121222121x05,11122212221x06,11x27,1x07,111222111x08,x18,x09,x17,x010,x16,x011,x15,x012,1111x013,111x014,11x015,1",
Alt: "p[0,5,16]x116,0x18,x25,1100x16,22121221000x15,211211210000111121222121x05,11122212221x06,11x27,1x07,111222111x08,x18,x09,x17,x010,x16,x011,x15,x012,1111x013,111x014,11x015,1",
Alt2: ["same", ["solids", "Flag", "Alt"]]
},
FlagPole: {
normal: "p[13]x0288,",
Alt: "p[1]x0288,",
Alt2: ["same", ["solids", "FlagPole", "Alt"]]
},
FlagTop: {
normal: "p[0,2,13,14]001111000123331012x35,112x35,11x36,11x36,10133331000111100",
Alt: "p[0,1,3,4]002222000213332021x35,221x35,22x36,22x36,20233332000222200",
Alt2: ["same", ["solids", "Flag", "Alt"]]
},
Floor: {
normal: "p[2,5,9]2x18,02111121x28,01222201x28,01222201x28,01222201x28,01022201x28,02000021x28,0x15,01x28,01222201x28,01222201x28,012222000x26,01x25,01100222201x25,0121100001x26,0122211101x26,01x26,01x25,002x06,21x06,2",
Underworld: "p[2,16,18]1x28,01222212x18,02111102x18,02111102x18,02111102x18,02011102x18,01000012x18,0x25,02x18,02111102x18,02111102x18,021111000x16,02x15,02200111102x15,0212200002x16,0211122202x16,02x16,02x15,001x06,12x06,1",
Underwater: "p[2,12,14]22x112,0221111x29,0011122111222211100122x15,2212221202112222011x25,0211222201x26,021x26,0x25,0221x26,0022201201x26,0000101011112222000100101222122220012011x25,02200122011x25,0200012001x25,001111220012220000122220022x06,2x07,2",
Castle: ["same", ["solids", "Stone", "Castle"]],
Alt2: ["filter", ["solids", "Floor", "Overworld"], filters.Alt2]
},
Peach: "p[0,1,2,6,8]x019,303303x010,x36,x09,x48,x07,x410,x07,4443234444x07,433233434x06,x37,434x07,x38,44x05,3444x35,44x05,34433334444x06,x36,4444x06,4413341444x05,44133111144x05,431111331440000x39,144x05,x37,1444x07,44111144x07,x110,x05,x112,0000x112,0001111x46,111100x414,00x45,1111x45,0",
Pipe: {
normal: ["multiple", "vertical", {
top: "p[0,2,13,14]x133,x230,11x35,x26,x319,1122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,232322x133,00x128,00",
middle: "p[0,2,13,14]00122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,2322100"
}],
Castle: {
normal: ["multiple", "vertical", {
top: "p[0,1,3,4]x333,x130,33x25,x16,x219,3311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,1212113311122x16,211x211,121113311122x16,211x210,121211x333,00x328,00",
middle: "p[0,1,3,4]00311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,121130000311122x15,211x28,1211130000311122x15,211x29,1211300"
}],
Underwater: ["multiple", "vertical", {
top: "p[0,5,9,17]x133,x230,11x35,x26,x319,1122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,2323221122233x26,322x311,232221122233x26,322x310,232322x133,00x128,00",
middle: "p[5,9,17,20]33011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,121103333011122x15,211x28,1211103333011122x15,211x29,1211033"
}]
},
Alt: ["same", ["solids", "Pipe", "Castle"]],
Alt2: ["same", ["solids", "Pipe", "Castle"]]
},
PipeSide: {
normal: "p[0,2,13,14]x115,x024,1x213,x122,0001x213,11x220,1001x213,11x220,1001x213,11x220,1001x313,11x221,101x313,11x321,101x213,11x321,101x213,11x221,101x213,11x221,101x213,11x222,11x213,11x222,11x313,11x222,11x213,11x322,11x213,11x222,11x213,11x222,11x213,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x322,11x313,11x321,101x313,11x321,101x313,11x321,101x313,11323232323232323232323101323232323232311232323232323232323232101232323232323211323232323232323232321001323232323232311x220,1001x213,11x220,1001x213,x122,000x115,x024,",
small: "p[0,2,13,14]x115,01x213,111x213,111x213,111x213,111x313,111x313,111x213,111x213,111x213,111x213,111x213,111x313,111x213,111x213,111x213,111x213,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111x313,111323232323232311123232323232321113232323232323111x213,111x213,x117,0"
},
PipeVertical: {
normal: "p[0,2,13,14]012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210012232x310,223x25,332222100122232x39,223x25,33222210",
Castle: {
normal: "p[0,1,3,4]00211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,131120000211133x15,311x38,1311120000211133x15,311x39,1311200",
Underwater: "p[0,7,8,17]00122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,232210000122233x25,322x38,2322210000122233x25,322x39,2322100"
}
},
Platform: {
normal: "p[0,1,6,9]x18,x38,220000222x05,322x05,32223333x210,x38,",
Sky: "p[0,1,6]001111000x15,2012x15,212x15,212211112112211220111122000222200"
},
Scale: {
normal: ["multiple", "horizontal", {
left: "p[0,2,5,9]000x27,00x28,0222333000022x35,00223331333022331113302233313330220x35,00220033300022x08,",
middle: "p[0,5]x120,x080,",
right: "p[0,2,5,9]x27,000x28,x05,333222000x35,22003331333220331113322033313332200x35,0220003330022x08,22"
}],
Alt: ["multiple", "horizontal", {
left: "p[0,1,2,9]000x17,00x18,0111333000011x35,00113332333011332223301133323330110x35,00110033300011x08,",
middle: "p[0,1]x120,x080,",
right: "p[0,1,2,9]x17,000x18,x05,333111000x35,11003332333110332223311033323331100x35,0110003330011x08,11"
}]
},
Springboard: {
normal: ["multiple", "vertical", {
top: "p[8]x032,",
topheight: 2,
middle: "p[0,1,6]x05,110011x010,210012x010,200002x010,200002x09,2x06,2x08,2x06,2x08,2x06,2x07,2x08,2x05,12x08,21000011x08,11000011x08,11000012x08,21x05,2x08,2x07,2x06,2x08,2x06,2x08,2x06,2x09,200002x010,200002x010,210012x010,110011x05,",
bottom: "p[2,8,9]x132,x27,0x27,0x27,0x27,x017,2220x27,0x27,0x27,0x27,0x27,02222x016,",
bottomheight: 9
}],
alt: ["multiple", "vertical", {
top: "p[8]x032,",
topheight: 2,
middle: "p[0,1,6]x05,110011x010,210012x010,200002x010,200002x09,2x06,2x08,2x06,2x08,2x06,2x07,2x08,2x05,12x08,21000011x08,11000011x08,11000012x08,21x05,2x08,2x07,2x06,2x08,2x06,2x08,2x06,2x09,200002x010,200002x010,210012x010,110011x05,",
bottom: "p[3,4,8]x232,x07,1x07,1x07,1x07,x117,0001x07,1x07,1x07,1x07,1x07,10000x116,",
bottomheight: 9
}]
},
Stone: {
normal: "p[2,5,9]2x114,012x112,00112x110,0001112x18,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,00001111x28,0000111x09,200011x011,2001x013,2x016,2",
Underwater: ["same", ["solids", "Floor", "Underwater"]],
Underworld: ["filter", ["solids", "Stone", "Overworld"], filters.Underworld],
Castle: {
normal: "p[1,2,3,4]0031x06,31000022310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,3102223331x37,13333x116,x06,31x06,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,310x25,31x37,1x37,x117,",
Underwater: "p[2,3,14,20]1103x16,03111122031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,0312220003x07,30000x316,x16,03x16,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,031x25,03x07,3x07,x317,"
},
Sky: "p[0,1,2]000x210,x05,2x110,20002x112,2002x112,2002x112,202x114,22x15,2112x15,22x15,2112x15,22x15,2112x15,22x114,2212x110,2120211121111211120021111222211112002x112,2000211112211112x05,2222002222000"
},
Toad: "p[0,1,2,6,8]x06,1111x010,x18,x06,144411114441000114441441444110011441444414411044111144441111x45,1114444111x46,1111441111x46,x110,x45,1133233233114401143323323341100300x38,00303330333223330x37,443333443333003x410,300004444333344440000444x36,4440000444x36,444x05,x110,x05,x112,000444x18,444041444x16,4441x47,1111x412,1111x46,",
ShroomTop: ["multiple", "horizontal", {
left: "p[0,2,6,8]000x113,001x36,x27,01x37,x27,01x37,x27,1x38,x27,1x37,x28,1x37,222333221x36,222x35,21x35,222x37,1x28,x37,1x28,x37,1x29,x35,21x210,333221x215,011x213,000x113,",
middle: "p[2,6,8]x016,1x28,x18,x28,x19,x26,x132,x25,x110,x27,x19,x27,x18,x29,x17,x29,x17,x29,x17,x29,x18,x27,x19,x27,x110,x25,111x016,",
right: "p[0,2,6,8]x113,000x38,x25,100x38,x26,10x38,x26,10x38,222333212x36,222x35,1223333222x36,1x29,x36,1x29,x36,1x210,x35,1x211,33321x215,1x215,1x215,1x214,x117,0"
}],
TreeTop: {
normal: ["multiple", "horizontal", {
left: "p[0,2,13]00x114,011x213,01x214,11x214,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x26,1x27,1012222101x25,10001111000x15,00",
middle: "p[2,8,13]x016,x2199,0x27,00x25,010x25,011x05,111x05,11",
right: "p[0,2,13]x114,00x213,110x214,10x214,11x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,1x215,11x27,1x26,101x25,10122221000x15,000111100"
}],
Alt: ["multiple", "horizontal", {
left: "p[0,1,4]00x214,022x113,02x114,22x114,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x16,2x17,2021111202x15,20002222000x25,00",
middle: "p[1,3,4]x216,x0199,2x07,22x05,212x05,211x25,111x25,11",
right: "p[0,1,4]x213,000x113,200x114,20x114,20x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,2x115,22x17,2x16,202x15,20211112000x25,000222200"
}],
Alt2: ["same", ["solids", "TreeTop", "Alt"]]
},
WaterBlock: "20"
},
scenery: {
BrickHalf: {
normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,",
Alt2: ["filter", ["scenery", "BrickHalf", "normal"], filters.Alt2]
},
BrickPlain: {
normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x17,0x17,0",
Alt2: ["filter", ["scenery", "BrickPlain", "normal"], filters.Alt2]
},
BridgeBase: "p[0,2,5,9]111000112221012222x35,222x35,222x35,222x35,22221012211100011",
Bush1: "p[0,2,13,14]x014,1111x027,122221x024,11x26,1x022,1x28,101x020,1x29,121x019,1x26,3x25,1x017,122233222322221x016,12223x210,1x013,111x216,1001x08,1x219,10121x06,1x221,1221x06,x225,1010011x226,1211x230,11x230,101x228,10",
Bush2: "p[0,2,13,14]x014,1111x012,1111x027,122221x010,122221x024,11x26,1x07,11x26,1x022,1x28,10100001x28,101x020,1x29,1210001x29,121x019,1x26,3x25,1001x26,3x25,1x017,1222332223222210122233222322221x016,12223x210,112223x210,1x013,111x232,1001x08,1x235,10121x06,1x237,1221x06,x241,1010011x242,1211x246,11x246,101x244,10",
Bush3: "p[0,2,13,14]x014,1111x012,1111x012,1111x027,122221x010,122221x010,122221x024,11x26,1x07,11x26,1x07,11x26,1x022,1x28,10100001x28,10100001x28,101x020,1x29,1210001x29,1210001x29,121x019,1x26,3x25,1001x26,3x25,1001x26,3x25,1x017,12223322232222101222332223222210122233222322221x016,12223x210,112223x210,112223x210,1x013,111x248,1001x08,1x251,10121x06,1x253,1221x06,x257,1010011x258,1211x262,11x262,101x260,10",
CastleBridge: "p[1,2,4,9]10001000100010001000100010001000122212223222322232223222322232223222322232223222322232221222122213331333133313331333133313331333",
CastleChain: "p[0,1,3]x014,1x013,1x014,22x011,12x013,22x011,12x012,102x012,22x011,12x012,102x012,22x011,12x013,22x011,12x012,102x012,22x013,",
CastleDoor: {
normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,x017,1110x17,0x17,0x17,0x17,0x17,01111x016,x15,x06,11110111x010,11011x012,1x017,1x014,11x014,1x0416,",
Alt2: ["filter", ["scenery", "CastleDoor", "normal"], filters.Alt2]
},
CastleRailing: {
normal: "p[0,2,5,9]2222x07,x25,3332x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,23333111x29,1111",
Alt2: ["filter", ["scenery", "CastleRailing", "normal"], filters.Alt2]
},
CastleRailingFilled: {
normal: "p[2,5,9]11112220222x15,222122202221x27,122202221x27,1x07,1x27,1x27,1x27,1x27,1x27,1x27,12222000x19,0000",
Alt2: ["filter", ["scenery", "CastleRailingFilled", "normal"], filters.Alt2]
},
CastleTop: {
normal: "p[2,9]x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,x025,1110x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,01111x024,x17,x09,x17,0x17,x09,x17,0x17,x09,x17,x025,11101111x08,1110x17,01111x08,1110x17,01111x08,11101111x024,x17,x09,x17,0x17,x09,x17,0x17,x09,x17,x025,11101111x08,1110x17,01111x08,1110x17,01111x08,11101111x024,",
Alt2: ["filter", ["scenery", "CastleTop", "normal"], filters.Alt2]
},
CastleWall: {
normal: "p[0,2,5,9]2222x07,x25,3332x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,2x37,2x07,23333111x29,1111x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,x37,1x37,1x37,1x37,1x37,1x37,x117,3331x37,1x37,1x37,1x37,1x37,13333x116,",
Alt2: ["filter", ["scenery", "CastleRailingFilled", "normal"], filters.Alt2]
},
Cloud1: {
normal: "p[0,1,2,19]x014,2222x027,211112x024,22x16,2x022,2x18,202x020,2x19,212x019,2x16,3x15,2x017,211133111311112x016,21113x110,2x013,222x116,2002x08,2x119,20212x06,2x121,2112x06,x125,2020022x126,2122x130,22x130,202x128,20002113x111,3x111,2x05,2113113x16,3x113,2x05,2113333111333311113x18,200002x15,x36,1x35,x19,x06,2221111331111333x18,22x09,2x16,2x18,21122x012,221112022111122022x016,22200002222x010,",
Alt2: ["filter", ["scenery", "Cloud1", "normal"], filters.Alt2]
},
Cloud2: {
normal: "p[0,1,2,19]x014,2222x012,2222x027,211112x010,211112x024,22x16,2x07,22x16,2x022,2x18,20200002x18,202x020,2x19,2120002x19,212x019,2x16,3x15,2002x16,3x15,2x017,2111331113111120211133111311112x016,21113x110,221113x110,2x013,222x132,2002x08,2x135,20212x06,2x137,2112x06,x141,2020022x142,2122x146,22x146,202x144,20002113x111,3x115,3x111,2x05,2113113x16,3x18,3x16,3x113,2x05,21133331113333111131333111333311113x18,200002x15,x36,1x35,1111x36,1x35,x19,x06,2221111331111333x17,331111333x18,22x09,2x16,2x18,2x16,2x18,21122x012,2211120221111220221112022111122022x016,22200002222x05,22200002222x010,",
Alt2: ["filter", ["scenery", "Cloud2", "normal"], filters.Alt2]
},
Cloud3: {
normal: "p[0,1,2,19]x014,2222x012,2222x012,2222x027,211112x010,211112x010,211112x024,22x16,2x07,22x16,2x07,22x16,2x022,2x18,20200002x18,20200002x18,202x020,2x19,2120002x19,2120002x19,212x019,2x16,3x15,2002x16,3x15,2002x16,3x15,2x017,21113311131111202111331113111120211133111311112x016,21113x110,221113x110,221113x110,2x013,222x148,2002x08,2x151,20212x06,2x153,2112x06,x157,2020022x158,2122x162,22x162,202x160,20002113x111,3x115,3x115,3x111,2x05,2113113x16,3x18,3x16,3x18,3x16,3x113,2x05,211333311133331111313331113333111131333111333311113x18,200002x15,x36,1x35,1111x36,1x35,1111x36,1x35,x19,x06,2221111331111333x17,331111333x17,331111333x18,22x09,2x16,2x18,2x16,2x18,2x16,2x18,21122x012,22111202211112202211120221111220221112022111122022x016,22200002222x05,22200002222x05,22200002222x010,",
Alt2: ["filter", ["scenery", "Cloud3", "normal"], filters.Alt2]
},
Fence: "p[0,2,5,9]000023222331x08,2322333100003322232233312222333323223331333311112322333x15,000023223331x08,23223331x08,23232331x08,23232331x08,2323233100003322232323312222333323232331333311112322233x15,000023222331x08,23222331x08,232223310000",
HillLarge: "p[0,2,14]x037,x16,x071,111x26,111x066,11x212,11x063,1x213,1221x061,1x213,111221x059,1x214,1112221x057,1x215,11122221x055,1x213,112111x25,1x053,1x214,11221x27,1x051,1x215,11x211,1x049,1x216,11x212,1x047,1x232,1x045,1x234,1x043,1x236,1x041,1x238,1x039,1x240,1x037,1x242,1x035,1x244,1x033,1x246,1x031,1x213,1x223,1x210,1x029,1x213,111x221,111x210,1x027,1x214,111x221,111x211,1x025,1x215,111x221,111x212,1x023,1x213,112111x218,112111x213,1x021,1x214,11221x219,11221x215,1x019,1x215,11x222,11x219,1x017,1x216,11x222,11x220,1x015,1x264,1x013,1x266,1x011,1x268,1x09,1x270,1x07,1x272,1x05,1x274,10001x276,101x278,1",
HillSmall: "p[0,2,14]x021,x16,x039,111x26,111x034,11x212,11x031,1x213,1221x029,1x213,111221x027,1x214,1112221x025,1x215,11122221x023,1x213,112111x25,1x021,1x214,11221x27,1x019,1x215,11x211,1x017,1x216,11x212,1x015,1x232,1x013,1x234,1x011,1x236,1x09,1x238,1x07,1x240,1x05,1x242,10001x244,101x246,1",
Pirhana: ["same", ["characters", "Pirhana"]],
pirhana: ["same", ["characters", "Pirhana"]],
PlantLarge: {
normal: "p[0,2,5,13]x06,1111x010,11333311x07,1x38,1x05,1x310,10001x312,1001x312,101x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,11x314,101x312,1001x312,1001x312,10001x310,1000011x38,11x05,1113333111x07,x18,x09,x17,x08,1x26,1x08,12222121x08,12222121x08,12222121x08,12222121x08,11222211x09,121121x09,12122121x08,1x26,1x08,12222121x08,12222121x08,12222121x08,12222121x08,11222211x09,121121x09,121221210000",
Alt: "p[0,1,2,3,5]x06,3333x010,33111133x07,3x18,3x05,3x110,30003x112,3003x112,303x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,33x114,303x112,3003x112,3003x112,30003x110,3000033x18,33x05,3331111333x07,x38,x09,x37,x08,2x46,2x08,24444242x08,24444242x08,24444242x08,24444242x08,22444422x09,242242x09,24244242x08,2x46,2x08,24444242x08,24444242x08,24444242x08,24444242x08,22444422x09,242242x09,242442420000",
Alt2: ["same", ["solids", "PlantLarge", "Alt"]]
},
PlantSmall: {
normal: "p[0,2,5,13]x05,1111x08,11333311x05,1x38,10001x310,101x312,11x312,11x312,11x312,11x312,101x310,10011x38,110001113333111x05,x18,x07,x17,x06,1x26,1x06,12222121x06,12222121x06,12222121x06,12222121x06,11222211x07,121121x07,12122121x06,1x26,1x06,12222121x06,12222121x06,12222121x06,12222121x06,11222211x07,121121x07,12122121000",
Alt: "p[0,1,2,3,5]x05,3333x08,33111133x05,3x18,30003x110,303x112,33x112,33x112,33x112,33x112,303x110,30033x18,330003331111333x05,x38,x07,x37,x06,2x46,2x06,24444242x06,24444242x06,24444242x06,24444242x06,22444422x07,242242x07,24244242x06,2x46,2x06,24444242x06,24444242x06,24444242x06,24444242x06,22444422x07,242242x07,24244242000",
Alt2: ["same", ["solids", "PlantSmall", "Alt"]]
},
Railing: {
normal: "p[0,2,13]2x06,221x05,12010001220100012200111022x06,22x06,22x06,2",
Night: "p[0,1,3]1x06,112x05,21020002110200021100222011x06,11x06,11x06,1"
},
ShroomTrunk: ["multiple", "vertical", {
top: "p[2,5,9]0x114,00x114,00x114,00x114,00x114,00111121111211110021121211212112001221112211122100x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,0",
middle: "p[2,5]0x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,00x114,0"
}],
String: "x056,",
TreeTrunk: {
normal: "p[2,9]x120,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x140,0x17,0x17,0x17,0x17,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x120,",
Underworld: ["filter", ["scenery", "TreeTrunk", "normal"], filters.Underworld],
Alt2: ["filter", ["scenery", "TreeTrunk", "normal"], filters.Alt2]
},
Water: {
normal: "p[0,1,17]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",
Underwater: "p[1,17,20]x212,0x26,010222201102200111022x16,0010x16,010111101101100x19,",
Night: "p[2,1,19]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",
Castle: {
normal: "p[0,1,8]x028,1x06,121000012210011222100x26,1121x26,1212222122122112",
Underwater: "p[1,17,20]x212,0x26,010222201102200111022x16,0010x16,010111101101100x19,"
}
},
WaterFill: {
normal: {
normal: "p[17]x088,",
Night: "p[19]x088,"
},
Castle: "p[8]x088,"
}
}
},
cache: {},
posts: []
}, library.filters = filters, delete window.filters, library.sprites = libraryParse(library.rawsprites), libraryPosts()
}
function libraryParse(e) {
var t, n, x = {};
for (n in e) switch ((t = e[n]).constructor) {
case String:
x[n] = spriteGetArray(spriteExpand(spriteUnravel(t)));
break;
case Array:
library.posts.push({
caller: x,
name: n,
command: e[n]
});
break;
case Object:
x[n] = libraryParse(t)
}
return x
}
function libraryPosts() {
var e, t, n, x, r, i = library.posts;
for (r in i) t = (e = i[r]).caller, n = e.name, x = e.command, t[n] = evaluatePost(t, x, r)
}
function evaluatePost(e, t, n) {
switch (t[0]) {
case "same":
return followPath(library.sprites, t[1], 0);
case "filter":
return applyLibraryFilter(followPath(library.rawsprites, t[1], 0), t[2], n);
case "multiple":
return evaluatePostMultiple(t)
}
}
function applyLibraryFilter(e, t) {
switch (t[0]) {
case "palette":
return e.constructor == String ? spriteGetArray(spriteExpand(applyPaletteFilter(spriteUnravel(e), t[1]))) : applyPaletteFilterRecursive(e, t[1])
}
}
function applyPaletteFilterRecursive(e, t) {
var n, x, r = {};
for (x in e) switch ((n = e[x]).constructor) {
case String:
r[x] = spriteGetArray(spriteExpand(applyPaletteFilter(spriteUnravel(n), t)));
break;
case Object:
r[x] = applyPaletteFilterRecursive(n, t)
}
return r
}
function applyPaletteFilter(e, t) {
var n, x, r, i = "";
for (x = 0, r = e.length; x < r; x += digitsize) i += t[n = e.substr(x, digitsize)] || n;
return i
}
function evaluatePostMultiple(e) {
var t, n, x = e[1],
r = e[2],
i = new SpriteMultiple(x);
for (n in r) t = r[n], i[n] = "string" == typeof t ? spriteGetArray(spriteExpand(spriteUnravel(t))) : t;
return i
}
function SpriteMultiple(e) {
this.type = e, this.multiple = !0
}
function getDigitSize(e) {
return Number(String(e.length).length)
}
function startLoadingMaps() {
"file:" != window.location.protocol && passivelyLoadMap([1, 2], new XMLHttpRequest)
}
function passivelyLoadMap(e, t) {
if (!(!e || e[0] > 8 || e[1] <= 0)) {
var n = "Maps/World" + e[0] + e[1] + ".js";
t.open("GET", n, !0), mlog("Maps", "Requesting:", n), t.send(), t.onreadystatechange = function() {
if (4 == t.readyState) {
if (200 == t.status) mapfuncs[e[0]][e[1]] = Function(t.responseText), window.parentwindow && parentwindow.onMapLoad && (parentwindow.onMapLoad(e[0], e[1]), setTimeout((function() {
parentwindow.onMapLoad(e[0], e[1])
}), 2100)), mlog("Maps", " Loaded: Maps/World" + e[0] + e[1] + ".js");
else if (404 != t.status) return;
setTimeout((function() {
passivelyLoadMap(setNextLevelArr(e), t)
}), 7)
}
}
}
}
function setNextLevelArr(e) {
return 4 == e[1]++ && (++e[0], e[1] = 1), e
}
function resetMaps() {
var e;
window.currentmap = [1, 1], window.defaultsetting = {
setting: "Overworld"
}, window.mapfuncs = new Array(9);
for (var t, n = 1; n <= 9; ++n)
for (t = (e = mapfuncs[n] = [0, 0, 0, 0, 0]).length; t >= 0; --t) e[t] = window["World" + n + t];
mapfuncs.Random = {
Overworld: WorldRandomOverworld,
Underworld: WorldRandomUnderworld,
Underwater: WorldRandomUnderwater,
Bridge: WorldRandomBridge,
Sky: WorldRandomSky,
Castle: WorldRandomCastle
}, mapfuncs.Special = {
Blank: BlankMap
}, startLoadingMaps()
}
function Map() {
this.underwater = this.current_character = this.current_solid = this.current_scenery = this.xloc = 0, this.canscroll = !0, this.floor = 104, this.time = 400, this.curloc = -1, this.gravity = gravity, this.maxyvel = 1.75 * unitsize, this.maxyvelinv = -2.1 * this.maxyvel
}
function Area(e, t) {
this.creation = t || function() {}, this.precharacters = [], this.presolids = [], this.prescenery = [], this.floor = 140, this.width = 0, this.underwater = !1, setAreaSetting(this, e || "")
}
function setAreaSetting(e, t, n) {
map.shifting = !0, 1 == arguments.length && (t = arguments[0] || "Overworld", e = map.area), e.setting = e.background = t, e.theme = t.split(" ")[0], e.fillStyle = getAreaFillStyle(e.setting), -1 != e.fillStyle.indexOf("Underwater") ? goUnderWater() : goOntoLand(), n && AudioPlayer.playTheme(), gameon && clearAllSprites(), map.shifting = !1
}
function Location(e, t, n) {
this.area = e, this.xloc = n || 0, this.yloc = this.floor = 0, this.entry = 1 == t ? entryPlain : t || entryNormal
}
function PreThing(e, t, n) {
this.xloc = e, this.yloc = t, this.type = n;
var x = arrayMake(arguments),
r = new Thing;
x[2] = n, x = x.splice(2), Thing.apply(r, x), this.object = r
}
function setMap(e, t) {
if (gameon) {
!window.canedit && window.editing && editorClose(!0), removeRandomDisplays(), e instanceof Array && (t = e[1], e = e[0]);
var n = e ? [e, t] : window.currentmap,
x = new Map,
r = mapfuncs[n[0]];
r ? (n.func = r = r[n[1]], r ? (window.map = x, window.currentmap = n, r(x), x.areanum = x.curloc = 0, window.area = x.area = x.areas[0], window.player && player.power && storePlayerStats(), window.data && (data.scoreold = data.score.amount), shiftToLocation(0)) : log("No such map exists (yet?):", r)) : log("No such map section exists (yet?):", r)
}
}
function setMapRandom(e) {
gameon && (resetSeed(), "string" == typeof e ? e = ["Random", e] : e || (e = ["Random", "Overworld"]), setMap(e[0], e[1]), data.traveledold = data.traveled, map.sincechange = map.num_random_sections = 0, map.entrancetype = e[2], map.random = !0, "Sky" == map.randname && (map.exitloc = ["Random", "Overworld", "Down"]))
}
function shiftToLocation(e) {
if (map.random && "number" != typeof e) return setMapRandom(e);
"number" == typeof e && (e = map.locs[e]), pause(), resetGameState(), resetGameScreenPosition(), resetQuadrants(), map.areanum = e.area, window.area = map.area = map.areas[map.areanum], setAreaPreCreation(area), area.creation(), setAreaPostCreation(area), spawnMap(), player = placePlayer(), scrollPlayer(e.xloc * unitsize), locMovePreparations(player), unpause(), e.entry(player, e.entrything), TimeHandler.addEvent(AudioPlayer.playTheme, 2), TimeHandler.addEventInterval(checkTexts, 117, 1 / 0)
}
function setAreaPreCreation(e) {
window.events = [], TimeHandler.clearAllEvents(), window.characters = [], window.solids = [], window.scenery = [], clearTexts(), e.precharacters = [], e.presolids = [], e.prescenery = [], map.current_solid = map.current_character = map.current_scenery = map.shifting = 0, map.canscroll = !0, data.time.amount = map.time, data.world.amount = currentmap[0] + "-" + currentmap[1], setDataDisplay(), startDataTime(), map.random && (data.world.amount = "Random Map", data.world.element.innerHTML = "WORLD<br>Random Map")
}
function clearTexts() {
if (window.texts)
for (var e = texts.length - 1; e >= 0; --e) texts[e] && removeChildSafe(texts[e], body);
window.texts = []
}
function setAreaPostCreation() {
if (map.current_character = map.current_solid = map.current_scenery = 0, area.width = max(area.width, gamescreen.width), map.underwater = map.area.underwater, map.jumpmod = 1.056 + 3.5 * map.underwater, map.has_lakitu = !1, TimeHandler.addEvent(setMapGravity, 1), area.underwater && (area.presolids.push(new PreThing(0, 0, WaterBlock, area.width)), map.random || area.presolids.push(new PreThing(0, 16, Sprite, "Water", [area.width / 3, 1]))), area.presolids.sort(prethingsorter), area.precharacters.sort(prethingsorter), area.prescenery.sort(prethingsorter), area.sections && area.sections[0]) setBStretch(), area.sections.current = 0, area.sections[0](area.sections.start);
else if (!map.random && "Sky" != area.setting) {
var e = new PreThing(area.width, 0, ScrollBlocker);
area.presolids.push(e)
}
area.fillStyle = getAreaFillStyle(area.setting)
}
function getAreaFillStyle(e) {
return stringHas(e, "Underworld") || stringHas(e, "Castle") || stringHas(e, "Night") ? stringHas(e, "Underwater") ? "#2038ec" : "black" : stringHas(e, "Underwater") ? "#2038ec" : "#5c94fc"
}
function prethingsorter(e, t) {
return e.xloc == t.xloc ? t.yloc - e.yloc : e.xloc - t.xloc
}
function setLocationGeneration(e) {
map.curloc = e, map.refx = map.locs[map.curloc].xloc, map.refy = map.locs[map.curloc].yloc + map.floor, map.areanum = map.locs[map.curloc].area
}
function spawnMap() {
var e, t, n, x, r, i = map.area,
a = QuadsKeeper.getOutDifference(),
o = gamescreen.right + a,
l = o + (2 * QuadsKeeper.getQuadWidth() + a);
for (t = (e = i.precharacters).length, r = map.current_character; t > r && o >= (n = e[r]).xloc * unitsize;) addThing(x = n.object, n.xloc * unitsize - gamescreen.left, n.yloc * unitsize), x.placenum = r, ++r;
for (map.current_character = r, t = (e = i.presolids).length, r = map.current_solid; t > r && l >= (n = e[r]).xloc * unitsize;) addThing(x = n.object, n.xloc * unitsize - gamescreen.left, n.yloc * unitsize), x.placenum = r, ++r;
for (map.current_solid = r, t = (e = i.prescenery).length, r = map.current_scenery; t > r && l >= (n = e[r]).xloc * unitsize;) addThing(x = n.object, n.xloc * unitsize - gamescreen.left, n.yloc * unitsize), x.placenum = r, ++r;
map.current_scenery = r
}
function goToTransport(e) {
e instanceof Array ? (map.ending = !0, storePlayerStats(), pause(), map.random ? setMapRandom(e) : setMap(e)) : shiftToLocation(map.locs[e]), is_mobile && applyNewJs()
}
function entryPlain(e) {
setLeft(e, unitsizet16), setBottom(e, map.floor * unitsize), e.nocollide = e.piping = !1, e.placed = !0
}
function entryNormal(e) {
setLeft(e, unitsizet16), setTop(e, unitsizet16), e.nocollide = e.piping = !1, e.placed = !0
}
function entryBlank(e) {
setLeft(e, unitsizet16), setBottom(e, map.floor * unitsize), e.nocollide = e.piping = e.movement = !1, e.placed = e.nofall = e.nocollide = notime = nokeys = !0, thingStoreVelocity(e), clearDataDisplay()
}
function entryRandom(e) {
switch (data.time.amount = 0, data.time.dir = 1, updateDataElement(data.time), map.startwidth ? map.nofloor || pushPreFloor(0, 0, map.startwidth) : map.startwidth = 0, map.firstRandomThings(map), map.randtype(8 * (map.startwidth + 1)), entryPlain(e), addDistanceCounter(), addSeedDisplay(), map.entrancetype) {
case "Down":
entryNormal(player);
break;
case "Up":
locMovePreparations(player), exitPipeVert(player, addThing(new Thing(Pipe, 32), unitsizet8, (map.floor - 32) * unitsize));
break;
case "Vine":
locMovePreparations(player), TimeHandler.addEvent((function() {
enterCloudWorld(player, !0)
}), 1), player.nofall = !0, spawnMap();
break;
case "Castle":
startCastle(player)
}
}
function enterCloudWorld(e) {
map.random && (map.exitloc = getAfterSkyTransport());
var t = 140 * unitsize,
n = 72 * unitsize;
e.placed = e.nofall = !0, setTop(e, t), setLeft(e, 30 * unitsize), removeClass(e, "jumping"), addClasses(e, ["climbing", "animated"]), e.climbing = TimeHandler.addSpriteCycle(e, ["one", "two"], "climbing"), e.attached = new Thing(Vine, -1), addThing(e.attached, unitsizet32, t - unitsizet8);
var x = setInterval((function() {
if (e.attached.top <= n) {
clearInterval(x), setTop(e.attached, n, !0), e.attached.movement = !1;
var t = e.attached.top + unitsizet16;
x = setInterval((function() {
shiftVert(e, -1 * unitsized4, !0), e.top <= t && (removeClass(e, "animated"), clearInterval(x), setTop(e, t, !0), clearInterval(x), setTimeout((function() {
setLeft(e, 36 * unitsize, !0), addClass(e, "flipped"), setTimeout((function() {
playerHopsOff(e, e.attached, !0), TimeHandler.clearClassCycle(e, "climbing"), e.running = TimeHandler.addSpriteCycle(e, ["one", "two", "three", "two"], "running", setPlayerRunningCycler)
}), 28 * timer)
}), 14 * timer))
}), timer)
}
}), timer)
}
function walkToPipe() {
player = placePlayer(), startWalking(player), map.canscroll = !1;
var e = setInterval((function() {
player.piping && (AudioPlayer.pauseTheme(), clearInterval(e), player.maxspeed = player.maxspeedsave)
}), timer);
unpause()
}
function startWalking(e) {
e.movement = movePlayer, e.maxspeed = e.walkspeed, nokeys = notime = e.keys.run = !0, e.nofall = e.nocollide = !1
}
function intoPipeVert(e, t, n) {
if (!(!t.transport || !e.resting || e.right + unitsizet2 > t.right || e.left - unitsizet2 < t.left)) {
pipePreparations(e), switchContainers(e, characters, scenery), unpause();
var x = setInterval((function() {
shiftVert(e, unitsized4, !0), e.top >= t.top && (clearInterval(x), setTimeout((function() {
goToTransport(n)
}), 700))
}), timer)
}
}
function intoPipeHoriz(e, t, n) {
pipePreparations(e), switchContainers(e, characters, scenery), unpause();
var x = setInterval((function() {
shiftHoriz(e, unitsized4, !0), e.left >= t.left && (clearInterval(x), setTimeout((function() {
goToTransport(n)
}), 700))
}), timer)
}
function pipePreparations(e) {
AudioPlayer.pauseTheme(), AudioPlayer.play("Pipe"), locMovePreparations(e), e.nofall = e.nocollide = nokeys = notime = !0, e.movement = e.xvel = e.yvel = 0
}
function locMovePreparations(e) {
e.keys = new Keys, e.nocollide = e.piping = 1, e.placed = !1, removeCrouch(), removeClass(e, "running"), removeClass(e, "jumping"), removeClass(e, "flipped")
}
function startCastle(e) {
(e = e || window.player) && (setBottom(e, 56 * unitsize), setLeft(e, unitsizet2), e.nocollide = e.piping = !1, e.placed = !0)
}
function exitPipeVert(e, t) {
switchContainers(e, characters, scenery), e.nofall = nokeys = notime = !0, AudioPlayer.play("Pipe"), setTop(e, t.top), setMidXObj(e, t, !0);
var n = unitsize / -4,
x = setInterval((function() {
shiftVert(e, n, !0), e.bottom <= t.top && (switchContainers(e, scenery, characters), clearInterval(x), e.nocollide = e.piping = e.nofall = nokeys = notime = !1, e.placed = !0)
}), timer)
}
function endLevel() {
map.ending || (map.ending = !0, map.random ? setMapRandom(["Random", "Castle"]) : setNextLevelArr(currentmap), storePlayerStats(), pause(), setMap())
}
function setExitLoc(e) {
map.exitloc = e
}
function pushPreThing(e, t, n, x, r) {
var i = new PreThing(map.refx + t, map.refy - n, e, x, r),
a = i.object;
return !a.solid && !a.character || a.nostretch || (map.area.width = max(map.area.width, i.xloc + a.width)), a.solid && !a.spawn_as_char ? map.area.presolids.push(i) : map.area.precharacters.push(i), i
}
function pushPreScenery(e, t, n, x, r) {
x = round(x || 1), r = round(r || 1);
var i = new PreThing(map.refx + t, map.refy - n, Sprite, e, [x, r]);
return i.yloc -= i.object.height, map.area.prescenery.push(i), i
}
function pushPreScenerySolid(e, t, n, x, r) {
x = x || 1, r = r || 1;
var i = new PreThing(map.refx + t, map.refy - n, Sprite, e, [x, r]);
return i.yloc -= i.object.height, map.area.presolids.push(i), i
}
function pushPreText(e, t, n) {
var x = new PreThing(map.refx + t, map.refy - n, FuncSpawner, spawnText, e);
return map.area.presolids.push(x), x
}
function fillPreThing(e, t, n, x, r, i, a, o, l) {
for (var s, d, u = t, p = 0; p < x; ++p) {
for (s = n, d = 0; d < r; ++d) pushPreThing(e, u, s, o, l), s += a;
u += i
}
}
function pushPreFloor(e, t, n) {
pushPreThing(Floor, e, t || 0, n || 1, DtB(t, 8))
}
function makeCeiling(e, t) {
t = t || 1;
for (var n = 0; n < t; ++n) pushPreThing(Brick, e + 8 * n, ceillev)
}
function makeCeilingCastle(e, t, n) {
pushPreThing(Stone, e, ceillev, t || 1, n || 1)
}
function pushPreBridge(e, t, n, x) {
pushPreScenery("Railing", e, t, 2 * n), pushPreThing(BridgeBase, e, t, n), x instanceof Array && (x[0] && pushPreThing(Stone, e - 8, t, 1, 64), x[1] && pushPreThing(Stone, e + 8 * n, t, 1, 64))
}
function fillPreWater(e, t, n) {
var x = DtB(t),
r = ceil(x / 5.5),
i = 5 * r;
pushPreScenery("Water", e, t - 5.5, 4 * n / 3), pushPreScenery("WaterFill", e, t - i - 15.5, 4 * n / 3, r + 2)
}
function pushPrePlatformGenerator(e, t, n) {
pushPreThing(PlatformGenerator, e, ceilmax + 16, t, n)
}
function pushPreScale(e, t, n, x) {
var r = x[0],
i = 2 * r,
a = x[1] + 1.5,
o = x[2] + 1.5,
l = pushPreThing(Scale, e, t, n).object;
platleft = pushPreThing(Platform, e - i, t - 4 * a, r, moveFallingScale).object, platright = pushPreThing(Platform, e + 4 * n - r - 6, t - 4 * o, r, moveFallingScale).object, platleft.parent = l, platright.parent = l, platleft.partner = platright, platright.partner = platleft, platleft.tension = a * unitsizet4 - 10 * unitsize, platright.tension = o * unitsizet4 - 10 * unitsize, l.tensionleft = a * unitsize, l.tensionright = o * unitsize, platleft.string = pushPreScenery("String", e, t - 4 * a, 1, 4 * (a - .5)).object, platright.string = pushPreScenery("String", e + 4 * n - 1, t - 4 * o, 1, 4 * (o - .5)).object
}
function pushPreWarpWorld(e, t, n, x, r) {
1 == n.length && (n = [-1, n[0], -1]);
var i, a, o = (x || 0) + e + 10,
l = n.length;
warp = pushPreThing(WarpWorld, e, t + ceilmax).object;
var s = pushPreText({
innerText: "WELCOME TO WARP ZONE!",
style: {
visibility: "hidden"
}
}, o, 58);
for (warp.texts.push(s.object), a = 0; a < l; ++a) - 1 != n[a] && (warp.pipes.push(i = pushPrePipe(o, t, 24, !0, n[a]).object), warp.pirhanas.push(i.pirhana), n[a] instanceof Array && warp.texts.push(pushPreText({
innerText: n[a][0],
style: {
visibility: "hidden"
}
}, o + 4, 38).object)), o += 32;
r && (window.block = pushPreThing(ScrollBlocker, e, ceilmax), pushPreThing(ScrollBlocker, o + 16, ceilmax))
}
function goUnderWater() {
window.map && (map.area && (window.player && !map.shifting && setAreaSetting(String(map.area.setting || "") + " Underwater"), map.area.underwater = !0), setMapGravity(), TimeHandler.clearEvent(map.bubbling), map.bubbling = TimeHandler.addEventInterval(playerBubbles, 96, 1 / 0), map.underwater = !0)
}
function goOntoLand() {
map && (map.area && (window.player && !map.shifting && setAreaSetting(map.area.setting.replace("Underwater", "") || "Overworld"), map.area.underwater = !1), setMapGravity(), TimeHandler.clearEvent(map.bubbling), map.underwater = !1)
}
function setMapGravity() {
window.player && (map.underwater ? player.gravity = gravity / 2.8 : player.gravity = gravity)
}
function setBStretch() {
window.bstretch = gamescreen.width / 8 - 2
}
function endCastleOutside(e, t, n, x, r) {
e = e || 0, t = t || 0, n && (n = castlev), r = r || 20;
var i = pushPreThing(FlagDetector, e + 7, t + 108).object,
a = pushPreThing(CastleDoorDetector, e + 60 + 8 * (0 == castlev), 8).object;
i.flag = pushPreThing(Flag, e + .5, t + 79.5).object, i.stone = pushPreThing(Stone, e + 4, t + 8).object, i.top = pushPreThing(FlagTop, e + 6.5, 84).object, i.pole = pushPreThing(FlagPole, e + 8, 80).object, x && pushPreScenery("CastleWall", e + r + 72, t, x), 0 == n && shiftHoriz(a, unitsizet8), pushPreCastle(e + r + 16, t, n)
}
function startCastleInside() {
pushPreThing(Stone, 0, 88, 5, 3), pushPreThing(Stone, 0, 48, 3, DtB(48, 8)), pushPreThing(Stone, 24, 40, 1, DtB(40, 8)), pushPreThing(Stone, 32, 32, 1, DtB(32, 8))
}
function endCastleInside(e, t, n) {
var x = pushPreThing(FuncCollider, e + 104, 48, CastleAxeFalls, [16, 24]).object.axe = pushPreThing(CastleAxe, e + 104, 40).object;
x.bridge = pushPreThing(CastleBridge, e, 24, 13).object, x.chain = pushPreThing(CastleChain, e + 96.5, 32).object, x.bowser = pushPreThing(Bowser, e + 69, 42, n).object, pushPreThing(ScrollBlocker, e + 112, ceilmax), pushPreThing(Stone, e, 88, 32), fillPreWater(e, 0, 26), pushPreFloor(e + 104, 32, 3), pushPreFloor(e + 104, 0, 19), pushPreThing(Stone, e + 112, 80, 2, 3), pushPreThing(ScrollBlocker, e + 256, ceilmax), endCastleInsideFinal(e, t)
}
function endCastleInsideFinal(e, t) {
var n = pushPreFuncCollider(e + 180, collideCastleNPC).object,
x = {
visibility: "hidden"
};
t ? (pushPreThing(Peach, e + 194, 13).object, n.text = [pushPreText({
innerHTML: "<span class='span'>THANK YOU " + window.player.title.toUpperCase() + "!</span>",
style: x
}, e + 160, 66).object, pushPreText({
innerHTML: "<span class='span'>YOUR QUEST IS OVER.<BR>WE PRESENT YOU A NEW QUEST.</span>",
style: x
}, e + 148, 50).object, pushPreText({
innerHTML: "<span class='span'>PRESS BUTTON B<BR>TO SELECT A WORLD.</span>",
style: x
}, e + 148, 26).object]) : (pushPreThing(Toad, e + 194, 12).object, n.text = [pushPreText({
innerHTML: "<span class='span'>THANK YOU " + window.player.title.toUpperCase() + "!</span>",
style: x
}, e + 160, 66).object, pushPreText({
innerHTML: "<span class='span'>BUT OUR PRINCESS IS IN<BR>ANOTHER CASTLE!</span>",
style: x
}, e + 148, 50).object])
}
function pushPreSectionPass(e, t, n, x, r) {
var i = pushPreThing(Collider, e, t, [n, x], [sectionPass, sectionColliderInit]).object,
a = (r = map.area.sections.current || 0, map.area.sections[r]);
a.numpass ? ++a.numpass : a.numpass = 1, a.colliders ? a.colliders.push(i) : a.colliders = [i]
}
function pushPreSectionFail(e, t, n, x, r) {
var i = pushPreThing(Collider, e, t, [n, x], [sectionFail, sectionColliderInit]).object,
a = (r = map.area.sections.current || 0, map.area.sections[r]);
a.colliders ? a.colliders.push(i) : a.colliders = [i]
}
function pushCastleDecider(e, t) {
pushPreThing(castleDecider, e, ceilmax, e, t)
}
function sectionColliderInit(e) {
e.sections = map.area.sections, e.parent = e.sections[e.sections.current], e.movement = !1
}
function sectionPass(e, t) {
if ("player" != e.type) return !1;
t.nocollide = !0, --t.parent.numpass || activateSection(t.parent, !0)
}
function sectionFail(e, t) {
if ("player" != e.type) return !1;
t.nocollide = !0, activateSection(t.parent, !1)
}
function activateSection(e, t) {
for (var n = e.colliders, x = n.length - 1; x >= 0; --x) killNormal(n[x]);
e.activated = !0, e.passed = t
}
function pushPreTree(e, t, n) {
pushPreThing(TreeTop, e, t, n);
var x = DtB(t);
pushPreScenerySolid("TreeTrunk", e + 8, t - x - 8, n - 2, x / 8)
}
function pushPreShroom(e, t, n) {
pushPreThing(ShroomTop, e, t, n);
var x = DtB(t - 4);
pushPreScenery("ShroomTrunk", e + 4 * n - 4, t - x - 8, 1, x / 8)
}
function pushPrePipe(e, t, n, x, r, i) {
isFinite(n) || (n = gamescreen.height, t -= gamescreen.height);
var a = pushPreThing(Pipe, e, t + n, n / 8, r),
o = a.object;
return x && (o.pirhana = pushPreThing(Pirhana, e + 4, t + n + 12).object), i && (map.locs[i].entrything = o, map.locs[i].xloc = e), a
}
function pushPreCastle(e, t, n) {
e = e || 0, t = t || 0, n ? pushPreCastleBig(e, t) : pushPreCastleSmall(e, t)
}
function pushPreCastleBig(e, t) {
var n, x;
for (pushPreCastleSmall(e + 16, t + 48), n = 0; n < 3; ++n)
for (x = 0; x < 2; ++x) pushPreScenerySolid("BrickPlain", e + 16 + 16 * n, t + 24 + 8 * x);
for (n = 0; n < 2; ++n) pushPreScenerySolid("CastleDoor", e + 24 + 16 * n, t + 24);
for (n = 0; n < 5; ++n) {
if (2 == n) continue;
pushPreScenerySolid("BrickHalf", e + 16 + 8 * n, t + 48)
}
for (n = 0; n < 2; ++n) pushPreScenerySolid("CastleRailing", e + 8 * n, t + 44);
for (n = 0; n < 5; ++n) pushPreScenerySolid("CastleRailingFilled", e + 16 + 8 * n, t + 44);
for (n = 5; n < 7; ++n) pushPreScenerySolid("CastleRailing", e + 16 + 8 * n, t + 44);
for (n = 0; n < 2; ++n)
for (x = 0; x < 3; ++x) pushPreScenerySolid("BrickPlain", e + 24 + 16 * n, t + 8 * x);
for (n = 0; n < 3; ++n) pushPreScenerySolid("CastleDoor", e + 16 + 16 * n, t);
for (n = 0; n < 2; ++n) {
for (x = 0; x < 5; ++x) pushPreScenerySolid("BrickPlain", e + 8 * n, t + 8 * x);
pushPreScenerySolid("BrickHalf", e + 8 * n, t + 40)
}
for (n = 0; n < 2; ++n) {
for (x = 0; x < 5; ++x) pushPreScenerySolid("BrickPlain", e + 56 + 8 * n, t + 8 * x);
pushPreScenerySolid("BrickHalf", e + 56 + 8 * n, t + 40)
}
for (n = 0; n < 3; ++n)
for (x = 0; x < 2; ++x) pushPreScenerySolid("BrickHalf", e + 16 + 16 * n, t + 20 + 20 * x)
}
function pushPreCastleSmall(e, t) {
var n, x;
for (n = 0; n < 3; ++n) pushPreScenerySolid("CastleRailing", e + 8 + 8 * n, t + 36);
for (n = 0; n < 2; ++n) pushPreScenerySolid("CastleTop", e + 8 + 12 * n, t + 24);
for (pushPreScenerySolid("CastleRailing", e, t + 20), n = 1; n <= 3; ++n) pushPreScenerySolid("CastleRailingFilled", e + 8 * n, t + 20);
for (pushPreScenerySolid("CastleRailing", e + 32, t + 20), n = 0; n < 2; ++n)
for (pushPreScenerySolid("BrickHalf", e + 8 * n, t), x = 0; x < 2; ++x) pushPreScenerySolid("BrickPlain", e + 8 * n, t + 4 + 8 * x);
for (n = 0; n < 2; ++n)
for (pushPreScenerySolid("BrickHalf", e + 24 + 8 * n, t), x = 0; x < 2; ++x) pushPreScenerySolid("BrickPlain", e + 24 + 8 * n, t + 4 + 8 * x);
pushPreScenerySolid("CastleDoor", e + 16, t)
}
function pushPreFuncCollider(e, t) {
return e instanceof Array ? (console.log("position", e), pushPreThing(FuncCollider, e[0], e[1], t, [e[2], e[3]])) : pushPreThing(FuncCollider, e, ceilmax + 40, t)
}
function pushPreFuncSpawner(e, t) {
return pushPreThing(FuncSpawner, e, jumplev1, t)
}
function zoneEnableLakitu() {
map.zone_lakitu = !0, enterLakitu()
}
function zoneDisableLakitu() {
if (map.has_lakitu) {
var e = map.has_lakitu;
map.zone_lakitu = map.has_lakitu = !1, e.lookleft || (e.lookleft = !0, removeClass(e, "flipped")), e.movement = function(e) {
e.xvel = max(e.xvel - unitsized32, -1 * unitsize)
}
}
}
function zoneStartCheeps(e) {
pushPreFuncCollider(e, zoneEnableCheeps)
}
function zoneStopCheeps(e) {
pushPreFuncCollider(e, zoneDisableCheeps)
}
function zoneEnableCheeps(e) {
!map.zone_cheeps && e.player && startCheepSpawn()
}
function zoneDisableCheeps(e) {
e.player && (map.zone_cheeps = !1)
}
function pushPrePattern(e, t, n, x) {
var r, i, a, o = t,
l = Scenery.patterns[e];
for (i = 0; i < x; ++i) {
for (a in l)(r = l[a]) instanceof Array && pushPreScenery(r[0], o + r[1], n + r[2], r[3], r[4]);
o += l.width
}
}
function DtB(e, t) {
return (e + botmax) / (t || 1)
}
function BlankMap(e) {
e.locs = [new Location(0, entryBlank)], e.areas = [new Area("Overworld", (function() {
setTimeout(refillCanvas, timer + 2)
}))]
}
function World11(e) {
e.locs = [new Location(0, !0), new Location(0, exitPipeVert), new Location(1)], e.areas = [new Area("Overworld", (function() {
setLocationGeneration(0);
pushPreText("<div style='width:350px;max-height:189px;background-color:#d64d00;border-radius:7px;box-shadow:3px 3px #efb28b inset, -3px -3px black inset;background-image: url(\"Theme/Greeting.gif\"), url(\"Theme/Greeting.gif\"), url(\"Theme/Greeting.gif\"), url(\"Theme/Greeting.gif\");background-repeat: no-repeat;background-position: 7px 7px, 336px 7px, 7px 168px, 336px 168px'> <p style='text-align:left;padding:7px 0 11px 11px;color:#ffcccc;font-family: Super Plumber Bros;font-size:77px;text-shadow:3px 8px black'> <span style='font-size:84px'>super</span> <br><br> <span style='font-size:81px;line-height:96px'>MARIO BROS.</span> </p></div><div id='boo' style='text-align:right;color:#ffcccc;margin-top:-7px;width:350px;height:35px;'>&copy;1985 NINTENDO</div><p id='explanation' style='text-align:center;\x3c!--/*text-shadow:2px 2px 1px black;*/--\x3emargin-left:7px;'> Move: Arrows/WASD <br> Fire/Sprint: Shift/CTRL <br> Pause/Mute: P/M </p>", 20, 91), pushPrePattern("backreg", 0, 0, 5), pushPreFloor(0, 0, 69), pushPreThing(Block, 128, jumplev1), pushPreThing(Brick, 160, jumplev1), pushPreThing(Block, 168, jumplev1, Mushroom), pushPreThing(Goomba, 176, 8), pushPreThing(Brick, 176, jumplev1), pushPreThing(Block, 176, jumplev2), pushPreThing(Block, 184, jumplev1), pushPreThing(Brick, 192, jumplev1), pushPrePipe(224, 0, 16, !1), pushPrePipe(304, 0, 24), pushPrePipe(368, 0, 32), pushPreThing(Goomba, 340, 8), pushPrePipe(368, 0, 32), pushPreThing(Goomba, 412, 8), pushPreThing(Goomba, 422, 8), pushPrePipe(456, 0, 32, !1, 2), pushPreThing(Block, 512, 40, [Mushroom, 1], !0), pushPreFloor(568, 0, 15), pushPreThing(Brick, 618, jumplev1), pushPreThing(Block, 626, jumplev1, Mushroom), pushPreThing(Brick, 634, jumplev1), pushPreThing(Brick, 640, jumplev2), pushPreThing(Goomba, 640, jumplev2 + 8), pushPreThing(Brick, 648, jumplev2), pushPreThing(Brick, 656, jumplev2), pushPreThing(Goomba, 656, jumplev2 + 8), pushPreThing(Brick, 664, jumplev2), pushPreThing(Brick, 672, jumplev2), pushPreThing(Brick, 680, jumplev2), pushPreThing(Brick, 688, jumplev2), pushPreThing(Brick, 696, jumplev2), pushPreFloor(712, 0, 64), pushPreThing(Brick, 728, jumplev2), pushPreThing(Brick, 736, jumplev2), pushPreThing(Brick, 744, jumplev2), pushPreThing(Brick, 752, jumplev1, Coin), pushPreThing(Block, 752, jumplev2), pushPreThing(Goomba, 776, 8), pushPreThing(Goomba, 788, 8), pushPreThing(Brick, 800, jumplev1), pushPreThing(Brick, 808, jumplev1, Star), pushPreThing(Block, 848, jumplev1), pushPreThing(Koopa, 856, 12), pushPreThing(Block, 872, jumplev1), pushPreThing(Block, 872, jumplev2, Mushroom), pushPreThing(Block, 896, jumplev1), pushPreThing(Goomba, 912, 8), pushPreThing(Goomba, 924, 8), pushPreThing(Brick, 944, jumplev1), pushPreThing(Brick, 968, jumplev2), pushPreThing(Brick, 976, jumplev2), pushPreThing(Brick, 984, jumplev2), pushPreThing(Goomba, 992, 8), pushPreThing(Goomba, 1004, 8), pushPreThing(Goomba, 1024, 8), pushPreThing(Goomba, 1036, 8), pushPreThing(Brick, 1024, jumplev2), pushPreThing(Brick, 1032, jumplev1), pushPreThing(Block, 1032, jumplev2), pushPreThing(Brick, 1040, jumplev1), pushPreThing(Block, 1040, jumplev2), pushPreThing(Brick, 1048, jumplev2), pushPreThing(Stone, 1072, 8), pushPreThing(Stone, 1080, 16, 1, 2), pushPreThing(Stone, 1088, 24, 1, 3), pushPreThing(Stone, 1096, 32, 1, 4), pushPreThing(Stone, 1120, 32, 1, 4), pushPreThing(Stone, 1128, 24, 1, 3), pushPreThing(Stone, 1136, 16, 1, 2), pushPreThing(Stone, 1144, 8), pushPreThing(Stone, 1184, 8), pushPreThing(Stone, 1192, 16, 1, 2), pushPreThing(Stone, 1200, 24, 1, 3), pushPreThing(Stone, 1208, 32, 1, 4), pushPreThing(Stone, 1216, 32, 1, 4), pushPreFloor(1240, 0, 69), pushPreThing(Stone, 1240, 32, 1, 4), pushPreThing(Stone, 1248, 24, 1, 3), pushPreThing(Stone, 1256, 16, 1, 2), pushPreThing(Stone, 1264, 8, 1, 1), pushPrePipe(1304, 0, 16, !1, !1, 1), pushPreThing(Brick, 1344, jumplev1), pushPreThing(Brick, 1352, jumplev1), pushPreThing(Block, 1360, jumplev1), pushPreThing(Brick, 1368, jumplev1), pushPreThing(Goomba, 1392, 8), pushPreThing(Goomba, 1404, 8), pushPrePipe(1432, 0, 16), pushPreThing(Stone, 1448, 8), pushPreThing(Stone, 1456, 16, 1, 2), pushPreThing(Stone, 1464, 24, 1, 3), pushPreThing(Stone, 1472, 32, 1, 4), pushPreThing(Stone, 1480, 40, 1, 5), pushPreThing(Stone, 1488, 48, 1, 6), pushPreThing(Stone, 1496, 56, 1, 7), pushPreThing(Stone, 1504, 64, 2, 8), endCastleOutside(1580, 0, 1)
})), new Area("Underworld", (function() {
setLocationGeneration(2), makeCeiling(32, 7), pushPreFloor(0, 0, 17), fillPreThing(Brick, 0, 8, 1, 11, 8, 8), fillPreThing(Brick, 32, 8, 7, 3, 8, 8), fillPreThing(Coin, 33, 31, 7, 2, 8, 16), fillPreThing(Coin, 41, 63, 5, 1, 8, 8), pushPreThing(PipeSide, 104, 16, 1), pushPreThing(PipeVertical, 120, 88, 88)
}))]
}
function randMapType(e) {
e.locs = [new Location(0, entryRandom)], e.areas = [new Area(e.areatype, (function() {
setLocationGeneration(0), "Underwater" == e.randname && (goUnderWater(), pushPreScenery("Water", 0, ceilmax - 21, 8 * (e.startwidth + 1) / 3, 1), pushPreThing(WaterBlock, 0, ceilmax, 8 * (e.startwidth + 1)))
}))], e.treefunc = randTrue(3) ? pushPreTree : pushPreShroom, e.treeheight = e.treelev = e.sincechange = 0
}
function randDayNight() {
return randTrue(3) ? "" : " Night"
}
function WorldRandomOverworld(e) {
e.random = !0, e.randtype = pushRandomSectionOverworld, e.randname = "Overworld", e.areatype = "Overworld" + randDayNight(), e.firstRandomThings = function(e) {
for (var t = 0; t < 10; ++t) randTrue() && pushRandomGroundScenery(8 * t)
}, e.startwidth = 14, e.onlysmartkoopas = !1, randMapType(e)
}
function WorldRandomTrees(e) {
e.random = !0, e.randtype = pushRandomSectionTrees, e.randname = "Overworld", e.areatype = "Overworld" + randDayNight(), e.firstRandomThings = function(e) {
e.treefunc(100, 8 * (e.treelev = randTrue() + 2), randTrue() + 4), e.startwidth += 7
}, e.startwidth = 11, e.onlysmartkoopas = randTrue(), randMapType(e)
}
function WorldRandomUnderworld(e) {
e.random = !0, e.randtype = pushRandomSectionUnderworld, e.randname = e.areatype = "Underworld", e.firstRandomThings = function(e) {
fillPreThing(Brick, 0, 8, 1, 11, 8, 8)
}, e.startwidth = randTrue(3) + 7, e.onlysmartkoopas = !0, e.respawndist = 42, e.entrancetype = "Up", randMapType(e)
}
function WorldRandomUnderwater(e) {
e.random = !0, e.randtype = pushRandomSectionUnderwater, e.randname = "Underwater", e.areatype = "Underwater" + randDayNight(), e.firstRandomThings = function(e) {}, e.startwidth = randTrue(3) + 7, e.entrancetype = "Up", e.countCheep = e.countBlooper = 0, e.respawndist = 42, e.onlysmartkoopas = !0, randMapType(e)
}
function WorldRandomBridge(e) {
e.random = !0, e.randtype = startRandomSectionBridge, e.randname = "Overworld", e.areatype = "Overworld" + randDayNight(), e.firstRandomThings = function(e) {}, e.startwidth = 14, randMapType(e)
}
function WorldRandomSky(e) {
e.random = !0, e.randtype = startRandomSectionSky, e.randname = "Sky", e.areatype = "Sky" + randDayNight(), e.entrancetype = "Vine", e.firstRandomThings = function(e) {
pushPreThing(Stone, 0, 0, 4)
}, e.startwidth = 4, e.nofloor = !0, randMapType(e)
}
function WorldRandomCastle(e) {
e.random = !0, e.randtype = startRandomSectionCastle, e.randname = e.areatype = e.entrancetype = "Castle", e.firstRandomThings = function(e) {
startCastleInside(), startCastle()
}, e.respawndist = 35, randMapType(e)
}
function FullScreenMario() {
var e = Date.now();
ensureLocalStorage(), TonedJS(!0), window.body = document.body, window.bodystyle = body.style, window.verbosity = {
Maps: !1,
Sounds: !1
}, window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || function(e) {
setTimeout(e, timer)
}, window.cancelAnimationFrame = window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout, window.Uint8ClampedArray = window.Uint8ClampedArray || window.Uint8Array || Array, resetMeasurements(), resetLibrary(), resetEvents(), resetCanvas(), resetMaps(), resetScenery(), resetTriggers(), resetSeed(), resetSounds(), window.luigi = localStorage && "true" == localStorage.luigi, window.gameon = !0, setMap(1, 1), log("It took " + (Date.now() - e) + " milliseconds to start.")
}
function ensureLocalStorage() {
var e = !1;
try {
window.hasOwnProperty("localStorage") || (window.localStorage = {
crappy: !0
}), window.localStorage && (e = !0)
} catch (t) {
e = !1
}
if (!e) throw document.body.innerText = "It seems your browser does not allow localStorage!"
}
function resetMeasurements() {
resetUnitsize(4), resetTimer(1e3 / 60), window.jumplev1 = 32, window.jumplev2 = 64, window.ceillev = 88, window.ceilmax = 104, window.castlev = -48, window.paused = !0, resetGameScreen(), window.parentwindow || (window.parentwindow = !1)
}
function resetUnitsize(e) {
window.unitsize = e;
for (var t = 2; t <= 64; ++t) window["unitsizet" + t] = unitsize * t, window["unitsized" + t] = unitsize / t;
window.scale = unitsized2, window.gravity = round(12 * unitsize) / 100
}
function resetTimer(e) {
e = roundDigit(e, .001), window.timer = window.timernorm = e, window.timert2 = 2 * e, window.timerd2 = e / 2, window.fps = window.fps_target = roundDigit(1e3 / e, .001), window.time_prev = Date.now()
}
function resetGameScreen() {
window.gamescreen = new getGameScreen
}
function getGameScreen() {
resetGameScreenPosition(this), this.middlex = (this.left + this.right) / 2, window.botmax = this.height - ceilmax, botmax < unitsize && (body.innerHTML = "<div><br>Your screen isn't high enough. Make it taller, then refresh.</div>"), this.deathheight = this.bottom + 48
}
function resetGameScreenPosition(e) {
(e = e || window.gamescreen).left = e.top = 0, e.bottom = innerHeight, e.right = innerWidth, e.height = innerHeight / unitsize, e.width = innerWidth / unitsize, e.unitheight = innerHeight, e.unitwidth = innerWidth
}
function resetEvents() {
window.TimeHandler = new TimeHandlr({
onSpriteCycleStart: "onadding",
doSpriteCycleStart: "placed",
cycleCheckValidity: "alive",
timingDefault: 9
})
}
function resetSounds() {
window.sounds = {}, window.theme = !1, window.muted = localStorage && "true" == localStorage.muted, window.AudioPlayer = new AudioPlayr({
directory: "Sounds",
getVolumeLocal: function() {
return .49
},
getThemeDefault: function() {
return area.theme
},
library: {
Sounds: ["Bowser Falls", "Bowser Fires", "Break Block", "Bump", "Coin", "Ending", "Fireball", "Firework", "Flagpole", "Gain Life", "Game Over 2", "Game Over", "Hurry", "Into the Tunnel", "Jump Small", "Jump Super", "Kick", "Level Complete", "Player Dies", "Pause", "Pipe", "Power Down", "Powerup Appears", "Powerup", "Stage Clear", "Vine Emerging", "World Clear", "You Dead"],
Themes: ["Castle", "Overworld", "Underwater", "Underworld", "Star", "Sky", "Hurry Castle", "Hurry Overworld", "Hurry Underwater", "Hurry Underworld", "Hurry Star", "Hurry Sky"]
}
})
}
function resetQuadrants() {
window.QuadsKeeper = new QuadsKeepr({
num_rows: 5,
num_cols: 6,
screen_width: window.innerWidth,
screen_height: window.innerHeight,
tolerance: unitsized2,
onUpdate: spawnMap,
onCollide: !1
})
}
function resetGameState(e) {
clearAllTimeouts(), resetData(), window.nokeys = window.spawning = window.spawnon = window.notime = window.editing = window.qcount = window.lastscroll = 0, window.paused = window.gameon = window.speed = 1, e || (window.gamecount = 0), resetQuadrants(), window.gamehistory = [], AudioPlayer.pause()
}
function scrollWindow(e, t) {
var n = -(e = e || 0),
x = -(t = t || 0);
gamescreen.left += e, gamescreen.right += e, gamescreen.top += t, gamescreen.bottom += t, shiftAll(characters, n, x), shiftAll(solids, n, x), shiftAll(scenery, n, x), shiftAll(QuadsKeeper.getQuadrants(), n, x), shiftElements(texts, n, x), QuadsKeeper.updateQuadrants(n), window.playediting && scrollEditor(e, t)
}
function shiftAll(e, t, n) {
for (var x = e.length - 1; x >= 0; --x) shiftBoth(e[x], t, n)
}
function shiftElements(e, t, n) {
for (var x, r = e.length - 1; r >= 0; --r) x = e[r], elementShiftLeft(x, t), elementShiftTop(x, n)
}
function scrollPlayer(e, t, n) {
var x = player.left,
r = player.top;
scrollWindow(e, t = t || 0), setLeft(player, x, n), setTop(player, r + t * unitsize, n), QuadsKeeper.updateQuadrants()
}
function mlog(e) {
verbosity[e] && log.apply(console, arguments)
}
function resetCanvas() {
window.canvas = getCanvas(innerWidth, innerHeight, !0), window.context = canvas.getContext("2d"), body.appendChild(canvas)
}
function spriteUnravel(e) {
for (var t, n, x, r = getPaletteReferenceStarting(window.palette), i = window.digitsize, a = e.length, o = "", l = 0; l < a;) switch (e[l]) {
case "x":
for (x = e.indexOf(",", ++l), t = makeDigit(r[e.slice(l, l += i)], window.digitsize), n = Number(e.slice(l, x)); n--;) o += t;
l = x + 1;
break;
case "p":
"[" == e[++l] ? (x = e.indexOf("]"), r = getPaletteReference(e.slice(l + 1, x).split(",")), l = x + 1, i = 1) : (r = getPaletteReference(window.palette), i = window.digitsize);
break;
default:
o += makeDigit(r[e.slice(l, l += i)], window.digitsize)
}
return o
}
function spriteExpand(e) {
for (var t, n, x = "", r = e.length, i = 0; i < r;)
for (t = e.slice(i, i += digitsize), n = 0; n < scale; ++n) x += t;
return x
}
function spriteGetArray(e) {
var t, n, x, r, i = e.length / digitsize,
a = e.match(new RegExp(".{1," + digitsize + "}", "g")),
o = new Uint8ClampedArray(4 * i);
for (n = 0, x = 0; n < i; ++n) {
for (t = palette[Number(a[n])], r = 0; r < 4; ++r) o[x + r] = t[r];
x += 4
}
return o
}
function setThingSprite(e) {
if (!e.hidden && e.title) {
var t, n = library.cache,
x = e.spritewidth,
r = e.spriteheight;
n[e.title + " " + e.className.split(/\s+/g).slice(1).sort()];
(t = getSpriteFromLibrary(e)) ? t.multiple ? (expandObtainedSpriteMultiple(t, e, x, r), e.sprite_type = t.type) : (expandObtainedSprite(t, e, x, r), e.sprite_type = "normal"): log("Could not get sprite from library on " + e.title)
}
}
function getSpriteFromLibrary(e) {
var t, n, x, r, i = library.cache,
a = e.title,
o = e.libtype,
l = e.className.split(/\s+/g).slice(1).sort(),
s = (map.area || window.defaultsetting).setting.split(" ");
for (r in s) l.unshift(s[r]);
if (n = i[t = a + " " + l]) x = n.raw;
else {
if (!(x = library.sprites[o][a]) || !x.constructor) return console.log("Error in checking for sprite of " + a + "."), void console.log("Title " + a, "\nLibtype " + o, "\n", e, "\n");
x.constructor != Uint8ClampedArray && (x = findSpriteInLibrary(e, x, l)), n = i[t] = {
raw: x
}
}
switch (String(Number(l.indexOf("flipped") >= 0)) + String(Number(l.indexOf("flip-vert") >= 0))) {
case "11":
x = n.flipboth ? n.flipboth : n.flipboth = flipSpriteArrayBoth(x);
break;
case "10":
x = n.fliphoriz ? n.fliphoriz : n.fliphoriz = flipSpriteArrayHoriz(x, e);
break;
case "01":
x = n.flipvert ? n.flipvert : n.flipvert = flipSpriteArrayVert(x, e);
break;
default:
x = n.raw
}
return x
}
function expandObtainedSprite(e, t, n, x, r) {
var i, a, o = new Uint8ClampedArray(e.length * scale),
l = n * unitsizet4,
s = x * scale,
d = 0,
u = 0;
for (i = 0; i < s; ++i) {
for (a = 0; a < scale; ++a) memcpyU8(e, o, d, u, l), u += l;
d += l
}
return r || (t.num_sprites = 1, t.sprite = o, refillThingCanvas(t)), o
}
function expandObtainedSpriteMultiple(e, t, n, x) {
var r, i, a = {};
for (i in t.num_sprites = 0, e)(r = e[i]).constructor == Uint8ClampedArray ? (++t.num_sprites, a[i] = expandObtainedSprite(r, t, n, x, !0)) : a[i] = "number" == typeof r ? r * scale : r;
t.sprite = a.middle, t.sprites = a, refillThingCanvases(t, a)
}
function findSpriteInLibrary(e, t, n) {
var x, r, i, a = t;
if (t.multiple) return t;
for (var o = 0; x = !0;) {
for (i in ++o > 49 && (alert(e.title), console.log(e.title, n, t)), n)
if (r = t[n[i]]) {
t = r, n.splice(i, 1), x = !1;
break
}
if (x)
if (r = t.normal) switch (x = !1, r.constructor) {
case Uint8ClampedArray:
case SpriteMultiple:
return r;
case Object:
t = r;
break;
default:
t = t[r]
} else x = !0;
if (x || !t) return console.log("\nSprite not found! Title: " + e.title), console.log("Classname:", e.className), console.log("Remaining", n), console.log("Current", t), console.log("Prev", a), new Uint8ClampedArray(e.spritewidth * e.spriteheight);
switch (t.constructor) {
case Uint8ClampedArray:
case SpriteMultiple:
return t;
case "Object":
continue
}
}
}
function refillThingCanvas(e) {
var t = e.canvas,
n = e.context,
x = n.getImageData(0, 0, t.width, t.height);
memcpyU8(e.sprite, x.data), n.putImageData(x, 0, 0)
}
function refillThingCanvases(e, t) {
var n, x, r, i, a, o = e.canvases = {},
l = e.spritewidthpixels,
s = e.spriteheightpixels;
for (a in e.num_sprites = 1, t)(n = t[a]) instanceof Uint8ClampedArray ? (++e.num_sprites, o[a] = r = {
canvas: getCanvas(l, s)
}, r.context = i = r.canvas.getContext("2d"), memcpyU8(n, (x = i.getImageData(0, 0, l, s)).data), i.putImageData(x, 0, 0)) : o[a] = n;
r = o.middle, e.canvas = r.canvas, e.context = r.context
}
function refillCanvas() {
var e, t = window.canvas,
n = window.context;
for (n.fillStyle = area.fillStyle, n.fillRect(0, 0, t.width, t.height), e = scenery.length - 1; e >= 0; --e) drawThingOnCanvas(n, scenery[e]);
for (e = solids.length - 1; e >= 0; --e) drawThingOnCanvas(n, solids[e]);
for (e = characters.length - 1; e >= 0; --e) drawThingOnCanvas(n, characters[e])
}
function drawThingOnCanvas(e, t) {
if (!t.hidden) {
var n = t.left,
x = t.top;
n > innerWidth || (1 == t.num_sprites ? drawThingOnCanvasSingle(e, t.canvas, t, n, x) : drawThingOnCanvasMultiple(e, t.canvases, t.canvas, t, n, x))
}
}
function drawThingOnCanvasSingle(e, t, n, x, r) {
n.repeat ? drawPatternOnCanvas(e, t, x, r, n.unitwidth, n.unitheight) : e.drawImage(t, x, r)
}
function drawThingOnCanvasMultiple(e, t, n, x, r, i) {
var a, o, l = i,
s = r,
d = x.right,
u = x.bottom,
p = x.unitwidth,
c = x.unitheight,
m = x.spritewidthpixels,
h = x.spriteheightpixels;
"v" == x.sprite_type[0] ? ((o = t.bottom) && (a = t.bottomheight || x.spriteheightpixels, drawPatternOnCanvas(e, o.canvas, s, u - a, m, min(c, h)), u -= a, c -= a), (o = t.top) && (a = t.topheight || x.spriteheightpixels, drawPatternOnCanvas(e, o.canvas, s, l, m, min(c, h)), l += a, c -= a)) : "h" == x.sprite_type[0] && ((o = t.left) && (a = t.leftwidth || x.spritewidthpixels, drawPatternOnCanvas(e, o.canvas, s, l, min(p, m), h), s += a, p -= a), (o = t.right) && (a = t.rightwidth || x.spritewidthpixels, drawPatternOnCanvas(e, o.canvas, d - a, l, min(p, m), h), d -= a, p -= a)), l < u && s < d && drawPatternOnCanvas(e, n, s, l, p, c)
}
function getPaletteReferenceStarting(e) {
for (var t = {}, n = 0; n < e.length; ++n) t[makeDigit(n, digitsize)] = makeDigit(n, digitsize);
return t
}
function getPaletteReference(e) {
for (var t = {}, n = getDigitSize(e), x = 0; x < e.length; ++x) t[makeDigit(x, n)] = makeDigit(e[x], n);
return t
}
function flipSpriteArrayHoriz(e, t) {
var n, x, r, i, a, o = e.length,
l = t.spritewidth,
s = (t.spriteheight, new Uint8ClampedArray(o)),
d = l * unitsizet4;
for (r = 0; r < o; r += d)
for (n = r, x = r + d - 4, i = 0; i < d; i += 4) {
for (a = 0; a < 4; ++a) s[n + a] = e[x + a];
n += 4, x -= 4
}
return s
}
function flipSpriteArrayVert(e, t) {
for (var n, x, r = e.length, i = t.spritewidth, a = (t.spriteheight, new Uint8ClampedArray(r)), o = i * unitsizet4, l = 0, s = r - o; l < r;) {
for (n = 0; n < o; n += 4)
for (x = 0; x < 4; ++x) a[l + n + x] = e[s + n + x];
l += o, s -= o
}
return a
}
function flipSpriteArrayBoth(e) {
for (var t, n = e.length, x = new Uint8ClampedArray(n), r = e.length - 4, i = 0; i < n;) {
for (t = 0; t < 4; ++t) x[i + t] = e[r + t];
i += 4, r -= 4
}
return x
}
function drawPatternOnCanvas(e, t, n, x, r, i) {
e.translate(n, x), e.fillStyle = e.createPattern(t, "repeat"), e.fillRect(0, 0, r, i), e.translate(-n, -x)
}
function clearAllSprites(e) {
var t, n, x = [window.solids, window.characters, window.scenery];
for (t in x)
for (n in t = x[t]) setThingSprite(t[n]);
e && (library.cache = {})
}
function memcpyU8(e, t, n, x, r) {
if (!(!e || !t || n < 0 || x < 0 || r <= 0 || n >= e.length || x >= t.length)) {
null == n && (n = 0), null == x && (x = 0), null == r && (r = max(0, min(e.length, t.length)));
for (var i = r + 0, a = x + 0, o = n + 0; i--;) t[a++] = e[o++]
}
}
function canvasDisableSmoothing(e, t) {
(t = t || e.getContext("2d")).webkitImageSmoothingEnabled = !1, t.mozImageSmoothingEnabled = !1, t.imageSmoothingEnabled = !1
}
function Thing(e) {
if (0 != arguments.length && e) {
var t = this === window ? new Thing : this,
n = t.args = arrayMake(arguments);
n[0] = t, e.apply(t, n), t.alive = !0, t.placed = this.outerok = 0, t.xvel = this.xvel || 0, t.yvel = this.yvel || 0, null == t.tolx && (t.tolx = 0), null == t.toly && (t.toly = unitsized8), t.collide = t.collide || function() {}, t.death = t.death || killNormal, t.animate = t.animate || emergeUp;
var x, r = 4;
(x = floor(t.width * unitsize / QuadsKeeper.getQuadWidth())) > 0 && (r += (x + 1) * r / 2), (x = floor(t.height * unitsize / QuadsKeeper.getQuadHeight())) > 0 && (r += (x + 1) * r / 2), t.maxquads = r, t.quadrants = new Array(t.maxquads), t.overlaps = [], t.title = t.title || e.name, t.spritewidth = t.spritewidth || t.width, t.spriteheight = t.spriteheight || t.height, t.sprite = "";
try {
setContextStuff(t, t.spritewidth, t.spriteheight)
} catch (e) {
log("Thing context fail", e, t.title, t), setTimeout((function() {
setContextStuff(t, t.spritewidth, t.spriteheight)
}), 1)
}
return t
}
}
function setContextStuff(e, t, n) {
e.spritewidthpixels = e.spritewidth * unitsize, e.spriteheightpixels = e.spriteheight * unitsize, e.canvas = getCanvas(e.spritewidthpixels, e.spriteheightpixels), e.context = e.canvas.getContext("2d"), e.imageData = e.context.getImageData(0, 0, e.spritewidthpixels, e.spriteheightpixels), e.sprite_type = e.sprite_type || "neither", canvasDisableSmoothing(e, e.context)
}
function ThingCreate(e, t) {
var n = new Thing;
return Thing.apply(n, [e].concat(t)), n
}
function setCharacter(e, t) {
e.type = t.split(" ")[0], e.resting = e.under = e.undermid = !1, e.alive = e.character = !0, e.libtype = "characters", setClassInitial(e, "character " + t)
}
function setSolid(e, t) {
e.type = "solid", e.name = t, e.solid = e.alive = !0, e.speed = e.speed || 0, e.collide = e.collide || characterTouchedSolid, e.bottomBump = e.bottomBump || function() {}, e.action = e.action || function() {}, e.jump = e.jump || function() {}, e.spritewidth = e.spritewidth || 8, e.spriteheight = e.spriteheight || 8, e.libtype = "solids", setClassInitial(e, "solid " + t)
}
function setScenery(e, t) {
setSolid(e, t), e.libtype = "scenery"
}
function addThing(e, t, n) {
return e instanceof Function && (e = new Thing(e)), placeThing(e, t, n), window[e.libtype].push(e), e.placed = !0, e.onadding && e.onadding(), setThingSprite(e), window["last_" + (e.title || e.group || "unknown")] = e, e
}
function placeThing(e, t, n) {
return setLeft(e, t), setTop(e, n), updateSize(e), e
}
function addText(e, t, n) {
var x = createElement("div", {
innerHTML: e,
className: "text",
left: t,
top: n,
onclick: body.onclick || canvas.onclick,
style: {
marginLeft: t + "px",
marginTop: n + "px"
}
});
return body.appendChild(x), texts.push(x), x
}
function spawnText(e, t) {
var n = e.element = addText("", e.left, e.top);
"object" == typeof t ? proliferate(n, t) : n.innerHTML = t, e.movement = !1
}
function checkTexts() {
var e, t, n, x = QuadsKeeper.getDelX();
for (n = texts.length - 1; n >= 0; --n) t = texts[n], e = texts[n].element || t, t.right = t.left + e.clientWidth, t.right < x && (body.removeChild(e), killNormal(t), deleteThing(e, texts, n))
}
function Mushroom(e, t) {
e.group = "item", e.width = e.height = 8, e.speed = .42 * unitsize, e.animate = emergeUp, e.movement = moveSimple, e.collide = collideFriendly, e.jump = mushroomJump, e.death = killNormal, e.nofire = !0;
var n = "mushroom";
switch (t) {
case 1:
e.action = gainLife, n += " gainlife";
break;
case -1:
e.action = killPlayer, n += " death";
break;
default:
e.action = playerShroom, n += " regular"
}
setCharacter(e, n)
}
function mushroomJump(e) {
e.yvel -= 1.4 * unitsize, e.top -= unitsize, e.bottom -= unitsize, updatePosition(e)
}
function FireFlower(e) {
e.group = "item", e.width = e.height = 8, e.animate = emergeUp, e.collide = collideFriendly, e.action = playerShroom, e.nofall = e.nofire = !0, e.movement = !1, setCharacter(e, "fireflower"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"])
}
function FireBall(e, t) {
e.group = "item", e.width = e.height = 4, e.speed = 1.75 * unitsize, e.gravity = 1.56 * gravity, e.jumpheight = 1.56 * unitsize, e.nofire = e.nostar = e.collide_primary = !0, e.moveleft = t, e.animate = emergeFire, e.movement = moveJumping, e.collide = fireEnemy, e.death = fireExplodes, setCharacter(e, "fireball"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 4)
}
function fireEnemy(e, t) {
if (!(!t.alive || t.emerging || e.height <= unitsize)) {
if (e.nofire) return e.nofire > 1 ? t.death(t) : void 0;
e.solid ? AudioPlayer.playLocal("Bump", t.right) : (AudioPlayer.playLocal("Kick", t.right), e.death(e, 2), scoreEnemyFire(e)), t.death(t)
}
}
function fireDeleted() {
--player.numballs
}
function fireExplodes(e) {
var t = new Thing(Firework);
addThing(t, e.left - t.width / 2, e.top - t.height / 2), t.animate(), killNormal(e)
}
function Star(e) {
e.group = "item", e.width = 7, e.height = 8, e.speed = .56 * unitsize, e.jumpheight = 1.17 * unitsize, e.gravity = gravity / 2.8, e.animate = emergeUp, e.movement = moveJumping, e.collide = collideFriendly, e.action = playerStar, e.death = killNormal, e.nofire = !0, setCharacter(e, "star item"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 0, 7)
}
function Shell(e, t) {
e.width = 8, e.height = 7, e.group = "item", e.speed = unitsizet2, e.collide_primary = !0, e.moveleft = e.xvel = e.move = e.hitcount = e.peeking = e.counting = e.landing = e.enemyhitcount = 0, e.smart = t, e.movement = moveShell, e.collide = hitShell, e.death = killFlip, e.spawntype = Koopa, setCharacter(e, "shell" + (t ? " smart" : " dumb"))
}
function hitShell(e, t) {
if ("shell" == e.type && t.type != e.type) return hitShell(t, e);
switch (e.type) {
case "solid":
t.right < e.right ? (AudioPlayer.playLocal("Bump", e.left), setRight(t, e.left), t.xvel = -t.speed, t.moveleft = !0) : (AudioPlayer.playLocal("Bump", e.right), setLeft(t, e.right), t.xvel = t.speed, t.moveleft = !1);
break;
case "player":
var n = objectToLeft(t, e),
x = e.yvel > 0 && e.bottom <= t.top + unitsizet2;
if (e.star) return scorePlayerShell(e, t), t.death(t, 2);
if (t.landing) return void(t.shelltoleft == n ? (++t.landing, 1 == t.landing && scorePlayerShell(e, t), TimeHandler.addEvent((function(e) {
--e.landing
}), 2, t)) : player.death(player));
0 == t.xvel || x ? (t.counting = 0, scorePlayerShell(e, t), t.peeking && (t.peeking = !1, removeClass(t, "peeking"), t.height -= unitsized8, updateSize(t)), 0 == t.xvel ? (n ? (t.moveleft = !0, t.xvel = -t.speed) : (t.moveleft = !1, t.xvel = t.speed), ++t.hitcount, TimeHandler.addEvent((function(e) {
--e.hitcount
}), 2, t)) : t.xvel = 0, x && (AudioPlayer.play("Kick"), t.xvel ? scorePlayerShell(e, t) : (jumpEnemy(e, t), e.yvel *= 2, scorePlayerShell(e, t), setBottom(e, t.top - unitsize, !0)), ++t.landing, t.shelltoleft = n, TimeHandler.addEvent((function(e) {
--e.landing
}), 2, t))) : !t.hitcount && (n && t.xvel < 0 || !n && t.xvel > 0) && e.death(e);
break;
case "shell":
if (0 != e.xvel)
if (0 != t.xvel) {
var r = e.xvel;
shiftHoriz(e, e.xvel = t.xvel), shiftHoriz(t, t.xvel = r)
} else score(t, 500), t.death(t);
else 0 != t.xvel && (score(e, 500), e.death(e));
break;
default:
switch (e.group) {
case "enemy":
if (t.xvel) {
if ("koopa" == e.type.split(" ")[0]) {
var i = new Thing(Shell, e.smart);
addThing(i, e.left, e.bottom - i.height * unitsize), killFlip(i), killNormal(e)
} else killFlip(e);
AudioPlayer.play("Kick"), score(e, findScore(t.enemyhitcount), !0), ++t.enemyhitcount
} else e.moveleft = objectToLeft(e, t);
break;
case "item":
if ("shell" != e.type) return;
t.xvel && killFlip(e), e.xvel && killFlip(t)
}
}
}
function moveShell(e) {
if (0 == e.xvel)
if (350 == ++e.counting) addClass(e, "peeking"), e.peeking = !0, e.height += unitsized8, updateSize(e);
else if (490 == e.counting) {
var t = new Thing(e.spawntype, e.smart);
addThing(t, e.left, e.bottom - t.height * unitsize), killNormal(e)
}
}
function collideFriendly(e, t) {
"player" == e.type && (t.action && t.action(e), t.death(t))
}
function jumpEnemy(e, t) {
e.keys.up ? e.yvel = -1.4 * unitsize : e.yvel = -.7 * unitsize, e.xvel *= .91, AudioPlayer.play("Kick"), "item" == t.group && "shell" != t.type || score(t, findScore(e.jumpcount++ + e.jumpers), !0), ++e.jumpers, TimeHandler.addEvent((function(e) {
--e.jumpers
}), 1, e)
}
function Goomba(e) {
e.width = e.height = 8, e.speed = .21 * unitsize, e.toly = unitsize, e.moveleft = e.noflip = !0, e.smart = !1, e.group = "enemy", e.movement = moveSimple, e.collide = collideEnemy, e.death = killGoomba, setCharacter(e, "goomba"), TimeHandler.addSpriteCycleSynched(e, [unflipHoriz, flipHoriz])
}
function killGoomba(e, t) {
if (e.alive)
if (t) killFlip(e);
else {
var n = new Thing(DeadGoomba);
addThing(n, e.left, e.bottom - n.height * unitsize), TimeHandler.addEvent(killNormal, 21, n), killNormal(e)
}
}
function DeadGoomba(e) {
e.width = 8, e.height = 4, e.movement = !1, e.nocollide = e.nocollide = !0, e.death = killNormal, setSolid(e, "deadGoomba")
}
function Koopa(e, t, n) {
e.width = 8, e.height = 12, e.speed = e.xvel = .21 * unitsize, e.moveleft = e.skipoverlaps = !0, e.group = "enemy", e.smart = t;
var x = "koopa";
x += e.smart ? " smart" : " dumb", e.smart && (x += " smart"), n ? (x += " flying", e.winged = !0, 1 == n ? (e.movement = moveJumping, e.jumpheight = 1.17 * unitsize, e.gravity = gravity / 2.8) : (e.movement = moveFloating, e.ytop = e.begin = n[0] * unitsize, e.ybot = e.end = n[1] * unitsize, e.nofall = e.fly = !0, e.changing = e.xvel = 0, e.yvel = e.maxvel = unitsized4)) : (x += " regular", e.smart ? e.movement = moveSmart : e.movement = moveSimple), e.collide = collideEnemy, e.death = killKoopa, setCharacter(e, x), TimeHandler.addSpriteCycleSynched(e, ["one", "two"]), e.toly = unitsizet2
}
function killKoopa(e, t) {
if (e.alive) {
var n;
if (n = t && 2 != t || e.winged ? new Thing(Koopa, e.smart) : new Thing(Shell, e.smart), TimeHandler.addEvent((function(e, t) {
addThing(e, t.left, t.bottom - e.height * unitsize), e.moveleft = t.moveleft
}), 0, n, e), killNormal(e), 2 != t) return n;
killFlip(n)
}
}
function Pirhana(e, t) {
e.width = 8, e.height = 12, e.counter = 0, e.countermax = e.height * unitsize, e.dir = unitsized8, e.toly = unitsizet8, e.nofall = e.deadly = e.nocollidesolid = e.repeat = !0, e.group = "enemy", e.collide = collideEnemy, e.death = killNormal, e.movement = movePirhanaInit, e.death = killPirhana, setCharacter(e, "pirhana")
}
function movePirhanaInit(e) {
e.hidden = !0;
var t = e.visual_scenery = new Thing(Sprite, "Pirhana");
addThing(t, e.left, e.top), TimeHandler.addSpriteCycle(t, ["one", "two"]), e.movement = movePirhanaNew, movePirhanaNew(e, e.height * unitsize)
}
function movePirhanaNew(e, t) {
t = t || e.dir, e.counter += t, shiftVert(e, t), shiftVert(e.visual_scenery, t), (e.counter <= 0 || e.counter >= e.countermax) && (e.movement = !1, e.dir *= -1, TimeHandler.addEvent(movePirhanaRestart, 35, e))
}
function movePirhanaRestart(e) {
var t = getMidX(player);
e.counter >= e.countermax && t > e.left - unitsizet8 && t < e.right + unitsizet8 ? setTimeout(movePirhanaRestart, 7, e) : e.movement = movePirhanaNew
}
function killPirhana(e) {
(e || (e = this)) && (killNormal(e), killNormal(e.visual_scenery))
}
function playerAboveEnemy(e, t) {
return e.bottom < t.top + t.toly
}
function collideEnemy(e, t) {
if (characterIsAlive(e) && characterIsAlive(t) && !(e.nocollidechar && !t.player || t.nocollidechar && !e.player)) {
if ("item" == e.group) return e.collide_primary ? e.collide(t, e) : void 0;
if (!map.underwater && e.player && (e.star && !t.nostar || !t.deadly && objectOnTop(e, t))) {
if (playerAboveEnemy(e, t)) return;
e.player && !e.star ? TimeHandler.addEvent((function(e, t) {
jumpEnemy(e, t)
}), 0, e, t) : t.nocollide = !0;
t.death(t, 2 * e.star);
e.star ? scoreEnemyStar(t) : (scoreEnemyStomp(t), setBottom(e, min(e.bottom, t.top + unitsize))), addClass(e, "hopping"), removeClasses(e, "running skidding jumping one two three"), e.hopping = !0, 1 == player.power && setPlayerSizeSmall(e)
} else e.player ? playerAboveEnemy(e, t) || e.death(e) : t.moveleft = !(e.moveleft = objectToLeft(e, t))
}
}
function Podoboo(e, t) {
e.width = 7, e.height = 8, e.deadly = e.nofall = e.nocollidesolid = e.nofire = !0, e.gravity = map.gravity / 2.1, e.jumpheight = (t || 64) * unitsize, e.speed = -map.maxyvel, e.movement = movePodobooInit, e.collide = collideEnemy, e.betweentime = 70, setCharacter(e, "podoboo")
}
function movePodobooInit(e) {
characterIsAlive(e) && (e.hidden = !0, e.heightnorm = e.top, e.heightfall = e.top - e.jumpheight, TimeHandler.addEvent(podobooJump, e.betweentime, e), e.movement = !1)
}
function podobooJump(e) {
characterIsAlive(e) && (unflipVert(e), e.yvel = e.speed + e.gravity, e.movement = movePodobooUp, e.hidden = !1, setThingSprite(e))
}
function movePodobooUp(e) {
shiftVert(e, e.speed, !0), e.top - gamescreen.top > e.heightfall || (e.nofall = !1, e.movement = movePodobooSwitch)
}
function movePodobooSwitch(e) {
e.yvel <= 0 || (flipVert(e), e.movement = movePodobooDown)
}
function movePodobooDown(e) {
e.top < e.heightnorm || (setTop(e, e.heightnorm, !0), e.movement = !1, e.nofall = e.hidden = !0, e.heightfall = e.top - e.jumpheight, TimeHandler.addEvent(podobooJump, e.betweentime, e))
}
function HammerBro(e) {
e.width = 8, e.height = 12, e.group = "enemy", e.collide = collideEnemy, e.statex = e.counter = e.statey = e.counterx = e.countery = e.level = e.throwcount = 0, e.death = killFlip, e.movement = moveHammerBro, setCharacter(e, "hammerbro"), e.gravity = gravity / 2, TimeHandler.addSpriteCycle(e, ["one", "two"]), TimeHandler.addEvent(throwHammer, 35, e, 7), TimeHandler.addEventInterval(jumpHammerBro, 140, 1 / 0, e)
}
function moveHammerBro(e) {
e.xvel = Math.sin(Math.PI * (e.counter += .007)) / 2.1, lookTowardPlayer(e), e.nocollidesolid = e.yvel < 0 || e.falling
}
function throwHammer(e, t) {
!characterIsAlive(e) || e.nothrow || e.right < -unitsizet32 || (3 != t && switchClass(e, "thrown", "throwing"), TimeHandler.addEvent((function(e) {
if (3 != t) {
if (!characterIsAlive(e)) return;
switchClass(e, "throwing", "thrown"), addThing(new Thing(Hammer, e.lookleft), e.left - unitsizet2, e.top - unitsizet2)
}
t > 0 ? TimeHandler.addEvent(throwHammer, 7, e, --t) : (TimeHandler.addEvent(throwHammer, 70, e, 7), removeClass(e, "thrown"))
}), 14, e))
}
function jumpHammerBro(e) {
if (!characterIsAlive(e)) return !0;
e.resting && (map.floor - e.bottom / unitsize >= jumplev1 - 2 && "floor" != e.resting.name && Math.floor(2 * Math.random()) ? (e.yvel = -.7 * unitsize, e.falling = !0, TimeHandler.addEvent((function(e) {
e.falling = !1
}), 42, e)) : e.yvel = -2.1 * unitsize, e.resting = !1)
}
function Hammer(e, t) {
e.width = e.height = 8, e.nocollidesolid = e.nocollidechar = e.deadly = e.nofire = !0, e.collide = collideEnemy, e.yvel = 1.4 * -unitsize, e.xvel = unitsize / 1.4, t && (e.xvel *= -1), e.gravity = gravity / 2.1, setCharacter(e, "hammer"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 3)
}
function Cannon(e, t, n) {
e.width = 8, e.height = 8 * (t || 1), e.spriteheight = 16, n || (e.movement = moveCannonInit), e.timer = 117, e.repeat = !0, setSolid(e, "cannon")
}
function moveCannonInit(e) {
TimeHandler.addEventInterval((function(e) {
if (!(player.right > e.left - unitsizet8 && player.left < e.right + unitsizet8)) {
var t = new Thing(BulletBill);
objectToLeft(player, e) ? (addThing(t, e.left, e.top), t.direction = t.moveleft = !0, t.xvel *= -1, flipHoriz(t)) : addThing(t, e.left + e.width, e.top), AudioPlayer.playLocal("Bump", e.right)
}
}), 270, 1 / 0, e), e.movement = !1
}
function BulletBill(e) {
e.width = 8, e.height = 7, e.group = "enemy", e.nofall = e.nofire = e.nocollidesolid = e.nocollidechar = !0, e.speed = e.xvel = unitsized2, e.movement = moveSimple, e.collide = collideEnemy, e.death = killFlip, setCharacter(e, "bulletbill")
}
function Bowser(e, t) {
e.width = e.height = 16, e.speed = .28 * unitsize, e.gravity = gravity / 2.8, e.deadly = e.dx = e.lookleft = e.nokillend = e.skipoverlaps = !0, e.moveleft = e.smart = e.movecount = e.jumpcount = e.firecount = e.deathcount = 0, e.killonend = freezeBowser, e.counter = -.7, e.group = "enemy", e.movement = moveBowserInit, e.collide = collideEnemy, e.death = killBowser, setCharacter(e, "bowser"), TimeHandler.addSpriteCycle(e, ["one", "two"]), t && TimeHandler.addEvent(throwHammer, 35, e, 7)
}
function moveBowserInit(e) {
TimeHandler.addEventInterval(bowserJumps, 117, 1 / 0, e), TimeHandler.addEventInterval(bowserFires, 280, 1 / 0, e), TimeHandler.addEventInterval(bowserFires, 350, 1 / 0, e), TimeHandler.addEventInterval(bowserFires, 490, 1 / 0, e), e.movement = moveBowser
}
function moveBowser(e) {
characterIsAlive(player) && (lookTowardPlayer(e), e.lookleft ? e.xvel = Math.sin(Math.PI * (e.counter += .007)) / 1.4 : e.xvel = min(e.xvel + .07, .84))
}
function bowserJumps(e) {
if (!characterIsAlive(e)) return !0;
e.resting && e.lookleft && (e.yvel = -1.4 * unitsize, e.resting = !1, e.nocollidesolid = !0, TimeHandler.addEventInterval((function(e) {
if (e.yvel > unitsize) return e.nocollidesolid = !1, !0
}), 3, 1 / 0, e))
}
function bowserFires(e) {
if (!characterIsAlive(e) || !characterIsAlive(player)) return !0;
e.lookleft && (addClass(e, "firing"), AudioPlayer.playLocal("Bowser Fires", e.left), TimeHandler.addEvent((function(e) {
var t = e.top + unitsizet4,
n = new Thing(BowserFire, roundDigit(player.bottom, unitsizet8));
removeClass(e, "firing"), addThing(n, e.left - unitsizet8, t), AudioPlayer.play("Bowser Fires")
}), 14, e))
}
function killBowser(e, t) {
if (t) return e.nofall = !1, killFlip(e);
5 == ++e.deathcount && (e.yvel = e.speed = e.movement = 0, killFlip(e, 350), score(e, 5e3))
}
function freezeBowser(e) {
e.movement = !1, thingStoreVelocity(e)
}
function BowserFire(e, t) {
e.width = 12, e.height = 4, e.xvel = -.63 * unitsize, e.deadly = e.nofall = e.nocollidesolid = e.nofire = !0, e.collide = collideEnemy, t && (e.ylev = t, e.movement = moveFlying), setCharacter(e, "bowserfire"), TimeHandler.addSpriteCycle(e, [unflipVert, flipVert])
}
function moveFlying(e) {
round(e.bottom) != round(e.ylev) ? shiftVert(e, min(max(0, e.ylev - e.bottom), unitsize)) : e.movement = !1
}
function WaterBlock(e, t) {
e.height = 16, e.width = t, e.spritewidth = e.spriteheight = 1 / scale, e.repeat = !0, setSolid(e, "water-block")
}
function Blooper(e) {
e.width = 8, e.height = 12, e.nocollidesolid = e.nofall = e.moveleft = 1, e.squeeze = e.counter = 0, e.speed = unitsized2, e.xvel = e.speedinv = -unitsized4, e.movement = moveBlooper, e.collide = collideEnemy, e.death = killFlip, setCharacter(e, "blooper")
}
function moveBlooper(e) {
switch (e.counter) {
case 56:
e.squeeze = !0, ++e.counter;
break;
case 63:
squeezeBlooper(e);
break;
default:
++e.counter
}
e.top < unitsizet16 + 10 && squeezeBlooper(e), e.squeeze ? e.yvel = max(e.yvel + .021, .7) : e.yvel = min(e.yvel - .035, -.7), shiftVert(e, e.yvel, !0), e.squeeze || (player.left > e.right + unitsizet8 ? e.xvel = min(e.speed, e.xvel + unitsized32) : player.right < e.left - unitsizet8 && (e.xvel = max(e.speedinv, e.xvel - unitsized32)))
}
function squeezeBlooper(e) {
2 != e.squeeze && addClass(e, "squeeze"), e.squeeze = 2, e.xvel /= 1.17, setHeight(e, 10, !0, !0), (e.top > player.bottom || e.bottom > 360) && unsqueezeBlooper(e)
}
function unsqueezeBlooper(e) {
e.squeeze = !1, removeClass(e, "squeeze"), e.counter = 0, setHeight(e, 12, !0, !0)
}
function CheepCheep(e, t, n) {
e.width = e.height = 8, e.group = "enemy";
var x = "cheepcheep " + (t ? "red" : "");
e.red = t, setCheepVelocities(e), n ? (x += " jumping", e.jumping = !0, e.movement = moveCheepJumping) : e.movement = moveCheepInit, e.nofall = e.nocollidesolid = e.nocollidechar = !0, e.death = killFlip, e.collide = collideEnemy, setCharacter(e, x), TimeHandler.addSpriteCycle(e, ["one", "two"])
}
function setCheepVelocities(e) {
e.red ? (e.xvel = -unitsized4, e.yvel = unitsize / -24) : (e.xvel = unitsize / -6, e.yvel = -unitsized32)
}
function moveCheepInit(e) {
setCheepVelocities(e), e.top < player.top && (e.yvel *= -1), moveCheep(e), e.movement = moveCheep
}
function moveCheep(e) {
shiftVert(e, e.yvel)
}
function moveCheepJumping(e) {
shiftVert(e, e.yvel += unitsize / 14)
}
function startCheepSpawn() {
return map.zone_cheeps = TimeHandler.addEventInterval((function() {
if (!map.zone_cheeps) return !0;
var e = new Thing(CheepCheep, !0, !0);
addThing(e, Math.random() * player.left * player.maxspeed / unitsized2, gamescreen.height * unitsize), e.xvel = Math.random() * player.maxspeed, e.yvel = -2.33 * unitsize, flipHoriz(e), e.movement = function(e) {
e.top < ceilmax ? e.movement = moveCheepJumping : shiftVert(e, e.yvel)
}
}), 21, 1 / 0)
}
function Bubble(e) {
e.width = e.height = 2, e.nofall = e.nocollide = !0, e.movement = function(e) {
e.top < unitsizet16 ? killNormal(e) : shiftVert(e, e.yvel)
}, e.yvel = -unitsized4, setCharacter(e, "bubble")
}
function Lakitu(e, t) {
e.width = 8, e.height = 12, e.nofall = e.noshiftx = e.nocollidesolid = !0, e.playerdiff = e.counter = 0, e.dir = -1, e.norepeat = t, e.playerdiff = unitsizet16, e.group = "enemy", e.collide = collideEnemy, e.movement = moveLakituInit, e.death = killLakitu, setCharacter(e, "lakitu out"), map.has_lakitu = e
}
function moveLakituInit(e) {
if (map.has_lakitu && e.norepeat) return killNormal(e);
TimeHandler.addEventInterval((function(e) {
if (!e.alive) return !0;
throwSpiny(e)
}), 140, 1 / 0, e), e.movement = moveLakituInit2, moveLakituInit2(e), map.has_lakitu = e
}
function moveLakituInit2(e) {
if (e.right < player.left) return moveLakitu(e), e.movement = moveLakitu, map.lakitu = e, !0;
shiftHoriz(e, -unitsize)
}
function moveLakitu(e) {
player.xvel > unitsized8 && player.left > gamescreen.width * unitsized2 ? e.left < player.right + unitsizet16 && (slideToXLoc(e, player.right + unitsizet32 + player.xvel, 1.4 * player.maxspeed), e.counter = 0) : (e.counter += .007, slideToXLoc(e, player.left + player.xvel + 117 * Math.sin(Math.PI * e.counter), .7 * player.maxspeed))
}
function throwSpiny(e) {
if (!characterIsAlive(e)) return !1;
switchClass(e, "out", "hiding"), TimeHandler.addEvent((function(e) {
if (e.dead) return !1;
var t = new Thing(SpinyEgg);
addThing(t, e.left, e.top), t.yvel = -2.1 * unitsize, switchClass(e, "hiding", "out")
}), 21, e)
}
function killLakitu(e) {
delete e.noscroll, killFlip(e)
}
function Spiny(e) {
e.width = e.height = 8, e.group = "enemy", e.speed = .21 * unitsize, e.deadly = e.moveleft = !0, e.smart = !1, e.death = killFlip, e.collide = collideEnemy, e.movement = moveSimple, setCharacter(e, "spiny"), TimeHandler.addSpriteCycle(e, ["one", "two"])
}
function SpinyEgg(e) {
e.height = 8, e.width = 7, e.group = "enemy", e.deadly = !0, e.movement = moveSpinyEgg, e.spawntype = Spiny, e.spawner = e.death = createSpiny, e.collide = collideEnemy, setCharacter(e, "spinyegg"), TimeHandler.addSpriteCycle(e, ["one", "two"])
}
function moveSpinyEgg(e) {
e.resting && createSpiny(e)
}
function createSpiny(e) {
var t = new Thing(Spiny);
addThing(t, e.left, e.top), t.moveleft = objectToLeft(player, t), killNormal(e)
}
function Beetle(e) {
e.width = e.height = 8, e.group = "enemy", e.speed = e.xvel = .21 * unitsize, e.nofire = 2, e.moveleft = !0, e.smart = !1, e.collide = collideEnemy, e.movement = moveSmart, e.death = killBeetle, setCharacter(e, "beetle"), TimeHandler.addSpriteCycleSynched(e, ["one", "two"])
}
function killBeetle(e, t) {
if (e.alive) {
var n;
if (n = new Thing(t && 2 != t ? Koopa : BeetleShell, e.smart), TimeHandler.addEvent((function(e, t) {
addThing(e, t.left, t.bottom - e.height * unitsize), e.moveleft = t.moveleft
}), 0, n, e), killNormal(e), 2 != t) return n;
killFlip(n)
}
}
function BeetleShell(e) {
e.width = e.height = 8, e.nofire = !0, e.group = "item", e.speed = unitsizet2, e.moveleft = e.xvel = e.move = e.hitcount = e.peeking = e.counting = e.landing = e.enemyhitcount = 0, e.movement = moveShell, e.collide = hitShell, e.death = killFlip, e.spawntype = Beetle, setCharacter(e, "shell beetle")
}
function Coin(e, t) {
e.group = "coin", e.width = 5, e.height = 7, e.nofall = e.coin = e.nofire = e.nocollidechar = e.nokillend = e.onlyupsolids = e.skipoverlaps = !0, e.tolx = 0, e.toly = unitsized2, e.collide = hitCoin, e.animate = coinEmerge, e.death = killNormal, setCharacter(e, "coin one"), TimeHandler.addSpriteCycleSynched(e, ["one", "two", "three", "two", "one"]), t && (e.movement = coinBecomesSolid)
}
function coinBecomesSolid(e) {
switchContainers(e, characters, solids), e.movement = !1
}
function hitCoin(e, t) {
e.player && (AudioPlayer.play("Coin"), score(e, 200, !1), gainCoin(), killNormal(t))
}
function gainCoin() {
++data.coins.amount >= 100 && (data.coins.amount = 0, gainLife()), updateDataElement(data.coins)
}
function coinEmerge(e, t) {
AudioPlayer.play("Coin"), removeClass(e, "still"), switchContainers(e, characters, scenery), score(e, 200, !1), gainCoin(), e.nocollide = e.alive = e.nofall = e.emerging = !0, e.blockparent ? e.movement = coinEmergeMoveParent : e.movement = coinEmergeMove, e.yvel = -unitsize, TimeHandler.addEvent((function(e) {
e.yvel *= -1
}), 25, e), TimeHandler.addEvent((function(e) {
killNormal(e), deleteThing(e, scenery, scenery.indexOf(e))
}), 49, e), TimeHandler.addEventInterval(coinEmergeMovement, 1, 1 / 0, e, t), TimeHandler.clearClassCycle(e, 0), addClass(e, "anim"), TimeHandler.addSpriteCycle(e, ["anim1", "anim2", "anim3", "anim4", "anim3", "anim2"], 0, 5)
}
function coinEmergeMovement(e, t) {
if (!e.alive) return !0;
shiftVert(e, e.yvel)
}
function coinEmergeMove(e) {
shiftVert(e, e.yvel, !0)
}
function coinEmergeMoveParent(e) {
e.bottom >= e.blockparent.bottom ? killNormal(e) : shiftVert(e, e.yvel, !0)
}
function Player(e) {
setPlayerSizeSmall(e), e.walkspeed = unitsized2, e.canjump = e.nofiredeath = e.nofire = e.player = e.nokillend = 1, e.numballs = e.moveleft = e.skidding = e.star = e.dying = e.nofall = e.maxvel = e.paddling = e.jumpers = e.landing = 0, e.running = "", e.power = data.playerpower, e.maxspeed = e.maxspeedsave = 1.35 * unitsize, e.scrollspeed = 1.75 * unitsize, e.keys = new Keys, e.fire = playerFires, e.movement = movePlayer, e.death = killPlayer, setCharacter(e, "player normal small still"), e.tolx = unitsizet2, e.toly = 0, e.gravity = map.gravity, map.underwater && (e.swimming = !0, TimeHandler.addSpriteCycle(e, ["swim1", "swim2"], "swimming", 5))
}
function placePlayer(e, t) {
clearOldPlayer(), window.player = new Thing(Player), window.luigi ? window.player.title = "Luigi" : window.player.title = "Mario";
var n = addThing(player, e || unitsizet16, t || (map.floor - player.height) * unitsize);
return data.playerpower >= 2 && (playerGetsBig(player, !0), 3 == data.playerpower && playerGetsFire(player, !0)), n
}
function clearOldPlayer() {
window.player && (player.alive = !1, player.dead = !0)
}
function Keys() {
this.run = this.crouch = this.jump = this.jumplev = this.sprint = 0
}
function thingStoreVelocity(e, t) {
e.xvelOld = e.xvel || 0, e.yvelOld = e.yvel || 0, e.nofallOld = e.nofall || !1, e.nocollideOld = e.nocollide || !1, e.movementOld = e.movement || e.movementOld, e.nofall = e.nocollide = !0, e.xvel = e.yvel = !1, t || (e.movement = !1)
}
function thingRetrieveVelocity(e, t) {
t || (e.xvel = e.xvelOld || 0, e.yvel = e.yvelOld || 0), e.movement = e.movementOld || e.movement, e.nofall = e.nofallOld || !1, e.nocollide = e.nocollideOld || !1
}
function removeCrouch() {
player.crouching = !1, player.toly = player.tolyold || 0, 1 != player.power && (removeClass(player, "crouching"), player.height = 16, updateBottom(player, 0), updateSize(player))
}
function playerShroom(e) {
e.shrooming || (AudioPlayer.play("Powerup"), score(e, 1e3, !0), 3 != e.power && (e.shrooming = !0, (2 == ++e.power ? playerGetsBig : playerGetsFire)(e), storePlayerStats()))
}
function playerGetsBig(e, t) {
if (setPlayerSizeLarge(e), e.keys.down = 0, removeClasses(player, "crouching small"), updateBottom(e, 0), updateSize(e), t) addClass(e, "large");
else {
addClass(player, "shrooming");
for (var n = [1, 2, 1, 2, 3, 2, 3], x = n.length - 1; x >= 0; --x) n[x] = "shrooming" + n[x];
thingStoreVelocity(player), n.push((function(e, t) {
return e.shrooming = t.length = 0, addClass(e, "large"), removeClasses(e, "shrooming shrooming3"), thingRetrieveVelocity(player), !0
})), TimeHandler.addSpriteCycle(e, n, "shrooming", 6)
}
}
function playerGetsSmall(e) {
var t = player.bottom;
e.keys.down = 0, thingStoreVelocity(e), addClass(e, "small"), flicker(e), removeClasses(player, "running skidding jumping fiery"), addClass(player, "paddling"), TimeHandler.addEvent((function(e) {
removeClass(e, "large"), setPlayerSizeSmall(e), setBottom(e, t - unitsize)
}), 21, player), TimeHandler.addEvent((function(e) {
thingRetrieveVelocity(e, !1), e.nocollidechar = !0, removeClass(e, "paddling"), (e.running || e.xvel) && addClass(e, "running"), TimeHandler.addEvent(setThingSprite, 1, e)
}), 42, player), TimeHandler.addEvent((function(e) {
e.nocollidechar = !1
}), 70, player)
}
function playerGetsFire(e) {
removeClass(e, "intofiery"), addClass(e, "fiery"), player.shrooming = !1
}
function setPlayerSizeSmall(e) {
setSize(e, 8, 8, !0), updateSize(e)
}
function setPlayerSizeLarge(e) {
setSize(e, 8, 16, !0), updateSize(e)
}
function movePlayer(e) {
if (e.keys.up) {
if (e.keys.jump > 0 && (e.yvel <= 0 || map.underwater) && (map.underwater && playerPaddles(e), e.resting ? (e.resting.xvel && (e.xvel += e.resting.xvel), e.resting = !1) : (e.jumping || map.underwater || switchClass(e, "running skidding", "jumping"), e.jumping = !0), !map.underwater)) {
var t = unitsize / pow(++e.keys.jumplev, map.jumpmod - .0014 * e.xvel);
e.yvel = max(e.yvel - t, map.maxyvelinv)
}
} else e.keys.jump = 0;
e.keys.crouch && !e.crouching && e.resting && (1 != e.power && (e.crouching = !0, addClass(e, "crouching"), e.height = 11, e.tolyold = e.toly, e.toly = unitsizet4, updateBottom(e, 0), updateSize(e)), e.resting.actionTop && e.resting.actionTop(e, e.resting, e.resting.transport));
var n = 0;
if (0 == e.keys.run || e.crouching) e.xvel *= .98, n = .035;
else {
var x = e.keys.run * (.098 * ((e.keys.sprint && !map.underwater || 0) + 1));
e.xvel += x || 0, e.xvel *= .98, n = 7e-4, signBool(e.keys.run) == e.moveleft ? e.skidding || (addClass(e, "skidding"), e.skidding = !0) : e.skidding && (removeClass(e, "skidding"), e.skidding = !1)
}
e.xvel > n ? e.xvel -= n : e.xvel < -n ? e.xvel += n : 0 != e.xvel && (e.xvel = 0, window.nokeys || 0 != e.keys.run || (e.keys.left_down ? e.keys.run = -1 : e.keys.right_down && (e.keys.run = 1))), Math.abs(e.xvel) < .14 ? e.running && (e.running = !1, 1 == player.power && setPlayerSizeSmall(e), removeClasses(e, "running skidding one two three"), addClass(e, "still"), TimeHandler.clearClassCycle(e, "running")) : e.running || (e.running = !0, switchClass(e, "still", "running"), playerStartRunningCycle(e), 1 == e.power && setPlayerSizeSmall(e)), e.xvel > 0 ? (e.xvel = min(e.xvel, e.maxspeed), e.moveleft && (e.resting || map.underwater) && (unflipHoriz(e), e.moveleft = !1)) : e.xvel < 0 && (e.xvel = max(e.xvel, -1 * e.maxspeed), e.moveleft || !e.resting && !map.underwater || (flipHoriz(e), e.moveleft = !0)), e.resting && (e.hopping && (removeClass(e, "hopping"), e.xvel && addClass(e, "running"), e.hopping = !1), e.keys.jumplev = e.yvel = e.jumpcount = 0, e.jumping && (e.jumping = !1, removeClass(e, "jumping"), 1 == e.power && setPlayerSizeSmall(e), addClass(e, abs(e.xvel) < .14 ? "still" : "running")), e.paddling && (e.paddling = e.swimming = !1, removeClasses(e, "paddling swim1 swim2"), TimeHandler.clearClassCycle(e, "paddling"), addClass(e, "running"))), isNaN(e.xvel)
}
function playerStartRunningCycle(e) {
e.running = TimeHandler.addSpriteCycle(e, ["one", "two", "three", "two"], "running", setPlayerRunningCycler)
}
function setPlayerRunningCycler(e) {
e.timeout = 5 + ceil(player.maxspeedsave - abs(player.xvel))
}
function playerPaddles(e) {
e.paddling || (removeClasses(e, "skidding paddle1 paddle2 paddle3 paddle4 paddle5"), addClass(e, "paddling"), TimeHandler.clearClassCycle(e, "paddling_cycle"), TimeHandler.addSpriteCycle(e, ["paddle1", "paddle2", "paddle3", "paddle3", "paddle2", "paddle1", function() {
return e.paddling = !1
}], "paddling_cycle", 5)), e.paddling = e.swimming = !0, e.yvel = -.84 * unitsize
}
function playerBubbles() {
addThing(new Thing(Bubble), player.right, player.top)
}
function movePlayerVine(e) {
var t = e.attached;
if (e.bottom < t.top) return unattachPlayer(e);
if (e.keys.run == e.attachoff) {
for (; objectsTouch(e, t);) shiftHoriz(e, e.keys.run, !0);
return unattachPlayer(e)
}
if (e.keys.up) e.animatednow = !0, shiftVert(e, -1 * unitsized4, !0);
else if (e.keys.crouch) {
if (e.animatednow = !0, shiftVert(e, unitsized2, !0), e.bottom > t.bottom - unitsizet4) return unattachPlayer(e)
} else e.animatednow = !1;
e.animatednow && !e.animated ? addClass(e, "animated") : !e.animatednow && e.animated && removeClass(e, "animated"), e.animated = e.animatednow, e.bottom < -16 && (locMovePreparations(e), !t.locnum && map.random ? goToTransport(["Random", "Sky", "Vine"]) : shiftToLocation(t.locnum))
}
function unattachPlayer(e) {
e.movement = movePlayer, removeClasses(e, "climbing", "animated"), TimeHandler.clearClassCycle(e, "climbing"), e.yvel = e.skipoverlaps = e.attachoff = e.nofall = e.climbing = e.attached = e.attached.attached = !1, e.xvel = e.keys.run
}
function playerHopsOff(e, t, n) {
removeClasses(e, "climbing running"), addClass(e, "jumping"), e.piping = e.nocollide = e.nofall = e.climbing = !1, e.gravity = gravity / 4, e.xvel = 3.5, e.yvel = -3.5, TimeHandler.addEvent((function(e) {
unflipHoriz(e), e.gravity = gravity, e.movement = movePlayer, e.attached = !1, n && (addClass(e, "running"), playerStartRunningCycle(e))
}), 21, e)
}
function playerFires() {
if (!(player.numballs >= 2)) {
++player.numballs, addClass(player, "firing");
var e = new Thing(FireBall, player.moveleft, !0);
e.yvel = unitsize, addThing(e, player.right + unitsized4, player.top + unitsizet8), player.moveleft && setRight(e, player.left - unitsized4, !0), e.animate(e), e.ondelete = fireDeleted, TimeHandler.addEvent((function(e) {
removeClass(e, "firing")
}), 7, player)
}
}
function emergeFire(e) {
AudioPlayer.play("Fireball")
}
function playerStar(e) {
e.star || (++e.star, AudioPlayer.play("Powerup"), AudioPlayer.playTheme("Star", !0), TimeHandler.addEvent(playerRemoveStar, 560, e), switchClass(e, "normal", "star"), TimeHandler.addSpriteCycle(e, ["star1", "star2", "star3", "star4"], "star", 5))
}
function playerRemoveStar(e) {
e.star && (--e.star, removeClasses(e, "star star1 star2 star3 star4"), TimeHandler.clearClassCycle(e, "star"), addClass(e, "normal"), AudioPlayer.playTheme())
}
function killPlayer(e, t) {
if (e.alive && !e.flickering && !e.dying) {
if (2 == t) notime = !0, e.dead = e.dying = !0;
else {
if (!t && e.power > 1) return AudioPlayer.play("Power Down"), e.power = 1, storePlayerStats(), playerGetsSmall(e);
2 != t && (TimeHandler.clearAllCycles(e), setSize(e, 7.5, 7, !0), updateSize(e), setClass(e, "character player dead"), nokeys = notime = e.dying = !0, thingStoreVelocity(e), containerForefront(e, characters), TimeHandler.addEvent((function(e) {
thingRetrieveVelocity(e, !0), e.nocollide = !0, e.movement = e.resting = !1, e.gravity = gravity / 2.1, e.yvel = -1.4 * unitsize
}), 7, e))
}
AudioPlayer.pause(), window.editing || AudioPlayer.play("Player Dies"), e.nocollide = e.nomove = nokeys = 1, --data.lives.amount, map.random || (data.score.amount = data.scoreold), window.editing ? setTimeout((function() {
editorSubmitGameFuncPlay(), editor.playing = editor.playediting = !0
}), 35 * timer) : !map.random || data.lives.amount <= 0 ? window.reset = setTimeout(data.lives.amount ? setMap : gameOver, 280 * timer) : (nokeys = notime = !1, updateDataElement(data.score), updateDataElement(data.lives), TimeHandler.addEvent((function() {
playerDropsIn(), AudioPlayer.playTheme()
}), 117))
}
}
function playerDropsIn() {
clearOldPlayer(), placePlayer(unitsizet16, -1 * unitsizet8 + map.underwater * unitsize * 24), flicker(player), map.underwater ? player.gravity = gravity / 2.8 : (player.nocollide = !0, TimeHandler.addEvent((function() {
player.nocollide = !1, addThing(new Thing(RestingStone), player.left, player.bottom + player.yvel)
}), map.respawndist || 17))
}
function gameOver() {
gameon = !1, pause(), AudioPlayer.pauseTheme(), AudioPlayer.play("Game Over");
var e = "<div style='font-size:49px;padding-top: " + (innerHeight / 2 - 28) + "px'>GAME OVER</div>";
e += "</p>", body.className = "Night", body.innerHTML = e, window.gamecount = 1 / 0, clearPlayerStats(), setTimeout(gameRestart, 7e3)
}
function gameRestart() {
seedlast = .007, body.style.visibility = "hidden", body.innerHTML = body.style.paddingTop = body.style.fontSize = "", body.appendChild(canvas), gameon = !0, map.random ? setMapRandom() : setMap(1, 1), TimeHandler.addEvent((function() {
body.style.visibility = ""
})), setLives(3)
}
function Floor(e, t, n) {
e.width = 8 * (t || 1), e.height = 8 * n || unitsizet32, e.spritewidth = 8, e.spriteheight = 8, e.repeat = !0, setSolid(e, "floor")
}
function Clouds(e, t) {
e.width = 8 * t, e.height = 8, setSolid(e, "clouds")
}
function Brick(e, t) {
if (e.width = e.height = 8, e.used = !1, e.bottomBump = brickBump, t)
if (t instanceof Array)
for (e.contents = t; e.contents.length < 3;) e.contents.push(!1);
else e.contents = [t, !1, !1];
else e.contents = !1;
e.death = killNormal, setSolid(e, "brick unused"), e.tolx = 1
}
function brickBump(e, t) {
if (!e.up && "player" == t.type && (AudioPlayer.play("Bump"), !e.used)) {
if (e.up = t, t.power > 1 && !e.contents) return TimeHandler.addEvent(brickBreak, 2, e, t);
blockBumpMovement(e), e.contents && (player.power > 1 && e.contents[0] == Mushroom && !e.contents[1] && (e.contents[0] = FireFlower), TimeHandler.addEvent((function(e) {
var t = e.contents,
n = new Thing(t[0], t[1], t[2]);
addThing(n, e.left, e.top), setMidXObj(n, e, !0), n.blockparent = e, n.animate(n, e), e.contents[0] == Coin ? (e.lastcoin && makeUsedBlock(e), TimeHandler.addEvent((function(e) {
e.lastcoin = !0
}), 245, e)) : makeUsedBlock(e)
}), 7, e))
}
}
function makeUsedBlock(e) {
e.used = !0, switchClass(e, "unused", "used")
}
function brickBreak(e, t) {
AudioPlayer.play("Break Block"), score(e, 50), e.up = t, TimeHandler.addEvent(placeShards, 1, e), killNormal(e)
}
function placeShards(e) {
for (var t, n = 0; n < 4; ++n) addThing(t = new Thing(BrickShard), e.left + (n < 2) * e.width * unitsize - unitsizet2, e.top + n % 2 * e.height * unitsize - unitsizet2), t.xvel = unitsized2 - unitsize * (n > 1), t.yvel = -1.4 * unitsize + n % 2, TimeHandler.addEvent(killNormal, 350, t)
}
function BrickShard(e) {
e.width = e.height = 4, e.nocollide = !0, e.death = killNormal, setCharacter(e, "brickshard"), TimeHandler.addSpriteCycle(e, [unflipHoriz, flipHoriz])
}
function attachEmerge(e, t) {
e.animate = setInterval((function() {
setBottom(e, t.top, !0), t.up || (clearInterval(e.animate), e.animate = !1)
}), timer)
}
function Block(e, t, n) {
if (e.width = e.height = 8, e.used = !1, e.bottomBump = blockBump, t)
if (t instanceof Array)
for (e.contents = t; e.contents.length < 3;) e.contents.push(!1);
else e.contents = [t, !1, !1];
else e.contents = [Coin];
e.death = killNormal, setSolid(e, "Block unused"), e.hidden = !!n && (e.hidden = e.skipoverlaps = !0), e.tolx = 1, TimeHandler.addSpriteCycleSynched(e, ["one", "two", "three", "two", "one"])
}
function blockBump(e, t) {
"player" == t.type && (e.used ? AudioPlayer.play("Bump") : (e.used = 1, e.hidden = e.hidden = e.skipoverlaps = !1, e.up = t, blockBumpMovement(e), removeClass(e, "hidden"), switchClass(e, "unused", "used"), player.power > 1 && e.contents[0] == Mushroom && !e.contents[1] && (e.contents[0] = FireFlower), TimeHandler.addEvent(blockContentsEmerge, 7, e)))
}
function blockContentsEmerge(e) {
var t = new Thing(e.contents[0], e.contents[1], e.contents[2]);
addThing(t, e.left, e.top), setMidXObj(t, e, !0), t.blockparent = e, t.animate(t, e)
}
function Pipe(e, t, n) {
e.width = e.spritewidth = 16, e.height = 8 * (t || 1), !1 !== n && (e.actionTop = intoPipeVert, e.transport = n), setSolid(e, "pipe")
}
function PipeSide(e, t, n) {
e.width = e.spritewidth = n ? 8 : 19.5, e.height = e.spriteheight = 16, t && (e.actionLeft = intoPipeHoriz, e.transport = t), setSolid(e, "pipe side " + (n ? "small" : ""))
}
function PipeVertical(e, t) {
e.spritewidth = e.width = 16, e.spriteheight = e.repeat = 1, e.height = t, setSolid(e, "pipe vertical")
}
function Vine(e, t) {
e.width = e.spriteheight = 7, e.height = 0, e.locnum = t, e.nocollide = e.nofall = e.repeat = !0, e.animate = vineEmerge, e.movement = vineMovement, setCharacter(e, "vine")
}
function vineEmerge(e, t) {
AudioPlayer.play("Vine Emerging"), setHeight(e, 0), e.movement = vineMovement, TimeHandler.addEvent(vineEnable, 14, e), TimeHandler.addEventInterval(vineStay, 1, 14, e, t)
}
function vineStay(e, t) {
setBottom(e, t.top)
}
function vineEnable(e) {
e.nocollide = !1, e.collide = touchVine
}
function vineMovement(e) {
increaseHeightTop(e, unitsized4), e.attached && shiftVert(e.attached, -unitsized4, !0)
}
function touchVine(e, t) {
!e.player || e.attached || e.climbing || e.bottom > t.bottom + unitsizet2 || (t.attached = e, e.attached = t, e.nofall = e.skipoverlaps = !0, e.xvel = e.yvel = e.resting = e.jumping = e.jumpcount = e.running = 0, e.attachleft = !objectToLeft(e, t), e.attachoff = 2 * e.attachleft - 1, e.movementsave = e.movement, e.movement = movePlayerVine, e.keys = new Keys, TimeHandler.clearClassCycle(e, "running"), removeClass(e, "running skidding"), unflipHoriz(e), e.attachleft && flipHoriz(e), addClass(e, "climbing"), e.climbing = TimeHandler.addSpriteCycle(e, ["one", "two"], "climbing"), lookTowardThing(e, t), e.attachleft ? setLeft(e, t.right - unitsizet4) : setRight(e, t.left + unitsizet4))
}
function Springboard(e) {
e.width = 8, e.height = e.heightnorm = 14.5, e.tension = e.tensionsave = 0, e.dir = 1, e.collide = collideSpring, setSolid(e, "springboard")
}
function collideSpring(e, t) {
return e.yvel >= 0 && e.player && !t.tension && characterOnSolid(e, t) ? springPlayerInit(t, e) : characterTouchedSolid(e, t)
}
function springPlayerInit(e, t) {
e.tension = e.tensionsave = max(.77 * t.yvel, unitsize), t.movement = movePlayerSpringDown, t.spring = e, t.xvel /= 2.8
}
function movePlayerSpringDown(e) {
return objectsTouch(e, e.spring) ? e.spring.height < 2.5 * unitsize || e.spring.tension < unitsized32 ? (e.movement = movePlayerSpringUp, void(e.spring.movement = moveSpringUp)) : ((e.left < e.spring.left + unitsizet2 || e.right > e.spring.right - unitsizet2) && (e.xvel /= 1.4), reduceSpringHeight(e.spring, e.spring.tension), setBottom(e, e.spring.top, !0), e.spring.tension /= 2, void updateSize(e.spring)) : (e.movement = movePlayer, e.spring.movement = moveSpringUp, void(e.spring = !1))
}
function movePlayerSpringUp(e) {
if (!e.spring || !objectsTouch(e, e.spring)) return e.spring = !1, void(e.movement = movePlayer)
}
function moveSpringUp(e) {
reduceSpringHeight(e, -e.tension), e.tension *= 2, e == player.spring && setBottom(player, e.top, !0), e.height > e.heightnorm && (e == player.spring && (player.yvel = max(-unitsizet2, -.98 * e.tensionsave), player.resting = player.spring = !1), reduceSpringHeight(e, (e.height - e.heightnorm) * unitsize), e.tension = e.tensionsave = e.movement = !1)
}
function reduceSpringHeight(e, t) {
reduceHeight(e, t, !0)
}
function Stone(e, t, n) {
e.width = 8 * t || 8, e.height = 8 * n || 8, e.repeat = !0, setSolid(e, "Stone")
}
function GenericStone(e, t, n) {
return Stone(e, t, n)
}
function RestingStone(e) {
e.width = e.height = 8, e.used = !1, e.movement = RestingStoneUnused, setSolid(e, "Stone hidden"), e.title = "Stone"
}
function RestingStoneUnused(e) {
if (player.resting) {
if (player.resting != e) return killNormal(e);
e.movement = RestingStoneUsed, removeClass(e, "hidden"), setThingSprite(player)
}
}
function RestingStoneUsed(e) {
if (!player.resting) return killNormal(e)
}
function CastleBlock(e, t, n) {
e.width = e.height = 8;
var x, r, i = !1;
t instanceof Array ? (x = t[0], r = t[1], i = n) : (x = t, r = n), setSolid(e, i ? "castleblockinvis" : "castleblock"), x && (e.balls = new Array(x), e.dt = .07 * (r ? 1 : -1), e.timeout = round(7 / (abs(r) || 1)), e.movement = castleBlockSpawn, e.timer = e.counter = 0, e.angle = .25, e.spawn_as_char = !0)
}
function castleBlockSpawn(e) {
for (var t = 0; t < e.balls.length; ++t) {
spawn = new Thing(CastleFireBall, 4 * t);
var n = e.width * unitsized4,
x = e.left + n,
r = e.top + n;
e.balls[t] = addThing(spawn, x + t * unitsize * 3, r + t * unitsize * 3)
}
e.movement = !1;
abs(e.dt);
TimeHandler.addEventInterval(castleBlockEvent, e.timeout, 1 / 0, e)
}
function castleBlockEvent(e) {
e.midx = e.left, e.midy = e.top, e.counter = 0, e.angle += e.dt;
for (var t = 1; t < e.balls.length; ++t) setMidX(e.balls[t], e.midx + t * unitsizet4 * Math.cos(e.angle * Math.PI), !0), setMidY(e.balls[t], e.midy + t * unitsizet4 * Math.sin(e.angle * Math.PI), !0)
}
function CastleFireBall(e, t) {
e.width = e.height = 4, e.deadly = e.nofire = e.nocollidechar = e.nocollidesolid = e.nofall = e.nostar = e.outerok = e.skipoverlaps = !0, e.movement = !1, e.collide = collideEnemy, setCharacter(e, "fireball castle"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "four"], 4)
}
function CastleBridge(e, t) {
e.height = 8, e.width = 8 * t || 4, e.spritewidth = 4, e.repeat = !0, setSolid(e, "CastleBridge")
}
function CastleChain(e) {
e.height = 8, e.width = e.spritewidth = 7.5, e.nocollide = !0, setSolid(e, "castlechain")
}
function CastleAxe(e) {
e.width = e.height = 8, e.spritewidth = e.spriteheight = 8, e.nocollide = !0, setSolid(e, "castleaxe"), TimeHandler.addSpriteCycle(e, ["one", "two", "three", "two"])
}
function CastleAxeFalls(e, t) {
var n = t.axe;
!e.player || e.right < n.left + unitsize || e.bottom > n.bottom - unitsize || (killNormal(n), killNormal(t), notime = nokeys = !0, thingStoreVelocity(e), killOtherCharacters(), TimeHandler.addEvent(killNormal, 7, n.chain), TimeHandler.addEvent(CastleAxeKillsBridge, 14, n.bridge, n), AudioPlayer.pauseTheme(), AudioPlayer.playTheme("World Clear", !1, !1))
}
function CastleAxeKillsBridge(e, t) {
e.width -= 2, e.right -= unitsizet2, e.width > 0 ? TimeHandler.addEvent(CastleAxeKillsBridge, 1, e, t) : (e.width = 0, TimeHandler.addEvent(CastleAxeKillsBowser, 1, t.bowser)), setWidth(e, e.width)
}
function CastleAxeKillsBowser(e) {
e.nofall = !1, e.nothrow = !0, ++player.star, TimeHandler.addEvent(CastleAxeContinues, 35, player)
}
function CastleAxeContinues(e) {
map.canscroll = !0, startWalking(e)
}
function Toad(e) {
e.width = 16, e.height = e.spriteheight = 12, e.group = "toad", setSolid(e, "toad npc")
}
function Peach(e) {
e.width = 16, e.height = e.spriteheight = 12, e.group = "peach", setSolid(e, "peach npc")
}
function collideCastleNPC(e, t) {
killNormal(t), e.keys.run = 0, TimeHandler.addEvent((function(e) {
var t;
for (t = 0; t < e.length; ++t) TimeHandler.addEvent(proliferate, 70 * t, e[t].element, {
style: {
visibility: "visible"
}
});
TimeHandler.addEvent(endLevel, 70 * (t + 3))
}), 21, t.text)
}
function TreeTop(e, t) {
e.width = 8 * t, e.height = 8, e.repeat = !0, setSolid(e, "treetop")
}
function ShroomTop(e, t) {
e.width = 8 * t, e.height = 8, e.repeat = !0, setSolid(e, "shroomtop")
}
function Platform(e, t, n) {
e.width = 4 * (t || 4), e.height = 4, e.spritewidth = 4, e.moving = 0, e.repeat = e.killonend = !0, "function" == typeof n && (n = [n]), n instanceof Array && (e.movement = n[0], e.begin = n[1] * unitsize, e.end = n[2] * unitsize, e.maxvel = (n[3] || 1.5) * unitsized4, e.movement == moveFloating || e.movement == movePlatformSpawn ? e.yvel = e.maxvel : e.xvel = e.maxvel, e.changing = 0), e.movement == collideTransport && (e.movement = !1, e.collide = collideTransport), setSolid(e, "platform")
}
function PlatformGenerator(e, t, n) {
e.width = 4 * t, e.interval = 35, e.height = 6 * e.interval, e.dir = n, e.nocollide = e.hidden = !0, e.movement = PlatformGeneratorInit, setSolid(e, "platformgenerator")
}
function PlatformGeneratorInit(e) {
for (var t = 0, n = e.interval, x = e.height; t < x; t += n) e.platlast = new Thing(Platform, e.width / 4, [movePlatformSpawn, 0, 0, 1.5]), e.platlast.yvel *= e.dir, 1 == e.dir ? addThing(e.platlast, e.left, e.top + t * unitsize) : addThing(e.platlast, e.left, e.bottom - t * unitsize), e.platlast.parent = e, t += e.interval;
e.movement = !1
}
function movePlatformSpawn(e) {
e.bottom < e.parent.top ? (setBottom(e, e.parent.bottom), detachPlayer(e)) : e.top > e.parent.bottom ? (setTop(e, e.parent.top), detachPlayer(e)) : movePlatformNorm(e)
}
function movePlatformNorm(e) {
shiftHoriz(e, e.xvel), shiftVert(e, e.yvel), e == player.resting && e.alive && (setBottom(player, e.top), shiftHoriz(player, e.xvel), player.right > innerWidth && setRight(player, innerWidth))
}
function detachPlayer(e) {
player.resting == e && (player.resting = !1)
}
function Scale(e, t, n) {
e.height = 5, e.width = 4 * t, e.spritewidth = e.spriteheight = 5, e.repeat = e.nocollide = !0, setSolid(e, "scale")
}
function Flag(e) {
e.width = e.height = 8, e.nocollide = !0, setSolid(e, "flag")
}
function FlagPole(e) {
e.width = 1, e.height = 72, e.nocollide = e.repeat = !0, setSolid(e, "flagpole")
}
function FlagTop(e) {
e.spritewidth = e.spriteheight = e.width = e.height = 4, e.nocollide = !0, setSolid(e, "flagtop")
}
function FlagDetector(e) {
e.width = 2, e.height = 100, e.collide = FlagCollision, setSolid(e, "flagdetector"), e.hidden = !0
}
function CastleDoorDetector(e) {
e.width = e.height = 4, e.collide = endLevelPoints, setSolid(e, "castledoor"), e.hidden = !0
}
function FlagCollision(e, t) {
if (!e || !e.player) return killNormal(e);
window.detector = t, AudioPlayer.pause(), AudioPlayer.play("Flagpole"), killOtherCharacters(), nokeys = notime = player.nofall = 1, player.xvel = player.yvel = player.keys.up = player.keys.jump = map.canscroll = map.ending = player.movement = 0, player.nocollidechar = !0, setRight(e, t.pole.left, !0), removeClasses(e, "running jumping skidding"), addClass(e, "climbing animated"), updateSize(e), TimeHandler.addSpriteCycle(e, ["one", "two"], "climbing"), playerRemoveStar(player);
var n = !1,
x = !1,
r = (t.stone.top - e.bottom) / unitsize,
i = setInterval((function() {
n || (e.bottom >= t.stone.top ? (scorePlayerFlag(r, t.stone), n = !0, setBottom(e, t.stone.top, !0), removeClass(player, "animated"), TimeHandler.clearClassCycle(player, "climbing")) : shiftVert(e, unitsize, !0)), x || (t.flag.bottom >= t.stone.top ? (x = !0, setBottom(t.flag, t.stone.top, !0)) : shiftVert(t.flag, unitsize, !0)), n && x && (setBottom(e, t.stone.top, !0), clearInterval(i), setTimeout((function() {
FlagOff(e, t.pole)
}), 21 * timer)), refillCanvas()
}), timer)
}
function scorePlayerFlag(e, t) {
var n;
n = e < 28 ? e < 8 ? 100 : 400 : e < 40 ? 800 : e < 62 ? 2e3 : 5e3, score(player, n, !0)
}
function FlagOff(e, t) {
player.keys.run = notime = nokeys = 1, player.maxspeed = player.walkspeed, flipHoriz(e), TimeHandler.clearClassCycle(e, "climbing"), setLeft(e, t.right, !0), setTimeout((function() {
AudioPlayer.play("Stage Clear"), playerHopsOff(e, t, !0)
}), 14 * timer)
}
function endLevelPoints(e, t) {
if (e && e.player) {
notime = nokeys = !0, killNormal(t), killNormal(e);
var n = parseInt(getLast(String(data.time.amount)));
1 != n && 3 != n && 6 != n && (n = 0);
var x = setInterval((function() {
--data.time.amount, data.score.amount += 50, updateDataElement(data.score), updateDataElement(data.time), AudioPlayer.play("Coin"), data.time.amount <= 0 && (clearInterval(x), setTimeout((function() {
endLevelFireworks(e, n, t)
}), 49 * timer))
}), timer)
}
}
function endLevelFireworks(e, t, n) {
var x, r, i = 0;
if (t) {
for (var a = n.left + 32 * unitsized2; i < t;) explodeFirework(++i, a);
x = timer * (i + 2) * 42
} else x = 0;
r = function() {
setTimeout((function() {
endLevel()
}), x)
}, AudioPlayer.addEventImmediate("Stage Clear", "ended", (function() {
TimeHandler.addEvent(r, 35)
}))
}
function explodeFirework(e, t) {
setTimeout((function() {
var n = new Thing(Firework, e);
addThing(n, t + n.locs[0] - 6 * unitsize, unitsizet16 + n.locs[1]), n.animate()
}), timer * e * 42)
}
function Firework(e, t) {
if (e.width = e.height = 8, e.nocollide = e.nofire = e.nofall = !0, t) switch (t) {
case 1:
e.locs = [unitsizet16, unitsizet16];
break;
case 2:
e.locs = [-unitsizet16, unitsizet16];
break;
case 3:
e.locs = [2 * unitsizet16, 2 * unitsizet16];
break;
case 4:
e.locs = [-2 * unitsizet16, 2 * unitsizet16];
break;
case 5:
e.locs = [0, 1.5 * unitsizet16];
break;
default:
e.locs = [0, 0]
}
e.animate = function() {
var t = e.className + " n";
e.locs && AudioPlayer.play("Firework"), TimeHandler.addEvent((function(e) {
setClass(e, t + 1)
}), 0, e), TimeHandler.addEvent((function(e) {
setClass(e, t + 2)
}), 7, e), TimeHandler.addEvent((function(e) {
setClass(e, t + 3)
}), 14, e), TimeHandler.addEvent((function(e) {
killNormal(e)
}), 21, e)
}, setCharacter(e, "firework"), score(e, 500)
}
function Coral(e, t) {
e.width = 8, e.height = 8 * t, e.repeat = !0, setSolid(e, "coral")
}
function BridgeBase(e, t) {
e.height = 4, e.spritewidth = 4, e.width = 8 * t, e.repeat = !0, setSolid(e, "bridge-base")
}
function WarpWorld(e) {
e.width = 106, e.height = 88, e.movement = setWarpWorldInit, e.collide = enableWarpWorldText, e.pirhanas = [], e.pipes = [], e.texts = [], e.hidden = !0, setSolid(e, "warpworld")
}
function setWarpWorldInit(e) {
shiftHoriz(e, e.width * unitsized2), e.width /= 2, updateSize(e), e.movement = !1
}
function enableWarpWorldText(e, t) {
var n, x = t.pirhanas,
r = t.texts;
for (n in x) x[n].death();
for (n in r) r[n].element.style.visibility = "";
killNormal(t)
}
function resetScenery() {
window.Scenery = {
sprites: {
BrickHalf: [8, 4],
BrickPlain: [8, 8],
Bush1: [16, 8],
Bush2: [24, 8],
Bush3: [32, 8],
Castle: [75, 88],
CastleDoor: [8, 20],
CastleRailing: [8, 4],
CastleRailingFilled: [8, 4],
CastleTop: [12, 12],
CastleWall: [8, 48],
Cloud1: [16, 12],
Cloud2: [24, 12],
Cloud3: [32, 12],
HillSmall: [24, 9.5],
HillLarge: [40, 17.5],
Fence: [8, 8],
Pirhana: [8, 12],
pirhana: [8, 12],
PlantSmall: [7, 15],
PlantLarge: [8, 23],
Railing: [4, 4],
ShroomTrunk: [8, 8],
String: [1, 1],
TreeTrunk: [8, 8],
Water: {
0: 4,
1: 5,
spriteCycle: ["one", "two", "three", "four"]
},
WaterFill: [4, 5]
},
patterns: {
backreg: [
["HillLarge", 0, 0],
["Cloud1", 68, 68],
["Bush3", 92, 0],
["HillSmall", 128, 0],
["Cloud1", 156, 76],
["Bush1", 188, 0],
["Cloud3", 220, 68],
["Cloud2", 292, 76],
["Bush2", 332, 0],
["Blank", 384]
],
backcloud: [
["Cloud2", 28, 64],
["Cloud1", 76, 32],
["Cloud2", 148, 72],
["Cloud1", 228, 0],
["Cloud1", 284, 32],
["Cloud1", 308, 40],
["Cloud1", 372, 0],
["Blank", 384]
],
backcloudmin: [
["Cloud1", 68, 68],
["Cloud1", 156, 76],
["Cloud3", 220, 68],
["Cloud2", 292, 76],
["Blank", 384]
],
backfence: [
["PlantSmall", 88, 0],
["PlantLarge", 104, 0],
["Fence", 112, 0, 4],
["Cloud1", 148, 68],
["PlantLarge", 168, 0],
["PlantSmall", 184, 0],
["PlantSmall", 192, 0],
["Cloud1", 220, 76],
["Cloud2", 244, 68],
["Fence", 304, 0, 2],
["PlantSmall", 320, 0],
["Fence", 328, 0],
["PlantLarge", 344, 0],
["Cloud1", 364, 76],
["Cloud2", 388, 68],
["Blank", 384]
],
backfencemin: [
["PlantLarge", 104, 0],
["Fence", 112, 0, 4],
["Cloud1", 148, 68],
["PlantLarge", 168, 0],
["PlantSmall", 184, 0],
["PlantSmall", 192, 0],
["Cloud1", 220, 76],
["Cloud2", 244, 68],
["Fence", 304, 0, 2],
["PlantSmall", 320, 0],
["Fence", 328, 0],
["Cloud1", 364, 76],
["Cloud2", 388, 68],
["Blank", 384]
],
backfencemin2: [
["Cloud2", 4, 68],
["PlantSmall", 88, 0],
["PlantLarge", 104, 0],
["Fence", 112, 0, 1],
["Fence", 128, 0, 2],
["Cloud1", 148, 68],
["PlantSmall", 184, 0],
["PlantSmall", 192, 0],
["Cloud1", 220, 76],
["Cloud2", 244, 68],
["Fence", 304, 0, 2],
["PlantSmall", 320, 0],
["Fence", 328, 0],
["PlantLarge", 344, 0],
["Cloud1", 364, 76],
["Cloud2", 388, 68],
["Blank", 384]
],
backfencemin3: [
["Cloud2", 4, 68],
["PlantSmall", 88, 0],
["PlantLarge", 104, 0],
["Fence", 112, 0, 4],
["Cloud1", 148, 68],
["PlantSmall", 184, 0],
["PlantSmall", 192, 0],
["Cloud1", 220, 76],
["Cloud2", 244, 68],
["Cloud1", 364, 76],
["Cloud2", 388, 68],
["Blank", 384]
]
}
}, processSceneryPatterns(Scenery.patterns)
}
function processSceneryPatterns(e) {
var t, n;
for (n in e)(t = e[n]).length && (t.width = t[t.length - 1][1], t.pop())
}
function SceneryBlocker(e, t, n) {
e.width = t || 8, e.height = n || 8, e.nocollide = e.hidden = !0, setSolid(e, "sceneryblocker")
}
function Sprite(e, t, n) {
n || (n = [1, 1]);
var x = e.template = Scenery.sprites[t];
x ? (e.width = (e.spritewidth = x[0]) * (n[0] || 1), e.height = (e.spriteheight = x[1]) * (n[1] || 1), e.unitwidth = e.spritewidth * unitsize, e.unitheight = e.spriteheight * unitsize, e.nocollide = e.maxquads = 1, e.repeat = !0, setScenery(e, "scenery " + t), e.title = t, x.spriteCycleTimer && TimeHandler.addSpriteCycle(e, spriteCycleTimer, spriteCycleTimer || void 0)) : log("No sprite template found for", t)
}
function LocationShifter(e, t, n) {
e.loc = t, e.width = n[0], e.height = n[1], e.collide = collideLocationShifter, e.hidden = !0, setSolid(e, "blue")
}
function collideLocationShifter(e, t) {
e.player && (t.nocollide = player.piping = !0, TimeHandler.addEvent((function(e) {
shiftToLocation(t.loc), map.random && entryRandom(e)
}), 1, e))
}
function ScrollBlocker(e, t) {
e.width = 40, e.height = 140, e.nocollide = e.hidden = !0, e.big = t, e.movement = function() {
e.left - player.xvel <= gamescreen.right - gamescreen.left && (map.canscroll = e.movement = !1, map.noscroll = e.big)
}, setSolid(e, "scrollblocker")
}
function ScrollEnabler(e) {
e.width = 40, e.height = 140, e.hidden = !0, e.collide = function() {
e.left - player.xvel <= gamescreen.right - gamescreen.left && (map.canscroll = e.nocollide = !0)
}, setSolid(e, "scrollenabler")
}
function zoneToggler(e, t) {
e.width = 40, e.height = 140, e.func = t, e.hidden = !0, e.collide = function(e, t) {
t.func(), t.nocollide = !0
}, setSolid(e, "zonetoggler " + t.name)
}
function GenerationStarter(e, t, n) {
e.width = 8, e.height = gamescreen.height + 20, e.func = t, e.arg = n, e.collide = function(e, t) {
if ("player" != e.type) return !1;
spawnMap(), killNormal(t)
}, e.movement = function(e) {
e.movement = !1, addClass(e, "used"), e.func((gamescreen.left + e.right) / unitsize, e.arg)
}, setSolid(e, "generationstarter"), e.hidden = !0
}
function castleDecider(e, t, n) {
e.height = ceilmax, e.width = 10, e.nocollide = !0, e.xloc = t, e.section = map.area.sections[n], e.next = map.area.sections[n + 1], e.movement = function(e) {
if (!(e.left > gamescreen.right - gamescreen.left) && e.section.activated) {
var t = e.section;
t.numpass = t.colliders.length = 0, t.passed ? (++map.area.sections.current, e.next(e.xloc)) : t(e.xloc), t.activated = t.passed = !1, spawnMap(), killNormal(e)
}
}, setSolid(e, "decider blue " + n), e.hidden = !0
}
function FuncCollider(e, t, n) {
n ? (e.width = n[0], e.height = n[1]) : (e.width = 8, e.height = ceilmax + 40), e.collide = t, e.hidden = !0, setSolid(e, "funccollider blue " + t.name)
}
function FuncSpawner(e, t, n) {
e.width = 8, e.height = 8, e.movement = function() {
t(e, n)
}, e.argument = n, e.nocollide = e.hidden = !0, setSolid(e, "funccollider blue " + t.name)
}
function Collider(e, t, n) {
e.width = t[0], e.height = t[1], n instanceof Array ? (e.func = n[0] || function() {}, e.movement = n[1] || function() {}) : (e.func = n || function() {}, e.movement = !1), e.collide = function(e, t) {
if (!e.player) return !1;
t.func(e, t)
}, setSolid(e, "collider blue " + e.func.name), e.hidden = !0
}
function TonedJS(e) {
var t = {
giveSup: function(e, t) {
for (var n in t = t || {}, e) t[n] = e[n];
return t
},
giveSub: function(e, t) {
for (var n in t = t || {}, e) t.hasOwnProperty(n) || (t[n] = e[n]);
return t
},
proliferate: function(e, t, n) {
var x, r;
for (r in t) n && e.hasOwnProperty(r) || ("object" == typeof(x = t[r]) && null != x ? (e.hasOwnProperty(r) || (e[r] = x instanceof Array ? [] : {}), proliferate(e[r], x, n)) : e[r] = x);
return e
},
getFirst: function(e, t) {
for (var n in e) return t ? n : e[n]
},
getLast: function(e, t) {
for (var n in e);
return t ? n : e[n]
},
followPath: function(e, t, n) {
return null != t[n] && null != e[t[n]] ? followPath(e[t[n]], t, ++n) : e
},
createElement: function(e) {
for (var t = document.createElement(e || "div"), n = arguments.length; --n > 0;) proliferate(t, arguments[n]);
return t
},
classAdd: function(e, t) {
e.className += " " + t
},
classRemove: function(e, t) {
e.className = e.className.replace(new RegExp(" " + t, "gm"), "")
},
elementSetPosition: function(e, t, n) {
null == t && (t = e.left), null == n && (n = e.top), proliferate(e, {
left: t,
top: n,
style: {
marginLeft: t + "px",
marginTop: n + "px"
}
})
},
elementShiftLeft: function(e, t) {
e.left || (e.left = Number(e.style.marginLeft.replace("px", ""))), e.style.marginLeft = round(e.left += t) + "px"
},
elementShiftTop: function(e, t) {
e.top || (e.top = Number(e.style.marginLeft.replace("px", ""))), e.style.marginTop = round(e.top += t) + "px"
},
removeChildSafe: function(e, t) {
e && (t = t || document.body).contains(e) && t.removeChild(e)
},
findParentOfType: function(e, t) {
var n = e.parentElement;
return n && n.nodeName != t ? findParentType(n, t) : n
},
clearAllTimeouts: function() {
for (var e = setTimeout((function() {})); e--;) clearTimeout(e)
},
stringTrim: function(e) {
return e.replace(/^\s+|\s+$/g, "")
},
stringOf: function(e, t) {
return 0 == t ? "" : new Array(1 + (t || 1)).join(e)
},
stringHas: function(e, t) {
return -1 != e.indexOf(t)
},
stringHasI: function(e, t) {
return -1 != e.toLowerCase().indexOf(t.toLowerCase())
},
capitalizeFirst: function(e, t) {
return t = t || 1, e.substr(0, t).toUpperCase() + e.substr(t).toLowerCase()
},
ArrayD: function(e) {
if (1 == arguments.length) return new Array(e);
var t, n = arrayMake(arguments),
x = new Array(e);
for (n.shift(), t = e - 1; t >= 0; --t) x[t] = ArrayD.apply(this, n);
return x
},
arrayOf: function(e, t) {
t = t || 1;
for (var n = new Array(t); t--;) n[t] = e;
return n
},
arrayMake: function(e) {
return Array.prototype.slice.call(e)
},
arrayRange: function(e, t) {
for (var n = 1 + t - e, x = new Array(n), r = e, i = 0; i < n;) x[i++] = r++;
return x
},
arrayShuffle: function(e, t, n) {
t = t || 0, n = n || e.length;
for (var x, r, i = t; i <= n; ++i) r = randInt(i + 1), x = e[i], e[i] = e[r], e[r] = x;
return e
},
removeDuplicates: function(e) {
var t, n, x, r, i, a = [];
for (r = 0, x = e.length; r < x; ++r) {
for (t = e[r], n = !1, i = 0; i < r; ++i)
if (e[i] == t) {
n = !0;
break
}
n || a.push(t)
}
return a
},
makeDigit: function(e, t, n) {
return e = String(e), stringOf(n || 0, max(0, t - e.length)) + e
},
roundDigit: function(e, t) {
return Number(t ? ~~(.5 + e / t) * t : round(e))
},
sign: function(e) {
return e ? e < 0 ? -1 : 1 : 0
},
round: function(e) {
return ~~(.5 + e)
},
max: Math.max,
min: Math.min,
abs: Math.abs,
pow: Math.pow,
ceil: Math.ceil,
floor: Math.floor,
random: Math.random,
randInt: function(e) {
return floor(Math.random() * (e || 1))
},
signBool: function(e) {
return e > 0
},
log: console.log.bind(console),
now: Date.now
};
return e && t.giveSub(t, window), t
}
function resetTriggers() {
window.controls = new Controls({
left: [37, 65, "AXIS_LEFT", "DPAD_LEFT"],
right: [39, 68, "AXIS_RIGHT", "DPAD_RIGHT"],
up: [38, 87, 32, "FACE_1", "DPAD_UP", "LEFT_BOTTOM_SHOULDER"],
down: [40, 83, "AXIS_DOWN", "DPAD_DOWN"],
sprint: [16, 17, "FACE_1"],
pause: [80, "START_FORWARD"],
mute: [77],
q: [81],
l: [76]
}), window.gamepad = new Gamepad, gamepad.bind(Gamepad.Event.BUTTON_DOWN, ControlsPipe("keydown", !0)), gamepad.bind(Gamepad.Event.BUTTON_UP, ControlsPipe("keyup", !1)), gamepad.bind(Gamepad.Event.AXIS_CHANGED, (function(e) {
var t = e.value,
n = abs(t);
if (!(n < .1)) switch (e.axis) {
case "LEFT_STICK_Y":
case "RIGHT_STICK_Y":
n > .5 ? keydown(t > 0 ? "DPAD_DOWN" : "DPAD_UP") : (keyup("DPAD_UP"), keyup("DPAD_DOWN"));
break;
case "LEFT_STICK_X":
case "RIGHT_STICK_X":
n > .5 ? keydown(t < 0 ? "DPAD_LEFT" : "DPAD_RIGHT") : (keyup("DPAD_UP"), keyup("DPAD_DOWN"))
}
})), gamepad.init(), proliferate(body, {
onkeydown: ControlsPipe("keydown", !0),
onkeyup: ControlsPipe("keyup", !1),
oncontextmenu: contextmenu,
onmousedown: mousedown
}), setMessageTriggers()
}
function Controls(e, t) {
this.pipes = e;
var n, x, r, i, a = this.keydown = {
left: function(e) {
e.run = -1, e.left_down = !0
},
right: function(e) {
e.run = 1, e.right_down = !0
},
up: function(e) {
e.up = !0, player.canjump && (player.resting || map.underwater) && (e.jump = 1, player.canjump = e.jumplev = 0, AudioPlayer.play(player.power > 1 ? "Jump Super" : "Jump Small"), map.underwater && setTimeout((function() {
player.jumping = e.jump = !1
}), 14 * timer))
},
down: function(e) {
e.crouch = !0
},
sprint: function(e) {
3 != player.power || 0 != e.sprint || e.crouch || player.fire(), e.sprint = 1
},
pause: function(e) {
paused || window.editing && !editor.playing || setTimeout((function() {
pause(!0)
}), 140)
},
mute: function(e) {
AudioPlayer.toggleMute()
},
q: function(e) {
switch (++qcount > 28 && maxlulz(), qcount) {
case 7:
lulz();
break;
case 14:
superlulz();
break;
case 21:
hyperlulz()
}
},
l: function(e) {
toggleLuigi()
}
},
o = this.keyup = {
left: function(e) {
e.run = 0, e.left_down = !1
},
right: function(e) {
e.run = 0, e.right_down = !1
},
up: function(e) {
map.underwater || (e.jump = e.up = 0), player.canjump = !0
},
down: function(e) {
e.crouch = 0, removeCrouch()
},
sprint: function(e) {
e.sprint = 0
},
pause: function(e) {
unpause(!0)
}
};
for (n in e)
for (i in x = e[n]) a[r = x[i]] = a[n], o[r] = o[n]
}
function ControlsPipe(e, t) {
var n = controls[e];
return function(x) {
t && (player && player.dead || window.paused) || window.nokeys || (("number" != typeof x || x.which || x.control) && (x = x.which || x.control), n[x] ? n[x](player.keys) : mlog(e, "Could not", e, x), window.gamehistory[gamecount] = [keydown, x])
}
}
function keydown(e) {
if (!(player && player.dead || window.paused || window.nokeys)) {
var t = controls.keydown;
("object" == typeof e || e.which) && (e = e.which), t[e] && t[e](player.keys), window.gamehistory[gamecount] = [keydown, e]
}
}
function keyup(e) {
if (!window.nokeys) {
var t = controls.keyup;
("object" == typeof e || e.which) && (e = e.which), t[e] && t[e](player.keys), window.gamehistory[gamecount] = [keyup, e]
}
}
function contextmenu(e) {
e.preventDefault && e.preventDefault()
}
function mousedown(e) {
3 == e.which && (paused ? unpause() : window.editor && (editing || editor.playing) || pause(!0), e.preventDefault && e.preventDefault())
}
function scriptKeys(e) {
var t, n;
for (t in e) n = e[t], TimeHandler.addEvent(n[0], t, n[1]), TimeHandler.addEvent((function() {
alert(n[0].name + ", " + n[1])
}), t)
}
function lulz(e, t) {
player.star = !0, e = e || [Goomba], t = t || 7, TimeHandler.addEventInterval((function() {
if (!(characters.length > 210)) {
var t = new Thing(e[randInt(e.length)], randBoolJS(), randBoolJS());
t.yvel = random() * -unitsizet4, t.xvel = t.speed = random() * unitsizet2 * randSign(), addThing(t, (32 * random() + 128) * unitsize, 88 * random() * unitsize)
}
}), t, 1 / 0)
}
function superlulz() {
lulz([Goomba, Koopa, Beetle, HammerBro, Lakitu, Podoboo, Blooper])
}
function hyperlulz() {
lulz([Bowser], 21)
}
function maxlulz() {
TimeHandler.addEventInterval((function(e) {
setAreaSetting(e[randInt(e.length)])
}), 7, 1 / 0, ["Overworld", "Underworld", "Underwater", "Sky", "Castle"])
}
function mapKeyToControl(e, t) {
if (-1 == window.controls.pipes[e].indexOf(t)) {
window.controls.pipes[e].push(t);
var n = window.controls.pipes;
window.controls = new Controls(n), proliferate(body, {
onkeydown: ControlsPipe("keydown", !0),
onkeyup: ControlsPipe("keyup", !1),
oncontextmenu: contextmenu,
onmousedown: mousedown
})
}
}
function setMessageTriggers() {
var e = {
setMap: triggerSetMap,
startEditor: function() {
loadEditor()
},
toggleOption: function(e) {
var t = "toggle" + e.option;
console.log(t, window[t]), window[t] ? window[t]() : log("Could not toggle", t)
},
setKey: function(e) {
mapKeyToControl(e.action, e.keyCode)
}
};
window.addEventListener("message", (function(t) {
var n = t.data,
x = n.type;
e[x] ? e[x](n) : console.log("Unknown event type received:", x, ".\n", n)
}))
}
function triggerSetMap(e) {
clearPlayerStats(), setMap.apply(this, e.map || []), setLives(3)
}
function upkeep() {
if (!window.paused) {
window.nextupk = setTimeout(upkeep, timer);
for (var e = window.speed; e > 0; --e) adjustFPS(), QuadsKeeper.determineAllQuadrants(solids), maintainSolids(), maintainCharacters(), maintainPlayer(), texts.length && maintainTexts(), TimeHandler.handleEvents(), refillCanvas()
}
}
function adjustFPS() {
window.time_now = now();
var e = time_now - time_prev,
t = roundDigit(1e3 / e, .001);
window.fps = roundDigit(.7 * fps + .3 * t, .01), window.realtime = fps_target / fps, window.time_prev = time_now
}
function pause(e) {
paused && !window.nextupk || (cancelAnimationFrame(nextupk), AudioPlayer.pause(), paused = !0, e && AudioPlayer.play("Pause"))
}
function unpause() {
paused && (window.nextupk = requestAnimationFrame(upkeep), paused = !1, AudioPlayer.resume())
}
function maintainSolids(e) {
for (var t, n = 0; n < solids.length; ++n)(t = solids[n]).alive && t.movement && t.movement(t), (!t.alive || t.right < QuadsKeeper.getDelX()) && deleteThing(t, solids, n)
}
function maintainCharacters(e) {
var t, n, x = gamescreen.right + QuadsKeeper.getOutDifference();
for (n = 0; n < characters.length; ++n)(t = characters[n]).resting ? t.yvel = 0 : (t.nofall || (t.yvel += t.gravity || map.gravity), t.yvel = min(t.yvel, map.maxyvel)), updatePosition(t), QuadsKeeper.determineThingQuadrants(t), t.under = t.undermid = !1, determineThingCollisions(t), t.resting && (characterOnResting(t, t.resting) ? (t.yvel = !1, setBottom(t, t.resting.top)) : t.resting = !1), t.alive ? "player" == t.type || map.shifting || !(0 == t.numquads || t.left > x) || t.outerok ? !t.nomove && t.movement && t.movement(t) : deleteThing(t, characters, n) : map.shifting || deleteThing(t, characters, n)
}
function maintainPlayer(e) {
if (player.alive) {
if (player.yvel > 0 && (map.underwater || (player.keys.jump = 0), player.jumping || (map.underwater ? player.paddling || (switchClass(player, "paddling", "paddling"), player.padding = !0) : (addClass(player, "jumping"), player.jumping = !0)), !player.piping && !player.dying && player.top > gamescreen.deathheight)) {
if (map.exitloc) return map.random ? (goToTransport(["Random", "Overworld", "Down"]), void playerDropsIn()) : shiftToLocation(map.exitloc);
clearPlayerStats(), killPlayer(player, 2)
}
player.xvel > 0 ? player.right > gamescreen.middlex && player.right > gamescreen.right - gamescreen.left && (player.xvel = min(0, player.xvel)) : player.left < 0 && (player.xvel = max(0, player.xvel)), player.under && (player.jumpcount = 0), window.scrolloffset = map.canscroll * (player.right - gamescreen.middlex), scrolloffset > 0 && !map.shifting ? scrollWindow(lastscroll = round(min(player.scrollspeed, scrolloffset))) : lastscroll = 0
}
}
function maintainTexts() {
var e, t, n;
for (n = texts.length - 1; n >= 0; --n) e = (t = texts[n]).element || t, t.xvel && elementShiftLeft(e, t.xvel), t.yvel && elementShiftTop(e, t.yvel)
}
function followPath(e, t, n) {
return null != t[n] && null != e[t[n]] ? followPath(e[t[n]], t, ++n) : e
}
function clearAllTimeouts() {
for (var e = setTimeout((function() {})); e--;) clearTimeout(e)
}
function getCanvas(e, t, n) {
var x = createElement("canvas", {
width: e,
height: t
});
return n && (n = n || unitsize, proliferate(x.style, {
width: e * n + "px",
height: t * n + "px"
})), x.getContext("2d").webkitImageSmoothingEnabled = !1, x
}
function step(e) {
unpause(), upkeep(), pause(), e > 0 && step(e - 1)
}
function fastforward(e) {
window.speed = max(0, parseInt(e || 0)) + 1
}
function toggleFastFWD(e) {
window.fastforwarding ? (fastforward(0), window.fastforwarding = !1) : (fastforward(2), window.fastforwarding = !0)
}
function specifyTimer(e) {
timer = e, requestAnimationFrame = function(e) {
window.setTimeout(e, timer)
}
}
function changeUnitsize(e) {
function t(e) {
for (i in e) updateSize(e[i]), updatePosition(e[i])
}
e && (resetUnitsize(e), t(solids), t(characters))
}
function randTrue(e) {
return floor(getSeed() * ((e || 1) + 1))
}
function randSign(e) {
return 2 * randTrue(e) - 1
}
function randBoolJS(e) {
return floor(2 * random())
}
function updatePosition(e) {
e.nomove || shiftHoriz(e, e.xvel), e.nofall || shiftVert(e, e.yvel)
}
function updateSize(e) {
var t;
e.unitwidth = e.width * unitsize, e.unitheight = e.height * unitsize, e.spritewidthpixels = e.spritewidth * unitsize, e.spriteheightpixels = e.spriteheight * unitsize, (t = e.canvas) && (t.width = e.spritewidthpixels, t.height = e.spriteheightpixels, refillThingCanvas(e))
}
function reduceHeight(e, t, n) {
e.top += t, e.height -= t / unitsize, n && updateSize(e)
}
function shiftBoth(e, t, n) {
e.noshiftx || shiftHoriz(e, t), e.noshifty || shiftVert(e, n)
}
function shiftHoriz(e, t) {
e.left += t, e.right += t
}
function shiftVert(e, t) {
e.top += t, e.bottom += t
}
function setLeft(e, t) {
e.left = t, e.right = e.left + e.width * unitsize
}
function setRight(e, t) {
e.right = t, e.left = e.right - e.width * unitsize
}
function setTop(e, t) {
e.top = t, e.bottom = e.top + e.height * unitsize
}
function setBottom(e, t) {
e.bottom = t, e.top = e.bottom - e.height * unitsize
}
function setWidth(e, t, n, x) {
e.width = t, e.unitwidth = t * unitsize, n && (e.spritewidth = t, e.spritewidthpixels = t * unitsize), x && (updateSize(e), setThingSprite(e))
}
function setHeight(e, t, n, x) {
e.height = t, e.unitheight = t * unitsize, n && (e.spriteheight = t, e.spriteheightpixels = t * unitsize), x && (updateSize(e), setThingSprite(e))
}
function setSize(e, t, n, x, r) {
t && setWidth(e, t, x), n && setHeight(e, n, x), r && (updateSize(e), setThingSprite(e))
}
function setMidX(e, t, n) {
setLeft(e, t + e.width * unitsized2, n)
}
function getMidX(e) {
return e.left + e.width * unitsized2
}
function setMidY(e, t, n) {
setTop(e, t + e.height * unitsized2, n)
}
function setMidXObj(e, t, n) {
setLeft(e, t.left + t.width * unitsized2 - e.width * unitsized2, n)
}
function slideToXLoc(e, t, n, x) {
n = n || 1 / 0;
var r = getMidX(e);
shiftHoriz(e, r < t ? min(n, t - r) : max(-n, t - r), x)
}
function updateLeft(e, t) {
e.left += t, e.right = e.left + e.width * unitsize
}
function updateRight(e, t) {
e.right += t, e.left = e.right - e.width * unitsize
}
function updateTop(e, t) {
e.top += t, e.bottom = e.top + e.height * unitsize
}
function updateBottom(e, t) {
e.bottom += t, e.top = e.bottom - e.height * unitsize
}
function increaseHeightTop(e, t, n) {
e.top -= t, e.height += t / unitsize, e.unitheight = e.height * unitsize
}
function determineThingCollisions(e) {
if (!e.nocollide) {
var t, n, x, r, i, a, o;
for (e.resting && 0 != e.resting.yvel || (e.resting = !1), e.skipoverlaps || checkOverlap(e), r = 0, a = e.numquads; r < a; ++r)
for (n = (t = e.quadrants[r]).things, i = 0, o = t.numthings; i < o && e != (x = n[i]); ++i) !x.alive || x.scenery || x.nocollide || !objectsTouch(e, x) || !e.player && x.hidden && x.visual_scenery && x.visual_scenery.hidden && !solidOnCharacter(x, e) || (x.character ? objectsCollided(e, x) : e.nocollidesolid || (objectsCollided(e, x), e.skipoverlaps || x.skipoverlaps || !characterOverlapsSolid(e, x) || e.overlaps.push(x)));
e.undermid ? e.undermid.bottomBump(e.undermid, e) : e.under instanceof Thing && e.under.bottomBump(e.under, e)
}
}
function checkOverlap(e) {
if (e.overlapdir) e.overlapdir < 0 && e.right <= e.ocheck.left + unitsizet2 || e.left >= e.ocheck.right - unitsizet2 ? (e.overlapdir = 0, e.overlaps = []) : shiftHoriz(e, e.overlapdir, !0);
else if (e.overlaps.length > 0) {
var t, n, x = e.overlaps,
r = {
right: -1 / 0
},
i = {
left: 1 / 0
},
a = 0;
for (n in e.overlapfix = !0, x) a += getMidX(t = x[n]), t.right > r.right && (r = t), t.left < i.left && (i = t);
a /= x.length, getMidX(e) >= a - unitsized16 ? (e.overlapdir = unitsize, e.ocheck = r) : (e.overlapdir = -unitsize, e.ocheck = i)
}
}
function characterOverlapsSolid(e, t) {
return e.top <= t.top && e.bottom > t.bottom
}
function objectsTouch(e, t) {
return e.right - unitsize > t.left && e.left + unitsize < t.right && e.bottom >= t.top && e.top <= t.bottom
}
function charactersTouch(e, t) {
return !(e.bottom <= t.top + unitsizet2 || e.top + unitsizet2 >= t.bottom)
}
function objectInQuadrant(e, t) {
return e.right + unitsize >= t.left && e.left - unitsize <= t.right && e.bottom + unitsize >= t.top && e.top - unitsize <= t.bottom
}
function objectsCollided(e, t) {
return e.solid && !t.solid ? objectsCollided(t, e) : t.up && e != t.up ? characterTouchesUp(e, t) : void(t.solid || e.player ? t.collide(e, t) : e.collide(t, e))
}
function objectToLeft(e, t) {
return (e.left + e.right) / 2 < (t.left + t.right) / 2
}
function objectOnTop(e, t) {
return !("solid" == e.type && t.yvel > 0) && (!(e.yvel < t.yvel && "solid" != t.type) && (!!(e.player && e.bottom < t.bottom && "enemy" == t.group) || e.left + unitsize < t.right && e.right - unitsize > t.left && (e.bottom - t.yvel <= t.top + t.toly || e.bottom <= t.top + t.toly + abs(e.yvel - t.yvel))))
}
function objectOnSolid(e, t) {
return e.left + unitsize < t.right && e.right - unitsize > t.left && (e.bottom - e.yvel <= t.top + t.toly || e.bottom <= t.top + t.toly + abs(e.yvel - t.yvel))
}
function solidOnCharacter(e, t) {
return !(t.yvel >= 0) && (t.midx = getMidX(t), t.midx > e.left && t.midx < e.right && e.bottom - e.yvel <= t.top + t.toly - t.yvel)
}
function characterOnSolid(e, t) {
return e.resting == t || objectOnSolid(e, t) && e.yvel >= 0 && e.left + e.xvel + unitsize != t.right && e.right - e.xvel - unitsize != t.left
}
function characterOnResting(e, t) {
return objectOnSolid(e, t) && e.left + e.xvel + unitsize != t.right && e.right - e.xvel - unitsize != t.left
}
function characterTouchedSolid(e, t) {
if (t.up != e) {
if (characterOnSolid(e, t)) {
if (t.hidden) return;
e.resting = t, e.player && map.underwater && removeClass(e, "paddling")
} else if (solidOnCharacter(t, e)) {
var n = e.left + e.width * unitsize / 2;
if (n > t.left && n < t.right) e.undermid = t;
else if (t.hidden) return;
e.under ? e.under.push(t) : e.under = [t], e.player && setTop(e, t.bottom - e.toly + t.yvel, !0), e.yvel = t.yvel, e.player && (e.keys.jump = 0)
}
t.hidden || characterNotBumping(e, t) || objectOnTop(e, t) || objectOnTop(t, e) || e.under || e == t.up || (e.right <= t.right ? (e.xvel = min(e.xvel, 0), shiftHoriz(e, max(t.left + unitsize - e.right, -unitsized2), !0)) : e.left >= t.left && (e.xvel = max(e.xvel, 0), shiftHoriz(e, min(t.right - unitsize - e.left, unitsized2), !0)), e.player ? t.actionLeft && t.actionLeft(e, t, t.transport) : (e.moveleft = !e.moveleft, "item" == e.group && e.collide(t, e)))
}
}
function characterNotBumping(e, t) {
return e.top + e.toly + abs(e.yvel) > t.bottom
}
function characterTouchesUp(e, t) {
switch (e.group) {
case "item":
e.moveleft = getMidX(e) <= getMidX(t) + unitsized2, characterHops(e);
break;
case "coin":
e.animate(e);
break;
default:
e.death(e, 2), scoreEnemyBelow(e)
}
}
function characterHops(e) {
e.yvel = -1.4 * unitsize, e.resting = !1
}
function characterIsAlive(e) {
return !(!e || e.dead || !e.alive)
}
function scorePlayerShell(e, t) {
return e.star ? score(t, 200, !0) : t.resting ? t.peeking ? score(t, 1e3, !0) : score(t, 100, !0) : score(t, 8e3, !0)
}
function scoreEnemyStomp(e) {
switch (e.type.split(" ")[0]) {
case "koopa":
e.fly ? 400 : 100;
break;
case "bulletbill":
case "cheepcheep":
200;
break;
case "hammerbro":
1e3;
break;
case "lakitu":
800;
break;
default:
100
}
}
function scoreEnemyFire(e) {
var t = 200;
switch (e.type.split(" ")[0]) {
case "goomba":
t = 100;
break;
case "hammerbro":
t = 1e3;
break;
case "bowser":
t = 5e3;
break;
default:
t = 200
}
scoreEnemyFin(e, t)
}
function scoreEnemyStar(e) {
var t = 200;
switch (e.type.split(" ")[0]) {
case "goomba":
t = 100;
break;
case "hammerbro":
t = 1e3;
break;
default:
t = 200
}
scoreEnemyFin(e, t), AudioPlayer.play("Kick")
}
function scoreEnemyBelow(e) {
var t = 100;
switch (e.type.split(" ")[0]) {
case "hammerbro":
t = 1e3;
break;
default:
t = 100
}
scoreEnemyFin(e, t)
}
function scoreEnemyFin(e, t) {
score(e, t, !0)
}
function moveSimple(e) {
e.direction != e.moveleft && (e.moveleft ? (e.xvel = -e.speed, e.noflip || unflipHoriz(e)) : (e.noflip || flipHoriz(e), e.xvel = e.speed), e.direction = e.moveleft)
}
function moveSmart(e) {
moveSimple(e), 0 != e.yvel || e.resting && !offResting(e) || (e.moveleft ? shiftHoriz(e, unitsize, !0) : shiftHoriz(e, -unitsize, !0), e.moveleft = !e.moveleft)
}
function offResting(e) {
return e.moveleft ? e.right - unitsize < e.resting.left : e.left + unitsize > e.resting.right
}
function moveJumping(e) {
moveSimple(e), e.resting && (e.yvel = -abs(e.jumpheight), e.resting = !1)
}
function moveFloating(e) {
setPlatformEndpoints(e), e.begin = map.floor * unitsize - e.begin, e.end = map.floor * unitsize - e.end, (e.movement = moveFloatingReal)(e)
}
function moveFloatingReal(e) {
e.top < e.end ? e.yvel = min(e.yvel + unitsized32, e.maxvel) : e.bottom > e.begin && (e.yvel = max(e.yvel - unitsized32, -e.maxvel)), movePlatformNorm(e)
}
function moveSliding(e) {
setPlatformEndpoints(e), (e.movement = moveSlidingReal)(e)
}
function moveSlidingReal(e) {
gamescreen.left + e.left < e.begin ? e.xvel = min(e.xvel + unitsized32, e.maxvel) : gamescreen.left + e.right > e.end && (e.xvel = max(e.xvel - unitsized32, -e.maxvel)), movePlatformNorm(e)
}
function setPlatformEndpoints(e) {
if (e.begin > e.end) {
var t = e.begin;
e.begin = e.end, e.end = t
}
}
function collideTransport(e, t) {
characterTouchedSolid(e, t), t == e.resting && (t.movement = movePlatformNorm, t.collide = characterTouchedSolid, t.xvel = unitsized2)
}
function moveFalling(e) {
if (e != player.resting) return e.yvel = 0;
shiftVert(e, e.yvel += unitsized8), setBottom(player, e.top), e.yvel >= 2.8 * unitsize && (e.freefall = !0, e.movement = moveFreeFalling)
}
function moveFallingScale(e) {
player.resting == e ? (shiftScaleStringVert(e, e.string, e.yvel += unitsized16), shiftScaleStringVert(e.partner, e.partner.string, -e.yvel), e.tension += e.yvel, e.partner.tension -= e.yvel) : e.yvel > 0 && (shiftScaleStringVert(e, e.string, e.yvel -= unitsized32), shiftScaleStringVert(e.partner, e.partner.string, -e.yvel), e.tension -= e.yvel, e.partner.tension += e.yvel), e.partner.tension <= 0 && (e.collide = e.partner.collide = characterTouchedSolid, e.movement = e.partner.movement = moveFreeFalling)
}
function moveFreeFalling(e) {
shiftVert(e, e.yvel += unitsized16), e.yvel > unitsizet2 && (e.movement = function(e) {
shiftVert(e, e.yvel)
})
}
function shiftScaleStringVert(e, t, n) {
shiftVert(e, n), t.bottom = e.top, t.height = (t.bottom - t.top) / unitsize, updateSize(t)
}
function setClass(e, t) {
e.className = t, setThingSprite(e)
}
function setClassInitial(e, t) {
e.className = t
}
function addClass(e, t) {
e.className += " " + t, setThingSprite(e)
}
function removeClass(e, t) {
e.className = e.className.replace(new RegExp(" " + t, "gm"), ""), setThingSprite(e)
}
function switchClass(e, t, n) {
removeClass(e, t), addClass(e, n)
}
function removeClasses(e) {
var t, n, x;
for (n = 1; n < arguments.length; ++n)
for ((t = arguments[n]) instanceof Array || (t = t.split(" ")), x = t.length - 1; x >= 0; --x) removeClass(e, t[x])
}
function addClasses(e, t) {
for (var n = t instanceof Array ? t : t.split(" "), x = n.length - 1; x >= 0; --x) addClass(e, n[x])
}
function addElementClass(e, t) {
e.className += " " + t
}
function removeElementClass(e, t) {
e.className = e.className.replace(new RegExp(" " + t, "gm"), "")
}
function flipHoriz(e) {
addClass(e, "flipped")
}
function flipVert(e) {
addClass(e, "flip-vert")
}
function unflipHoriz(e) {
removeClass(e, "flipped")
}
function unflipVert(e) {
removeClass(e, "flip-vert")
}
function deleteThing(e, t, n) {
t.splice(n, 1), e.ondelete && e.ondelete()
}
function switchContainers(e, t, n) {
t.splice(t.indexOf(e), 1), n.push(e)
}
function containerForefront(e, t) {
t.splice(t.indexOf(e), 1), t.unshift(e)
}
function killNormal(e) {
e && (e.hidden = e.dead = !0, e.alive = e.resting = e.movement = !1, TimeHandler.clearAllCycles(e))
}
function killFlip(e, t) {
flipVert(e), e.bottomBump = function() {}, e.nocollide = e.dead = !0, e.resting = e.movement = e.speed = e.xvel = e.nofall = !1, e.yvel = -unitsize, TimeHandler.addEvent((function(e) {
killNormal(e)
}), 70 + (t || 0))
}
function generalMovement(e, t, n, x) {
var r = setInterval((function() {
shiftVert(e, n), shiftHoriz(e, t)
}), timer);
setTimeout((function() {
clearInterval(r)
}), x)
}
function blockBumpMovement(e) {
var t = -3,
n = setInterval((function() {
shiftVert(e, t), 3.5 == (t += .5) && (clearInterval(n), e.up = !1), determineThingCollisions(e)
}), timer)
}
function emergeUp(e, t) {
AudioPlayer.play("Powerup Appears"), flipHoriz(e), e.nomove = e.nocollide = e.alive = e.nofall = e.emerging = !0, switchContainers(e, characters, scenery);
var n = setInterval((function() {
shiftVert(e, -unitsized8), e.bottom <= t.top && (clearInterval(n), switchContainers(e, scenery, characters), e.nocollide = e.nomove = e.moveleft = e.nofall = e.emerging = !1, e.emergeOut && e.emergeOut(e, t), e.movement && (e.movementsave = e.movement, e.movement = moveSimple, e.moving = TimeHandler.addEventInterval((function(e, t) {
if (e.resting != t) return TimeHandler.addEvent((function(e) {
e.movement = e.movementsave
}), 1, e), !0
}), 1, 1 / 0, e, t)))
}), timer)
}
function flicker(e, t, n) {
t = round(t) || 49, n = round(n) || 3;
e.flickering = !0, TimeHandler.addEventInterval((function(e) {
e.hidden = !e.hidden
}), n, t, e), TimeHandler.addEvent((function(e) {
e.flickering = e.hidden = !1
}), t * n + 1, e)
}
function killOtherCharacters() {
var e, t;
if (window.characters)
for (t = characters.length - 1; t >= 0; --t)(e = characters[t]).nokillend ? e.killonend && e.killonend(e) : deleteThing(e, characters, t);
if (window.solids)
for (t = solids.length - 1; t >= 0; --t) solids[t].killonend && deleteThing(solids[t], solids, t)
}
function lookTowardPlayer(e, t) {
player.right <= e.left ? e.lookleft && !t || (e.lookleft = !0, e.moveleft = !1, unflipHoriz(e)) : player.left >= e.right && (e.lookleft || t) && (e.lookleft = !1, e.moveleft = !0, flipHoriz(e))
}
function lookTowardThing(e, t) {
t.right <= e.left ? (e.lookleft = !0, e.moveleft = !1, unflipHoriz(e)) : t.left >= e.right && (e.lookleft = !1, e.moveleft = !0, flipHoriz(e))
}
function playCurrentThemeHurry(e) {
AudioPlayer.playTheme("Hurry " + (e || area.theme))
}! function(e) {
"use strict";
var t = function() {},
n = {
getType: function() {
return "null"
},
isSupported: function() {
return !1
},
update: t
},
x = function(e) {
var n = this,
x = window;
this.update = t, this.requestAnimationFrame = e || x.requestAnimationFrame || x.webkitRequestAnimationFrame || x.mozRequestAnimationFrame, this.tickFunction = function() {
n.update(), n.startTicker()
}, this.startTicker = function() {
n.requestAnimationFrame.apply(x, [n.tickFunction])
}
};
x.prototype.start = function(e) {
this.update = e || t, this.startTicker()
};
var r = function() {};
r.prototype.update = t, r.prototype.start = function(e) {
this.update = e || t
};
var i = function(e, t) {
this.listener = e, this.gamepadGetter = t, this.knownGamepads = []
};
i.factory = function(e) {
var t = n,
x = window && window.navigator;
return x && (void 0 !== x.webkitGamepads ? t = new i(e, (function() {
return x.webkitGamepads
})) : void 0 !== x.webkitGetGamepads && (t = new i(e, (function() {
return x.webkitGetGamepads()
})))), t
}, i.getType = function() {
return "WebKit"
}, i.prototype.getType = function() {
return i.getType()
}, i.prototype.isSupported = function() {
return !0
}, i.prototype.update = function() {
var e, t, n = this,
x = Array.prototype.slice.call(this.gamepadGetter(), 0);
for (t = this.knownGamepads.length - 1; t >= 0; t--) e = this.knownGamepads[t], x.indexOf(e) < 0 && (this.knownGamepads.splice(t, 1), this.listener._disconnect(e));
for (t = 0; t < x.length; t++)(e = x[t]) && n.knownGamepads.indexOf(e) < 0 && (n.knownGamepads.push(e), n.listener._connect(e))
};
var a = function(e) {
this.listener = e, window.addEventListener("gamepadconnected", (function(t) {
e._connect(t.gamepad)
})), window.addEventListener("gamepaddisconnected", (function(t) {
e._disconnect(t.gamepad)
}))
};
a.factory = function(e) {
var t = n;
return window && void 0 !== window.addEventListener && (t = new a(e)), t
}, a.getType = function() {
return "Firefox"
}, a.prototype.getType = function() {
return a.getType()
}, a.prototype.isSupported = function() {
return !0
}, a.prototype.update = t;
var o = function(e) {
this.updateStrategy = e || new x, this.gamepads = [], this.listeners = {}, this.platform = n, this.deadzone = .03, this.maximizeThreshold = .97
};
o.UpdateStrategies = {
AnimFrameUpdateStrategy: x,
ManualUpdateStrategy: r
}, o.PlatformFactories = [i.factory, a.factory], o.Type = {
PLAYSTATION: "playstation",
LOGITECH: "logitech",
XBOX: "xbox",
UNKNOWN: "unknown"
}, o.Event = {
CONNECTED: "connected",
UNSUPPORTED: "unsupported",
DISCONNECTED: "disconnected",
TICK: "tick",
BUTTON_DOWN: "button-down",
BUTTON_UP: "button-up",
AXIS_CHANGED: "axis-changed"
}, o.StandardButtons = ["FACE_1", "FACE_2", "FACE_3", "FACE_4", "LEFT_TOP_SHOULDER", "RIGHT_TOP_SHOULDER", "LEFT_BOTTOM_SHOULDER", "RIGHT_BOTTOM_SHOULDER", "SELECT_BACK", "START_FORWARD", "LEFT_STICK", "RIGHT_STICK", "DPAD_UP", "DPAD_DOWN", "DPAD_LEFT", "DPAD_RIGHT", "HOME"], o.StandardAxes = ["LEFT_STICK_X", "LEFT_STICK_Y", "RIGHT_STICK_X", "RIGHT_STICK_Y"];
var l, s = function(e, t, n) {
return t < e.length ? e[t] : n + (t - e.length + 1)
};
o.StandardMapping = {
env: {},
buttons: {
byButton: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
},
axes: {
byAxis: [0, 1, 2, 3]
}
}, o.Mappings = [{
env: {
platform: a.getType(),
type: o.Type.PLAYSTATION
},
buttons: {
byButton: [14, 13, 15, 12, 10, 11, 8, 9, 0, 3, 1, 2, 4, 6, 7, 5, 16]
},
axes: {
byAxis: [0, 1, 2, 3]
}
}, {
env: {
platform: i.getType(),
type: o.Type.LOGITECH
},
buttons: {
byButton: [1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 10]
},
axes: {
byAxis: [0, 1, 2, 3]
}
}, {
env: {
platform: a.getType(),
type: o.Type.LOGITECH
},
buttons: {
byButton: [0, 1, 2, 3, 4, 5, -1, -1, 6, 7, 8, 9, 11, 12, 13, 14, 10],
byAxis: [-1, -1, -1, -1, -1, -1, [2, 0, 1],
[2, 0, -1]
]
},
axes: {
byAxis: [0, 1, 3, 4]
}
}], o.prototype.init = function() {
var e = o.resolvePlatform(this),
t = this;
return this.platform = e, this.updateStrategy.start((function() {
t._update()
})), e.isSupported()
}, o.prototype.bind = function(e, t) {
return void 0 === this.listeners[e] && (this.listeners[e] = []), this.listeners[e].push(t), this
}, o.prototype.unbind = function(e, t) {
if (void 0 !== e) {
if (void 0 !== t) {
if (void 0 === this.listeners[e]) return !1;
for (var n = 0; n < this.listeners[e].length; n++)
if (this.listeners[e][n] === t) return this.listeners[e].splice(n, 1), !0;
return !1
}
this.listeners[e] = []
} else this.listeners = {}
}, o.prototype.count = function() {
return this.gamepads.length
}, o.prototype._fire = function(e, t) {
if (void 0 !== this.listeners[e])
for (var n = 0; n < this.listeners[e].length; n++) this.listeners[e][n].apply(this.listeners[e][n], [t])
}, o.getNullPlatform = function() {
return Object.create(n)
}, o.resolvePlatform = function(e) {
var t, x = n;
for (t = 0; !x.isSupported() && t < o.PlatformFactories.length; t++) x = o.PlatformFactories[t](e);
return x
}, o.prototype._connect = function(e) {
var t, n, x = this._resolveMapping(e);
for (e.state = {}, e.lastState = {}, e.updater = [], t = x.buttons.byButton.length, n = 0; n < t; n++) this._addButtonUpdater(e, x, n);
for (t = x.axes.byAxis.length, n = 0; n < t; n++) this._addAxisUpdater(e, x, n);
this.gamepads[e.index] = e, this._fire(o.Event.CONNECTED, e)
}, o.prototype._addButtonUpdater = function(e, t, n) {
var x, r = s(o.StandardButtons, n, "EXTRA_BUTTON_"),
i = this._createButtonGetter(e, t.buttons, n),
a = this,
l = {
gamepad: e,
control: r
};
e.state[r] = 0, e.lastState[r] = 0, x = function() {
var t = i(),
n = e.lastState[r],
x = t > .5,
s = n > .5;
e.state[r] = t, x && !s ? a._fire(o.Event.BUTTON_DOWN, Object.create(l)) : !x && s && a._fire(o.Event.BUTTON_UP, Object.create(l)), 0 !== t && 1 !== t && t !== n && a._fireAxisChangedEvent(e, r, t), e.lastState[r] = t
}, e.updater.push(x)
}, o.prototype._addAxisUpdater = function(e, t, n) {
var x, r = s(o.StandardAxes, n, "EXTRA_AXIS_"),
i = this._createAxisGetter(e, t.axes, n),
a = this;
e.state[r] = 0, e.lastState[r] = 0, x = function() {
var t = i(),
n = e.lastState[r];
e.state[r] = t, t !== n && a._fireAxisChangedEvent(e, r, t), e.lastState[r] = t
}, e.updater.push(x)
}, o.prototype._fireAxisChangedEvent = function(e, t, n) {
var x = {
gamepad: e,
axis: t,
value: n
};
this._fire(o.Event.AXIS_CHANGED, x)
}, o.prototype._createButtonGetter = (l = function() {
return 0
}, function(e, t, n) {
var x, r, i = l,
a = this;
return -1 !== (x = t.byButton[n]) ? "number" == typeof x && x < e.buttons.length && (i = function() {
return e.buttons[x]
}) : t.byAxis && n < t.byAxis.length && (x = t.byAxis[n], r = x, "[object Array]" === Object.prototype.toString.call(r) && 3 == x.length && x[0] < e.axes.length && (i = function(e, t, n) {
var x = l;
return t < n ? x = function() {
var x = n - t,
r = e();
return (r = (r - t) / x) < 0 ? 0 : r
} : n < t && (x = function() {
var x = t - n,
r = e();
return (r = (r - n) / x) > 1 ? 0 : 1 - r
}), x
}(i = function() {
var t = e.axes[x[0]];
return a._applyDeadzoneMaximize(t)
}, x[1], x[2]))), i
}), o.prototype._createAxisGetter = function() {
var e = function() {
return 0
};
return function(t, n, x) {
var r, i = e,
a = this;
return -1 !== (r = n.byAxis[x]) && "number" == typeof r && r < t.axes.length && (i = function() {
var e = t.axes[r];
return a._applyDeadzoneMaximize(e)
}), i
}
}(), o.prototype._disconnect = function(e) {
var t, n = [];
for (void 0 !== this.gamepads[e.index] && delete this.gamepads[e.index], t = 0; t < this.gamepads.length; t++) void 0 !== this.gamepads[t] && (n[t] = this.gamepads[t]);
this.gamepads = n, this._fire(o.Event.DISCONNECTED, e)
}, o.prototype._resolveControllerType = function(e) {
return -1 !== (e = e.toLowerCase()).indexOf("playstation") ? o.Type.PLAYSTATION : -1 !== e.indexOf("logitech") || -1 !== e.indexOf("wireless gamepad") ? o.Type.LOGITECH : -1 !== e.indexOf("xbox") || -1 !== e.indexOf("360") ? o.Type.XBOX : o.Type.UNKNOWN
}, o.prototype._resolveMapping = function(e) {
var t, n, x = o.Mappings,
r = null,
i = {
platform: this.platform.getType(),
type: this._resolveControllerType(e.id)
};
for (t = 0; !r && t < x.length; t++) n = x[t], o.envMatchesFilter(n.env, i) && (r = n);
return r || o.StandardMapping
}, o.envMatchesFilter = function(e, t) {
var n, x = !0;
for (n in e) e[n] !== t[n] && (x = !1);
return x
}, o.prototype._update = function() {
this.platform.update(), this.gamepads.forEach((function(e) {
e && e.updater.forEach((function(e) {
e()
}))
})), this.gamepads.length > 0 && this._fire(o.Event.TICK, this.gamepads)
}, o.prototype._applyDeadzoneMaximize = function(e, t, n) {
return t = void 0 !== t ? t : this.deadzone, n = void 0 !== n ? n : this.maximizeThreshold, e >= 0 ? e < t ? e = 0 : e > n && (e = 1) : e > -t ? e = 0 : e < -n && (e = -1), e
}, e.Gamepad = o
}("undefined" != typeof module && module.exports || window);
var customMute = !0;
function AudioPlayr(e) {
"use strict";
var t, n, x, r, i, a, o, l, s, d, u = this.play = function(e) {
var n = x[e];
if (!n) {
if (!(n = t[e])) return console.log("Unknown sound: '" + e + "'"), n;
x[e] = n
}
return n.name_raw = e, c(n), n.volume = !i, customMute || n.play(), n.used++ || n.addEventListener("ended", (function() {
! function(e, t) {
x[t] && delete x[t]
}(0, e)
})), n
};
function p(e) {
customMute || e.play()
}
function c(e) {
e && e.pause && (e.pause(), e.readyState && (e.currentTime = 0))
}
function m(e, t) {
var x, r, i = document.createElement("Audio");
for (r in h(i, d), n) x = n[r], i.appendChild(h(document.createElement("Source"), {
type: "audio/" + x,
src: a + "/" + t + "/" + x + "/" + e + "." + x
}));
return customMute || i.play(), i
}
function h(e, t) {
var n, x;
for (x in t) "object" == typeof(n = t[x]) ? (e[x] || (e[x] = {}), h(e[x], n)) : e[x] = n;
return e
}
this.playLocal = function(e, t) {
var n, x = u(e);
if (!x) return x;
switch (l.constructor) {
case Function:
n = l(t);
break;
case Number:
n = l;
break;
default:
n = Number(n) || 1
}
return x.volume = x.volume_real = n = 0, x
}, this.playTheme = function(e, t, n) {
if (n = void 0 === n || n, !e) switch (s.constructor) {
case Function:
e = s();
break;
case String:
e = s
}(i = r) && (c(i), r = void 0, delete x[i.name_raw]);
var i = r = u(e);
return i.loop = n, t || (i.used = !1), 1 == i.used && i.addEventListener("ended", this.playTheme), i
}, this.addEventListener = function(e, t, n) {
var r = x[e];
r && r.addEventListenever(t, n)
}, this.addEventImmediate = function(e, t, n) {
var r = x[e];
r && !r.paused ? r.addEventListener(t, n) : n()
}, this.toggleMute = function() {
for (var e in i = !i, x) x[e].volume = i ? 0 : x[e].volume_real || 1;
o && (localStorage[o] = i)
}, this.pause = function() {
for (var e in x) x[e] && x[e].pause()
}, this.resume = function() {
for (var e in x) x[e] && !customMute && p(x[e])
}, this.pauseTheme = function() {
r && r.pause()
}, this.resumeTheme = function() {
r && r.play()
}, this.clear = function() {
this.pause(), x = {}, this.theme = void 0
}, this.getLibrary = function() {
return t
}, this.getSounds = function() {
return x
},
function(e) {
t = e.library || {}, n = e.filetypes || ["mp3", "ogg"], i = e.muted || !1, a = e.directory || "", o = e.localStorageMuted || "", l = e.getVolumeLocal || 1, s = e.getThemeDefault || "Theme";
var r = e.soundSettings || {};
d = e.soundSettings || {
preload: r.preload || "auto",
used: 0,
volume: 0
}, x = {}, o && (i = localStorage[o]),
function() {
var e, n, x, r;
for (x in t)
for (r in e = t[x]) n = e[r], t[n] = m(n, x)
}()
}(e || {})
}
function TimeHandlr(e) {
"use strict";
var t, n, x, r, i, a, o, l, s;
this.getTime = function() {
return t
}, this.getEvents = function() {
return n
};
var d = this.addEvent = function(e, n) {
if (!(e instanceof Function)) return console.warn("Attempting to add an event that isn't a function."), console.log(arguments), !1;
n = n || 1;
var x = g(arguments);
x.splice(0, 2);
var r = {
func: e,
time_exec: t + n,
time_repeat: n,
args: x,
repeat: 1
};
return c(r, r.time_exec), r
},
u = this.addEventInterval = function(e, n, x) {
if (!(e instanceof Function)) return console.warn("Attempting to add an event that isn't a function."), console.log(arguments), !1;
n = n || 1, x = x || 1;
var r = g(arguments);
r.splice(0, 3);
var i = {
func: e,
time_exec: t + n,
time_repeat: n,
args: r,
repeat: x
};
return e.event = i, c(i, i.time_exec), i
},
p = this.addEventIntervalSynched = function(e, n, x, r, i) {
var a = n * i.length,
o = w(t / a) * a,
l = this,
s = function(e, n, x) {
return x.startcount = t, u.apply(e, n)
};
if (n = n || 1, x = x || 1, o == t) return s(l, arguments, r);
var p = o - t;
d(s, p, l, arguments, r)
};
function c(e, t) {
return n[t] ? (n[t].push(e), n[t]) : n[t] = [e]
}
this.clearEvent = function(e) {
e && (e.repeat = 0)
}, this.clearAllEvents = function() {
n = {}
};
var m = this.clearClassCycle = function(e, t) {
if (e[x] && e[x][t]) {
var n = e[x][t];
n[0] = !1, n.length = !1, delete e[x][t]
}
};
this.clearAllCycles = function(e) {
var t, n, x = e[x];
for (t in x)(n = x[t])[0] = !1, n.length = 1, delete x[t]
}, this.addSpriteCycle = function(e, t, n, r) {
e[x] || (e[x] = {}), m(e, n);
var i = "function" == typeof r;
n = n || 0;
var a = e[x][n] = h(e, t, i ? 0 : r);
return a.event && i && (a.event.count_changer = r), f(e, t), a
}, this.addSpriteCycleSynched = function(e, t, n, r) {
e[x] || (e[x] = {}), m(e, n), n = n || 0;
var i = e[x][n] = h(e, t, r, !0);
return f(e, t), i
};
function h(e, t, n, x) {
t.loc = t.oldclass = -1;
var a = x ? p : u;
return e[r] = function() {
a(f, n || o, 1 / 0, e, t)
}, e[i] && e[r](), t
}
function f(e, t) {
if (!e || !t || !t.length) return !0;
if (null != a && !e[a]) return !0; - 1 != t.oldclass && "" !== t.oldclass && s(e, t.oldclass), t.loc = ++t.loc % t.length;
var n = t[t.loc];
if (n) {
var x = n instanceof Function ? n(e, t) : n;
return "string" == typeof x ? (t.oldclass = x, l(e, x), !1) : !1 === x
}
return !1 === n
}
function g(e) {
return Array.prototype.slice.call(e)
}
function v(e, t) {
e.className += " " + t
}
function y(e, t) {
e.className = e.className.replace(new RegExp(" " + t, "gm"), "")
}
this.handleEvents = function() {
++t;
var e = n[t];
if (e) {
var x, r, i;
for (i = 0, r = e.length; i < r; ++i)(x = e[i]).repeat > 0 && !x.func.apply(this, x.args) && (x.count_changer && x.count_changer(x), x.repeat instanceof Function ? x.repeat.bind(x)() && (x.count += x.time_repeat, c(x, x.time_exec)) : --x.repeat > 0 && (x.time_exec += x.time_repeat, c(x, x.time_exec)));
delete n[t]
}
};
var w = Math.ceil;
! function(e) {
t = e.time || 0, n = e.events || {}, x = e.cycles || "cycles", e.className || "className", r = e.onSpriteCycleStart || "onSpriteCycleStart", i = e.doSpriteCycleStart || "doSpriteCycleStart", a = e.cycleCheckValidity, o = e.timingDefault || 7, l = e.addClass || window.addClass || v, s = e.removeClass || window.removeClass || y
}(e || {})
}
function QuadsKeepr(e) {
"use strict";
var t, n, x, r, i, a, o, l, s, d, u, p, c, m, h, f, g, v, y, w, T, S;
this.getQuadrants = function() {
return t
}, this.getNumQuads = function() {
return x
}, this.getNumRows = function() {
return r
}, this.getNumCols = function() {
return i
}, this.getQuadWidth = function() {
return l
}, this.getQuadHeight = function() {
return s
}, this.getDelX = function() {
return u
}, this.getOutDifference = function() {
return p
};
var P = this.resetQuadrants = function() {
t.length = 0, n.length = 0;
for (var e = 0; e < i; ++e) C((e - 2) * l);
c = t[0]
};
function b(e, t) {
this.left = t, this.top = (e - 1) * s, this.right = this.left + l, this.bottom = this.top + s, this.things = [], this.numobjects = this.tolx = this.toly = 0
}
function C(e) {
for (var x = [], i = 0; i < r; ++i) m = new b(i, e), x.push(m), t.push(m);
n.push(x)
}
function k() {
n.shift();
for (var e = 0; e < r; ++e) t.shift();
c = t[0], p = l
}
function z(e) {
for (var t = 0, n = e.length; t < n; ++t) E(e[t])
}
this.updateQuadrants = function(e) {
for (p += e = e || 0; c.left <= u;) k(), C(m.right), S && S()
}, this.determineAllQuadrants = function() {
var e, n;
for (e = 0; e < x; ++e) t[e].numthings = 0;
for (e = 0, n = arguments.length; e < n; ++e) z(arguments[e])
};
var E = this.determineThingQuadrants = function(e) {
e[y] = 0;
for (var n = 0; n < x; ++n)
if (A(e, t[n]) && (B(e, t[n], n), e[y] > e[w])) return
};
function B(e, t, n) {
e[T][e[y]] = t, ++e[y], t.things[t.numthings] = e, ++t.numthings
}
function A(e, t) {
return e[g] + d >= t.left && e[h] - d <= t.right && e[v] + d >= t.top && e[f] - d <= t.bottom
}! function(e) {
t = [], n = [], x = e.num_quads, r = e.num_rows, i = e.num_cols, x ? (r && (i = x / r), i && (r = x / i)) : (r || (r = 2), i || (i = 2), x = r * i), a = e.screen_width || 640, o = e.screen_height || 480, l = a / (i - 3), s = o / (r - 2), d = e.tolerance || 0, u = e.delx || -2 * l, p = l, h = e.thing_left || "left", g = e.thing_right || "right", f = e.thing_top || "top", v = e.thing_bottom || "bottom", y = e.thing_num_quads || "numquads", w = e.thing_max_quads || "maxquads", T = e.thing_quadrants || "quadrants", S = e.onUpdate, e.onCollide, P()
}(e || {})
}