6255 lines
333 KiB
JavaScript
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;'>©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 || {})
|
|
} |