// Generated by Construct 2, the HTML5 game and app creator :: http://www.scirra.com
var cr = {};
cr.plugins_ = {};
cr.behaviors = {};
// SG.detectPortalUrl();
if (typeof Object.getPrototypeOf !== "function")
{
if (typeof "test".__proto__ === "object")
{
Object.getPrototypeOf = function(object) {
return object.__proto__;
};
}
else
{
Object.getPrototypeOf = function(object) {
return object.constructor.prototype;
};
}
}
(function(){
cr.logexport = function (msg)
{
if (window.console && window.console.log)
window.console.log(msg);
};
cr.seal = function(x)
{
return x;
};
cr.freeze = function(x)
{
return x;
};
cr.is_undefined = function (x)
{
return typeof x === "undefined";
};
cr.is_number = function (x)
{
return typeof x === "number";
};
cr.is_string = function (x)
{
return typeof x === "string";
};
cr.isPOT = function (x)
{
return x > 0 && ((x - 1) & x) === 0;
};
cr.nextHighestPowerOfTwo = function(x) {
--x;
for (var i = 1; i < 32; i <<= 1) {
x = x | x >> i;
}
return x + 1;
}
cr.abs = function (x)
{
return (x < 0 ? -x : x);
};
cr.max = function (a, b)
{
return (a > b ? a : b);
};
cr.min = function (a, b)
{
return (a < b ? a : b);
};
cr.PI = Math.PI;
cr.round = function (x)
{
return (x + 0.5) | 0;
};
cr.floor = function (x)
{
if (x >= 0)
return x | 0;
else
return (x | 0) - 1; // correctly round down when negative
};
cr.ceil = function (x)
{
var f = x | 0;
return (f === x ? f : f + 1);
};
function Vector2(x, y)
{
this.x = x;
this.y = y;
cr.seal(this);
};
Vector2.prototype.offset = function (px, py)
{
this.x += px;
this.y += py;
return this;
};
Vector2.prototype.mul = function (px, py)
{
this.x *= px;
this.y *= py;
return this;
};
cr.vector2 = Vector2;
cr.segments_intersect = function(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y)
{
var max_ax, min_ax, max_ay, min_ay, max_bx, min_bx, max_by, min_by;
if (a1x < a2x)
{
min_ax = a1x;
max_ax = a2x;
}
else
{
min_ax = a2x;
max_ax = a1x;
}
if (b1x < b2x)
{
min_bx = b1x;
max_bx = b2x;
}
else
{
min_bx = b2x;
max_bx = b1x;
}
if (max_ax < min_bx || min_ax > max_bx)
return false;
if (a1y < a2y)
{
min_ay = a1y;
max_ay = a2y;
}
else
{
min_ay = a2y;
max_ay = a1y;
}
if (b1y < b2y)
{
min_by = b1y;
max_by = b2y;
}
else
{
min_by = b2y;
max_by = b1y;
}
if (max_ay < min_by || min_ay > max_by)
return false;
var dpx = b1x - a1x + b2x - a2x;
var dpy = b1y - a1y + b2y - a2y;
var qax = a2x - a1x;
var qay = a2y - a1y;
var qbx = b2x - b1x;
var qby = b2y - b1y;
var d = cr.abs(qay * qbx - qby * qax);
var la = qbx * dpy - qby * dpx;
if (cr.abs(la) > d)
return false;
var lb = qax * dpy - qay * dpx;
return cr.abs(lb) <= d;
};
function Rect(left, top, right, bottom)
{
this.set(left, top, right, bottom);
cr.seal(this);
};
Rect.prototype.set = function (left, top, right, bottom)
{
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
};
Rect.prototype.copy = function (r)
{
this.left = r.left;
this.top = r.top;
this.right = r.right;
this.bottom = r.bottom;
};
Rect.prototype.width = function ()
{
return this.right - this.left;
};
Rect.prototype.height = function ()
{
return this.bottom - this.top;
};
Rect.prototype.offset = function (px, py)
{
this.left += px;
this.top += py;
this.right += px;
this.bottom += py;
return this;
};
Rect.prototype.normalize = function ()
{
var temp = 0;
if (this.left > this.right)
{
temp = this.left;
this.left = this.right;
this.right = temp;
}
if (this.top > this.bottom)
{
temp = this.top;
this.top = this.bottom;
this.bottom = temp;
}
};
Rect.prototype.intersects_rect = function (rc)
{
return !(rc.right < this.left || rc.bottom < this.top || rc.left > this.right || rc.top > this.bottom);
};
Rect.prototype.intersects_rect_off = function (rc, ox, oy)
{
return !(rc.right + ox < this.left || rc.bottom + oy < this.top || rc.left + ox > this.right || rc.top + oy > this.bottom);
};
Rect.prototype.contains_pt = function (x, y)
{
return (x >= this.left && x <= this.right) && (y >= this.top && y <= this.bottom);
};
Rect.prototype.equals = function (r)
{
return this.left === r.left && this.top === r.top && this.right === r.right && this.bottom === r.bottom;
};
cr.rect = Rect;
function Quad()
{
this.tlx = 0;
this.tly = 0;
this.trx = 0;
this.try_ = 0; // is a keyword otherwise!
this.brx = 0;
this.bry = 0;
this.blx = 0;
this.bly = 0;
cr.seal(this);
};
Quad.prototype.set_from_rect = function (rc)
{
this.tlx = rc.left;
this.tly = rc.top;
this.trx = rc.right;
this.try_ = rc.top;
this.brx = rc.right;
this.bry = rc.bottom;
this.blx = rc.left;
this.bly = rc.bottom;
};
Quad.prototype.set_from_rotated_rect = function (rc, a)
{
if (a === 0)
{
this.set_from_rect(rc);
}
else
{
var sin_a = Math.sin(a);
var cos_a = Math.cos(a);
var left_sin_a = rc.left * sin_a;
var top_sin_a = rc.top * sin_a;
var right_sin_a = rc.right * sin_a;
var bottom_sin_a = rc.bottom * sin_a;
var left_cos_a = rc.left * cos_a;
var top_cos_a = rc.top * cos_a;
var right_cos_a = rc.right * cos_a;
var bottom_cos_a = rc.bottom * cos_a;
this.tlx = left_cos_a - top_sin_a;
this.tly = top_cos_a + left_sin_a;
this.trx = right_cos_a - top_sin_a;
this.try_ = top_cos_a + right_sin_a;
this.brx = right_cos_a - bottom_sin_a;
this.bry = bottom_cos_a + right_sin_a;
this.blx = left_cos_a - bottom_sin_a;
this.bly = bottom_cos_a + left_sin_a;
}
};
Quad.prototype.offset = function (px, py)
{
this.tlx += px;
this.tly += py;
this.trx += px;
this.try_ += py;
this.brx += px;
this.bry += py;
this.blx += px;
this.bly += py;
return this;
};
var minresult = 0;
var maxresult = 0;
function minmax4(a, b, c, d)
{
if (a < b)
{
if (c < d)
{
if (a < c)
minresult = a;
else
minresult = c;
if (b > d)
maxresult = b;
else
maxresult = d;
}
else
{
if (a < d)
minresult = a;
else
minresult = d;
if (b > c)
maxresult = b;
else
maxresult = c;
}
}
else
{
if (c < d)
{
if (b < c)
minresult = b;
else
minresult = c;
if (a > d)
maxresult = a;
else
maxresult = d;
}
else
{
if (b < d)
minresult = b;
else
minresult = d;
if (a > c)
maxresult = a;
else
maxresult = c;
}
}
};
Quad.prototype.bounding_box = function (rc)
{
minmax4(this.tlx, this.trx, this.brx, this.blx);
rc.left = minresult;
rc.right = maxresult;
minmax4(this.tly, this.try_, this.bry, this.bly);
rc.top = minresult;
rc.bottom = maxresult;
};
Quad.prototype.contains_pt = function (x, y)
{
var v0x = this.trx - this.tlx;
var v0y = this.try_ - this.tly;
var v1x = this.brx - this.tlx;
var v1y = this.bry - this.tly;
var v2x = x - this.tlx;
var v2y = y - this.tly;
var dot00 = v0x * v0x + v0y * v0y
var dot01 = v0x * v1x + v0y * v1y
var dot02 = v0x * v2x + v0y * v2y
var dot11 = v1x * v1x + v1y * v1y
var dot12 = v1x * v2x + v1y * v2y
var invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01);
var u = (dot11 * dot02 - dot01 * dot12) * invDenom;
var v = (dot00 * dot12 - dot01 * dot02) * invDenom;
if ((u >= 0.0) && (v > 0.0) && (u + v < 1))
return true;
v0x = this.blx - this.tlx;
v0y = this.bly - this.tly;
var dot00 = v0x * v0x + v0y * v0y
var dot01 = v0x * v1x + v0y * v1y
var dot02 = v0x * v2x + v0y * v2y
invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01);
u = (dot11 * dot02 - dot01 * dot12) * invDenom;
v = (dot00 * dot12 - dot01 * dot02) * invDenom;
return (u >= 0.0) && (v > 0.0) && (u + v < 1);
};
Quad.prototype.at = function (i, xory)
{
if (xory)
{
switch (i)
{
case 0: return this.tlx;
case 1: return this.trx;
case 2: return this.brx;
case 3: return this.blx;
case 4: return this.tlx;
default: return this.tlx;
}
}
else
{
switch (i)
{
case 0: return this.tly;
case 1: return this.try_;
case 2: return this.bry;
case 3: return this.bly;
case 4: return this.tly;
default: return this.tly;
}
}
};
Quad.prototype.midX = function ()
{
return (this.tlx + this.trx + this.brx + this.blx) / 4;
};
Quad.prototype.midY = function ()
{
return (this.tly + this.try_ + this.bry + this.bly) / 4;
};
Quad.prototype.intersects_segment = function (x1, y1, x2, y2)
{
if (this.contains_pt(x1, y1) || this.contains_pt(x2, y2))
return true;
var a1x, a1y, a2x, a2y;
var i;
for (i = 0; i < 4; i++)
{
a1x = this.at(i, true);
a1y = this.at(i, false);
a2x = this.at(i + 1, true);
a2y = this.at(i + 1, false);
if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y))
return true;
}
return false;
};
Quad.prototype.intersects_quad = function (rhs)
{
var midx = rhs.midX();
var midy = rhs.midY();
if (this.contains_pt(midx, midy))
return true;
midx = this.midX();
midy = this.midY();
if (rhs.contains_pt(midx, midy))
return true;
var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y;
var i, j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
a1x = this.at(i, true);
a1y = this.at(i, false);
a2x = this.at(i + 1, true);
a2y = this.at(i + 1, false);
b1x = rhs.at(j, true);
b1y = rhs.at(j, false);
b2x = rhs.at(j + 1, true);
b2y = rhs.at(j + 1, false);
if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y))
return true;
}
}
return false;
};
cr.quad = Quad;
cr.RGB = function (red, green, blue)
{
return Math.max(Math.min(red, 255), 0)
| (Math.max(Math.min(green, 255), 0) << 8)
| (Math.max(Math.min(blue, 255), 0) << 16);
};
cr.GetRValue = function (rgb)
{
return rgb & 0xFF;
};
cr.GetGValue = function (rgb)
{
return (rgb & 0xFF00) >> 8;
};
cr.GetBValue = function (rgb)
{
return (rgb & 0xFF0000) >> 16;
};
cr.shallowCopy = function (a, b, allowOverwrite)
{
var attr;
for (attr in b)
{
if (b.hasOwnProperty(attr))
{
;
a[attr] = b[attr];
}
}
return a;
};
cr.arrayRemove = function (arr, index)
{
var i, len;
index = cr.floor(index);
if (index < 0 || index >= arr.length)
return; // index out of bounds
if (index === 0) // removing first item
arr.shift();
else if (index === arr.length - 1) // removing last item
arr.pop();
else
{
for (i = index, len = arr.length - 1; i < len; i++)
arr[i] = arr[i + 1];
arr.length = len;
}
};
cr.shallowAssignArray = function (dest, src)
{
dest.length = src.length;
var i, len;
for (i = 0, len = src.length; i < len; i++)
dest[i] = src[i];
};
cr.appendArray = function (a, b)
{
a.push.apply(a, b);
};
cr.arrayFindRemove = function (arr, item)
{
var index = arr.indexOf(item);
if (index !== -1)
cr.arrayRemove(arr, index);
};
cr.clamp = function(x, a, b)
{
if (x < a)
return a;
else if (x > b)
return b;
else
return x;
};
cr.to_radians = function(x)
{
return x / (180.0 / cr.PI);
};
cr.to_degrees = function(x)
{
return x * (180.0 / cr.PI);
};
cr.clamp_angle_degrees = function (a)
{
a %= 360; // now in (-360, 360) range
if (a < 0)
a += 360; // now in [0, 360) range
return a;
};
cr.clamp_angle = function (a)
{
a %= 2 * cr.PI; // now in (-2pi, 2pi) range
if (a < 0)
a += 2 * cr.PI; // now in [0, 2pi) range
return a;
};
cr.to_clamped_degrees = function (x)
{
return cr.clamp_angle_degrees(cr.to_degrees(x));
};
cr.to_clamped_radians = function (x)
{
return cr.clamp_angle(cr.to_radians(x));
};
cr.angleTo = function(x1, y1, x2, y2)
{
var dx = x2 - x1;
var dy = y2 - y1;
return Math.atan2(dy, dx);
};
cr.angleDiff = function (a1, a2)
{
if (a1 === a2)
return 0;
var s1 = Math.sin(a1);
var c1 = Math.cos(a1);
var s2 = Math.sin(a2);
var c2 = Math.cos(a2);
var n = s1 * s2 + c1 * c2;
if (n >= 1)
return 0;
if (n <= -1)
return cr.PI;
return Math.acos(n);
};
cr.angleRotate = function (start, end, step)
{
var ss = Math.sin(start);
var cs = Math.cos(start);
var se = Math.sin(end);
var ce = Math.cos(end);
if (Math.acos(ss * se + cs * ce) > step)
{
if (cs * se - ss * ce > 0)
return cr.clamp_angle(start + step);
else
return cr.clamp_angle(start - step);
}
else
return cr.clamp_angle(end);
};
cr.angleClockwise = function (a1, a2)
{
var s1 = Math.sin(a1);
var c1 = Math.cos(a1);
var s2 = Math.sin(a2);
var c2 = Math.cos(a2);
return c1 * s2 - s1 * c2 <= 0;
};
cr.rotatePtAround = function (px, py, a, ox, oy, getx)
{
if (a === 0)
return getx ? px : py;
var sin_a = Math.sin(a);
var cos_a = Math.cos(a);
px -= ox;
py -= oy;
var left_sin_a = px * sin_a;
var top_sin_a = py * sin_a;
var left_cos_a = px * cos_a;
var top_cos_a = py * cos_a;
px = left_cos_a - top_sin_a;
py = top_cos_a + left_sin_a;
px += ox;
py += oy;
return getx ? px : py;
}
cr.distanceTo = function(x1, y1, x2, y2)
{
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt(dx*dx + dy*dy);
};
cr.xor = function (x, y)
{
return !x !== !y;
};
cr.lerp = function (a, b, x)
{
return a + (b - a) * x;
};
cr.hasAnyOwnProperty = function (o)
{
var p;
for (p in o)
{
if (o.hasOwnProperty(p))
return true;
}
return false;
};
cr.wipe = function (obj)
{
var p;
for (p in obj)
{
if (obj.hasOwnProperty(p))
delete obj[p];
}
};
var startup_time = +(new Date());
cr.performance_now = function()
{
if (typeof window["performance"] !== "undefined")
{
var winperf = window["performance"];
if (typeof winperf.now !== "undefined")
return winperf.now();
else if (typeof winperf["webkitNow"] !== "undefined")
return winperf["webkitNow"]();
else if (typeof winperf["mozNow"] !== "undefined")
return winperf["mozNow"]();
else if (typeof winperf["msNow"] !== "undefined")
return winperf["msNow"]();
}
return Date.now() - startup_time;
};
var supports_set = (typeof Set !== "undefined" && typeof Set.prototype["forEach"] !== "undefined");
function ObjectSet_()
{
this.s = null;
this.items = null;
this.item_count = 0;
if (supports_set)
{
this.s = new Set();
}
else
{
this.items = {};
}
this.values_cache = [];
this.cache_valid = true;
cr.seal(this);
};
ObjectSet_.prototype.contains = function (x)
{
if (supports_set)
return this.s["has"](x);
else
return this.items.hasOwnProperty(x.toString());
};
ObjectSet_.prototype.add = function (x)
{
if (supports_set)
{
if (!this.s["has"](x))
{
this.s["add"](x);
this.cache_valid = false;
}
}
else
{
var str = x.toString();
if (!this.items.hasOwnProperty(str))
{
this.items[str] = x;
this.item_count++;
this.cache_valid = false;
}
}
return this;
};
ObjectSet_.prototype.remove = function (x)
{
if (supports_set)
{
if (this.s["has"](x))
{
this.s["delete"](x);
this.cache_valid = false;
}
}
else
{
var str = x.toString();
if (this.items.hasOwnProperty(str))
{
delete this.items[str];
this.item_count--;
this.cache_valid = false;
}
}
return this;
};
ObjectSet_.prototype.clear = function ()
{
if (supports_set)
{
this.s["clear"]();
}
else
{
this.items = {};
this.item_count = 0;
}
this.values_cache.length = 0;
this.cache_valid = true;
return this;
};
ObjectSet_.prototype.isEmpty = function ()
{
if (supports_set)
return this.s["size"] === 0;
else
return this.item_count === 0;
};
ObjectSet_.prototype.count = function ()
{
if (supports_set)
return this.s["size"];
else
return this.item_count;
};
var current_arr = null;
var current_index = 0;
function set_append_to_arr(x)
{
current_arr[current_index++] = x;
};
ObjectSet_.prototype.update_cache = function ()
{
if (this.cache_valid)
return;
if (supports_set)
{
this.values_cache.length = this.s["size"];
current_arr = this.values_cache;
current_index = 0;
this.s["forEach"](set_append_to_arr);
;
current_arr = null;
current_index = 0;
}
else
{
this.values_cache.length = this.item_count;
var p, n = 0;
for (p in this.items)
{
if (this.items.hasOwnProperty(p))
this.values_cache[n++] = this.items[p];
}
;
}
this.cache_valid = true;
};
ObjectSet_.prototype.values = function ()
{
this.update_cache();
return this.values_cache.slice(0);
};
ObjectSet_.prototype.valuesRef = function ()
{
this.update_cache();
return this.values_cache;
};
cr.ObjectSet = ObjectSet_;
function KahanAdder_()
{
this.c = 0;
this.y = 0;
this.t = 0;
this.sum = 0;
cr.seal(this);
};
KahanAdder_.prototype.add = function (v)
{
this.y = v - this.c;
this.t = this.sum + this.y;
this.c = (this.t - this.sum) - this.y;
this.sum = this.t;
};
KahanAdder_.prototype.reset = function ()
{
this.c = 0;
this.y = 0;
this.t = 0;
this.sum = 0;
};
cr.KahanAdder = KahanAdder_;
cr.regexp_escape = function(text)
{
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
function CollisionPoly_(pts_array_)
{
this.pts_cache = [];
this.bboxLeft = 0;
this.bboxTop = 0;
this.bboxRight = 0;
this.bboxBottom = 0;
this.convexpolys = null; // for physics behavior to cache separated polys
this.set_pts(pts_array_);
cr.seal(this);
};
CollisionPoly_.prototype.set_pts = function(pts_array_)
{
this.pts_array = pts_array_;
this.pts_count = pts_array_.length / 2; // x, y, x, y... in array
this.pts_cache.length = pts_array_.length;
this.cache_width = -1;
this.cache_height = -1;
this.cache_angle = 0;
};
CollisionPoly_.prototype.is_empty = function()
{
return !this.pts_array.length;
};
CollisionPoly_.prototype.update_bbox = function ()
{
var myptscache = this.pts_cache;
var bboxLeft_ = myptscache[0];
var bboxRight_ = bboxLeft_;
var bboxTop_ = myptscache[1];
var bboxBottom_ = bboxTop_;
var x, y, i = 1, i2, len = this.pts_count;
for ( ; i < len; ++i)
{
i2 = i*2;
x = myptscache[i2];
y = myptscache[i2+1];
if (x < bboxLeft_)
bboxLeft_ = x;
if (x > bboxRight_)
bboxRight_ = x;
if (y < bboxTop_)
bboxTop_ = y;
if (y > bboxBottom_)
bboxBottom_ = y;
}
this.bboxLeft = bboxLeft_;
this.bboxRight = bboxRight_;
this.bboxTop = bboxTop_;
this.bboxBottom = bboxBottom_;
};
CollisionPoly_.prototype.set_from_rect = function(rc, offx, offy)
{
this.pts_cache.length = 8;
this.pts_count = 4;
var myptscache = this.pts_cache;
myptscache[0] = rc.left - offx;
myptscache[1] = rc.top - offy;
myptscache[2] = rc.right - offx;
myptscache[3] = rc.top - offy;
myptscache[4] = rc.right - offx;
myptscache[5] = rc.bottom - offy;
myptscache[6] = rc.left - offx;
myptscache[7] = rc.bottom - offy;
this.cache_width = rc.right - rc.left;
this.cache_height = rc.bottom - rc.top;
this.update_bbox();
};
CollisionPoly_.prototype.set_from_quad = function(q, offx, offy, w, h)
{
this.pts_cache.length = 8;
this.pts_count = 4;
var myptscache = this.pts_cache;
myptscache[0] = q.tlx - offx;
myptscache[1] = q.tly - offy;
myptscache[2] = q.trx - offx;
myptscache[3] = q.try_ - offy;
myptscache[4] = q.brx - offx;
myptscache[5] = q.bry - offy;
myptscache[6] = q.blx - offx;
myptscache[7] = q.bly - offy;
this.cache_width = w;
this.cache_height = h;
this.update_bbox();
};
CollisionPoly_.prototype.set_from_poly = function (r)
{
this.pts_count = r.pts_count;
cr.shallowAssignArray(this.pts_cache, r.pts_cache);
this.bboxLeft = r.bboxLeft;
this.bboxTop - r.bboxTop;
this.bboxRight = r.bboxRight;
this.bboxBottom = r.bboxBottom;
};
CollisionPoly_.prototype.cache_poly = function(w, h, a)
{
if (this.cache_width === w && this.cache_height === h && this.cache_angle === a)
return; // cache up-to-date
this.cache_width = w;
this.cache_height = h;
this.cache_angle = a;
var i, i2, i21, len, x, y;
var sina = 0;
var cosa = 1;
var myptsarray = this.pts_array;
var myptscache = this.pts_cache;
if (a !== 0)
{
sina = Math.sin(a);
cosa = Math.cos(a);
}
for (i = 0, len = this.pts_count; i < len; i++)
{
i2 = i*2;
i21 = i2+1;
x = myptsarray[i2] * w;
y = myptsarray[i21] * h;
myptscache[i2] = (x * cosa) - (y * sina);
myptscache[i21] = (y * cosa) + (x * sina);
}
this.update_bbox();
};
CollisionPoly_.prototype.contains_pt = function (a2x, a2y)
{
var myptscache = this.pts_cache;
if (a2x === myptscache[0] && a2y === myptscache[1])
return true;
var i, i2, imod, len = this.pts_count;
var a1x = this.bboxLeft - 110;
var a1y = this.bboxTop - 101;
var a3x = this.bboxRight + 131
var a3y = this.bboxBottom + 120;
var b1x, b1y, b2x, b2y;
var count1 = 0, count2 = 0;
for (i = 0; i < len; i++)
{
i2 = i*2;
imod = ((i+1)%len)*2;
b1x = myptscache[i2];
b1y = myptscache[i2+1];
b2x = myptscache[imod];
b2y = myptscache[imod+1];
if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y))
count1++;
if (cr.segments_intersect(a3x, a3y, a2x, a2y, b1x, b1y, b2x, b2y))
count2++;
}
return (count1 % 2 === 1) || (count2 % 2 === 1);
};
CollisionPoly_.prototype.intersects_poly = function (rhs, offx, offy)
{
var rhspts = rhs.pts_cache;
var mypts = this.pts_cache;
if (this.contains_pt(rhspts[0] + offx, rhspts[1] + offy))
return true;
if (rhs.contains_pt(mypts[0] - offx, mypts[1] - offy))
return true;
var i, i2, imod, leni, j, j2, jmod, lenj;
var a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y;
for (i = 0, leni = this.pts_count; i < leni; i++)
{
i2 = i*2;
imod = ((i+1)%leni)*2;
a1x = mypts[i2];
a1y = mypts[i2+1];
a2x = mypts[imod];
a2y = mypts[imod+1];
for (j = 0, lenj = rhs.pts_count; j < lenj; j++)
{
j2 = j*2;
jmod = ((j+1)%lenj)*2;
b1x = rhspts[j2] + offx;
b1y = rhspts[j2+1] + offy;
b2x = rhspts[jmod] + offx;
b2y = rhspts[jmod+1] + offy;
if (cr.segments_intersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y))
return true;
}
}
return false;
};
CollisionPoly_.prototype.intersects_segment = function (offx, offy, x1, y1, x2, y2)
{
var mypts = this.pts_cache;
if (this.contains_pt(x1 - offx, y1 - offy))
return true;
var i, leni, i2, imod;
var a1x, a1y, a2x, a2y;
for (i = 0, leni = this.pts_count; i < leni; i++)
{
i2 = i*2;
imod = ((i+1)%leni)*2;
a1x = mypts[i2] + offx;
a1y = mypts[i2+1] + offy;
a2x = mypts[imod] + offx;
a2y = mypts[imod+1] + offy;
if (cr.segments_intersect(x1, y1, x2, y2, a1x, a1y, a2x, a2y))
return true;
}
return false;
};
CollisionPoly_.prototype.mirror = function (px)
{
var i, leni, i2;
for (i = 0, leni = this.pts_count; i < leni; ++i)
{
i2 = i*2;
this.pts_cache[i2] = px * 2 - this.pts_cache[i2];
}
};
CollisionPoly_.prototype.flip = function (py)
{
var i, leni, i21;
for (i = 0, leni = this.pts_count; i < leni; ++i)
{
i21 = i*2+1;
this.pts_cache[i21] = py * 2 - this.pts_cache[i21];
}
};
CollisionPoly_.prototype.diag = function ()
{
var i, leni, i2, i21, temp;
for (i = 0, leni = this.pts_count; i < leni; ++i)
{
i2 = i*2;
i21 = i2+1;
temp = this.pts_cache[i2];
this.pts_cache[i2] = this.pts_cache[i21];
this.pts_cache[i21] = temp;
}
};
cr.CollisionPoly = CollisionPoly_;
function SparseGrid_(cellwidth_, cellheight_)
{
this.cellwidth = cellwidth_;
this.cellheight = cellheight_;
this.cells = {};
};
SparseGrid_.prototype.totalCellCount = 0;
SparseGrid_.prototype.getCell = function (x_, y_, create_if_missing)
{
var ret;
var col = this.cells[x_];
if (!col)
{
if (create_if_missing)
{
ret = allocGridCell(this, x_, y_);
this.cells[x_] = {};
this.cells[x_][y_] = ret;
return ret;
}
else
return null;
}
ret = col[y_];
if (ret)
return ret;
else if (create_if_missing)
{
ret = allocGridCell(this, x_, y_);
this.cells[x_][y_] = ret;
return ret;
}
else
return null;
};
SparseGrid_.prototype.XToCell = function (x_)
{
return cr.floor(x_ / this.cellwidth);
};
SparseGrid_.prototype.YToCell = function (y_)
{
return cr.floor(y_ / this.cellheight);
};
SparseGrid_.prototype.update = function (inst, oldrange, newrange)
{
var x, lenx, y, leny, cell;
if (oldrange)
{
for (x = oldrange.left, lenx = oldrange.right; x <= lenx; ++x)
{
for (y = oldrange.top, leny = oldrange.bottom; y <= leny; ++y)
{
if (newrange && newrange.contains_pt(x, y))
continue; // is still in this cell
cell = this.getCell(x, y, false); // don't create if missing
if (!cell)
continue; // cell does not exist yet
cell.remove(inst);
if (cell.isEmpty())
{
freeGridCell(cell);
this.cells[x][y] = null;
}
}
}
}
if (newrange)
{
for (x = newrange.left, lenx = newrange.right; x <= lenx; ++x)
{
for (y = newrange.top, leny = newrange.bottom; y <= leny; ++y)
{
if (oldrange && oldrange.contains_pt(x, y))
continue; // is still in this cell
this.getCell(x, y, true).insert(inst);
}
}
}
};
SparseGrid_.prototype.queryRange = function (rc, result)
{
var x, lenx, ystart, y, leny, cell;
x = this.XToCell(rc.left);
ystart = this.YToCell(rc.top);
lenx = this.XToCell(rc.right);
leny = this.YToCell(rc.bottom);
for ( ; x <= lenx; ++x)
{
for (y = ystart; y <= leny; ++y)
{
cell = this.getCell(x, y, false);
if (!cell)
continue;
cell.dump(result);
}
}
};
cr.SparseGrid = SparseGrid_;
var gridcellcache = [];
function allocGridCell(grid_, x_, y_)
{
var ret;
SparseGrid_.prototype.totalCellCount++;
if (gridcellcache.length)
{
ret = gridcellcache.pop();
ret.grid = grid_;
ret.x = x_;
ret.y = y_;
return ret;
}
else
return new cr.GridCell(grid_, x_, y_);
};
function freeGridCell(c)
{
SparseGrid_.prototype.totalCellCount--;
c.objects.clear();
if (gridcellcache.length < 1000)
gridcellcache.push(c);
};
function GridCell_(grid_, x_, y_)
{
this.grid = grid_;
this.x = x_;
this.y = y_;
this.objects = new cr.ObjectSet();
};
GridCell_.prototype.isEmpty = function ()
{
return this.objects.isEmpty();
};
GridCell_.prototype.insert = function (inst)
{
this.objects.add(inst);
};
GridCell_.prototype.remove = function (inst)
{
this.objects.remove(inst);
};
GridCell_.prototype.dump = function (result)
{
cr.appendArray(result, this.objects.valuesRef());
};
cr.GridCell = GridCell_;
var fxNames = [ "lighter",
"xor",
"copy",
"destination-over",
"source-in",
"destination-in",
"source-out",
"destination-out",
"source-atop",
"destination-atop"];
cr.effectToCompositeOp = function(effect)
{
if (effect <= 0 || effect >= 11)
return "source-over";
return fxNames[effect - 1]; // not including "none" so offset by 1
};
cr.setGLBlend = function(this_, effect, gl)
{
if (!gl)
return;
this_.srcBlend = gl.ONE;
this_.destBlend = gl.ONE_MINUS_SRC_ALPHA;
switch (effect) {
case 1: // lighter (additive)
this_.srcBlend = gl.ONE;
this_.destBlend = gl.ONE;
break;
case 2: // xor
break; // todo
case 3: // copy
this_.srcBlend = gl.ONE;
this_.destBlend = gl.ZERO;
break;
case 4: // destination-over
this_.srcBlend = gl.ONE_MINUS_DST_ALPHA;
this_.destBlend = gl.ONE;
break;
case 5: // source-in
this_.srcBlend = gl.DST_ALPHA;
this_.destBlend = gl.ZERO;
break;
case 6: // destination-in
this_.srcBlend = gl.ZERO;
this_.destBlend = gl.SRC_ALPHA;
break;
case 7: // source-out
this_.srcBlend = gl.ONE_MINUS_DST_ALPHA;
this_.destBlend = gl.ZERO;
break;
case 8: // destination-out
this_.srcBlend = gl.ZERO;
this_.destBlend = gl.ONE_MINUS_SRC_ALPHA;
break;
case 9: // source-atop
this_.srcBlend = gl.DST_ALPHA;
this_.destBlend = gl.ONE_MINUS_SRC_ALPHA;
break;
case 10: // destination-atop
this_.srcBlend = gl.ONE_MINUS_DST_ALPHA;
this_.destBlend = gl.SRC_ALPHA;
break;
}
};
cr.round6dp = function (x)
{
return cr.round(x * 1000000) / 1000000;
};
/*
var localeCompare_options = {
"usage": "search",
"sensitivity": "accent"
};
var has_localeCompare = !!"a".localeCompare;
var localeCompare_works1 = (has_localeCompare && "a".localeCompare("A", undefined, localeCompare_options) === 0);
var localeCompare_works2 = (has_localeCompare && "a".localeCompare("á", undefined, localeCompare_options) !== 0);
var supports_localeCompare = (has_localeCompare && localeCompare_works1 && localeCompare_works2);
*/
cr.equals_nocase = function (a, b)
{
if (typeof a !== "string" || typeof b !== "string")
return false;
if (a.length !== b.length)
return false;
if (a === b)
return true;
/*
if (supports_localeCompare)
{
return (a.localeCompare(b, undefined, localeCompare_options) === 0);
}
else
{
*/
return a.toLowerCase() === b.toLowerCase();
};
}());
var MatrixArray=typeof Float32Array!=="undefined"?Float32Array:Array,glMatrixArrayType=MatrixArray,vec3={},mat3={},mat4={},quat4={};vec3.create=function(a){var b=new MatrixArray(3);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2]);return b};vec3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];return b};vec3.add=function(a,b,c){if(!c||a===c)return a[0]+=b[0],a[1]+=b[1],a[2]+=b[2],a;c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];return c};
vec3.subtract=function(a,b,c){if(!c||a===c)return a[0]-=b[0],a[1]-=b[1],a[2]-=b[2],a;c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];return c};vec3.negate=function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];return b};vec3.scale=function(a,b,c){if(!c||a===c)return a[0]*=b,a[1]*=b,a[2]*=b,a;c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;return c};
vec3.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=Math.sqrt(c*c+d*d+e*e);if(g){if(g===1)return b[0]=c,b[1]=d,b[2]=e,b}else return b[0]=0,b[1]=0,b[2]=0,b;g=1/g;b[0]=c*g;b[1]=d*g;b[2]=e*g;return b};vec3.cross=function(a,b,c){c||(c=a);var d=a[0],e=a[1],a=a[2],g=b[0],f=b[1],b=b[2];c[0]=e*b-a*f;c[1]=a*g-d*b;c[2]=d*f-e*g;return c};vec3.length=function(a){var b=a[0],c=a[1],a=a[2];return Math.sqrt(b*b+c*c+a*a)};vec3.dot=function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]};
vec3.direction=function(a,b,c){c||(c=a);var d=a[0]-b[0],e=a[1]-b[1],a=a[2]-b[2],b=Math.sqrt(d*d+e*e+a*a);if(!b)return c[0]=0,c[1]=0,c[2]=0,c;b=1/b;c[0]=d*b;c[1]=e*b;c[2]=a*b;return c};vec3.lerp=function(a,b,c,d){d||(d=a);d[0]=a[0]+c*(b[0]-a[0]);d[1]=a[1]+c*(b[1]-a[1]);d[2]=a[2]+c*(b[2]-a[2]);return d};vec3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};
mat3.create=function(a){var b=new MatrixArray(9);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8]);return b};mat3.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return b};mat3.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a};
mat3.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[5];a[1]=a[3];a[2]=a[6];a[3]=c;a[5]=a[7];a[6]=d;a[7]=e;return a}b[0]=a[0];b[1]=a[3];b[2]=a[6];b[3]=a[1];b[4]=a[4];b[5]=a[7];b[6]=a[2];b[7]=a[5];b[8]=a[8];return b};mat3.toMat4=function(a,b){b||(b=mat4.create());b[15]=1;b[14]=0;b[13]=0;b[12]=0;b[11]=0;b[10]=a[8];b[9]=a[7];b[8]=a[6];b[7]=0;b[6]=a[5];b[5]=a[4];b[4]=a[3];b[3]=0;b[2]=a[2];b[1]=a[1];b[0]=a[0];return b};
mat3.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+"]"};mat4.create=function(a){var b=new MatrixArray(16);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]);return b};
mat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b};mat4.identity=function(a){a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};
mat4.transpose=function(a,b){if(!b||a===b){var c=a[1],d=a[2],e=a[3],g=a[6],f=a[7],h=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=c;a[6]=a[9];a[7]=a[13];a[8]=d;a[9]=g;a[11]=a[14];a[12]=e;a[13]=f;a[14]=h;return a}b[0]=a[0];b[1]=a[4];b[2]=a[8];b[3]=a[12];b[4]=a[1];b[5]=a[5];b[6]=a[9];b[7]=a[13];b[8]=a[2];b[9]=a[6];b[10]=a[10];b[11]=a[14];b[12]=a[3];b[13]=a[7];b[14]=a[11];b[15]=a[15];return b};
mat4.determinant=function(a){var b=a[0],c=a[1],d=a[2],e=a[3],g=a[4],f=a[5],h=a[6],i=a[7],j=a[8],k=a[9],l=a[10],n=a[11],o=a[12],m=a[13],p=a[14],a=a[15];return o*k*h*e-j*m*h*e-o*f*l*e+g*m*l*e+j*f*p*e-g*k*p*e-o*k*d*i+j*m*d*i+o*c*l*i-b*m*l*i-j*c*p*i+b*k*p*i+o*f*d*n-g*m*d*n-o*c*h*n+b*m*h*n+g*c*p*n-b*f*p*n-j*f*d*a+g*k*d*a+j*c*h*a-b*k*h*a-g*c*l*a+b*f*l*a};
mat4.inverse=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=a[4],h=a[5],i=a[6],j=a[7],k=a[8],l=a[9],n=a[10],o=a[11],m=a[12],p=a[13],r=a[14],s=a[15],A=c*h-d*f,B=c*i-e*f,t=c*j-g*f,u=d*i-e*h,v=d*j-g*h,w=e*j-g*i,x=k*p-l*m,y=k*r-n*m,z=k*s-o*m,C=l*r-n*p,D=l*s-o*p,E=n*s-o*r,q=1/(A*E-B*D+t*C+u*z-v*y+w*x);b[0]=(h*E-i*D+j*C)*q;b[1]=(-d*E+e*D-g*C)*q;b[2]=(p*w-r*v+s*u)*q;b[3]=(-l*w+n*v-o*u)*q;b[4]=(-f*E+i*z-j*y)*q;b[5]=(c*E-e*z+g*y)*q;b[6]=(-m*w+r*t-s*B)*q;b[7]=(k*w-n*t+o*B)*q;b[8]=(f*D-h*z+j*x)*q;
b[9]=(-c*D+d*z-g*x)*q;b[10]=(m*v-p*t+s*A)*q;b[11]=(-k*v+l*t-o*A)*q;b[12]=(-f*C+h*y-i*x)*q;b[13]=(c*C-d*y+e*x)*q;b[14]=(-m*u+p*B-r*A)*q;b[15]=(k*u-l*B+n*A)*q;return b};mat4.toRotationMat=function(a,b){b||(b=mat4.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};
mat4.toMat3=function(a,b){b||(b=mat3.create());b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[4];b[4]=a[5];b[5]=a[6];b[6]=a[8];b[7]=a[9];b[8]=a[10];return b};mat4.toInverseMat3=function(a,b){var c=a[0],d=a[1],e=a[2],g=a[4],f=a[5],h=a[6],i=a[8],j=a[9],k=a[10],l=k*f-h*j,n=-k*g+h*i,o=j*g-f*i,m=c*l+d*n+e*o;if(!m)return null;m=1/m;b||(b=mat3.create());b[0]=l*m;b[1]=(-k*d+e*j)*m;b[2]=(h*d-e*f)*m;b[3]=n*m;b[4]=(k*c-e*i)*m;b[5]=(-h*c+e*g)*m;b[6]=o*m;b[7]=(-j*c+d*i)*m;b[8]=(f*c-d*g)*m;return b};
mat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],f=a[3],h=a[4],i=a[5],j=a[6],k=a[7],l=a[8],n=a[9],o=a[10],m=a[11],p=a[12],r=a[13],s=a[14],a=a[15],A=b[0],B=b[1],t=b[2],u=b[3],v=b[4],w=b[5],x=b[6],y=b[7],z=b[8],C=b[9],D=b[10],E=b[11],q=b[12],F=b[13],G=b[14],b=b[15];c[0]=A*d+B*h+t*l+u*p;c[1]=A*e+B*i+t*n+u*r;c[2]=A*g+B*j+t*o+u*s;c[3]=A*f+B*k+t*m+u*a;c[4]=v*d+w*h+x*l+y*p;c[5]=v*e+w*i+x*n+y*r;c[6]=v*g+w*j+x*o+y*s;c[7]=v*f+w*k+x*m+y*a;c[8]=z*d+C*h+D*l+E*p;c[9]=z*e+C*i+D*n+E*r;c[10]=z*g+C*
j+D*o+E*s;c[11]=z*f+C*k+D*m+E*a;c[12]=q*d+F*h+G*l+b*p;c[13]=q*e+F*i+G*n+b*r;c[14]=q*g+F*j+G*o+b*s;c[15]=q*f+F*k+G*m+b*a;return c};mat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],b=b[2];c[0]=a[0]*d+a[4]*e+a[8]*b+a[12];c[1]=a[1]*d+a[5]*e+a[9]*b+a[13];c[2]=a[2]*d+a[6]*e+a[10]*b+a[14];return c};
mat4.multiplyVec4=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=b[3];c[0]=a[0]*d+a[4]*e+a[8]*g+a[12]*b;c[1]=a[1]*d+a[5]*e+a[9]*g+a[13]*b;c[2]=a[2]*d+a[6]*e+a[10]*g+a[14]*b;c[3]=a[3]*d+a[7]*e+a[11]*g+a[15]*b;return c};
mat4.translate=function(a,b,c){var d=b[0],e=b[1],b=b[2],g,f,h,i,j,k,l,n,o,m,p,r;if(!c||a===c)return a[12]=a[0]*d+a[4]*e+a[8]*b+a[12],a[13]=a[1]*d+a[5]*e+a[9]*b+a[13],a[14]=a[2]*d+a[6]*e+a[10]*b+a[14],a[15]=a[3]*d+a[7]*e+a[11]*b+a[15],a;g=a[0];f=a[1];h=a[2];i=a[3];j=a[4];k=a[5];l=a[6];n=a[7];o=a[8];m=a[9];p=a[10];r=a[11];c[0]=g;c[1]=f;c[2]=h;c[3]=i;c[4]=j;c[5]=k;c[6]=l;c[7]=n;c[8]=o;c[9]=m;c[10]=p;c[11]=r;c[12]=g*d+j*e+o*b+a[12];c[13]=f*d+k*e+m*b+a[13];c[14]=h*d+l*e+p*b+a[14];c[15]=i*d+n*e+r*b+a[15];
return c};mat4.scale=function(a,b,c){var d=b[0],e=b[1],b=b[2];if(!c||a===c)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=b,a[9]*=b,a[10]*=b,a[11]*=b,a;c[0]=a[0]*d;c[1]=a[1]*d;c[2]=a[2]*d;c[3]=a[3]*d;c[4]=a[4]*e;c[5]=a[5]*e;c[6]=a[6]*e;c[7]=a[7]*e;c[8]=a[8]*b;c[9]=a[9]*b;c[10]=a[10]*b;c[11]=a[11]*b;c[12]=a[12];c[13]=a[13];c[14]=a[14];c[15]=a[15];return c};
mat4.rotate=function(a,b,c,d){var e=c[0],g=c[1],c=c[2],f=Math.sqrt(e*e+g*g+c*c),h,i,j,k,l,n,o,m,p,r,s,A,B,t,u,v,w,x,y,z;if(!f)return null;f!==1&&(f=1/f,e*=f,g*=f,c*=f);h=Math.sin(b);i=Math.cos(b);j=1-i;b=a[0];f=a[1];k=a[2];l=a[3];n=a[4];o=a[5];m=a[6];p=a[7];r=a[8];s=a[9];A=a[10];B=a[11];t=e*e*j+i;u=g*e*j+c*h;v=c*e*j-g*h;w=e*g*j-c*h;x=g*g*j+i;y=c*g*j+e*h;z=e*c*j+g*h;e=g*c*j-e*h;g=c*c*j+i;d?a!==d&&(d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]):d=a;d[0]=b*t+n*u+r*v;d[1]=f*t+o*u+s*v;d[2]=k*t+m*u+A*
v;d[3]=l*t+p*u+B*v;d[4]=b*w+n*x+r*y;d[5]=f*w+o*x+s*y;d[6]=k*w+m*x+A*y;d[7]=l*w+p*x+B*y;d[8]=b*z+n*e+r*g;d[9]=f*z+o*e+s*g;d[10]=k*z+m*e+A*g;d[11]=l*z+p*e+B*g;return d};mat4.rotateX=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[4],g=a[5],f=a[6],h=a[7],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[4]=e*b+i*d;c[5]=g*b+j*d;c[6]=f*b+k*d;c[7]=h*b+l*d;c[8]=e*-d+i*b;c[9]=g*-d+j*b;c[10]=f*-d+k*b;c[11]=h*-d+l*b;return c};
mat4.rotateY=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[8],j=a[9],k=a[10],l=a[11];c?a!==c&&(c[4]=a[4],c[5]=a[5],c[6]=a[6],c[7]=a[7],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*-d;c[1]=g*b+j*-d;c[2]=f*b+k*-d;c[3]=h*b+l*-d;c[8]=e*d+i*b;c[9]=g*d+j*b;c[10]=f*d+k*b;c[11]=h*d+l*b;return c};
mat4.rotateZ=function(a,b,c){var d=Math.sin(b),b=Math.cos(b),e=a[0],g=a[1],f=a[2],h=a[3],i=a[4],j=a[5],k=a[6],l=a[7];c?a!==c&&(c[8]=a[8],c[9]=a[9],c[10]=a[10],c[11]=a[11],c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=e*b+i*d;c[1]=g*b+j*d;c[2]=f*b+k*d;c[3]=h*b+l*d;c[4]=e*-d+i*b;c[5]=g*-d+j*b;c[6]=f*-d+k*b;c[7]=h*-d+l*b;return c};
mat4.frustum=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=e*2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=e*2/i;f[6]=0;f[7]=0;f[8]=(b+a)/h;f[9]=(d+c)/i;f[10]=-(g+e)/j;f[11]=-1;f[12]=0;f[13]=0;f[14]=-(g*e*2)/j;f[15]=0;return f};mat4.perspective=function(a,b,c,d,e){a=c*Math.tan(a*Math.PI/360);b*=a;return mat4.frustum(-b,b,-a,a,c,d,e)};
mat4.ortho=function(a,b,c,d,e,g,f){f||(f=mat4.create());var h=b-a,i=d-c,j=g-e;f[0]=2/h;f[1]=0;f[2]=0;f[3]=0;f[4]=0;f[5]=2/i;f[6]=0;f[7]=0;f[8]=0;f[9]=0;f[10]=-2/j;f[11]=0;f[12]=-(a+b)/h;f[13]=-(d+c)/i;f[14]=-(g+e)/j;f[15]=1;return f};
mat4.lookAt=function(a,b,c,d){d||(d=mat4.create());var e,g,f,h,i,j,k,l,n=a[0],o=a[1],a=a[2];g=c[0];f=c[1];e=c[2];c=b[1];j=b[2];if(n===b[0]&&o===c&&a===j)return mat4.identity(d);c=n-b[0];j=o-b[1];k=a-b[2];l=1/Math.sqrt(c*c+j*j+k*k);c*=l;j*=l;k*=l;b=f*k-e*j;e=e*c-g*k;g=g*j-f*c;(l=Math.sqrt(b*b+e*e+g*g))?(l=1/l,b*=l,e*=l,g*=l):g=e=b=0;f=j*g-k*e;h=k*b-c*g;i=c*e-j*b;(l=Math.sqrt(f*f+h*h+i*i))?(l=1/l,f*=l,h*=l,i*=l):i=h=f=0;d[0]=b;d[1]=f;d[2]=c;d[3]=0;d[4]=e;d[5]=h;d[6]=j;d[7]=0;d[8]=g;d[9]=i;d[10]=k;d[11]=
0;d[12]=-(b*n+e*o+g*a);d[13]=-(f*n+h*o+i*a);d[14]=-(c*n+j*o+k*a);d[15]=1;return d};mat4.fromRotationTranslation=function(a,b,c){c||(c=mat4.create());var d=a[0],e=a[1],g=a[2],f=a[3],h=d+d,i=e+e,j=g+g,a=d*h,k=d*i;d*=j;var l=e*i;e*=j;g*=j;h*=f;i*=f;f*=j;c[0]=1-(l+g);c[1]=k+f;c[2]=d-i;c[3]=0;c[4]=k-f;c[5]=1-(a+g);c[6]=e+h;c[7]=0;c[8]=d+i;c[9]=e-h;c[10]=1-(a+l);c[11]=0;c[12]=b[0];c[13]=b[1];c[14]=b[2];c[15]=1;return c};
mat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"};quat4.create=function(a){var b=new MatrixArray(4);a&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]);return b};quat4.set=function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b};
quat4.calculateW=function(a,b){var c=a[0],d=a[1],e=a[2];if(!b||a===b)return a[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e)),a;b[0]=c;b[1]=d;b[2]=e;b[3]=-Math.sqrt(Math.abs(1-c*c-d*d-e*e));return b};quat4.inverse=function(a,b){if(!b||a===b)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=a[3];return b};quat4.length=function(a){var b=a[0],c=a[1],d=a[2],a=a[3];return Math.sqrt(b*b+c*c+d*d+a*a)};
quat4.normalize=function(a,b){b||(b=a);var c=a[0],d=a[1],e=a[2],g=a[3],f=Math.sqrt(c*c+d*d+e*e+g*g);if(f===0)return b[0]=0,b[1]=0,b[2]=0,b[3]=0,b;f=1/f;b[0]=c*f;b[1]=d*f;b[2]=e*f;b[3]=g*f;return b};quat4.multiply=function(a,b,c){c||(c=a);var d=a[0],e=a[1],g=a[2],a=a[3],f=b[0],h=b[1],i=b[2],b=b[3];c[0]=d*b+a*f+e*i-g*h;c[1]=e*b+a*h+g*f-d*i;c[2]=g*b+a*i+d*h-e*f;c[3]=a*b-d*f-e*h-g*i;return c};
quat4.multiplyVec3=function(a,b,c){c||(c=b);var d=b[0],e=b[1],g=b[2],b=a[0],f=a[1],h=a[2],a=a[3],i=a*d+f*g-h*e,j=a*e+h*d-b*g,k=a*g+b*e-f*d,d=-b*d-f*e-h*g;c[0]=i*a+d*-b+j*-h-k*-f;c[1]=j*a+d*-f+k*-b-i*-h;c[2]=k*a+d*-h+i*-f-j*-b;return c};quat4.toMat3=function(a,b){b||(b=mat3.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=k-g;b[4]=1-(j+e);b[5]=d+f;b[6]=c+h;b[7]=d-f;b[8]=1-(j+l);return b};
quat4.toMat4=function(a,b){b||(b=mat4.create());var c=a[0],d=a[1],e=a[2],g=a[3],f=c+c,h=d+d,i=e+e,j=c*f,k=c*h;c*=i;var l=d*h;d*=i;e*=i;f*=g;h*=g;g*=i;b[0]=1-(l+e);b[1]=k+g;b[2]=c-h;b[3]=0;b[4]=k-g;b[5]=1-(j+e);b[6]=d+f;b[7]=0;b[8]=c+h;b[9]=d-f;b[10]=1-(j+l);b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return b};
quat4.slerp=function(a,b,c,d){d||(d=a);var e=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],g,f;if(Math.abs(e)>=1)return d!==a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]),d;g=Math.acos(e);f=Math.sqrt(1-e*e);if(Math.abs(f)<0.001)return d[0]=a[0]*0.5+b[0]*0.5,d[1]=a[1]*0.5+b[1]*0.5,d[2]=a[2]*0.5+b[2]*0.5,d[3]=a[3]*0.5+b[3]*0.5,d;e=Math.sin((1-c)*g)/f;c=Math.sin(c*g)/f;d[0]=a[0]*e+b[0]*c;d[1]=a[1]*e+b[1]*c;d[2]=a[2]*e+b[2]*c;d[3]=a[3]*e+b[3]*c;return d};
quat4.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"};
(function()
{
var MAX_VERTICES = 8000; // equates to 2500 objects being drawn
var MAX_INDICES = (MAX_VERTICES / 2) * 3; // 6 indices for every 4 vertices
var MAX_POINTS = 8000;
var MULTI_BUFFERS = 4; // cycle 4 buffers to try and avoid blocking
var BATCH_NULL = 0;
var BATCH_QUAD = 1;
var BATCH_SETTEXTURE = 2;
var BATCH_SETOPACITY = 3;
var BATCH_SETBLEND = 4;
var BATCH_UPDATEMODELVIEW = 5;
var BATCH_RENDERTOTEXTURE = 6;
var BATCH_CLEAR = 7;
var BATCH_POINTS = 8;
var BATCH_SETPROGRAM = 9;
var BATCH_SETPROGRAMPARAMETERS = 10;
var BATCH_SETTEXTURE1 = 11;
function GLWrap_(gl, isMobile)
{
this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent);
this.width = 0; // not yet known, wait for call to setSize()
this.height = 0;
this.cam = vec3.create([0, 0, 100]); // camera position
this.look = vec3.create([0, 0, 0]); // lookat position
this.up = vec3.create([0, 1, 0]); // up vector
this.worldScale = vec3.create([1, 1, 1]); // world scaling factor
this.matP = mat4.create(); // perspective matrix
this.matMV = mat4.create(); // model view matrix
this.lastMV = mat4.create();
this.currentMV = mat4.create();
this.gl = gl;
this.initState();
};
GLWrap_.prototype.initState = function ()
{
var gl = this.gl;
var i, len;
this.lastOpacity = 1;
this.lastTexture0 = null; // last bound to TEXTURE0
this.lastTexture1 = null; // last bound to TEXTURE1
this.currentOpacity = 1;
gl.clearColor(0, 0, 0, 0);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.enable(gl.BLEND);
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
gl.disable(gl.CULL_FACE);
gl.disable(gl.DEPTH_TEST);
this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
this.lastSrcBlend = gl.ONE;
this.lastDestBlend = gl.ONE_MINUS_SRC_ALPHA;
this.pointBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer);
this.vertexBuffers = new Array(MULTI_BUFFERS);
this.texcoordBuffers = new Array(MULTI_BUFFERS);
for (i = 0; i < MULTI_BUFFERS; i++)
{
this.vertexBuffers[i] = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[i]);
this.texcoordBuffers[i] = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[i]);
}
this.curBuffer = 0;
this.indexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
this.vertexData = new Float32Array(MAX_VERTICES * 2);
this.texcoordData = new Float32Array(MAX_VERTICES * 2);
this.pointData = new Float32Array(MAX_POINTS * 4);
var indexData = new Uint16Array(MAX_INDICES);
i = 0, len = MAX_INDICES;
var fv = 0;
while (i < len)
{
indexData[i++] = fv; // top left
indexData[i++] = fv + 1; // top right
indexData[i++] = fv + 2; // bottom right (first tri)
indexData[i++] = fv; // top left
indexData[i++] = fv + 2; // bottom right
indexData[i++] = fv + 3; // bottom left
fv += 4;
}
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW);
this.vertexPtr = 0;
this.pointPtr = 0;
var fsSource, vsSource;
this.shaderPrograms = [];
fsSource = [
"varying mediump vec2 vTex;",
"uniform lowp float opacity;",
"uniform lowp sampler2D samplerFront;",
"void main(void) {",
" gl_FragColor = texture2D(samplerFront, vTex);",
" gl_FragColor *= opacity;",
"}"
].join("\n");
vsSource = [
"attribute highp vec2 aPos;",
"attribute mediump vec2 aTex;",
"varying mediump vec2 vTex;",
"uniform highp mat4 matP;",
"uniform highp mat4 matMV;",
"void main(void) {",
" gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);",
" vTex = aTex;",
"}"
].join("\n");
var shaderProg = this.createShaderProgram({src: fsSource}, vsSource, "");
;
this.shaderPrograms.push(shaderProg); // Default shader is always shader 0
fsSource = [
"uniform mediump sampler2D samplerFront;",
"varying lowp float opacity;",
"void main(void) {",
" gl_FragColor = texture2D(samplerFront, gl_PointCoord);",
" gl_FragColor *= opacity;",
"}"
].join("\n");
var pointVsSource = [
"attribute vec4 aPos;",
"varying float opacity;",
"uniform mat4 matP;",
"uniform mat4 matMV;",
"void main(void) {",
" gl_Position = matP * matMV * vec4(aPos.x, aPos.y, 0.0, 1.0);",
" gl_PointSize = aPos.z;",
" opacity = aPos.w;",
"}"
].join("\n");
shaderProg = this.createShaderProgram({src: fsSource}, pointVsSource, "");
;
this.shaderPrograms.push(shaderProg); // Point shader is always shader 1
for (var shader_name in cr.shaders)
{
if (cr.shaders.hasOwnProperty(shader_name))
this.shaderPrograms.push(this.createShaderProgram(cr.shaders[shader_name], vsSource, shader_name));
}
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, null);
this.batch = [];
this.batchPtr = 0;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
this.lastProgram = -1; // start -1 so first switchProgram can do work
this.currentProgram = -1; // current program during batch execution
this.currentShader = null;
this.fbo = gl.createFramebuffer();
this.renderToTex = null;
this.tmpVec3 = vec3.create([0, 0, 0]);
;
;
var pointsizes = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);
this.minPointSize = pointsizes[0];
this.maxPointSize = pointsizes[1];
;
this.switchProgram(0);
cr.seal(this);
};
function GLShaderProgram(gl, shaderProgram, name)
{
this.gl = gl;
this.shaderProgram = shaderProgram;
this.name = name;
this.locAPos = gl.getAttribLocation(shaderProgram, "aPos");
this.locATex = gl.getAttribLocation(shaderProgram, "aTex");
this.locMatP = gl.getUniformLocation(shaderProgram, "matP");
this.locMatMV = gl.getUniformLocation(shaderProgram, "matMV");
this.locOpacity = gl.getUniformLocation(shaderProgram, "opacity");
this.locSamplerFront = gl.getUniformLocation(shaderProgram, "samplerFront");
this.locSamplerBack = gl.getUniformLocation(shaderProgram, "samplerBack");
this.locDestStart = gl.getUniformLocation(shaderProgram, "destStart");
this.locDestEnd = gl.getUniformLocation(shaderProgram, "destEnd");
this.locSeconds = gl.getUniformLocation(shaderProgram, "seconds");
this.locPixelWidth = gl.getUniformLocation(shaderProgram, "pixelWidth");
this.locPixelHeight = gl.getUniformLocation(shaderProgram, "pixelHeight");
this.locLayerScale = gl.getUniformLocation(shaderProgram, "layerScale");
if (this.locOpacity)
gl.uniform1f(this.locOpacity, 1);
if (this.locSamplerFront)
gl.uniform1i(this.locSamplerFront, 0);
if (this.locSamplerBack)
gl.uniform1i(this.locSamplerBack, 1);
if (this.locDestStart)
gl.uniform2f(this.locDestStart, 0.0, 0.0);
if (this.locDestEnd)
gl.uniform2f(this.locDestEnd, 1.0, 1.0);
this.hasCurrentMatMV = false; // matMV needs updating
};
GLWrap_.prototype.createShaderProgram = function(shaderEntry, vsSource, name)
{
var gl = this.gl;
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, shaderEntry.src);
gl.compileShader(fragmentShader);
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS))
{
;
gl.deleteShader(fragmentShader);
return null;
}
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vsSource);
gl.compileShader(vertexShader);
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS))
{
;
gl.deleteShader(fragmentShader);
gl.deleteShader(vertexShader);
return null;
}
var shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, fragmentShader);
gl.attachShader(shaderProgram, vertexShader);
gl.linkProgram(shaderProgram);
if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS))
{
;
gl.deleteShader(fragmentShader);
gl.deleteShader(vertexShader);
gl.deleteProgram(shaderProgram);
return null;
}
gl.useProgram(shaderProgram);
;
gl.deleteShader(fragmentShader);
gl.deleteShader(vertexShader);
var ret = new GLShaderProgram(gl, shaderProgram, name);
ret.extendBoxHorizontal = shaderEntry.extendBoxHorizontal || 0;
ret.extendBoxVertical = shaderEntry.extendBoxVertical || 0;
ret.crossSampling = !!shaderEntry.crossSampling;
ret.animated = !!shaderEntry.animated;
ret.parameters = shaderEntry.parameters || [];
var i, len;
for (i = 0, len = ret.parameters.length; i < len; i++)
{
ret.parameters[i][1] = gl.getUniformLocation(shaderProgram, ret.parameters[i][0]);
gl.uniform1f(ret.parameters[i][1], 0);
}
cr.seal(ret);
return ret;
};
GLWrap_.prototype.getShaderIndex = function(name_)
{
var i, len;
for (i = 0, len = this.shaderPrograms.length; i < len; i++)
{
if (this.shaderPrograms[i].name === name_)
return i;
}
return -1;
};
GLWrap_.prototype.project = function (x, y, out)
{
var mv = this.matMV;
var proj = this.matP;
var fTempo = [0, 0, 0, 0, 0, 0, 0, 0];
fTempo[0] = mv[0]*x+mv[4]*y+mv[12];
fTempo[1] = mv[1]*x+mv[5]*y+mv[13];
fTempo[2] = mv[2]*x+mv[6]*y+mv[14];
fTempo[3] = mv[3]*x+mv[7]*y+mv[15];
fTempo[4] = proj[0]*fTempo[0]+proj[4]*fTempo[1]+proj[8]*fTempo[2]+proj[12]*fTempo[3];
fTempo[5] = proj[1]*fTempo[0]+proj[5]*fTempo[1]+proj[9]*fTempo[2]+proj[13]*fTempo[3];
fTempo[6] = proj[2]*fTempo[0]+proj[6]*fTempo[1]+proj[10]*fTempo[2]+proj[14]*fTempo[3];
fTempo[7] = -fTempo[2];
if(fTempo[7]===0.0) //The w value
return;
fTempo[7]=1.0/fTempo[7];
fTempo[4]*=fTempo[7];
fTempo[5]*=fTempo[7];
fTempo[6]*=fTempo[7];
out[0]=(fTempo[4]*0.5+0.5)*this.width;
out[1]=(fTempo[5]*0.5+0.5)*this.height;
};
GLWrap_.prototype.setSize = function(w, h, force)
{
if (this.width === w && this.height === h && !force)
return;
this.endBatch();
this.width = w;
this.height = h;
this.gl.viewport(0, 0, w, h);
mat4.perspective(45, w / h, 1, 1000, this.matP);
mat4.lookAt(this.cam, this.look, this.up, this.matMV);
var tl = [0, 0];
var br = [0, 0];
this.project(0, 0, tl);
this.project(1, 1, br);
this.worldScale[0] = 1 / (br[0] - tl[0]);
this.worldScale[1] = -1 / (br[1] - tl[1]);
var i, len, s;
for (i = 0, len = this.shaderPrograms.length; i < len; i++)
{
s = this.shaderPrograms[i];
s.hasCurrentMatMV = false;
if (s.locMatP)
{
this.gl.useProgram(s.shaderProgram);
this.gl.uniformMatrix4fv(s.locMatP, false, this.matP);
}
}
this.gl.useProgram(this.shaderPrograms[this.lastProgram].shaderProgram);
this.gl.bindTexture(this.gl.TEXTURE_2D, null);
this.gl.activeTexture(this.gl.TEXTURE1);
this.gl.bindTexture(this.gl.TEXTURE_2D, null);
this.gl.activeTexture(this.gl.TEXTURE0);
this.lastTexture0 = null;
this.lastTexture1 = null;
};
GLWrap_.prototype.resetModelView = function ()
{
mat4.lookAt(this.cam, this.look, this.up, this.matMV);
mat4.scale(this.matMV, this.worldScale);
};
GLWrap_.prototype.translate = function (x, y)
{
if (x === 0 && y === 0)
return;
this.tmpVec3[0] = x;// * this.worldScale[0];
this.tmpVec3[1] = y;// * this.worldScale[1];
this.tmpVec3[2] = 0;
mat4.translate(this.matMV, this.tmpVec3);
};
GLWrap_.prototype.scale = function (x, y)
{
if (x === 1 && y === 1)
return;
this.tmpVec3[0] = x;
this.tmpVec3[1] = y;
this.tmpVec3[2] = 1;
mat4.scale(this.matMV, this.tmpVec3);
};
GLWrap_.prototype.rotateZ = function (a)
{
if (a === 0)
return;
mat4.rotateZ(this.matMV, a);
};
GLWrap_.prototype.updateModelView = function()
{
var anydiff = false;
for (var i = 0; i < 16; i++)
{
if (this.lastMV[i] !== this.matMV[i])
{
anydiff = true;
break;
}
}
if (!anydiff)
return;
var b = this.pushBatch();
b.type = BATCH_UPDATEMODELVIEW;
if (b.mat4param)
mat4.set(this.matMV, b.mat4param);
else
b.mat4param = mat4.create(this.matMV);
mat4.set(this.matMV, this.lastMV);
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
/*
var debugBatch = false;
jQuery(document).mousedown(
function(info) {
if (info.which === 2)
debugBatch = true;
}
);
*/
function GLBatchJob(type_, glwrap_)
{
this.type = type_;
this.glwrap = glwrap_;
this.gl = glwrap_.gl;
this.opacityParam = 0; // for setOpacity()
this.startIndex = 0; // for quad()
this.indexCount = 0; // "
this.texParam = null; // for setTexture()
this.mat4param = null; // for updateModelView()
this.shaderParams = []; // for user parameters
cr.seal(this);
};
GLBatchJob.prototype.doSetTexture = function ()
{
this.gl.bindTexture(this.gl.TEXTURE_2D, this.texParam);
};
GLBatchJob.prototype.doSetTexture1 = function ()
{
var gl = this.gl;
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, this.texParam);
gl.activeTexture(gl.TEXTURE0);
};
GLBatchJob.prototype.doSetOpacity = function ()
{
var o = this.opacityParam;
var glwrap = this.glwrap;
glwrap.currentOpacity = o;
var curProg = glwrap.currentShader;
if (curProg.locOpacity)
this.gl.uniform1f(curProg.locOpacity, o);
};
GLBatchJob.prototype.doQuad = function ()
{
this.gl.drawElements(this.gl.TRIANGLES, this.indexCount, this.gl.UNSIGNED_SHORT, this.startIndex * 2);
};
GLBatchJob.prototype.doSetBlend = function ()
{
this.gl.blendFunc(this.startIndex, this.indexCount);
};
GLBatchJob.prototype.doUpdateModelView = function ()
{
var i, len, s, shaderPrograms = this.glwrap.shaderPrograms, currentProgram = this.glwrap.currentProgram;
for (i = 0, len = shaderPrograms.length; i < len; i++)
{
s = shaderPrograms[i];
if (i === currentProgram && s.locMatMV)
{
this.gl.uniformMatrix4fv(s.locMatMV, false, this.mat4param);
s.hasCurrentMatMV = true;
}
else
s.hasCurrentMatMV = false;
}
mat4.set(this.mat4param, this.glwrap.currentMV);
};
GLBatchJob.prototype.doRenderToTexture = function ()
{
var gl = this.gl;
var glwrap = this.glwrap;
if (this.texParam)
{
if (glwrap.lastTexture1 === this.texParam)
{
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, null);
glwrap.lastTexture1 = null;
gl.activeTexture(gl.TEXTURE0);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, glwrap.fbo);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.texParam, 0);
}
else
{
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
}
};
GLBatchJob.prototype.doClear = function ()
{
var gl = this.gl;
if (this.startIndex === 0) // clear whole surface
{
gl.clearColor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]);
gl.clear(gl.COLOR_BUFFER_BIT);
}
else // clear rectangle
{
gl.enable(gl.SCISSOR_TEST);
gl.scissor(this.mat4param[0], this.mat4param[1], this.mat4param[2], this.mat4param[3]);
gl.clearColor(0, 0, 0, 0);
gl.clear(this.gl.COLOR_BUFFER_BIT);
gl.disable(gl.SCISSOR_TEST);
}
};
GLBatchJob.prototype.doPoints = function ()
{
var gl = this.gl;
var glwrap = this.glwrap;
var s = glwrap.shaderPrograms[1];
gl.useProgram(s.shaderProgram);
if (!s.hasCurrentMatMV && s.locMatMV)
{
gl.uniformMatrix4fv(s.locMatMV, false, glwrap.currentMV);
s.hasCurrentMatMV = true;
}
gl.enableVertexAttribArray(s.locAPos);
gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.pointBuffer);
gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.POINTS, this.startIndex / 4, this.indexCount);
s = glwrap.currentShader;
gl.useProgram(s.shaderProgram);
if (s.locAPos >= 0)
{
gl.enableVertexAttribArray(s.locAPos);
gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]);
gl.vertexAttribPointer(s.locAPos, 2, gl.FLOAT, false, 0, 0);
}
if (s.locATex >= 0)
{
gl.enableVertexAttribArray(s.locATex);
gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]);
gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0);
}
};
GLBatchJob.prototype.doSetProgram = function ()
{
var gl = this.gl;
var glwrap = this.glwrap;
var s = glwrap.shaderPrograms[this.startIndex]; // recycled param to save memory
glwrap.currentProgram = this.startIndex; // current batch program
glwrap.currentShader = s;
gl.useProgram(s.shaderProgram); // switch to
if (!s.hasCurrentMatMV && s.locMatMV)
{
gl.uniformMatrix4fv(s.locMatMV, false, glwrap.currentMV);
s.hasCurrentMatMV = true;
}
if (s.locOpacity)
gl.uniform1f(s.locOpacity, glwrap.currentOpacity);
if (s.locAPos >= 0)
{
gl.enableVertexAttribArray(s.locAPos);
gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.vertexBuffers[glwrap.curBuffer]);
gl.vertexAttribPointer(s.locAPos, 2, gl.FLOAT, false, 0, 0);
}
if (s.locATex >= 0)
{
gl.enableVertexAttribArray(s.locATex);
gl.bindBuffer(gl.ARRAY_BUFFER, glwrap.texcoordBuffers[glwrap.curBuffer]);
gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0);
}
}
GLBatchJob.prototype.doSetProgramParameters = function ()
{
var i, len, s = this.glwrap.currentShader;
var gl = this.gl;
if (s.locSamplerBack && this.glwrap.lastTexture1 !== this.texParam)
{
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, this.texParam);
this.glwrap.lastTexture1 = this.texParam;
gl.activeTexture(gl.TEXTURE0);
}
if (s.locPixelWidth)
gl.uniform1f(s.locPixelWidth, this.mat4param[0]);
if (s.locPixelHeight)
gl.uniform1f(s.locPixelHeight, this.mat4param[1]);
if (s.locDestStart)
gl.uniform2f(s.locDestStart, this.mat4param[2], this.mat4param[3]);
if (s.locDestEnd)
gl.uniform2f(s.locDestEnd, this.mat4param[4], this.mat4param[5]);
if (s.locLayerScale)
gl.uniform1f(s.locLayerScale, this.mat4param[6]);
if (s.locSeconds)
gl.uniform1f(s.locSeconds, cr.performance_now() / 1000.0);
if (s.parameters.length)
{
for (i = 0, len = s.parameters.length; i < len; i++)
{
gl.uniform1f(s.parameters[i][1], this.shaderParams[i]);
}
}
};
GLWrap_.prototype.pushBatch = function ()
{
if (this.batchPtr === this.batch.length)
this.batch.push(new GLBatchJob(BATCH_NULL, this));
return this.batch[this.batchPtr++];
};
GLWrap_.prototype.endBatch = function ()
{
if (this.batchPtr === 0)
return;
if (this.gl.isContextLost())
return;
var gl = this.gl;
if (this.pointPtr > 0)
{
gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer);
gl.bufferData(gl.ARRAY_BUFFER, this.pointData.subarray(0, this.pointPtr), gl.STREAM_DRAW);
if (s && s.locAPos >= 0 && s.name === "")
gl.vertexAttribPointer(s.locAPos, 4, gl.FLOAT, false, 0, 0);
}
if (this.vertexPtr > 0)
{
var s = this.currentShader;
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffers[this.curBuffer]);
gl.bufferData(gl.ARRAY_BUFFER, this.vertexData.subarray(0, this.vertexPtr), gl.STREAM_DRAW);
if (s && s.locAPos >= 0 && s.name !== "")
gl.vertexAttribPointer(s.locAPos, 2, gl.FLOAT, false, 0, 0);
gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffers[this.curBuffer]);
gl.bufferData(gl.ARRAY_BUFFER, this.texcoordData.subarray(0, this.vertexPtr), gl.STREAM_DRAW);
if (s && s.locATex >= 0 && s.name !== "")
gl.vertexAttribPointer(s.locATex, 2, gl.FLOAT, false, 0, 0);
}
var i, len, b;
for (i = 0, len = this.batchPtr; i < len; i++)
{
b = this.batch[i];
switch (b.type) {
case BATCH_QUAD:
b.doQuad();
break;
case BATCH_SETTEXTURE:
b.doSetTexture();
break;
case BATCH_SETOPACITY:
b.doSetOpacity();
break;
case BATCH_SETBLEND:
b.doSetBlend();
break;
case BATCH_UPDATEMODELVIEW:
b.doUpdateModelView();
break;
case BATCH_RENDERTOTEXTURE:
b.doRenderToTexture();
break;
case BATCH_CLEAR:
b.doClear();
break;
case BATCH_POINTS:
b.doPoints();
break;
case BATCH_SETPROGRAM:
b.doSetProgram();
break;
case BATCH_SETPROGRAMPARAMETERS:
b.doSetProgramParameters();
break;
case BATCH_SETTEXTURE1:
b.doSetTexture1();
break;
}
}
this.batchPtr = 0;
this.vertexPtr = 0;
this.pointPtr = 0;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
this.curBuffer++;
if (this.curBuffer >= MULTI_BUFFERS)
this.curBuffer = 0;
};
GLWrap_.prototype.setOpacity = function (op)
{
if (op === this.lastOpacity)
return;
var b = this.pushBatch();
b.type = BATCH_SETOPACITY;
b.opacityParam = op;
this.lastOpacity = op;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
GLWrap_.prototype.setTexture = function (tex)
{
if (tex === this.lastTexture0)
return;
;
var b = this.pushBatch();
b.type = BATCH_SETTEXTURE;
b.texParam = tex;
this.lastTexture0 = tex;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
GLWrap_.prototype.setBlend = function (s, d)
{
if (s === this.lastSrcBlend && d === this.lastDestBlend)
return;
var b = this.pushBatch();
b.type = BATCH_SETBLEND;
b.startIndex = s; // recycle params to save memory
b.indexCount = d;
this.lastSrcBlend = s;
this.lastDestBlend = d;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
GLWrap_.prototype.setAlphaBlend = function ()
{
this.setBlend(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
};
var LAST_VERTEX = MAX_VERTICES * 2 - 8;
GLWrap_.prototype.quad = function(tlx, tly, trx, try_, brx, bry, blx, bly)
{
if (this.vertexPtr >= LAST_VERTEX)
this.endBatch();
var v = this.vertexPtr; // vertex cursor
var vd = this.vertexData; // vertex data array
var td = this.texcoordData; // texture coord data array
if (this.hasQuadBatchTop)
{
this.batch[this.batchPtr - 1].indexCount += 6;
}
else
{
var b = this.pushBatch();
b.type = BATCH_QUAD;
b.startIndex = (v / 4) * 3;
b.indexCount = 6;
this.hasQuadBatchTop = true;
this.hasPointBatchTop = false;
}
vd[v] = tlx;
td[v++] = 0;
vd[v] = tly;
td[v++] = 0;
vd[v] = trx;
td[v++] = 1;
vd[v] = try_;
td[v++] = 0;
vd[v] = brx;
td[v++] = 1;
vd[v] = bry;
td[v++] = 1;
vd[v] = blx;
td[v++] = 0;
vd[v] = bly;
td[v++] = 1;
this.vertexPtr = v;
};
GLWrap_.prototype.quadTex = function(tlx, tly, trx, try_, brx, bry, blx, bly, rcTex)
{
if (this.vertexPtr >= LAST_VERTEX)
this.endBatch();
var v = this.vertexPtr; // vertex cursor
var vd = this.vertexData; // vertex data array
var td = this.texcoordData; // texture coord data array
if (this.hasQuadBatchTop)
{
this.batch[this.batchPtr - 1].indexCount += 6;
}
else
{
var b = this.pushBatch();
b.type = BATCH_QUAD;
b.startIndex = (v / 4) * 3;
b.indexCount = 6;
this.hasQuadBatchTop = true;
this.hasPointBatchTop = false;
}
var rc_left = rcTex.left;
var rc_top = rcTex.top;
var rc_right = rcTex.right;
var rc_bottom = rcTex.bottom;
vd[v] = tlx;
td[v++] = rc_left;
vd[v] = tly;
td[v++] = rc_top;
vd[v] = trx;
td[v++] = rc_right;
vd[v] = try_;
td[v++] = rc_top;
vd[v] = brx;
td[v++] = rc_right;
vd[v] = bry;
td[v++] = rc_bottom;
vd[v] = blx;
td[v++] = rc_left;
vd[v] = bly;
td[v++] = rc_bottom;
this.vertexPtr = v;
};
GLWrap_.prototype.quadTexUV = function(tlx, tly, trx, try_, brx, bry, blx, bly, tlu, tlv, tru, trv, bru, brv, blu, blv)
{
if (this.vertexPtr >= LAST_VERTEX)
this.endBatch();
var v = this.vertexPtr; // vertex cursor
var vd = this.vertexData; // vertex data array
var td = this.texcoordData; // texture coord data array
if (this.hasQuadBatchTop)
{
this.batch[this.batchPtr - 1].indexCount += 6;
}
else
{
var b = this.pushBatch();
b.type = BATCH_QUAD;
b.startIndex = (v / 4) * 3;
b.indexCount = 6;
this.hasQuadBatchTop = true;
this.hasPointBatchTop = false;
}
vd[v] = tlx;
td[v++] = tlu;
vd[v] = tly;
td[v++] = tlv;
vd[v] = trx;
td[v++] = tru;
vd[v] = try_;
td[v++] = trv;
vd[v] = brx;
td[v++] = bru;
vd[v] = bry;
td[v++] = brv;
vd[v] = blx;
td[v++] = blu;
vd[v] = bly;
td[v++] = blv;
this.vertexPtr = v;
};
var LAST_POINT = MAX_POINTS - 4;
GLWrap_.prototype.point = function(x_, y_, size_, opacity_)
{
if (this.pointPtr >= LAST_POINT)
this.endBatch();
var p = this.pointPtr; // point cursor
var pd = this.pointData; // point data array
if (this.hasPointBatchTop)
{
this.batch[this.batchPtr - 1].indexCount++;
}
else
{
var b = this.pushBatch();
b.type = BATCH_POINTS;
b.startIndex = p;
b.indexCount = 1;
this.hasPointBatchTop = true;
this.hasQuadBatchTop = false;
}
pd[p++] = x_;
pd[p++] = y_;
pd[p++] = size_;
pd[p++] = opacity_;
this.pointPtr = p;
};
GLWrap_.prototype.switchProgram = function (progIndex)
{
if (this.lastProgram === progIndex)
return; // no change
var shaderProg = this.shaderPrograms[progIndex];
if (!shaderProg)
{
if (this.lastProgram === 0)
return; // already on default shader
progIndex = 0;
shaderProg = this.shaderPrograms[0];
}
var b = this.pushBatch();
b.type = BATCH_SETPROGRAM;
b.startIndex = progIndex;
this.lastProgram = progIndex;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
GLWrap_.prototype.programUsesDest = function (progIndex)
{
var s = this.shaderPrograms[progIndex];
return !!(s.locDestStart || s.locDestEnd);
};
GLWrap_.prototype.programUsesCrossSampling = function (progIndex)
{
var s = this.shaderPrograms[progIndex];
return !!(s.locDestStart || s.locDestEnd || s.crossSampling);
};
GLWrap_.prototype.programExtendsBox = function (progIndex)
{
var s = this.shaderPrograms[progIndex];
return s.extendBoxHorizontal !== 0 || s.extendBoxVertical !== 0;
};
GLWrap_.prototype.getProgramBoxExtendHorizontal = function (progIndex)
{
return this.shaderPrograms[progIndex].extendBoxHorizontal;
};
GLWrap_.prototype.getProgramBoxExtendVertical = function (progIndex)
{
return this.shaderPrograms[progIndex].extendBoxVertical;
};
GLWrap_.prototype.getProgramParameterType = function (progIndex, paramIndex)
{
return this.shaderPrograms[progIndex].parameters[paramIndex][2];
};
GLWrap_.prototype.programIsAnimated = function (progIndex)
{
return this.shaderPrograms[progIndex].animated;
};
GLWrap_.prototype.setProgramParameters = function (backTex, pixelWidth, pixelHeight, destStartX, destStartY, destEndX, destEndY, layerScale, params)
{
var i, len, s = this.shaderPrograms[this.lastProgram];
if (s.locPixelWidth || s.locPixelHeight || s.locSeconds || s.locSamplerBack ||
s.locDestStart || s.locDestEnd || s.locLayerScale || params.length)
{
var b = this.pushBatch();
b.type = BATCH_SETPROGRAMPARAMETERS;
if (b.mat4param)
mat4.set(this.matMV, b.mat4param);
else
b.mat4param = mat4.create();
b.mat4param[0] = pixelWidth;
b.mat4param[1] = pixelHeight;
b.mat4param[2] = destStartX;
b.mat4param[3] = destStartY;
b.mat4param[4] = destEndX;
b.mat4param[5] = destEndY;
b.mat4param[6] = layerScale;
if (s.locSamplerBack)
{
;
b.texParam = backTex;
}
else
b.texParam = null;
if (params.length)
{
b.shaderParams.length = params.length;
for (i = 0, len = params.length; i < len; i++)
b.shaderParams[i] = params[i];
}
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
}
};
GLWrap_.prototype.clear = function (r, g, b_, a)
{
var b = this.pushBatch();
b.type = BATCH_CLEAR;
b.startIndex = 0; // clear all mode
if (!b.mat4param)
b.mat4param = mat4.create();
b.mat4param[0] = r;
b.mat4param[1] = g;
b.mat4param[2] = b_;
b.mat4param[3] = a;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
GLWrap_.prototype.clearRect = function (x, y, w, h)
{
var b = this.pushBatch();
b.type = BATCH_CLEAR;
b.startIndex = 1; // clear rect mode
if (!b.mat4param)
b.mat4param = mat4.create();
b.mat4param[0] = x;
b.mat4param[1] = y;
b.mat4param[2] = w;
b.mat4param[3] = h;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
GLWrap_.prototype.present = function ()
{
this.endBatch();
this.gl.flush();
/*
if (debugBatch)
{
;
debugBatch = false;
}
*/
};
function nextHighestPowerOfTwo(x) {
--x;
for (var i = 1; i < 32; i <<= 1) {
x = x | x >> i;
}
return x + 1;
}
var all_textures = [];
var textures_by_src = {};
var BF_RGBA8 = 0;
var BF_RGB8 = 1;
var BF_RGBA4 = 2;
var BF_RGB5_A1 = 3;
var BF_RGB565 = 4;
GLWrap_.prototype.loadTexture = function (img, tiling, linearsampling, pixelformat, tiletype)
{
tiling = !!tiling;
linearsampling = !!linearsampling;
var tex_key = img.src + "," + tiling + "," + linearsampling + (tiling ? ("," + tiletype) : "");
var webGL_texture = null;
if (typeof img.src !== "undefined" && textures_by_src.hasOwnProperty(tex_key))
{
webGL_texture = textures_by_src[tex_key];
webGL_texture.c2refcount++;
return webGL_texture;
}
this.endBatch();
;
var gl = this.gl;
var isPOT = (cr.isPOT(img.width) && cr.isPOT(img.height));
webGL_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, webGL_texture);
gl.pixelStorei(gl["UNPACK_PREMULTIPLY_ALPHA_WEBGL"], true);
var internalformat = gl.RGBA;
var format = gl.RGBA;
var type = gl.UNSIGNED_BYTE;
if (pixelformat && !this.isIE)
{
switch (pixelformat) {
case BF_RGB8:
internalformat = gl.RGB;
format = gl.RGB;
break;
case BF_RGBA4:
type = gl.UNSIGNED_SHORT_4_4_4_4;
break;
case BF_RGB5_A1:
type = gl.UNSIGNED_SHORT_5_5_5_1;
break;
case BF_RGB565:
internalformat = gl.RGB;
format = gl.RGB;
type = gl.UNSIGNED_SHORT_5_6_5;
break;
}
}
if (!isPOT && tiling)
{
var canvas = document.createElement("canvas");
canvas.width = cr.nextHighestPowerOfTwo(img.width);
canvas.height = cr.nextHighestPowerOfTwo(img.height);
var ctx = canvas.getContext("2d");
ctx.drawImage(img,
0, 0, img.width, img.height,
0, 0, canvas.width, canvas.height);
gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, canvas);
}
else
gl.texImage2D(gl.TEXTURE_2D, 0, internalformat, format, type, img);
if (tiling)
{
if (tiletype === "repeat-x")
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
}
else if (tiletype === "repeat-y")
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
}
else
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
}
}
else
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
}
if (linearsampling)
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
if (isPOT)
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
gl.generateMipmap(gl.TEXTURE_2D);
}
else
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
}
else
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
}
gl.bindTexture(gl.TEXTURE_2D, null);
this.lastTexture0 = null;
webGL_texture.c2width = img.width;
webGL_texture.c2height = img.height;
webGL_texture.c2refcount = 1;
webGL_texture.c2texkey = tex_key;
all_textures.push(webGL_texture);
textures_by_src[tex_key] = webGL_texture;
return webGL_texture;
};
GLWrap_.prototype.createEmptyTexture = function (w, h, linearsampling, _16bit, tiling)
{
this.endBatch();
var gl = this.gl;
if (this.isIE)
_16bit = false;
var webGL_texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, webGL_texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, null);
if (tiling)
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT);
}
else
{
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
}
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, linearsampling ? gl.LINEAR : gl.NEAREST);
gl.bindTexture(gl.TEXTURE_2D, null);
this.lastTexture0 = null;
webGL_texture.c2width = w;
webGL_texture.c2height = h;
all_textures.push(webGL_texture);
return webGL_texture;
};
GLWrap_.prototype.videoToTexture = function (video_, texture_, _16bit)
{
this.endBatch();
var gl = this.gl;
if (this.isIE)
_16bit = false;
gl.bindTexture(gl.TEXTURE_2D, texture_);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, _16bit ? gl.UNSIGNED_SHORT_4_4_4_4 : gl.UNSIGNED_BYTE, video_);
gl.bindTexture(gl.TEXTURE_2D, null);
this.lastTexture0 = null;
};
GLWrap_.prototype.deleteTexture = function (tex)
{
if (!tex)
return;
if (typeof tex.c2refcount !== "undefined" && tex.c2refcount > 1)
{
tex.c2refcount--;
return;
}
this.endBatch();
if (tex === this.lastTexture0)
{
this.gl.bindTexture(this.gl.TEXTURE_2D, null);
this.lastTexture0 = null;
}
if (tex === this.lastTexture1)
{
this.gl.activeTexture(this.gl.TEXTURE1);
this.gl.bindTexture(this.gl.TEXTURE_2D, null);
this.gl.activeTexture(this.gl.TEXTURE0);
this.lastTexture1 = null;
}
cr.arrayFindRemove(all_textures, tex);
if (typeof tex.c2texkey !== "undefined")
delete textures_by_src[tex.c2texkey];
this.gl.deleteTexture(tex);
};
GLWrap_.prototype.estimateVRAM = function ()
{
var total = this.width * this.height * 4 * 2;
var i, len, t;
for (i = 0, len = all_textures.length; i < len; i++)
{
t = all_textures[i];
total += (t.c2width * t.c2height * 4);
}
return total;
};
GLWrap_.prototype.textureCount = function ()
{
return all_textures.length;
};
GLWrap_.prototype.setRenderingToTexture = function (tex)
{
if (tex === this.renderToTex)
return;
;
var b = this.pushBatch();
b.type = BATCH_RENDERTOTEXTURE;
b.texParam = tex;
this.renderToTex = tex;
this.hasQuadBatchTop = false;
this.hasPointBatchTop = false;
};
cr.GLWrap = GLWrap_;
}());
;
(function()
{
function Runtime(canvas)
{
if (!canvas || (!canvas.getContext && !canvas["dc"]))
return;
if (canvas["c2runtime"])
return;
else
canvas["c2runtime"] = this;
var self = this;
this.isCrosswalk = /crosswalk/i.test(navigator.userAgent) || /xwalk/i.test(navigator.userAgent) || !!(typeof window["c2isCrosswalk"] !== "undefined" && window["c2isCrosswalk"]);
this.isPhoneGap = (!this.isCrosswalk && (typeof window["device"] !== "undefined" && (typeof window["device"]["cordova"] !== "undefined" || typeof window["device"]["phonegap"] !== "undefined")));
this.isDirectCanvas = !!canvas["dc"];
this.isAppMobi = (typeof window["AppMobi"] !== "undefined" || this.isDirectCanvas);
this.isCocoonJs = !!window["c2cocoonjs"];
if (this.isCocoonJs)
{
CocoonJS["App"]["onSuspended"].addEventListener(function() {
self["setSuspended"](true);
});
CocoonJS["App"]["onActivated"].addEventListener(function () {
self["setSuspended"](false);
});
}
this.isDomFree = this.isDirectCanvas || this.isCocoonJs;
this.isTizen = /tizen/i.test(navigator.userAgent);
this.isAndroid = /android/i.test(navigator.userAgent) && !this.isTizen; // tizen says "like Android"
this.isIE = /msie/i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent);
this.isiPhone = /iphone/i.test(navigator.userAgent) || /ipod/i.test(navigator.userAgent); // treat ipod as an iphone
this.isiPad = /ipad/i.test(navigator.userAgent);
this.isiOS = this.isiPhone || this.isiPad;
this.isChrome = /chrome/i.test(navigator.userAgent) || /chromium/i.test(navigator.userAgent);
this.isAmazonWebApp = /amazonwebappplatform/i.test(navigator.userAgent);
this.isFirefox = /firefox/i.test(navigator.userAgent);
this.isSafari = !this.isChrome && /safari/i.test(navigator.userAgent); // Chrome includes Safari in UA
this.isWindows = /windows/i.test(navigator.userAgent);
this.isNodeWebkit = (typeof window["c2nodewebkit"] !== "undefined" || /nodewebkit/i.test(navigator.userAgent));
this.isArcade = (typeof window["is_scirra_arcade"] !== "undefined");
this.isWindows8App = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]);
this.isWindowsPhone8 = !!(typeof window["c2isWindowsPhone8"] !== "undefined" && window["c2isWindowsPhone8"]);
this.isBlackberry10 = !!(typeof window["c2isBlackberry10"] !== "undefined" && window["c2isBlackberry10"]);
this.isAndroidStockBrowser = (this.isAndroid && !this.isChrome && !this.isFirefox && !this.isAmazonWebApp && !this.isDomFree);
this.devicePixelRatio = 1;
this.isMobile = (this.isPhoneGap || this.isCrosswalk || this.isAppMobi || this.isCocoonJs || this.isAndroid || this.isiOS || this.isWindowsPhone8 || this.isBlackberry10 || this.isTizen);
if (!this.isMobile)
this.isMobile = /(blackberry|bb10|playbook|palm|symbian|nokia|windows\s+ce|phone|mobile|tablet)/i.test(navigator.userAgent);
if (typeof cr_is_preview !== "undefined" && !this.isNodeWebkit && (window.location.search === "?nw" || /nodewebkit/i.test(navigator.userAgent)))
{
this.isNodeWebkit = true;
}
this.isDebug = (typeof cr_is_preview !== "undefined" && window.location.search.indexOf("debug") > -1)
this.canvas = canvas;
this.canvasdiv = document.getElementById("c2canvasdiv");
this.gl = null;
this.glwrap = null;
this.ctx = null;
this.fullscreenOldMarginCss = "";
this.firstInFullscreen = false;
this.oldWidth = 0; // for restoring non-fullscreen canvas after fullscreen
this.oldHeight = 0;
this.canvas.oncontextmenu = function (e) { if (e.preventDefault) e.preventDefault(); return false; };
this.canvas.onselectstart = function (e) { if (e.preventDefault) e.preventDefault(); return false; };
if (this.isDirectCanvas)
window["c2runtime"] = this;
if (this.isNodeWebkit)
{
window.ondragover = function(e) { e.preventDefault(); return false; };
window.ondrop = function(e) { e.preventDefault(); return false; };
require("nw.gui")["App"]["clearCache"]();
}
this.width = canvas.width;
this.height = canvas.height;
this.draw_width = this.width;
this.draw_height = this.height;
this.cssWidth = this.width;
this.cssHeight = this.height;
this.lastWindowWidth = window.innerWidth;
this.lastWindowHeight = window.innerHeight;
this.redraw = true;
this.isSuspended = false;
if (!Date.now) {
Date.now = function now() {
return +new Date();
};
}
this.plugins = [];
this.types = {};
this.types_by_index = [];
this.behaviors = [];
this.layouts = {};
this.layouts_by_index = [];
this.eventsheets = {};
this.eventsheets_by_index = [];
this.wait_for_textures = []; // for blocking until textures loaded
this.triggers_to_postinit = [];
this.all_global_vars = [];
this.all_local_vars = [];
this.solidBehavior = null;
this.jumpthruBehavior = null;
this.deathRow = new cr.ObjectSet();
this.isInClearDeathRow = false;
this.isInOnDestroy = 0; // needs to support recursion so increments and decrements and is true if > 0
this.isRunningEvents = false;
this.createRow = [];
this.isLoadingState = false;
this.saveToSlot = "";
this.loadFromSlot = "";
this.loadFromJson = "";
this.lastSaveJson = "";
this.signalledContinuousPreview = false;
this.suspendDrawing = false; // for hiding display until continuous preview loads
this.dt = 0;
this.dt1 = 0;
this.logictime = 0; // used to calculate CPUUtilisation
this.cpuutilisation = 0;
this.zeroDtCount = 0;
this.timescale = 1.0;
this.kahanTime = new cr.KahanAdder();
this.last_tick_time = 0;
this.measuring_dt = true;
this.fps = 0;
this.last_fps_time = 0;
this.tickcount = 0;
this.execcount = 0;
this.framecount = 0; // for fps
this.objectcount = 0;
this.changelayout = null;
this.destroycallbacks = [];
this.event_stack = [];
this.event_stack_index = -1;
this.localvar_stack = [[]];
this.localvar_stack_index = 0;
this.trigger_depth = 0; // recursion depth for triggers
this.pushEventStack(null);
this.loop_stack = [];
this.loop_stack_index = -1;
this.next_uid = 0;
this.next_puid = 0; // permanent unique ids
this.layout_first_tick = true;
this.family_count = 0;
this.suspend_events = [];
this.raf_id = 0;
this.timeout_id = 0;
this.isloading = true;
this.loadingprogress = 0;
this.isNodeFullscreen = false;
this.stackLocalCount = 0; // number of stack-based local vars for recursion
this.halfFramerateMode = false;
this.lastRafTime = 0; // time of last requestAnimationFrame call
this.ranLastRaf = false; // false if last requestAnimationFrame was skipped for half framerate mode
this.had_a_click = false;
this.isInUserInputEvent = false;
this.objects_to_tick = new cr.ObjectSet();
this.objects_to_tick2 = new cr.ObjectSet();
this.registered_collisions = [];
this.temp_poly = new cr.CollisionPoly([]);
this.temp_poly2 = new cr.CollisionPoly([]);
this.allGroups = []; // array of all event groups
this.activeGroups = {}; // event group activation states
this.cndsBySid = {};
this.actsBySid = {};
this.varsBySid = {};
this.blocksBySid = {};
this.running_layout = null; // currently running layout
this.layer_canvas = null; // for layers "render-to-texture"
this.layer_ctx = null;
this.layer_tex = null;
this.layout_tex = null;
this.layout_canvas = null;
this.layout_ctx = null;
this.is_WebGL_context_lost = false;
this.uses_background_blending = false; // if any shader uses background blending, so entire layout renders to texture
this.fx_tex = [null, null];
this.fullscreen_scaling = 0;
this.files_subfolder = ""; // path with project files
this.objectsByUid = {}; // maps every in-use UID (as a string) to its instance
this.loaderlogo = null;
this.snapshotCanvas = null;
this.snapshotData = "";
this.load();
this.isRetina = (!this.isDomFree && this.useHighDpi && !this.isAndroidStockBrowser);
this.devicePixelRatio = (this.isRetina ? (window["devicePixelRatio"] || window["webkitDevicePixelRatio"] || window["mozDevicePixelRatio"] || window["msDevicePixelRatio"] || 1) : 1);
this.ClearDeathRow();
var attribs;
var alpha_canvas = this.alphaBackground && !(this.isNodeWebkit || this.isWindows8App || this.isWindowsPhone8);
if (this.fullscreen_mode > 0)
this["setSize"](window.innerWidth, window.innerHeight, true);
try {
if (this.enableWebGL && (this.isCocoonJs || !this.isDomFree))
{
attribs = {
"alpha": alpha_canvas,
"depth": false,
"antialias": false,
"failIfMajorPerformanceCaveat": true
};
this.gl = (canvas.getContext("webgl", attribs) || canvas.getContext("experimental-webgl", attribs));
}
}
catch (e) {
}
if (this.gl)
{
;
if (!this.isDomFree)
{
this.overlay_canvas = document.createElement("canvas");
jQuery(this.overlay_canvas).appendTo(this.canvas.parentNode);
this.overlay_canvas.oncontextmenu = function (e) { return false; };
this.overlay_canvas.onselectstart = function (e) { return false; };
this.overlay_canvas.width = this.cssWidth;
this.overlay_canvas.height = this.cssHeight;
jQuery(this.overlay_canvas).css({"width": this.cssWidth + "px",
"height": this.cssHeight + "px"});
this.positionOverlayCanvas();
this.overlay_ctx = this.overlay_canvas.getContext("2d");
}
this.glwrap = new cr.GLWrap(this.gl, this.isMobile);
this.glwrap.setSize(canvas.width, canvas.height);
this.ctx = null;
this.canvas.addEventListener("webglcontextlost", function (ev) {
ev.preventDefault();
self.onContextLost();
console.log("[Construct 2] WebGL context lost");
window["cr_setSuspended"](true); // stop rendering
}, false);
this.canvas.addEventListener("webglcontextrestored", function (ev) {
self.glwrap.initState();
self.glwrap.setSize(self.glwrap.width, self.glwrap.height, true);
self.layer_tex = null;
self.layout_tex = null;
self.fx_tex[0] = null;
self.fx_tex[1] = null;
self.onContextRestored();
self.redraw = true;
console.log("[Construct 2] WebGL context restored");
window["cr_setSuspended"](false); // resume rendering
}, false);
var i, len, j, lenj, k, lenk, t, s, l, y;
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
t = this.types_by_index[i];
for (j = 0, lenj = t.effect_types.length; j < lenj; j++)
{
s = t.effect_types[j];
s.shaderindex = this.glwrap.getShaderIndex(s.id);
this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex);
}
}
for (i = 0, len = this.layouts_by_index.length; i < len; i++)
{
l = this.layouts_by_index[i];
for (j = 0, lenj = l.effect_types.length; j < lenj; j++)
{
s = l.effect_types[j];
s.shaderindex = this.glwrap.getShaderIndex(s.id);
}
for (j = 0, lenj = l.layers.length; j < lenj; j++)
{
y = l.layers[j];
for (k = 0, lenk = y.effect_types.length; k < lenk; k++)
{
s = y.effect_types[k];
s.shaderindex = this.glwrap.getShaderIndex(s.id);
this.uses_background_blending = this.uses_background_blending || this.glwrap.programUsesDest(s.shaderindex);
}
}
}
}
else
{
if (this.fullscreen_mode > 0 && this.isDirectCanvas)
{
;
this.canvas = null;
document.oncontextmenu = function (e) { return false; };
document.onselectstart = function (e) { return false; };
this.ctx = AppMobi["canvas"]["getContext"]("2d");
try {
this.ctx["samplingMode"] = this.linearSampling ? "smooth" : "sharp";
this.ctx["globalScale"] = 1;
this.ctx["HTML5CompatibilityMode"] = true;
this.ctx["imageSmoothingEnabled"] = this.linearSampling;
} catch(e){}
if (this.width !== 0 && this.height !== 0)
{
this.ctx.width = this.width;
this.ctx.height = this.height;
}
}
if (!this.ctx)
{
;
if (this.isCocoonJs)
{
attribs = {
"antialias": !!this.linearSampling,
"alpha": alpha_canvas
};
this.ctx = canvas.getContext("2d", attribs);
}
else
{
attribs = {
"alpha": alpha_canvas
};
this.ctx = canvas.getContext("2d", attribs);
}
this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling;
this.ctx["mozImageSmoothingEnabled"] = this.linearSampling;
this.ctx["msImageSmoothingEnabled"] = this.linearSampling;
this.ctx["imageSmoothingEnabled"] = this.linearSampling;
}
this.overlay_canvas = null;
this.overlay_ctx = null;
}
this.tickFunc = function () { self.tick(); };
if (window != window.top && !this.isDomFree && !this.isWindows8App)
{
document.addEventListener("mousedown", function () {
window.focus();
}, true);
document.addEventListener("touchstart", function () {
window.focus();
}, true);
}
if (typeof cr_is_preview !== "undefined")
{
if (this.isCocoonJs)
console.log("[Construct 2] In preview-over-wifi via CocoonJS mode");
if (window.location.search.indexOf("continuous") > -1)
{
cr.logexport("Reloading for continuous preview");
this.loadFromSlot = "__c2_continuouspreview";
this.suspendDrawing = true;
}
if (this.pauseOnBlur && !this.isMobile)
{
jQuery(window).focus(function ()
{
self["setSuspended"](false);
});
jQuery(window).blur(function ()
{
self["setSuspended"](true);
});
}
}
if (this.fullscreen_mode === 0 && this.isRetina && this.devicePixelRatio > 1)
{
this["setSize"](this.original_width, this.original_height, true);
}
this.tryLockOrientation();
this.go(); // run loading screen
this.extra = {};
cr.seal(this);
};
var webkitRepaintFlag = false;
Runtime.prototype["setSize"] = function (w, h, force)
{
var offx = 0, offy = 0;
var neww = 0, newh = 0, intscale = 0;
if (this.lastWindowWidth === w && this.lastWindowHeight === h && !force)
return;
this.lastWindowWidth = w;
this.lastWindowHeight = h;
var mode = this.fullscreen_mode;
var orig_aspect, cur_aspect;
var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen);
if (!isfullscreen && this.fullscreen_mode === 0 && !force)
return; // ignore size events when not fullscreen and not using a fullscreen-in-browser mode
if (isfullscreen && this.fullscreen_scaling > 0)
mode = this.fullscreen_scaling;
if (mode >= 4)
{
orig_aspect = this.original_width / this.original_height;
cur_aspect = w / h;
if (cur_aspect > orig_aspect)
{
neww = h * orig_aspect;
if (mode === 5) // integer scaling
{
intscale = neww / this.original_width;
if (intscale > 1)
intscale = Math.floor(intscale);
else if (intscale < 1)
intscale = 1 / Math.ceil(1 / intscale);
neww = this.original_width * intscale;
newh = this.original_height * intscale;
offx = (w - neww) / 2;
offy = (h - newh) / 2;
w = neww;
h = newh;
}
else
{
offx = (w - neww) / 2;
w = neww;
}
}
else
{
newh = w / orig_aspect;
if (mode === 5) // integer scaling
{
intscale = newh / this.original_height;
if (intscale > 1)
intscale = Math.floor(intscale);
else if (intscale < 1)
intscale = 1 / Math.ceil(1 / intscale);
neww = this.original_width * intscale;
newh = this.original_height * intscale;
offx = (w - neww) / 2;
offy = (h - newh) / 2;
w = neww;
h = newh;
}
else
{
offy = (h - newh) / 2;
h = newh;
}
}
if (isfullscreen && !this.isNodeWebkit)
{
offx = 0;
offy = 0;
}
offx = Math.floor(offx);
offy = Math.floor(offy);
w = Math.floor(w);
h = Math.floor(h);
}
else if (this.isNodeWebkit && this.isNodeFullscreen && this.fullscreen_mode_set === 0)
{
offx = Math.floor((w - this.original_width) / 2);
offy = Math.floor((h - this.original_height) / 2);
w = this.original_width;
h = this.original_height;
}
if (mode < 2)
this.aspect_scale = this.devicePixelRatio;
if (this.isRetina && this.isiPad && this.devicePixelRatio > 1) // don't apply to iPad 1-2
{
if (w >= 1024)
w = 1023; // 2046 retina pixels
if (h >= 1024)
h = 1023;
}
var multiplier = this.devicePixelRatio;
this.cssWidth = w;
this.cssHeight = h;
this.width = Math.round(w * multiplier);
this.height = Math.round(h * multiplier);
this.redraw = true;
if (this.wantFullscreenScalingQuality)
{
this.draw_width = this.width;
this.draw_height = this.height;
this.fullscreenScalingQuality = true;
}
else
{
if ((this.width < this.original_width && this.height < this.original_height) || mode === 1)
{
this.draw_width = this.width;
this.draw_height = this.height;
this.fullscreenScalingQuality = true;
}
else
{
this.draw_width = this.original_width;
this.draw_height = this.original_height;
this.fullscreenScalingQuality = false;
/*var orig_aspect = this.original_width / this.original_height;
var cur_aspect = this.width / this.height;
if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect))
this.aspect_scale = this.height / this.original_height;
else
this.aspect_scale = this.width / this.original_width;*/
if (mode === 2) // scale inner
{
orig_aspect = this.original_width / this.original_height;
cur_aspect = this.lastWindowWidth / this.lastWindowHeight;
if (cur_aspect < orig_aspect)
this.draw_width = this.draw_height * cur_aspect;
else if (cur_aspect > orig_aspect)
this.draw_height = this.draw_width / cur_aspect;
}
else if (mode === 3)
{
orig_aspect = this.original_width / this.original_height;
cur_aspect = this.lastWindowWidth / this.lastWindowHeight;
if (cur_aspect > orig_aspect)
this.draw_width = this.draw_height * cur_aspect;
else if (cur_aspect < orig_aspect)
this.draw_height = this.draw_width / cur_aspect;
}
}
}
if (this.canvasdiv && !this.isDomFree)
{
jQuery(this.canvasdiv).css({"width": w + "px",
"height": h + "px",
"margin-left": offx,
"margin-top": offy});
if (typeof cr_is_preview !== "undefined")
{
jQuery("#borderwrap").css({"width": w + "px",
"height": h + "px"});
}
}
if (this.canvas)
{
this.canvas.width = Math.round(w * multiplier);
this.canvas.height = Math.round(h * multiplier);
if (this.isRetina)
{
jQuery(this.canvas).css({"width": w + "px",
"height": h + "px"});
}
}
if (this.overlay_canvas)
{
this.overlay_canvas.width = w;
this.overlay_canvas.height = h;
jQuery(this.overlay_canvas).css({"width": w + "px",
"height": h + "px"});
}
if (this.glwrap)
{
this.glwrap.setSize(Math.round(w * multiplier), Math.round(h * multiplier));
}
if (this.isDirectCanvas && this.ctx)
{
this.ctx.width = w;
this.ctx.height = h;
}
if (this.ctx)
{
this.ctx["webkitImageSmoothingEnabled"] = this.linearSampling;
this.ctx["mozImageSmoothingEnabled"] = this.linearSampling;
this.ctx["msImageSmoothingEnabled"] = this.linearSampling;
this.ctx["imageSmoothingEnabled"] = this.linearSampling;
}
this.tryLockOrientation();
};
Runtime.prototype.tryLockOrientation = function ()
{
if (!this.autoLockOrientation || this.orientations === 0)
return;
var orientation = "portrait";
if (this.orientations === 2)
orientation = "landscape";
if (screen["lockOrientation"])
screen["lockOrientation"](orientation);
else if (screen["webkitLockOrientation"])
screen["webkitLockOrientation"](orientation);
else if (screen["mozLockOrientation"])
screen["mozLockOrientation"](orientation);
else if (screen["msLockOrientation"])
screen["msLockOrientation"](orientation);
};
Runtime.prototype.onContextLost = function ()
{
this.is_WebGL_context_lost = true;
var i, len, t;
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
t = this.types_by_index[i];
if (t.onLostWebGLContext)
t.onLostWebGLContext();
}
};
Runtime.prototype.onContextRestored = function ()
{
this.is_WebGL_context_lost = false;
var i, len, t;
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
t = this.types_by_index[i];
if (t.onRestoreWebGLContext)
t.onRestoreWebGLContext();
}
};
Runtime.prototype.positionOverlayCanvas = function()
{
if (this.isDomFree)
return;
var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen);
var overlay_position = isfullscreen ? jQuery(this.canvas).offset() : jQuery(this.canvas).position();
overlay_position.position = "absolute";
jQuery(this.overlay_canvas).css(overlay_position);
};
var caf = window["cancelAnimationFrame"] ||
window["mozCancelAnimationFrame"] ||
window["webkitCancelAnimationFrame"] ||
window["msCancelAnimationFrame"] ||
window["oCancelAnimationFrame"];
Runtime.prototype["setSuspended"] = function (s)
{
var i, len;
if (s && !this.isSuspended)
{
cr.logexport("[Construct 2] Suspending");
this.isSuspended = true; // next tick will be last
if (this.raf_id !== 0 && caf) // note: CocoonJS does not implement cancelAnimationFrame
caf(this.raf_id);
if (this.timeout_id !== 0)
clearTimeout(this.timeout_id);
for (i = 0, len = this.suspend_events.length; i < len; i++)
this.suspend_events[i](true);
}
else if (!s && this.isSuspended)
{
cr.logexport("[Construct 2] Resuming");
this.isSuspended = false;
this.last_tick_time = cr.performance_now(); // ensure first tick is a zero-dt one
this.last_fps_time = cr.performance_now(); // reset FPS counter
this.framecount = 0;
this.logictime = 0;
for (i = 0, len = this.suspend_events.length; i < len; i++)
this.suspend_events[i](false);
this.tick(); // kick off runtime again
}
};
Runtime.prototype.addSuspendCallback = function (f)
{
this.suspend_events.push(f);
};
Runtime.prototype.load = function ()
{
;
var pm = cr.getProjectModel();
this.name = pm[0];
this.first_layout = pm[1];
this.fullscreen_mode = pm[11]; // 0 = off, 1 = crop, 2 = scale inner, 3 = scale outer, 4 = letterbox scale, 5 = integer letterbox scale
this.fullscreen_mode_set = pm[11];
this.original_width = pm[9];
this.original_height = pm[10];
this.parallax_x_origin = this.original_width / 2;
this.parallax_y_origin = this.original_height / 2;
if (this.isDomFree && (pm[11] >= 4 || pm[11] === 0))
{
cr.logexport("[Construct 2] Letterbox scale fullscreen modes are not supported on this platform - falling back to 'Scale outer'");
this.fullscreen_mode = 3;
this.fullscreen_mode_set = 3;
}
this.uses_loader_layout = pm[17];
this.loaderstyle = pm[18];
if (this.loaderstyle === 0)
{
this.loaderlogo = new Image();
this.loaderlogo.src = "loading-logo.png";
}
this.next_uid = pm[20];
this.system = new cr.system_object(this);
var i, len, j, lenj, k, lenk, idstr, m, b, t, f;
var plugin, plugin_ctor;
for (i = 0, len = pm[2].length; i < len; i++)
{
m = pm[2][i];
;
cr.add_common_aces(m);
plugin = new m[0](this);
plugin.singleglobal = m[1];
plugin.is_world = m[2];
plugin.must_predraw = m[9];
if (plugin.onCreate)
plugin.onCreate(); // opportunity to override default ACEs
cr.seal(plugin);
this.plugins.push(plugin);
}
pm = cr.getProjectModel();
for (i = 0, len = pm[3].length; i < len; i++)
{
m = pm[3][i];
plugin_ctor = m[1];
;
plugin = null;
for (j = 0, lenj = this.plugins.length; j < lenj; j++)
{
if (this.plugins[j] instanceof plugin_ctor)
{
plugin = this.plugins[j];
break;
}
}
;
;
var type_inst = new plugin.Type(plugin);
;
type_inst.name = m[0];
type_inst.is_family = m[2];
type_inst.instvar_sids = m[3].slice(0);
type_inst.vars_count = m[3].length;
type_inst.behs_count = m[4];
type_inst.fx_count = m[5];
type_inst.sid = m[11];
if (type_inst.is_family)
{
type_inst.members = []; // types in this family
type_inst.family_index = this.family_count++;
type_inst.families = null;
}
else
{
type_inst.members = null;
type_inst.family_index = -1;
type_inst.families = []; // families this type belongs to
}
type_inst.family_var_map = null;
type_inst.family_beh_map = null;
type_inst.family_fx_map = null;
type_inst.is_contained = false;
type_inst.container = null;
if (m[6])
{
type_inst.texture_file = m[6][0];
type_inst.texture_filesize = m[6][1];
type_inst.texture_pixelformat = m[6][2];
}
else
{
type_inst.texture_file = null;
type_inst.texture_filesize = 0;
type_inst.texture_pixelformat = 0; // rgba8
}
if (m[7])
{
type_inst.animations = m[7];
}
else
{
type_inst.animations = null;
}
type_inst.index = i; // save index in to types array in type
type_inst.instances = []; // all instances of this type
type_inst.deadCache = []; // destroyed instances to recycle next create
type_inst.solstack = [new cr.selection(type_inst)]; // initialise SOL stack with one empty SOL
type_inst.cur_sol = 0;
type_inst.default_instance = null;
type_inst.stale_iids = true;
type_inst.updateIIDs = cr.type_updateIIDs;
type_inst.getFirstPicked = cr.type_getFirstPicked;
type_inst.getPairedInstance = cr.type_getPairedInstance;
type_inst.getCurrentSol = cr.type_getCurrentSol;
type_inst.pushCleanSol = cr.type_pushCleanSol;
type_inst.pushCopySol = cr.type_pushCopySol;
type_inst.popSol = cr.type_popSol;
type_inst.getBehaviorByName = cr.type_getBehaviorByName;
type_inst.getBehaviorIndexByName = cr.type_getBehaviorIndexByName;
type_inst.getEffectIndexByName = cr.type_getEffectIndexByName;
type_inst.applySolToContainer = cr.type_applySolToContainer;
type_inst.getInstanceByIID = cr.type_getInstanceByIID;
type_inst.collision_grid = new cr.SparseGrid(this.original_width, this.original_height);
type_inst.any_bbox_changed = true;
type_inst.any_instance_parallaxed = false;
type_inst.extra = {};
type_inst.toString = cr.type_toString;
type_inst.behaviors = [];
for (j = 0, lenj = m[8].length; j < lenj; j++)
{
b = m[8][j];
var behavior_ctor = b[1];
var behavior_plugin = null;
for (k = 0, lenk = this.behaviors.length; k < lenk; k++)
{
if (this.behaviors[k] instanceof behavior_ctor)
{
behavior_plugin = this.behaviors[k];
break;
}
}
if (!behavior_plugin)
{
behavior_plugin = new behavior_ctor(this);
behavior_plugin.my_types = []; // types using this behavior
behavior_plugin.my_instances = new cr.ObjectSet(); // instances of this behavior
if (behavior_plugin.onCreate)
behavior_plugin.onCreate();
cr.seal(behavior_plugin);
this.behaviors.push(behavior_plugin);
if (cr.behaviors.solid && behavior_plugin instanceof cr.behaviors.solid)
this.solidBehavior = behavior_plugin;
if (cr.behaviors.jumpthru && behavior_plugin instanceof cr.behaviors.jumpthru)
this.jumpthruBehavior = behavior_plugin;
}
if (behavior_plugin.my_types.indexOf(type_inst) === -1)
behavior_plugin.my_types.push(type_inst);
var behavior_type = new behavior_plugin.Type(behavior_plugin, type_inst);
behavior_type.name = b[0];
behavior_type.sid = b[2];
behavior_type.onCreate();
cr.seal(behavior_type);
type_inst.behaviors.push(behavior_type);
}
type_inst.global = m[9];
type_inst.isOnLoaderLayout = m[10];
type_inst.effect_types = [];
for (j = 0, lenj = m[12].length; j < lenj; j++)
{
type_inst.effect_types.push({
id: m[12][j][0],
name: m[12][j][1],
shaderindex: -1,
active: true,
index: j
});
}
type_inst.tile_poly_data = m[13];
if (!this.uses_loader_layout || type_inst.is_family || type_inst.isOnLoaderLayout || !plugin.is_world)
{
type_inst.onCreate();
cr.seal(type_inst);
}
if (type_inst.name)
this.types[type_inst.name] = type_inst;
this.types_by_index.push(type_inst);
if (plugin.singleglobal)
{
var instance = new plugin.Instance(type_inst);
instance.uid = this.next_uid++;
instance.puid = this.next_puid++;
instance.iid = 0;
instance.get_iid = cr.inst_get_iid;
instance.toString = cr.inst_toString;
instance.properties = m[14];
instance.onCreate();
cr.seal(instance);
type_inst.instances.push(instance);
this.objectsByUid[instance.uid.toString()] = instance;
}
}
for (i = 0, len = pm[4].length; i < len; i++)
{
var familydata = pm[4][i];
var familytype = this.types_by_index[familydata[0]];
var familymember;
for (j = 1, lenj = familydata.length; j < lenj; j++)
{
familymember = this.types_by_index[familydata[j]];
familymember.families.push(familytype);
familytype.members.push(familymember);
}
}
for (i = 0, len = pm[23].length; i < len; i++)
{
var containerdata = pm[23][i];
var containertypes = [];
for (j = 0, lenj = containerdata.length; j < lenj; j++)
containertypes.push(this.types_by_index[containerdata[j]]);
for (j = 0, lenj = containertypes.length; j < lenj; j++)
{
containertypes[j].is_contained = true;
containertypes[j].container = containertypes;
}
}
if (this.family_count > 0)
{
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
t = this.types_by_index[i];
if (t.is_family || !t.families.length)
continue;
t.family_var_map = new Array(this.family_count);
t.family_beh_map = new Array(this.family_count);
t.family_fx_map = new Array(this.family_count);
var all_fx = [];
var varsum = 0;
var behsum = 0;
var fxsum = 0;
for (j = 0, lenj = t.families.length; j < lenj; j++)
{
f = t.families[j];
t.family_var_map[f.family_index] = varsum;
varsum += f.vars_count;
t.family_beh_map[f.family_index] = behsum;
behsum += f.behs_count;
t.family_fx_map[f.family_index] = fxsum;
fxsum += f.fx_count;
for (k = 0, lenk = f.effect_types.length; k < lenk; k++)
all_fx.push(cr.shallowCopy({}, f.effect_types[k]));
}
t.effect_types = all_fx.concat(t.effect_types);
for (j = 0, lenj = t.effect_types.length; j < lenj; j++)
t.effect_types[j].index = j;
}
}
for (i = 0, len = pm[5].length; i < len; i++)
{
m = pm[5][i];
var layout = new cr.layout(this, m);
cr.seal(layout);
this.layouts[layout.name] = layout;
this.layouts_by_index.push(layout);
}
for (i = 0, len = pm[6].length; i < len; i++)
{
m = pm[6][i];
var sheet = new cr.eventsheet(this, m);
cr.seal(sheet);
this.eventsheets[sheet.name] = sheet;
this.eventsheets_by_index.push(sheet);
}
for (i = 0, len = this.eventsheets_by_index.length; i < len; i++)
this.eventsheets_by_index[i].postInit();
for (i = 0, len = this.triggers_to_postinit.length; i < len; i++)
this.triggers_to_postinit[i].postInit();
this.triggers_to_postinit.length = 0;
this.files_subfolder = pm[7];
this.pixel_rounding = pm[8];
this.aspect_scale = 1.0;
this.enableWebGL = pm[12];
this.linearSampling = pm[13];
this.alphaBackground = pm[14];
this.versionstr = pm[15];
this.useHighDpi = pm[16];
this.orientations = pm[19]; // 0 = any, 1 = portrait, 2 = landscape
this.autoLockOrientation = (this.orientations > 0);
this.pauseOnBlur = pm[21];
this.wantFullscreenScalingQuality = pm[22]; // false = low quality, true = high quality
this.fullscreenScalingQuality = this.wantFullscreenScalingQuality;
this.start_time = Date.now();
};
Runtime.prototype.findWaitingTexture = function (src_)
{
var i, len;
for (i = 0, len = this.wait_for_textures.length; i < len; i++)
{
if (this.wait_for_textures[i].cr_src === src_)
return this.wait_for_textures[i];
}
return null;
};
Runtime.prototype.areAllTexturesLoaded = function ()
{
var totalsize = 0;
var completedsize = 0;
var ret = true;
var i, len;
for (i = 0, len = this.wait_for_textures.length; i < len; i++)
{
var filesize = this.wait_for_textures[i].cr_filesize;
if (!filesize || filesize <= 0)
filesize = 50000;
totalsize += filesize;
if (this.wait_for_textures[i].complete || this.wait_for_textures[i]["loaded"])
completedsize += filesize;
else
ret = false; // not all textures loaded
}
if (totalsize == 0)
this.progress = 0;
else
this.progress = (completedsize / totalsize);
return ret;
};
Runtime.prototype.go = function ()
{
if (!this.ctx && !this.glwrap)
return;
var ctx = this.ctx || this.overlay_ctx;
if (this.overlay_canvas)
this.positionOverlayCanvas();
this.progress = 0;
this.last_progress = -1;
if (this.areAllTexturesLoaded())
this.go_textures_done();
else
{
var ms_elapsed = Date.now() - this.start_time;
if (ctx)
{
var overlay_width = this.width;
var overlay_height = this.height;
var multiplier = this.devicePixelRatio;
if (this.overlay_canvas)
{
overlay_width = this.cssWidth;
overlay_height = this.cssHeight;
multiplier = 1;
}
if (this.loaderstyle !== 3 && ms_elapsed >= 500 && this.last_progress != this.progress)
{
ctx.clearRect(0, 0, overlay_width, overlay_height);
var mx = overlay_width / 2;
var my = overlay_height / 2;
var haslogo = (this.loaderstyle === 0 && this.loaderlogo.complete);
var hlw = 40 * multiplier;
var hlh = 0;
var logowidth = 80 * multiplier;
var logoheight;
if (haslogo)
{
logowidth = this.loaderlogo.width * multiplier;
logoheight = this.loaderlogo.height * multiplier;
hlw = logowidth / 2;
hlh = logoheight / 2;
ctx.drawImage(this.loaderlogo, cr.floor(mx - hlw), cr.floor(my - hlh), logowidth, logoheight);
}
if (this.loaderstyle <= 1)
{
my += hlh + (haslogo ? 12 * multiplier : 0);
mx -= hlw;
mx = cr.floor(mx) + 0.5;
my = cr.floor(my) + 0.5;
ctx.fillStyle = "DodgerBlue";
ctx.fillRect(mx, my, Math.floor(logowidth * this.progress), 6 * multiplier);
ctx.strokeStyle = "black";
ctx.strokeRect(mx, my, logowidth, 6 * multiplier);
ctx.strokeStyle = "white";
ctx.strokeRect(mx - 1 * multiplier, my - 1 * multiplier, logowidth + 2 * multiplier, 8 * multiplier);
}
else if (this.loaderstyle === 2)
{
ctx.font = "12pt Arial";
ctx.fillStyle = "#999";
ctx.textBaseLine = "middle";
var percent_text = Math.round(this.progress * 100) + "%";
var text_dim = ctx.measureText ? ctx.measureText(percent_text) : null;
var text_width = text_dim ? text_dim.width : 0;
ctx.fillText(percent_text, mx - (text_width / 2), my);
}
}
this.last_progress = this.progress;
}
setTimeout((function (self) { return function () { self.go(); }; })(this), 100);
}
};
Runtime.prototype.go_textures_done = function ()
{
if (this.overlay_canvas)
{
this.canvas.parentNode.removeChild(this.overlay_canvas);
this.overlay_ctx = null;
this.overlay_canvas = null;
}
this.start_time = Date.now();
this.last_fps_time = cr.performance_now(); // for counting framerate
var i, len, t;
if (this.uses_loader_layout)
{
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
t = this.types_by_index[i];
if (!t.is_family && !t.isOnLoaderLayout && t.plugin.is_world)
{
t.onCreate();
cr.seal(t);
}
}
}
else
this.isloading = false;
for (i = 0, len = this.layouts_by_index.length; i < len; i++)
{
this.layouts_by_index[i].createGlobalNonWorlds();
}
if (this.fullscreen_mode >= 2)
{
var orig_aspect = this.original_width / this.original_height;
var cur_aspect = this.width / this.height;
if ((this.fullscreen_mode !== 2 && cur_aspect > orig_aspect) || (this.fullscreen_mode === 2 && cur_aspect < orig_aspect))
this.aspect_scale = this.height / this.original_height;
else
this.aspect_scale = this.width / this.original_width;
}
if (this.first_layout)
this.layouts[this.first_layout].startRunning();
else
this.layouts_by_index[0].startRunning();
;
if (!this.uses_loader_layout)
{
this.loadingprogress = 1;
this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null);
}
if (navigator["splashscreen"] && navigator["splashscreen"]["hide"])
navigator["splashscreen"]["hide"]();
this.tick();
if (this.isDirectCanvas)
AppMobi["webview"]["execute"]("onGameReady();");
};
var raf = window["requestAnimationFrame"] ||
window["mozRequestAnimationFrame"] ||
window["webkitRequestAnimationFrame"] ||
window["msRequestAnimationFrame"] ||
window["oRequestAnimationFrame"];
Runtime.prototype.tick = function ()
{
if (!this.running_layout)
return;
var logic_start = cr.performance_now();
if (this.halfFramerateMode && this.ranLastRaf)
{
if (logic_start - this.lastRafTime < 29)
{
this.ranLastRaf = false;
this.lastRafTime = logic_start;
if (raf)
this.raf_id = raf(this.tickFunc, this.canvas);
else // no idea if this works without raf/hi res timers but let's hope for the best
this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16);
return; // skipped this frame
}
}
this.ranLastRaf = true;
this.lastRafTime = logic_start;
var fsmode = this.fullscreen_mode;
var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"]);
if ((isfullscreen || this.isNodeFullscreen) && this.fullscreen_scaling > 0)
fsmode = this.fullscreen_scaling;
if (fsmode > 0 && !this.isiPhone)
{
var curwidth = window.innerWidth;
var curheight = window.innerHeight;
if (this.lastWindowWidth !== curwidth || this.lastWindowHeight !== curheight)
{
this["setSize"](curwidth, curheight);
}
}
if (!this.isDomFree)
{
if (isfullscreen)
{
if (!this.firstInFullscreen)
{
this.fullscreenOldMarginCss = jQuery(this.canvas).css("margin") || "0";
this.firstInFullscreen = true;
}
if (!this.isChrome && !this.isNodeWebkit)
{
jQuery(this.canvas).css({
"margin-left": "" + Math.floor((screen.width - (this.width / this.devicePixelRatio)) / 2) + "px",
"margin-top": "" + Math.floor((screen.height - (this.height / this.devicePixelRatio)) / 2) + "px"
});
}
}
else
{
if (this.firstInFullscreen)
{
if (!this.isChrome && !this.isNodeWebkit)
{
jQuery(this.canvas).css("margin", this.fullscreenOldMarginCss);
}
this.fullscreenOldMarginCss = "";
this.firstInFullscreen = false;
if (this.fullscreen_mode === 0)
{
this["setSize"](Math.round(this.oldWidth / this.devicePixelRatio), Math.round(this.oldHeight / this.devicePixelRatio), true);
}
}
else
{
this.oldWidth = this.width;
this.oldHeight = this.height;
}
}
}
if (this.isloading)
{
var done = this.areAllTexturesLoaded(); // updates this.progress
this.loadingprogress = this.progress;
if (done)
{
this.isloading = false;
this.progress = 1;
this.trigger(cr.system_object.prototype.cnds.OnLoadFinished, null);
}
}
this.logic();
if ((this.redraw || this.isCocoonJs) && !this.is_WebGL_context_lost && !this.suspendDrawing)
{
this.redraw = false;
if (this.glwrap)
this.drawGL();
else
this.draw();
if (this.snapshotCanvas)
{
if (this.canvas && this.canvas.toDataURL)
{
this.snapshotData = this.canvas.toDataURL(this.snapshotCanvas[0], this.snapshotCanvas[1]);
this.trigger(cr.system_object.prototype.cnds.OnCanvasSnapshot, null);
}
this.snapshotCanvas = null;
}
}
if (!this.hit_breakpoint)
{
this.tickcount++;
this.execcount++;
this.framecount++;
}
this.logictime += cr.performance_now() - logic_start;
if (this.isSuspended)
return;
if (raf)
this.raf_id = raf(this.tickFunc, this.canvas);
else
{
this.timeout_id = setTimeout(this.tickFunc, this.isMobile ? 1 : 16);
}
};
Runtime.prototype.logic = function ()
{
var i, leni, j, lenj, k, lenk, type, inst, binst;
var cur_time = cr.performance_now();
if (cur_time - this.last_fps_time >= 1000) // every 1 second
{
this.last_fps_time += 1000;
this.fps = this.framecount;
this.framecount = 0;
this.cpuutilisation = this.logictime;
this.logictime = 0;
}
if (this.measuring_dt)
{
if (this.last_tick_time !== 0)
{
var ms_diff = cur_time - this.last_tick_time;
if (ms_diff === 0 && !this.isDebug)
{
this.zeroDtCount++;
if (this.zeroDtCout >= 10)
this.measuring_dt = false;
this.dt1 = 1.0 / 60.0; // 60fps assumed (0.01666...)
}
else
{
this.dt1 = ms_diff / 1000.0; // dt measured in seconds
if (this.dt1 > 0.5)
this.dt1 = 0;
else if (this.dt1 > 0.1)
this.dt1 = 0.1;
}
}
this.last_tick_time = cur_time;
}
this.dt = this.dt1 * this.timescale;
this.kahanTime.add(this.dt);
var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || !!document["msFullscreenElement"] || this.isNodeFullscreen);
if (this.fullscreen_mode >= 2 /* scale */ || (isfullscreen && this.fullscreen_scaling > 0))
{
var orig_aspect = this.original_width / this.original_height;
var cur_aspect = this.width / this.height;
var mode = this.fullscreen_mode;
if (isfullscreen && this.fullscreen_scaling > 0)
mode = this.fullscreen_scaling;
if ((mode !== 2 && cur_aspect > orig_aspect) || (mode === 2 && cur_aspect < orig_aspect))
{
this.aspect_scale = this.height / this.original_height;
}
else
{
this.aspect_scale = this.width / this.original_width;
}
if (this.running_layout)
{
this.running_layout.scrollToX(this.running_layout.scrollX);
this.running_layout.scrollToY(this.running_layout.scrollY);
}
}
else
this.aspect_scale = (this.isRetina ? this.devicePixelRatio : 1);
this.ClearDeathRow();
this.isInOnDestroy++;
this.system.runWaits(); // prevent instance list changing
this.isInOnDestroy--;
this.ClearDeathRow(); // allow instance list changing
this.isInOnDestroy++;
for (i = 0, leni = this.types_by_index.length; i < leni; i++)
{
type = this.types_by_index[i];
if (type.is_family || (!type.behaviors.length && !type.families.length))
continue;
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
inst = type.instances[j];
for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++)
{
inst.behavior_insts[k].tick();
}
}
}
for (i = 0, leni = this.types_by_index.length; i < leni; i++)
{
type = this.types_by_index[i];
if (type.is_family || (!type.behaviors.length && !type.families.length))
continue; // type doesn't have any behaviors
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
inst = type.instances[j];
for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++)
{
binst = inst.behavior_insts[k];
if (binst.posttick)
binst.posttick();
}
}
}
var tickarr = this.objects_to_tick.valuesRef();
for (i = 0, leni = tickarr.length; i < leni; i++)
tickarr[i].tick();
this.isInOnDestroy--; // end preventing instance lists from being changed
this.handleSaveLoad(); // save/load now if queued
i = 0;
while (this.changelayout && i++ < 10)
{
this.doChangeLayout(this.changelayout);
}
for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++)
this.eventsheets_by_index[i].hasRun = false;
if (this.running_layout.event_sheet)
this.running_layout.event_sheet.run();
this.registered_collisions.length = 0;
this.layout_first_tick = false;
this.isInOnDestroy++; // prevent instance lists from being changed
for (i = 0, leni = this.types_by_index.length; i < leni; i++)
{
type = this.types_by_index[i];
if (type.is_family || (!type.behaviors.length && !type.families.length))
continue; // type doesn't have any behaviors
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
var inst = type.instances[j];
for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++)
{
binst = inst.behavior_insts[k];
if (binst.tick2)
binst.tick2();
}
}
}
tickarr = this.objects_to_tick2.valuesRef();
for (i = 0, leni = tickarr.length; i < leni; i++)
tickarr[i].tick2();
this.isInOnDestroy--; // end preventing instance lists from being changed
};
Runtime.prototype.doChangeLayout = function (changeToLayout)
{
;
var prev_layout = this.running_layout;
this.running_layout.stopRunning();
var i, len, j, lenj, k, lenk, type, inst, binst;
if (this.glwrap)
{
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
type = this.types_by_index[i];
if (type.is_family)
continue;
if (type.unloadTextures && (!type.global || type.instances.length === 0) && changeToLayout.initial_types.indexOf(type) === -1)
{
type.unloadTextures();
}
}
}
if (prev_layout == changeToLayout)
this.system.waits.length = 0;
changeToLayout.startRunning();
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
type = this.types_by_index[i];
if (!type.global && !type.plugin.singleglobal)
continue;
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
inst = type.instances[j];
if (inst.onLayoutChange)
inst.onLayoutChange();
if (inst.behavior_insts)
{
for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++)
{
binst = inst.behavior_insts[k];
if (binst.onLayoutChange)
binst.onLayoutChange();
}
}
}
}
this.redraw = true;
this.layout_first_tick = true;
this.ClearDeathRow();
};
Runtime.prototype.tickMe = function (inst)
{
this.objects_to_tick.add(inst);
};
Runtime.prototype.untickMe = function (inst)
{
this.objects_to_tick.remove(inst);
};
Runtime.prototype.tick2Me = function (inst)
{
this.objects_to_tick2.add(inst);
};
Runtime.prototype.untick2Me = function (inst)
{
this.objects_to_tick2.remove(inst);
};
Runtime.prototype.getDt = function (inst)
{
if (!inst || inst.my_timescale === -1.0)
return this.dt;
return this.dt1 * inst.my_timescale;
};
Runtime.prototype.draw = function ()
{
this.running_layout.draw(this.ctx);
if (this.isDirectCanvas)
this.ctx["present"]();
};
Runtime.prototype.drawGL = function ()
{
this.running_layout.drawGL(this.glwrap);
this.glwrap.present();
};
Runtime.prototype.addDestroyCallback = function (f)
{
if (f)
this.destroycallbacks.push(f);
};
Runtime.prototype.removeDestroyCallback = function (f)
{
cr.arrayFindRemove(this.destroycallbacks, f);
};
Runtime.prototype.getObjectByUID = function (uid_)
{
;
return this.objectsByUid[uid_.toString()];
};
Runtime.prototype.DestroyInstance = function (inst)
{
var i, len;
if (!this.deathRow.contains(inst))
{
this.deathRow.add(inst);
if (inst.is_contained)
{
for (i = 0, len = inst.siblings.length; i < len; i++)
{
this.DestroyInstance(inst.siblings[i]);
}
}
if (this.isInClearDeathRow)
this.deathRow.values_cache.push(inst);
this.isInOnDestroy++; // support recursion
this.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnDestroyed, inst);
this.isInOnDestroy--;
}
};
Runtime.prototype.ClearDeathRow = function ()
{
var inst, index, type, instances, binst;
var i, j, k, leni, lenj, lenk;
var w, f;
this.isInClearDeathRow = true;
for (i = 0, leni = this.createRow.length; i < leni; i++)
{
inst = this.createRow[i];
type = inst.type;
type.instances.push(inst);
for (j = 0, lenj = type.families.length; j < lenj; j++)
{
type.families[j].instances.push(inst);
type.families[j].stale_iids = true;
}
}
this.createRow.length = 0;
var arr = this.deathRow.valuesRef(); // get array of items from set
for (i = 0; i < arr.length; i++) // check array length every time in case it changes
{
inst = arr[i];
type = inst.type;
instances = type.instances;
for (j = 0, lenj = this.destroycallbacks.length; j < lenj; j++)
this.destroycallbacks[j](inst);
cr.arrayFindRemove(instances, inst);
if (instances.length === 0)
type.any_instance_parallaxed = false;
if (inst.collcells)
{
type.collision_grid.update(inst, inst.collcells, null);
}
if (inst.layer)
{
cr.arrayRemove(inst.layer.instances, inst.get_zindex());
inst.layer.zindices_stale = true;
}
for (j = 0, lenj = type.families.length; j < lenj; j++)
{
cr.arrayFindRemove(type.families[j].instances, inst);
type.families[j].stale_iids = true;
}
if (inst.behavior_insts)
{
for (j = 0, lenj = inst.behavior_insts.length; j < lenj; j++)
{
binst = inst.behavior_insts[j];
if (binst.onDestroy)
binst.onDestroy();
binst.behavior.my_instances.remove(inst);
}
}
this.objects_to_tick.remove(inst);
this.objects_to_tick2.remove(inst);
for (j = 0, lenj = this.system.waits.length; j < lenj; j++)
{
w = this.system.waits[j];
if (w.sols.hasOwnProperty(type.index))
cr.arrayFindRemove(w.sols[type.index].insts, inst);
if (!type.is_family)
{
for (k = 0, lenk = type.families.length; k < lenk; k++)
{
f = type.families[k];
if (w.sols.hasOwnProperty(f.index))
cr.arrayFindRemove(w.sols[f.index].insts, inst);
}
}
}
if (inst.onDestroy)
inst.onDestroy();
if (this.objectsByUid.hasOwnProperty(inst.uid.toString()))
delete this.objectsByUid[inst.uid.toString()];
this.objectcount--;
if (type.deadCache.length < 64)
type.deadCache.push(inst);
type.stale_iids = true;
}
if (!this.deathRow.isEmpty())
this.redraw = true;
this.deathRow.clear();
this.isInClearDeathRow = false;
};
Runtime.prototype.createInstance = function (type, layer, sx, sy)
{
if (type.is_family)
{
var i = cr.floor(Math.random() * type.members.length);
return this.createInstance(type.members[i], layer, sx, sy);
}
if (!type.default_instance)
{
return null;
}
return this.createInstanceFromInit(type.default_instance, layer, false, sx, sy, false);
};
var all_behaviors = [];
Runtime.prototype.createInstanceFromInit = function (initial_inst, layer, is_startup_instance, sx, sy, skip_siblings)
{
var i, len, j, lenj, p, effect_fallback, x, y;
if (!initial_inst)
return null;
var type = this.types_by_index[initial_inst[1]];
;
;
var is_world = type.plugin.is_world;
;
if (this.isloading && is_world && !type.isOnLoaderLayout)
return null;
if (is_world && !this.glwrap && initial_inst[0][11] === 11)
return null;
var original_layer = layer;
if (!is_world)
layer = null;
var inst;
if (type.deadCache.length)
{
inst = type.deadCache.pop();
inst.recycled = true;
type.plugin.Instance.call(inst, type);
}
else
{
inst = new type.plugin.Instance(type);
inst.recycled = false;
}
if (is_startup_instance && !skip_siblings)
inst.uid = initial_inst[2];
else
inst.uid = this.next_uid++;
this.objectsByUid[inst.uid.toString()] = inst;
inst.puid = this.next_puid++;
inst.iid = type.instances.length;
for (i = 0, len = this.createRow.length; i < len; ++i)
{
if (this.createRow[i].type === type)
inst.iid++;
}
inst.get_iid = cr.inst_get_iid;
var initial_vars = initial_inst[3];
if (inst.recycled)
{
cr.wipe(inst.extra);
}
else
{
inst.extra = {};
if (typeof cr_is_preview !== "undefined")
{
inst.instance_var_names = [];
inst.instance_var_names.length = initial_vars.length;
for (i = 0, len = initial_vars.length; i < len; i++)
inst.instance_var_names[i] = initial_vars[i][1];
}
inst.instance_vars = [];
inst.instance_vars.length = initial_vars.length;
}
for (i = 0, len = initial_vars.length; i < len; i++)
inst.instance_vars[i] = initial_vars[i][0];
if (is_world)
{
var wm = initial_inst[0];
;
inst.x = cr.is_undefined(sx) ? wm[0] : sx;
inst.y = cr.is_undefined(sy) ? wm[1] : sy;
inst.z = wm[2];
inst.width = wm[3];
inst.height = wm[4];
inst.depth = wm[5];
inst.angle = wm[6];
inst.opacity = wm[7];
inst.hotspotX = wm[8];
inst.hotspotY = wm[9];
inst.blend_mode = wm[10];
effect_fallback = wm[11];
if (!this.glwrap && type.effect_types.length) // no WebGL renderer and shaders used
inst.blend_mode = effect_fallback; // use fallback blend mode - destroy mode was handled above
inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode);
if (this.gl)
cr.setGLBlend(inst, inst.blend_mode, this.gl);
if (inst.recycled)
{
for (i = 0, len = wm[12].length; i < len; i++)
{
for (j = 0, lenj = wm[12][i].length; j < lenj; j++)
inst.effect_params[i][j] = wm[12][i][j];
}
inst.bbox.set(0, 0, 0, 0);
inst.collcells.set(0, 0, -1, -1);
inst.bquad.set_from_rect(inst.bbox);
inst.bbox_changed_callbacks.length = 0;
}
else
{
inst.effect_params = wm[12].slice(0);
for (i = 0, len = inst.effect_params.length; i < len; i++)
inst.effect_params[i] = wm[12][i].slice(0);
inst.active_effect_types = [];
inst.active_effect_flags = [];
inst.active_effect_flags.length = type.effect_types.length;
inst.bbox = new cr.rect(0, 0, 0, 0);
inst.collcells = new cr.rect(0, 0, -1, -1);
inst.bquad = new cr.quad();
inst.bbox_changed_callbacks = [];
inst.set_bbox_changed = cr.set_bbox_changed;
inst.add_bbox_changed_callback = cr.add_bbox_changed_callback;
inst.contains_pt = cr.inst_contains_pt;
inst.update_bbox = cr.update_bbox;
inst.get_zindex = cr.inst_get_zindex;
}
inst.tilemap_exists = false;
inst.tilemap_width = 0;
inst.tilemap_height = 0;
inst.tilemap_data = null;
if (wm.length === 14)
{
inst.tilemap_exists = true;
inst.tilemap_width = wm[13][0];
inst.tilemap_height = wm[13][1];
inst.tilemap_data = wm[13][2];
}
for (i = 0, len = type.effect_types.length; i < len; i++)
inst.active_effect_flags[i] = true;
inst.updateActiveEffects = cr.inst_updateActiveEffects;
inst.updateActiveEffects();
inst.uses_shaders = !!inst.active_effect_types.length;
inst.bbox_changed = true;
type.any_bbox_changed = true;
inst.visible = true;
inst.my_timescale = -1.0;
inst.layer = layer;
inst.zindex = layer.instances.length; // will be placed at top of current layer
if (typeof inst.collision_poly === "undefined")
inst.collision_poly = null;
inst.collisionsEnabled = true;
this.redraw = true;
}
inst.toString = cr.inst_toString;
var initial_props, binst;
all_behaviors.length = 0;
for (i = 0, len = type.families.length; i < len; i++)
{
all_behaviors.push.apply(all_behaviors, type.families[i].behaviors);
}
all_behaviors.push.apply(all_behaviors, type.behaviors);
if (inst.recycled)
{
for (i = 0, len = all_behaviors.length; i < len; i++)
{
var btype = all_behaviors[i];
binst = inst.behavior_insts[i];
binst.recycled = true;
btype.behavior.Instance.call(binst, btype, inst);
initial_props = initial_inst[4][i];
for (j = 0, lenj = initial_props.length; j < lenj; j++)
binst.properties[j] = initial_props[j];
binst.onCreate();
btype.behavior.my_instances.add(inst);
}
}
else
{
inst.behavior_insts = [];
for (i = 0, len = all_behaviors.length; i < len; i++)
{
var btype = all_behaviors[i];
var binst = new btype.behavior.Instance(btype, inst);
binst.recycled = false;
binst.properties = initial_inst[4][i].slice(0);
binst.onCreate();
cr.seal(binst);
inst.behavior_insts.push(binst);
btype.behavior.my_instances.add(inst);
}
}
initial_props = initial_inst[5];
if (inst.recycled)
{
for (i = 0, len = initial_props.length; i < len; i++)
inst.properties[i] = initial_props[i];
}
else
inst.properties = initial_props.slice(0);
this.createRow.push(inst);
if (layer)
{
;
layer.instances.push(inst);
if (layer.parallaxX !== 1 || layer.parallaxY !== 1)
type.any_instance_parallaxed = true;
}
this.objectcount++;
if (type.is_contained)
{
inst.is_contained = true;
if (inst.recycled)
inst.siblings.length = 0;
else
inst.siblings = []; // note: should not include self in siblings
if (!is_startup_instance && !skip_siblings) // layout links initial instances
{
for (i = 0, len = type.container.length; i < len; i++)
{
if (type.container[i] === type)
continue;
if (!type.container[i].default_instance)
{
return null;
}
inst.siblings.push(this.createInstanceFromInit(type.container[i].default_instance, original_layer, false, is_world ? inst.x : sx, is_world ? inst.y : sy, true));
}
for (i = 0, len = inst.siblings.length; i < len; i++)
{
inst.siblings[i].siblings.push(inst);
for (j = 0; j < len; j++)
{
if (i !== j)
inst.siblings[i].siblings.push(inst.siblings[j]);
}
}
}
}
else
{
inst.is_contained = false;
inst.siblings = null;
}
inst.onCreate();
if (!inst.recycled)
cr.seal(inst);
for (i = 0, len = inst.behavior_insts.length; i < len; i++)
{
if (inst.behavior_insts[i].postCreate)
inst.behavior_insts[i].postCreate();
}
return inst;
};
Runtime.prototype.getLayerByName = function (layer_name)
{
var i, len;
for (i = 0, len = this.running_layout.layers.length; i < len; i++)
{
var layer = this.running_layout.layers[i];
if (cr.equals_nocase(layer.name, layer_name))
return layer;
}
return null;
};
Runtime.prototype.getLayerByNumber = function (index)
{
index = cr.floor(index);
if (index < 0)
index = 0;
if (index >= this.running_layout.layers.length)
index = this.running_layout.layers.length - 1;
return this.running_layout.layers[index];
};
Runtime.prototype.getLayer = function (l)
{
if (cr.is_number(l))
return this.getLayerByNumber(l);
else
return this.getLayerByName(l.toString());
};
Runtime.prototype.clearSol = function (solModifiers)
{
var i, len;
for (i = 0, len = solModifiers.length; i < len; i++)
{
solModifiers[i].getCurrentSol().select_all = true;
}
};
Runtime.prototype.pushCleanSol = function (solModifiers)
{
var i, len;
for (i = 0, len = solModifiers.length; i < len; i++)
{
solModifiers[i].pushCleanSol();
}
};
Runtime.prototype.pushCopySol = function (solModifiers)
{
var i, len;
for (i = 0, len = solModifiers.length; i < len; i++)
{
solModifiers[i].pushCopySol();
}
};
Runtime.prototype.popSol = function (solModifiers)
{
var i, len;
for (i = 0, len = solModifiers.length; i < len; i++)
{
solModifiers[i].popSol();
}
};
Runtime.prototype.updateAllBBoxes = function (type)
{
if (!type.any_bbox_changed)
return; // all instances must already be up-to-date
var i, len, instances = type.instances;
for (i = 0, len = instances.length; i < len; ++i)
{
instances[i].update_bbox();
}
type.any_bbox_changed = false;
};
Runtime.prototype.getCollisionCandidates = function (layer, rtype, bbox, candidates)
{
var i, len, t;
var is_parallaxed = (layer ? (layer.parallaxX !== 1 || layer.parallaxY !== 1) : false);
if (rtype.is_family)
{
for (i = 0, len = rtype.members.length; i < len; ++i)
{
t = rtype.members[i];
if (is_parallaxed || t.any_instance_parallaxed)
{
cr.appendArray(candidates, t.instances);
}
else
{
this.updateAllBBoxes(t);
t.collision_grid.queryRange(bbox, candidates);
}
}
}
else
{
if (is_parallaxed || rtype.any_instance_parallaxed)
{
cr.appendArray(candidates, rtype.instances);
}
else
{
this.updateAllBBoxes(rtype);
rtype.collision_grid.queryRange(bbox, candidates);
}
}
};
Runtime.prototype.getTypesCollisionCandidates = function (layer, types, bbox, candidates)
{
var i, len;
for (i = 0, len = types.length; i < len; ++i)
{
this.getCollisionCandidates(layer, types[i], bbox, candidates);
}
};
Runtime.prototype.getSolidCollisionCandidates = function (layer, bbox, candidates)
{
var solid = this.getSolidBehavior();
if (!solid)
return null;
this.getTypesCollisionCandidates(layer, solid.my_types, bbox, candidates);
};
Runtime.prototype.getJumpthruCollisionCandidates = function (layer, bbox, candidates)
{
var jumpthru = this.getJumpthruBehavior();
if (!jumpthru)
return null;
this.getTypesCollisionCandidates(layer, jumpthru.my_types, bbox, candidates);
};
Runtime.prototype.testAndSelectCanvasPointOverlap = function (type, ptx, pty, inverted)
{
var sol = type.getCurrentSol();
var i, j, inst, len;
var lx, ly;
if (sol.select_all)
{
if (!inverted)
{
sol.select_all = false;
sol.instances.length = 0; // clear contents
}
for (i = 0, len = type.instances.length; i < len; i++)
{
inst = type.instances[i];
inst.update_bbox();
lx = inst.layer.canvasToLayer(ptx, pty, true);
ly = inst.layer.canvasToLayer(ptx, pty, false);
if (inst.contains_pt(lx, ly))
{
if (inverted)
return false;
else
sol.instances.push(inst);
}
}
}
else
{
j = 0;
for (i = 0, len = sol.instances.length; i < len; i++)
{
inst = sol.instances[i];
inst.update_bbox();
lx = inst.layer.canvasToLayer(ptx, pty, true);
ly = inst.layer.canvasToLayer(ptx, pty, false);
if (inst.contains_pt(lx, ly))
{
if (inverted)
return false;
else
{
sol.instances[j] = sol.instances[i];
j++;
}
}
}
if (!inverted)
sol.instances.length = j;
}
type.applySolToContainer();
if (inverted)
return true; // did not find anything overlapping
else
return sol.hasObjects();
};
Runtime.prototype.testOverlap = function (a, b)
{
if (!a || !b || a === b || !a.collisionsEnabled || !b.collisionsEnabled)
return false;
a.update_bbox();
b.update_bbox();
var layera = a.layer;
var layerb = b.layer;
var different_layers = (layera !== layerb && (layera.parallaxX !== layerb.parallaxX || layerb.parallaxY !== layerb.parallaxY || layera.scale !== layerb.scale || layera.angle !== layerb.angle || layera.zoomRate !== layerb.zoomRate));
var i, len, i2, i21, x, y, haspolya, haspolyb, polya, polyb;
if (!different_layers) // same layers: easy check
{
if (!a.bbox.intersects_rect(b.bbox))
return false;
if (!a.bquad.intersects_quad(b.bquad))
return false;
if (a.tilemap_exists && b.tilemap_exists)
return false;
if (a.tilemap_exists)
return this.testTilemapOverlap(a, b);
if (b.tilemap_exists)
return this.testTilemapOverlap(b, a);
haspolya = (a.collision_poly && !a.collision_poly.is_empty());
haspolyb = (b.collision_poly && !b.collision_poly.is_empty());
if (!haspolya && !haspolyb)
return true;
if (haspolya)
{
a.collision_poly.cache_poly(a.width, a.height, a.angle);
polya = a.collision_poly;
}
else
{
this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height);
polya = this.temp_poly;
}
if (haspolyb)
{
b.collision_poly.cache_poly(b.width, b.height, b.angle);
polyb = b.collision_poly;
}
else
{
this.temp_poly.set_from_quad(b.bquad, b.x, b.y, b.width, b.height);
polyb = this.temp_poly;
}
return polya.intersects_poly(polyb, b.x - a.x, b.y - a.y);
}
else // different layers: need to do full translated check
{
haspolya = (a.collision_poly && !a.collision_poly.is_empty());
haspolyb = (b.collision_poly && !b.collision_poly.is_empty());
if (haspolya)
{
a.collision_poly.cache_poly(a.width, a.height, a.angle);
this.temp_poly.set_from_poly(a.collision_poly);
}
else
{
this.temp_poly.set_from_quad(a.bquad, a.x, a.y, a.width, a.height);
}
polya = this.temp_poly;
if (haspolyb)
{
b.collision_poly.cache_poly(b.width, b.height, b.angle);
this.temp_poly2.set_from_poly(b.collision_poly);
}
else
{
this.temp_poly2.set_from_quad(b.bquad, b.x, b.y, b.width, b.height);
}
polyb = this.temp_poly2;
for (i = 0, len = polya.pts_count; i < len; i++)
{
i2 = i * 2;
i21 = i2 + 1;
x = polya.pts_cache[i2];
y = polya.pts_cache[i21];
polya.pts_cache[i2] = layera.layerToCanvas(x + a.x, y + a.y, true);
polya.pts_cache[i21] = layera.layerToCanvas(x + a.x, y + a.y, false);
}
polya.update_bbox();
for (i = 0, len = polyb.pts_count; i < len; i++)
{
i2 = i * 2;
i21 = i2 + 1;
x = polyb.pts_cache[i2];
y = polyb.pts_cache[i21];
polyb.pts_cache[i2] = layerb.layerToCanvas(x + b.x, y + b.y, true);
polyb.pts_cache[i21] = layerb.layerToCanvas(x + b.x, y + b.y, false);
}
polyb.update_bbox();
return polya.intersects_poly(polyb, 0, 0);
}
};
var tmpQuad = new cr.quad();
var tmpRect = new cr.rect(0, 0, 0, 0);
Runtime.prototype.testTilemapOverlap = function (tm, a)
{
var collrects = tm.collision_rects;
var i, len, c, rc;
var bbox = a.bbox;
var tmx = tm.x;
var tmy = tm.y;
var haspolya = (a.collision_poly && !a.collision_poly.is_empty());
for (i = 0, len = collrects.length; i < len; ++i)
{
c = collrects[i];
rc = c.rc;
if (bbox.intersects_rect_off(rc, tmx, tmy))
{
tmpQuad.set_from_rect(rc);
tmpQuad.offset(tmx, tmy);
if (tmpQuad.intersects_quad(a.bquad))
{
if (haspolya)
{
a.collision_poly.cache_poly(a.width, a.height, a.angle);
if (c.poly)
{
if (c.poly.intersects_poly(a.collision_poly, a.x - (tmx + rc.left), a.y - (tmy + rc.top)))
{
return true;
}
}
else
{
this.temp_poly.set_from_quad(tmpQuad, 0, 0, rc.right - rc.left, rc.bottom - rc.top);
if (this.temp_poly.intersects_poly(a.collision_poly, a.x, a.y))
return true;
}
}
else
{
if (c.poly)
{
this.temp_poly.set_from_quad(a.bquad, 0, 0, a.width, a.height);
if (c.poly.intersects_poly(this.temp_poly, -(tmx + rc.left), -(tmy + rc.top)))
{
return true;
}
}
else
return true;
}
}
}
}
return false;
};
Runtime.prototype.testRectOverlap = function (r, b)
{
if (!b || !b.collisionsEnabled)
return false;
b.update_bbox();
var layerb = b.layer;
var haspolyb, polyb;
if (!b.bbox.intersects_rect(r))
return false;
if (b.tilemap_exists)
{
var collrects = b.collision_rects;
var i, len, c, tilerc;
var tmx = b.x;
var tmy = b.y;
for (i = 0, len = collrects.length; i < len; ++i)
{
c = collrects[i];
tilerc = c.rc;
if (r.intersects_rect_off(tilerc, tmx, tmy))
{
if (c.poly)
{
this.temp_poly.set_from_rect(r, 0, 0);
if (c.poly.intersects_poly(this.temp_poly, -(tmx + tilerc.left), -(tmy + tilerc.top)))
return true;
}
else
return true;
}
}
return false;
}
else
{
tmpQuad.set_from_rect(r);
if (!b.bquad.intersects_quad(tmpQuad))
return false;
haspolyb = (b.collision_poly && !b.collision_poly.is_empty());
if (!haspolyb)
return true;
b.collision_poly.cache_poly(b.width, b.height, b.angle);
tmpQuad.offset(-r.left, -r.top);
this.temp_poly.set_from_quad(tmpQuad, 0, 0, 1, 1);
return b.collision_poly.intersects_poly(this.temp_poly, r.left - b.x, r.top - b.y);
}
};
Runtime.prototype.testSegmentOverlap = function (x1, y1, x2, y2, b)
{
if (!b || !b.collisionsEnabled)
return false;
b.update_bbox();
var layerb = b.layer;
var haspolyb, polyb;
tmpRect.set(cr.min(x1, x2), cr.min(y1, y2), cr.max(x1, x2), cr.max(y1, y2));
if (!b.bbox.intersects_rect(tmpRect))
return false;
if (b.tilemap_exists)
{
var collrects = b.collision_rects;
var i, len, c, tilerc;
var tmx = b.x;
var tmy = b.y;
for (i = 0, len = collrects.length; i < len; ++i)
{
c = collrects[i];
tilerc = c.rc;
if (tmpRect.intersects_rect_off(tilerc, tmx, tmy))
{
tmpQuad.set_from_rect(tilerc);
tmpQuad.offset(tmx, tmy);
if (tmpQuad.intersects_segment(x1, y1, x2, y2))
{
if (c.poly)
{
if (c.poly.intersects_segment(tmx + tilerc.left, tmy + tilerc.top, x1, y1, x2, y2))
{
return true;
}
}
else
return true;
}
}
}
return false;
}
else
{
if (!b.bquad.intersects_segment(x1, y1, x2, y2))
return false;
haspolyb = (b.collision_poly && !b.collision_poly.is_empty());
if (!haspolyb)
return true;
b.collision_poly.cache_poly(b.width, b.height, b.angle);
return b.collision_poly.intersects_segment(b.x, b.y, x1, y1, x2, y2);
}
};
Runtime.prototype.typeHasBehavior = function (t, b)
{
if (!b)
return false;
var i, len, j, lenj, f;
for (i = 0, len = t.behaviors.length; i < len; i++)
{
if (t.behaviors[i].behavior instanceof b)
return true;
}
if (!t.is_family)
{
for (i = 0, len = t.families.length; i < len; i++)
{
f = t.families[i];
for (j = 0, lenj = f.behaviors.length; j < lenj; j++)
{
if (f.behaviors[j].behavior instanceof b)
return true;
}
}
}
return false;
};
Runtime.prototype.typeHasNoSaveBehavior = function (t)
{
return this.typeHasBehavior(t, cr.behaviors.NoSave);
};
Runtime.prototype.typeHasPersistBehavior = function (t)
{
return this.typeHasBehavior(t, cr.behaviors.Persist);
};
Runtime.prototype.getSolidBehavior = function ()
{
return this.solidBehavior;
};
Runtime.prototype.getJumpthruBehavior = function ()
{
return this.jumpthruBehavior;
};
var candidates = [];
Runtime.prototype.testOverlapSolid = function (inst)
{
var i, len, s;
inst.update_bbox();
this.getSolidCollisionCandidates(inst.layer, inst.bbox, candidates);
for (i = 0, len = candidates.length; i < len; ++i)
{
s = candidates[i];
if (!s.extra.solidEnabled)
continue;
if (this.testOverlap(inst, s))
{
candidates.length = 0;
return s;
}
}
candidates.length = 0;
return null;
};
Runtime.prototype.testRectOverlapSolid = function (r)
{
var i, len, s;
this.getSolidCollisionCandidates(null, r, candidates);
for (i = 0, len = candidates.length; i < len; ++i)
{
s = candidates[i];
if (!s.extra.solidEnabled)
continue;
if (this.testRectOverlap(r, s))
{
candidates.length = 0;
return s;
}
}
candidates.length = 0;
return null;
};
var jumpthru_array_ret = [];
Runtime.prototype.testOverlapJumpThru = function (inst, all)
{
var ret = null;
if (all)
{
ret = jumpthru_array_ret;
ret.length = 0;
}
inst.update_bbox();
this.getJumpthruCollisionCandidates(inst.layer, inst.bbox, candidates);
var i, len, j;
for (i = 0, len = candidates.length; i < len; ++i)
{
j = candidates[i];
if (!j.extra.jumpthruEnabled)
continue;
if (this.testOverlap(inst, j))
{
if (all)
ret.push(j);
else
{
candidates.length = 0;
return j;
}
}
}
candidates.length = 0;
return ret;
};
Runtime.prototype.pushOutSolid = function (inst, xdir, ydir, dist, include_jumpthrus, specific_jumpthru)
{
var push_dist = dist || 50;
var oldx = inst.x
var oldy = inst.y;
var i;
var last_overlapped = null, secondlast_overlapped = null;
for (i = 0; i < push_dist; i++)
{
inst.x = (oldx + (xdir * i));
inst.y = (oldy + (ydir * i));
inst.set_bbox_changed();
if (!this.testOverlap(inst, last_overlapped))
{
last_overlapped = this.testOverlapSolid(inst);
if (last_overlapped)
secondlast_overlapped = last_overlapped;
if (!last_overlapped)
{
if (include_jumpthrus)
{
if (specific_jumpthru)
last_overlapped = (this.testOverlap(inst, specific_jumpthru) ? specific_jumpthru : null);
else
last_overlapped = this.testOverlapJumpThru(inst);
if (last_overlapped)
secondlast_overlapped = last_overlapped;
}
if (!last_overlapped)
{
if (secondlast_overlapped)
this.pushInFractional(inst, xdir, ydir, secondlast_overlapped, 16);
return true;
}
}
}
}
inst.x = oldx;
inst.y = oldy;
inst.set_bbox_changed();
return false;
};
Runtime.prototype.pushOut = function (inst, xdir, ydir, dist, otherinst)
{
var push_dist = dist || 50;
var oldx = inst.x
var oldy = inst.y;
var i;
for (i = 0; i < push_dist; i++)
{
inst.x = (oldx + (xdir * i));
inst.y = (oldy + (ydir * i));
inst.set_bbox_changed();
if (!this.testOverlap(inst, otherinst))
return true;
}
inst.x = oldx;
inst.y = oldy;
inst.set_bbox_changed();
return false;
};
Runtime.prototype.pushInFractional = function (inst, xdir, ydir, obj, limit)
{
var divisor = 2;
var frac;
var forward = false;
var overlapping = false;
var bestx = inst.x;
var besty = inst.y;
while (divisor <= limit)
{
frac = 1 / divisor;
divisor *= 2;
inst.x += xdir * frac * (forward ? 1 : -1);
inst.y += ydir * frac * (forward ? 1 : -1);
inst.set_bbox_changed();
if (this.testOverlap(inst, obj))
{
forward = true;
overlapping = true;
}
else
{
forward = false;
overlapping = false;
bestx = inst.x;
besty = inst.y;
}
}
if (overlapping)
{
inst.x = bestx;
inst.y = besty;
inst.set_bbox_changed();
}
};
Runtime.prototype.pushOutSolidNearest = function (inst, max_dist_)
{
var max_dist = (cr.is_undefined(max_dist_) ? 100 : max_dist_);
var dist = 0;
var oldx = inst.x
var oldy = inst.y;
var dir = 0;
var dx = 0, dy = 0;
var last_overlapped = this.testOverlapSolid(inst);
if (!last_overlapped)
return true; // already clear of solids
while (dist <= max_dist)
{
switch (dir) {
case 0: dx = 0; dy = -1; dist++; break;
case 1: dx = 1; dy = -1; break;
case 2: dx = 1; dy = 0; break;
case 3: dx = 1; dy = 1; break;
case 4: dx = 0; dy = 1; break;
case 5: dx = -1; dy = 1; break;
case 6: dx = -1; dy = 0; break;
case 7: dx = -1; dy = -1; break;
}
dir = (dir + 1) % 8;
inst.x = cr.floor(oldx + (dx * dist));
inst.y = cr.floor(oldy + (dy * dist));
inst.set_bbox_changed();
if (!this.testOverlap(inst, last_overlapped))
{
last_overlapped = this.testOverlapSolid(inst);
if (!last_overlapped)
return true;
}
}
inst.x = oldx;
inst.y = oldy;
inst.set_bbox_changed();
return false;
};
Runtime.prototype.registerCollision = function (a, b)
{
if (!a.collisionsEnabled || !b.collisionsEnabled)
return;
this.registered_collisions.push([a, b]);
};
Runtime.prototype.checkRegisteredCollision = function (a, b)
{
var i, len, x;
for (i = 0, len = this.registered_collisions.length; i < len; i++)
{
x = this.registered_collisions[i];
if ((x[0] == a && x[1] == b) || (x[0] == b && x[1] == a))
return true;
}
return false;
};
Runtime.prototype.calculateSolidBounceAngle = function(inst, startx, starty, obj)
{
var objx = inst.x;
var objy = inst.y;
var radius = cr.max(10, cr.distanceTo(startx, starty, objx, objy));
var startangle = cr.angleTo(startx, starty, objx, objy);
var firstsolid = obj || this.testOverlapSolid(inst);
if (!firstsolid)
return cr.clamp_angle(startangle + cr.PI);
var cursolid = firstsolid;
var i, curangle, anticlockwise_free_angle, clockwise_free_angle;
var increment = cr.to_radians(5); // 5 degree increments
for (i = 1; i < 36; i++)
{
curangle = startangle - i * increment;
inst.x = startx + Math.cos(curangle) * radius;
inst.y = starty + Math.sin(curangle) * radius;
inst.set_bbox_changed();
if (!this.testOverlap(inst, cursolid))
{
cursolid = obj ? null : this.testOverlapSolid(inst);
if (!cursolid)
{
anticlockwise_free_angle = curangle;
break;
}
}
}
if (i === 36)
anticlockwise_free_angle = cr.clamp_angle(startangle + cr.PI);
var cursolid = firstsolid;
for (i = 1; i < 36; i++)
{
curangle = startangle + i * increment;
inst.x = startx + Math.cos(curangle) * radius;
inst.y = starty + Math.sin(curangle) * radius;
inst.set_bbox_changed();
if (!this.testOverlap(inst, cursolid))
{
cursolid = obj ? null : this.testOverlapSolid(inst);
if (!cursolid)
{
clockwise_free_angle = curangle;
break;
}
}
}
if (i === 36)
clockwise_free_angle = cr.clamp_angle(startangle + cr.PI);
inst.x = objx;
inst.y = objy;
inst.set_bbox_changed();
if (clockwise_free_angle === anticlockwise_free_angle)
return clockwise_free_angle;
var half_diff = cr.angleDiff(clockwise_free_angle, anticlockwise_free_angle) / 2;
var normal;
if (cr.angleClockwise(clockwise_free_angle, anticlockwise_free_angle))
{
normal = cr.clamp_angle(anticlockwise_free_angle + half_diff + cr.PI);
}
else
{
normal = cr.clamp_angle(clockwise_free_angle + half_diff);
}
;
var vx = Math.cos(startangle);
var vy = Math.sin(startangle);
var nx = Math.cos(normal);
var ny = Math.sin(normal);
var v_dot_n = vx * nx + vy * ny;
var rx = vx - 2 * v_dot_n * nx;
var ry = vy - 2 * v_dot_n * ny;
return cr.angleTo(0, 0, rx, ry);
};
var triggerSheetStack = [];
var triggerSheetIndex = -1;
Runtime.prototype.trigger = function (method, inst, value /* for fast triggers */)
{
;
if (!this.running_layout)
return false;
var sheet = this.running_layout.event_sheet;
if (!sheet)
return false; // no event sheet active; nothing to trigger
triggerSheetIndex++;
if (triggerSheetIndex === triggerSheetStack.length)
triggerSheetStack.push(new cr.ObjectSet());
else
triggerSheetStack[triggerSheetIndex].clear();
var ret = this.triggerOnSheet(method, inst, sheet, value);
triggerSheetIndex--;
return ret;
};
Runtime.prototype.triggerOnSheet = function (method, inst, sheet, value)
{
var alreadyTriggeredSheets = triggerSheetStack[triggerSheetIndex];
if (alreadyTriggeredSheets.contains(sheet))
return false;
alreadyTriggeredSheets.add(sheet);
var includes = sheet.includes.valuesRef();
var ret = false;
var i, leni, r;
for (i = 0, leni = includes.length; i < leni; i++)
{
if (includes[i].isActive())
{
r = this.triggerOnSheet(method, inst, includes[i].include_sheet, value);
ret = ret || r;
}
}
if (!inst)
{
r = this.triggerOnSheetForTypeName(method, inst, "system", sheet, value);
ret = ret || r;
}
else
{
r = this.triggerOnSheetForTypeName(method, inst, inst.type.name, sheet, value);
ret = ret || r;
for (i = 0, leni = inst.type.families.length; i < leni; i++)
{
r = this.triggerOnSheetForTypeName(method, inst, inst.type.families[i].name, sheet, value);
ret = ret || r;
}
}
return ret; // true if anything got triggered
};
Runtime.prototype.triggerOnSheetForTypeName = function (method, inst, type_name, sheet, value)
{
var i, leni;
var ret = false, ret2 = false;
var trig, index;
var fasttrigger = (typeof value !== "undefined");
var triggers = (fasttrigger ? sheet.fasttriggers : sheet.triggers);
var obj_entry = triggers[type_name];
if (!obj_entry)
return ret;
var triggers_list = null;
for (i = 0, leni = obj_entry.length; i < leni; i++)
{
if (obj_entry[i].method == method)
{
triggers_list = obj_entry[i].evs;
break;
}
}
if (!triggers_list)
return ret;
var triggers_to_fire;
if (fasttrigger)
{
triggers_to_fire = triggers_list[value];
}
else
{
triggers_to_fire = triggers_list;
}
if (!triggers_to_fire)
return null;
for (i = 0, leni = triggers_to_fire.length; i < leni; i++)
{
trig = triggers_to_fire[i][0];
index = triggers_to_fire[i][1];
ret2 = this.executeSingleTrigger(inst, type_name, trig, index);
ret = ret || ret2;
}
return ret;
};
Runtime.prototype.executeSingleTrigger = function (inst, type_name, trig, index)
{
var i, leni;
var ret = false;
this.trigger_depth++;
var current_event = this.getCurrentEventStack().current_event;
if (current_event)
this.pushCleanSol(current_event.solModifiersIncludingParents);
var isrecursive = (this.trigger_depth > 1); // calling trigger from inside another trigger
this.pushCleanSol(trig.solModifiersIncludingParents);
if (isrecursive)
this.pushLocalVarStack();
var event_stack = this.pushEventStack(trig);
event_stack.current_event = trig;
if (inst)
{
var sol = this.types[type_name].getCurrentSol();
sol.select_all = false;
sol.instances.length = 1;
sol.instances[0] = inst;
this.types[type_name].applySolToContainer();
}
var ok_to_run = true;
if (trig.parent)
{
var temp_parents_arr = event_stack.temp_parents_arr;
var cur_parent = trig.parent;
while (cur_parent)
{
temp_parents_arr.push(cur_parent);
cur_parent = cur_parent.parent;
}
temp_parents_arr.reverse();
for (i = 0, leni = temp_parents_arr.length; i < leni; i++)
{
if (!temp_parents_arr[i].run_pretrigger()) // parent event failed
{
ok_to_run = false;
break;
}
}
}
if (ok_to_run)
{
this.execcount++;
if (trig.orblock)
trig.run_orblocktrigger(index);
else
trig.run();
ret = ret || event_stack.last_event_true;
}
this.popEventStack();
if (isrecursive)
this.popLocalVarStack();
this.popSol(trig.solModifiersIncludingParents);
if (current_event)
this.popSol(current_event.solModifiersIncludingParents);
if (this.isInOnDestroy === 0 && triggerSheetIndex === 0 && !this.isRunningEvents && (!this.deathRow.isEmpty() || this.createRow.length))
{
this.ClearDeathRow();
}
this.trigger_depth--;
return ret;
};
Runtime.prototype.getCurrentCondition = function ()
{
var evinfo = this.getCurrentEventStack();
return evinfo.current_event.conditions[evinfo.cndindex];
};
Runtime.prototype.getCurrentAction = function ()
{
var evinfo = this.getCurrentEventStack();
return evinfo.current_event.actions[evinfo.actindex];
};
Runtime.prototype.pushLocalVarStack = function ()
{
this.localvar_stack_index++;
if (this.localvar_stack_index >= this.localvar_stack.length)
this.localvar_stack.push([]);
};
Runtime.prototype.popLocalVarStack = function ()
{
;
this.localvar_stack_index--;
};
Runtime.prototype.getCurrentLocalVarStack = function ()
{
return this.localvar_stack[this.localvar_stack_index];
};
Runtime.prototype.pushEventStack = function (cur_event)
{
this.event_stack_index++;
if (this.event_stack_index >= this.event_stack.length)
this.event_stack.push(new cr.eventStackFrame());
var ret = this.getCurrentEventStack();
ret.reset(cur_event);
return ret;
};
Runtime.prototype.popEventStack = function ()
{
;
this.event_stack_index--;
};
Runtime.prototype.getCurrentEventStack = function ()
{
return this.event_stack[this.event_stack_index];
};
Runtime.prototype.pushLoopStack = function (name_)
{
this.loop_stack_index++;
if (this.loop_stack_index >= this.loop_stack.length)
{
this.loop_stack.push(cr.seal({ name: name_, index: 0, stopped: false }));
}
var ret = this.getCurrentLoop();
ret.name = name_;
ret.index = 0;
ret.stopped = false;
return ret;
};
Runtime.prototype.popLoopStack = function ()
{
;
this.loop_stack_index--;
};
Runtime.prototype.getCurrentLoop = function ()
{
return this.loop_stack[this.loop_stack_index];
};
Runtime.prototype.getEventVariableByName = function (name, scope)
{
var i, leni, j, lenj, sheet, e;
while (scope)
{
for (i = 0, leni = scope.subevents.length; i < leni; i++)
{
e = scope.subevents[i];
if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name))
return e;
}
scope = scope.parent;
}
for (i = 0, leni = this.eventsheets_by_index.length; i < leni; i++)
{
sheet = this.eventsheets_by_index[i];
for (j = 0, lenj = sheet.events.length; j < lenj; j++)
{
e = sheet.events[j];
if (e instanceof cr.eventvariable && cr.equals_nocase(name, e.name))
return e;
}
}
return null;
};
Runtime.prototype.getLayoutBySid = function (sid_)
{
var i, len;
for (i = 0, len = this.layouts_by_index.length; i < len; i++)
{
if (this.layouts_by_index[i].sid === sid_)
return this.layouts_by_index[i];
}
return null;
};
Runtime.prototype.getObjectTypeBySid = function (sid_)
{
var i, len;
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
if (this.types_by_index[i].sid === sid_)
return this.types_by_index[i];
}
return null;
};
Runtime.prototype.getGroupBySid = function (sid_)
{
var i, len;
for (i = 0, len = this.allGroups.length; i < len; i++)
{
if (this.allGroups[i].sid === sid_)
return this.allGroups[i];
}
return null;
};
function makeSaveDb(e)
{
var db = e.target.result;
db.createObjectStore("saves", { keyPath: "slot" });
};
function IndexedDB_WriteSlot(slot_, data_, oncomplete_, onerror_)
{
var request = indexedDB.open("_C2SaveStates");
request.onupgradeneeded = makeSaveDb;
request.onerror = onerror_;
request.onsuccess = function (e)
{
var db = e.target.result;
db.onerror = onerror_;
var transaction = db.transaction(["saves"], "readwrite");
var objectStore = transaction.objectStore("saves");
var putReq = objectStore.put({"slot": slot_, "data": data_ });
putReq.onsuccess = oncomplete_;
};
};
function IndexedDB_ReadSlot(slot_, oncomplete_, onerror_)
{
var request = indexedDB.open("_C2SaveStates");
request.onupgradeneeded = makeSaveDb;
request.onerror = onerror_;
request.onsuccess = function (e)
{
var db = e.target.result;
db.onerror = onerror_;
var transaction = db.transaction(["saves"]);
var objectStore = transaction.objectStore("saves");
var readReq = objectStore.get(slot_);
readReq.onsuccess = function (e)
{
if (readReq.result)
oncomplete_(readReq.result["data"]);
else
oncomplete_(null);
};
};
};
Runtime.prototype.signalContinuousPreview = function ()
{
this.signalledContinuousPreview = true;
};
function doContinuousPreviewReload()
{
cr.logexport("Reloading for continuous preview");
if (!!window["c2cocoonjs"])
{
CocoonJS["App"]["reload"]();
}
else
{
if (window.location.search.indexOf("continuous") > -1)
window.location.reload(true);
else
window.location = window.location + "?continuous";
}
};
Runtime.prototype.handleSaveLoad = function ()
{
var self = this;
var savingToSlot = this.saveToSlot;
var savingJson = this.lastSaveJson;
var loadingFromSlot = this.loadFromSlot;
var continuous = false;
if (this.signalledContinuousPreview)
{
continuous = true;
savingToSlot = "__c2_continuouspreview";
this.signalledContinuousPreview = false;
}
if (savingToSlot.length)
{
this.ClearDeathRow();
savingJson = this.saveToJSONString();
if (window.indexedDB && !this.isCocoonJs)
{
IndexedDB_WriteSlot(savingToSlot, savingJson, function ()
{
cr.logexport("Saved state to IndexedDB storage (" + savingJson.length + " bytes)");
self.lastSaveJson = savingJson;
self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null);
self.lastSaveJson = "";
if (continuous)
doContinuousPreviewReload();
}, function (e)
{
try {
localStorage.setItem("__c2save_" + savingToSlot, savingJson);
cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)");
self.lastSaveJson = savingJson;
self.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null);
self.lastSaveJson = "";
if (continuous)
doContinuousPreviewReload();
}
catch (f)
{
cr.logexport("Failed to save game state: " + e + "; " + f);
}
});
}
else
{
try {
localStorage.setItem("__c2save_" + savingToSlot, savingJson);
cr.logexport("Saved state to WebStorage (" + savingJson.length + " bytes)");
self.lastSaveJson = savingJson;
this.trigger(cr.system_object.prototype.cnds.OnSaveComplete, null);
self.lastSaveJson = "";
if (continuous)
doContinuousPreviewReload();
}
catch (e)
{
cr.logexport("Error saving to WebStorage: " + e);
}
}
this.saveToSlot = "";
this.loadFromSlot = "";
this.loadFromJson = "";
}
if (loadingFromSlot.length)
{
if (window.indexedDB && !this.isCocoonJs)
{
IndexedDB_ReadSlot(loadingFromSlot, function (result_)
{
if (result_)
{
self.loadFromJson = result_;
cr.logexport("Loaded state from IndexedDB storage (" + self.loadFromJson.length + " bytes)");
}
else
{
self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || "";
cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)");
}
self.suspendDrawing = false;
if (!self.loadFromJson.length)
self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null);
}, function (e)
{
self.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || "";
cr.logexport("Loaded state from WebStorage (" + self.loadFromJson.length + " bytes)");
self.suspendDrawing = false;
if (!self.loadFromJson.length)
self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null);
});
}
else
{
this.loadFromJson = localStorage.getItem("__c2save_" + loadingFromSlot) || "";
cr.logexport("Loaded state from WebStorage (" + this.loadFromJson.length + " bytes)");
this.suspendDrawing = false;
if (!self.loadFromJson.length)
self.trigger(cr.system_object.prototype.cnds.OnLoadFailed, null);
}
this.loadFromSlot = "";
this.saveToSlot = "";
}
if (this.loadFromJson.length)
{
this.ClearDeathRow();
this.loadFromJSONString(this.loadFromJson);
this.lastSaveJson = this.loadFromJson;
this.trigger(cr.system_object.prototype.cnds.OnLoadComplete, null);
this.lastSaveJson = "";
this.loadFromJson = "";
}
};
function CopyExtraObject(extra)
{
var p, ret = {};
for (p in extra)
{
if (extra.hasOwnProperty(p))
{
if (extra[p] instanceof cr.ObjectSet)
continue;
if (extra[p] && typeof extra[p].c2userdata !== "undefined")
continue;
ret[p] = extra[p];
}
}
return ret;
};
Runtime.prototype.saveToJSONString = function()
{
var i, len, j, lenj, type, layout, typeobj, g, c, a, v, p;
var o = {
"c2save": true,
"version": 1,
"rt": {
"time": this.kahanTime.sum,
"timescale": this.timescale,
"tickcount": this.tickcount,
"execcount": this.execcount,
"next_uid": this.next_uid,
"running_layout": this.running_layout.sid,
"start_time_offset": (Date.now() - this.start_time)
},
"types": {},
"layouts": {},
"events": {
"groups": {},
"cnds": {},
"acts": {},
"vars": {}
}
};
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
type = this.types_by_index[i];
if (type.is_family || this.typeHasNoSaveBehavior(type))
continue;
typeobj = {
"instances": []
};
if (cr.hasAnyOwnProperty(type.extra))
typeobj["ex"] = CopyExtraObject(type.extra);
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
typeobj["instances"].push(this.saveInstanceToJSON(type.instances[j]));
}
o["types"][type.sid.toString()] = typeobj;
}
for (i = 0, len = this.layouts_by_index.length; i < len; i++)
{
layout = this.layouts_by_index[i];
o["layouts"][layout.sid.toString()] = layout.saveToJSON();
}
var ogroups = o["events"]["groups"];
for (i = 0, len = this.allGroups.length; i < len; i++)
{
g = this.allGroups[i];
ogroups[g.sid.toString()] = !!this.activeGroups[g.group_name];
}
var ocnds = o["events"]["cnds"];
for (p in this.cndsBySid)
{
if (this.cndsBySid.hasOwnProperty(p))
{
c = this.cndsBySid[p];
if (cr.hasAnyOwnProperty(c.extra))
ocnds[p] = { "ex": CopyExtraObject(c.extra) };
}
}
var oacts = o["events"]["acts"];
for (p in this.actsBySid)
{
if (this.actsBySid.hasOwnProperty(p))
{
a = this.actsBySid[p];
if (cr.hasAnyOwnProperty(a.extra))
oacts[p] = { "ex": a.extra };
}
}
var ovars = o["events"]["vars"];
for (p in this.varsBySid)
{
if (this.varsBySid.hasOwnProperty(p))
{
v = this.varsBySid[p];
if (!v.is_constant && (!v.parent || v.is_static))
ovars[p] = v.data;
}
}
o["system"] = this.system.saveToJSON();
return JSON.stringify(o);
};
Runtime.prototype.refreshUidMap = function ()
{
var i, len, type, j, lenj, inst;
this.objectsByUid = {};
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
type = this.types_by_index[i];
if (type.is_family)
continue;
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
inst = type.instances[j];
this.objectsByUid[inst.uid.toString()] = inst;
}
}
};
Runtime.prototype.loadFromJSONString = function (str)
{
var o = JSON.parse(str);
if (!o["c2save"])
return; // probably not a c2 save state
if (o["version"] > 1)
return; // from future version of c2; assume not compatible
var rt = o["rt"];
this.kahanTime.reset();
this.kahanTime.sum = rt["time"];
this.timescale = rt["timescale"];
this.tickcount = rt["tickcount"];
this.execcount = rt["execcount"];
this.start_time = Date.now() - rt["start_time_offset"];
var layout_sid = rt["running_layout"];
if (layout_sid !== this.running_layout.sid)
{
var changeToLayout = this.getLayoutBySid(layout_sid);
if (changeToLayout)
this.doChangeLayout(changeToLayout);
else
return; // layout that was saved on has gone missing (deleted?)
}
this.isLoadingState = true;
var i, len, j, lenj, k, lenk, p, type, existing_insts, load_insts, inst, binst, layout, layer, g, iid, t;
var otypes = o["types"];
for (p in otypes)
{
if (otypes.hasOwnProperty(p))
{
type = this.getObjectTypeBySid(parseInt(p, 10));
if (!type || type.is_family || this.typeHasNoSaveBehavior(type))
continue;
if (otypes[p]["ex"])
type.extra = otypes[p]["ex"];
else
cr.wipe(type.extra);
existing_insts = type.instances;
load_insts = otypes[p]["instances"];
for (i = 0, len = cr.min(existing_insts.length, load_insts.length); i < len; i++)
{
this.loadInstanceFromJSON(existing_insts[i], load_insts[i]);
}
for (i = load_insts.length, len = existing_insts.length; i < len; i++)
this.DestroyInstance(existing_insts[i]);
for (i = existing_insts.length, len = load_insts.length; i < len; i++)
{
layer = null;
if (type.plugin.is_world)
{
layer = this.running_layout.getLayerBySid(load_insts[i]["w"]["l"]);
if (!layer)
continue;
}
inst = this.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true);
this.loadInstanceFromJSON(inst, load_insts[i]);
}
type.stale_iids = true;
}
}
this.ClearDeathRow();
this.refreshUidMap();
var olayouts = o["layouts"];
for (p in olayouts)
{
if (olayouts.hasOwnProperty(p))
{
layout = this.getLayoutBySid(parseInt(p, 10));
if (!layout)
continue; // must've gone missing
layout.loadFromJSON(olayouts[p]);
}
}
var ogroups = o["events"]["groups"];
for (p in ogroups)
{
if (ogroups.hasOwnProperty(p))
{
g = this.getGroupBySid(parseInt(p, 10));
if (g)
this.activeGroups[g.group_name] = ogroups[p];
}
}
var ocnds = o["events"]["cnds"];
for (p in ocnds)
{
if (ocnds.hasOwnProperty(p) && this.cndsBySid.hasOwnProperty(p))
{
this.cndsBySid[p].extra = ocnds[p]["ex"];
}
}
var oacts = o["events"]["acts"];
for (p in oacts)
{
if (oacts.hasOwnProperty(p) && this.actsBySid.hasOwnProperty(p))
{
this.actsBySid[p].extra = oacts[p]["ex"];
}
}
var ovars = o["events"]["vars"];
for (p in ovars)
{
if (ovars.hasOwnProperty(p) && this.varsBySid.hasOwnProperty(p))
{
this.varsBySid[p].data = ovars[p];
}
}
this.next_uid = rt["next_uid"];
this.isLoadingState = false;
this.system.loadFromJSON(o["system"]);
for (i = 0, len = this.types_by_index.length; i < len; i++)
{
type = this.types_by_index[i];
if (type.is_family)
continue;
for (j = 0, lenj = type.instances.length; j < lenj; j++)
{
inst = type.instances[j];
if (type.is_contained)
{
iid = inst.get_iid();
inst.siblings.length = 0;
for (k = 0, lenk = type.container.length; k < lenk; k++)
{
t = type.container[k];
if (type === t)
continue;
;
inst.siblings.push(t.instances[iid]);
}
}
if (inst.afterLoad)
inst.afterLoad();
if (inst.behavior_insts)
{
for (k = 0, lenk = inst.behavior_insts.length; k < lenk; k++)
{
binst = inst.behavior_insts[k];
if (binst.afterLoad)
binst.afterLoad();
}
}
}
}
this.redraw = true;
};
Runtime.prototype.saveInstanceToJSON = function(inst, state_only)
{
var i, len, world, behinst, et;
var type = inst.type;
var plugin = type.plugin;
var o = {};
if (state_only)
o["c2"] = true; // mark as known json data from Construct 2
else
o["uid"] = inst.uid;
if (cr.hasAnyOwnProperty(inst.extra))
o["ex"] = CopyExtraObject(inst.extra);
if (inst.instance_vars && inst.instance_vars.length)
{
o["ivs"] = {};
for (i = 0, len = inst.instance_vars.length; i < len; i++)
{
o["ivs"][inst.type.instvar_sids[i].toString()] = inst.instance_vars[i];
}
}
if (plugin.is_world)
{
world = {
"x": inst.x,
"y": inst.y,
"w": inst.width,
"h": inst.height,
"l": inst.layer.sid,
"zi": inst.get_zindex()
};
if (inst.angle !== 0)
world["a"] = inst.angle;
if (inst.opacity !== 1)
world["o"] = inst.opacity;
if (inst.hotspotX !== 0.5)
world["hX"] = inst.hotspotX;
if (inst.hotspotY !== 0.5)
world["hY"] = inst.hotspotY;
if (inst.blend_mode !== 0)
world["bm"] = inst.blend_mode;
if (!inst.visible)
world["v"] = inst.visible;
if (!inst.collisionsEnabled)
world["ce"] = inst.collisionsEnabled;
if (inst.my_timescale !== -1)
world["mts"] = inst.my_timescale;
if (type.effect_types.length)
{
world["fx"] = [];
for (i = 0, len = type.effect_types.length; i < len; i++)
{
et = type.effect_types[i];
world["fx"].push({"name": et.name,
"active": inst.active_effect_flags[et.index],
"params": inst.effect_params[et.index] });
}
}
o["w"] = world;
}
if (inst.behavior_insts && inst.behavior_insts.length)
{
o["behs"] = {};
for (i = 0, len = inst.behavior_insts.length; i < len; i++)
{
behinst = inst.behavior_insts[i];
if (behinst.saveToJSON)
o["behs"][behinst.type.sid.toString()] = behinst.saveToJSON();
}
}
if (inst.saveToJSON)
o["data"] = inst.saveToJSON();
return o;
};
Runtime.prototype.getInstanceVarIndexBySid = function (type, sid_)
{
var i, len;
for (i = 0, len = type.instvar_sids.length; i < len; i++)
{
if (type.instvar_sids[i] === sid_)
return i;
}
return -1;
};
Runtime.prototype.getBehaviorIndexBySid = function (inst, sid_)
{
var i, len;
for (i = 0, len = inst.behavior_insts.length; i < len; i++)
{
if (inst.behavior_insts[i].type.sid === sid_)
return i;
}
return -1;
};
Runtime.prototype.loadInstanceFromJSON = function(inst, o, state_only)
{
var p, i, len, iv, oivs, world, fxindex, obehs, behindex;
var oldlayer;
var type = inst.type;
var plugin = type.plugin;
if (state_only)
{
if (!o["c2"])
return;
}
else
inst.uid = o["uid"];
if (o["ex"])
inst.extra = o["ex"];
else
cr.wipe(inst.extra);
oivs = o["ivs"];
if (oivs)
{
for (p in oivs)
{
if (oivs.hasOwnProperty(p))
{
iv = this.getInstanceVarIndexBySid(type, parseInt(p, 10));
if (iv < 0 || iv >= inst.instance_vars.length)
continue; // must've gone missing
inst.instance_vars[iv] = oivs[p];
}
}
}
if (plugin.is_world)
{
world = o["w"];
if (inst.layer.sid !== world["l"])
{
oldlayer = inst.layer;
inst.layer = this.running_layout.getLayerBySid(world["l"]);
if (inst.layer)
{
inst.layer.instances.push(inst);
inst.layer.zindices_stale = true;
cr.arrayFindRemove(oldlayer.instances, inst);
oldlayer.zindices_stale = true;
}
else
{
inst.layer = oldlayer;
this.DestroyInstance(inst);
}
}
inst.x = world["x"];
inst.y = world["y"];
inst.width = world["w"];
inst.height = world["h"];
inst.zindex = world["zi"];
inst.angle = world.hasOwnProperty("a") ? world["a"] : 0;
inst.opacity = world.hasOwnProperty("o") ? world["o"] : 1;
inst.hotspotX = world.hasOwnProperty("hX") ? world["hX"] : 0.5;
inst.hotspotY = world.hasOwnProperty("hY") ? world["hY"] : 0.5;
inst.visible = world.hasOwnProperty("v") ? world["v"] : true;
inst.collisionsEnabled = world.hasOwnProperty("ce") ? world["ce"] : true;
inst.my_timescale = world.hasOwnProperty("mts") ? world["mts"] : -1;
inst.blend_mode = world.hasOwnProperty("bm") ? world["bm"] : 0;;
inst.compositeOp = cr.effectToCompositeOp(inst.blend_mode);
if (this.gl)
cr.setGLBlend(inst, inst.blend_mode, this.gl);
inst.set_bbox_changed();
if (world.hasOwnProperty("fx"))
{
for (i = 0, len = world["fx"].length; i < len; i++)
{
fxindex = type.getEffectIndexByName(world["fx"][i]["name"]);
if (fxindex < 0)
continue; // must've gone missing
inst.active_effect_flags[fxindex] = world["fx"][i]["active"];
inst.effect_params[fxindex] = world["fx"][i]["params"];
}
}
inst.updateActiveEffects();
}
obehs = o["behs"];
if (obehs)
{
for (p in obehs)
{
if (obehs.hasOwnProperty(p))
{
behindex = this.getBehaviorIndexBySid(inst, parseInt(p, 10));
if (behindex < 0)
continue; // must've gone missing
inst.behavior_insts[behindex].loadFromJSON(obehs[p]);
}
}
}
if (o["data"])
inst.loadFromJSON(o["data"]);
};
cr.runtime = Runtime;
cr.createRuntime = function (canvasid)
{
return new Runtime(document.getElementById(canvasid));
};
cr.createDCRuntime = function (w, h)
{
return new Runtime({ "dc": true, "width": w, "height": h });
};
window["cr_createRuntime"] = cr.createRuntime;
window["cr_createDCRuntime"] = cr.createDCRuntime;
window["createCocoonJSRuntime"] = function ()
{
window["c2cocoonjs"] = true;
var canvas = document.createElement("screencanvas") || document.createElement("canvas");
canvas.screencanvas = true;
document.body.appendChild(canvas);
var rt = new Runtime(canvas);
window["c2runtime"] = rt;
window.addEventListener("orientationchange", function () {
window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight);
});
window["c2runtime"]["setSize"](window.innerWidth, window.innerHeight);
return rt;
};
}());
window["cr_getC2Runtime"] = function()
{
var canvas = document.getElementById("c2canvas");
if (canvas)
return canvas["c2runtime"];
else if (window["c2runtime"])
return window["c2runtime"];
else
return null;
}
window["cr_sizeCanvas"] = function(w, h)
{
if (w === 0 || h === 0)
return;
var runtime = window["cr_getC2Runtime"]();
if (runtime)
runtime["setSize"](w, h);
}
window["cr_setSuspended"] = function(s)
{
var runtime = window["cr_getC2Runtime"]();
if (runtime)
runtime["setSuspended"](s);
}
;
(function()
{
function Layout(runtime, m)
{
this.runtime = runtime;
this.event_sheet = null;
this.scrollX = (this.runtime.original_width / 2);
this.scrollY = (this.runtime.original_height / 2);
this.scale = 1.0;
this.angle = 0;
this.first_visit = true;
this.name = m[0];
this.width = m[1];
this.height = m[2];
this.unbounded_scrolling = m[3];
this.sheetname = m[4];
this.sid = m[5];
var lm = m[6];
var i, len;
this.layers = [];
this.initial_types = [];
for (i = 0, len = lm.length; i < len; i++)
{
var layer = new cr.layer(this, lm[i]);
layer.number = i;
cr.seal(layer);
this.layers.push(layer);
}
var im = m[7];
this.initial_nonworld = [];
for (i = 0, len = im.length; i < len; i++)
{
var inst = im[i];
var type = this.runtime.types_by_index[inst[1]];
;
if (!type.default_instance)
type.default_instance = inst;
this.initial_nonworld.push(inst);
if (this.initial_types.indexOf(type) === -1)
this.initial_types.push(type);
}
this.effect_types = [];
this.active_effect_types = [];
this.effect_params = [];
for (i = 0, len = m[8].length; i < len; i++)
{
this.effect_types.push({
id: m[8][i][0],
name: m[8][i][1],
shaderindex: -1,
active: true,
index: i
});
this.effect_params.push(m[8][i][2].slice(0));
}
this.updateActiveEffects();
this.rcTex = new cr.rect(0, 0, 1, 1);
this.rcTex2 = new cr.rect(0, 0, 1, 1);
this.persist_data = {};
};
Layout.prototype.saveObjectToPersist = function (inst)
{
var sidStr = inst.type.sid.toString();
if (!this.persist_data.hasOwnProperty(sidStr))
this.persist_data[sidStr] = [];
var type_persist = this.persist_data[sidStr];
type_persist.push(this.runtime.saveInstanceToJSON(inst));
};
Layout.prototype.hasOpaqueBottomLayer = function ()
{
var layer = this.layers[0];
return !layer.transparent && layer.opacity === 1.0 && !layer.forceOwnTexture && layer.visible;
};
Layout.prototype.updateActiveEffects = function ()
{
this.active_effect_types.length = 0;
var i, len, et;
for (i = 0, len = this.effect_types.length; i < len; i++)
{
et = this.effect_types[i];
if (et.active)
this.active_effect_types.push(et);
}
};
Layout.prototype.getEffectByName = function (name_)
{
var i, len, et;
for (i = 0, len = this.effect_types.length; i < len; i++)
{
et = this.effect_types[i];
if (et.name === name_)
return et;
}
return null;
};
var created_instances = [];
Layout.prototype.startRunning = function ()
{
if (this.sheetname)
{
this.event_sheet = this.runtime.eventsheets[this.sheetname];
;
}
this.runtime.running_layout = this;
this.scrollX = (this.runtime.original_width / 2);
this.scrollY = (this.runtime.original_height / 2);
var i, k, len, lenk, type, type_instances, inst, iid, t, s, p, q, type_data, layer;
for (i = 0, len = this.runtime.types_by_index.length; i < len; i++)
{
type = this.runtime.types_by_index[i];
if (type.is_family)
continue; // instances are only transferred for their real type
type_instances = type.instances;
for (k = 0, lenk = type_instances.length; k < lenk; k++)
{
inst = type_instances[k];
if (inst.layer)
{
var num = inst.layer.number;
if (num >= this.layers.length)
num = this.layers.length - 1;
inst.layer = this.layers[num];
inst.layer.instances.push(inst);
inst.layer.zindices_stale = true;
}
}
}
var layer;
created_instances.length = 0;
this.boundScrolling();
for (i = 0, len = this.layers.length; i < len; i++)
{
layer = this.layers[i];
layer.createInitialInstances(); // fills created_instances
layer.disableAngle = true;
var px = layer.canvasToLayer(0, 0, true, true);
var py = layer.canvasToLayer(0, 0, false, true);
layer.disableAngle = false;
if (this.runtime.pixel_rounding)
{
px = (px + 0.5) | 0;
py = (py + 0.5) | 0;
}
layer.rotateViewport(px, py, null);
}
var uids_changed = false;
if (!this.first_visit)
{
for (p in this.persist_data)
{
if (this.persist_data.hasOwnProperty(p))
{
type = this.runtime.getObjectTypeBySid(parseInt(p, 10));
if (!type || type.is_family || !this.runtime.typeHasPersistBehavior(type))
continue;
type_data = this.persist_data[p];
for (i = 0, len = type_data.length; i < len; i++)
{
layer = null;
if (type.plugin.is_world)
{
layer = this.getLayerBySid(type_data[i]["w"]["l"]);
if (!layer)
continue;
}
inst = this.runtime.createInstanceFromInit(type.default_instance, layer, false, 0, 0, true);
this.runtime.loadInstanceFromJSON(inst, type_data[i]);
uids_changed = true;
created_instances.push(inst);
}
type_data.length = 0;
}
}
for (i = 0, len = this.layers.length; i < len; i++)
{
this.layers[i].instances.sort(sortInstanceByZIndex);
this.layers[i].zindices_stale = true; // in case of duplicates/holes
}
}
if (uids_changed)
{
this.runtime.ClearDeathRow();
this.runtime.refreshUidMap();
}
for (i = 0; i < created_instances.length; i++)
{
inst = created_instances[i];
if (!inst.type.is_contained)
continue;
iid = inst.get_iid();
for (k = 0, lenk = inst.type.container.length; k < lenk; k++)
{
t = inst.type.container[k];
if (inst.type === t)
continue;
if (t.instances.length > iid)
inst.siblings.push(t.instances[iid]);
else
{
if (!t.default_instance)
{
}
else
{
s = this.runtime.createInstanceFromInit(t.default_instance, inst.layer, true, inst.x, inst.y, true);
this.runtime.ClearDeathRow();
t.updateIIDs();
inst.siblings.push(s);
created_instances.push(s); // come back around and link up its own instances too
}
}
}
}
for (i = 0, len = this.initial_nonworld.length; i < len; i++)
{
inst = this.runtime.createInstanceFromInit(this.initial_nonworld[i], null, true);
;
}
this.runtime.changelayout = null;
this.runtime.ClearDeathRow();
if (this.runtime.ctx && !this.runtime.isDomFree)
{
for (i = 0, len = this.runtime.types_by_index.length; i < len; i++)
{
t = this.runtime.types_by_index[i];
if (t.is_family || !t.instances.length || !t.preloadCanvas2D)
continue;
t.preloadCanvas2D(this.runtime.ctx);
}
}
/*
if (this.runtime.glwrap)
{
console.log("Estimated VRAM at layout start: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb");
}
*/
for (i = 0, len = created_instances.length; i < len; i++)
{
inst = created_instances[i];
this.runtime.trigger(Object.getPrototypeOf(inst.type.plugin).cnds.OnCreated, inst);
}
created_instances.length = 0;
this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutStart, null);
this.first_visit = false;
};
Layout.prototype.createGlobalNonWorlds = function ()
{
var i, k, len, initial_inst, inst, type;
for (i = 0, k = 0, len = this.initial_nonworld.length; i < len; i++)
{
initial_inst = this.initial_nonworld[i];
type = this.runtime.types_by_index[initial_inst[1]];
if (type.global)
inst = this.runtime.createInstanceFromInit(initial_inst, null, true);
else
{
this.initial_nonworld[k] = initial_inst;
k++;
}
}
this.initial_nonworld.length = k;
};
Layout.prototype.stopRunning = function ()
{
;
/*
if (this.runtime.glwrap)
{
console.log("Estimated VRAM at layout end: " + this.runtime.glwrap.textureCount() + " textures, approx. " + Math.round(this.runtime.glwrap.estimateVRAM() / 1024) + " kb");
}
*/
this.runtime.trigger(cr.system_object.prototype.cnds.OnLayoutEnd, null);
this.runtime.system.waits.length = 0;
var i, leni, j, lenj;
var layer_instances, inst, type;
for (i = 0, leni = this.layers.length; i < leni; i++)
{
layer_instances = this.layers[i].instances;
for (j = 0, lenj = layer_instances.length; j < lenj; j++)
{
inst = layer_instances[j];
if (!inst.type.global)
{
if (this.runtime.typeHasPersistBehavior(inst.type))
this.saveObjectToPersist(inst);
this.runtime.DestroyInstance(inst);
}
}
this.runtime.ClearDeathRow();
layer_instances.length = 0;
this.layers[i].zindices_stale = true;
}
for (i = 0, leni = this.runtime.types_by_index.length; i < leni; i++)
{
type = this.runtime.types_by_index[i];
if (type.global || type.plugin.is_world || type.plugin.singleglobal || type.is_family)
continue;
for (j = 0, lenj = type.instances.length; j < lenj; j++)
this.runtime.DestroyInstance(type.instances[j]);
this.runtime.ClearDeathRow();
}
};
Layout.prototype.draw = function (ctx)
{
var layout_canvas;
var layout_ctx = ctx;
var ctx_changed = false;
var render_offscreen = !this.runtime.fullscreenScalingQuality;
if (render_offscreen)
{
if (!this.runtime.layout_canvas)
{
this.runtime.layout_canvas = document.createElement("canvas");
layout_canvas = this.runtime.layout_canvas;
layout_canvas.width = this.runtime.draw_width;
layout_canvas.height = this.runtime.draw_height;
this.runtime.layout_ctx = layout_canvas.getContext("2d");
ctx_changed = true;
}
layout_canvas = this.runtime.layout_canvas;
layout_ctx = this.runtime.layout_ctx;
if (layout_canvas.width !== this.runtime.draw_width)
{
layout_canvas.width = this.runtime.draw_width;
ctx_changed = true;
}
if (layout_canvas.height !== this.runtime.draw_height)
{
layout_canvas.height = this.runtime.draw_height;
ctx_changed = true;
}
if (ctx_changed)
{
layout_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling;
layout_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling;
layout_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling;
layout_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling;
}
}
layout_ctx.globalAlpha = 1;
layout_ctx.globalCompositeOperation = "source-over";
if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer())
layout_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height);
var i, len, l;
for (i = 0, len = this.layers.length; i < len; i++)
{
l = this.layers[i];
if (l.visible && l.opacity > 0 && l.blend_mode !== 11)
l.draw(layout_ctx);
}
if (render_offscreen)
{
ctx.drawImage(layout_canvas, 0, 0, this.runtime.width, this.runtime.height);
}
};
Layout.prototype.drawGL = function (glw)
{
var render_to_texture = (this.active_effect_types.length > 0 ||
this.runtime.uses_background_blending ||
!this.runtime.fullscreenScalingQuality);
if (render_to_texture)
{
if (!this.runtime.layout_tex)
{
this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling);
}
if (this.runtime.layout_tex.c2width !== this.runtime.draw_width || this.runtime.layout_tex.c2height !== this.runtime.draw_height)
{
glw.deleteTexture(this.runtime.layout_tex);
this.runtime.layout_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling);
}
glw.setRenderingToTexture(this.runtime.layout_tex);
if (!this.runtime.fullscreenScalingQuality)
{
glw.setSize(this.runtime.draw_width, this.runtime.draw_height);
}
}
else
{
if (this.runtime.layout_tex)
{
glw.setRenderingToTexture(null);
glw.deleteTexture(this.runtime.layout_tex);
this.runtime.layout_tex = null;
}
}
if (this.runtime.alphaBackground && !this.hasOpaqueBottomLayer())
glw.clear(0, 0, 0, 0);
var i, len;
for (i = 0, len = this.layers.length; i < len; i++)
{
if (this.layers[i].visible && this.layers[i].opacity > 0)
this.layers[i].drawGL(glw);
}
if (render_to_texture)
{
if (this.active_effect_types.length === 0 ||
(this.active_effect_types.length === 1 && this.runtime.fullscreenScalingQuality))
{
if (this.active_effect_types.length === 1)
{
var etindex = this.active_effect_types[0].index;
glw.switchProgram(this.active_effect_types[0].shaderindex);
glw.setProgramParameters(null, // backTex
1.0 / this.runtime.draw_width, // pixelWidth
1.0 / this.runtime.draw_height, // pixelHeight
0.0, 0.0, // destStart
1.0, 1.0, // destEnd
this.scale, // layerScale
this.effect_params[etindex]); // fx parameters
if (glw.programIsAnimated(this.active_effect_types[0].shaderindex))
this.runtime.redraw = true;
}
else
glw.switchProgram(0);
if (!this.runtime.fullscreenScalingQuality)
{
glw.setSize(this.runtime.width, this.runtime.height);
}
glw.setRenderingToTexture(null); // to backbuffer
glw.setOpacity(1);
glw.setTexture(this.runtime.layout_tex);
glw.setAlphaBlend();
glw.resetModelView();
glw.updateModelView();
var halfw = this.runtime.width / 2;
var halfh = this.runtime.height / 2;
glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh);
glw.setTexture(null);
}
else
{
this.renderEffectChain(glw, null, null, null);
}
}
};
Layout.prototype.getRenderTarget = function()
{
return (this.active_effect_types.length > 0 ||
this.runtime.uses_background_blending ||
!this.runtime.fullscreenScalingQuality) ? this.runtime.layout_tex : null;
};
Layout.prototype.getMinLayerScale = function ()
{
var m = this.layers[0].getScale();
var i, len, l;
for (i = 1, len = this.layers.length; i < len; i++)
{
l = this.layers[i];
if (l.parallaxX === 0 && l.parallaxY === 0)
continue;
if (l.getScale() < m)
m = l.getScale();
}
return m;
};
Layout.prototype.scrollToX = function (x)
{
if (!this.unbounded_scrolling)
{
var widthBoundary = (this.runtime.draw_width * (1 / this.getMinLayerScale()) / 2);
if (x > this.width - widthBoundary)
x = this.width - widthBoundary;
if (x < widthBoundary)
x = widthBoundary;
}
if (this.scrollX !== x)
{
this.scrollX = x;
this.runtime.redraw = true;
}
};
Layout.prototype.scrollToY = function (y)
{
if (!this.unbounded_scrolling)
{
var heightBoundary = (this.runtime.draw_height * (1 / this.getMinLayerScale()) / 2);
if (y > this.height - heightBoundary)
y = this.height - heightBoundary;
if (y < heightBoundary)
y = heightBoundary;
}
if (this.scrollY !== y)
{
this.scrollY = y;
this.runtime.redraw = true;
}
};
Layout.prototype.boundScrolling = function ()
{
this.scrollToX(this.scrollX);
this.scrollToY(this.scrollY);
};
Layout.prototype.renderEffectChain = function (glw, layer, inst, rendertarget)
{
var active_effect_types = inst ?
inst.active_effect_types :
layer ?
layer.active_effect_types :
this.active_effect_types;
var layerScale = inst ? inst.layer.getScale() :
layer ? layer.getScale() : 1;
var fx_tex = this.runtime.fx_tex;
var i, len, last, temp, fx_index = 0, other_fx_index = 1;
var y, h;
var windowWidth = this.runtime.draw_width;
var windowHeight = this.runtime.draw_height;
var halfw = windowWidth / 2;
var halfh = windowHeight / 2;
var rcTex = layer ? layer.rcTex : this.rcTex;
var rcTex2 = layer ? layer.rcTex2 : this.rcTex2;
var screenleft = 0, clearleft = 0;
var screentop = 0, cleartop = 0;
var screenright = windowWidth, clearright = windowWidth;
var screenbottom = windowHeight, clearbottom = windowHeight;
var boxExtendHorizontal = 0;
var boxExtendVertical = 0;
var inst_layer_angle = inst ? inst.layer.getAngle() : 0;
if (inst)
{
for (i = 0, len = active_effect_types.length; i < len; i++)
{
boxExtendHorizontal += glw.getProgramBoxExtendHorizontal(active_effect_types[i].shaderindex);
boxExtendVertical += glw.getProgramBoxExtendVertical(active_effect_types[i].shaderindex);
}
var bbox = inst.bbox;
screenleft = layer.layerToCanvas(bbox.left, bbox.top, true, true);
screentop = layer.layerToCanvas(bbox.left, bbox.top, false, true);
screenright = layer.layerToCanvas(bbox.right, bbox.bottom, true, true);
screenbottom = layer.layerToCanvas(bbox.right, bbox.bottom, false, true);
if (inst_layer_angle !== 0)
{
var screentrx = layer.layerToCanvas(bbox.right, bbox.top, true, true);
var screentry = layer.layerToCanvas(bbox.right, bbox.top, false, true);
var screenblx = layer.layerToCanvas(bbox.left, bbox.bottom, true, true);
var screenbly = layer.layerToCanvas(bbox.left, bbox.bottom, false, true);
temp = Math.min(screenleft, screenright, screentrx, screenblx);
screenright = Math.max(screenleft, screenright, screentrx, screenblx);
screenleft = temp;
temp = Math.min(screentop, screenbottom, screentry, screenbly);
screenbottom = Math.max(screentop, screenbottom, screentry, screenbly);
screentop = temp;
}
screenleft -= boxExtendHorizontal;
screentop -= boxExtendVertical;
screenright += boxExtendHorizontal;
screenbottom += boxExtendVertical;
rcTex2.left = screenleft / windowWidth;
rcTex2.top = 1 - screentop / windowHeight;
rcTex2.right = screenright / windowWidth;
rcTex2.bottom = 1 - screenbottom / windowHeight;
clearleft = screenleft = cr.floor(screenleft);
cleartop = screentop = cr.floor(screentop);
clearright = screenright = cr.ceil(screenright);
clearbottom = screenbottom = cr.ceil(screenbottom);
clearleft -= boxExtendHorizontal;
cleartop -= boxExtendVertical;
clearright += boxExtendHorizontal;
clearbottom += boxExtendVertical;
if (screenleft < 0) screenleft = 0;
if (screentop < 0) screentop = 0;
if (screenright > windowWidth) screenright = windowWidth;
if (screenbottom > windowHeight) screenbottom = windowHeight;
if (clearleft < 0) clearleft = 0;
if (cleartop < 0) cleartop = 0;
if (clearright > windowWidth) clearright = windowWidth;
if (clearbottom > windowHeight) clearbottom = windowHeight;
rcTex.left = screenleft / windowWidth;
rcTex.top = 1 - screentop / windowHeight;
rcTex.right = screenright / windowWidth;
rcTex.bottom = 1 - screenbottom / windowHeight;
}
else
{
rcTex.left = rcTex2.left = 0;
rcTex.top = rcTex2.top = 0;
rcTex.right = rcTex2.right = 1;
rcTex.bottom = rcTex2.bottom = 1;
}
var pre_draw = (inst && (((inst.angle || inst_layer_angle) && glw.programUsesDest(active_effect_types[0].shaderindex)) || boxExtendHorizontal !== 0 || boxExtendVertical !== 0 || inst.opacity !== 1 || inst.type.plugin.must_predraw)) || (layer && !inst && layer.opacity !== 1);
glw.setAlphaBlend();
if (pre_draw)
{
if (!fx_tex[fx_index])
{
fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling);
}
if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight)
{
glw.deleteTexture(fx_tex[fx_index]);
fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling);
}
glw.switchProgram(0);
glw.setRenderingToTexture(fx_tex[fx_index]);
h = clearbottom - cleartop;
y = (windowHeight - cleartop) - h;
glw.clearRect(clearleft, y, clearright - clearleft, h);
if (inst)
{
inst.drawGL(glw);
}
else
{
glw.setTexture(this.runtime.layer_tex);
glw.setOpacity(layer.opacity);
glw.resetModelView();
glw.translate(-halfw, -halfh);
glw.updateModelView();
glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex);
}
rcTex2.left = rcTex2.top = 0;
rcTex2.right = rcTex2.bottom = 1;
if (inst)
{
temp = rcTex.top;
rcTex.top = rcTex.bottom;
rcTex.bottom = temp;
}
fx_index = 1;
other_fx_index = 0;
}
glw.setOpacity(1);
var last = active_effect_types.length - 1;
var post_draw = glw.programUsesCrossSampling(active_effect_types[last].shaderindex) ||
(!layer && !inst && !this.runtime.fullscreenScalingQuality);
var etindex = 0;
for (i = 0, len = active_effect_types.length; i < len; i++)
{
if (!fx_tex[fx_index])
{
fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling);
}
if (fx_tex[fx_index].c2width !== windowWidth || fx_tex[fx_index].c2height !== windowHeight)
{
glw.deleteTexture(fx_tex[fx_index]);
fx_tex[fx_index] = glw.createEmptyTexture(windowWidth, windowHeight, this.runtime.linearSampling);
}
glw.switchProgram(active_effect_types[i].shaderindex);
etindex = active_effect_types[i].index;
if (glw.programIsAnimated(active_effect_types[i].shaderindex))
this.runtime.redraw = true;
if (i == 0 && !pre_draw)
{
glw.setRenderingToTexture(fx_tex[fx_index]);
h = clearbottom - cleartop;
y = (windowHeight - cleartop) - h;
glw.clearRect(clearleft, y, clearright - clearleft, h);
if (inst)
{
glw.setProgramParameters(rendertarget, // backTex
1.0 / inst.width, // pixelWidth
1.0 / inst.height, // pixelHeight
rcTex2.left, rcTex2.top, // destStart
rcTex2.right, rcTex2.bottom, // destEnd
layerScale,
inst.effect_params[etindex]); // fx params
inst.drawGL(glw);
}
else
{
glw.setProgramParameters(rendertarget, // backTex
1.0 / windowWidth, // pixelWidth
1.0 / windowHeight, // pixelHeight
0.0, 0.0, // destStart
1.0, 1.0, // destEnd
layerScale,
layer ? // fx params
layer.effect_params[etindex] :
this.effect_params[etindex]);
glw.setTexture(layer ? this.runtime.layer_tex : this.runtime.layout_tex);
glw.resetModelView();
glw.translate(-halfw, -halfh);
glw.updateModelView();
glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex);
}
rcTex2.left = rcTex2.top = 0;
rcTex2.right = rcTex2.bottom = 1;
if (inst && !post_draw)
{
temp = screenbottom;
screenbottom = screentop;
screentop = temp;
}
}
else
{
glw.setProgramParameters(rendertarget, // backTex
1.0 / windowWidth, // pixelWidth
1.0 / windowHeight, // pixelHeight
rcTex2.left, rcTex2.top, // destStart
rcTex2.right, rcTex2.bottom, // destEnd
layerScale,
inst ? // fx params
inst.effect_params[etindex] :
layer ?
layer.effect_params[etindex] :
this.effect_params[etindex]);
glw.setTexture(null);
if (i === last && !post_draw)
{
if (inst)
glw.setBlend(inst.srcBlend, inst.destBlend);
else if (layer)
glw.setBlend(layer.srcBlend, layer.destBlend);
glw.setRenderingToTexture(rendertarget);
}
else
{
glw.setRenderingToTexture(fx_tex[fx_index]);
h = clearbottom - cleartop;
y = (windowHeight - cleartop) - h;
glw.clearRect(clearleft, y, clearright - clearleft, h);
}
glw.setTexture(fx_tex[other_fx_index]);
glw.resetModelView();
glw.translate(-halfw, -halfh);
glw.updateModelView();
glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex);
if (i === last && !post_draw)
glw.setTexture(null);
}
fx_index = (fx_index === 0 ? 1 : 0);
other_fx_index = (fx_index === 0 ? 1 : 0); // will be opposite to fx_index since it was just assigned
}
if (post_draw)
{
glw.switchProgram(0);
if (inst)
glw.setBlend(inst.srcBlend, inst.destBlend);
else if (layer)
glw.setBlend(layer.srcBlend, layer.destBlend);
else
{
if (!this.runtime.fullscreenScalingQuality)
{
glw.setSize(this.runtime.width, this.runtime.height);
halfw = this.runtime.width / 2;
halfh = this.runtime.height / 2;
screenleft = 0;
screentop = 0;
screenright = this.runtime.width;
screenbottom = this.runtime.height;
}
}
glw.setRenderingToTexture(rendertarget);
glw.setTexture(fx_tex[other_fx_index]);
glw.resetModelView();
glw.translate(-halfw, -halfh);
glw.updateModelView();
if (inst && active_effect_types.length === 1 && !pre_draw)
glw.quadTex(screenleft, screentop, screenright, screentop, screenright, screenbottom, screenleft, screenbottom, rcTex);
else
glw.quadTex(screenleft, screenbottom, screenright, screenbottom, screenright, screentop, screenleft, screentop, rcTex);
glw.setTexture(null);
}
};
Layout.prototype.getLayerBySid = function (sid_)
{
var i, len;
for (i = 0, len = this.layers.length; i < len; i++)
{
if (this.layers[i].sid === sid_)
return this.layers[i];
}
return null;
};
Layout.prototype.saveToJSON = function ()
{
var i, len, layer, et;
var o = {
"sx": this.scrollX,
"sy": this.scrollY,
"s": this.scale,
"a": this.angle,
"w": this.width,
"h": this.height,
"fv": this.first_visit, // added r127
"persist": this.persist_data,
"fx": [],
"layers": {}
};
for (i = 0, len = this.effect_types.length; i < len; i++)
{
et = this.effect_types[i];
o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] });
}
for (i = 0, len = this.layers.length; i < len; i++)
{
layer = this.layers[i];
o["layers"][layer.sid.toString()] = layer.saveToJSON();
}
return o;
};
Layout.prototype.loadFromJSON = function (o)
{
var i, len, fx, p, layer;
this.scrollX = o["sx"];
this.scrollY = o["sy"];
this.scale = o["s"];
this.angle = o["a"];
this.width = o["w"];
this.height = o["h"];
this.persist_data = o["persist"];
if (typeof o["fv"] !== "undefined")
this.first_visit = o["fv"];
var ofx = o["fx"];
for (i = 0, len = ofx.length; i < len; i++)
{
fx = this.getEffectByName(ofx[i]["name"]);
if (!fx)
continue; // must've gone missing
fx.active = ofx[i]["active"];
this.effect_params[fx.index] = ofx[i]["params"];
}
this.updateActiveEffects();
var olayers = o["layers"];
for (p in olayers)
{
if (olayers.hasOwnProperty(p))
{
layer = this.getLayerBySid(parseInt(p, 10));
if (!layer)
continue; // must've gone missing
layer.loadFromJSON(olayers[p]);
}
}
};
cr.layout = Layout;
function Layer(layout, m)
{
this.layout = layout;
this.runtime = layout.runtime;
this.instances = []; // running instances
this.scale = 1.0;
this.angle = 0;
this.disableAngle = false;
this.tmprect = new cr.rect(0, 0, 0, 0);
this.tmpquad = new cr.quad();
this.viewLeft = 0;
this.viewRight = 0;
this.viewTop = 0;
this.viewBottom = 0;
this.zindices_stale = false;
this.name = m[0];
this.index = m[1];
this.sid = m[2];
this.visible = m[3]; // initially visible
this.background_color = m[4];
this.transparent = m[5];
this.parallaxX = m[6];
this.parallaxY = m[7];
this.opacity = m[8];
this.forceOwnTexture = m[9];
this.zoomRate = m[10];
this.blend_mode = m[11];
this.effect_fallback = m[12];
this.compositeOp = "source-over";
this.srcBlend = 0;
this.destBlend = 0;
this.render_offscreen = false;
var im = m[13];
var i, len;
this.initial_instances = [];
for (i = 0, len = im.length; i < len; i++)
{
var inst = im[i];
var type = this.runtime.types_by_index[inst[1]];
;
if (!type.default_instance)
type.default_instance = inst;
this.initial_instances.push(inst);
if (this.layout.initial_types.indexOf(type) === -1)
this.layout.initial_types.push(type);
}
this.effect_types = [];
this.active_effect_types = [];
this.effect_params = [];
for (i = 0, len = m[14].length; i < len; i++)
{
this.effect_types.push({
id: m[14][i][0],
name: m[14][i][1],
shaderindex: -1,
active: true,
index: i
});
this.effect_params.push(m[14][i][2].slice(0));
}
this.updateActiveEffects();
this.rcTex = new cr.rect(0, 0, 1, 1);
this.rcTex2 = new cr.rect(0, 0, 1, 1);
};
Layer.prototype.updateActiveEffects = function ()
{
this.active_effect_types.length = 0;
var i, len, et;
for (i = 0, len = this.effect_types.length; i < len; i++)
{
et = this.effect_types[i];
if (et.active)
this.active_effect_types.push(et);
}
};
Layer.prototype.getEffectByName = function (name_)
{
var i, len, et;
for (i = 0, len = this.effect_types.length; i < len; i++)
{
et = this.effect_types[i];
if (et.name === name_)
return et;
}
return null;
};
Layer.prototype.createInitialInstances = function ()
{
var i, k, len, inst, initial_inst, type, keep, hasPersistBehavior;
for (i = 0, k = 0, len = this.initial_instances.length; i < len; i++)
{
initial_inst = this.initial_instances[i];
type = this.runtime.types_by_index[initial_inst[1]];
;
hasPersistBehavior = this.runtime.typeHasPersistBehavior(type);
keep = true;
if (!hasPersistBehavior || this.layout.first_visit)
{
inst = this.runtime.createInstanceFromInit(initial_inst, this, true);
;
created_instances.push(inst);
if (inst.type.global)
keep = false;
}
if (keep)
{
this.initial_instances[k] = this.initial_instances[i];
k++;
}
}
this.initial_instances.length = k;
this.runtime.ClearDeathRow(); // flushes creation row so IIDs will be correct
if (!this.runtime.glwrap && this.effect_types.length) // no WebGL renderer and shaders used
this.blend_mode = this.effect_fallback; // use fallback blend mode
this.compositeOp = cr.effectToCompositeOp(this.blend_mode);
if (this.runtime.gl)
cr.setGLBlend(this, this.blend_mode, this.runtime.gl);
};
Layer.prototype.updateZIndices = function ()
{
if (!this.zindices_stale)
return;
var i, len;
for (i = 0, len = this.instances.length; i < len; i++)
{
;
;
this.instances[i].zindex = i;
}
this.zindices_stale = false;
};
Layer.prototype.getScale = function (include_aspect)
{
return this.getNormalScale() * (this.runtime.fullscreenScalingQuality || include_aspect ? this.runtime.aspect_scale : 1);
};
Layer.prototype.getNormalScale = function ()
{
return ((this.scale * this.layout.scale) - 1) * this.zoomRate + 1;
};
Layer.prototype.getAngle = function ()
{
if (this.disableAngle)
return 0;
return cr.clamp_angle(this.layout.angle + this.angle);
};
Layer.prototype.draw = function (ctx)
{
this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.blend_mode !== 0);
var layer_canvas = this.runtime.canvas;
var layer_ctx = ctx;
var ctx_changed = false;
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
if (this.render_offscreen)
{
if (!this.runtime.layer_canvas)
{
this.runtime.layer_canvas = document.createElement("canvas");
;
layer_canvas = this.runtime.layer_canvas;
layer_canvas.width = this.runtime.draw_width;
layer_canvas.height = this.runtime.draw_height;
this.runtime.layer_ctx = layer_canvas.getContext("2d");
;
ctx_changed = true;
}
layer_canvas = this.runtime.layer_canvas;
layer_ctx = this.runtime.layer_ctx;
if (layer_canvas.width !== this.runtime.draw_width)
{
layer_canvas.width = this.runtime.draw_width;
ctx_changed = true;
}
if (layer_canvas.height !== this.runtime.draw_height)
{
layer_canvas.height = this.runtime.draw_height;
ctx_changed = true;
}
if (ctx_changed)
{
layer_ctx["webkitImageSmoothingEnabled"] = this.runtime.linearSampling;
layer_ctx["mozImageSmoothingEnabled"] = this.runtime.linearSampling;
layer_ctx["msImageSmoothingEnabled"] = this.runtime.linearSampling;
layer_ctx["imageSmoothingEnabled"] = this.runtime.linearSampling;
}
if (this.transparent)
layer_ctx.clearRect(0, 0, this.runtime.draw_width, this.runtime.draw_height);
}
if (!this.transparent)
{
layer_ctx.fillStyle = "rgb(" + this.background_color[0] + "," + this.background_color[1] + "," + this.background_color[2] + ")";
layer_ctx.fillRect(0, 0, this.runtime.draw_width, this.runtime.draw_height);
}
layer_ctx.save();
this.disableAngle = true;
var px = this.canvasToLayer(0, 0, true, true);
var py = this.canvasToLayer(0, 0, false, true);
this.disableAngle = false;
if (this.runtime.pixel_rounding)
{
px = (px + 0.5) | 0;
py = (py + 0.5) | 0;
}
this.rotateViewport(px, py, layer_ctx);
var myscale = this.getScale();
layer_ctx.scale(myscale, myscale);
layer_ctx.translate(-px, -py);
var i, len, inst, bbox;
for (i = 0, len = this.instances.length; i < len; i++)
{
inst = this.instances[i];
if (!inst.visible || inst.width === 0 || inst.height === 0)
continue;
inst.update_bbox();
bbox = inst.bbox;
if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom)
continue;
layer_ctx.globalCompositeOperation = inst.compositeOp;
inst.draw(layer_ctx);
}
layer_ctx.restore();
if (this.render_offscreen)
{
ctx.globalCompositeOperation = this.compositeOp;
ctx.globalAlpha = this.opacity;
ctx.drawImage(layer_canvas, 0, 0);
}
};
Layer.prototype.rotateViewport = function (px, py, ctx)
{
var myscale = this.getScale();
this.viewLeft = px;
this.viewTop = py;
this.viewRight = px + (this.runtime.draw_width * (1 / myscale));
this.viewBottom = py + (this.runtime.draw_height * (1 / myscale));
var myAngle = this.getAngle();
if (myAngle !== 0)
{
if (ctx)
{
ctx.translate(this.runtime.draw_width / 2, this.runtime.draw_height / 2);
ctx.rotate(-myAngle);
ctx.translate(this.runtime.draw_width / -2, this.runtime.draw_height / -2);
}
this.tmprect.set(this.viewLeft, this.viewTop, this.viewRight, this.viewBottom);
this.tmprect.offset((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2);
this.tmpquad.set_from_rotated_rect(this.tmprect, myAngle);
this.tmpquad.bounding_box(this.tmprect);
this.tmprect.offset((this.viewLeft + this.viewRight) / 2, (this.viewTop + this.viewBottom) / 2);
this.viewLeft = this.tmprect.left;
this.viewTop = this.tmprect.top;
this.viewRight = this.tmprect.right;
this.viewBottom = this.tmprect.bottom;
}
}
Layer.prototype.drawGL = function (glw)
{
var windowWidth = this.runtime.draw_width;
var windowHeight = this.runtime.draw_height;
var shaderindex = 0;
var etindex = 0;
this.render_offscreen = (this.forceOwnTexture || this.opacity !== 1.0 || this.active_effect_types.length > 0 || this.blend_mode !== 0);
if (this.render_offscreen)
{
if (!this.runtime.layer_tex)
{
this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling);
}
if (this.runtime.layer_tex.c2width !== this.runtime.draw_width || this.runtime.layer_tex.c2height !== this.runtime.draw_height)
{
glw.deleteTexture(this.runtime.layer_tex);
this.runtime.layer_tex = glw.createEmptyTexture(this.runtime.draw_width, this.runtime.draw_height, this.runtime.linearSampling);
}
glw.setRenderingToTexture(this.runtime.layer_tex);
if (this.transparent)
glw.clear(0, 0, 0, 0);
}
if (!this.transparent)
{
glw.clear(this.background_color[0] / 255, this.background_color[1] / 255, this.background_color[2] / 255, 1);
}
this.disableAngle = true;
var px = this.canvasToLayer(0, 0, true, true);
var py = this.canvasToLayer(0, 0, false, true);
this.disableAngle = false;
if (this.runtime.pixel_rounding)
{
px = (px + 0.5) | 0;
py = (py + 0.5) | 0;
}
this.rotateViewport(px, py, null);
var myscale = this.getScale();
glw.resetModelView();
glw.scale(myscale, myscale);
glw.rotateZ(-this.getAngle());
glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2);
glw.updateModelView();
var i, len, inst, bbox;
for (i = 0, len = this.instances.length; i < len; i++)
{
inst = this.instances[i];
if (!inst.visible || inst.width === 0 || inst.height === 0)
continue;
inst.update_bbox();
bbox = inst.bbox;
if (bbox.right < this.viewLeft || bbox.bottom < this.viewTop || bbox.left > this.viewRight || bbox.top > this.viewBottom)
continue;
if (inst.uses_shaders)
{
shaderindex = inst.active_effect_types[0].shaderindex;
etindex = inst.active_effect_types[0].index;
if (inst.active_effect_types.length === 1 && !glw.programUsesCrossSampling(shaderindex) &&
!glw.programExtendsBox(shaderindex) && ((!inst.angle && !inst.layer.getAngle()) || !glw.programUsesDest(shaderindex)) &&
inst.opacity === 1 && !inst.type.plugin.must_predraw)
{
glw.switchProgram(shaderindex);
glw.setBlend(inst.srcBlend, inst.destBlend);
if (glw.programIsAnimated(shaderindex))
this.runtime.redraw = true;
var destStartX = 0, destStartY = 0, destEndX = 0, destEndY = 0;
if (glw.programUsesDest(shaderindex))
{
var bbox = inst.bbox;
var screenleft = this.layerToCanvas(bbox.left, bbox.top, true, true);
var screentop = this.layerToCanvas(bbox.left, bbox.top, false, true);
var screenright = this.layerToCanvas(bbox.right, bbox.bottom, true, true);
var screenbottom = this.layerToCanvas(bbox.right, bbox.bottom, false, true);
destStartX = screenleft / windowWidth;
destStartY = 1 - screentop / windowHeight;
destEndX = screenright / windowWidth;
destEndY = 1 - screenbottom / windowHeight;
}
glw.setProgramParameters(this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget(), // backTex
1.0 / inst.width, // pixelWidth
1.0 / inst.height, // pixelHeight
destStartX, destStartY,
destEndX, destEndY,
this.getScale(),
inst.effect_params[etindex]);
inst.drawGL(glw);
}
else
{
this.layout.renderEffectChain(glw, this, inst, this.render_offscreen ? this.runtime.layer_tex : this.layout.getRenderTarget());
glw.resetModelView();
glw.scale(myscale, myscale);
glw.rotateZ(-this.getAngle());
glw.translate((this.viewLeft + this.viewRight) / -2, (this.viewTop + this.viewBottom) / -2);
glw.updateModelView();
}
}
else
{
glw.switchProgram(0); // un-set any previously set shader
glw.setBlend(inst.srcBlend, inst.destBlend);
inst.drawGL(glw);
}
}
if (this.render_offscreen)
{
shaderindex = this.active_effect_types.length ? this.active_effect_types[0].shaderindex : 0;
etindex = this.active_effect_types.length ? this.active_effect_types[0].index : 0;
if (this.active_effect_types.length === 0 || (this.active_effect_types.length === 1 &&
!glw.programUsesCrossSampling(shaderindex) && this.opacity === 1))
{
if (this.active_effect_types.length === 1)
{
glw.switchProgram(shaderindex);
glw.setProgramParameters(this.layout.getRenderTarget(), // backTex
1.0 / this.runtime.draw_width, // pixelWidth
1.0 / this.runtime.draw_height, // pixelHeight
0.0, 0.0, // destStart
1.0, 1.0, // destEnd
this.getScale(), // layerScale
this.effect_params[etindex]); // fx parameters
if (glw.programIsAnimated(shaderindex))
this.runtime.redraw = true;
}
else
glw.switchProgram(0);
glw.setRenderingToTexture(this.layout.getRenderTarget());
glw.setOpacity(this.opacity);
glw.setTexture(this.runtime.layer_tex);
glw.setBlend(this.srcBlend, this.destBlend);
glw.resetModelView();
glw.updateModelView();
var halfw = this.runtime.draw_width / 2;
var halfh = this.runtime.draw_height / 2;
glw.quad(-halfw, halfh, halfw, halfh, halfw, -halfh, -halfw, -halfh);
glw.setTexture(null);
}
else
{
this.layout.renderEffectChain(glw, this, null, this.layout.getRenderTarget());
}
}
};
Layer.prototype.canvasToLayer = function (ptx, pty, getx, using_draw_area)
{
var multiplier = this.runtime.devicePixelRatio;
if (this.runtime.isRetina)
{
ptx *= multiplier;
pty *= multiplier;
}
var ox = this.runtime.parallax_x_origin;
var oy = this.runtime.parallax_y_origin;
var x = ((this.layout.scrollX - ox) * this.parallaxX) + ox;
var y = ((this.layout.scrollY - oy) * this.parallaxY) + oy;
var invScale = 1 / this.getScale(!using_draw_area);
if (using_draw_area)
{
x -= (this.runtime.draw_width * invScale) / 2;
y -= (this.runtime.draw_height * invScale) / 2;
}
else
{
x -= (this.runtime.width * invScale) / 2;
y -= (this.runtime.height * invScale) / 2;
}
x += ptx * invScale;
y += pty * invScale;
var a = this.getAngle();
if (a !== 0)
{
x -= this.layout.scrollX;
y -= this.layout.scrollY;
var cosa = Math.cos(a);
var sina = Math.sin(a);
var x_temp = (x * cosa) - (y * sina);
y = (y * cosa) + (x * sina);
x = x_temp;
x += this.layout.scrollX;
y += this.layout.scrollY;
}
return getx ? x : y;
};
Layer.prototype.layerToCanvas = function (ptx, pty, getx, using_draw_area)
{
var a = this.getAngle();
if (a !== 0)
{
ptx -= this.layout.scrollX;
pty -= this.layout.scrollY;
var cosa = Math.cos(-a);
var sina = Math.sin(-a);
var x_temp = (ptx * cosa) - (pty * sina);
pty = (pty * cosa) + (ptx * sina);
ptx = x_temp;
ptx += this.layout.scrollX;
pty += this.layout.scrollY;
}
var ox = this.runtime.parallax_x_origin;
var oy = this.runtime.parallax_y_origin;
var x = ((this.layout.scrollX - ox) * this.parallaxX) + ox;
var y = ((this.layout.scrollY - oy) * this.parallaxY) + oy;
var invScale = 1 / this.getScale(!using_draw_area);
if (using_draw_area)
{
x -= (this.runtime.draw_width * invScale) / 2;
y -= (this.runtime.draw_height * invScale) / 2;
}
else
{
x -= (this.runtime.width * invScale) / 2;
y -= (this.runtime.height * invScale) / 2;
}
x = (ptx - x) / invScale;
y = (pty - y) / invScale;
var multiplier = this.runtime.devicePixelRatio;
if (this.runtime.isRetina)
{
x /= multiplier;
y /= multiplier;
}
return getx ? x : y;
};
Layer.prototype.rotatePt = function (x_, y_, getx)
{
if (this.getAngle() === 0)
return getx ? x_ : y_;
var nx = this.layerToCanvas(x_, y_, true);
var ny = this.layerToCanvas(x_, y_, false);
this.disableAngle = true;
var px = this.canvasToLayer(nx, ny, true);
var py = this.canvasToLayer(nx, ny, true);
this.disableAngle = false;
return getx ? px : py;
};
Layer.prototype.saveToJSON = function ()
{
var i, len, et;
var o = {
"s": this.scale,
"a": this.angle,
"vl": this.viewLeft,
"vt": this.viewTop,
"vr": this.viewRight,
"vb": this.viewBottom,
"v": this.visible,
"bc": this.background_color,
"t": this.transparent,
"px": this.parallaxX,
"py": this.parallaxY,
"o": this.opacity,
"zr": this.zoomRate,
"fx": [],
"instances": []
};
for (i = 0, len = this.effect_types.length; i < len; i++)
{
et = this.effect_types[i];
o["fx"].push({"name": et.name, "active": et.active, "params": this.effect_params[et.index] });
}
return o;
};
function sortInstanceByZIndex(a, b)
{
return a.zindex - b.zindex;
};
Layer.prototype.loadFromJSON = function (o)
{
var i, len, p, inst, fx;
this.scale = o["s"];
this.angle = o["a"];
this.viewLeft = o["vl"];
this.viewTop = o["vt"];
this.viewRight = o["vr"];
this.viewBottom = o["vb"];
this.visible = o["v"];
this.background_color = o["bc"];
this.transparent = o["t"];
this.parallaxX = o["px"];
this.parallaxY = o["py"];
this.opacity = o["o"];
this.zoomRate = o["zr"];
var ofx = o["fx"];
for (i = 0, len = ofx.length; i < len; i++)
{
fx = this.getEffectByName(ofx[i]["name"]);
if (!fx)
continue; // must've gone missing
fx.active = ofx[i]["active"];
this.effect_params[fx.index] = ofx[i]["params"];
}
this.updateActiveEffects();
this.instances.sort(sortInstanceByZIndex);
this.zindices_stale = true;
};
cr.layer = Layer;
}());
;
(function()
{
var allUniqueSolModifiers = [];
function testSolsMatch(arr1, arr2)
{
var i, len = arr1.length;
switch (len) {
case 0:
return true;
case 1:
return arr1[0] === arr2[0];
case 2:
return arr1[0] === arr2[0] && arr1[1] === arr2[1];
default:
for (i = 0; i < len; i++)
{
if (arr1[i] !== arr2[i])
return false;
}
return true;
}
};
function solArraySorter(t1, t2)
{
return t1.index - t2.index;
};
function findMatchingSolModifier(arr)
{
var i, len, u, temp, subarr;
if (arr.length === 2)
{
if (arr[0].index > arr[1].index)
{
temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
}
else if (arr.length > 2)
arr.sort(solArraySorter); // so testSolsMatch compares in same order
if (arr.length >= allUniqueSolModifiers.length)
allUniqueSolModifiers.length = arr.length + 1;
if (!allUniqueSolModifiers[arr.length])
allUniqueSolModifiers[arr.length] = [];
subarr = allUniqueSolModifiers[arr.length];
for (i = 0, len = subarr.length; i < len; i++)
{
u = subarr[i];
if (testSolsMatch(arr, u))
return u;
}
subarr.push(arr);
return arr;
};
function EventSheet(runtime, m)
{
this.runtime = runtime;
this.triggers = {};
this.fasttriggers = {};
this.hasRun = false;
this.includes = new cr.ObjectSet(); // all event sheets included by this sheet, at first-level indirection only
this.name = m[0];
var em = m[1]; // events model
this.events = []; // triggers won't make it to this array
var i, len;
for (i = 0, len = em.length; i < len; i++)
this.init_event(em[i], null, this.events);
};
EventSheet.prototype.toString = function ()
{
return this.name;
};
EventSheet.prototype.init_event = function (m, parent, nontriggers)
{
switch (m[0]) {
case 0: // event block
{
var block = new cr.eventblock(this, parent, m);
cr.seal(block);
if (block.orblock)
{
nontriggers.push(block);
var i, len;
for (i = 0, len = block.conditions.length; i < len; i++)
{
if (block.conditions[i].trigger)
this.init_trigger(block, i);
}
}
else
{
if (block.is_trigger())
this.init_trigger(block, 0);
else
nontriggers.push(block);
}
break;
}
case 1: // variable
{
var v = new cr.eventvariable(this, parent, m);
cr.seal(v);
nontriggers.push(v);
break;
}
case 2: // include
{
var inc = new cr.eventinclude(this, parent, m);
cr.seal(inc);
nontriggers.push(inc);
break;
}
default:
;
}
};
EventSheet.prototype.postInit = function ()
{
var i, len;
for (i = 0, len = this.events.length; i < len; i++)
{
this.events[i].postInit(i < len - 1 && this.events[i + 1].is_else_block);
}
};
EventSheet.prototype.run = function (from_include)
{
if (!this.runtime.resuming_breakpoint)
{
this.hasRun = true;
if (!from_include)
this.runtime.isRunningEvents = true;
}
var i, len;
for (i = 0, len = this.events.length; i < len; i++)
{
var ev = this.events[i];
ev.run();
this.runtime.clearSol(ev.solModifiers);
if (!this.runtime.deathRow.isEmpty() || this.runtime.createRow.length)
this.runtime.ClearDeathRow();
}
if (!from_include)
this.runtime.isRunningEvents = false;
};
EventSheet.prototype.init_trigger = function (trig, index)
{
if (!trig.orblock)
this.runtime.triggers_to_postinit.push(trig); // needs to be postInit'd later
var i, len;
var cnd = trig.conditions[index];
var type_name;
if (cnd.type)
type_name = cnd.type.name;
else
type_name = "system";
var fasttrigger = cnd.fasttrigger;
var triggers = (fasttrigger ? this.fasttriggers : this.triggers);
if (!triggers[type_name])
triggers[type_name] = [];
var obj_entry = triggers[type_name];
var method = cnd.func;
if (fasttrigger)
{
if (!cnd.parameters.length) // no parameters
return;
var firstparam = cnd.parameters[0];
if (firstparam.type !== 1 || // not a string param
firstparam.expression.type !== 2) // not a string literal node
{
return;
}
var fastevs;
var firstvalue = firstparam.expression.value.toLowerCase();
var i, len;
for (i = 0, len = obj_entry.length; i < len; i++)
{
if (obj_entry[i].method == method)
{
fastevs = obj_entry[i].evs;
if (!fastevs[firstvalue])
fastevs[firstvalue] = [[trig, index]];
else
fastevs[firstvalue].push([trig, index]);
return;
}
}
fastevs = {};
fastevs[firstvalue] = [[trig, index]];
obj_entry.push({ method: method, evs: fastevs });
}
else
{
for (i = 0, len = obj_entry.length; i < len; i++)
{
if (obj_entry[i].method == method)
{
obj_entry[i].evs.push([trig, index]);
return;
}
}
obj_entry.push({ method: method, evs: [[trig, index]]});
}
};
cr.eventsheet = EventSheet;
function Selection(type)
{
this.type = type;
this.instances = []; // subset of picked instances
this.else_instances = []; // subset of unpicked instances
this.select_all = true;
};
Selection.prototype.hasObjects = function ()
{
if (this.select_all)
return this.type.instances.length;
else
return this.instances.length;
};
Selection.prototype.getObjects = function ()
{
if (this.select_all)
return this.type.instances;
else
return this.instances;
};
/*
Selection.prototype.ensure_picked = function (inst, skip_siblings)
{
var i, len;
var orblock = inst.runtime.getCurrentEventStack().current_event.orblock;
if (this.select_all)
{
this.select_all = false;
if (orblock)
{
cr.shallowAssignArray(this.else_instances, inst.type.instances);
cr.arrayFindRemove(this.else_instances, inst);
}
this.instances.length = 1;
this.instances[0] = inst;
}
else
{
if (orblock)
{
i = this.else_instances.indexOf(inst);
if (i !== -1)
{
this.instances.push(this.else_instances[i]);
this.else_instances.splice(i, 1);
}
}
else
{
if (this.instances.indexOf(inst) === -1)
this.instances.push(inst);
}
}
if (!skip_siblings)
{
}
};
*/
Selection.prototype.pick_one = function (inst)
{
if (!inst)
return;
if (inst.runtime.getCurrentEventStack().current_event.orblock)
{
if (this.select_all)
{
this.instances.length = 0;
cr.shallowAssignArray(this.else_instances, inst.type.instances);
this.select_all = false;
}
var i = this.else_instances.indexOf(inst);
if (i !== -1)
{
this.instances.push(this.else_instances[i]);
this.else_instances.splice(i, 1);
}
}
else
{
this.select_all = false;
this.instances.length = 1;
this.instances[0] = inst;
}
};
cr.selection = Selection;
function EventBlock(sheet, parent, m)
{
this.sheet = sheet;
this.parent = parent;
this.runtime = sheet.runtime;
this.solModifiers = [];
this.solModifiersIncludingParents = [];
this.solWriterAfterCnds = false; // block does not change SOL after running its conditions
this.group = false; // is group of events
this.initially_activated = false; // if a group, is active on startup
this.toplevelevent = false; // is an event block parented only by a top-level group
this.toplevelgroup = false; // is parented only by other groups or is top-level (i.e. not in a subevent)
this.has_else_block = false; // is followed by else
;
this.conditions = [];
this.actions = [];
this.subevents = [];
if (m[1])
{
this.group_name = m[1][1].toLowerCase();
this.group = true;
this.initially_activated = !!m[1][0];
this.runtime.allGroups.push(this);
this.runtime.activeGroups[(/*this.sheet.name + "|" + */this.group_name).toLowerCase()] = this.initially_activated;
}
else
{
this.group_name = "";
this.group = false;
this.initially_activated = false;
}
this.orblock = m[2];
this.sid = m[4];
if (!this.group)
this.runtime.blocksBySid[this.sid.toString()] = this;
var i, len;
var cm = m[5];
for (i = 0, len = cm.length; i < len; i++)
{
var cnd = new cr.condition(this, cm[i]);
cnd.index = i;
cr.seal(cnd);
this.conditions.push(cnd);
/*
if (cnd.is_logical())
this.is_logical = true;
if (cnd.type && !cnd.type.plugin.singleglobal && this.cndReferences.indexOf(cnd.type) === -1)
this.cndReferences.push(cnd.type);
*/
this.addSolModifier(cnd.type);
}
var am = m[6];
for (i = 0, len = am.length; i < len; i++)
{
var act = new cr.action(this, am[i]);
act.index = i;
cr.seal(act);
this.actions.push(act);
}
if (m.length === 8)
{
var em = m[7];
for (i = 0, len = em.length; i < len; i++)
this.sheet.init_event(em[i], this, this.subevents);
}
this.is_else_block = false;
if (this.conditions.length)
{
this.is_else_block = (this.conditions[0].type == null && this.conditions[0].func == cr.system_object.prototype.cnds.Else);
}
};
window["_c2hh_"] = "F533BB604F96E4A6B4B30D486C8927B0F6D1925D";
EventBlock.prototype.postInit = function (hasElse/*, prevBlock_*/)
{
var i, len;
var p = this.parent;
if (this.group)
{
this.toplevelgroup = true;
while (p)
{
if (!p.group)
{
this.toplevelgroup = false;
break;
}
p = p.parent;
}
}
this.toplevelevent = !this.is_trigger() && (!this.parent || (this.parent.group && this.parent.toplevelgroup));
this.has_else_block = !!hasElse;
this.solModifiersIncludingParents = this.solModifiers.slice(0);
p = this.parent;
while (p)
{
for (i = 0, len = p.solModifiers.length; i < len; i++)
this.addParentSolModifier(p.solModifiers[i]);
p = p.parent;
}
this.solModifiers = findMatchingSolModifier(this.solModifiers);
this.solModifiersIncludingParents = findMatchingSolModifier(this.solModifiersIncludingParents);
var i, len/*, s*/;
for (i = 0, len = this.conditions.length; i < len; i++)
this.conditions[i].postInit();
for (i = 0, len = this.actions.length; i < len; i++)
this.actions[i].postInit();
for (i = 0, len = this.subevents.length; i < len; i++)
{
this.subevents[i].postInit(i < len - 1 && this.subevents[i + 1].is_else_block);
}
/*
if (this.is_else_block && this.prev_block)
{
for (i = 0, len = this.prev_block.solModifiers.length; i < len; i++)
{
s = this.prev_block.solModifiers[i];
if (this.solModifiers.indexOf(s) === -1)
this.solModifiers.push(s);
}
}
*/
}
function addSolModifierToList(type, arr)
{
var i, len, t;
if (!type)
return;
if (arr.indexOf(type) === -1)
arr.push(type);
if (type.is_contained)
{
for (i = 0, len = type.container.length; i < len; i++)
{
t = type.container[i];
if (type === t)
continue; // already handled
if (arr.indexOf(t) === -1)
arr.push(t);
}
}
};
EventBlock.prototype.addSolModifier = function (type)
{
addSolModifierToList(type, this.solModifiers);
};
EventBlock.prototype.addParentSolModifier = function (type)
{
addSolModifierToList(type, this.solModifiersIncludingParents);
};
EventBlock.prototype.setSolWriterAfterCnds = function ()
{
this.solWriterAfterCnds = true;
if (this.parent)
this.parent.setSolWriterAfterCnds();
};
EventBlock.prototype.is_trigger = function ()
{
if (!this.conditions.length) // no conditions
return false;
else
return this.conditions[0].trigger;
};
EventBlock.prototype.run = function ()
{
var i, len, any_true = false, cnd_result;
var evinfo = this.runtime.getCurrentEventStack();
evinfo.current_event = this;
if (!this.is_else_block)
evinfo.else_branch_ran = false;
if (this.orblock)
{
if (this.conditions.length === 0)
any_true = true; // be sure to run if empty block
evinfo.cndindex = 0
for (len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++)
{
if (this.conditions[evinfo.cndindex].trigger) // skip triggers when running OR block
continue;
cnd_result = this.conditions[evinfo.cndindex].run();
if (cnd_result) // make sure all conditions run and run if any were true
any_true = true;
}
evinfo.last_event_true = any_true;
if (any_true)
this.run_actions_and_subevents();
}
else
{
evinfo.cndindex = 0
for (len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++)
{
cnd_result = this.conditions[evinfo.cndindex].run();
if (!cnd_result) // condition failed
{
evinfo.last_event_true = false;
if (this.toplevelevent && (!this.runtime.deathRow.isEmpty() || this.runtime.createRow.length))
this.runtime.ClearDeathRow();
return; // bail out now
}
}
evinfo.last_event_true = true;
this.run_actions_and_subevents();
}
this.end_run(evinfo);
};
EventBlock.prototype.end_run = function (evinfo)
{
if (evinfo.last_event_true && this.has_else_block)
evinfo.else_branch_ran = true;
if (this.toplevelevent && (!this.runtime.deathRow.isEmpty() || this.runtime.createRow.length))
this.runtime.ClearDeathRow();
};
EventBlock.prototype.run_orblocktrigger = function (index)
{
var evinfo = this.runtime.getCurrentEventStack();
evinfo.current_event = this;
if (this.conditions[index].run())
{
this.run_actions_and_subevents();
this.runtime.getCurrentEventStack().last_event_true = true;
}
};
EventBlock.prototype.run_actions_and_subevents = function ()
{
var evinfo = this.runtime.getCurrentEventStack();
var len;
for (evinfo.actindex = 0, len = this.actions.length; evinfo.actindex < len; evinfo.actindex++)
{
if (this.actions[evinfo.actindex].run())
return;
}
this.run_subevents();
};
EventBlock.prototype.resume_actions_and_subevents = function ()
{
var evinfo = this.runtime.getCurrentEventStack();
var len;
for (len = this.actions.length; evinfo.actindex < len; evinfo.actindex++)
{
if (this.actions[evinfo.actindex].run())
return;
}
this.run_subevents();
};
EventBlock.prototype.run_subevents = function ()
{
if (!this.subevents.length)
return;
var i, len, subev, pushpop/*, skipped_pop = false, pop_modifiers = null*/;
var last = this.subevents.length - 1;
this.runtime.pushEventStack(this);
if (this.solWriterAfterCnds)
{
for (i = 0, len = this.subevents.length; i < len; i++)
{
subev = this.subevents[i];
pushpop = (!this.toplevelgroup || (!this.group && i < last));
if (pushpop)
this.runtime.pushCopySol(subev.solModifiers);
subev.run();
if (pushpop)
this.runtime.popSol(subev.solModifiers);
else
this.runtime.clearSol(subev.solModifiers);
}
}
else
{
for (i = 0, len = this.subevents.length; i < len; i++)
{
this.subevents[i].run();
}
}
this.runtime.popEventStack();
};
EventBlock.prototype.run_pretrigger = function ()
{
var evinfo = this.runtime.getCurrentEventStack();
evinfo.current_event = this;
var any_true = false;
var i, len;
for (evinfo.cndindex = 0, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++)
{
;
if (this.conditions[evinfo.cndindex].run())
any_true = true;
else if (!this.orblock) // condition failed (let OR blocks run all conditions anyway)
return false; // bail out
}
return this.orblock ? any_true : true;
};
EventBlock.prototype.retrigger = function ()
{
this.runtime.execcount++;
var prevcndindex = this.runtime.getCurrentEventStack().cndindex;
var len;
var evinfo = this.runtime.pushEventStack(this);
if (!this.orblock)
{
for (evinfo.cndindex = prevcndindex + 1, len = this.conditions.length; evinfo.cndindex < len; evinfo.cndindex++)
{
if (!this.conditions[evinfo.cndindex].run()) // condition failed
{
this.runtime.popEventStack(); // moving up level of recursion
return false; // bail out
}
}
}
this.run_actions_and_subevents();
this.runtime.popEventStack();
return true; // ran an iteration
};
EventBlock.prototype.isFirstConditionOfType = function (cnd)
{
var cndindex = cnd.index;
if (cndindex === 0)
return true;
--cndindex;
for ( ; cndindex >= 0; --cndindex)
{
if (this.conditions[cndindex].type === cnd.type)
return false;
}
return true;
};
cr.eventblock = EventBlock;
function Condition(block, m)
{
this.block = block;
this.sheet = block.sheet;
this.runtime = block.runtime;
this.parameters = [];
this.results = [];
this.extra = {}; // for plugins to stow away some custom info
this.index = -1;
this.func = m[1];
;
this.trigger = (m[3] > 0);
this.fasttrigger = (m[3] === 2);
this.looping = m[4];
this.inverted = m[5];
this.isstatic = m[6];
this.sid = m[7];
this.runtime.cndsBySid[this.sid.toString()] = this;
if (m[0] === -1) // system object
{
this.type = null;
this.run = this.run_system;
this.behaviortype = null;
this.beh_index = -1;
}
else
{
this.type = this.runtime.types_by_index[m[0]];
;
if (this.isstatic)
this.run = this.run_static;
else
this.run = this.run_object;
if (m[2])
{
this.behaviortype = this.type.getBehaviorByName(m[2]);
;
this.beh_index = this.type.getBehaviorIndexByName(m[2]);
;
}
else
{
this.behaviortype = null;
this.beh_index = -1;
}
if (this.block.parent)
this.block.parent.setSolWriterAfterCnds();
}
if (this.fasttrigger)
this.run = this.run_true;
if (m.length === 10)
{
var i, len;
var em = m[9];
for (i = 0, len = em.length; i < len; i++)
{
var param = new cr.parameter(this, em[i]);
cr.seal(param);
this.parameters.push(param);
}
this.results.length = em.length;
}
};
Condition.prototype.postInit = function ()
{
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
this.parameters[i].postInit();
};
/*
Condition.prototype.is_logical = function ()
{
return !this.type || this.type.plugin.singleglobal;
};
*/
Condition.prototype.run_true = function ()
{
return true;
};
Condition.prototype.run_system = function ()
{
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
this.results[i] = this.parameters[i].get();
return cr.xor(this.func.apply(this.runtime.system, this.results), this.inverted);
};
Condition.prototype.run_static = function ()
{
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
this.results[i] = this.parameters[i].get(i);
var ret = this.func.apply(this.behaviortype ? this.behaviortype : this.type, this.results);
this.type.applySolToContainer();
return ret;
};
Condition.prototype.run_object = function ()
{
var i, j, leni, lenj, ret, met, inst, s, sol2;
var sol = this.type.getCurrentSol();
var is_orblock = this.block.orblock && !this.trigger; // triggers in OR blocks need to work normally
var offset = 0;
var is_contained = this.type.is_contained;
if (sol.select_all) {
sol.instances.length = 0; // clear contents
sol.else_instances.length = 0;
for (i = 0, leni = this.type.instances.length; i < leni; i++)
{
inst = this.type.instances[i];
;
for (j = 0, lenj = this.parameters.length; j < lenj; j++)
this.results[j] = this.parameters[j].get(i); // default SOL index is current object
if (this.beh_index > -1)
{
if (this.type.is_family)
{
offset = inst.type.family_beh_map[this.type.family_index];
}
ret = this.func.apply(inst.behavior_insts[this.beh_index + offset], this.results);
}
else
ret = this.func.apply(inst, this.results);
met = cr.xor(ret, this.inverted);
if (met)
sol.instances.push(inst);
else if (is_orblock) // in OR blocks, keep the instances not meeting the condition for subsequent testing
sol.else_instances.push(inst);
}
if (this.type.finish)
this.type.finish(true);
sol.select_all = false;
this.type.applySolToContainer();
return sol.hasObjects();
}
else {
var k = 0;
var using_else_instances = (is_orblock && !this.block.isFirstConditionOfType(this));
var arr = (using_else_instances ? sol.else_instances : sol.instances);
var any_true = false;
for (i = 0, leni = arr.length; i < leni; i++)
{
inst = arr[i];
;
for (j = 0, lenj = this.parameters.length; j < lenj; j++)
this.results[j] = this.parameters[j].get(i); // default SOL index is current object
if (this.beh_index > -1)
{
if (this.type.is_family)
{
offset = inst.type.family_beh_map[this.type.family_index];
}
ret = this.func.apply(inst.behavior_insts[this.beh_index + offset], this.results);
}
else
ret = this.func.apply(inst, this.results);
if (cr.xor(ret, this.inverted))
{
any_true = true;
if (using_else_instances)
{
sol.instances.push(inst);
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
s.type.getCurrentSol().instances.push(s);
}
}
}
else
{
arr[k] = inst;
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
s.type.getCurrentSol().instances[k] = s;
}
}
k++;
}
}
else
{
if (using_else_instances)
{
arr[k] = inst;
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
s.type.getCurrentSol().else_instances[k] = s;
}
}
k++;
}
else if (is_orblock)
{
sol.else_instances.push(inst);
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
s.type.getCurrentSol().else_instances.push(s);
}
}
}
}
}
arr.length = k;
if (is_contained)
{
for (i = 0, leni = this.type.container.length; i < leni; i++)
{
sol2 = this.type.container[i].getCurrentSol();
if (using_else_instances)
sol2.else_instances.length = k;
else
sol2.instances.length = k;
}
}
var pick_in_finish = any_true; // don't pick in finish() if we're only doing the logic test below
if (using_else_instances && !any_true)
{
for (i = 0, leni = sol.instances.length; i < leni; i++)
{
inst = sol.instances[i];
for (j = 0, lenj = this.parameters.length; j < lenj; j++)
this.results[j] = this.parameters[j].get(i);
if (this.beh_index > -1)
ret = this.func.apply(inst.behavior_insts[this.beh_index], this.results);
else
ret = this.func.apply(inst, this.results);
if (cr.xor(ret, this.inverted))
{
any_true = true;
break; // got our flag, don't need to test any more
}
}
}
if (this.type.finish)
this.type.finish(pick_in_finish || is_orblock);
return is_orblock ? any_true : sol.hasObjects();
}
};
cr.condition = Condition;
function Action(block, m)
{
this.block = block;
this.sheet = block.sheet;
this.runtime = block.runtime;
this.parameters = [];
this.results = [];
this.extra = {}; // for plugins to stow away some custom info
this.index = -1;
this.func = m[1];
;
if (m[0] === -1) // system
{
this.type = null;
this.run = this.run_system;
this.behaviortype = null;
this.beh_index = -1;
}
else
{
this.type = this.runtime.types_by_index[m[0]];
;
this.run = this.run_object;
if (m[2])
{
this.behaviortype = this.type.getBehaviorByName(m[2]);
;
this.beh_index = this.type.getBehaviorIndexByName(m[2]);
;
}
else
{
this.behaviortype = null;
this.beh_index = -1;
}
}
this.sid = m[3];
this.runtime.actsBySid[this.sid.toString()] = this;
if (m.length === 6)
{
var i, len;
var em = m[5];
for (i = 0, len = em.length; i < len; i++)
{
var param = new cr.parameter(this, em[i]);
cr.seal(param);
this.parameters.push(param);
}
this.results.length = em.length;
}
};
Action.prototype.postInit = function ()
{
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
this.parameters[i].postInit();
};
Action.prototype.run_system = function ()
{
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
this.results[i] = this.parameters[i].get();
return this.func.apply(this.runtime.system, this.results);
};
Action.prototype.run_object = function ()
{
var instances = this.type.getCurrentSol().getObjects();
var i, j, leni, lenj, inst;
for (i = 0, leni = instances.length; i < leni; i++)
{
inst = instances[i];
for (j = 0, lenj = this.parameters.length; j < lenj; j++)
this.results[j] = this.parameters[j].get(i); // pass i to use as default SOL index
if (this.beh_index > -1)
{
var offset = 0;
if (this.type.is_family)
{
offset = inst.type.family_beh_map[this.type.family_index];
}
this.func.apply(inst.behavior_insts[this.beh_index + offset], this.results);
}
else
this.func.apply(inst, this.results);
}
return false;
};
cr.action = Action;
var tempValues = [];
var tempValuesPtr = -1;
function Parameter(owner, m)
{
this.owner = owner;
this.block = owner.block;
this.sheet = owner.sheet;
this.runtime = owner.runtime;
this.type = m[0];
this.expression = null;
this.solindex = 0;
this.combosel = 0;
this.layout = null;
this.key = 0;
this.object = null;
this.index = 0;
this.varname = null;
this.eventvar = null;
this.fileinfo = null;
this.subparams = null;
this.variadicret = null;
var i, len, param;
switch (m[0])
{
case 0: // number
case 7: // any
this.expression = new cr.expNode(this, m[1]);
this.solindex = 0;
this.get = this.get_exp;
break;
case 1: // string
this.expression = new cr.expNode(this, m[1]);
this.solindex = 0;
this.get = this.get_exp_str;
break;
case 5: // layer
this.expression = new cr.expNode(this, m[1]);
this.solindex = 0;
this.get = this.get_layer;
break;
case 3: // combo
case 8: // cmp
this.combosel = m[1];
this.get = this.get_combosel;
break;
case 6: // layout
this.layout = this.runtime.layouts[m[1]];
;
this.get = this.get_layout;
break;
case 9: // keyb
this.key = m[1];
this.get = this.get_key;
break;
case 4: // object
this.object = this.runtime.types_by_index[m[1]];
;
this.get = this.get_object;
this.block.addSolModifier(this.object);
if (this.owner instanceof cr.action)
this.block.setSolWriterAfterCnds();
else if (this.block.parent)
this.block.parent.setSolWriterAfterCnds();
break;
case 10: // instvar
this.index = m[1];
if (owner.type.is_family)
this.get = this.get_familyvar;
else
this.get = this.get_instvar;
break;
case 11: // eventvar
this.varname = m[1];
this.eventvar = null;
this.get = this.get_eventvar;
break;
case 2: // audiofile ["name", ismusic]
case 12: // fileinfo "name"
this.fileinfo = m[1];
this.get = this.get_audiofile;
break;
case 13: // variadic
this.get = this.get_variadic;
this.subparams = [];
this.variadicret = [];
for (i = 1, len = m.length; i < len; i++)
{
param = new cr.parameter(this.owner, m[i]);
cr.seal(param);
this.subparams.push(param);
this.variadicret.push(0);
}
break;
default:
;
}
};
Parameter.prototype.postInit = function ()
{
var i, len;
if (this.type === 11) // eventvar
{
this.eventvar = this.runtime.getEventVariableByName(this.varname, this.block.parent);
;
}
else if (this.type === 13) // variadic, postInit all sub-params
{
for (i = 0, len = this.subparams.length; i < len; i++)
this.subparams[i].postInit();
}
if (this.expression)
this.expression.postInit();
};
Parameter.prototype.pushTempValue = function ()
{
tempValuesPtr++;
if (tempValues.length === tempValuesPtr)
tempValues.push(new cr.expvalue());
return tempValues[tempValuesPtr];
};
Parameter.prototype.popTempValue = function ()
{
tempValuesPtr--;
};
Parameter.prototype.get_exp = function (solindex)
{
this.solindex = solindex || 0; // default SOL index to use
var temp = this.pushTempValue();
this.expression.get(temp);
this.popTempValue();
return temp.data; // return actual JS value, not expvalue
};
Parameter.prototype.get_exp_str = function (solindex)
{
this.solindex = solindex || 0; // default SOL index to use
var temp = this.pushTempValue();
this.expression.get(temp);
this.popTempValue();
if (cr.is_string(temp.data))
return temp.data;
else
return "";
};
Parameter.prototype.get_object = function ()
{
return this.object;
};
Parameter.prototype.get_combosel = function ()
{
return this.combosel;
};
Parameter.prototype.get_layer = function (solindex)
{
this.solindex = solindex || 0; // default SOL index to use
var temp = this.pushTempValue();
this.expression.get(temp);
this.popTempValue();
if (temp.is_number())
return this.runtime.getLayerByNumber(temp.data);
else
return this.runtime.getLayerByName(temp.data);
}
Parameter.prototype.get_layout = function ()
{
return this.layout;
};
Parameter.prototype.get_key = function ()
{
return this.key;
};
Parameter.prototype.get_instvar = function ()
{
return this.index;
};
Parameter.prototype.get_familyvar = function (solindex)
{
var familytype = this.owner.type;
var realtype = null;
var sol = familytype.getCurrentSol();
var objs = sol.getObjects();
if (objs.length)
realtype = objs[solindex % objs.length].type;
else
{
;
realtype = sol.else_instances[solindex % sol.else_instances.length].type;
}
return this.index + realtype.family_var_map[familytype.family_index];
};
Parameter.prototype.get_eventvar = function ()
{
return this.eventvar;
};
Parameter.prototype.get_audiofile = function ()
{
return this.fileinfo;
};
Parameter.prototype.get_variadic = function ()
{
var i, len;
for (i = 0, len = this.subparams.length; i < len; i++)
{
this.variadicret[i] = this.subparams[i].get();
}
return this.variadicret;
};
cr.parameter = Parameter;
function EventVariable(sheet, parent, m)
{
this.sheet = sheet;
this.parent = parent;
this.runtime = sheet.runtime;
this.solModifiers = [];
this.name = m[1];
this.vartype = m[2];
this.initial = m[3];
this.is_static = !!m[4];
this.is_constant = !!m[5];
this.sid = m[6];
this.runtime.varsBySid[this.sid.toString()] = this;
this.data = this.initial; // note: also stored in event stack frame for local nonstatic nonconst vars
if (this.parent) // local var
{
if (this.is_static || this.is_constant)
this.localIndex = -1;
else
this.localIndex = this.runtime.stackLocalCount++;
this.runtime.all_local_vars.push(this);
}
else // global var
{
this.localIndex = -1;
this.runtime.all_global_vars.push(this);
}
};
EventVariable.prototype.postInit = function ()
{
this.solModifiers = findMatchingSolModifier(this.solModifiers);
};
EventVariable.prototype.setValue = function (x)
{
;
var lvs = this.runtime.getCurrentLocalVarStack();
if (!this.parent || this.is_static || !lvs)
this.data = x;
else // local nonstatic variable: use event stack to keep value at this level of recursion
{
if (this.localIndex >= lvs.length)
lvs.length = this.localIndex + 1;
lvs[this.localIndex] = x;
}
};
EventVariable.prototype.getValue = function ()
{
var lvs = this.runtime.getCurrentLocalVarStack();
if (!this.parent || this.is_static || !lvs || this.is_constant)
return this.data;
else // local nonstatic variable
{
if (this.localIndex >= lvs.length)
{
;
return this.initial;
}
if (typeof lvs[this.localIndex] === "undefined")
{
;
return this.initial;
}
return lvs[this.localIndex];
}
};
EventVariable.prototype.run = function ()
{
if (this.parent && !this.is_static && !this.is_constant)
this.setValue(this.initial);
};
cr.eventvariable = EventVariable;
function EventInclude(sheet, parent, m)
{
this.sheet = sheet;
this.parent = parent;
this.runtime = sheet.runtime;
this.solModifiers = [];
this.include_sheet = null; // determined in postInit
this.include_sheet_name = m[1];
};
EventInclude.prototype.toString = function ()
{
return "include:" + this.include_sheet.toString();
};
EventInclude.prototype.postInit = function ()
{
this.include_sheet = this.runtime.eventsheets[this.include_sheet_name];
;
;
this.sheet.includes.add(this);
this.solModifiers = findMatchingSolModifier(this.solModifiers);
};
EventInclude.prototype.run = function ()
{
if (this.parent)
this.runtime.pushCleanSol(this.runtime.types_by_index);
if (!this.include_sheet.hasRun)
this.include_sheet.run(true); // from include
if (this.parent)
this.runtime.popSol(this.runtime.types_by_index);
};
EventInclude.prototype.isActive = function ()
{
var p = this.parent;
while (p)
{
if (p.group)
{
if (!this.runtime.activeGroups[p.group_name.toLowerCase()])
return false;
}
p = p.parent;
}
return true;
};
cr.eventinclude = EventInclude;
function EventStackFrame()
{
this.temp_parents_arr = [];
this.reset(null);
cr.seal(this);
};
EventStackFrame.prototype.reset = function (cur_event)
{
this.current_event = cur_event;
this.cndindex = 0;
this.actindex = 0;
this.temp_parents_arr.length = 0;
this.last_event_true = false;
this.else_branch_ran = false;
this.any_true_state = false;
};
EventStackFrame.prototype.isModifierAfterCnds = function ()
{
if (this.current_event.solWriterAfterCnds)
return true;
if (this.cndindex < this.current_event.conditions.length - 1)
return !!this.current_event.solModifiers.length;
return false;
};
cr.eventStackFrame = EventStackFrame;
}());
(function()
{
function ExpNode(owner_, m)
{
this.owner = owner_;
this.runtime = owner_.runtime;
this.type = m[0];
;
this.get = [this.eval_int,
this.eval_float,
this.eval_string,
this.eval_unaryminus,
this.eval_add,
this.eval_subtract,
this.eval_multiply,
this.eval_divide,
this.eval_mod,
this.eval_power,
this.eval_and,
this.eval_or,
this.eval_equal,
this.eval_notequal,
this.eval_less,
this.eval_lessequal,
this.eval_greater,
this.eval_greaterequal,
this.eval_conditional,
this.eval_system_exp,
this.eval_object_behavior_exp,
this.eval_instvar_exp,
this.eval_object_behavior_exp,
this.eval_eventvar_exp][this.type];
var paramsModel = null;
this.value = null;
this.first = null;
this.second = null;
this.third = null;
this.func = null;
this.results = null;
this.parameters = null;
this.object_type = null;
this.beh_index = -1;
this.instance_expr = null;
this.varindex = -1;
this.behavior_type = null;
this.varname = null;
this.eventvar = null;
this.return_string = false;
switch (this.type) {
case 0: // int
case 1: // float
case 2: // string
this.value = m[1];
break;
case 3: // unaryminus
this.first = new cr.expNode(owner_, m[1]);
break;
case 18: // conditional
this.first = new cr.expNode(owner_, m[1]);
this.second = new cr.expNode(owner_, m[2]);
this.third = new cr.expNode(owner_, m[3]);
break;
case 19: // system_exp
this.func = m[1];
;
this.results = [];
this.parameters = [];
if (m.length === 3)
{
paramsModel = m[2];
this.results.length = paramsModel.length + 1; // must also fit 'ret'
}
else
this.results.length = 1; // to fit 'ret'
break;
case 20: // object_exp
this.object_type = this.runtime.types_by_index[m[1]];
;
this.beh_index = -1;
this.func = m[2];
this.return_string = m[3];
if (m[4])
this.instance_expr = new cr.expNode(owner_, m[4]);
else
this.instance_expr = null;
this.results = [];
this.parameters = [];
if (m.length === 6)
{
paramsModel = m[5];
this.results.length = paramsModel.length + 1;
}
else
this.results.length = 1; // to fit 'ret'
break;
case 21: // instvar_exp
this.object_type = this.runtime.types_by_index[m[1]];
;
this.return_string = m[2];
if (m[3])
this.instance_expr = new cr.expNode(owner_, m[3]);
else
this.instance_expr = null;
this.varindex = m[4];
break;
case 22: // behavior_exp
this.object_type = this.runtime.types_by_index[m[1]];
;
this.behavior_type = this.object_type.getBehaviorByName(m[2]);
;
this.beh_index = this.object_type.getBehaviorIndexByName(m[2]);
this.func = m[3];
this.return_string = m[4];
if (m[5])
this.instance_expr = new cr.expNode(owner_, m[5]);
else
this.instance_expr = null;
this.results = [];
this.parameters = [];
if (m.length === 7)
{
paramsModel = m[6];
this.results.length = paramsModel.length + 1;
}
else
this.results.length = 1; // to fit 'ret'
break;
case 23: // eventvar_exp
this.varname = m[1];
this.eventvar = null; // assigned in postInit
break;
}
if (this.type >= 4 && this.type <= 17)
{
this.first = new cr.expNode(owner_, m[1]);
this.second = new cr.expNode(owner_, m[2]);
}
if (paramsModel)
{
var i, len;
for (i = 0, len = paramsModel.length; i < len; i++)
this.parameters.push(new cr.expNode(owner_, paramsModel[i]));
}
cr.seal(this);
};
ExpNode.prototype.postInit = function ()
{
if (this.type === 23) // eventvar_exp
{
this.eventvar = this.owner.runtime.getEventVariableByName(this.varname, this.owner.block.parent);
;
}
if (this.first)
this.first.postInit();
if (this.second)
this.second.postInit();
if (this.third)
this.third.postInit();
if (this.instance_expr)
this.instance_expr.postInit();
if (this.parameters)
{
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
this.parameters[i].postInit();
}
};
ExpNode.prototype.eval_system_exp = function (ret)
{
this.results[0] = ret;
var temp = this.owner.pushTempValue();
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++)
{
this.parameters[i].get(temp);
this.results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue
}
this.owner.popTempValue();
this.func.apply(this.runtime.system, this.results);
};
ExpNode.prototype.eval_object_behavior_exp = function (ret)
{
var sol = this.object_type.getCurrentSol();
var instances = sol.getObjects();
if (!instances.length)
{
if (sol.else_instances.length)
instances = sol.else_instances;
else
{
if (this.return_string)
ret.set_string("");
else
ret.set_int(0);
return;
}
}
this.results[0] = ret;
ret.object_class = this.object_type; // so expression can access family type if need be
var temp = this.owner.pushTempValue();
var i, len;
for (i = 0, len = this.parameters.length; i < len; i++) {
this.parameters[i].get(temp);
this.results[i + 1] = temp.data; // passing actual javascript value as argument instead of expvalue
}
var index = this.owner.solindex;
if (this.instance_expr) {
this.instance_expr.get(temp);
if (temp.is_number()) {
index = temp.data;
instances = this.object_type.instances; // pick from all instances, not SOL
}
}
this.owner.popTempValue();
index %= instances.length; // wraparound
if (index < 0)
index += instances.length;
var returned_val;
var inst = instances[index];
if (this.beh_index > -1)
{
var offset = 0;
if (this.object_type.is_family)
{
offset = inst.type.family_beh_map[this.object_type.family_index];
}
returned_val = this.func.apply(inst.behavior_insts[this.beh_index + offset], this.results);
}
else
returned_val = this.func.apply(inst, this.results);
;
};
ExpNode.prototype.eval_instvar_exp = function (ret)
{
var sol = this.object_type.getCurrentSol();
var instances = sol.getObjects();
if (!instances.length)
{
if (sol.else_instances.length)
instances = sol.else_instances;
else
{
if (this.return_string)
ret.set_string("");
else
ret.set_int(0);
return;
}
}
var index = this.owner.solindex;
if (this.instance_expr)
{
var temp = this.owner.pushTempValue();
this.instance_expr.get(temp);
if (temp.is_number())
{
index = temp.data;
var type_instances = this.object_type.instances;
index %= type_instances.length; // wraparound
if (index < 0) // offset
index += type_instances.length;
var to_ret = type_instances[index].instance_vars[this.varindex];
if (cr.is_string(to_ret))
ret.set_string(to_ret);
else
ret.set_float(to_ret);
this.owner.popTempValue();
return; // done
}
this.owner.popTempValue();
}
index %= instances.length; // wraparound
if (index < 0)
index += instances.length;
var inst = instances[index];
var offset = 0;
if (this.object_type.is_family)
{
offset = inst.type.family_var_map[this.object_type.family_index];
}
var to_ret = inst.instance_vars[this.varindex + offset];
if (cr.is_string(to_ret))
ret.set_string(to_ret);
else
ret.set_float(to_ret);
};
ExpNode.prototype.eval_int = function (ret)
{
ret.type = cr.exptype.Integer;
ret.data = this.value;
};
ExpNode.prototype.eval_float = function (ret)
{
ret.type = cr.exptype.Float;
ret.data = this.value;
};
ExpNode.prototype.eval_string = function (ret)
{
ret.type = cr.exptype.String;
ret.data = this.value;
};
ExpNode.prototype.eval_unaryminus = function (ret)
{
this.first.get(ret); // retrieve operand
if (ret.is_number())
ret.data = -ret.data;
};
ExpNode.prototype.eval_add = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
ret.data += temp.data; // both operands numbers: add
if (temp.is_float())
ret.make_float();
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_subtract = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
ret.data -= temp.data; // both operands numbers: subtract
if (temp.is_float())
ret.make_float();
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_multiply = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
ret.data *= temp.data; // both operands numbers: multiply
if (temp.is_float())
ret.make_float();
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_divide = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
ret.data /= temp.data; // both operands numbers: divide
ret.make_float();
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_mod = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
ret.data %= temp.data; // both operands numbers: modulo
if (temp.is_float())
ret.make_float();
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_power = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
ret.data = Math.pow(ret.data, temp.data); // both operands numbers: raise to power
if (temp.is_float())
ret.make_float();
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_and = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number())
{
if (temp.is_string())
{
ret.set_string(ret.data.toString() + temp.data);
}
else
{
if (ret.data && temp.data)
ret.set_int(1);
else
ret.set_int(0);
}
}
else if (ret.is_string())
{
if (temp.is_string())
ret.data += temp.data;
else
{
ret.data += (Math.round(temp.data * 1e10) / 1e10).toString();
}
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_or = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
if (ret.is_number() && temp.is_number())
{
if (ret.data || temp.data)
ret.set_int(1);
else
ret.set_int(0);
}
this.owner.popTempValue();
};
ExpNode.prototype.eval_conditional = function (ret)
{
this.first.get(ret); // condition operand
if (ret.data) // is true
this.second.get(ret); // evaluate second operand to ret
else
this.third.get(ret); // evaluate third operand to ret
};
ExpNode.prototype.eval_equal = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
ret.set_int(ret.data === temp.data ? 1 : 0);
this.owner.popTempValue();
};
ExpNode.prototype.eval_notequal = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
ret.set_int(ret.data !== temp.data ? 1 : 0);
this.owner.popTempValue();
};
ExpNode.prototype.eval_less = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
ret.set_int(ret.data < temp.data ? 1 : 0);
this.owner.popTempValue();
};
ExpNode.prototype.eval_lessequal = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
ret.set_int(ret.data <= temp.data ? 1 : 0);
this.owner.popTempValue();
};
ExpNode.prototype.eval_greater = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
ret.set_int(ret.data > temp.data ? 1 : 0);
this.owner.popTempValue();
};
ExpNode.prototype.eval_greaterequal = function (ret)
{
this.first.get(ret); // left operand
var temp = this.owner.pushTempValue();
this.second.get(temp); // right operand
ret.set_int(ret.data >= temp.data ? 1 : 0);
this.owner.popTempValue();
};
ExpNode.prototype.eval_eventvar_exp = function (ret)
{
var val = this.eventvar.getValue();
if (cr.is_number(val))
ret.set_float(val);
else
ret.set_string(val);
};
cr.expNode = ExpNode;
function ExpValue(type, data)
{
this.type = type || cr.exptype.Integer;
this.data = data || 0;
this.object_class = null;
;
;
;
if (this.type == cr.exptype.Integer)
this.data = Math.floor(this.data);
cr.seal(this);
};
ExpValue.prototype.is_int = function ()
{
return this.type === cr.exptype.Integer;
};
ExpValue.prototype.is_float = function ()
{
return this.type === cr.exptype.Float;
};
ExpValue.prototype.is_number = function ()
{
return this.type === cr.exptype.Integer || this.type === cr.exptype.Float;
};
ExpValue.prototype.is_string = function ()
{
return this.type === cr.exptype.String;
};
ExpValue.prototype.make_int = function ()
{
if (!this.is_int())
{
if (this.is_float())
this.data = Math.floor(this.data); // truncate float
else if (this.is_string())
this.data = parseInt(this.data, 10);
this.type = cr.exptype.Integer;
}
};
ExpValue.prototype.make_float = function ()
{
if (!this.is_float())
{
if (this.is_string())
this.data = parseFloat(this.data);
this.type = cr.exptype.Float;
}
};
ExpValue.prototype.make_string = function ()
{
if (!this.is_string())
{
this.data = this.data.toString();
this.type = cr.exptype.String;
}
};
ExpValue.prototype.set_int = function (val)
{
;
this.type = cr.exptype.Integer;
this.data = Math.floor(val);
};
ExpValue.prototype.set_float = function (val)
{
;
this.type = cr.exptype.Float;
this.data = val;
};
ExpValue.prototype.set_string = function (val)
{
;
this.type = cr.exptype.String;
this.data = val;
};
ExpValue.prototype.set_any = function (val)
{
if (cr.is_number(val))
{
this.type = cr.exptype.Float;
this.data = val;
}
else if (cr.is_string(val))
{
this.type = cr.exptype.String;
this.data = val.toString();
}
else
{
this.type = cr.exptype.Integer;
this.data = 0;
}
};
cr.expvalue = ExpValue;
cr.exptype = {
Integer: 0, // emulated; no native integer support in javascript
Float: 1,
String: 2
};
}());
;
cr.system_object = function (runtime)
{
this.runtime = runtime;
this.waits = [];
};
cr.system_object.prototype.saveToJSON = function ()
{
var o = {};
var i, len, j, lenj, p, w, t, sobj;
o["waits"] = [];
var owaits = o["waits"];
var waitobj;
for (i = 0, len = this.waits.length; i < len; i++)
{
w = this.waits[i];
waitobj = {
"t": w.time,
"ev": w.ev.sid,
"sm": [],
"sols": {}
};
if (w.ev.actions[w.actindex])
waitobj["act"] = w.ev.actions[w.actindex].sid;
for (j = 0, lenj = w.solModifiers.length; j < lenj; j++)
waitobj["sm"].push(w.solModifiers[j].sid);
for (p in w.sols)
{
if (w.sols.hasOwnProperty(p))
{
t = this.runtime.types_by_index[parseInt(p, 10)];
;
sobj = {
"sa": w.sols[p].sa,
"insts": []
};
for (j = 0, lenj = w.sols[p].insts.length; j < lenj; j++)
sobj["insts"].push(w.sols[p].insts[j].uid);
waitobj["sols"][t.sid.toString()] = sobj;
}
}
owaits.push(waitobj);
}
return o;
};
cr.system_object.prototype.loadFromJSON = function (o)
{
var owaits = o["waits"];
var i, len, j, lenj, p, w, addWait, e, aindex, t, savedsol, nusol, inst;
this.waits.length = 0;
for (i = 0, len = owaits.length; i < len; i++)
{
w = owaits[i];
e = this.runtime.blocksBySid[w["ev"].toString()];
if (!e)
continue; // event must've gone missing
aindex = -1;
for (j = 0, lenj = e.actions.length; j < lenj; j++)
{
if (e.actions[j].sid === w["act"])
{
aindex = j;
break;
}
}
if (aindex === -1)
continue; // action must've gone missing
addWait = {};
addWait.sols = {};
addWait.solModifiers = [];
addWait.deleteme = false;
addWait.time = w["t"];
addWait.ev = e;
addWait.actindex = aindex;
for (j = 0, lenj = w["sm"].length; j < lenj; j++)
{
t = this.runtime.getObjectTypeBySid(w["sm"][j]);
if (t)
addWait.solModifiers.push(t);
}
for (p in w["sols"])
{
if (w["sols"].hasOwnProperty(p))
{
t = this.runtime.getObjectTypeBySid(parseInt(p, 10));
if (!t)
continue; // type must've been deleted
savedsol = w["sols"][p];
nusol = {
sa: savedsol["sa"],
insts: []
};
for (j = 0, lenj = savedsol["insts"].length; j < lenj; j++)
{
inst = this.runtime.getObjectByUID(savedsol["insts"][j]);
if (inst)
nusol.insts.push(inst);
}
addWait.sols[t.index.toString()] = nusol;
}
}
this.waits.push(addWait);
}
};
(function ()
{
var sysProto = cr.system_object.prototype;
function SysCnds() {};
SysCnds.prototype.EveryTick = function()
{
return true;
};
SysCnds.prototype.OnLayoutStart = function()
{
return true;
};
SysCnds.prototype.OnLayoutEnd = function()
{
return true;
};
SysCnds.prototype.Compare = function(x, cmp, y)
{
return cr.do_cmp(x, cmp, y);
};
SysCnds.prototype.CompareTime = function (cmp, t)
{
var elapsed = this.runtime.kahanTime.sum;
if (cmp === 0)
{
var cnd = this.runtime.getCurrentCondition();
if (!cnd.extra.CompareTime_executed)
{
if (elapsed >= t)
{
cnd.extra.CompareTime_executed = true;
return true;
}
}
return false;
}
return cr.do_cmp(elapsed, cmp, t);
};
SysCnds.prototype.LayerVisible = function (layer)
{
if (!layer)
return false;
else
return layer.visible;
};
SysCnds.prototype.LayerCmpOpacity = function (layer, cmp, opacity_)
{
if (!layer)
return false;
return cr.do_cmp(layer.opacity * 100, cmp, opacity_);
};
SysCnds.prototype.Repeat = function (count)
{
var current_frame = this.runtime.getCurrentEventStack();
var current_event = current_frame.current_event;
var solModifierAfterCnds = current_frame.isModifierAfterCnds();
var current_loop = this.runtime.pushLoopStack();
var i;
if (solModifierAfterCnds)
{
for (i = 0; i < count && !current_loop.stopped; i++)
{
this.runtime.pushCopySol(current_event.solModifiers);
current_loop.index = i;
current_event.retrigger();
this.runtime.popSol(current_event.solModifiers);
}
}
else
{
for (i = 0; i < count && !current_loop.stopped; i++)
{
current_loop.index = i;
current_event.retrigger();
}
}
this.runtime.popLoopStack();
return false;
};
SysCnds.prototype.While = function (count)
{
var current_frame = this.runtime.getCurrentEventStack();
var current_event = current_frame.current_event;
var solModifierAfterCnds = current_frame.isModifierAfterCnds();
var current_loop = this.runtime.pushLoopStack();
var i;
if (solModifierAfterCnds)
{
for (i = 0; !current_loop.stopped; i++)
{
this.runtime.pushCopySol(current_event.solModifiers);
current_loop.index = i;
if (!current_event.retrigger()) // one of the other conditions returned false
current_loop.stopped = true; // break
this.runtime.popSol(current_event.solModifiers);
}
}
else
{
for (i = 0; !current_loop.stopped; i++)
{
current_loop.index = i;
if (!current_event.retrigger())
current_loop.stopped = true;
}
}
this.runtime.popLoopStack();
return false;
};
SysCnds.prototype.For = function (name, start, end)
{
var current_frame = this.runtime.getCurrentEventStack();
var current_event = current_frame.current_event;
var solModifierAfterCnds = current_frame.isModifierAfterCnds();
var current_loop = this.runtime.pushLoopStack(name);
var i;
if (end < start)
{
if (solModifierAfterCnds)
{
for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end
{
this.runtime.pushCopySol(current_event.solModifiers);
current_loop.index = i;
current_event.retrigger();
this.runtime.popSol(current_event.solModifiers);
}
}
else
{
for (i = start; i >= end && !current_loop.stopped; --i) // inclusive to end
{
current_loop.index = i;
current_event.retrigger();
}
}
}
else
{
if (solModifierAfterCnds)
{
for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end
{
this.runtime.pushCopySol(current_event.solModifiers);
current_loop.index = i;
current_event.retrigger();
this.runtime.popSol(current_event.solModifiers);
}
}
else
{
for (i = start; i <= end && !current_loop.stopped; ++i) // inclusive to end
{
current_loop.index = i;
current_event.retrigger();
}
}
}
this.runtime.popLoopStack();
return false;
};
var foreach_instancestack = [];
var foreach_instanceptr = -1;
SysCnds.prototype.ForEach = function (obj)
{
var sol = obj.getCurrentSol();
foreach_instanceptr++;
if (foreach_instancestack.length === foreach_instanceptr)
foreach_instancestack.push([]);
var instances = foreach_instancestack[foreach_instanceptr];
cr.shallowAssignArray(instances, sol.getObjects());
var current_frame = this.runtime.getCurrentEventStack();
var current_event = current_frame.current_event;
var solModifierAfterCnds = current_frame.isModifierAfterCnds();
var current_loop = this.runtime.pushLoopStack();
var i, len, j, lenj, inst, s, sol2;
var is_contained = obj.is_contained;
if (solModifierAfterCnds)
{
for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++)
{
this.runtime.pushCopySol(current_event.solModifiers);
inst = instances[i];
sol = obj.getCurrentSol();
sol.select_all = false;
sol.instances.length = 1;
sol.instances[0] = inst;
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
sol2 = s.type.getCurrentSol();
sol2.select_all = false;
sol2.instances.length = 1;
sol2.instances[0] = s;
}
}
current_loop.index = i;
current_event.retrigger();
this.runtime.popSol(current_event.solModifiers);
}
}
else
{
sol.select_all = false;
sol.instances.length = 1;
for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++)
{
inst = instances[i];
sol.instances[0] = inst;
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
sol2 = s.type.getCurrentSol();
sol2.select_all = false;
sol2.instances.length = 1;
sol2.instances[0] = s;
}
}
current_loop.index = i;
current_event.retrigger();
}
}
instances.length = 0;
this.runtime.popLoopStack();
foreach_instanceptr--;
return false;
};
function foreach_sortinstances(a, b)
{
var va = a.extra.c2_foreachordered_val;
var vb = b.extra.c2_foreachordered_val;
if (cr.is_number(va) && cr.is_number(vb))
return va - vb;
else
{
va = "" + va;
vb = "" + vb;
if (va < vb)
return -1;
else if (va > vb)
return 1;
else
return 0;
}
};
SysCnds.prototype.ForEachOrdered = function (obj, exp, order)
{
var sol = obj.getCurrentSol();
foreach_instanceptr++;
if (foreach_instancestack.length === foreach_instanceptr)
foreach_instancestack.push([]);
var instances = foreach_instancestack[foreach_instanceptr];
cr.shallowAssignArray(instances, sol.getObjects());
var current_frame = this.runtime.getCurrentEventStack();
var current_event = current_frame.current_event;
var current_condition = this.runtime.getCurrentCondition();
var solModifierAfterCnds = current_frame.isModifierAfterCnds();
var current_loop = this.runtime.pushLoopStack();
var i, len, j, lenj, inst, s, sol2;
for (i = 0, len = instances.length; i < len; i++)
{
instances[i].extra.c2_foreachordered_val = current_condition.parameters[1].get(i);
}
instances.sort(foreach_sortinstances);
if (order === 1)
instances.reverse();
var is_contained = obj.is_contained;
if (solModifierAfterCnds)
{
for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++)
{
this.runtime.pushCopySol(current_event.solModifiers);
inst = instances[i];
sol = obj.getCurrentSol();
sol.select_all = false;
sol.instances.length = 1;
sol.instances[0] = inst;
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
sol2 = s.type.getCurrentSol();
sol2.select_all = false;
sol2.instances.length = 1;
sol2.instances[0] = s;
}
}
current_loop.index = i;
current_event.retrigger();
this.runtime.popSol(current_event.solModifiers);
}
}
else
{
sol.select_all = false;
sol.instances.length = 1;
for (i = 0, len = instances.length; i < len && !current_loop.stopped; i++)
{
inst = instances[i];
sol.instances[0] = inst;
if (is_contained)
{
for (j = 0, lenj = inst.siblings.length; j < lenj; j++)
{
s = inst.siblings[j];
sol2 = s.type.getCurrentSol();
sol2.select_all = false;
sol2.instances.length = 1;
sol2.instances[0] = s;
}
}
current_loop.index = i;
current_event.retrigger();
}
}
instances.length = 0;
this.runtime.popLoopStack();
foreach_instanceptr--;
return false;
};
SysCnds.prototype.PickByComparison = function (obj_, exp_, cmp_, val_)
{
var i, len, k, inst;
if (!obj_)
return;
foreach_instanceptr++;
if (foreach_instancestack.length === foreach_instanceptr)
foreach_instancestack.push([]);
var tmp_instances = foreach_instancestack[foreach_instanceptr];
var sol = obj_.getCurrentSol();
cr.shallowAssignArray(tmp_instances, sol.getObjects());
if (sol.select_all)
sol.else_instances.length = 0;
var current_condition = this.runtime.getCurrentCondition();
for (i = 0, k = 0, len = tmp_instances.length; i < len; i++)
{
inst = tmp_instances[i];
tmp_instances[k] = inst;
exp_ = current_condition.parameters[1].get(i);
val_ = current_condition.parameters[3].get(i);
if (cr.do_cmp(exp_, cmp_, val_))
{
k++;
}
else
{
sol.else_instances.push(inst);
}
}
tmp_instances.length = k;
sol.select_all = false;
cr.shallowAssignArray(sol.instances, tmp_instances);
tmp_instances.length = 0;
foreach_instanceptr--;
obj_.applySolToContainer();
return !!sol.instances.length;
};
SysCnds.prototype.PickByEvaluate = function (obj_, exp_)
{
var i, len, k, inst;
if (!obj_)
return;
foreach_instanceptr++;
if (foreach_instancestack.length === foreach_instanceptr)
foreach_instancestack.push([]);
var tmp_instances = foreach_instancestack[foreach_instanceptr];
var sol = obj_.getCurrentSol();
cr.shallowAssignArray(tmp_instances, sol.getObjects());
if (sol.select_all)
sol.else_instances.length = 0;
var current_condition = this.runtime.getCurrentCondition();
for (i = 0, k = 0, len = tmp_instances.length; i < len; i++)
{
inst = tmp_instances[i];
tmp_instances[k] = inst;
exp_ = current_condition.parameters[1].get(i);
if (exp_)
{
k++;
}
else
{
sol.else_instances.push(inst);
}
}
tmp_instances.length = k;
sol.select_all = false;
cr.shallowAssignArray(sol.instances, tmp_instances);
tmp_instances.length = 0;
foreach_instanceptr--;
obj_.applySolToContainer();
return !!sol.instances.length;
};
SysCnds.prototype.TriggerOnce = function ()
{
var cndextra = this.runtime.getCurrentCondition().extra;
if (typeof cndextra.TriggerOnce_lastTick === "undefined")
cndextra.TriggerOnce_lastTick = -1;
var last_tick = cndextra.TriggerOnce_lastTick;
var cur_tick = this.runtime.tickcount;
cndextra.TriggerOnce_lastTick = cur_tick;
return this.runtime.layout_first_tick || last_tick !== cur_tick - 1;
};
SysCnds.prototype.Every = function (seconds)
{
var cnd = this.runtime.getCurrentCondition();
var last_time = cnd.extra.Every_lastTime || 0;
var cur_time = this.runtime.kahanTime.sum;
if (typeof cnd.extra.Every_seconds === "undefined")
cnd.extra.Every_seconds = seconds;
var this_seconds = cnd.extra.Every_seconds;
if (cur_time >= last_time + this_seconds)
{
cnd.extra.Every_lastTime = last_time + this_seconds;
if (cur_time >= cnd.extra.Every_lastTime + this_seconds)
cnd.extra.Every_lastTime = cur_time;
cnd.extra.Every_seconds = seconds;
return true;
}
else
return false;
};
SysCnds.prototype.PickNth = function (obj, index)
{
if (!obj)
return false;
var sol = obj.getCurrentSol();
var instances = sol.getObjects();
index = cr.floor(index);
if (index < 0 || index >= instances.length)
return false;
var inst = instances[index];
sol.pick_one(inst);
obj.applySolToContainer();
return true;
};
SysCnds.prototype.PickRandom = function (obj)
{
if (!obj)
return false;
var sol = obj.getCurrentSol();
var instances = sol.getObjects();
var index = cr.floor(Math.random() * instances.length);
if (index >= instances.length)
return false;
var inst = instances[index];
sol.pick_one(inst);
obj.applySolToContainer();
return true;
};
SysCnds.prototype.CompareVar = function (v, cmp, val)
{
return cr.do_cmp(v.getValue(), cmp, val);
};
SysCnds.prototype.IsGroupActive = function (group)
{
return this.runtime.activeGroups[(/*this.runtime.getCurrentCondition().sheet.name + "|" + */group).toLowerCase()];
};
SysCnds.prototype.IsPreview = function ()
{
return typeof cr_is_preview !== "undefined";
};
SysCnds.prototype.PickAll = function (obj)
{
if (!obj)
return false;
if (!obj.instances.length)
return false;
var sol = obj.getCurrentSol();
sol.select_all = true;
obj.applySolToContainer();
return true;
};
SysCnds.prototype.IsMobile = function ()
{
return this.runtime.isMobile;
};
SysCnds.prototype.CompareBetween = function (x, a, b)
{
return x >= a && x <= b;
};
SysCnds.prototype.Else = function ()
{
var current_frame = this.runtime.getCurrentEventStack();
if (current_frame.else_branch_ran)
return false; // another event in this else-if chain has run
else
return !current_frame.last_event_true;
/*
var current_frame = this.runtime.getCurrentEventStack();
var current_event = current_frame.current_event;
var prev_event = current_event.prev_block;
if (!prev_event)
return false;
if (prev_event.is_logical)
return !this.runtime.last_event_true;
var i, len, j, lenj, s, sol, temp, inst, any_picked = false;
for (i = 0, len = prev_event.cndReferences.length; i < len; i++)
{
s = prev_event.cndReferences[i];
sol = s.getCurrentSol();
if (sol.select_all || sol.instances.length === s.instances.length)
{
sol.select_all = false;
sol.instances.length = 0;
}
else
{
if (sol.instances.length === 1 && sol.else_instances.length === 0 && s.instances.length >= 2)
{
inst = sol.instances[0];
sol.instances.length = 0;
for (j = 0, lenj = s.instances.length; j < lenj; j++)
{
if (s.instances[j] != inst)
sol.instances.push(s.instances[j]);
}
any_picked = true;
}
else
{
temp = sol.instances;
sol.instances = sol.else_instances;
sol.else_instances = temp;
any_picked = true;
}
}
}
return any_picked;
*/
};
SysCnds.prototype.OnLoadFinished = function ()
{
return true;
};
SysCnds.prototype.OnCanvasSnapshot = function ()
{
return true;
};
SysCnds.prototype.EffectsSupported = function ()
{
return !!this.runtime.glwrap;
};
SysCnds.prototype.OnSaveComplete = function ()
{
return true;
};
SysCnds.prototype.OnLoadComplete = function ()
{
return true;
};
SysCnds.prototype.OnLoadFailed = function ()
{
return true;
};
SysCnds.prototype.ObjectUIDExists = function (u)
{
return !!this.runtime.getObjectByUID(u);
};
SysCnds.prototype.IsOnPlatform = function (p)
{
var rt = this.runtime;
switch (p) {
case 0: // HTML5 website
return !rt.isDomFree && !rt.isNodeWebkit && !rt.isPhoneGap && !rt.isCrosswalk && !rt.isWindows8App && !rt.isWindowsPhone8 && !rt.isBlackberry10 && !rt.isAmazonWebApp;
case 1: // iOS
return rt.isiOS;
case 2: // Android
return rt.isAndroid;
case 3: // Windows 8
return rt.isWindows8App;
case 4: // Windows Phone 8
return rt.isWindowsPhone8;
case 5: // Blackberry 10
return rt.isBlackberry10;
case 6: // Tizen
return rt.isTizen;
case 7: // CocoonJS
return rt.isCocoonJs;
case 8: // PhoneGap
return rt.isPhoneGap;
case 9: // Scirra Arcade
return rt.isArcade;
case 10: // node-webkit
return rt.isNodeWebkit;
case 11: // crosswalk
return rt.isCrosswalk;
case 12: // amazon webapp
return rt.isAmazonWebApp;
default: // should not be possible
return false;
}
};
var cacheRegex = null;
var lastRegex = "";
var lastFlags = "";
function getRegex(regex_, flags_)
{
if (!cacheRegex || regex_ !== lastRegex || flags_ !== lastFlags)
{
cacheRegex = new RegExp(regex_, flags_);
lastRegex = regex_;
lastFlags = flags_;
}
cacheRegex.lastIndex = 0; // reset
return cacheRegex;
};
SysCnds.prototype.RegexTest = function (str_, regex_, flags_)
{
var regex = getRegex(regex_, flags_);
return regex.test(str_);
};
var tmp_arr = [];
SysCnds.prototype.PickOverlappingPoint = function (obj_, x_, y_)
{
if (!obj_)
return false;
var sol = obj_.getCurrentSol();
var instances = sol.getObjects();
var current_event = this.runtime.getCurrentEventStack().current_event;
var orblock = current_event.orblock;
var cnd = this.runtime.getCurrentCondition();
var i, len, inst, pick;
if (sol.select_all)
{
cr.shallowAssignArray(tmp_arr, instances);
sol.else_instances.length = 0;
sol.select_all = false;
sol.instances.length = 0;
}
else
{
if (orblock)
{
cr.shallowAssignArray(tmp_arr, sol.else_instances);
sol.else_instances.length = 0;
}
else
{
cr.shallowAssignArray(tmp_arr, instances);
sol.instances.length = 0;
}
}
for (i = 0, len = tmp_arr.length; i < len; ++i)
{
inst = tmp_arr[i];
pick = cr.xor(inst.contains_pt(x_, y_), cnd.inverted);
if (pick)
sol.instances.push(inst);
else
sol.else_instances.push(inst);
}
obj_.applySolToContainer();
return cr.xor(!!sol.instances.length, cnd.inverted);
};
sysProto.cnds = new SysCnds();
function SysActs() {};
SysActs.prototype.GoToLayout = function(to)
{
if (this.runtime.isloading)
return; // cannot change layout while loading on loader layout
if (this.runtime.changelayout)
return; // already changing to a different layout
;
this.runtime.changelayout = to;
};
SysActs.prototype.CreateObject = function (obj, layer, x, y)
{
if (!layer || !obj)
return;
var inst = this.runtime.createInstance(obj, layer, x, y);
if (!inst)
return;
this.runtime.isInOnDestroy++;
var i, len, s;
this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst);
if (inst.is_contained)
{
for (i = 0, len = inst.siblings.length; i < len; i++)
{
s = inst.siblings[i];
this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s);
}
}
this.runtime.isInOnDestroy--;
var sol = obj.getCurrentSol();
sol.select_all = false;
sol.instances.length = 1;
sol.instances[0] = inst;
if (inst.is_contained)
{
for (i = 0, len = inst.siblings.length; i < len; i++)
{
s = inst.siblings[i];
sol = s.type.getCurrentSol();
sol.select_all = false;
sol.instances.length = 1;
sol.instances[0] = s;
}
}
};
SysActs.prototype.SetLayerVisible = function (layer, visible_)
{
if (!layer)
return;
if (layer.visible !== visible_)
{
layer.visible = visible_;
this.runtime.redraw = true;
}
};
SysActs.prototype.SetLayerOpacity = function (layer, opacity_)
{
if (!layer)
return;
opacity_ = cr.clamp(opacity_ / 100, 0, 1);
if (layer.opacity !== opacity_)
{
layer.opacity = opacity_;
this.runtime.redraw = true;
}
};
SysActs.prototype.SetLayerScaleRate = function (layer, sr)
{
if (!layer)
return;
if (layer.zoomRate !== sr)
{
layer.zoomRate = sr;
this.runtime.redraw = true;
}
};
SysActs.prototype.SetLayoutScale = function (s)
{
if (!this.runtime.running_layout)
return;
if (this.runtime.running_layout.scale !== s)
{
this.runtime.running_layout.scale = s;
this.runtime.running_layout.boundScrolling();
this.runtime.redraw = true;
}
};
SysActs.prototype.ScrollX = function(x)
{
this.runtime.running_layout.scrollToX(x);
};
SysActs.prototype.ScrollY = function(y)
{
this.runtime.running_layout.scrollToY(y);
};
SysActs.prototype.Scroll = function(x, y)
{
this.runtime.running_layout.scrollToX(x);
this.runtime.running_layout.scrollToY(y);
};
SysActs.prototype.ScrollToObject = function(obj)
{
var inst = obj.getFirstPicked();
if (inst)
{
this.runtime.running_layout.scrollToX(inst.x);
this.runtime.running_layout.scrollToY(inst.y);
}
};
SysActs.prototype.SetVar = function(v, x)
{
;
if (v.vartype === 0)
{
if (cr.is_number(x))
v.setValue(x);
else
v.setValue(parseFloat(x));
}
else if (v.vartype === 1)
v.setValue(x.toString());
if (v.name=='stars') window.c2_score = x;
};
SysActs.prototype.AddVar = function(v, x)
{
;
if (v.vartype === 0)
{
if (cr.is_number(x))
v.setValue(v.getValue() + x);
else
v.setValue(v.getValue() + parseFloat(x));
}
else if (v.vartype === 1)
v.setValue(v.getValue() + x.toString());
if( v.name == "currentLevel" ){
window.c2_level = v.getValue();
}
};
SysActs.prototype.SubVar = function(v, x)
{
;
if (v.vartype === 0)
{
if (cr.is_number(x))
v.setValue(v.getValue() - x);
else
v.setValue(v.getValue() - parseFloat(x));
}
};
SysActs.prototype.SetGroupActive = function (group, active)
{
var activeGroups = this.runtime.activeGroups;
var groupkey = (/*this.runtime.getCurrentAction().sheet.name + "|" + */group).toLowerCase();
switch (active) {
case 0:
activeGroups[groupkey] = false;
break;
case 1:
activeGroups[groupkey] = true;
break;
case 2:
activeGroups[groupkey] = !activeGroups[groupkey];
break;
}
};
SysActs.prototype.SetTimescale = function (ts_)
{
var ts = ts_;
if (ts < 0)
ts = 0;
this.runtime.timescale = ts;
};
SysActs.prototype.SetObjectTimescale = function (obj, ts_)
{
var ts = ts_;
if (ts < 0)
ts = 0;
if (!obj)
return;
var sol = obj.getCurrentSol();
var instances = sol.getObjects();
var i, len;
for (i = 0, len = instances.length; i < len; i++)
{
instances[i].my_timescale = ts;
}
};
SysActs.prototype.RestoreObjectTimescale = function (obj)
{
if (!obj)
return false;
var sol = obj.getCurrentSol();
var instances = sol.getObjects();
var i, len;
for (i = 0, len = instances.length; i < len; i++)
{
instances[i].my_timescale = -1.0;
}
};
var waitobjrecycle = [];
function allocWaitObject()
{
var w;
if (waitobjrecycle.length)
w = waitobjrecycle.pop();
else
{
w = {};
w.sols = {};
w.solModifiers = [];
}
w.deleteme = false;
return w;
};
function freeWaitObject(w)
{
cr.wipe(w.sols);
w.solModifiers.length = 0;
waitobjrecycle.push(w);
};
var solstateobjects = [];
function allocSolStateObject()
{
var s;
if (solstateobjects.length)
s = solstateobjects.pop();
else
{
s = {};
s.insts = [];
}
s.sa = false;
return s;
};
function freeSolStateObject(s)
{
s.insts.length = 0;
solstateobjects.push(s);
};
SysActs.prototype.Wait = function (seconds)
{
if (seconds < 0)
return;
var i, len, s, t, ss;
var evinfo = this.runtime.getCurrentEventStack();
var waitobj = allocWaitObject();
waitobj.time = this.runtime.kahanTime.sum + seconds;
waitobj.ev = evinfo.current_event;
waitobj.actindex = evinfo.actindex + 1; // pointing at next action
for (i = 0, len = this.runtime.types_by_index.length; i < len; i++)
{
t = this.runtime.types_by_index[i];
s = t.getCurrentSol();
if (s.select_all && evinfo.current_event.solModifiers.indexOf(t) === -1)
continue;
waitobj.solModifiers.push(t);
ss = allocSolStateObject();
ss.sa = s.select_all;
cr.shallowAssignArray(ss.insts, s.instances);
waitobj.sols[i.toString()] = ss;
}
this.waits.push(waitobj);
return true;
};
SysActs.prototype.SetLayerScale = function (layer, scale)
{
if (!layer)
return;
if (layer.scale === scale)
return;
layer.scale = scale;
this.runtime.redraw = true;
};
SysActs.prototype.ResetGlobals = function ()
{
var i, len, g;
for (i = 0, len = this.runtime.all_global_vars.length; i < len; i++)
{
g = this.runtime.all_global_vars[i];
g.data = g.initial;
}
};
SysActs.prototype.SetLayoutAngle = function (a)
{
a = cr.to_radians(a);
a = cr.clamp_angle(a);
if (this.runtime.running_layout)
{
if (this.runtime.running_layout.angle !== a)
{
this.runtime.running_layout.angle = a;
this.runtime.redraw = true;
}
}
};
SysActs.prototype.SetLayerAngle = function (layer, a)
{
if (!layer)
return;
a = cr.to_radians(a);
a = cr.clamp_angle(a);
if (layer.angle === a)
return;
layer.angle = a;
this.runtime.redraw = true;
};
SysActs.prototype.SetLayerParallax = function (layer, px, py)
{
if (!layer)
return;
if (layer.parallaxX === px / 100 && layer.parallaxY === py / 100)
return;
layer.parallaxX = px / 100;
layer.parallaxY = py / 100;
if (layer.parallaxX !== 1 || layer.parallaxY !== 1)
{
var i, len, instances = layer.instances;
for (i = 0, len = instances.length; i < len; ++i)
{
instances[i].type.any_instance_parallaxed = true;
}
}
this.runtime.redraw = true;
};
SysActs.prototype.SetLayerBackground = function (layer, c)
{
if (!layer)
return;
var r = cr.GetRValue(c);
var g = cr.GetGValue(c);
var b = cr.GetBValue(c);
if (layer.background_color[0] === r && layer.background_color[1] === g && layer.background_color[2] === b)
return;
layer.background_color[0] = r;
layer.background_color[1] = g;
layer.background_color[2] = b;
this.runtime.redraw = true;
};
SysActs.prototype.SetLayerTransparent = function (layer, t)
{
if (!layer)
return;
if (!!t === !!layer.transparent)
return;
layer.transparent = !!t;
this.runtime.redraw = true;
};
SysActs.prototype.StopLoop = function ()
{
if (this.runtime.loop_stack_index < 0)
return; // no loop currently running
this.runtime.getCurrentLoop().stopped = true;
};
SysActs.prototype.GoToLayoutByName = function (layoutname)
{
if (this.runtime.isloading)
return; // cannot change layout while loading on loader layout
if (this.runtime.changelayout)
return; // already changing to different layout
;
var l;
for (l in this.runtime.layouts)
{
if (this.runtime.layouts.hasOwnProperty(l) && cr.equals_nocase(l, layoutname))
{
this.runtime.changelayout = this.runtime.layouts[l];
return;
}
}
};
SysActs.prototype.RestartLayout = function (layoutname)
{
if (this.runtime.isloading)
return; // cannot restart loader layouts
if (this.runtime.changelayout)
return; // already changing to a different layout
;
if (!this.runtime.running_layout)
return;
this.runtime.changelayout = this.runtime.running_layout;
var i, len, g;
for (i = 0, len = this.runtime.allGroups.length; i < len; i++)
{
g = this.runtime.allGroups[i];
this.runtime.activeGroups[g.group_name.toLowerCase()] = g.initially_activated;
}
};
SysActs.prototype.SnapshotCanvas = function (format_, quality_)
{
this.runtime.snapshotCanvas = [format_ === 0 ? "image/png" : "image/jpeg", quality_ / 100];
this.runtime.redraw = true; // force redraw so snapshot is always taken
};
SysActs.prototype.SetCanvasSize = function (w, h)
{
if (w <= 0 || h <= 0)
return;
var mode = this.runtime.fullscreen_mode;
var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.runtime.isNodeFullscreen);
if (isfullscreen && this.runtime.fullscreen_scaling > 0)
mode = this.runtime.fullscreen_scaling;
if (mode === 0)
{
this.runtime["setSize"](w, h, true);
}
else
{
this.runtime.original_width = w;
this.runtime.original_height = h;
this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true);
}
};
SysActs.prototype.SetLayoutEffectEnabled = function (enable_, effectname_)
{
if (!this.runtime.running_layout || !this.runtime.glwrap)
return;
var et = this.runtime.running_layout.getEffectByName(effectname_);
if (!et)
return; // effect name not found
var enable = (enable_ === 1);
if (et.active == enable)
return; // no change
et.active = enable;
this.runtime.running_layout.updateActiveEffects();
this.runtime.redraw = true;
};
SysActs.prototype.SetLayerEffectEnabled = function (layer, enable_, effectname_)
{
if (!layer || !this.runtime.glwrap)
return;
var et = layer.getEffectByName(effectname_);
if (!et)
return; // effect name not found
var enable = (enable_ === 1);
if (et.active == enable)
return; // no change
et.active = enable;
layer.updateActiveEffects();
this.runtime.redraw = true;
};
SysActs.prototype.SetLayoutEffectParam = function (effectname_, index_, value_)
{
if (!this.runtime.running_layout || !this.runtime.glwrap)
return;
var et = this.runtime.running_layout.getEffectByName(effectname_);
if (!et)
return; // effect name not found
var params = this.runtime.running_layout.effect_params[et.index];
index_ = Math.floor(index_);
if (index_ < 0 || index_ >= params.length)
return; // effect index out of bounds
if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1)
value_ /= 100.0;
if (params[index_] === value_)
return; // no change
params[index_] = value_;
if (et.active)
this.runtime.redraw = true;
};
SysActs.prototype.SetLayerEffectParam = function (layer, effectname_, index_, value_)
{
if (!layer || !this.runtime.glwrap)
return;
var et = layer.getEffectByName(effectname_);
if (!et)
return; // effect name not found
var params = layer.effect_params[et.index];
index_ = Math.floor(index_);
if (index_ < 0 || index_ >= params.length)
return; // effect index out of bounds
if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1)
value_ /= 100.0;
if (params[index_] === value_)
return; // no change
params[index_] = value_;
if (et.active)
this.runtime.redraw = true;
};
SysActs.prototype.SaveState = function (slot_)
{
this.runtime.saveToSlot = slot_;
};
SysActs.prototype.LoadState = function (slot_)
{
this.runtime.loadFromSlot = slot_;
};
SysActs.prototype.LoadStateJSON = function (jsonstr_)
{
this.runtime.loadFromJson = jsonstr_;
};
SysActs.prototype.SetHalfFramerateMode = function (set_)
{
this.runtime.halfFramerateMode = (set_ !== 0);
};
SysActs.prototype.SetFullscreenQuality = function (q)
{
var isfullscreen = (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"] || this.isNodeFullscreen);
if (!isfullscreen && this.runtime.fullscreen_mode === 0)
return;
this.runtime.wantFullscreenScalingQuality = (q !== 0);
this.runtime["setSize"](this.runtime.lastWindowWidth, this.runtime.lastWindowHeight, true);
};
sysProto.acts = new SysActs();
function SysExps() {};
SysExps.prototype["int"] = function(ret, x)
{
if (cr.is_string(x))
{
ret.set_int(parseInt(x, 10));
if (isNaN(ret.data))
ret.data = 0;
}
else
ret.set_int(x);
};
SysExps.prototype["float"] = function(ret, x)
{
if (cr.is_string(x))
{
ret.set_float(parseFloat(x));
if (isNaN(ret.data))
ret.data = 0;
}
else
ret.set_float(x);
};
SysExps.prototype.str = function(ret, x)
{
if (cr.is_string(x))
ret.set_string(x);
else
ret.set_string(x.toString());
};
SysExps.prototype.len = function(ret, x)
{
ret.set_int(x.length || 0);
};
SysExps.prototype.random = function (ret, a, b)
{
if (b === undefined)
{
ret.set_float(Math.random() * a);
}
else
{
ret.set_float(Math.random() * (b - a) + a);
}
};
SysExps.prototype.sqrt = function(ret, x)
{
ret.set_float(Math.sqrt(x));
};
SysExps.prototype.abs = function(ret, x)
{
ret.set_float(Math.abs(x));
};
SysExps.prototype.round = function(ret, x)
{
ret.set_int(Math.round(x));
};
SysExps.prototype.floor = function(ret, x)
{
ret.set_int(Math.floor(x));
};
SysExps.prototype.ceil = function(ret, x)
{
ret.set_int(Math.ceil(x));
};
SysExps.prototype.sin = function(ret, x)
{
ret.set_float(Math.sin(cr.to_radians(x)));
};
SysExps.prototype.cos = function(ret, x)
{
ret.set_float(Math.cos(cr.to_radians(x)));
};
SysExps.prototype.tan = function(ret, x)
{
ret.set_float(Math.tan(cr.to_radians(x)));
};
SysExps.prototype.asin = function(ret, x)
{
ret.set_float(cr.to_degrees(Math.asin(x)));
};
SysExps.prototype.acos = function(ret, x)
{
ret.set_float(cr.to_degrees(Math.acos(x)));
};
SysExps.prototype.atan = function(ret, x)
{
ret.set_float(cr.to_degrees(Math.atan(x)));
};
SysExps.prototype.exp = function(ret, x)
{
ret.set_float(Math.exp(x));
};
SysExps.prototype.ln = function(ret, x)
{
ret.set_float(Math.log(x));
};
SysExps.prototype.log10 = function(ret, x)
{
ret.set_float(Math.log(x) / Math.LN10);
};
SysExps.prototype.max = function(ret)
{
var max_ = arguments[1];
var i, len;
for (i = 2, len = arguments.length; i < len; i++)
{
if (max_ < arguments[i])
max_ = arguments[i];
}
ret.set_float(max_);
};
SysExps.prototype.min = function(ret)
{
var min_ = arguments[1];
var i, len;
for (i = 2, len = arguments.length; i < len; i++)
{
if (min_ > arguments[i])
min_ = arguments[i];
}
ret.set_float(min_);
};
SysExps.prototype.dt = function(ret)
{
ret.set_float(this.runtime.dt);
};
SysExps.prototype.timescale = function(ret)
{
ret.set_float(this.runtime.timescale);
};
SysExps.prototype.wallclocktime = function(ret)
{
ret.set_float((Date.now() - this.runtime.start_time) / 1000.0);
};
SysExps.prototype.time = function(ret)
{
ret.set_float(this.runtime.kahanTime.sum);
};
SysExps.prototype.tickcount = function(ret)
{
ret.set_int(this.runtime.tickcount);
};
SysExps.prototype.objectcount = function(ret)
{
ret.set_int(this.runtime.objectcount);
};
SysExps.prototype.fps = function(ret)
{
ret.set_int(this.runtime.fps);
};
SysExps.prototype.loopindex = function(ret, name_)
{
var loop, i, len;
if (!this.runtime.loop_stack.length)
{
ret.set_int(0);
return;
}
if (name_)
{
for (i = 0, len = this.runtime.loop_stack.length; i < len; i++)
{
loop = this.runtime.loop_stack[i];
if (loop.name === name_)
{
ret.set_int(loop.index);
return;
}
}
ret.set_int(0);
}
else
{
loop = this.runtime.getCurrentLoop();
ret.set_int(loop ? loop.index : -1);
}
};
SysExps.prototype.distance = function(ret, x1, y1, x2, y2)
{
ret.set_float(cr.distanceTo(x1, y1, x2, y2));
};
SysExps.prototype.angle = function(ret, x1, y1, x2, y2)
{
ret.set_float(cr.to_degrees(cr.angleTo(x1, y1, x2, y2)));
};
SysExps.prototype.scrollx = function(ret)
{
ret.set_float(this.runtime.running_layout.scrollX);
};
SysExps.prototype.scrolly = function(ret)
{
ret.set_float(this.runtime.running_layout.scrollY);
};
SysExps.prototype.newline = function(ret)
{
ret.set_string("\n");
};
SysExps.prototype.lerp = function(ret, a, b, x)
{
ret.set_float(cr.lerp(a, b, x));
};
SysExps.prototype.windowwidth = function(ret)
{
ret.set_int(this.runtime.width);
};
SysExps.prototype.windowheight = function(ret)
{
ret.set_int(this.runtime.height);
};
SysExps.prototype.uppercase = function(ret, str)
{
ret.set_string(cr.is_string(str) ? str.toUpperCase() : "");
};
SysExps.prototype.lowercase = function(ret, str)
{
ret.set_string(cr.is_string(str) ? str.toLowerCase() : "");
};
SysExps.prototype.clamp = function(ret, x, l, u)
{
if (x < l)
ret.set_float(l);
else if (x > u)
ret.set_float(u);
else
ret.set_float(x);
};
SysExps.prototype.layerscale = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
if (!layer)
ret.set_float(0);
else
ret.set_float(layer.scale);
};
SysExps.prototype.layeropacity = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
if (!layer)
ret.set_float(0);
else
ret.set_float(layer.opacity * 100);
};
SysExps.prototype.layerscalerate = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
if (!layer)
ret.set_float(0);
else
ret.set_float(layer.zoomRate);
};
SysExps.prototype.layerparallaxx = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
if (!layer)
ret.set_float(0);
else
ret.set_float(layer.parallaxX * 100);
};
SysExps.prototype.layerparallaxy = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
if (!layer)
ret.set_float(0);
else
ret.set_float(layer.parallaxY * 100);
};
SysExps.prototype.layoutscale = function (ret)
{
if (this.runtime.running_layout)
ret.set_float(this.runtime.running_layout.scale);
else
ret.set_float(0);
};
SysExps.prototype.layoutangle = function (ret)
{
ret.set_float(cr.to_degrees(this.runtime.running_layout.angle));
};
SysExps.prototype.layerangle = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
if (!layer)
ret.set_float(0);
else
ret.set_float(cr.to_degrees(layer.angle));
};
SysExps.prototype.layoutwidth = function (ret)
{
ret.set_int(this.runtime.running_layout.width);
};
SysExps.prototype.layoutheight = function (ret)
{
ret.set_int(this.runtime.running_layout.height);
};
SysExps.prototype.find = function (ret, text, searchstr)
{
if (cr.is_string(text) && cr.is_string(searchstr))
ret.set_int(text.search(new RegExp(cr.regexp_escape(searchstr), "i")));
else
ret.set_int(-1);
};
SysExps.prototype.left = function (ret, text, n)
{
ret.set_string(cr.is_string(text) ? text.substr(0, n) : "");
};
SysExps.prototype.right = function (ret, text, n)
{
ret.set_string(cr.is_string(text) ? text.substr(text.length - n) : "");
};
SysExps.prototype.mid = function (ret, text, index_, length_)
{
ret.set_string(cr.is_string(text) ? text.substr(index_, length_) : "");
};
SysExps.prototype.tokenat = function (ret, text, index_, sep)
{
if (cr.is_string(text) && cr.is_string(sep))
{
var arr = text.split(sep);
var i = cr.floor(index_);
if (i < 0 || i >= arr.length)
ret.set_string("");
else
ret.set_string(arr[i]);
}
else
ret.set_string("");
};
SysExps.prototype.tokencount = function (ret, text, sep)
{
if (cr.is_string(text) && text.length)
ret.set_int(text.split(sep).length);
else
ret.set_int(0);
};
SysExps.prototype.replace = function (ret, text, find_, replace_)
{
if (cr.is_string(text) && cr.is_string(find_) && cr.is_string(replace_))
ret.set_string(text.replace(new RegExp(cr.regexp_escape(find_), "gi"), replace_));
else
ret.set_string(cr.is_string(text) ? text : "");
};
SysExps.prototype.trim = function (ret, text)
{
ret.set_string(cr.is_string(text) ? text.trim() : "");
};
SysExps.prototype.pi = function (ret)
{
ret.set_float(cr.PI);
};
SysExps.prototype.layoutname = function (ret)
{
if (this.runtime.running_layout)
ret.set_string(this.runtime.running_layout.name);
else
ret.set_string("");
};
SysExps.prototype.renderer = function (ret)
{
ret.set_string(this.runtime.gl ? "webgl" : "canvas2d");
};
SysExps.prototype.anglediff = function (ret, a, b)
{
ret.set_float(cr.to_degrees(cr.angleDiff(cr.to_radians(a), cr.to_radians(b))));
};
SysExps.prototype.choose = function (ret)
{
var index = cr.floor(Math.random() * (arguments.length - 1));
ret.set_any(arguments[index + 1]);
};
SysExps.prototype.rgb = function (ret, r, g, b)
{
ret.set_int(cr.RGB(r, g, b));
};
SysExps.prototype.projectversion = function (ret)
{
ret.set_string(this.runtime.versionstr);
};
SysExps.prototype.anglelerp = function (ret, a, b, x)
{
a = cr.to_radians(a);
b = cr.to_radians(b);
var diff = cr.angleDiff(a, b);
if (cr.angleClockwise(b, a))
{
ret.set_float(cr.to_clamped_degrees(a + diff * x));
}
else
{
ret.set_float(cr.to_clamped_degrees(a - diff * x));
}
};
SysExps.prototype.anglerotate = function (ret, a, b, c)
{
a = cr.to_radians(a);
b = cr.to_radians(b);
c = cr.to_radians(c);
ret.set_float(cr.to_clamped_degrees(cr.angleRotate(a, b, c)));
};
SysExps.prototype.zeropad = function (ret, n, d)
{
var s = (n < 0 ? "-" : "");
if (n < 0) n = -n;
var zeroes = d - n.toString().length;
for (var i = 0; i < zeroes; i++)
s += "0";
ret.set_string(s + n.toString());
};
SysExps.prototype.cpuutilisation = function (ret)
{
ret.set_float(this.runtime.cpuutilisation / 1000);
};
SysExps.prototype.viewportleft = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.viewLeft : 0);
};
SysExps.prototype.viewporttop = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.viewTop : 0);
};
SysExps.prototype.viewportright = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.viewRight : 0);
};
SysExps.prototype.viewportbottom = function (ret, layerparam)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.viewBottom : 0);
};
SysExps.prototype.loadingprogress = function (ret)
{
ret.set_float(this.runtime.loadingprogress);
};
SysExps.prototype.unlerp = function(ret, a, b, y)
{
ret.set_float((y - a) / (b - a));
};
SysExps.prototype.canvassnapshot = function (ret)
{
ret.set_string(this.runtime.snapshotData);
};
SysExps.prototype.urlencode = function (ret, s)
{
ret.set_string(encodeURIComponent(s));
};
SysExps.prototype.urldecode = function (ret, s)
{
ret.set_string(decodeURIComponent(s));
};
SysExps.prototype.canvastolayerx = function (ret, layerparam, x, y)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.canvasToLayer(x, y, true) : 0);
};
SysExps.prototype.canvastolayery = function (ret, layerparam, x, y)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.canvasToLayer(x, y, false) : 0);
};
SysExps.prototype.layertocanvasx = function (ret, layerparam, x, y)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.layerToCanvas(x, y, true) : 0);
};
SysExps.prototype.layertocanvasy = function (ret, layerparam, x, y)
{
var layer = this.runtime.getLayer(layerparam);
ret.set_float(layer ? layer.layerToCanvas(x, y, false) : 0);
};
SysExps.prototype.savestatejson = function (ret)
{
ret.set_string(this.runtime.lastSaveJson);
};
SysExps.prototype.imagememoryusage = function (ret)
{
if (this.runtime.glwrap)
ret.set_float(Math.round(100 * this.runtime.glwrap.estimateVRAM() / (1024 * 1024)) / 100);
else
ret.set_float(0);
};
SysExps.prototype.regexsearch = function (ret, str_, regex_, flags_)
{
var regex = getRegex(regex_, flags_);
ret.set_int(str_ ? str_.search(regex) : -1);
};
SysExps.prototype.regexreplace = function (ret, str_, regex_, flags_, replace_)
{
var regex = getRegex(regex_, flags_);
ret.set_string(str_ ? str_.replace(regex, replace_) : "");
};
var regexMatches = [];
var lastMatchesStr = "";
var lastMatchesRegex = "";
var lastMatchesFlags = "";
function updateRegexMatches(str_, regex_, flags_)
{
if (str_ === lastMatchesStr && regex_ === lastMatchesRegex && flags_ === lastMatchesFlags)
return;
var regex = getRegex(regex_, flags_);
regexMatches = str_.match(regex);
lastMatchesStr = str_;
lastMatchesRegex = regex_;
lastMatchesFlags = flags_;
};
SysExps.prototype.regexmatchcount = function (ret, str_, regex_, flags_)
{
var regex = getRegex(regex_, flags_);
updateRegexMatches(str_, regex_, flags_);
ret.set_int(regexMatches ? regexMatches.length : 0);
};
SysExps.prototype.regexmatchat = function (ret, str_, regex_, flags_, index_)
{
index_ = Math.floor(index_);
var regex = getRegex(regex_, flags_);
updateRegexMatches(str_, regex_, flags_);
if (!regexMatches || index_ < 0 || index_ >= regexMatches.length)
ret.set_string("");
else
ret.set_string(regexMatches[index_]);
};
SysExps.prototype.infinity = function (ret)
{
ret.set_float(Infinity);
};
sysProto.exps = new SysExps();
sysProto.runWaits = function ()
{
var i, j, len, w, k, s, ss;
var evinfo = this.runtime.getCurrentEventStack();
for (i = 0, len = this.waits.length; i < len; i++)
{
w = this.waits[i];
if (w.time > this.runtime.kahanTime.sum)
continue;
evinfo.current_event = w.ev;
evinfo.actindex = w.actindex;
evinfo.cndindex = 0;
for (k in w.sols)
{
if (w.sols.hasOwnProperty(k))
{
s = this.runtime.types_by_index[parseInt(k, 10)].getCurrentSol();
ss = w.sols[k];
s.select_all = ss.sa;
cr.shallowAssignArray(s.instances, ss.insts);
freeSolStateObject(ss);
}
}
w.ev.resume_actions_and_subevents();
this.runtime.clearSol(w.solModifiers);
w.deleteme = true;
}
for (i = 0, j = 0, len = this.waits.length; i < len; i++)
{
w = this.waits[i];
this.waits[j] = w;
if (w.deleteme)
freeWaitObject(w);
else
j++;
}
this.waits.length = j;
};
}());
;
(function () {
cr.add_common_aces = function (m)
{
var pluginProto = m[0].prototype;
var singleglobal_ = m[1];
var position_aces = m[3];
var size_aces = m[4];
var angle_aces = m[5];
var appearance_aces = m[6];
var zorder_aces = m[7];
var effects_aces = m[8];
if (!pluginProto.cnds)
pluginProto.cnds = {};
if (!pluginProto.acts)
pluginProto.acts = {};
if (!pluginProto.exps)
pluginProto.exps = {};
var cnds = pluginProto.cnds;
var acts = pluginProto.acts;
var exps = pluginProto.exps;
if (position_aces)
{
cnds.CompareX = function (cmp, x)
{
return cr.do_cmp(this.x, cmp, x);
};
cnds.CompareY = function (cmp, y)
{
return cr.do_cmp(this.y, cmp, y);
};
cnds.IsOnScreen = function ()
{
var layer = this.layer;
this.update_bbox();
var bbox = this.bbox;
return !(bbox.right < layer.viewLeft || bbox.bottom < layer.viewTop || bbox.left > layer.viewRight || bbox.top > layer.viewBottom);
};
cnds.IsOutsideLayout = function ()
{
this.update_bbox();
var bbox = this.bbox;
var layout = this.runtime.running_layout;
return (bbox.right < 0 || bbox.bottom < 0 || bbox.left > layout.width || bbox.top > layout.height);
};
cnds.PickDistance = function (which, x, y)
{
var sol = this.getCurrentSol();
var instances = sol.getObjects();
if (!instances.length)
return false;
var inst = instances[0];
var pickme = inst;
var dist = cr.distanceTo(inst.x, inst.y, x, y);
var i, len, d;
for (i = 1, len = instances.length; i < len; i++)
{
inst = instances[i];
d = cr.distanceTo(inst.x, inst.y, x, y);
if ((which === 0 && d < dist) || (which === 1 && d > dist))
{
dist = d;
pickme = inst;
}
}
sol.pick_one(pickme);
return true;
};
acts.SetX = function (x)
{
if (this.x !== x)
{
this.x = x;
this.set_bbox_changed();
}
};
acts.SetY = function (y)
{
if (this.y !== y)
{
this.y = y;
this.set_bbox_changed();
}
};
acts.SetPos = function (x, y)
{
if (this.x !== x || this.y !== y)
{
this.x = x;
this.y = y;
this.set_bbox_changed();
}
};
acts.SetPosToObject = function (obj, imgpt)
{
var inst = obj.getPairedInstance(this);
if (!inst)
return;
var newx, newy;
if (inst.getImagePoint)
{
newx = inst.getImagePoint(imgpt, true);
newy = inst.getImagePoint(imgpt, false);
}
else
{
newx = inst.x;
newy = inst.y;
}
if (this.x !== newx || this.y !== newy)
{
this.x = newx;
this.y = newy;
this.set_bbox_changed();
}
};
acts.MoveForward = function (dist)
{
if (dist !== 0)
{
this.x += Math.cos(this.angle) * dist;
this.y += Math.sin(this.angle) * dist;
this.set_bbox_changed();
}
};
acts.MoveAtAngle = function (a, dist)
{
if (dist !== 0)
{
this.x += Math.cos(cr.to_radians(a)) * dist;
this.y += Math.sin(cr.to_radians(a)) * dist;
this.set_bbox_changed();
}
};
exps.X = function (ret)
{
ret.set_float(this.x);
};
exps.Y = function (ret)
{
ret.set_float(this.y);
};
exps.dt = function (ret)
{
ret.set_float(this.runtime.getDt(this));
};
}
if (size_aces)
{
cnds.CompareWidth = function (cmp, w)
{
return cr.do_cmp(this.width, cmp, w);
};
cnds.CompareHeight = function (cmp, h)
{
return cr.do_cmp(this.height, cmp, h);
};
acts.SetWidth = function (w)
{
if (this.width !== w)
{
this.width = w;
this.set_bbox_changed();
}
};
acts.SetHeight = function (h)
{
if (this.height !== h)
{
this.height = h;
this.set_bbox_changed();
}
};
acts.SetSize = function (w, h)
{
if (this.width !== w || this.height !== h)
{
this.width = w;
this.height = h;
this.set_bbox_changed();
}
};
exps.Width = function (ret)
{
ret.set_float(this.width);
};
exps.Height = function (ret)
{
ret.set_float(this.height);
};
exps.BBoxLeft = function (ret)
{
this.update_bbox();
ret.set_float(this.bbox.left);
};
exps.BBoxTop = function (ret)
{
this.update_bbox();
ret.set_float(this.bbox.top);
};
exps.BBoxRight = function (ret)
{
this.update_bbox();
ret.set_float(this.bbox.right);
};
exps.BBoxBottom = function (ret)
{
this.update_bbox();
ret.set_float(this.bbox.bottom);
};
}
if (angle_aces)
{
cnds.AngleWithin = function (within, a)
{
return cr.angleDiff(this.angle, cr.to_radians(a)) <= cr.to_radians(within);
};
cnds.IsClockwiseFrom = function (a)
{
return cr.angleClockwise(this.angle, cr.to_radians(a));
};
cnds.IsBetweenAngles = function (a, b)
{
var lower = cr.to_clamped_radians(a);
var upper = cr.to_clamped_radians(b);
var angle = cr.clamp_angle(this.angle);
var obtuse = (!cr.angleClockwise(upper, lower));
if (obtuse)
return !(!cr.angleClockwise(angle, lower) && cr.angleClockwise(angle, upper));
else
return cr.angleClockwise(angle, lower) && !cr.angleClockwise(angle, upper);
};
acts.SetAngle = function (a)
{
var newangle = cr.to_radians(cr.clamp_angle_degrees(a));
if (isNaN(newangle))
return;
if (this.angle !== newangle)
{
this.angle = newangle;
this.set_bbox_changed();
}
};
acts.RotateClockwise = function (a)
{
if (a !== 0 && !isNaN(a))
{
this.angle += cr.to_radians(a);
this.angle = cr.clamp_angle(this.angle);
this.set_bbox_changed();
}
};
acts.RotateCounterclockwise = function (a)
{
if (a !== 0 && !isNaN(a))
{
this.angle -= cr.to_radians(a);
this.angle = cr.clamp_angle(this.angle);
this.set_bbox_changed();
}
};
acts.RotateTowardAngle = function (amt, target)
{
var newangle = cr.angleRotate(this.angle, cr.to_radians(target), cr.to_radians(amt));
if (isNaN(newangle))
return;
if (this.angle !== newangle)
{
this.angle = newangle;
this.set_bbox_changed();
}
};
acts.RotateTowardPosition = function (amt, x, y)
{
var dx = x - this.x;
var dy = y - this.y;
var target = Math.atan2(dy, dx);
var newangle = cr.angleRotate(this.angle, target, cr.to_radians(amt));
if (isNaN(newangle))
return;
if (this.angle !== newangle)
{
this.angle = newangle;
this.set_bbox_changed();
}
};
acts.SetTowardPosition = function (x, y)
{
var dx = x - this.x;
var dy = y - this.y;
var newangle = Math.atan2(dy, dx);
if (isNaN(newangle))
return;
if (this.angle !== newangle)
{
this.angle = newangle;
this.set_bbox_changed();
}
};
exps.Angle = function (ret)
{
ret.set_float(cr.to_clamped_degrees(this.angle));
};
}
if (!singleglobal_)
{
cnds.CompareInstanceVar = function (iv, cmp, val)
{
return cr.do_cmp(this.instance_vars[iv], cmp, val);
};
cnds.IsBoolInstanceVarSet = function (iv)
{
return this.instance_vars[iv];
};
cnds.PickInstVarHiLow = function (which, iv)
{
var sol = this.getCurrentSol();
var instances = sol.getObjects();
if (!instances.length)
return false;
var inst = instances[0];
var pickme = inst;
var val = inst.instance_vars[iv];
var i, len, v;
for (i = 1, len = instances.length; i < len; i++)
{
inst = instances[i];
v = inst.instance_vars[iv];
if ((which === 0 && v < val) || (which === 1 && v > val))
{
val = v;
pickme = inst;
}
}
sol.pick_one(pickme);
return true;
};
cnds.PickByUID = function (u)
{
var i, len, j, inst, families, instances, sol;
var cnd = this.runtime.getCurrentCondition();
if (cnd.inverted)
{
sol = this.getCurrentSol();
if (sol.select_all)
{
sol.select_all = false;
sol.instances.length = 0;
sol.else_instances.length = 0;
instances = this.instances;
for (i = 0, len = instances.length; i < len; i++)
{
inst = instances[i];
if (inst.uid === u)
sol.else_instances.push(inst);
else
sol.instances.push(inst);
}
this.applySolToContainer();
return !!sol.instances.length;
}
else
{
for (i = 0, j = 0, len = sol.instances.length; i < len; i++)
{
inst = sol.instances[i];
sol.instances[j] = inst;
if (inst.uid === u)
{
sol.else_instances.push(inst);
}
else
j++;
}
sol.instances.length = j;
this.applySolToContainer();
return !!sol.instances.length;
}
}
else
{
inst = this.runtime.getObjectByUID(u);
if (!inst)
return false;
sol = this.getCurrentSol();
if (!sol.select_all && sol.instances.indexOf(inst) === -1)
return false; // not picked
if (this.is_family)
{
families = inst.type.families;
for (i = 0, len = families.length; i < len; i++)
{
if (families[i] === this)
{
sol.pick_one(inst);
this.applySolToContainer();
return true;
}
}
}
else if (inst.type === this)
{
sol.pick_one(inst);
this.applySolToContainer();
return true;
}
return false;
}
};
cnds.OnCreated = function ()
{
return true;
};
cnds.OnDestroyed = function ()
{
return true;
};
acts.SetInstanceVar = function (iv, val)
{
var myinstvars = this.instance_vars;
if (cr.is_number(myinstvars[iv]))
{
if (cr.is_number(val))
myinstvars[iv] = val;
else
myinstvars[iv] = parseFloat(val);
}
else if (cr.is_string(myinstvars[iv]))
{
if (cr.is_string(val))
myinstvars[iv] = val;
else
myinstvars[iv] = val.toString();
}
else
;
};
acts.AddInstanceVar = function (iv, val)
{
var myinstvars = this.instance_vars;
if (cr.is_number(myinstvars[iv]))
{
if (cr.is_number(val))
myinstvars[iv] += val;
else
myinstvars[iv] += parseFloat(val);
}
else if (cr.is_string(myinstvars[iv]))
{
if (cr.is_string(val))
myinstvars[iv] += val;
else
myinstvars[iv] += val.toString();
}
else
;
};
acts.SubInstanceVar = function (iv, val)
{
var myinstvars = this.instance_vars;
if (cr.is_number(myinstvars[iv]))
{
if (cr.is_number(val))
myinstvars[iv] -= val;
else
myinstvars[iv] -= parseFloat(val);
}
else
;
};
acts.SetBoolInstanceVar = function (iv, val)
{
this.instance_vars[iv] = val ? 1 : 0;
};
acts.ToggleBoolInstanceVar = function (iv)
{
this.instance_vars[iv] = 1 - this.instance_vars[iv];
};
acts.Destroy = function ()
{
this.runtime.DestroyInstance(this);
};
if (!acts.LoadFromJsonString)
{
acts.LoadFromJsonString = function (str_)
{
var o, i, len, binst;
try {
o = JSON.parse(str_);
}
catch (e) {
return;
}
this.runtime.loadInstanceFromJSON(this, o, true);
if (this.afterLoad)
this.afterLoad();
if (this.behavior_insts)
{
for (i = 0, len = this.behavior_insts.length; i < len; ++i)
{
binst = this.behavior_insts[i];
if (binst.afterLoad)
binst.afterLoad();
}
}
};
}
exps.Count = function (ret)
{
var count = ret.object_class.instances.length;
var i, len, inst;
for (i = 0, len = this.runtime.createRow.length; i < len; i++)
{
inst = this.runtime.createRow[i];
if (ret.object_class.is_family)
{
if (inst.type.families.indexOf(ret.object_class) >= 0)
count++;
}
else
{
if (inst.type === ret.object_class)
count++;
}
}
ret.set_int(count);
};
exps.PickedCount = function (ret)
{
ret.set_int(ret.object_class.getCurrentSol().getObjects().length);
};
exps.UID = function (ret)
{
ret.set_int(this.uid);
};
exps.IID = function (ret)
{
ret.set_int(this.get_iid());
};
if (!exps.AsJSON)
{
exps.AsJSON = function (ret)
{
ret.set_string(JSON.stringify(this.runtime.saveInstanceToJSON(this, true)));
};
}
}
if (appearance_aces)
{
cnds.IsVisible = function ()
{
return this.visible;
};
acts.SetVisible = function (v)
{
if (!v !== !this.visible)
{
this.visible = v;
this.runtime.redraw = true;
}
};
cnds.CompareOpacity = function (cmp, x)
{
return cr.do_cmp(cr.round6dp(this.opacity * 100), cmp, x);
};
acts.SetOpacity = function (x)
{
var new_opacity = x / 100.0;
if (new_opacity < 0)
new_opacity = 0;
else if (new_opacity > 1)
new_opacity = 1;
if (new_opacity !== this.opacity)
{
this.opacity = new_opacity;
this.runtime.redraw = true;
}
};
exps.Opacity = function (ret)
{
ret.set_float(cr.round6dp(this.opacity * 100.0));
};
}
if (zorder_aces)
{
cnds.IsOnLayer = function (layer_)
{
if (!layer_)
return false;
return this.layer === layer_;
};
cnds.PickTopBottom = function (which_)
{
var sol = this.getCurrentSol();
var instances = sol.getObjects();
if (!instances.length)
return false;
var inst = instances[0];
var pickme = inst;
var i, len;
for (i = 1, len = instances.length; i < len; i++)
{
inst = instances[i];
if (which_ === 0)
{
if (inst.layer.index > pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() > pickme.get_zindex()))
{
pickme = inst;
}
}
else
{
if (inst.layer.index < pickme.layer.index || (inst.layer.index === pickme.layer.index && inst.get_zindex() < pickme.get_zindex()))
{
pickme = inst;
}
}
}
sol.pick_one(pickme);
return true;
};
acts.MoveToTop = function ()
{
var zindex = this.get_zindex();
if (zindex === this.layer.instances.length - 1)
return;
cr.arrayRemove(this.layer.instances, zindex);
this.layer.instances.push(this);
this.runtime.redraw = true;
this.layer.zindices_stale = true;
};
acts.MoveToBottom = function ()
{
var zindex = this.get_zindex();
if (zindex === 0)
return;
cr.arrayRemove(this.layer.instances, zindex);
this.layer.instances.unshift(this);
this.runtime.redraw = true;
this.layer.zindices_stale = true;
};
acts.MoveToLayer = function (layerMove)
{
if (!layerMove || layerMove == this.layer)
return;
cr.arrayRemove(this.layer.instances, this.get_zindex());
this.layer.zindices_stale = true;
this.layer = layerMove;
this.zindex = layerMove.instances.length;
layerMove.instances.push(this);
this.runtime.redraw = true;
};
acts.ZMoveToObject = function (where_, obj_)
{
var isafter = (where_ === 0);
if (!obj_)
return;
var other = obj_.getFirstPicked(this);
if (!other || other.uid === this.uid)
return;
if (this.layer.index !== other.layer.index)
{
cr.arrayRemove(this.layer.instances, this.get_zindex());
this.layer.zindices_stale = true;
this.layer = other.layer;
this.zindex = other.layer.instances.length;
other.layer.instances.push(this);
}
var myZ = this.get_zindex();
var insertZ = other.get_zindex();
cr.arrayRemove(this.layer.instances, myZ);
if (myZ < insertZ)
insertZ--;
if (isafter)
insertZ++;
if (insertZ === this.layer.instances.length)
this.layer.instances.push(this);
else
this.layer.instances.splice(insertZ, 0, this);
this.layer.zindices_stale = true;
this.runtime.redraw = true;
};
exps.LayerNumber = function (ret)
{
ret.set_int(this.layer.number);
};
exps.LayerName = function (ret)
{
ret.set_string(this.layer.name);
};
exps.ZIndex = function (ret)
{
ret.set_int(this.get_zindex());
};
}
if (effects_aces)
{
acts.SetEffectEnabled = function (enable_, effectname_)
{
if (!this.runtime.glwrap)
return;
var i = this.type.getEffectIndexByName(effectname_);
if (i < 0)
return; // effect name not found
var enable = (enable_ === 1);
if (this.active_effect_flags[i] === enable)
return; // no change
this.active_effect_flags[i] = enable;
this.updateActiveEffects();
this.runtime.redraw = true;
};
acts.SetEffectParam = function (effectname_, index_, value_)
{
if (!this.runtime.glwrap)
return;
var i = this.type.getEffectIndexByName(effectname_);
if (i < 0)
return; // effect name not found
var et = this.type.effect_types[i];
var params = this.effect_params[i];
index_ = Math.floor(index_);
if (index_ < 0 || index_ >= params.length)
return; // effect index out of bounds
if (this.runtime.glwrap.getProgramParameterType(et.shaderindex, index_) === 1)
value_ /= 100.0;
if (params[index_] === value_)
return; // no change
params[index_] = value_;
if (et.active)
this.runtime.redraw = true;
};
}
};
cr.set_bbox_changed = function ()
{
this.bbox_changed = true; // will recreate next time box requested
this.type.any_bbox_changed = true; // avoid unnecessary updateAllBBox() calls
this.runtime.redraw = true; // assume runtime needs to redraw
var i, len, callbacks = this.bbox_changed_callbacks;
for (i = 0, len = callbacks.length; i < len; ++i)
{
callbacks[i](this);
}
};
cr.add_bbox_changed_callback = function (f)
{
if (f)
{
this.bbox_changed_callbacks.push(f);
}
};
var tmprc = new cr.rect(0, 0, 0, 0);
cr.update_bbox = function ()
{
if (!this.bbox_changed)
return; // bounding box not changed
var bbox = this.bbox;
var bquad = this.bquad;
bbox.set(this.x, this.y, this.x + this.width, this.y + this.height);
bbox.offset(-this.hotspotX * this.width, -this.hotspotY * this.height);
if (!this.angle)
{
bquad.set_from_rect(bbox); // make bounding quad from box
}
else
{
bbox.offset(-this.x, -this.y); // translate to origin
bquad.set_from_rotated_rect(bbox, this.angle); // rotate around origin
bquad.offset(this.x, this.y); // translate back to original position
bquad.bounding_box(bbox);
}
bbox.normalize();
this.bbox_changed = false; // bounding box up to date
if (this.collisionsEnabled)
{
var mygrid = this.type.collision_grid;
var collcells = this.collcells;
tmprc.set(mygrid.XToCell(bbox.left), mygrid.YToCell(bbox.top), mygrid.XToCell(bbox.right), mygrid.YToCell(bbox.bottom));
if (!collcells.equals(tmprc))
{
if (collcells.right < collcells.left)
mygrid.update(this, null, tmprc); // first insertion with invalid rect: don't provide old range
else
mygrid.update(this, collcells, tmprc);
collcells.copy(tmprc);
}
}
};
cr.inst_contains_pt = function (x, y)
{
if (!this.bbox.contains_pt(x, y))
return false;
if (!this.bquad.contains_pt(x, y))
return false;
if (this.collision_poly && !this.collision_poly.is_empty())
{
this.collision_poly.cache_poly(this.width, this.height, this.angle);
return this.collision_poly.contains_pt(x - this.x, y - this.y);
}
else
return true;
};
cr.inst_get_iid = function ()
{
this.type.updateIIDs();
return this.iid;
};
cr.inst_get_zindex = function ()
{
this.layer.updateZIndices();
return this.zindex;
};
cr.inst_updateActiveEffects = function ()
{
this.active_effect_types.length = 0;
var i, len, et, inst;
for (i = 0, len = this.active_effect_flags.length; i < len; i++)
{
if (this.active_effect_flags[i])
this.active_effect_types.push(this.type.effect_types[i]);
}
this.uses_shaders = !!this.active_effect_types.length;
};
cr.inst_toString = function ()
{
return "Inst" + this.puid;
};
cr.type_getFirstPicked = function (frominst)
{
if (frominst && frominst.is_contained && frominst.type != this)
{
var i, len, s;
for (i = 0, len = frominst.siblings.length; i < len; i++)
{
s = frominst.siblings[i];
if (s.type == this)
return s;
}
}
var instances = this.getCurrentSol().getObjects();
if (instances.length)
return instances[0];
else
return null;
};
cr.type_getPairedInstance = function (inst)
{
var instances = this.getCurrentSol().getObjects();
if (instances.length)
return instances[inst.get_iid() % instances.length];
else
return null;
};
cr.type_updateIIDs = function ()
{
if (!this.stale_iids || this.is_family)
return; // up to date or is family - don't want family to overwrite IIDs
var i, len;
for (i = 0, len = this.instances.length; i < len; i++)
this.instances[i].iid = i;
var next_iid = i;
var createRow = this.runtime.createRow;
for (i = 0, len = createRow.length; i < len; ++i)
{
if (createRow[i].type === this)
createRow[i].iid = next_iid++;
}
this.stale_iids = false;
};
cr.type_getInstanceByIID = function (i)
{
if (i < this.instances.length)
return this.instances[i];
i -= this.instances.length;
var createRow = this.runtime.createRow;
var j, lenj;
for (j = 0, lenj = createRow.length; j < lenj; ++j)
{
if (createRow[j].type === this)
{
if (i === 0)
return createRow[j];
--i;
}
}
;
return null;
};
cr.type_getCurrentSol = function ()
{
return this.solstack[this.cur_sol];
};
cr.type_pushCleanSol = function ()
{
this.cur_sol++;
if (this.cur_sol === this.solstack.length)
this.solstack.push(new cr.selection(this));
else
this.solstack[this.cur_sol].select_all = true; // else clear next SOL
};
cr.type_pushCopySol = function ()
{
this.cur_sol++;
if (this.cur_sol === this.solstack.length)
this.solstack.push(new cr.selection(this));
var clonesol = this.solstack[this.cur_sol];
var prevsol = this.solstack[this.cur_sol - 1];
if (prevsol.select_all)
clonesol.select_all = true;
else
{
clonesol.select_all = false;
cr.shallowAssignArray(clonesol.instances, prevsol.instances);
cr.shallowAssignArray(clonesol.else_instances, prevsol.else_instances);
}
};
cr.type_popSol = function ()
{
;
this.cur_sol--;
};
cr.type_getBehaviorByName = function (behname)
{
var i, len, j, lenj, f, index = 0;
if (!this.is_family)
{
for (i = 0, len = this.families.length; i < len; i++)
{
f = this.families[i];
for (j = 0, lenj = f.behaviors.length; j < lenj; j++)
{
if (behname === f.behaviors[j].name)
{
this.extra.lastBehIndex = index;
return f.behaviors[j];
}
index++;
}
}
}
for (i = 0, len = this.behaviors.length; i < len; i++) {
if (behname === this.behaviors[i].name)
{
this.extra.lastBehIndex = index;
return this.behaviors[i];
}
index++;
}
return null;
};
cr.type_getBehaviorIndexByName = function (behname)
{
var b = this.getBehaviorByName(behname);
if (b)
return this.extra.lastBehIndex;
else
return -1;
};
cr.type_getEffectIndexByName = function (name_)
{
var i, len;
for (i = 0, len = this.effect_types.length; i < len; i++)
{
if (this.effect_types[i].name === name_)
return i;
}
return -1;
};
cr.type_applySolToContainer = function ()
{
if (!this.is_contained || this.is_family)
return;
var i, len, j, lenj, t, sol, sol2;
this.updateIIDs();
sol = this.getCurrentSol();
var select_all = sol.select_all;
var es = this.runtime.getCurrentEventStack();
var orblock = es && es.current_event && es.current_event.orblock;
for (i = 0, len = this.container.length; i < len; i++)
{
t = this.container[i];
if (t === this)
continue;
t.updateIIDs();
sol2 = t.getCurrentSol();
sol2.select_all = select_all;
if (!select_all)
{
sol2.instances.length = sol.instances.length;
for (j = 0, lenj = sol.instances.length; j < lenj; j++)
sol2.instances[j] = t.getInstanceByIID(sol.instances[j].iid);
if (orblock)
{
sol2.else_instances.length = sol.else_instances.length;
for (j = 0, lenj = sol.else_instances.length; j < lenj; j++)
sol2.else_instances[j] = t.getInstanceByIID(sol.else_instances[j].iid);
}
}
}
};
cr.type_toString = function ()
{
return "Type" + this.sid;
};
cr.do_cmp = function (x, cmp, y)
{
if (typeof x === "undefined" || typeof y === "undefined")
return false;
switch (cmp)
{
case 0: // equal
return x === y;
case 1: // not equal
return x !== y;
case 2: // less
return x < y;
case 3: // less/equal
return x <= y;
case 4: // greater
return x > y;
case 5: // greater/equal
return x >= y;
default:
;
return false;
}
};
})();
cr.shaders = {};
;
;
cr.plugins_.Arr = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.Arr.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
};
var instanceProto = pluginProto.Instance.prototype;
var arrCache = [];
function allocArray()
{
if (arrCache.length)
return arrCache.pop();
else
return [];
};
if (!Array.isArray)
{
Array.isArray = function (vArg) {
return Object.prototype.toString.call(vArg) === "[object Array]";
};
}
function freeArray(a)
{
var i, len;
for (i = 0, len = a.length; i < len; i++)
{
if (Array.isArray(a[i]))
freeArray(a[i]);
}
a.length = 0;
arrCache.push(a);
};
instanceProto.onCreate = function()
{
this.cx = this.properties[0];
this.cy = this.properties[1];
this.cz = this.properties[2];
if (!this.recycled)
this.arr = allocArray();
var a = this.arr;
a.length = this.cx;
var x, y, z;
for (x = 0; x < this.cx; x++)
{
if (!a[x])
a[x] = allocArray();
a[x].length = this.cy;
for (y = 0; y < this.cy; y++)
{
if (!a[x][y])
a[x][y] = allocArray();
a[x][y].length = this.cz;
for (z = 0; z < this.cz; z++)
a[x][y][z] = 0;
}
}
this.forX = 0;
this.forY = 0;
this.forZ = 0;
};
instanceProto.onDestroy = function ()
{
var x;
for (x = 0; x < this.cx; x++)
freeArray(this.arr[x]); // will recurse down and recycle other arrays
this.arr.length = 0;
};
instanceProto.at = function (x, y, z)
{
x = Math.floor(x);
y = Math.floor(y);
z = Math.floor(z);
if (isNaN(x) || x < 0 || x > this.cx - 1)
return 0;
if (isNaN(y) || y < 0 || y > this.cy - 1)
return 0;
if (isNaN(z) || z < 0 || z > this.cz - 1)
return 0;
return this.arr[x][y][z];
};
instanceProto.set = function (x, y, z, val)
{
x = Math.floor(x);
y = Math.floor(y);
z = Math.floor(z);
if (isNaN(x) || x < 0 || x > this.cx - 1)
return;
if (isNaN(y) || y < 0 || y > this.cy - 1)
return;
if (isNaN(z) || z < 0 || z > this.cz - 1)
return;
this.arr[x][y][z] = val;
};
instanceProto.getAsJSON = function ()
{
return JSON.stringify({
"c2array": true,
"size": [this.cx, this.cy, this.cz],
"data": this.arr
});
};
instanceProto.saveToJSON = function ()
{
return {
"size": [this.cx, this.cy, this.cz],
"data": this.arr
};
};
instanceProto.loadFromJSON = function (o)
{
var sz = o["size"];
this.cx = sz[0];
this.cy = sz[1];
this.cz = sz[2];
this.arr = o["data"];
};
instanceProto.setSize = function (w, h, d)
{
if (w < 0) w = 0;
if (h < 0) h = 0;
if (d < 0) d = 0;
if (this.cx === w && this.cy === h && this.cz === d)
return; // no change
this.cx = w;
this.cy = h;
this.cz = d;
var x, y, z;
var a = this.arr;
a.length = w;
for (x = 0; x < this.cx; x++)
{
if (cr.is_undefined(a[x]))
a[x] = allocArray();
a[x].length = h;
for (y = 0; y < this.cy; y++)
{
if (cr.is_undefined(a[x][y]))
a[x][y] = allocArray();
a[x][y].length = d;
for (z = 0; z < this.cz; z++)
{
if (cr.is_undefined(a[x][y][z]))
a[x][y][z] = 0;
}
}
}
};
function Cnds() {};
Cnds.prototype.CompareX = function (x, cmp, val)
{
return cr.do_cmp(this.at(x, 0, 0), cmp, val);
};
Cnds.prototype.CompareXY = function (x, y, cmp, val)
{
return cr.do_cmp(this.at(x, y, 0), cmp, val);
};
Cnds.prototype.CompareXYZ = function (x, y, z, cmp, val)
{
return cr.do_cmp(this.at(x, y, z), cmp, val);
};
instanceProto.doForEachTrigger = function (current_event)
{
this.runtime.pushCopySol(current_event.solModifiers);
current_event.retrigger();
this.runtime.popSol(current_event.solModifiers);
};
Cnds.prototype.ArrForEach = function (dims)
{
var current_event = this.runtime.getCurrentEventStack().current_event;
this.forX = 0;
this.forY = 0;
this.forZ = 0;
switch (dims) {
case 0:
for (this.forX = 0; this.forX < this.cx; this.forX++)
{
for (this.forY = 0; this.forY < this.cy; this.forY++)
{
for (this.forZ = 0; this.forZ < this.cz; this.forZ++)
{
this.doForEachTrigger(current_event);
}
}
}
break;
case 1:
for (this.forX = 0; this.forX < this.cx; this.forX++)
{
for (this.forY = 0; this.forY < this.cy; this.forY++)
{
this.doForEachTrigger(current_event);
}
}
break;
case 2:
for (this.forX = 0; this.forX < this.cx; this.forX++)
{
this.doForEachTrigger(current_event);
}
break;
}
this.forX = 0;
this.forY = 0;
this.forZ = 0;
return false;
};
Cnds.prototype.CompareCurrent = function (cmp, val)
{
return cr.do_cmp(this.at(this.forX, this.forY, this.forZ), cmp, val);
};
Cnds.prototype.Contains = function(val)
{
var x, y, z;
for (x = 0; x < this.cx; x++)
{
for (y = 0; y < this.cy; y++)
{
for (z = 0; z < this.cz; z++)
{
if (this.arr[x][y][z] === val)
return true;
}
}
}
return false;
};
Cnds.prototype.IsEmpty = function ()
{
return this.cx === 0 || this.cy === 0 || this.cz === 0;
};
pluginProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.Clear = function ()
{
var x, y, z;
for (x = 0; x < this.cx; x++)
for (y = 0; y < this.cy; y++)
for (z = 0; z < this.cz; z++)
this.arr[x][y][z] = 0;
};
Acts.prototype.SetSize = function (w, h, d)
{
this.setSize(w, h, d);
};
Acts.prototype.SetX = function (x, val)
{
this.set(x, 0, 0, val);
};
Acts.prototype.SetXY = function (x, y, val)
{
this.set(x, y, 0, val);
};
Acts.prototype.SetXYZ = function (x, y, z, val)
{
this.set(x, y, z, val);
};
Acts.prototype.Push = function (where, value, axis)
{
var x = 0, y = 0, z = 0;
var a = this.arr;
switch (axis) {
case 0: // X axis
if (where === 0) // back
{
x = a.length;
a.push(allocArray());
}
else // front
{
x = 0;
a.unshift(allocArray());
}
a[x].length = this.cy;
for ( ; y < this.cy; y++)
{
a[x][y] = allocArray();
a[x][y].length = this.cz;
for (z = 0; z < this.cz; z++)
a[x][y][z] = value;
}
this.cx++;
break;
case 1: // Y axis
for ( ; x < this.cx; x++)
{
if (where === 0) // back
{
y = a[x].length;
a[x].push(allocArray());
}
else // front
{
y = 0;
a[x].unshift(allocArray());
}
a[x][y].length = this.cz;
for (z = 0; z < this.cz; z++)
a[x][y][z] = value;
}
this.cy++;
break;
case 2: // Z axis
for ( ; x < this.cx; x++)
{
for (y = 0; y < this.cy; y++)
{
if (where === 0) // back
{
a[x][y].push(value);
}
else // front
{
a[x][y].unshift(value);
}
}
}
this.cz++;
break;
}
};
Acts.prototype.Pop = function (where, axis)
{
var x = 0, y = 0, z = 0;
var a = this.arr;
switch (axis) {
case 0: // X axis
if (this.cx === 0)
break;
if (where === 0) // back
{
freeArray(a.pop());
}
else // front
{
freeArray(a.shift());
}
this.cx--;
break;
case 1: // Y axis
if (this.cy === 0)
break;
for ( ; x < this.cx; x++)
{
if (where === 0) // back
{
freeArray(a[x].pop());
}
else // front
{
freeArray(a[x].shift());
}
}
this.cy--;
break;
case 2: // Z axis
if (this.cz === 0)
break;
for ( ; x < this.cx; x++)
{
for (y = 0; y < this.cy; y++)
{
if (where === 0) // back
{
a[x][y].pop();
}
else // front
{
a[x][y].shift();
}
}
}
this.cz--;
break;
}
};
Acts.prototype.Reverse = function (axis)
{
var x = 0, y = 0, z = 0;
var a = this.arr;
if (this.cx === 0 || this.cy === 0 || this.cz === 0)
return; // no point reversing empty array
switch (axis) {
case 0: // X axis
a.reverse();
break;
case 1: // Y axis
for ( ; x < this.cx; x++)
a[x].reverse();
break;
case 2: // Z axis
for ( ; x < this.cx; x++)
for (y = 0; y < this.cy; y++)
a[x][y].reverse();
this.cz--;
break;
}
};
function compareValues(va, vb)
{
if (cr.is_number(va) && cr.is_number(vb))
return va - vb;
else
{
var sa = "" + va;
var sb = "" + vb;
if (sa < sb)
return -1;
else if (sa > sb)
return 1;
else
return 0;
}
}
Acts.prototype.Sort = function (axis)
{
var x = 0, y = 0, z = 0;
var a = this.arr;
if (this.cx === 0 || this.cy === 0 || this.cz === 0)
return; // no point sorting empty array
switch (axis) {
case 0: // X axis
a.sort(function (a, b) {
return compareValues(a[0][0], b[0][0]);
});
break;
case 1: // Y axis
for ( ; x < this.cx; x++)
{
a[x].sort(function (a, b) {
return compareValues(a[0], b[0]);
});
}
break;
case 2: // Z axis
for ( ; x < this.cx; x++)
{
for (y = 0; y < this.cy; y++)
{
a[x][y].sort(compareValues);
}
}
break;
}
};
Acts.prototype.Delete = function (index, axis)
{
var x = 0, y = 0, z = 0;
index = Math.floor(index);
var a = this.arr;
if (index < 0)
return;
switch (axis) {
case 0: // X axis
if (index >= this.cx)
break;
freeArray(a[index]);
a.splice(index, 1);
this.cx--;
break;
case 1: // Y axis
if (index >= this.cy)
break;
for ( ; x < this.cx; x++)
{
freeArray(a[x][index]);
a[x].splice(index, 1);
}
this.cy--;
break;
case 2: // Z axis
if (index >= this.cz)
break;
for ( ; x < this.cx; x++)
{
for (y = 0; y < this.cy; y++)
{
a[x][y].splice(index, 1);
}
}
this.cz--;
break;
}
};
Acts.prototype.Insert = function (value, index, axis)
{
var x = 0, y = 0, z = 0;
index = Math.floor(index);
var a = this.arr;
if (index < 0)
return;
switch (axis) {
case 0: // X axis
if (index > this.cx)
return;
x = index;
a.splice(x, 0, allocArray());
a[x].length = this.cy;
for ( ; y < this.cy; y++)
{
a[x][y] = allocArray();
a[x][y].length = this.cz;
for (z = 0; z < this.cz; z++)
a[x][y][z] = value;
}
this.cx++;
break;
case 1: // Y axis
if (index > this.cy)
return;
for ( ; x < this.cx; x++)
{
y = index;
a[x].splice(y, 0, allocArray());
a[x][y].length = this.cz;
for (z = 0; z < this.cz; z++)
a[x][y][z] = value;
}
this.cy++;
break;
case 2: // Z axis
if (index > this.cz)
return;
for ( ; x < this.cx; x++)
{
for (y = 0; y < this.cy; y++)
{
a[x][y].splice(index, 0, value);
}
}
this.cz++;
break;
}
};
Acts.prototype.JSONLoad = function (json_)
{
var o;
try {
o = JSON.parse(json_);
}
catch(e) { return; }
if (!o["c2array"]) // presumably not a c2array object
return;
var sz = o["size"];
this.cx = sz[0];
this.cy = sz[1];
this.cz = sz[2];
this.arr = o["data"];
};
Acts.prototype.JSONDownload = function (filename)
{
var a = document.createElement("a");
if (typeof a.download === "undefined")
{
var str = 'data:text/html,' + encodeURIComponent("Download link
");
window.open(str);
}
else
{
var body = document.getElementsByTagName("body")[0];
a.textContent = filename;
a.href = "data:application/json," + encodeURIComponent(this.getAsJSON());
a.download = filename;
body.appendChild(a);
var clickEvent = document.createEvent("MouseEvent");
clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(clickEvent);
body.removeChild(a);
}
};
pluginProto.acts = new Acts();
function Exps() {};
Exps.prototype.At = function (ret, x, y_, z_)
{
var y = y_ || 0;
var z = z_ || 0;
ret.set_any(this.at(x, y, z));
};
Exps.prototype.Width = function (ret)
{
ret.set_int(this.cx);
};
Exps.prototype.Height = function (ret)
{
ret.set_int(this.cy);
};
Exps.prototype.Depth = function (ret)
{
ret.set_int(this.cz);
};
Exps.prototype.CurX = function (ret)
{
ret.set_int(this.forX);
};
Exps.prototype.CurY = function (ret)
{
ret.set_int(this.forY);
};
Exps.prototype.CurZ = function (ret)
{
ret.set_int(this.forZ);
};
Exps.prototype.CurValue = function (ret)
{
ret.set_any(this.at(this.forX, this.forY, this.forZ));
};
Exps.prototype.Front = function (ret)
{
ret.set_any(this.at(0, 0, 0));
};
Exps.prototype.Back = function (ret)
{
ret.set_any(this.at(this.cx - 1, 0, 0));
};
Exps.prototype.IndexOf = function (ret, v)
{
for (var i = 0; i < this.cx; i++)
{
if (this.arr[i][0][0] === v)
{
ret.set_int(i);
return;
}
}
ret.set_int(-1);
};
Exps.prototype.LastIndexOf = function (ret, v)
{
for (var i = this.cx - 1; i >= 0; i--)
{
if (this.arr[i][0][0] === v)
{
ret.set_int(i);
return;
}
}
ret.set_int(-1);
};
Exps.prototype.AsJSON = function (ret)
{
ret.set_string(this.getAsJSON());
};
pluginProto.exps = new Exps();
}());
;
;
cr.plugins_.Browser = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.Browser.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
};
var instanceProto = pluginProto.Instance.prototype;
instanceProto.onCreate = function()
{
var self = this;
window.addEventListener("resize", function () {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnResize, self);
});
if (typeof navigator.onLine !== "undefined")
{
window.addEventListener("online", function() {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOnline, self);
});
window.addEventListener("offline", function() {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnOffline, self);
});
}
if (typeof window.applicationCache !== "undefined")
{
window.applicationCache.addEventListener('updateready', function() {
self.runtime.loadingprogress = 1;
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self);
});
window.applicationCache.addEventListener('progress', function(e) {
self.runtime.loadingprogress = e["loaded"] / e["total"];
});
}
if (!this.runtime.isDirectCanvas)
{
document.addEventListener("appMobi.device.update.available", function() {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnUpdateReady, self);
});
document.addEventListener("backbutton", function() {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self);
});
document.addEventListener("menubutton", function() {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self);
});
document.addEventListener("searchbutton", function() {
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnSearchButton, self);
});
document.addEventListener("tizenhwkey", function (e) {
var ret;
switch (e["keyName"]) {
case "back":
ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnBackButton, self);
if (!ret)
{
if (window["tizen"])
window["tizen"]["application"]["getCurrentApplication"]()["exit"]();
}
break;
case "menu":
ret = self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnMenuButton, self);
if (!ret)
e.preventDefault();
break;
}
});
}
this.runtime.addSuspendCallback(function(s) {
if (s)
{
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageHidden, self);
}
else
{
self.runtime.trigger(cr.plugins_.Browser.prototype.cnds.OnPageVisible, self);
}
});
this.is_arcade = (typeof window["is_scirra_arcade"] !== "undefined");
};
function Cnds() {};
Cnds.prototype.CookiesEnabled = function()
{
return navigator ? navigator.cookieEnabled : false;
};
Cnds.prototype.IsOnline = function()
{
return navigator ? navigator.onLine : false;
};
Cnds.prototype.HasJava = function()
{
return navigator ? navigator.javaEnabled() : false;
};
Cnds.prototype.OnOnline = function()
{
return true;
};
Cnds.prototype.OnOffline = function()
{
return true;
};
Cnds.prototype.IsDownloadingUpdate = function ()
{
if (typeof window["applicationCache"] === "undefined")
return false;
else
return window["applicationCache"]["status"] === window["applicationCache"]["DOWNLOADING"];
};
Cnds.prototype.OnUpdateReady = function ()
{
return true;
};
Cnds.prototype.PageVisible = function ()
{
return !this.runtime.isSuspended;
};
Cnds.prototype.OnPageVisible = function ()
{
return true;
};
Cnds.prototype.OnPageHidden = function ()
{
return true;
};
Cnds.prototype.OnResize = function ()
{
return true;
};
Cnds.prototype.IsFullscreen = function ()
{
return !!(document["mozFullScreen"] || document["webkitIsFullScreen"] || document["fullScreen"] || this.runtime.isNodeFullscreen);
};
Cnds.prototype.OnBackButton = function ()
{
return true;
};
Cnds.prototype.OnMenuButton = function ()
{
return true;
};
Cnds.prototype.OnSearchButton = function ()
{
return true;
};
Cnds.prototype.IsMetered = function ()
{
var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"];
if (!connection)
return false;
return connection["metered"];
};
Cnds.prototype.IsCharging = function ()
{
var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"];
if (!battery)
return true;
return battery["charging"];
};
Cnds.prototype.IsPortraitLandscape = function (p)
{
var current = (window.innerWidth <= window.innerHeight ? 0 : 1);
return current === p;
};
pluginProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.Alert = function (msg)
{
if (!this.runtime.isDomFree)
alert(msg.toString());
};
Acts.prototype.Close = function ()
{
if (this.runtime.isCocoonJs)
CocoonJS["App"]["forceToFinish"]();
else if (window["tizen"])
window["tizen"]["application"]["getCurrentApplication"]()["exit"]();
else if (navigator["app"] && navigator["app"]["exitApp"])
navigator["app"]["exitApp"]();
else if (navigator["device"] && navigator["device"]["exitApp"])
navigator["device"]["exitApp"]();
else if (!this.is_arcade && !this.runtime.isDomFree)
window.close();
};
Acts.prototype.Focus = function ()
{
if (this.runtime.isNodeWebkit)
{
var win = window["nwgui"]["Window"]["get"]();
win["focus"]();
}
else if (!this.is_arcade && !this.runtime.isDomFree)
window.focus();
};
Acts.prototype.Blur = function ()
{
if (this.runtime.isNodeWebkit)
{
var win = window["nwgui"]["Window"]["get"]();
win["blur"]();
}
else if (!this.is_arcade && !this.runtime.isDomFree)
window.blur();
};
Acts.prototype.GoBack = function ()
{
if (navigator["app"] && navigator["app"]["backHistory"])
navigator["app"]["backHistory"]();
else if (!this.is_arcade && !this.runtime.isDomFree && window.back)
window.back();
};
Acts.prototype.GoForward = function ()
{
if (!this.is_arcade && !this.runtime.isDomFree && window.forward)
window.forward();
};
Acts.prototype.GoHome = function ()
{
if (!this.is_arcade && !this.runtime.isDomFree && window.home)
window.home();
};
Acts.prototype.GoToURL = function (url)
{
if (this.runtime.isCocoonJs)
CocoonJS["App"]["openURL"](url);
else if (!this.is_arcade && !this.runtime.isDomFree)
window.location = url;
};
Acts.prototype.GoToURLWindow = function (url, tag)
{
if (this.runtime.isCocoonJs)
CocoonJS["App"]["openURL"](url);
else if (!this.is_arcade && !this.runtime.isDomFree)
window.location.href=url;
};
Acts.prototype.Reload = function ()
{
if (!this.is_arcade && !this.runtime.isDomFree)
window.location.reload();
};
var firstRequestFullscreen = true;
var crruntime = null;
function onFullscreenError()
{
if (typeof jQuery !== "undefined")
{
crruntime["setSize"](jQuery(window).width(), jQuery(window).height());
}
};
Acts.prototype.RequestFullScreen = function (stretchmode)
{
if (this.runtime.isDomFree)
{
cr.logexport("[Construct 2] Requesting fullscreen is not supported on this platform - the request has been ignored");
return;
}
if (stretchmode >= 2)
stretchmode += 1;
if (stretchmode === 6)
stretchmode = 2;
if (this.runtime.isNodeWebkit)
{
if (!this.runtime.isNodeFullscreen)
{
window["nwgui"]["Window"]["get"]()["enterFullscreen"]();
this.runtime.isNodeFullscreen = true;
}
}
else
{
if (document["mozFullScreen"] || document["webkitIsFullScreen"] || !!document["msFullscreenElement"] || document["fullScreen"])
{
return;
}
this.runtime.fullscreen_scaling = (stretchmode >= 2 ? stretchmode : 0);
var elem = this.runtime.canvasdiv || this.runtime.canvas;
if (firstRequestFullscreen)
{
firstRequestFullscreen = false;
crruntime = this.runtime;
elem.addEventListener("mozfullscreenerror", onFullscreenError);
elem.addEventListener("webkitfullscreenerror", onFullscreenError);
elem.addEventListener("msfullscreenerror", onFullscreenError);
elem.addEventListener("fullscreenerror", onFullscreenError);
}
if (!cr.is_undefined(elem["requestFullscreen"]))
elem["requestFullscreen"]();
else if (!cr.is_undefined(elem["webkitRequestFullScreen"]))
{
if (typeof Element !== "undefined" && typeof Element["ALLOW_KEYBOARD_INPUT"] !== "undefined")
elem["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]);
else
elem["webkitRequestFullScreen"]();
}
else if (!cr.is_undefined(elem["mozRequestFullScreen"]))
elem["mozRequestFullScreen"]();
else if (!cr.is_undefined(elem["msRequestFullscreen"]))
elem["msRequestFullscreen"]();
}
};
Acts.prototype.CancelFullScreen = function ()
{
if (this.runtime.isDomFree)
{
cr.logexport("[Construct 2] Exiting fullscreen is not supported on this platform - the request has been ignored");
return;
}
if (this.runtime.isNodeWebkit)
{
if (this.runtime.isNodeFullscreen)
{
window["nwgui"]["Window"]["get"]()["leaveFullscreen"]();
this.runtime.isNodeFullscreen = false;
}
}
else
{
if (!cr.is_undefined(document["exitFullscreen"]))
document["exitFullscreen"]();
else if (!cr.is_undefined(document["webkitCancelFullScreen"]))
document["webkitCancelFullScreen"]();
else if (!cr.is_undefined(document["mozCancelFullScreen"]))
document["mozCancelFullScreen"]();
else if (!cr.is_undefined(document["msExitFullscreen"]))
document["msExitFullscreen"]();
}
};
Acts.prototype.Vibrate = function (pattern_)
{
try {
var arr = pattern_.split(",");
var i, len;
for (i = 0, len = arr.length; i < len; i++)
{
arr[i] = parseInt(arr[i], 10);
}
if (navigator["vibrate"])
navigator["vibrate"](arr);
else if (navigator["mozVibrate"])
navigator["mozVibrate"](arr);
else if (navigator["webkitVibrate"])
navigator["webkitVibrate"](arr);
else if (navigator["msVibrate"])
navigator["msVibrate"](arr);
}
catch (e) {}
};
Acts.prototype.InvokeDownload = function (url_, filename_)
{
var a = document.createElement("a");
if (typeof a.download === "undefined")
{
window.open(url_);
}
else
{
var body = document.getElementsByTagName("body")[0];
a.textContent = filename_;
a.href = url_;
a.download = filename_;
body.appendChild(a);
var clickEvent = document.createEvent("MouseEvent");
clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(clickEvent);
body.removeChild(a);
}
};
Acts.prototype.InvokeDownloadString = function (str_, mimetype_, filename_)
{
var datauri = "data:" + mimetype_ + "," + encodeURIComponent(str_);
var a = document.createElement("a");
if (typeof a.download === "undefined")
{
window.open(datauri);
}
else
{
var body = document.getElementsByTagName("body")[0];
a.textContent = filename_;
a.href = datauri;
a.download = filename_;
body.appendChild(a);
var clickEvent = document.createEvent("MouseEvent");
clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(clickEvent);
body.removeChild(a);
}
};
Acts.prototype.ConsoleLog = function (type_, msg_)
{
if (typeof console === "undefined")
return;
if (type_ === 0 && console.log)
console.log(msg_.toString());
if (type_ === 1 && console.warn)
console.warn(msg_.toString());
if (type_ === 2 && console.error)
console.error(msg_.toString());
};
Acts.prototype.ConsoleGroup = function (name_)
{
if (console && console.group)
console.group(name_);
};
Acts.prototype.ConsoleGroupEnd = function ()
{
if (console && console.groupEnd)
console.groupEnd();
};
Acts.prototype.ExecJs = function (js_)
{
if (eval)
eval(js_);
};
var orientations = [
"portrait",
"landscape",
"portrait-primary",
"portrait-secondary",
"landscape-primary",
"landscape-secondary"
];
Acts.prototype.LockOrientation = function (o)
{
o = Math.floor(o);
if (o < 0 || o >= orientations.length)
return;
this.runtime.autoLockOrientation = false;
var orientation = orientations[o];
if (screen["lockOrientation"])
screen["lockOrientation"](orientation);
else if (screen["webkitLockOrientation"])
screen["webkitLockOrientation"](orientation);
else if (screen["mozLockOrientation"])
screen["mozLockOrientation"](orientation);
else if (screen["msLockOrientation"])
screen["msLockOrientation"](orientation);
};
Acts.prototype.UnlockOrientation = function ()
{
this.runtime.autoLockOrientation = false;
if (screen["unlockOrientation"])
screen["unlockOrientation"]();
else if (screen["webkitUnlockOrientation"])
screen["webkitUnlockOrientation"]();
else if (screen["mozUnlockOrientation"])
screen["mozUnlockOrientation"]();
else if (screen["msUnlockOrientation"])
screen["msUnlockOrientation"]();
};
pluginProto.acts = new Acts();
function Exps() {};
Exps.prototype.URL = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : window.location.toString());
};
Exps.prototype.Protocol = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : window.location.protocol);
};
Exps.prototype.Domain = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : window.location.hostname);
};
Exps.prototype.PathName = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : window.location.pathname);
};
Exps.prototype.Hash = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : window.location.hash);
};
Exps.prototype.Referrer = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : document.referrer);
};
Exps.prototype.Title = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : document.title);
};
Exps.prototype.Name = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : navigator.appName);
};
Exps.prototype.Version = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : navigator.appVersion);
};
Exps.prototype.Language = function (ret)
{
if (navigator && navigator.language)
ret.set_string(navigator.language);
else
ret.set_string("");
};
Exps.prototype.Platform = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : navigator.platform);
};
Exps.prototype.Product = function (ret)
{
if (navigator && navigator.product)
ret.set_string(navigator.product);
else
ret.set_string("");
};
Exps.prototype.Vendor = function (ret)
{
if (navigator && navigator.vendor)
ret.set_string(navigator.vendor);
else
ret.set_string("");
};
Exps.prototype.UserAgent = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : navigator.userAgent);
};
Exps.prototype.QueryString = function (ret)
{
ret.set_string(this.runtime.isDomFree ? "" : window.location.search);
};
Exps.prototype.QueryParam = function (ret, paramname)
{
if (this.runtime.isDomFree)
{
ret.set_string("");
return;
}
var match = RegExp('[?&]' + paramname + '=([^&]*)').exec(window.location.search);
if (match)
ret.set_string(decodeURIComponent(match[1].replace(/\+/g, ' ')));
else
ret.set_string("");
};
Exps.prototype.Bandwidth = function (ret)
{
var connection = navigator["connection"] || navigator["mozConnection"] || navigator["webkitConnection"];
if (!connection)
ret.set_float(Number.POSITIVE_INFINITY);
else
ret.set_float(connection["bandwidth"]);
};
Exps.prototype.BatteryLevel = function (ret)
{
var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"];
if (!battery)
ret.set_float(1);
else
ret.set_float(battery["level"]);
};
Exps.prototype.BatteryTimeLeft = function (ret)
{
var battery = navigator["battery"] || navigator["mozBattery"] || navigator["webkitBattery"];
if (!battery)
ret.set_float(Number.POSITIVE_INFINITY);
else
ret.set_float(battery["dischargingTime"]);
};
Exps.prototype.ExecJS = function (ret, js_)
{
if (!eval)
{
ret.set_any(0);
return;
}
var result = eval(js_);
if (typeof result === "number")
ret.set_any(result);
else if (typeof result === "string")
ret.set_any(result);
else if (typeof result === "boolean")
ret.set_any(result ? 1 : 0);
else
ret.set_any(0);
};
Exps.prototype.ScreenWidth = function (ret)
{
ret.set_int(screen.width);
};
Exps.prototype.ScreenHeight = function (ret)
{
ret.set_int(screen.height);
};
Exps.prototype.DevicePixelRatio = function (ret)
{
ret.set_float(this.runtime.devicePixelRatio);
};
pluginProto.exps = new Exps();
}());
;
;
cr.plugins_.Softgames = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.Softgames.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
};
var instanceProto = pluginProto.Instance.prototype;
instanceProto.onCreate = function()
{
};
instanceProto.onDestroy = function ()
{
};
instanceProto.saveToJSON = function ()
{
return {
};
};
instanceProto.loadFromJSON = function (o)
{
};
instanceProto.draw = function(ctx)
{
};
instanceProto.drawGL = function (glw)
{
};
function Cnds() {};
Cnds.prototype.IsSuspended = function ()
{
return this.runtime.isSuspended;
};
pluginProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.ConnectAPI = function ()
{
};
Acts.prototype.startGame = function ()
{
SG_Hooks.start();
};
Acts.prototype.levelUp = function ()
{
SG_Hooks.levelUp(window.c2_level, window.c2_score);
};
Acts.prototype.gameOver = function ()
{
SG_Hooks.gameOver(window.c2_level, window.c2_score);
};
/*Acts.prototype.ShowBanner = function ()
{
};
Acts.prototype.HideBanner = function ()
{
softgames.hideAllBanners(function() {});
};*/
pluginProto.acts = new Acts();
function Exps() {};
Exps.prototype.getLanguage = function (ret) // 'ret' must always be the first parameter - always return the expression's result through it!
{
ret.set_string(SG.lang);
};
pluginProto.exps = new Exps();
}());
;
;
cr.plugins_.Sprite = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.Sprite.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
function frame_getDataUri()
{
if (this.datauri.length === 0)
{
var tmpcanvas = document.createElement("canvas");
tmpcanvas.width = this.width;
tmpcanvas.height = this.height;
var tmpctx = tmpcanvas.getContext("2d");
if (this.spritesheeted)
{
tmpctx.drawImage(this.texture_img, this.offx, this.offy, this.width, this.height,
0, 0, this.width, this.height);
}
else
{
tmpctx.drawImage(this.texture_img, 0, 0, this.width, this.height);
}
this.datauri = tmpcanvas.toDataURL("image/png");
}
return this.datauri;
};
typeProto.onCreate = function()
{
if (this.is_family)
return;
var i, leni, j, lenj;
var anim, frame, animobj, frameobj, wt, uv;
this.all_frames = [];
this.has_loaded_textures = false;
for (i = 0, leni = this.animations.length; i < leni; i++)
{
anim = this.animations[i];
animobj = {};
animobj.name = anim[0];
animobj.speed = anim[1];
animobj.loop = anim[2];
animobj.repeatcount = anim[3];
animobj.repeatto = anim[4];
animobj.pingpong = anim[5];
animobj.sid = anim[6];
animobj.frames = [];
for (j = 0, lenj = anim[7].length; j < lenj; j++)
{
frame = anim[7][j];
frameobj = {};
frameobj.texture_file = frame[0];
frameobj.texture_filesize = frame[1];
frameobj.offx = frame[2];
frameobj.offy = frame[3];
frameobj.width = frame[4];
frameobj.height = frame[5];
frameobj.duration = frame[6];
frameobj.hotspotX = frame[7];
frameobj.hotspotY = frame[8];
frameobj.image_points = frame[9];
frameobj.poly_pts = frame[10];
frameobj.pixelformat = frame[11];
frameobj.spritesheeted = (frameobj.width !== 0);
frameobj.datauri = ""; // generated on demand and cached
frameobj.getDataUri = frame_getDataUri;
uv = {};
uv.left = 0;
uv.top = 0;
uv.right = 1;
uv.bottom = 1;
frameobj.sheetTex = uv;
frameobj.webGL_texture = null;
wt = this.runtime.findWaitingTexture(frame[0]);
if (wt)
{
frameobj.texture_img = wt;
}
else
{
frameobj.texture_img = new Image();
frameobj.texture_img["idtkLoadDisposed"] = true;
frameobj.texture_img.src = frame[0];
frameobj.texture_img.cr_src = frame[0];
frameobj.texture_img.cr_filesize = frame[1];
frameobj.texture_img.c2webGL_texture = null;
this.runtime.wait_for_textures.push(frameobj.texture_img);
}
cr.seal(frameobj);
animobj.frames.push(frameobj);
this.all_frames.push(frameobj);
}
cr.seal(animobj);
this.animations[i] = animobj; // swap array data for object
}
};
typeProto.updateAllCurrentTexture = function ()
{
var i, len, inst;
for (i = 0, len = this.instances.length; i < len; i++)
{
inst = this.instances[i];
inst.curWebGLTexture = inst.curFrame.webGL_texture;
}
};
typeProto.onLostWebGLContext = function ()
{
if (this.is_family)
return;
var i, len, frame;
for (i = 0, len = this.all_frames.length; i < len; ++i)
{
frame = this.all_frames[i];
frame.texture_img.c2webGL_texture = null;
frame.webGL_texture = null;
}
};
typeProto.onRestoreWebGLContext = function ()
{
if (this.is_family || !this.instances.length)
return;
var i, len, frame;
for (i = 0, len = this.all_frames.length; i < len; ++i)
{
frame = this.all_frames[i];
frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat);
}
this.updateAllCurrentTexture();
};
typeProto.loadTextures = function ()
{
if (this.is_family || this.has_loaded_textures || !this.runtime.glwrap)
return;
var i, len, frame;
for (i = 0, len = this.all_frames.length; i < len; ++i)
{
frame = this.all_frames[i];
frame.webGL_texture = this.runtime.glwrap.loadTexture(frame.texture_img, false, this.runtime.linearSampling, frame.pixelformat);
}
this.has_loaded_textures = true;
};
typeProto.unloadTextures = function ()
{
if (this.is_family || this.instances.length || !this.has_loaded_textures)
return;
var i, len, frame;
for (i = 0, len = this.all_frames.length; i < len; ++i)
{
frame = this.all_frames[i];
this.runtime.glwrap.deleteTexture(frame.webGL_texture);
}
this.has_loaded_textures = false;
};
var already_drawn_images = [];
typeProto.preloadCanvas2D = function (ctx)
{
var i, len, frameimg;
already_drawn_images.length = 0;
for (i = 0, len = this.all_frames.length; i < len; ++i)
{
frameimg = this.all_frames[i].texture_img;
if (already_drawn_images.indexOf(frameimg) !== -1)
continue;
ctx.drawImage(frameimg, 0, 0);
already_drawn_images.push(frameimg);
}
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
var poly_pts = this.type.animations[0].frames[0].poly_pts;
if (this.recycled)
this.collision_poly.set_pts(poly_pts);
else
this.collision_poly = new cr.CollisionPoly(poly_pts);
};
var instanceProto = pluginProto.Instance.prototype;
instanceProto.onCreate = function()
{
this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible
this.isTicking = false;
this.inAnimTrigger = false;
this.collisionsEnabled = (this.properties[3] !== 0);
if (!(this.type.animations.length === 1 && this.type.animations[0].frames.length === 1) && this.type.animations[0].speed !== 0)
{
this.runtime.tickMe(this);
this.isTicking = true;
}
this.cur_animation = this.getAnimationByName(this.properties[1]) || this.type.animations[0];
this.cur_frame = this.properties[2];
if (this.cur_frame < 0)
this.cur_frame = 0;
if (this.cur_frame >= this.cur_animation.frames.length)
this.cur_frame = this.cur_animation.frames.length - 1;
var curanimframe = this.cur_animation.frames[this.cur_frame];
this.collision_poly.set_pts(curanimframe.poly_pts);
this.hotspotX = curanimframe.hotspotX;
this.hotspotY = curanimframe.hotspotY;
this.cur_anim_speed = this.cur_animation.speed;
if (this.recycled)
this.animTimer.reset();
else
this.animTimer = new cr.KahanAdder();
this.frameStart = this.getNowTime();
this.animPlaying = true;
this.animRepeats = 0;
this.animForwards = true;
this.animTriggerName = "";
this.changeAnimName = "";
this.changeAnimFrom = 0;
this.changeAnimFrame = -1;
this.type.loadTextures();
var i, leni, j, lenj;
var anim, frame, uv, maintex;
for (i = 0, leni = this.type.animations.length; i < leni; i++)
{
anim = this.type.animations[i];
for (j = 0, lenj = anim.frames.length; j < lenj; j++)
{
frame = anim.frames[j];
if (frame.width === 0)
{
frame.width = frame.texture_img.width;
frame.height = frame.texture_img.height;
}
if (frame.spritesheeted)
{
maintex = frame.texture_img;
uv = frame.sheetTex;
uv.left = frame.offx / maintex.width;
uv.top = frame.offy / maintex.height;
uv.right = (frame.offx + frame.width) / maintex.width;
uv.bottom = (frame.offy + frame.height) / maintex.height;
if (frame.offx === 0 && frame.offy === 0 && frame.width === maintex.width && frame.height === maintex.height)
{
frame.spritesheeted = false;
}
}
}
}
this.curFrame = this.cur_animation.frames[this.cur_frame];
this.curWebGLTexture = this.curFrame.webGL_texture;
};
instanceProto.saveToJSON = function ()
{
var o = {
"a": this.cur_animation.sid,
"f": this.cur_frame,
"cas": this.cur_anim_speed,
"fs": this.frameStart,
"ar": this.animRepeats,
"at": this.animTimer.sum
};
if (!this.animPlaying)
o["ap"] = this.animPlaying;
if (!this.animForwards)
o["af"] = this.animForwards;
return o;
};
instanceProto.loadFromJSON = function (o)
{
var anim = this.getAnimationBySid(o["a"]);
if (anim)
this.cur_animation = anim;
this.cur_frame = o["f"];
if (this.cur_frame < 0)
this.cur_frame = 0;
if (this.cur_frame >= this.cur_animation.frames.length)
this.cur_frame = this.cur_animation.frames.length - 1;
this.cur_anim_speed = o["cas"];
this.frameStart = o["fs"];
this.animRepeats = o["ar"];
this.animTimer.reset();
this.animTimer.sum = o["at"];
this.animPlaying = o.hasOwnProperty("ap") ? o["ap"] : true;
this.animForwards = o.hasOwnProperty("af") ? o["af"] : true;
this.curFrame = this.cur_animation.frames[this.cur_frame];
this.curWebGLTexture = this.curFrame.webGL_texture;
this.collision_poly.set_pts(this.curFrame.poly_pts);
this.hotspotX = this.curFrame.hotspotX;
this.hotspotY = this.curFrame.hotspotY;
};
instanceProto.animationFinish = function (reverse)
{
this.cur_frame = reverse ? 0 : this.cur_animation.frames.length - 1;
this.animPlaying = false;
this.animTriggerName = this.cur_animation.name;
this.inAnimTrigger = true;
this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnyAnimFinished, this);
this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnAnimFinished, this);
this.inAnimTrigger = false;
this.animRepeats = 0;
};
instanceProto.getNowTime = function()
{
return this.animTimer.sum;
};
instanceProto.tick = function()
{
this.animTimer.add(this.runtime.getDt(this));
if (this.changeAnimName.length)
this.doChangeAnim();
if (this.changeAnimFrame >= 0)
this.doChangeAnimFrame();
var now = this.getNowTime();
var cur_animation = this.cur_animation;
var prev_frame = cur_animation.frames[this.cur_frame];
var next_frame;
var cur_frame_time = prev_frame.duration / this.cur_anim_speed;
if (this.animPlaying && now >= this.frameStart + cur_frame_time)
{
if (this.animForwards)
{
this.cur_frame++;
}
else
{
this.cur_frame--;
}
this.frameStart += cur_frame_time;
if (this.cur_frame >= cur_animation.frames.length)
{
if (cur_animation.pingpong)
{
this.animForwards = false;
this.cur_frame = cur_animation.frames.length - 2;
}
else if (cur_animation.loop)
{
this.cur_frame = cur_animation.repeatto;
}
else
{
this.animRepeats++;
if (this.animRepeats >= cur_animation.repeatcount)
{
this.animationFinish(false);
}
else
{
this.cur_frame = cur_animation.repeatto;
}
}
}
if (this.cur_frame < 0)
{
if (cur_animation.pingpong)
{
this.cur_frame = 1;
this.animForwards = true;
if (!cur_animation.loop)
{
this.animRepeats++;
if (this.animRepeats >= cur_animation.repeatcount)
{
this.animationFinish(true);
}
}
}
else
{
if (cur_animation.loop)
{
this.cur_frame = cur_animation.repeatto;
}
else
{
this.animRepeats++;
if (this.animRepeats >= cur_animation.repeatcount)
{
this.animationFinish(true);
}
else
{
this.cur_frame = cur_animation.repeatto;
}
}
}
}
if (this.cur_frame < 0)
this.cur_frame = 0;
else if (this.cur_frame >= cur_animation.frames.length)
this.cur_frame = cur_animation.frames.length - 1;
if (now > this.frameStart + (cur_animation.frames[this.cur_frame].duration / this.cur_anim_speed))
{
this.frameStart = now;
}
next_frame = cur_animation.frames[this.cur_frame];
this.OnFrameChanged(prev_frame, next_frame);
this.runtime.redraw = true;
}
};
instanceProto.getAnimationByName = function (name_)
{
var i, len, a;
for (i = 0, len = this.type.animations.length; i < len; i++)
{
a = this.type.animations[i];
if (cr.equals_nocase(a.name, name_))
return a;
}
return null;
};
instanceProto.getAnimationBySid = function (sid_)
{
var i, len, a;
for (i = 0, len = this.type.animations.length; i < len; i++)
{
a = this.type.animations[i];
if (a.sid === sid_)
return a;
}
return null;
};
instanceProto.doChangeAnim = function ()
{
var prev_frame = this.cur_animation.frames[this.cur_frame];
var anim = this.getAnimationByName(this.changeAnimName);
this.changeAnimName = "";
if (!anim)
return;
if (cr.equals_nocase(anim.name, this.cur_animation.name) && this.animPlaying)
return;
this.cur_animation = anim;
this.cur_anim_speed = anim.speed;
if (this.cur_frame < 0)
this.cur_frame = 0;
if (this.cur_frame >= this.cur_animation.frames.length)
this.cur_frame = this.cur_animation.frames.length - 1;
if (this.changeAnimFrom === 1)
this.cur_frame = 0;
this.animPlaying = true;
this.frameStart = this.getNowTime();
this.animForwards = true;
this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]);
this.runtime.redraw = true;
};
instanceProto.doChangeAnimFrame = function ()
{
var prev_frame = this.cur_animation.frames[this.cur_frame];
var prev_frame_number = this.cur_frame;
this.cur_frame = cr.floor(this.changeAnimFrame);
if (this.cur_frame < 0)
this.cur_frame = 0;
if (this.cur_frame >= this.cur_animation.frames.length)
this.cur_frame = this.cur_animation.frames.length - 1;
if (prev_frame_number !== this.cur_frame)
{
this.OnFrameChanged(prev_frame, this.cur_animation.frames[this.cur_frame]);
this.frameStart = this.getNowTime();
this.runtime.redraw = true;
}
this.changeAnimFrame = -1;
};
instanceProto.OnFrameChanged = function (prev_frame, next_frame)
{
var oldw = prev_frame.width;
var oldh = prev_frame.height;
var neww = next_frame.width;
var newh = next_frame.height;
if (oldw != neww)
this.width *= (neww / oldw);
if (oldh != newh)
this.height *= (newh / oldh);
this.hotspotX = next_frame.hotspotX;
this.hotspotY = next_frame.hotspotY;
this.collision_poly.set_pts(next_frame.poly_pts);
this.set_bbox_changed();
this.curFrame = next_frame;
this.curWebGLTexture = next_frame.webGL_texture;
var i, len, b;
for (i = 0, len = this.behavior_insts.length; i < len; i++)
{
b = this.behavior_insts[i];
if (b.onSpriteFrameChanged)
b.onSpriteFrameChanged(prev_frame, next_frame);
}
this.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnFrameChanged, this);
};
instanceProto.draw = function(ctx)
{
ctx.globalAlpha = this.opacity;
var cur_frame = this.curFrame;
var spritesheeted = cur_frame.spritesheeted;
var cur_image = cur_frame.texture_img;
var myx = this.x;
var myy = this.y;
var w = this.width;
var h = this.height;
if (this.angle === 0 && w >= 0 && h >= 0)
{
myx -= this.hotspotX * w;
myy -= this.hotspotY * h;
if (this.runtime.pixel_rounding)
{
myx = (myx + 0.5) | 0;
myy = (myy + 0.5) | 0;
}
if (spritesheeted)
{
ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height,
myx, myy, w, h);
}
else
{
ctx.drawImage(cur_image, myx, myy, w, h);
}
}
else
{
if (this.runtime.pixel_rounding)
{
myx = (myx + 0.5) | 0;
myy = (myy + 0.5) | 0;
}
ctx.save();
var widthfactor = w > 0 ? 1 : -1;
var heightfactor = h > 0 ? 1 : -1;
ctx.translate(myx, myy);
if (widthfactor !== 1 || heightfactor !== 1)
ctx.scale(widthfactor, heightfactor);
ctx.rotate(this.angle * widthfactor * heightfactor);
var drawx = 0 - (this.hotspotX * cr.abs(w))
var drawy = 0 - (this.hotspotY * cr.abs(h));
if (spritesheeted)
{
ctx.drawImage(cur_image, cur_frame.offx, cur_frame.offy, cur_frame.width, cur_frame.height,
drawx, drawy, cr.abs(w), cr.abs(h));
}
else
{
ctx.drawImage(cur_image, drawx, drawy, cr.abs(w), cr.abs(h));
}
ctx.restore();
}
/*
ctx.strokeStyle = "#f00";
ctx.lineWidth = 3;
ctx.beginPath();
this.collision_poly.cache_poly(this.width, this.height, this.angle);
var i, len, ax, ay, bx, by;
for (i = 0, len = this.collision_poly.pts_count; i < len; i++)
{
ax = this.collision_poly.pts_cache[i*2] + this.x;
ay = this.collision_poly.pts_cache[i*2+1] + this.y;
bx = this.collision_poly.pts_cache[((i+1)%len)*2] + this.x;
by = this.collision_poly.pts_cache[((i+1)%len)*2+1] + this.y;
ctx.moveTo(ax, ay);
ctx.lineTo(bx, by);
}
ctx.stroke();
ctx.closePath();
*/
/*
if (this.behavior_insts.length >= 1 && this.behavior_insts[0].draw)
{
this.behavior_insts[0].draw(ctx);
}
*/
};
instanceProto.drawGL = function(glw)
{
glw.setTexture(this.curWebGLTexture);
glw.setOpacity(this.opacity);
var cur_frame = this.curFrame;
var q = this.bquad;
if (this.runtime.pixel_rounding)
{
var ox = ((this.x + 0.5) | 0) - this.x;
var oy = ((this.y + 0.5) | 0) - this.y;
if (cur_frame.spritesheeted)
glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, cur_frame.sheetTex);
else
glw.quad(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy);
}
else
{
if (cur_frame.spritesheeted)
glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, cur_frame.sheetTex);
else
glw.quad(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly);
}
};
instanceProto.getImagePointIndexByName = function(name_)
{
var cur_frame = this.curFrame;
var i, len;
for (i = 0, len = cur_frame.image_points.length; i < len; i++)
{
if (cr.equals_nocase(name_, cur_frame.image_points[i][0]))
return i;
}
return -1;
};
instanceProto.getImagePoint = function(imgpt, getX)
{
var cur_frame = this.curFrame;
var image_points = cur_frame.image_points;
var index;
if (cr.is_string(imgpt))
index = this.getImagePointIndexByName(imgpt);
else
index = imgpt - 1; // 0 is origin
index = cr.floor(index);
if (index < 0 || index >= image_points.length)
return getX ? this.x : this.y; // return origin
var x = (image_points[index][1] - cur_frame.hotspotX) * this.width;
var y = image_points[index][2];
y = (y - cur_frame.hotspotY) * this.height;
var cosa = Math.cos(this.angle);
var sina = Math.sin(this.angle);
var x_temp = (x * cosa) - (y * sina);
y = (y * cosa) + (x * sina);
x = x_temp;
x += this.x;
y += this.y;
return getX ? x : y;
};
function Cnds() {};
var arrCache = [];
function allocArr()
{
if (arrCache.length)
return arrCache.pop();
else
return [0, 0, 0];
};
function freeArr(a)
{
a[0] = 0;
a[1] = 0;
a[2] = 0;
arrCache.push(a);
};
function makeCollKey(a, b)
{
if (a < b)
return "" + a + "," + b;
else
return "" + b + "," + a;
};
function collmemory_add(collmemory, a, b, tickcount)
{
var a_uid = a.uid;
var b_uid = b.uid;
var key = makeCollKey(a_uid, b_uid);
if (collmemory.hasOwnProperty(key))
{
collmemory[key][2] = tickcount;
return;
}
var arr = allocArr();
arr[0] = a_uid;
arr[1] = b_uid;
arr[2] = tickcount;
collmemory[key] = arr;
};
function collmemory_remove(collmemory, a, b)
{
var key = makeCollKey(a.uid, b.uid);
if (collmemory.hasOwnProperty(key))
{
freeArr(collmemory[key]);
delete collmemory[key];
}
};
function collmemory_removeInstance(collmemory, inst)
{
var uid = inst.uid;
var p, entry;
for (p in collmemory)
{
if (collmemory.hasOwnProperty(p))
{
entry = collmemory[p];
if (entry[0] === uid || entry[1] === uid)
{
freeArr(collmemory[p]);
delete collmemory[p];
}
}
}
};
var last_coll_tickcount = -2;
function collmemory_has(collmemory, a, b)
{
var key = makeCollKey(a.uid, b.uid);
if (collmemory.hasOwnProperty(key))
{
last_coll_tickcount = collmemory[key][2];
return true;
}
else
{
last_coll_tickcount = -2;
return false;
}
};
var candidates = [];
Cnds.prototype.OnCollision = function (rtype)
{
if (!rtype)
return false;
var runtime = this.runtime;
var cnd = runtime.getCurrentCondition();
var ltype = cnd.type;
if (!cnd.extra.collmemory)
{
cnd.extra.collmemory = {};
runtime.addDestroyCallback((function (collmemory) {
return function(inst) {
collmemory_removeInstance(collmemory, inst);
};
})(cnd.extra.collmemory));
}
var collmemory = cnd.extra.collmemory;
var lsol = ltype.getCurrentSol();
var rsol = rtype.getCurrentSol();
var linstances = lsol.getObjects();
var rinstances;
var l, linst, r, rinst;
var curlsol, currsol;
var tickcount = this.runtime.tickcount;
var lasttickcount = tickcount - 1;
var exists, run;
var current_event = runtime.getCurrentEventStack().current_event;
var orblock = current_event.orblock;
for (l = 0; l < linstances.length; l++)
{
linst = linstances[l];
if (rsol.select_all)
{
linst.update_bbox();
this.runtime.getCollisionCandidates(linst.layer, rtype, linst.bbox, candidates);
rinstances = candidates;
}
else
rinstances = rsol.getObjects();
for (r = 0; r < rinstances.length; r++)
{
rinst = rinstances[r];
if (runtime.testOverlap(linst, rinst) || runtime.checkRegisteredCollision(linst, rinst))
{
exists = collmemory_has(collmemory, linst, rinst);
run = (!exists || (last_coll_tickcount < lasttickcount));
collmemory_add(collmemory, linst, rinst, tickcount);
if (run)
{
runtime.pushCopySol(current_event.solModifiers);
curlsol = ltype.getCurrentSol();
currsol = rtype.getCurrentSol();
curlsol.select_all = false;
currsol.select_all = false;
if (ltype === rtype)
{
curlsol.instances.length = 2; // just use lsol, is same reference as rsol
curlsol.instances[0] = linst;
curlsol.instances[1] = rinst;
ltype.applySolToContainer();
}
else
{
curlsol.instances.length = 1;
currsol.instances.length = 1;
curlsol.instances[0] = linst;
currsol.instances[0] = rinst;
ltype.applySolToContainer();
rtype.applySolToContainer();
}
current_event.retrigger();
runtime.popSol(current_event.solModifiers);
}
}
else
{
collmemory_remove(collmemory, linst, rinst);
}
}
candidates.length = 0;
}
return false;
};
var rpicktype = null;
var rtopick = new cr.ObjectSet();
var needscollisionfinish = false;
function DoOverlapCondition(rtype, offx, offy)
{
if (!rtype)
return false;
var do_offset = (offx !== 0 || offy !== 0);
var oldx, oldy, ret = false, r, lenr, rinst;
var cnd = this.runtime.getCurrentCondition();
var ltype = cnd.type;
var inverted = cnd.inverted;
var rsol = rtype.getCurrentSol();
var orblock = this.runtime.getCurrentEventStack().current_event.orblock;
var rinstances;
if (rsol.select_all)
{
this.update_bbox();
this.runtime.getCollisionCandidates(this.layer, rtype, this.bbox, candidates);
rinstances = candidates;
}
else if (orblock)
rinstances = rsol.else_instances;
else
rinstances = rsol.instances;
rpicktype = rtype;
needscollisionfinish = (ltype !== rtype && !inverted);
if (do_offset)
{
oldx = this.x;
oldy = this.y;
this.x += offx;
this.y += offy;
this.set_bbox_changed();
}
for (r = 0, lenr = rinstances.length; r < lenr; r++)
{
rinst = rinstances[r];
if (this.runtime.testOverlap(this, rinst))
{
ret = true;
if (inverted)
break;
if (ltype !== rtype)
rtopick.add(rinst);
}
}
if (do_offset)
{
this.x = oldx;
this.y = oldy;
this.set_bbox_changed();
}
candidates.length = 0;
return ret;
};
typeProto.finish = function (do_pick)
{
if (!needscollisionfinish)
return;
if (do_pick)
{
var orblock = this.runtime.getCurrentEventStack().current_event.orblock;
var sol = rpicktype.getCurrentSol();
var topick = rtopick.valuesRef();
var i, len, inst;
if (sol.select_all)
{
sol.select_all = false;
sol.instances.length = topick.length;
for (i = 0, len = topick.length; i < len; i++)
{
sol.instances[i] = topick[i];
}
if (orblock)
{
sol.else_instances.length = 0;
for (i = 0, len = rpicktype.instances.length; i < len; i++)
{
inst = rpicktype.instances[i];
if (!rtopick.contains(inst))
sol.else_instances.push(inst);
}
}
}
else
{
if (orblock)
{
var initsize = sol.instances.length;
sol.instances.length = initsize + topick.length;
for (i = 0, len = topick.length; i < len; i++)
{
sol.instances[initsize + i] = topick[i];
cr.arrayFindRemove(sol.else_instances, topick[i]);
}
}
else
{
cr.shallowAssignArray(sol.instances, topick);
}
}
rpicktype.applySolToContainer();
}
rtopick.clear();
needscollisionfinish = false;
};
Cnds.prototype.IsOverlapping = function (rtype)
{
return DoOverlapCondition.call(this, rtype, 0, 0);
};
Cnds.prototype.IsOverlappingOffset = function (rtype, offx, offy)
{
return DoOverlapCondition.call(this, rtype, offx, offy);
};
Cnds.prototype.IsAnimPlaying = function (animname)
{
if (this.changeAnimName.length)
return cr.equals_nocase(this.changeAnimName, animname);
else
return cr.equals_nocase(this.cur_animation.name, animname);
};
Cnds.prototype.CompareFrame = function (cmp, framenum)
{
return cr.do_cmp(this.cur_frame, cmp, framenum);
};
Cnds.prototype.CompareAnimSpeed = function (cmp, x)
{
var s = (this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed);
return cr.do_cmp(s, cmp, x);
};
Cnds.prototype.OnAnimFinished = function (animname)
{
return cr.equals_nocase(this.animTriggerName, animname);
};
Cnds.prototype.OnAnyAnimFinished = function ()
{
return true;
};
Cnds.prototype.OnFrameChanged = function ()
{
return true;
};
Cnds.prototype.IsMirrored = function ()
{
return this.width < 0;
};
Cnds.prototype.IsFlipped = function ()
{
return this.height < 0;
};
Cnds.prototype.OnURLLoaded = function ()
{
return true;
};
Cnds.prototype.IsCollisionEnabled = function ()
{
return this.collisionsEnabled;
};
pluginProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.Spawn = function (obj, layer, imgpt)
{
if (!obj || !layer)
return;
var inst = this.runtime.createInstance(obj, layer, this.getImagePoint(imgpt, true), this.getImagePoint(imgpt, false));
if (!inst)
return;
if (typeof inst.angle !== "undefined")
{
inst.angle = this.angle;
inst.set_bbox_changed();
}
this.runtime.isInOnDestroy++;
var i, len, s;
this.runtime.trigger(Object.getPrototypeOf(obj.plugin).cnds.OnCreated, inst);
if (inst.is_contained)
{
for (i = 0, len = inst.siblings.length; i < len; i++)
{
s = inst.siblings[i];
this.runtime.trigger(Object.getPrototypeOf(s.type.plugin).cnds.OnCreated, s);
}
}
this.runtime.isInOnDestroy--;
var cur_act = this.runtime.getCurrentAction();
var reset_sol = false;
if (cr.is_undefined(cur_act.extra.Spawn_LastExec) || cur_act.extra.Spawn_LastExec < this.runtime.execcount)
{
reset_sol = true;
cur_act.extra.Spawn_LastExec = this.runtime.execcount;
}
var sol;
if (obj != this.type)
{
sol = obj.getCurrentSol();
sol.select_all = false;
if (reset_sol)
{
sol.instances.length = 1;
sol.instances[0] = inst;
}
else
sol.instances.push(inst);
if (inst.is_contained)
{
for (i = 0, len = inst.siblings.length; i < len; i++)
{
s = inst.siblings[i];
sol = s.type.getCurrentSol();
sol.select_all = false;
if (reset_sol)
{
sol.instances.length = 1;
sol.instances[0] = s;
}
else
sol.instances.push(s);
}
}
}
};
Acts.prototype.SetEffect = function (effect)
{
this.compositeOp = cr.effectToCompositeOp(effect);
cr.setGLBlend(this, effect, this.runtime.gl);
this.runtime.redraw = true;
};
Acts.prototype.StopAnim = function ()
{
this.animPlaying = false;
};
Acts.prototype.StartAnim = function (from)
{
this.animPlaying = true;
this.frameStart = this.getNowTime();
if (from === 1 && this.cur_frame !== 0)
{
this.changeAnimFrame = 0;
if (!this.inAnimTrigger)
this.doChangeAnimFrame();
}
if (!this.isTicking)
{
this.runtime.tickMe(this);
this.isTicking = true;
}
};
Acts.prototype.SetAnim = function (animname, from)
{
this.changeAnimName = animname;
this.changeAnimFrom = from;
if (!this.isTicking)
{
this.runtime.tickMe(this);
this.isTicking = true;
}
if (!this.inAnimTrigger)
this.doChangeAnim();
};
Acts.prototype.SetAnimFrame = function (framenumber)
{
this.changeAnimFrame = framenumber;
if (!this.isTicking)
{
this.runtime.tickMe(this);
this.isTicking = true;
}
if (!this.inAnimTrigger)
this.doChangeAnimFrame();
};
Acts.prototype.SetAnimSpeed = function (s)
{
this.cur_anim_speed = cr.abs(s);
this.animForwards = (s >= 0);
if (!this.isTicking)
{
this.runtime.tickMe(this);
this.isTicking = true;
}
};
Acts.prototype.SetMirrored = function (m)
{
var neww = cr.abs(this.width) * (m === 0 ? -1 : 1);
if (this.width === neww)
return;
this.width = neww;
this.set_bbox_changed();
};
Acts.prototype.SetFlipped = function (f)
{
var newh = cr.abs(this.height) * (f === 0 ? -1 : 1);
if (this.height === newh)
return;
this.height = newh;
this.set_bbox_changed();
};
Acts.prototype.SetScale = function (s)
{
var cur_frame = this.curFrame;
var mirror_factor = (this.width < 0 ? -1 : 1);
var flip_factor = (this.height < 0 ? -1 : 1);
var new_width = cur_frame.width * s * mirror_factor;
var new_height = cur_frame.height * s * flip_factor;
if (this.width !== new_width || this.height !== new_height)
{
this.width = new_width;
this.height = new_height;
this.set_bbox_changed();
}
};
Acts.prototype.LoadURL = function (url_, resize_)
{
var img = new Image();
var self = this;
var curFrame_ = this.curFrame;
img.onload = function ()
{
if (curFrame_.texture_img.src === img.src)
{
if (self.runtime.glwrap && self.curFrame === curFrame_)
self.curWebGLTexture = curFrame_.webGL_texture;
self.runtime.redraw = true;
self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self);
return;
}
curFrame_.texture_img = img;
curFrame_.offx = 0;
curFrame_.offy = 0;
curFrame_.width = img.width;
curFrame_.height = img.height;
curFrame_.spritesheeted = false;
curFrame_.datauri = "";
if (self.runtime.glwrap)
{
if (curFrame_.webGL_texture)
self.runtime.glwrap.deleteTexture(curFrame_.webGL_texture);
curFrame_.webGL_texture = self.runtime.glwrap.loadTexture(img, false, self.runtime.linearSampling);
if (self.curFrame === curFrame_)
self.curWebGLTexture = curFrame_.webGL_texture;
self.type.updateAllCurrentTexture();
}
if (resize_ === 0) // resize to image size
{
self.width = img.width;
self.height = img.height;
self.set_bbox_changed();
}
self.runtime.redraw = true;
self.runtime.trigger(cr.plugins_.Sprite.prototype.cnds.OnURLLoaded, self);
};
if (url_.substr(0, 5) !== "data:")
img.crossOrigin = 'anonymous';
img.src = url_;
};
Acts.prototype.SetCollisions = function (set_)
{
if (this.collisionsEnabled === (set_ !== 0))
return; // no change
this.collisionsEnabled = (set_ !== 0);
if (this.collisionsEnabled)
this.set_bbox_changed(); // needs to be added back to cells
else
{
if (this.collcells.right >= this.collcells.left)
this.type.collision_grid.update(this, this.collcells, null);
this.collcells.set(0, 0, -1, -1);
}
};
pluginProto.acts = new Acts();
function Exps() {};
Exps.prototype.AnimationFrame = function (ret)
{
ret.set_int(this.cur_frame);
};
Exps.prototype.AnimationFrameCount = function (ret)
{
ret.set_int(this.cur_animation.frames.length);
};
Exps.prototype.AnimationName = function (ret)
{
ret.set_string(this.cur_animation.name);
};
Exps.prototype.AnimationSpeed = function (ret)
{
ret.set_float(this.animForwards ? this.cur_anim_speed : -this.cur_anim_speed);
};
Exps.prototype.ImagePointX = function (ret, imgpt)
{
ret.set_float(this.getImagePoint(imgpt, true));
};
Exps.prototype.ImagePointY = function (ret, imgpt)
{
ret.set_float(this.getImagePoint(imgpt, false));
};
Exps.prototype.ImagePointCount = function (ret)
{
ret.set_int(this.curFrame.image_points.length);
};
Exps.prototype.ImageWidth = function (ret)
{
ret.set_float(this.curFrame.width);
};
Exps.prototype.ImageHeight = function (ret)
{
ret.set_float(this.curFrame.height);
};
pluginProto.exps = new Exps();
}());
/* global cr,log,assert2 */
/* jshint globalstrict: true */
/* jshint strict: true */
;
;
cr.plugins_.Spritefont2 = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.Spritefont2.prototype;
pluginProto.onCreate = function ()
{
};
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
if (this.is_family)
return;
this.texture_img = new Image();
this.texture_img["idtkLoadDisposed"] = true;
this.texture_img.src = this.texture_file;
this.runtime.wait_for_textures.push(this.texture_img);
this.webGL_texture = null;
};
typeProto.onLostWebGLContext = function ()
{
if (this.is_family)
return;
this.webGL_texture = null;
};
typeProto.onRestoreWebGLContext = function ()
{
if (this.is_family || !this.instances.length)
return;
if (!this.webGL_texture)
{
this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, false, this.runtime.linearSampling, this.texture_pixelformat);
}
var i, len;
for (i = 0, len = this.instances.length; i < len; i++)
this.instances[i].webGL_texture = this.webGL_texture;
};
typeProto.unloadTextures = function ()
{
if (this.is_family || this.instances.length || !this.webGL_texture)
return;
this.runtime.glwrap.deleteTexture(this.webGL_texture);
this.webGL_texture = null;
};
typeProto.preloadCanvas2D = function (ctx)
{
ctx.drawImage(this.texture_img, 0, 0);
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
};
var instanceProto = pluginProto.Instance.prototype;
instanceProto.onDestroy = function()
{
freeAllLines (this.lines);
freeAllClip (this.clipList);
freeAllClipUV(this.clipUV);
cr.wipe(this.characterWidthList);
};
instanceProto.onCreate = function()
{
this.texture_img = this.type.texture_img;
this.characterWidth = this.properties[0];
this.characterHeight = this.properties[1];
this.characterSet = this.properties[2];
this.text = this.properties[3];
this.characterScale = this.properties[4];
this.visible = (this.properties[5] === 0); // 0=visible, 1=invisible
this.halign = this.properties[6]/2.0; // 0=left, 1=center, 2=right
this.valign = this.properties[7]/2.0; // 0=top, 1=center, 2=bottom
this.wrapbyword = (this.properties[9] === 0); // 0=word, 1=character
this.characterSpacing = this.properties[10];
this.lineHeight = this.properties[11];
this.textWidth = 0;
this.textHeight = 0;
if (this.recycled)
{
this.lines.length = 0;
cr.wipe(this.clipList);
cr.wipe(this.clipUV);
cr.wipe(this.characterWidthList);
}
else
{
this.lines = [];
this.clipList = {};
this.clipUV = {};
this.characterWidthList = {};
}
this.text_changed = true;
this.lastwrapwidth = this.width;
if (this.runtime.glwrap)
{
if (!this.type.webGL_texture)
{
this.type.webGL_texture = this.runtime.glwrap.loadTexture(this.type.texture_img, false, this.runtime.linearSampling, this.type.texture_pixelformat);
}
this.webGL_texture = this.type.webGL_texture;
}
this.SplitSheet();
};
instanceProto.saveToJSON = function ()
{
var save = {
"t": this.text,
"csc": this.characterScale,
"csp": this.characterSpacing,
"lh": this.lineHeight,
"tw": this.textWidth,
"th": this.textHeight,
"lrt": this.last_render_tick,
"cw": {}
};
for (var ch in this.characterWidthList)
save["cw"][ch] = this.characterWidthList[ch];
return save;
};
instanceProto.loadFromJSON = function (o)
{
this.text = o["t"];
this.characterScale = o["csc"];
this.characterSpacing = o["csp"];
this.lineHeight = o["lh"];
this.textWidth = o["tw"];
this.textHeight = o["th"];
this.last_render_tick = o["lrt"];
for(var ch in o["cw"])
this.characterWidthList[ch] = o["cw"][ch];
this.text_changed = true;
this.lastwrapwidth = this.width;
};
function trimRight(text)
{
return text.replace(/\s\s*$/, '');
}
var MAX_CACHE_SIZE = 1000;
function alloc(cache,Constructor)
{
if (cache.length)
return cache.pop();
else
return new Constructor();
}
function free(cache,data)
{
if (cache.length < MAX_CACHE_SIZE)
{
cache.push(data);
}
}
function freeAll(cache,dataList,isArray)
{
if (isArray) {
var i, len;
for (i = 0, len = dataList.length; i < len; i++)
{
free(cache,dataList[i]);
}
dataList.length = 0;
} else {
var prop;
for(prop in dataList) {
if(Object.prototype.hasOwnProperty.call(dataList,prop)) {
free(cache,dataList[prop]);
delete dataList[prop];
}
}
}
}
function addLine(inst,lineIndex,cur_line) {
var lines = inst.lines;
var line;
cur_line = trimRight(cur_line);
if (lineIndex >= lines.length)
lines.push(allocLine());
line = lines[lineIndex];
line.text = cur_line;
line.width = inst.measureWidth(cur_line);
inst.textWidth = cr.max(inst.textWidth,line.width);
}
var linesCache = [];
function allocLine() { return alloc(linesCache,Object); }
function freeLine(l) { free(linesCache,l); }
function freeAllLines(arr) { freeAll(linesCache,arr,true); }
function addClip(obj,property,x,y,w,h) {
if (obj[property] === undefined) {
obj[property] = alloc(clipCache,Object);
}
obj[property].x = x;
obj[property].y = y;
obj[property].w = w;
obj[property].h = h;
}
var clipCache = [];
function allocClip() { return alloc(clipCache,Object); }
function freeAllClip(obj) { freeAll(clipCache,obj,false);}
function addClipUV(obj,property,left,top,right,bottom) {
if (obj[property] === undefined) {
obj[property] = alloc(clipUVCache,cr.rect);
}
obj[property].left = left;
obj[property].top = top;
obj[property].right = right;
obj[property].bottom = bottom;
}
var clipUVCache = [];
function allocClipUV() { return alloc(clipUVCache,cr.rect);}
function freeAllClipUV(obj) { freeAll(clipUVCache,obj,false);}
instanceProto.SplitSheet = function() {
var texture = this.texture_img;
var texWidth = texture.width;
var texHeight = texture.height;
var charWidth = this.characterWidth;
var charHeight = this.characterHeight;
var charU = charWidth /texWidth;
var charV = charHeight/texHeight;
var charSet = this.characterSet ;
var cols = Math.floor(texWidth/charWidth);
var rows = Math.floor(texHeight/charHeight);
for ( var c = 0; c < charSet.length; c++) {
if (c >= cols * rows) break;
var x = c%cols;
var y = Math.floor(c/cols);
var letter = charSet.charAt(c);
if (this.runtime.glwrap) {
addClipUV(
this.clipUV, letter,
x * charU ,
y * charV ,
(x+1) * charU ,
(y+1) * charV
);
} else {
addClip(
this.clipList, letter,
x * charWidth,
y * charHeight,
charWidth,
charHeight
);
}
}
};
/*
* Word-Wrapping
*/
var wordsCache = [];
pluginProto.TokeniseWords = function (text)
{
wordsCache.length = 0;
var cur_word = "";
var ch;
var i = 0;
while (i < text.length)
{
ch = text.charAt(i);
if (ch === "\n")
{
if (cur_word.length)
{
wordsCache.push(cur_word);
cur_word = "";
}
wordsCache.push("\n");
++i;
}
else if (ch === " " || ch === "\t" || ch === "-")
{
do {
cur_word += text.charAt(i);
i++;
}
while (i < text.length && (text.charAt(i) === " " || text.charAt(i) === "\t"));
wordsCache.push(cur_word);
cur_word = "";
}
else if (i < text.length)
{
cur_word += ch;
i++;
}
}
if (cur_word.length)
wordsCache.push(cur_word);
};
pluginProto.WordWrap = function (inst)
{
var text = inst.text;
var lines = inst.lines;
if (!text || !text.length)
{
freeAllLines(lines);
return;
}
var width = inst.width;
if (width <= 2.0)
{
freeAllLines(lines);
return;
}
var charWidth = inst.characterWidth;
var charScale = inst.characterScale;
var charSpacing = inst.characterSpacing;
if ( (text.length * (charWidth * charScale + charSpacing) - charSpacing) <= width && text.indexOf("\n") === -1)
{
var all_width = inst.measureWidth(text);
if (all_width <= width)
{
freeAllLines(lines);
lines.push(allocLine());
lines[0].text = text;
lines[0].width = all_width;
inst.textWidth = all_width;
inst.textHeight = inst.characterHeight * charScale + inst.lineHeight;
return;
}
}
var wrapbyword = inst.wrapbyword;
this.WrapText(inst);
inst.textHeight = lines.length * (inst.characterHeight * charScale + inst.lineHeight);
};
pluginProto.WrapText = function (inst)
{
var wrapbyword = inst.wrapbyword;
var text = inst.text;
var lines = inst.lines;
var width = inst.width;
var wordArray;
if (wrapbyword) {
this.TokeniseWords(text); // writes to wordsCache
wordArray = wordsCache;
} else {
wordArray = text;
}
var cur_line = "";
var prev_line;
var line_width;
var i;
var lineIndex = 0;
var line;
var ignore_newline = false;
for (i = 0; i < wordArray.length; i++)
{
if (wordArray[i] === "\n")
{
if (ignore_newline === true) {
ignore_newline = false;
} else {
addLine(inst,lineIndex,cur_line);
lineIndex++;
}
cur_line = "";
continue;
}
ignore_newline = false;
prev_line = cur_line;
cur_line += wordArray[i];
line_width = inst.measureWidth(trimRight(cur_line));
if (line_width > width)
{
if (prev_line === "") {
addLine(inst,lineIndex,cur_line);
cur_line = "";
ignore_newline = true;
} else {
addLine(inst,lineIndex,prev_line);
cur_line = wordArray[i];
}
lineIndex++;
if (!wrapbyword && cur_line === " ")
cur_line = "";
}
}
if (trimRight(cur_line).length)
{
addLine(inst,lineIndex,cur_line);
lineIndex++;
}
for (i = lineIndex; i < lines.length; i++)
freeLine(lines[i]);
lines.length = lineIndex;
};
instanceProto.measureWidth = function(text) {
var spacing = this.characterSpacing;
var len = text.length;
var width = 0;
for (var i = 0; i < len; i++) {
width += this.getCharacterWidth(text.charAt(i)) * this.characterScale + spacing;
}
width -= (width > 0) ? spacing : 0;
return width;
};
/***/
instanceProto.getCharacterWidth = function(character) {
var widthList = this.characterWidthList;
if (widthList[character] !== undefined) {
return widthList[character];
} else {
return this.characterWidth;
}
};
instanceProto.rebuildText = function() {
if (this.text_changed || this.width !== this.lastwrapwidth) {
this.textWidth = 0;
this.textHeight = 0;
this.type.plugin.WordWrap(this);
this.text_changed = false;
this.lastwrapwidth = this.width;
}
};
var EPSILON = 0.00001;
instanceProto.draw = function(ctx, glmode)
{
var texture = this.texture_img;
if (this.text !== "" && texture != null) {
this.rebuildText();
if (this.height < this.characterHeight*this.characterScale + this.lineHeight) {
return;
}
ctx.globalAlpha = this.opacity;
var myx = this.x;
var myy = this.y;
if (this.runtime.pixel_rounding)
{
myx = (myx + 0.5) | 0;
myy = (myy + 0.5) | 0;
}
ctx.save();
ctx.translate(myx, myy);
ctx.rotate(this.angle);
var ha = this.halign;
var va = this.valign;
var scale = this.characterScale;
var charHeight = this.characterHeight * scale;
var lineHeight = this.lineHeight;
var charSpace = this.characterSpacing;
var lines = this.lines;
var textHeight = this.textHeight;
var halign;
var valign = va * cr.max(0,(this.height - textHeight));
var offx = -(this.hotspotX * this.width);
var offy = -(this.hotspotY * this.height);
offy += valign;
var drawX ;
var drawY = offy;
for(var i = 0; i < lines.length; i++) {
var line = lines[i].text;
var len = lines[i].width;
halign = ha * cr.max(0,this.width - len);
drawX = offx + halign;
drawY += lineHeight;
for(var j = 0; j < line.length; j++) {
var letter = line.charAt(j);
var clip = this.clipList[letter];
if ( drawX + this.getCharacterWidth(letter) * scale > this.width + EPSILON ) {
break;
}
if (clip !== undefined) {
ctx.drawImage( this.texture_img,
clip.x, clip.y, clip.w, clip.h,
Math.round(drawX),Math.round(drawY),clip.w*scale,clip.h*scale);
}
drawX += this.getCharacterWidth(letter) * scale + charSpace;
}
drawY += charHeight;
if ( drawY + charHeight + lineHeight > this.height) {
break;
}
}
ctx.restore();
}
};
var dQuad = new cr.quad();
function rotateQuad(quad,cosa,sina) {
var x_temp;
x_temp = (quad.tlx * cosa) - (quad.tly * sina);
quad.tly = (quad.tly * cosa) + (quad.tlx * sina);
quad.tlx = x_temp;
x_temp = (quad.trx * cosa) - (quad.try_ * sina);
quad.try_ = (quad.try_ * cosa) + (quad.trx * sina);
quad.trx = x_temp;
x_temp = (quad.blx * cosa) - (quad.bly * sina);
quad.bly = (quad.bly * cosa) + (quad.blx * sina);
quad.blx = x_temp;
x_temp = (quad.brx * cosa) - (quad.bry * sina);
quad.bry = (quad.bry * cosa) + (quad.brx * sina);
quad.brx = x_temp;
}
instanceProto.drawGL = function(glw)
{
glw.setTexture(this.webGL_texture);
glw.setOpacity(this.opacity);
if (this.text !== "") {
this.rebuildText();
if (this.height < this.characterHeight*this.characterScale + this.lineHeight) {
return;
}
this.update_bbox();
var q = this.bquad;
var ox = 0;
var oy = 0;
if (this.runtime.pixel_rounding)
{
ox = ((this.x + 0.5) | 0) - this.x;
oy = ((this.y + 0.5) | 0) - this.y;
}
var angle = this.angle;
var ha = this.halign;
var va = this.valign;
var scale = this.characterScale;
var charHeight = this.characterHeight * scale; // to precalculate in onCreate or on change
var lineHeight = this.lineHeight;
var charSpace = this.characterSpacing;
var lines = this.lines;
var textHeight = this.textHeight;
var cosa,sina;
if (angle !== 0)
{
cosa = Math.cos(angle);
sina = Math.sin(angle);
}
var halign;
var valign = va * cr.max(0,(this.height - textHeight));
var offx = q.tlx + ox;
var offy = q.tly + oy;
var drawX ;
var drawY = valign;
for(var i = 0; i < lines.length; i++) {
var line = lines[i].text;
var lineWidth = lines[i].width;
halign = ha * cr.max(0,this.width - lineWidth);
drawX = halign;
drawY += lineHeight;
for(var j = 0; j < line.length; j++) {
var letter = line.charAt(j);
var clipUV = this.clipUV[letter];
if ( drawX + this.getCharacterWidth(letter) * scale > this.width + EPSILON) {
break;
}
if (clipUV !== undefined) {
var clipWidth = this.characterWidth*scale;
var clipHeight = this.characterHeight*scale;
dQuad.tlx = drawX;
dQuad.tly = drawY;
dQuad.trx = drawX + clipWidth;
dQuad.try_ = drawY ;
dQuad.blx = drawX;
dQuad.bly = drawY + clipHeight;
dQuad.brx = drawX + clipWidth;
dQuad.bry = drawY + clipHeight;
if(angle !== 0)
{
rotateQuad(dQuad,cosa,sina);
}
dQuad.offset(offx,offy);
glw.quadTex(
dQuad.tlx, dQuad.tly,
dQuad.trx, dQuad.try_,
dQuad.brx, dQuad.bry,
dQuad.blx, dQuad.bly,
clipUV
);
}
drawX += this.getCharacterWidth(letter) * scale + charSpace;
}
drawY += charHeight;
if ( drawY + charHeight + lineHeight > this.height) {
break;
}
}
}
};
function Cnds() {}
Cnds.prototype.CompareText = function(text_to_compare, case_sensitive)
{
if (case_sensitive)
return this.text == text_to_compare;
else
return cr.equals_nocase(this.text, text_to_compare);
};
pluginProto.cnds = new Cnds();
function Acts() {}
Acts.prototype.SetText = function(param)
{
if (cr.is_number(param) && param < 1e9)
param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors
var text_to_set = param.toString();
if (this.text !== text_to_set)
{
this.text = text_to_set;
this.text_changed = true;
this.runtime.redraw = true;
}
};
Acts.prototype.AppendText = function(param)
{
if (cr.is_number(param))
param = Math.round(param * 1e10) / 1e10; // round to nearest ten billionth - hides floating point errors
var text_to_append = param.toString();
if (text_to_append) // not empty
{
this.text += text_to_append;
this.text_changed = true;
this.runtime.redraw = true;
}
};
Acts.prototype.SetScale = function(param)
{
if (param !== this.characterScale) {
this.characterScale = param;
this.text_changed = true;
this.runtime.redraw = true;
}
};
Acts.prototype.SetCharacterSpacing = function(param)
{
if (param !== this.CharacterSpacing) {
this.characterSpacing = param;
this.text_changed = true;
this.runtime.redraw = true;
}
};
Acts.prototype.SetLineHeight = function(param)
{
if (param !== this.lineHeight) {
this.lineHeight = param;
this.text_changed = true;
this.runtime.redraw = true;
}
};
instanceProto.SetCharWidth = function(character,width) {
var w = parseInt(width,10);
if (this.characterWidthList[character] !== w) {
this.characterWidthList[character] = w;
this.text_changed = true;
this.runtime.redraw = true;
}
};
Acts.prototype.SetCharacterWidth = function(characterSet,width)
{
if (characterSet !== "") {
for(var c = 0; c < characterSet.length; c++) {
this.SetCharWidth(characterSet.charAt(c),width);
}
}
};
Acts.prototype.SetEffect = function (effect)
{
this.compositeOp = cr.effectToCompositeOp(effect);
cr.setGLBlend(this, effect, this.runtime.gl);
this.runtime.redraw = true;
};
Acts.prototype.SetHAlign = function (a)
{
this.halign = a / 2.0;
this.text_changed = true;
this.runtime.redraw = true;
};
Acts.prototype.SetVAlign = function (a)
{
this.valign = a / 2.0;
this.text_changed = true;
this.runtime.redraw = true;
};
pluginProto.acts = new Acts();
function Exps() {}
Exps.prototype.CharacterWidth = function(ret,character)
{
ret.set_int(this.getCharacterWidth(character));
};
Exps.prototype.CharacterHeight = function(ret)
{
ret.set_int(this.characterHeight);
};
Exps.prototype.CharacterScale = function(ret)
{
ret.set_float(this.characterScale);
};
Exps.prototype.CharacterSpacing = function(ret)
{
ret.set_int(this.characterSpacing);
};
Exps.prototype.LineHeight = function(ret)
{
ret.set_int(this.lineHeight);
};
Exps.prototype.Text = function(ret)
{
ret.set_string(this.text);
};
Exps.prototype.TextWidth = function (ret)
{
this.rebuildText();
ret.set_float(this.textWidth);
};
Exps.prototype.TextHeight = function (ret)
{
this.rebuildText();
ret.set_float(this.textHeight);
};
pluginProto.exps = new Exps();
}());
;
;
cr.plugins_.TiledBg = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.TiledBg.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
if (this.is_family)
return;
this.texture_img = new Image();
this.texture_img["idtkLoadDisposed"] = true;
this.texture_img.src = this.texture_file;
this.texture_img.cr_filesize = this.texture_filesize;
this.runtime.wait_for_textures.push(this.texture_img);
this.pattern = null;
this.webGL_texture = null;
};
typeProto.onLostWebGLContext = function ()
{
if (this.is_family)
return;
this.webGL_texture = null;
};
typeProto.onRestoreWebGLContext = function ()
{
if (this.is_family || !this.instances.length)
return;
if (!this.webGL_texture)
{
this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat);
}
var i, len;
for (i = 0, len = this.instances.length; i < len; i++)
this.instances[i].webGL_texture = this.webGL_texture;
};
typeProto.loadTextures = function ()
{
if (this.is_family || this.webGL_texture || !this.runtime.glwrap)
return;
this.webGL_texture = this.runtime.glwrap.loadTexture(this.texture_img, true, this.runtime.linearSampling, this.texture_pixelformat);
};
typeProto.unloadTextures = function ()
{
if (this.is_family || this.instances.length || !this.webGL_texture)
return;
this.runtime.glwrap.deleteTexture(this.webGL_texture);
this.webGL_texture = null;
};
typeProto.preloadCanvas2D = function (ctx)
{
ctx.drawImage(this.texture_img, 0, 0);
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
};
var instanceProto = pluginProto.Instance.prototype;
instanceProto.onCreate = function()
{
this.visible = (this.properties[0] === 0); // 0=visible, 1=invisible
this.rcTex = new cr.rect(0, 0, 0, 0);
this.has_own_texture = false; // true if a texture loaded in from URL
this.texture_img = this.type.texture_img;
if (this.runtime.glwrap)
{
this.type.loadTextures();
this.webGL_texture = this.type.webGL_texture;
}
else
{
if (!this.type.pattern)
this.type.pattern = this.runtime.ctx.createPattern(this.type.texture_img, "repeat");
this.pattern = this.type.pattern;
}
};
instanceProto.afterLoad = function ()
{
this.has_own_texture = false;
this.texture_img = this.type.texture_img;
};
instanceProto.onDestroy = function ()
{
if (this.runtime.glwrap && this.has_own_texture && this.webGL_texture)
{
this.runtime.glwrap.deleteTexture(this.webGL_texture);
this.webGL_texture = null;
}
};
instanceProto.draw = function(ctx)
{
ctx.globalAlpha = this.opacity;
ctx.save();
ctx.fillStyle = this.pattern;
var myx = this.x;
var myy = this.y;
if (this.runtime.pixel_rounding)
{
myx = (myx + 0.5) | 0;
myy = (myy + 0.5) | 0;
}
var drawX = -(this.hotspotX * this.width);
var drawY = -(this.hotspotY * this.height);
var offX = drawX % this.texture_img.width;
var offY = drawY % this.texture_img.height;
if (offX < 0)
offX += this.texture_img.width;
if (offY < 0)
offY += this.texture_img.height;
ctx.translate(myx, myy);
ctx.rotate(this.angle);
ctx.translate(offX, offY);
ctx.fillRect(drawX - offX,
drawY - offY,
this.width,
this.height);
ctx.restore();
};
instanceProto.drawGL = function(glw)
{
glw.setTexture(this.webGL_texture);
glw.setOpacity(this.opacity);
var rcTex = this.rcTex;
rcTex.right = this.width / this.texture_img.width;
rcTex.bottom = this.height / this.texture_img.height;
var q = this.bquad;
if (this.runtime.pixel_rounding)
{
var ox = ((this.x + 0.5) | 0) - this.x;
var oy = ((this.y + 0.5) | 0) - this.y;
glw.quadTex(q.tlx + ox, q.tly + oy, q.trx + ox, q.try_ + oy, q.brx + ox, q.bry + oy, q.blx + ox, q.bly + oy, rcTex);
}
else
glw.quadTex(q.tlx, q.tly, q.trx, q.try_, q.brx, q.bry, q.blx, q.bly, rcTex);
};
function Cnds() {};
Cnds.prototype.OnURLLoaded = function ()
{
return true;
};
pluginProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.SetEffect = function (effect)
{
this.compositeOp = cr.effectToCompositeOp(effect);
cr.setGLBlend(this, effect, this.runtime.gl);
this.runtime.redraw = true;
};
Acts.prototype.LoadURL = function (url_)
{
var img = new Image();
var self = this;
img.onload = function ()
{
self.texture_img = img;
if (self.runtime.glwrap)
{
if (self.has_own_texture && self.webGL_texture)
self.runtime.glwrap.deleteTexture(self.webGL_texture);
self.webGL_texture = self.runtime.glwrap.loadTexture(img, true, self.runtime.linearSampling);
}
else
{
self.pattern = self.runtime.ctx.createPattern(img, "repeat");
}
self.has_own_texture = true;
self.runtime.redraw = true;
self.runtime.trigger(cr.plugins_.TiledBg.prototype.cnds.OnURLLoaded, self);
};
if (url_.substr(0, 5) !== "data:")
img.crossOrigin = 'anonymous';
img.src = url_;
};
pluginProto.acts = new Acts();
function Exps() {};
Exps.prototype.ImageWidth = function (ret)
{
ret.set_float(this.texture_img.width);
};
Exps.prototype.ImageHeight = function (ret)
{
ret.set_float(this.texture_img.height);
};
pluginProto.exps = new Exps();
}());
;
;
cr.plugins_.Touch = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var pluginProto = cr.plugins_.Touch.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
this.touches = [];
this.mouseDown = false;
};
var instanceProto = pluginProto.Instance.prototype;
var dummyoffset = {left: 0, top: 0};
instanceProto.findTouch = function (id)
{
var i, len;
for (i = 0, len = this.touches.length; i < len; i++)
{
if (this.touches[i]["id"] === id)
return i;
}
return -1;
};
var appmobi_accx = 0;
var appmobi_accy = 0;
var appmobi_accz = 0;
function AppMobiGetAcceleration(evt)
{
appmobi_accx = evt.x;
appmobi_accy = evt.y;
appmobi_accz = evt.z;
};
var pg_accx = 0;
var pg_accy = 0;
var pg_accz = 0;
function PhoneGapGetAcceleration(evt)
{
pg_accx = evt.x;
pg_accy = evt.y;
pg_accz = evt.z;
};
var theInstance = null;
instanceProto.onCreate = function()
{
theInstance = this;
this.isWindows8 = !!(typeof window["c2isWindows8"] !== "undefined" && window["c2isWindows8"]);
this.orient_alpha = 0;
this.orient_beta = 0;
this.orient_gamma = 0;
this.acc_g_x = 0;
this.acc_g_y = 0;
this.acc_g_z = 0;
this.acc_x = 0;
this.acc_y = 0;
this.acc_z = 0;
this.curTouchX = 0;
this.curTouchY = 0;
this.trigger_index = 0;
this.trigger_id = 0;
this.useMouseInput = (this.properties[0] !== 0);
var elem = (this.runtime.fullscreen_mode > 0) ? document : this.runtime.canvas;
var elem2 = document;
if (this.runtime.isDirectCanvas)
elem2 = elem = window["Canvas"];
else if (this.runtime.isCocoonJs)
elem2 = elem = window;
var self = this;
if (window.navigator["pointerEnabled"])
{
elem.addEventListener("pointerdown",
function(info) {
self.onPointerStart(info);
},
false
);
elem.addEventListener("pointermove",
function(info) {
self.onPointerMove(info);
},
false
);
elem2.addEventListener("pointerup",
function(info) {
self.onPointerEnd(info);
},
false
);
elem2.addEventListener("pointercancel",
function(info) {
self.onPointerEnd(info);
},
false
);
if (this.runtime.canvas)
{
this.runtime.canvas.addEventListener("MSGestureHold", function(e) {
e.preventDefault();
}, false);
document.addEventListener("MSGestureHold", function(e) {
e.preventDefault();
}, false);
this.runtime.canvas.addEventListener("gesturehold", function(e) {
e.preventDefault();
}, false);
document.addEventListener("gesturehold", function(e) {
e.preventDefault();
}, false);
}
}
else if (window.navigator["msPointerEnabled"])
{
elem.addEventListener("MSPointerDown",
function(info) {
self.onPointerStart(info);
},
false
);
elem.addEventListener("MSPointerMove",
function(info) {
self.onPointerMove(info);
},
false
);
elem2.addEventListener("MSPointerUp",
function(info) {
self.onPointerEnd(info);
},
false
);
elem2.addEventListener("MSPointerCancel",
function(info) {
self.onPointerEnd(info);
},
false
);
if (this.runtime.canvas)
{
this.runtime.canvas.addEventListener("MSGestureHold", function(e) {
e.preventDefault();
}, false);
document.addEventListener("MSGestureHold", function(e) {
e.preventDefault();
}, false);
}
}
else
{
elem.addEventListener("touchstart",
function(info) {
self.onTouchStart(info);
},
false
);
elem.addEventListener("touchmove",
function(info) {
self.onTouchMove(info);
},
false
);
elem2.addEventListener("touchend",
function(info) {
self.onTouchEnd(info);
},
false
);
elem2.addEventListener("touchcancel",
function(info) {
self.onTouchEnd(info);
},
false
);
}
if (this.isWindows8)
{
var win8accelerometerFn = function(e) {
var reading = e["reading"];
self.acc_x = reading["accelerationX"];
self.acc_y = reading["accelerationY"];
self.acc_z = reading["accelerationZ"];
};
var win8inclinometerFn = function(e) {
var reading = e["reading"];
self.orient_alpha = reading["yawDegrees"];
self.orient_beta = reading["pitchDegrees"];
self.orient_gamma = reading["rollDegrees"];
};
var accelerometer = Windows["Devices"]["Sensors"]["Accelerometer"]["getDefault"]();
if (accelerometer)
{
accelerometer["reportInterval"] = Math.max(accelerometer["minimumReportInterval"], 16);
accelerometer.addEventListener("readingchanged", win8accelerometerFn);
}
var inclinometer = Windows["Devices"]["Sensors"]["Inclinometer"]["getDefault"]();
if (inclinometer)
{
inclinometer["reportInterval"] = Math.max(inclinometer["minimumReportInterval"], 16);
inclinometer.addEventListener("readingchanged", win8inclinometerFn);
}
document.addEventListener("visibilitychange", function(e) {
if (document["hidden"] || document["msHidden"])
{
if (accelerometer)
accelerometer.removeEventListener("readingchanged", win8accelerometerFn);
if (inclinometer)
inclinometer.removeEventListener("readingchanged", win8inclinometerFn);
}
else
{
if (accelerometer)
accelerometer.addEventListener("readingchanged", win8accelerometerFn);
if (inclinometer)
inclinometer.addEventListener("readingchanged", win8inclinometerFn);
}
}, false);
}
else
{
window.addEventListener("deviceorientation", function (eventData) {
self.orient_alpha = eventData["alpha"] || 0;
self.orient_beta = eventData["beta"] || 0;
self.orient_gamma = eventData["gamma"] || 0;
}, false);
window.addEventListener("devicemotion", function (eventData) {
if (eventData["accelerationIncludingGravity"])
{
self.acc_g_x = eventData["accelerationIncludingGravity"]["x"];
self.acc_g_y = eventData["accelerationIncludingGravity"]["y"];
self.acc_g_z = eventData["accelerationIncludingGravity"]["z"];
}
if (eventData["acceleration"])
{
self.acc_x = eventData["acceleration"]["x"];
self.acc_y = eventData["acceleration"]["y"];
self.acc_z = eventData["acceleration"]["z"];
}
}, false);
}
if (this.useMouseInput && !this.runtime.isDomFree)
{
jQuery(document).mousemove(
function(info) {
self.onMouseMove(info);
}
);
jQuery(document).mousedown(
function(info) {
self.onMouseDown(info);
}
);
jQuery(document).mouseup(
function(info) {
self.onMouseUp(info);
}
);
}
if (this.runtime.isAppMobi && !this.runtime.isDirectCanvas)
{
AppMobi["accelerometer"]["watchAcceleration"](AppMobiGetAcceleration, { "frequency": 40, "adjustForRotation": true });
}
if (this.runtime.isPhoneGap)
{
navigator["accelerometer"]["watchAcceleration"](PhoneGapGetAcceleration, null, { "frequency": 40 });
}
this.runtime.tick2Me(this);
};
instanceProto.onPointerMove = function (info)
{
if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse")
return;
if (info.preventDefault)
info.preventDefault();
var i = this.findTouch(info["pointerId"]);
var nowtime = cr.performance_now();
if (i >= 0)
{
var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset();
var t = this.touches[i];
if (nowtime - t.time < 2)
return;
t.lasttime = t.time;
t.lastx = t.x;
t.lasty = t.y;
t.time = nowtime;
t.x = info.pageX - offset.left;
t.y = info.pageY - offset.top;
}
};
instanceProto.onPointerStart = function (info)
{
if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse")
return;
if (info.preventDefault)
info.preventDefault();
var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset();
var touchx = info.pageX - offset.left;
var touchy = info.pageY - offset.top;
var nowtime = cr.performance_now();
this.trigger_index = this.touches.length;
this.trigger_id = info["pointerId"];
this.touches.push({ time: nowtime,
x: touchx,
y: touchy,
lasttime: nowtime,
lastx: touchx,
lasty: touchy,
"id": info["pointerId"],
startindex: this.trigger_index
});
this.runtime.isInUserInputEvent = true;
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this);
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this);
this.curTouchX = touchx;
this.curTouchY = touchy;
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this);
this.runtime.isInUserInputEvent = false;
};
instanceProto.onPointerEnd = function (info)
{
if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse")
return;
if (info.preventDefault)
info.preventDefault();
var i = this.findTouch(info["pointerId"]);
this.trigger_index = (i >= 0 ? this.touches[i].startindex : -1);
this.trigger_id = (i >= 0 ? this.touches[i]["id"] : -1);
this.runtime.isInUserInputEvent = true;
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this);
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this);
this.runtime.isInUserInputEvent = false;
if (i >= 0)
{
this.touches.splice(i, 1);
}
};
instanceProto.onTouchMove = function (info)
{
if (info.preventDefault)
info.preventDefault();
var nowtime = cr.performance_now();
var i, len, t, u;
for (i = 0, len = info.changedTouches.length; i < len; i++)
{
t = info.changedTouches[i];
var j = this.findTouch(t["identifier"]);
if (j >= 0)
{
var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset();
u = this.touches[j];
if (nowtime - u.time < 2)
continue;
u.lasttime = u.time;
u.lastx = u.x;
u.lasty = u.y;
u.time = nowtime;
u.x = t.pageX - offset.left;
u.y = t.pageY - offset.top;
}
}
};
instanceProto.onTouchStart = function (info)
{
if (info.preventDefault)
info.preventDefault();
var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset();
var nowtime = cr.performance_now();
this.runtime.isInUserInputEvent = true;
var i, len, t, j;
for (i = 0, len = info.changedTouches.length; i < len; i++)
{
t = info.changedTouches[i];
j = this.findTouch(t["identifier"]);
if (j !== -1)
continue;
var touchx = t.pageX - offset.left;
var touchy = t.pageY - offset.top;
this.trigger_index = this.touches.length;
this.trigger_id = t["identifier"];
this.touches.push({ time: nowtime,
x: touchx,
y: touchy,
lasttime: nowtime,
lastx: touchx,
lasty: touchy,
"id": t["identifier"],
startindex: this.trigger_index
});
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchStart, this);
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchStart, this);
this.curTouchX = touchx;
this.curTouchY = touchy;
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchObject, this);
}
this.runtime.isInUserInputEvent = false;
};
instanceProto.onTouchEnd = function (info)
{
if (info.preventDefault)
info.preventDefault();
this.runtime.isInUserInputEvent = true;
var i, len, t, j;
for (i = 0, len = info.changedTouches.length; i < len; i++)
{
t = info.changedTouches[i];
j = this.findTouch(t["identifier"]);
if (j >= 0)
{
this.trigger_index = this.touches[j].startindex;
this.trigger_id = this.touches[j]["id"];
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnNthTouchEnd, this);
this.runtime.trigger(cr.plugins_.Touch.prototype.cnds.OnTouchEnd, this);
this.touches.splice(j, 1);
}
}
this.runtime.isInUserInputEvent = false;
};
instanceProto.getAlpha = function ()
{
if (this.runtime.isAppMobi && this.orient_alpha === 0 && appmobi_accz !== 0)
return appmobi_accz * 90;
else if (this.runtime.isPhoneGap && this.orient_alpha === 0 && pg_accz !== 0)
return pg_accz * 90;
else
return this.orient_alpha;
};
instanceProto.getBeta = function ()
{
if (this.runtime.isAppMobi && this.orient_beta === 0 && appmobi_accy !== 0)
return appmobi_accy * -90;
else if (this.runtime.isPhoneGap && this.orient_beta === 0 && pg_accy !== 0)
return pg_accy * -90;
else
return this.orient_beta;
};
instanceProto.getGamma = function ()
{
if (this.runtime.isAppMobi && this.orient_gamma === 0 && appmobi_accx !== 0)
return appmobi_accx * 90;
else if (this.runtime.isPhoneGap && this.orient_gamma === 0 && pg_accx !== 0)
return pg_accx * 90;
else
return this.orient_gamma;
};
var noop_func = function(){};
instanceProto.onMouseDown = function(info)
{
if (info.preventDefault && this.runtime.had_a_click)
info.preventDefault();
var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 };
var fakeinfo = { changedTouches: [t] };
this.onTouchStart(fakeinfo);
this.mouseDown = true;
};
instanceProto.onMouseMove = function(info)
{
if (info.preventDefault && this.runtime.had_a_click)
info.preventDefault();
if (!this.mouseDown)
return;
var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 };
var fakeinfo = { changedTouches: [t] };
this.onTouchMove(fakeinfo);
};
instanceProto.onMouseUp = function(info)
{
if (info.preventDefault && this.runtime.had_a_click)
info.preventDefault();
this.runtime.had_a_click = true;
var t = { pageX: info.pageX, pageY: info.pageY, "identifier": 0 };
var fakeinfo = { changedTouches: [t] };
this.onTouchEnd(fakeinfo);
this.mouseDown = false;
};
instanceProto.tick2 = function()
{
var i, len, t;
var nowtime = cr.performance_now();
for (i = 0, len = this.touches.length; i < len; i++)
{
t = this.touches[i];
if (t.time <= nowtime - 50)
t.lasttime = nowtime;
}
};
function Cnds() {};
Cnds.prototype.OnTouchStart = function ()
{
return true;
};
Cnds.prototype.OnTouchEnd = function ()
{
return true;
};
Cnds.prototype.IsInTouch = function ()
{
return this.touches.length;
};
Cnds.prototype.OnTouchObject = function (type)
{
if (!type)
return false;
return this.runtime.testAndSelectCanvasPointOverlap(type, this.curTouchX, this.curTouchY, false);
};
Cnds.prototype.IsTouchingObject = function (type)
{
if (!type)
return false;
var sol = type.getCurrentSol();
var instances = sol.getObjects();
var px, py;
var touching = [];
var i, leni, j, lenj;
for (i = 0, leni = instances.length; i < leni; i++)
{
var inst = instances[i];
inst.update_bbox();
for (j = 0, lenj = this.touches.length; j < lenj; j++)
{
var touch = this.touches[j];
px = inst.layer.canvasToLayer(touch.x, touch.y, true);
py = inst.layer.canvasToLayer(touch.x, touch.y, false);
if (inst.contains_pt(px, py))
{
touching.push(inst);
break;
}
}
}
if (touching.length)
{
sol.select_all = false;
sol.instances = touching;
type.applySolToContainer();
return true;
}
else
return false;
};
Cnds.prototype.CompareTouchSpeed = function (index, cmp, s)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
return false;
var t = this.touches[index];
var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty);
var timediff = (t.time - t.lasttime) / 1000;
var speed = 0;
if (timediff > 0)
speed = dist / timediff;
return cr.do_cmp(speed, cmp, s);
};
Cnds.prototype.OrientationSupported = function ()
{
return typeof window["DeviceOrientationEvent"] !== "undefined";
};
Cnds.prototype.MotionSupported = function ()
{
return typeof window["DeviceMotionEvent"] !== "undefined";
};
Cnds.prototype.CompareOrientation = function (orientation_, cmp_, angle_)
{
var v = 0;
if (orientation_ === 0)
v = this.getAlpha();
else if (orientation_ === 1)
v = this.getBeta();
else
v = this.getGamma();
return cr.do_cmp(v, cmp_, angle_);
};
Cnds.prototype.CompareAcceleration = function (acceleration_, cmp_, angle_)
{
var v = 0;
if (acceleration_ === 0)
v = this.acc_g_x;
else if (acceleration_ === 1)
v = this.acc_g_y;
else if (acceleration_ === 2)
v = this.acc_g_z;
else if (acceleration_ === 3)
v = this.acc_x;
else if (acceleration_ === 4)
v = this.acc_y;
else if (acceleration_ === 5)
v = this.acc_z;
return cr.do_cmp(v, cmp_, angle_);
};
Cnds.prototype.OnNthTouchStart = function (touch_)
{
touch_ = Math.floor(touch_);
return touch_ === this.trigger_index;
};
Cnds.prototype.OnNthTouchEnd = function (touch_)
{
touch_ = Math.floor(touch_);
return touch_ === this.trigger_index;
};
Cnds.prototype.HasNthTouch = function (touch_)
{
touch_ = Math.floor(touch_);
return this.touches.length >= touch_ + 1;
};
pluginProto.cnds = new Cnds();
function Exps() {};
Exps.prototype.TouchCount = function (ret)
{
ret.set_int(this.touches.length);
};
Exps.prototype.X = function (ret, layerparam)
{
if (this.touches.length)
{
var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle;
if (cr.is_undefined(layerparam))
{
layer = this.runtime.getLayerByNumber(0);
oldScale = layer.scale;
oldZoomRate = layer.zoomRate;
oldParallaxX = layer.parallaxX;
oldAngle = layer.angle;
layer.scale = this.runtime.running_layout.scale;
layer.zoomRate = 1.0;
layer.parallaxX = 1.0;
layer.angle = this.runtime.running_layout.angle;
ret.set_float(layer.canvasToLayer(this.touches[0].x, this.touches[0].y, true));
layer.scale = oldScale;
layer.zoomRate = oldZoomRate;
layer.parallaxX = oldParallaxX;
layer.angle = oldAngle;
}
else
{
if (cr.is_number(layerparam))
layer = this.runtime.getLayerByNumber(layerparam);
else
layer = this.runtime.getLayerByName(layerparam);
if (layer)
ret.set_float(layer.canvasToLayer(this.touches[0].x, this.touches[0].y, true));
else
ret.set_float(0);
}
}
else
ret.set_float(0);
};
Exps.prototype.XAt = function (ret, index, layerparam)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
{
ret.set_float(0);
return;
}
var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle;
if (cr.is_undefined(layerparam))
{
layer = this.runtime.getLayerByNumber(0);
oldScale = layer.scale;
oldZoomRate = layer.zoomRate;
oldParallaxX = layer.parallaxX;
oldAngle = layer.angle;
layer.scale = this.runtime.running_layout.scale;
layer.zoomRate = 1.0;
layer.parallaxX = 1.0;
layer.angle = this.runtime.running_layout.angle;
ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true));
layer.scale = oldScale;
layer.zoomRate = oldZoomRate;
layer.parallaxX = oldParallaxX;
layer.angle = oldAngle;
}
else
{
if (cr.is_number(layerparam))
layer = this.runtime.getLayerByNumber(layerparam);
else
layer = this.runtime.getLayerByName(layerparam);
if (layer)
ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, true));
else
ret.set_float(0);
}
};
Exps.prototype.XForID = function (ret, id, layerparam)
{
var index = this.findTouch(id);
if (index < 0)
{
ret.set_float(0);
return;
}
var touch = this.touches[index];
var layer, oldScale, oldZoomRate, oldParallaxX, oldAngle;
if (cr.is_undefined(layerparam))
{
layer = this.runtime.getLayerByNumber(0);
oldScale = layer.scale;
oldZoomRate = layer.zoomRate;
oldParallaxX = layer.parallaxX;
oldAngle = layer.angle;
layer.scale = this.runtime.running_layout.scale;
layer.zoomRate = 1.0;
layer.parallaxX = 1.0;
layer.angle = this.runtime.running_layout.angle;
ret.set_float(layer.canvasToLayer(touch.x, touch.y, true));
layer.scale = oldScale;
layer.zoomRate = oldZoomRate;
layer.parallaxX = oldParallaxX;
layer.angle = oldAngle;
}
else
{
if (cr.is_number(layerparam))
layer = this.runtime.getLayerByNumber(layerparam);
else
layer = this.runtime.getLayerByName(layerparam);
if (layer)
ret.set_float(layer.canvasToLayer(touch.x, touch.y, true));
else
ret.set_float(0);
}
};
Exps.prototype.Y = function (ret, layerparam)
{
if (this.touches.length)
{
var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle;
if (cr.is_undefined(layerparam))
{
layer = this.runtime.getLayerByNumber(0);
oldScale = layer.scale;
oldZoomRate = layer.zoomRate;
oldParallaxY = layer.parallaxY;
oldAngle = layer.angle;
layer.scale = this.runtime.running_layout.scale;
layer.zoomRate = 1.0;
layer.parallaxY = 1.0;
layer.angle = this.runtime.running_layout.angle;
ret.set_float(layer.canvasToLayer(this.touches[0].x, this.touches[0].y, false));
layer.scale = oldScale;
layer.zoomRate = oldZoomRate;
layer.parallaxY = oldParallaxY;
layer.angle = oldAngle;
}
else
{
if (cr.is_number(layerparam))
layer = this.runtime.getLayerByNumber(layerparam);
else
layer = this.runtime.getLayerByName(layerparam);
if (layer)
ret.set_float(layer.canvasToLayer(this.touches[0].x, this.touches[0].y, false));
else
ret.set_float(0);
}
}
else
ret.set_float(0);
};
Exps.prototype.YAt = function (ret, index, layerparam)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
{
ret.set_float(0);
return;
}
var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle;
if (cr.is_undefined(layerparam))
{
layer = this.runtime.getLayerByNumber(0);
oldScale = layer.scale;
oldZoomRate = layer.zoomRate;
oldParallaxY = layer.parallaxY;
oldAngle = layer.angle;
layer.scale = this.runtime.running_layout.scale;
layer.zoomRate = 1.0;
layer.parallaxY = 1.0;
layer.angle = this.runtime.running_layout.angle;
ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false));
layer.scale = oldScale;
layer.zoomRate = oldZoomRate;
layer.parallaxY = oldParallaxY;
layer.angle = oldAngle;
}
else
{
if (cr.is_number(layerparam))
layer = this.runtime.getLayerByNumber(layerparam);
else
layer = this.runtime.getLayerByName(layerparam);
if (layer)
ret.set_float(layer.canvasToLayer(this.touches[index].x, this.touches[index].y, false));
else
ret.set_float(0);
}
};
Exps.prototype.YForID = function (ret, id, layerparam)
{
var index = this.findTouch(id);
if (index < 0)
{
ret.set_float(0);
return;
}
var touch = this.touches[index];
var layer, oldScale, oldZoomRate, oldParallaxY, oldAngle;
if (cr.is_undefined(layerparam))
{
layer = this.runtime.getLayerByNumber(0);
oldScale = layer.scale;
oldZoomRate = layer.zoomRate;
oldParallaxY = layer.parallaxY;
oldAngle = layer.angle;
layer.scale = this.runtime.running_layout.scale;
layer.zoomRate = 1.0;
layer.parallaxY = 1.0;
layer.angle = this.runtime.running_layout.angle;
ret.set_float(layer.canvasToLayer(touch.x, touch.y, false));
layer.scale = oldScale;
layer.zoomRate = oldZoomRate;
layer.parallaxY = oldParallaxY;
layer.angle = oldAngle;
}
else
{
if (cr.is_number(layerparam))
layer = this.runtime.getLayerByNumber(layerparam);
else
layer = this.runtime.getLayerByName(layerparam);
if (layer)
ret.set_float(layer.canvasToLayer(touch.x, touch.y, false));
else
ret.set_float(0);
}
};
Exps.prototype.AbsoluteX = function (ret)
{
if (this.touches.length)
ret.set_float(this.touches[0].x);
else
ret.set_float(0);
};
Exps.prototype.AbsoluteXAt = function (ret, index)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
{
ret.set_float(0);
return;
}
ret.set_float(this.touches[index].x);
};
Exps.prototype.AbsoluteXForID = function (ret, id)
{
var index = this.findTouch(id);
if (index < 0)
{
ret.set_float(0);
return;
}
var touch = this.touches[index];
ret.set_float(touch.x);
};
Exps.prototype.AbsoluteY = function (ret)
{
if (this.touches.length)
ret.set_float(this.touches[0].y);
else
ret.set_float(0);
};
Exps.prototype.AbsoluteYAt = function (ret, index)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
{
ret.set_float(0);
return;
}
ret.set_float(this.touches[index].y);
};
Exps.prototype.AbsoluteYForID = function (ret, id)
{
var index = this.findTouch(id);
if (index < 0)
{
ret.set_float(0);
return;
}
var touch = this.touches[index];
ret.set_float(touch.y);
};
Exps.prototype.SpeedAt = function (ret, index)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
{
ret.set_float(0);
return;
}
var t = this.touches[index];
var dist = cr.distanceTo(t.x, t.y, t.lastx, t.lasty);
var timediff = (t.time - t.lasttime) / 1000;
if (timediff === 0)
ret.set_float(0);
else
ret.set_float(dist / timediff);
};
Exps.prototype.SpeedForID = function (ret, id)
{
var index = this.findTouch(id);
if (index < 0)
{
ret.set_float(0);
return;
}
var touch = this.touches[index];
var dist = cr.distanceTo(touch.x, touch.y, touch.lastx, touch.lasty);
var timediff = (touch.time - touch.lasttime) / 1000;
if (timediff === 0)
ret.set_float(0);
else
ret.set_float(dist / timediff);
};
Exps.prototype.AngleAt = function (ret, index)
{
index = Math.floor(index);
if (index < 0 || index >= this.touches.length)
{
ret.set_float(0);
return;
}
var t = this.touches[index];
ret.set_float(cr.to_degrees(cr.angleTo(t.lastx, t.lasty, t.x, t.y)));
};
Exps.prototype.AngleForID = function (ret, id)
{
var index = this.findTouch(id);
if (index < 0)
{
ret.set_float(0);
return;
}
var touch = this.touches[index];
ret.set_float(cr.to_degrees(cr.angleTo(touch.lastx, touch.lasty, touch.x, touch.y)));
};
Exps.prototype.Alpha = function (ret)
{
ret.set_float(this.getAlpha());
};
Exps.prototype.Beta = function (ret)
{
ret.set_float(this.getBeta());
};
Exps.prototype.Gamma = function (ret)
{
ret.set_float(this.getGamma());
};
Exps.prototype.AccelerationXWithG = function (ret)
{
ret.set_float(this.acc_g_x);
};
Exps.prototype.AccelerationYWithG = function (ret)
{
ret.set_float(this.acc_g_y);
};
Exps.prototype.AccelerationZWithG = function (ret)
{
ret.set_float(this.acc_g_z);
};
Exps.prototype.AccelerationX = function (ret)
{
ret.set_float(this.acc_x);
};
Exps.prototype.AccelerationY = function (ret)
{
ret.set_float(this.acc_y);
};
Exps.prototype.AccelerationZ = function (ret)
{
ret.set_float(this.acc_z);
};
Exps.prototype.TouchIndex = function (ret)
{
ret.set_int(this.trigger_index);
};
Exps.prototype.TouchID = function (ret)
{
ret.set_float(this.trigger_id);
};
pluginProto.exps = new Exps();
}());
;
;
cr.plugins_.WebStorage = function(runtime)
{
this.runtime = runtime;
};
(function()
{
var pluginProto = cr.plugins_.WebStorage.prototype;
pluginProto.Type = function(plugin)
{
this.plugin = plugin;
this.runtime = plugin.runtime;
};
var typeProto = pluginProto.Type.prototype;
typeProto.onCreate = function()
{
};
pluginProto.Instance = function(type)
{
this.type = type;
this.runtime = type.runtime;
};
var instanceProto = pluginProto.Instance.prototype;
var prefix = "";
var is_arcade = (typeof window["is_scirra_arcade"] !== "undefined");
if (is_arcade)
prefix = "arcade" + window["scirra_arcade_id"];
var logged_sessionnotsupported = false;
function LogSessionNotSupported()
{
if (logged_sessionnotsupported)
return;
cr.logexport("[Construct 2] Webstorage plugin: session storage is not supported on this platform. Try using local storage or global variables instead.");
logged_sessionnotsupported = true;
};
instanceProto.onCreate = function()
{
};
function Cnds() {};
Cnds.prototype.LocalStorageEnabled = function()
{
return true;
};
Cnds.prototype.SessionStorageEnabled = function()
{
return true;
};
Cnds.prototype.LocalStorageExists = function(key)
{
return localStorage.getItem(prefix + key) != null;
};
Cnds.prototype.SessionStorageExists = function(key)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
return false;
}
return sessionStorage.getItem(prefix + key) != null;
};
Cnds.prototype.OnQuotaExceeded = function ()
{
return true;
};
Cnds.prototype.CompareKeyText = function (key, text_to_compare, case_sensitive)
{
var value = localStorage.getItem(prefix + key) || "";
if (case_sensitive)
return value == text_to_compare;
else
return cr.equals_nocase(value, text_to_compare);
};
Cnds.prototype.CompareKeyNumber = function (key, cmp, x)
{
var value = localStorage.getItem(prefix + key) || "";
return cr.do_cmp(parseFloat(value), cmp, x);
};
pluginProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.StoreLocal = function(key, data)
{
try {
localStorage.setItem(prefix + key, data);
}
catch (e)
{
this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this);
}
};
Acts.prototype.StoreSession = function(key,data)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
return;
}
try {
sessionStorage.setItem(prefix + key, data);
}
catch (e)
{
this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this);
}
};
Acts.prototype.RemoveLocal = function(key)
{
localStorage.removeItem(prefix + key);
};
Acts.prototype.RemoveSession = function(key)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
return;
}
sessionStorage.removeItem(prefix + key);
};
Acts.prototype.ClearLocal = function()
{
if (!is_arcade)
localStorage.clear();
};
Acts.prototype.ClearSession = function()
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
return;
}
if (!is_arcade)
sessionStorage.clear();
};
Acts.prototype.JSONLoad = function (json_, mode_)
{
var d;
try {
d = JSON.parse(json_);
}
catch(e) { return; }
if (!d["c2dictionary"]) // presumably not a c2dictionary object
return;
var o = d["data"];
if (mode_ === 0 && !is_arcade) // 'set' mode: must clear webstorage first
localStorage.clear();
var p;
for (p in o)
{
if (o.hasOwnProperty(p))
{
try {
localStorage.setItem(prefix + p, o[p]);
}
catch (e)
{
this.runtime.trigger(cr.plugins_.WebStorage.prototype.cnds.OnQuotaExceeded, this);
return;
}
}
}
};
pluginProto.acts = new Acts();
function Exps() {};
Exps.prototype.LocalValue = function(ret,key)
{
ret.set_string(localStorage.getItem(prefix + key) || "");
};
Exps.prototype.SessionValue = function(ret,key)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
ret.set_string("");
return;
}
ret.set_string(sessionStorage.getItem(prefix + key) || "");
};
Exps.prototype.LocalCount = function(ret)
{
ret.set_int(is_arcade ? 0 : localStorage.length);
};
Exps.prototype.SessionCount = function(ret)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
ret.set_int(0);
return;
}
ret.set_int(is_arcade ? 0 : sessionStorage.length);
};
Exps.prototype.LocalAt = function(ret,n)
{
if (is_arcade)
ret.set_string("");
else
ret.set_string(localStorage.getItem(localStorage.key(n)) || "");
};
Exps.prototype.SessionAt = function(ret,n)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
ret.set_string("");
return;
}
if (is_arcade)
ret.set_string("");
else
ret.set_string(sessionStorage.getItem(sessionStorage.key(n)) || "");
};
Exps.prototype.LocalKeyAt = function(ret,n)
{
if (is_arcade)
ret.set_string("");
else
ret.set_string(localStorage.key(n) || "");
};
Exps.prototype.SessionKeyAt = function(ret,n)
{
if (this.runtime.isCocoonJs || !sessionStorage)
{
LogSessionNotSupported();
ret.set_string("");
return;
}
if (is_arcade)
ret.set_string("");
else
ret.set_string(sessionStorage.key(n) || "");
};
Exps.prototype.AsJSON = function (ret)
{
var o = {}, i, len, k;
for (i = 0, len = localStorage.length; i < len; i++)
{
k = localStorage.key(i);
if (is_arcade)
{
if (k.substr(0, prefix.length) === prefix)
{
o[k.substr(prefix.length)] = localStorage.getItem(k);
}
}
else
o[k] = localStorage.getItem(k);
}
ret.set_string(JSON.stringify({
"c2dictionary": true,
"data": o
}));
};
pluginProto.exps = new Exps();
}());
;
;
cr.behaviors.DragnDrop = function(runtime)
{
this.runtime = runtime;
var self = this;
if (!this.runtime.isDomFree)
{
jQuery(document).mousemove(
function(info) {
self.onMouseMove(info);
}
);
jQuery(document).mousedown(
function(info) {
self.onMouseDown(info);
}
);
jQuery(document).mouseup(
function(info) {
self.onMouseUp(info);
}
);
}
var elem = (this.runtime.fullscreen_mode > 0) ? document : this.runtime.canvas;
if (this.runtime.isDirectCanvas)
elem = window["Canvas"];
else if (this.runtime.isCocoonJs)
elem = window;
if (window.navigator["pointerEnabled"])
{
elem.addEventListener("pointerdown",
function(info) {
self.onPointerStart(info);
},
false
);
elem.addEventListener("pointermove",
function(info) {
self.onPointerMove(info);
},
false
);
elem.addEventListener("pointerup",
function(info) {
self.onPointerEnd(info);
},
false
);
elem.addEventListener("pointercancel",
function(info) {
self.onPointerEnd(info);
},
false
);
}
else if (window.navigator["msPointerEnabled"])
{
elem.addEventListener("MSPointerDown",
function(info) {
self.onPointerStart(info);
},
false
);
elem.addEventListener("MSPointerMove",
function(info) {
self.onPointerMove(info);
},
false
);
elem.addEventListener("MSPointerUp",
function(info) {
self.onPointerEnd(info);
},
false
);
elem.addEventListener("MSPointerCancel",
function(info) {
self.onPointerEnd(info);
},
false
);
}
else
{
elem.addEventListener("touchstart",
function(info) {
self.onTouchStart(info);
},
false
);
elem.addEventListener("touchmove",
function(info) {
self.onTouchMove(info);
},
false
);
elem.addEventListener("touchend",
function(info) {
self.onTouchEnd(info);
},
false
);
elem.addEventListener("touchcancel",
function(info) {
self.onTouchEnd(info);
},
false
);
}
};
(function ()
{
var behaviorProto = cr.behaviors.DragnDrop.prototype;
var dummyoffset = {left: 0, top: 0};
function GetDragDropBehavior(inst)
{
var i, len;
for (i = 0, len = inst.behavior_insts.length; i < len; i++)
{
if (inst.behavior_insts[i] instanceof behaviorProto.Instance)
return inst.behavior_insts[i];
}
return null;
};
behaviorProto.onMouseDown = function (info)
{
if (info.which !== 1)
return; // not left mouse button
this.onInputDown("leftmouse", info.pageX, info.pageY);
};
behaviorProto.onMouseMove = function (info)
{
if (info.which !== 1)
return; // not left mouse button
this.onInputMove("leftmouse", info.pageX, info.pageY);
};
behaviorProto.onMouseUp = function (info)
{
if (info.which !== 1)
return; // not left mouse button
this.onInputUp("leftmouse");
};
behaviorProto.onTouchStart = function (info)
{
if (info.preventDefault)
info.preventDefault();
var i, len, t, id;
for (i = 0, len = info.changedTouches.length; i < len; i++)
{
t = info.changedTouches[i];
id = t.identifier;
this.onInputDown(id ? id.toString() : "", t.pageX, t.pageY);
}
};
behaviorProto.onTouchMove = function (info)
{
if (info.preventDefault)
info.preventDefault();
var i, len, t, id;
for (i = 0, len = info.changedTouches.length; i < len; i++)
{
t = info.changedTouches[i];
id = t.identifier;
this.onInputMove(id ? id.toString() : "", t.pageX, t.pageY);
}
};
behaviorProto.onTouchEnd = function (info)
{
if (info.preventDefault)
info.preventDefault();
var i, len, t, id;
for (i = 0, len = info.changedTouches.length; i < len; i++)
{
t = info.changedTouches[i];
id = t.identifier;
this.onInputUp(id ? id.toString() : "");
}
};
behaviorProto.onPointerStart = function (info)
{
if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse")
return;
if (info.preventDefault)
info.preventDefault();
this.onInputDown(info["pointerId"].toString(), info.pageX, info.pageY);
};
behaviorProto.onPointerMove = function (info)
{
if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse")
return;
if (info.preventDefault)
info.preventDefault();
this.onInputMove(info["pointerId"].toString(), info.pageX, info.pageY);
};
behaviorProto.onPointerEnd = function (info)
{
if (info["pointerType"] === info["MSPOINTER_TYPE_MOUSE"] || info["pointerType"] === "mouse")
return;
if (info.preventDefault)
info.preventDefault();
this.onInputUp(info["pointerId"].toString());
};
behaviorProto.onInputDown = function (src, pageX, pageY)
{
var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset();
var x = pageX - offset.left;
var y = pageY - offset.top;
var lx, ly, topx, topy;
var arr = this.my_instances.valuesRef();
var i, len, b, inst, topmost = null;
for (i = 0, len = arr.length; i < len; i++)
{
inst = arr[i];
b = GetDragDropBehavior(inst);
if (!b.enabled || b.dragging)
continue; // don't consider disabled or already-dragging instances
lx = inst.layer.canvasToLayer(x, y, true);
ly = inst.layer.canvasToLayer(x, y, false);
inst.update_bbox();
if (!inst.contains_pt(lx, ly))
continue; // don't consider instances not over this point
if (!topmost)
{
topmost = inst;
topx = lx;
topy = ly;
continue;
}
if (inst.layer.index > topmost.layer.index)
{
topmost = inst;
topx = lx;
topy = ly;
continue;
}
if (inst.layer.index === topmost.layer.index && inst.get_zindex() > topmost.get_zindex())
{
topmost = inst;
topx = lx;
topy = ly;
continue;
}
}
if (topmost)
GetDragDropBehavior(topmost).onDown(src, topx, topy);
};
behaviorProto.onInputMove = function (src, pageX, pageY)
{
var offset = this.runtime.isDomFree ? dummyoffset : jQuery(this.runtime.canvas).offset();
var x = pageX - offset.left;
var y = pageY - offset.top;
var lx, ly;
var arr = this.my_instances.valuesRef();
var i, len, b, inst;
for (i = 0, len = arr.length; i < len; i++)
{
inst = arr[i];
b = GetDragDropBehavior(inst);
if (!b.enabled || !b.dragging || (b.dragging && b.dragsource !== src))
continue; // don't consider disabled, not-dragging, or dragging by other sources
lx = inst.layer.canvasToLayer(x, y, true);
ly = inst.layer.canvasToLayer(x, y, false);
b.onMove(lx, ly);
}
};
behaviorProto.onInputUp = function (src)
{
var arr = this.my_instances.valuesRef();
var i, len, b, inst;
for (i = 0, len = arr.length; i < len; i++)
{
inst = arr[i];
b = GetDragDropBehavior(inst);
if (b.dragging && b.dragsource === src)
b.onUp();
}
};
behaviorProto.Type = function(behavior, objtype)
{
this.behavior = behavior;
this.objtype = objtype;
this.runtime = behavior.runtime;
};
var behtypeProto = behaviorProto.Type.prototype;
behtypeProto.onCreate = function()
{
};
behaviorProto.Instance = function(type, inst)
{
this.type = type;
this.behavior = type.behavior;
this.inst = inst; // associated object instance to modify
this.runtime = type.runtime;
};
var behinstProto = behaviorProto.Instance.prototype;
behinstProto.onCreate = function()
{
this.dragging = false;
this.dx = 0;
this.dy = 0;
this.dragsource = "";
this.axes = this.properties[0];
this.enabled = (this.properties[1] !== 0);
};
behinstProto.saveToJSON = function ()
{
return { "enabled": this.enabled };
};
behinstProto.loadFromJSON = function (o)
{
this.enabled = o["enabled"];
this.dragging = false;
};
behinstProto.onDown = function(src, x, y)
{
this.dx = x - this.inst.x;
this.dy = y - this.inst.y;
this.dragging = true;
this.dragsource = src;
this.runtime.isInUserInputEvent = true;
this.runtime.trigger(cr.behaviors.DragnDrop.prototype.cnds.OnDragStart, this.inst);
this.runtime.isInUserInputEvent = false;
};
behinstProto.onMove = function(x, y)
{
var newx = x - this.dx;
var newy = y - this.dy;
if (this.axes === 0) // both
{
if (this.inst.x !== newx || this.inst.y !== newy)
{
this.inst.x = newx;
this.inst.y = newy;
this.inst.set_bbox_changed();
}
}
else if (this.axes === 1) // horizontal
{
if (this.inst.x !== newx)
{
this.inst.x = newx;
this.inst.set_bbox_changed();
}
}
else if (this.axes === 2) // vertical
{
if (this.inst.y !== newy)
{
this.inst.y = newy;
this.inst.set_bbox_changed();
}
}
};
behinstProto.onUp = function()
{
this.dragging = false;
this.runtime.isInUserInputEvent = true;
this.runtime.trigger(cr.behaviors.DragnDrop.prototype.cnds.OnDrop, this.inst);
this.runtime.isInUserInputEvent = false;
};
behinstProto.tick = function ()
{
};
function Cnds() {};
Cnds.prototype.IsDragging = function ()
{
return this.dragging;
};
Cnds.prototype.OnDragStart = function ()
{
return true;
};
Cnds.prototype.OnDrop = function ()
{
return true;
};
Cnds.prototype.IsEnabled = function ()
{
return !!this.enabled;
};
behaviorProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.SetEnabled = function (s)
{
this.enabled = (s !== 0);
if (!this.enabled)
this.dragging = false;
};
Acts.prototype.Drop = function ()
{
if (this.dragging)
this.onUp();
};
behaviorProto.acts = new Acts();
function Exps() {};
behaviorProto.exps = new Exps();
}());
;
;
cr.behaviors.EightDir = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var behaviorProto = cr.behaviors.EightDir.prototype;
behaviorProto.Type = function(behavior, objtype)
{
this.behavior = behavior;
this.objtype = objtype;
this.runtime = behavior.runtime;
};
var behtypeProto = behaviorProto.Type.prototype;
behtypeProto.onCreate = function()
{
};
behaviorProto.Instance = function(type, inst)
{
this.type = type;
this.behavior = type.behavior;
this.inst = inst; // associated object instance to modify
this.runtime = type.runtime;
this.upkey = false;
this.downkey = false;
this.leftkey = false;
this.rightkey = false;
this.ignoreInput = false;
this.simup = false;
this.simdown = false;
this.simleft = false;
this.simright = false;
this.lastuptick = -1;
this.lastdowntick = -1;
this.lastlefttick = -1;
this.lastrighttick = -1;
this.dx = 0;
this.dy = 0;
};
var behinstProto = behaviorProto.Instance.prototype;
behinstProto.onCreate = function()
{
this.maxspeed = this.properties[0];
this.acc = this.properties[1];
this.dec = this.properties[2];
this.directions = this.properties[3]; // 0=Up & down, 1=Left & right, 2=4 directions, 3=8 directions"
this.angleMode = this.properties[4]; // 0=No,1=90-degree intervals, 2=45-degree intervals, 3=360 degree (smooth)
this.defaultControls = (this.properties[5] === 1); // 0=no, 1=yes
this.enabled = (this.properties[6] !== 0);
if (this.defaultControls && !this.runtime.isDomFree)
{
jQuery(document).keydown(
(function (self) {
return function(info) {
self.onKeyDown(info);
};
})(this)
);
jQuery(document).keyup(
(function (self) {
return function(info) {
self.onKeyUp(info);
};
})(this)
);
}
};
behinstProto.saveToJSON = function ()
{
return {
"dx": this.dx,
"dy": this.dy,
"enabled": this.enabled,
"maxspeed": this.maxspeed,
"acc": this.acc,
"dec": this.dec,
"ignoreInput": this.ignoreInput
};
};
behinstProto.loadFromJSON = function (o)
{
this.dx = o["dx"];
this.dy = o["dy"];
this.enabled = o["enabled"];
this.maxspeed = o["maxspeed"];
this.acc = o["acc"];
this.dec = o["dec"];
this.ignoreInput = o["ignoreInput"];
this.upkey = false;
this.downkey = false;
this.leftkey = false;
this.rightkey = false;
this.simup = false;
this.simdown = false;
this.simleft = false;
this.simright = false;
this.lastuptick = -1;
this.lastdowntick = -1;
this.lastlefttick = -1;
this.lastrighttick = -1;
};
behinstProto.onKeyDown = function (info)
{
var tickcount = this.runtime.tickcount;
switch (info.which) {
case 37: // left
info.preventDefault();
if (this.lastlefttick < tickcount)
this.leftkey = true;
break;
case 38: // up
info.preventDefault();
if (this.lastuptick < tickcount)
this.upkey = true;
break;
case 39: // right
info.preventDefault();
if (this.lastrighttick < tickcount)
this.rightkey = true;
break;
case 40: // down
info.preventDefault();
if (this.lastdowntick < tickcount)
this.downkey = true;
break;
}
};
behinstProto.onKeyUp = function (info)
{
var tickcount = this.runtime.tickcount;
switch (info.which) {
case 37: // left
info.preventDefault();
this.leftkey = false;
this.lastlefttick = tickcount;
break;
case 38: // up
info.preventDefault();
this.upkey = false;
this.lastuptick = tickcount;
break;
case 39: // right
info.preventDefault();
this.rightkey = false;
this.lastrighttick = tickcount;
break;
case 40: // down
info.preventDefault();
this.downkey = false;
this.lastdowntick = tickcount;
break;
}
};
behinstProto.tick = function ()
{
var dt = this.runtime.getDt(this.inst);
var left = this.leftkey || this.simleft;
var right = this.rightkey || this.simright;
var up = this.upkey || this.simup;
var down = this.downkey || this.simdown;
this.simleft = false;
this.simright = false;
this.simup = false;
this.simdown = false;
if (!this.enabled)
return;
var collobj = this.runtime.testOverlapSolid(this.inst);
if (collobj)
{
this.runtime.registerCollision(this.inst, collobj);
if (!this.runtime.pushOutSolidNearest(this.inst))
return; // must be stuck in solid
}
if (this.ignoreInput)
{
left = false;
right = false;
up = false;
down = false;
}
if (this.directions === 0)
{
left = false;
right = false;
}
else if (this.directions === 1)
{
up = false;
down = false;
}
if (this.directions === 2 && (up || down))
{
left = false;
right = false;
}
if (left == right) // both up or both down
{
if (this.dx < 0)
{
this.dx += this.dec * dt;
if (this.dx > 0)
this.dx = 0;
}
else if (this.dx > 0)
{
this.dx -= this.dec * dt;
if (this.dx < 0)
this.dx = 0;
}
}
if (up == down)
{
if (this.dy < 0)
{
this.dy += this.dec * dt;
if (this.dy > 0)
this.dy = 0;
}
else if (this.dy > 0)
{
this.dy -= this.dec * dt;
if (this.dy < 0)
this.dy = 0;
}
}
if (left && !right)
{
if (this.dx > 0)
this.dx -= (this.acc + this.dec) * dt;
else
this.dx -= this.acc * dt;
}
if (right && !left)
{
if (this.dx < 0)
this.dx += (this.acc + this.dec) * dt;
else
this.dx += this.acc * dt;
}
if (up && !down)
{
if (this.dy > 0)
this.dy -= (this.acc + this.dec) * dt;
else
this.dy -= this.acc * dt;
}
if (down && !up)
{
if (this.dy < 0)
this.dy += (this.acc + this.dec) * dt;
else
this.dy += this.acc * dt;
}
var ax, ay;
if (this.dx !== 0 || this.dy !== 0)
{
var speed = Math.sqrt(this.dx * this.dx + this.dy * this.dy);
if (speed > this.maxspeed)
{
var a = Math.atan2(this.dy, this.dx);
this.dx = this.maxspeed * Math.cos(a);
this.dy = this.maxspeed * Math.sin(a);
}
var oldx = this.inst.x;
var oldy = this.inst.y;
var oldangle = this.inst.angle;
this.inst.x += this.dx * dt;
this.inst.set_bbox_changed();
collobj = this.runtime.testOverlapSolid(this.inst);
if (collobj)
{
this.inst.x = oldx;
this.dx = 0;
this.inst.set_bbox_changed();
this.runtime.registerCollision(this.inst, collobj);
}
this.inst.y += this.dy * dt;
this.inst.set_bbox_changed();
collobj = this.runtime.testOverlapSolid(this.inst);
if (collobj)
{
this.inst.y = oldy;
this.dy = 0;
this.inst.set_bbox_changed();
this.runtime.registerCollision(this.inst, collobj);
}
ax = cr.round6dp(this.dx);
ay = cr.round6dp(this.dy);
if (ax !== 0 || ay !== 0)
{
if (this.angleMode === 1) // 90 degree intervals
this.inst.angle = cr.to_clamped_radians(Math.round(cr.to_degrees(Math.atan2(ay, ax)) / 90.0) * 90.0);
else if (this.angleMode === 2) // 45 degree intervals
this.inst.angle = cr.to_clamped_radians(Math.round(cr.to_degrees(Math.atan2(ay, ax)) / 45.0) * 45.0);
else if (this.angleMode === 3) // 360 degree
this.inst.angle = Math.atan2(ay, ax);
}
this.inst.set_bbox_changed();
if (this.inst.angle != oldangle)
{
collobj = this.runtime.testOverlapSolid(this.inst);
if (collobj)
{
this.inst.angle = oldangle;
this.inst.set_bbox_changed();
this.runtime.registerCollision(this.inst, collobj);
}
}
}
};
function Cnds() {};
Cnds.prototype.IsMoving = function ()
{
return this.dx !== 0 || this.dy !== 0;
};
Cnds.prototype.CompareSpeed = function (cmp, s)
{
var speed = Math.sqrt(this.dx * this.dx + this.dy * this.dy);
return cr.do_cmp(speed, cmp, s);
};
behaviorProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.Stop = function ()
{
this.dx = 0;
this.dy = 0;
};
Acts.prototype.Reverse = function ()
{
this.dx *= -1;
this.dy *= -1;
};
Acts.prototype.SetIgnoreInput = function (ignoring)
{
this.ignoreInput = ignoring;
};
Acts.prototype.SetSpeed = function (speed)
{
if (speed < 0)
speed = 0;
if (speed > this.maxspeed)
speed = this.maxspeed;
var a = Math.atan2(this.dy, this.dx);
this.dx = speed * Math.cos(a);
this.dy = speed * Math.sin(a);
};
Acts.prototype.SetMaxSpeed = function (maxspeed)
{
this.maxspeed = maxspeed;
if (this.maxspeed < 0)
this.maxspeed = 0;
};
Acts.prototype.SetAcceleration = function (acc)
{
this.acc = acc;
if (this.acc < 0)
this.acc = 0;
};
Acts.prototype.SetDeceleration = function (dec)
{
this.dec = dec;
if (this.dec < 0)
this.dec = 0;
};
Acts.prototype.SimulateControl = function (ctrl)
{
switch (ctrl) {
case 0: this.simleft = true; break;
case 1: this.simright = true; break;
case 2: this.simup = true; break;
case 3: this.simdown = true; break;
}
};
Acts.prototype.SetEnabled = function (en)
{
this.enabled = (en === 1);
};
Acts.prototype.SetVectorX = function (x_)
{
this.dx = x_;
};
Acts.prototype.SetVectorY = function (y_)
{
this.dy = y_;
};
behaviorProto.acts = new Acts();
function Exps() {};
Exps.prototype.Speed = function (ret)
{
ret.set_float(Math.sqrt(this.dx * this.dx + this.dy * this.dy));
};
Exps.prototype.MaxSpeed = function (ret)
{
ret.set_float(this.maxspeed);
};
Exps.prototype.Acceleration = function (ret)
{
ret.set_float(this.acc);
};
Exps.prototype.Deceleration = function (ret)
{
ret.set_float(this.dec);
};
Exps.prototype.MovingAngle = function (ret)
{
ret.set_float(cr.to_degrees(Math.atan2(this.dy, this.dx)));
};
Exps.prototype.VectorX = function (ret)
{
ret.set_float(this.dx);
};
Exps.prototype.VectorY = function (ret)
{
ret.set_float(this.dy);
};
behaviorProto.exps = new Exps();
}());
;
;
cr.behaviors.Fade = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var behaviorProto = cr.behaviors.Fade.prototype;
behaviorProto.Type = function(behavior, objtype)
{
this.behavior = behavior;
this.objtype = objtype;
this.runtime = behavior.runtime;
};
var behtypeProto = behaviorProto.Type.prototype;
behtypeProto.onCreate = function()
{
};
behaviorProto.Instance = function(type, inst)
{
this.type = type;
this.behavior = type.behavior;
this.inst = inst; // associated object instance to modify
this.runtime = type.runtime;
};
var behinstProto = behaviorProto.Instance.prototype;
behinstProto.onCreate = function()
{
var active_at_start = this.properties[0] === 1;
this.fadeInTime = this.properties[1];
this.waitTime = this.properties[2];
this.fadeOutTime = this.properties[3];
this.destroy = this.properties[4]; // 0 = no, 1 = after fade out
this.stage = active_at_start ? 0 : 3; // 0 = fade in, 1 = wait, 2 = fade out, 3 = done
if (this.recycled)
this.stageTime.reset();
else
this.stageTime = new cr.KahanAdder();
this.maxOpacity = (this.inst.opacity ? this.inst.opacity : 1.0);
if (active_at_start)
{
if (this.fadeInTime === 0)
{
this.stage = 1;
if (this.waitTime === 0)
this.stage = 2;
}
else
{
this.inst.opacity = 0;
this.runtime.redraw = true;
}
}
};
behinstProto.saveToJSON = function ()
{
return {
"fit": this.fadeInTime,
"wt": this.waitTime,
"fot": this.fadeOutTime,
"s": this.stage,
"st": this.stageTime.sum,
"mo": this.maxOpacity,
};
};
behinstProto.loadFromJSON = function (o)
{
this.fadeInTime = o["fit"];
this.waitTime = o["wt"];
this.fadeOutTime = o["fot"];
this.stage = o["s"];
this.stageTime.reset();
this.stageTime.sum = o["st"];
this.maxOpacity = o["mo"];
};
behinstProto.tick = function ()
{
this.stageTime.add(this.runtime.getDt(this.inst));
if (this.stage === 0)
{
this.inst.opacity = (this.stageTime.sum / this.fadeInTime) * this.maxOpacity;
this.runtime.redraw = true;
if (this.inst.opacity >= this.maxOpacity)
{
this.inst.opacity = this.maxOpacity;
this.stage = 1; // wait stage
this.stageTime.reset();
}
}
if (this.stage === 1)
{
if (this.stageTime.sum >= this.waitTime)
{
this.stage = 2; // fade out stage
this.stageTime.reset();
}
}
if (this.stage === 2)
{
if (this.fadeOutTime !== 0)
{
this.inst.opacity = this.maxOpacity - ((this.stageTime.sum / this.fadeOutTime) * this.maxOpacity);
this.runtime.redraw = true;
if (this.inst.opacity < 0)
{
this.inst.opacity = 0;
this.stage = 3; // done
this.stageTime.reset();
this.runtime.trigger(cr.behaviors.Fade.prototype.cnds.OnFadeOutEnd, this.inst);
if (this.destroy === 1)
this.runtime.DestroyInstance(this.inst);
}
}
}
};
behinstProto.doStart = function ()
{
this.stage = 0;
this.stageTime.reset();
if (this.fadeInTime === 0)
{
this.stage = 1;
if (this.waitTime === 0)
this.stage = 2;
}
else
{
this.inst.opacity = 0;
this.runtime.redraw = true;
}
};
function Cnds() {};
Cnds.prototype.OnFadeOutEnd = function ()
{
return true;
};
behaviorProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.StartFade = function ()
{
if (this.stage === 3)
this.doStart();
};
Acts.prototype.RestartFade = function ()
{
this.doStart();
};
behaviorProto.acts = new Acts();
}());
;
;
cr.behaviors.Sin = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var behaviorProto = cr.behaviors.Sin.prototype;
behaviorProto.Type = function(behavior, objtype)
{
this.behavior = behavior;
this.objtype = objtype;
this.runtime = behavior.runtime;
};
var behtypeProto = behaviorProto.Type.prototype;
behtypeProto.onCreate = function()
{
};
behaviorProto.Instance = function(type, inst)
{
this.type = type;
this.behavior = type.behavior;
this.inst = inst; // associated object instance to modify
this.runtime = type.runtime;
this.i = 0; // period offset (radians)
};
var behinstProto = behaviorProto.Instance.prototype;
var _2pi = 2 * Math.PI;
var _pi_2 = Math.PI / 2;
var _3pi_2 = (3 * Math.PI) / 2;
behinstProto.onCreate = function()
{
this.active = (this.properties[0] === 1);
this.movement = this.properties[1]; // 0=Horizontal|1=Vertical|2=Size|3=Width|4=Height|5=Angle|6=Opacity|7=Value only
this.wave = this.properties[2]; // 0=Sine|1=Triangle|2=Sawtooth|3=Reverse sawtooth|4=Square
this.period = this.properties[3];
this.period += Math.random() * this.properties[4]; // period random
if (this.period === 0)
this.i = 0;
else
{
this.i = (this.properties[5] / this.period) * _2pi; // period offset
this.i += ((Math.random() * this.properties[6]) / this.period) * _2pi; // period offset random
}
this.mag = this.properties[7]; // magnitude
this.mag += Math.random() * this.properties[8]; // magnitude random
this.initialValue = 0;
this.initialValue2 = 0;
this.ratio = 0;
this.init();
};
behinstProto.saveToJSON = function ()
{
return {
"i": this.i,
"a": this.active,
"mv": this.movement,
"w": this.wave,
"p": this.period,
"mag": this.mag,
"iv": this.initialValue,
"iv2": this.initialValue2,
"r": this.ratio,
"lkv": this.lastKnownValue,
"lkv2": this.lastKnownValue2
};
};
behinstProto.loadFromJSON = function (o)
{
this.i = o["i"];
this.active = o["a"];
this.movement = o["mv"];
this.wave = o["w"];
this.period = o["p"];
this.mag = o["mag"];
this.initialValue = o["iv"];
this.initialValue2 = o["iv2"] || 0;
this.ratio = o["r"];
this.lastKnownValue = o["lkv"];
this.lastKnownValue2 = o["lkv2"] || 0;
};
behinstProto.init = function ()
{
switch (this.movement) {
case 0: // horizontal
this.initialValue = this.inst.x;
break;
case 1: // vertical
this.initialValue = this.inst.y;
break;
case 2: // size
this.initialValue = this.inst.width;
this.ratio = this.inst.height / this.inst.width;
break;
case 3: // width
this.initialValue = this.inst.width;
break;
case 4: // height
this.initialValue = this.inst.height;
break;
case 5: // angle
this.initialValue = this.inst.angle;
this.mag = cr.to_radians(this.mag); // convert magnitude from degrees to radians
break;
case 6: // opacity
this.initialValue = this.inst.opacity;
break;
case 7:
this.initialValue = 0;
break;
case 8: // forwards/backwards
this.initialValue = this.inst.x;
this.initialValue2 = this.inst.y;
break;
default:
;
}
this.lastKnownValue = this.initialValue;
this.lastKnownValue2 = this.initialValue2;
};
behinstProto.waveFunc = function (x)
{
x = x % _2pi;
switch (this.wave) {
case 0: // sine
return Math.sin(x);
case 1: // triangle
if (x <= _pi_2)
return x / _pi_2;
else if (x <= _3pi_2)
return 1 - (2 * (x - _pi_2) / Math.PI);
else
return (x - _3pi_2) / _pi_2 - 1;
case 2: // sawtooth
return 2 * x / _2pi - 1;
case 3: // reverse sawtooth
return -2 * x / _2pi + 1;
case 4: // square
return x < Math.PI ? -1 : 1;
};
return 0;
};
behinstProto.tick = function ()
{
var dt = this.runtime.getDt(this.inst);
if (!this.active || dt === 0)
return;
if (this.period === 0)
this.i = 0;
else
{
this.i += (dt / this.period) * _2pi;
this.i = this.i % _2pi;
}
switch (this.movement) {
case 0: // horizontal
if (this.inst.x !== this.lastKnownValue)
this.initialValue += this.inst.x - this.lastKnownValue;
this.inst.x = this.initialValue + this.waveFunc(this.i) * this.mag;
this.lastKnownValue = this.inst.x;
break;
case 1: // vertical
if (this.inst.y !== this.lastKnownValue)
this.initialValue += this.inst.y - this.lastKnownValue;
this.inst.y = this.initialValue + this.waveFunc(this.i) * this.mag;
this.lastKnownValue = this.inst.y;
break;
case 2: // size
this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag;
this.inst.height = this.inst.width * this.ratio;
break;
case 3: // width
this.inst.width = this.initialValue + this.waveFunc(this.i) * this.mag;
break;
case 4: // height
this.inst.height = this.initialValue + this.waveFunc(this.i) * this.mag;
break;
case 5: // angle
if (this.inst.angle !== this.lastKnownValue)
this.initialValue = cr.clamp_angle(this.initialValue + (this.inst.angle - this.lastKnownValue));
this.inst.angle = cr.clamp_angle(this.initialValue + this.waveFunc(this.i) * this.mag);
this.lastKnownValue = this.inst.angle;
break;
case 6: // opacity
this.inst.opacity = this.initialValue + (this.waveFunc(this.i) * this.mag) / 100;
if (this.inst.opacity < 0)
this.inst.opacity = 0;
else if (this.inst.opacity > 1)
this.inst.opacity = 1;
break;
case 8: // forwards/backwards
if (this.inst.x !== this.lastKnownValue)
this.initialValue += this.inst.x - this.lastKnownValue;
if (this.inst.y !== this.lastKnownValue2)
this.initialValue2 += this.inst.y - this.lastKnownValue2;
this.inst.x = this.initialValue + Math.cos(this.inst.angle) * this.waveFunc(this.i) * this.mag;
this.inst.y = this.initialValue2 + Math.sin(this.inst.angle) * this.waveFunc(this.i) * this.mag;
this.lastKnownValue = this.inst.x;
this.lastKnownValue2 = this.inst.y;
break;
}
this.inst.set_bbox_changed();
};
behinstProto.onSpriteFrameChanged = function (prev_frame, next_frame)
{
switch (this.movement) {
case 2: // size
this.initialValue *= (next_frame.width / prev_frame.width);
this.ratio = next_frame.height / next_frame.width;
break;
case 3: // width
this.initialValue *= (next_frame.width / prev_frame.width);
break;
case 4: // height
this.initialValue *= (next_frame.height / prev_frame.height);
break;
}
};
function Cnds() {};
Cnds.prototype.IsActive = function ()
{
return this.active;
};
Cnds.prototype.CompareMovement = function (m)
{
return this.movement === m;
};
Cnds.prototype.ComparePeriod = function (cmp, v)
{
return cr.do_cmp(this.period, cmp, v);
};
Cnds.prototype.CompareMagnitude = function (cmp, v)
{
if (this.movement === 5)
return cr.do_cmp(this.mag, cmp, cr.to_radians(v));
else
return cr.do_cmp(this.mag, cmp, v);
};
Cnds.prototype.CompareWave = function (w)
{
return this.wave === w;
};
behaviorProto.cnds = new Cnds();
function Acts() {};
Acts.prototype.SetActive = function (a)
{
this.active = (a === 1);
};
Acts.prototype.SetPeriod = function (x)
{
this.period = x;
};
Acts.prototype.SetMagnitude = function (x)
{
this.mag = x;
if (this.movement === 5) // angle
this.mag = cr.to_radians(this.mag);
};
Acts.prototype.SetMovement = function (m)
{
if (this.movement === 5)
this.mag = cr.to_degrees(this.mag);
this.movement = m;
this.init();
};
Acts.prototype.SetWave = function (w)
{
this.wave = w;
};
behaviorProto.acts = new Acts();
function Exps() {};
Exps.prototype.CyclePosition = function (ret)
{
ret.set_float(this.i / _2pi);
};
Exps.prototype.Period = function (ret)
{
ret.set_float(this.period);
};
Exps.prototype.Magnitude = function (ret)
{
if (this.movement === 5) // angle
ret.set_float(cr.to_degrees(this.mag));
else
ret.set_float(this.mag);
};
Exps.prototype.Value = function (ret)
{
ret.set_float(this.waveFunc(this.i) * this.mag);
};
behaviorProto.exps = new Exps();
}());
;
;
cr.behaviors.bound = function(runtime)
{
this.runtime = runtime;
};
(function ()
{
var behaviorProto = cr.behaviors.bound.prototype;
behaviorProto.Type = function(behavior, objtype)
{
this.behavior = behavior;
this.objtype = objtype;
this.runtime = behavior.runtime;
};
var behtypeProto = behaviorProto.Type.prototype;
behtypeProto.onCreate = function()
{
};
behaviorProto.Instance = function(type, inst)
{
this.type = type;
this.behavior = type.behavior;
this.inst = inst; // associated object instance to modify
this.runtime = type.runtime;
this.mode = 0;
};
var behinstProto = behaviorProto.Instance.prototype;
behinstProto.onCreate = function()
{
this.mode = this.properties[0]; // 0 = origin, 1 = edge
};
behinstProto.tick = function ()
{
};
behinstProto.tick2 = function ()
{
this.inst.update_bbox();
var bbox = this.inst.bbox;
var layout = this.inst.layer.layout;
var changed = false;
if (this.mode === 0) // origin
{
if (this.inst.x < 0)
{
this.inst.x = 0;
changed = true;
}
if (this.inst.y < 0)
{
this.inst.y = 0;
changed = true;
}
if (this.inst.x > layout.width)
{
this.inst.x = layout.width;
changed = true;
}
if (this.inst.y > layout.height)
{
this.inst.y = layout.height;
changed = true;
}
}
else
{
if (bbox.left < 0)
{
this.inst.x -= bbox.left;
changed = true;
}
if (bbox.top < 0)
{
this.inst.y -= bbox.top;
changed = true;
}
if (bbox.right > layout.width)
{
this.inst.x -= (bbox.right - layout.width);
changed = true;
}
if (bbox.bottom > layout.height)
{
this.inst.y -= (bbox.bottom - layout.height);
changed = true;
}
}
if (changed)
this.inst.set_bbox_changed();
};
}());
cr.getProjectModel = function() { return [
null,
"Loading",
[
[
cr.plugins_.Arr,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
, [
cr.plugins_.Spritefont2,
false,
true,
true,
true,
true,
true,
true,
true,
true
]
, [
cr.plugins_.Sprite,
false,
true,
true,
true,
true,
true,
true,
true,
false
]
, [
cr.plugins_.TiledBg,
false,
true,
true,
true,
true,
true,
true,
true,
true
]
, [
cr.plugins_.Softgames,
true,
false,
false,
false,
false,
false,
false,
false,
false
]
, [
cr.plugins_.Browser,
true,
false,
false,
false,
false,
false,
false,
false,
false
]
, [
cr.plugins_.WebStorage,
true,
false,
false,
false,
false,
false,
false,
false,
false
]
, [
cr.plugins_.Touch,
true,
false,
false,
false,
false,
false,
false,
false,
false
]
],
[
[
"t0",
cr.plugins_.Sprite,
false,
[4483591933638255,6407951637075983,8787923271674571],
3,
0,
null,
[
[
"Default",
0,
false,
1,
0,
false,
6822747669950613,
[
["images/blocks-sheet1.png", 6151, 0, 0, 67, 198, 1, 0, 0,[],[0.08208949863910675,0.02272729948163033,0.9216409921646118,0.02651520073413849,0.9328359961509705,0.9608579874038696,0.08582089841365814,0.9595959782600403],0],
["images/blocks-sheet0.png", 18038, 1, 1, 194, 71, 1, 0, 0,[],[0.03092779964208603,0.03521129861474037,0.9793819785118103,0.04225350171327591,0.9768040180206299,0.9436619877815247,0.03608249872922897,0.9366199970245361],0],
["images/blocks-sheet0.png", 18038, 132, 73, 66, 135, 1, 0, 0,[],[0.05303030088543892,0.0259259007871151,0.9469699859619141,0.02222220040857792,0.9393939971923828,0.9666669964790344,0.04545449838042259,0.9703699946403503],0],
["images/blocks-sheet0.png", 18038, 1, 73, 130, 71, 1, 0, 0,[],[0.02307689934968948,0.04929580166935921,0.9807689785957336,0.05633800104260445,0.9692310094833374,0.9577469825744629,0.0346154011785984,0.9647889733314514],0],
["images/blocks-sheet0.png", 18038, 1, 145, 128, 69, 1, 0, 0,[],[0.0234375,0.04347829893231392,0.5,0,0.9765629768371582,0.04347829893231392,1,0.4927540123462677,0.9765629768371582,0.9565219879150391,0.5,1,0.0234375,0.9565219879150391,0,0.4927540123462677],0]
]
]
],
[
[
"DragDrop",
cr.behaviors.DragnDrop,
6775323160988793
]
, [
"BoundToLayout",
cr.behaviors.bound,
7014087037944691
]
, [
"8Direction",
cr.behaviors.EightDir,
9520516806186919
]
],
false,
false,
6827826627051326,
[],
null
]
, [
"t1",
cr.plugins_.Sprite,
false,
[],
0,
0,
null,
[
[
"Default",
5,
false,
1,
0,
false,
4829151891205768,
[
["images/edge-sheet0.png", 93, 0, 0, 32, 32, 1, 0, 0,[],[0.01953130029141903,0.015625,0.96875,0.01953130029141903,0.9765629768371582,0.9804689884185791,0.01953130029141903,0.9804689884185791],1]
]
]
],
[
],
false,
false,
8169727880209173,
[],
null
]
, [
"t2",
cr.plugins_.Sprite,
false,
[],
0,
0,
null,
[
[
"Default",
5,
false,
1,
0,
false,
2065160091561255,
[
["images/exit-sheet0.png", 758, 0, 0, 64, 64, 1, 0, 1,[],[0.5,-1,1,-1,1,0,0.5,0],0]
]
]
],
[
],
false,
false,
102899461509274,
[],
null
]
, [
"t3",
cr.plugins_.Sprite,
false,
[],
0,
0,
null,
[
[
"Default",
0,
false,
1,
0,
false,
6819037674282186,
[
["images/sprite-sheet0.png", 14913, 0, 0, 389, 384, 1, 0, 1,[],[0.007712080143392086,-0.007812023162841797,0.007712080143392086,-0.9921879768371582,0.9922879934310913,-0.9921879768371582,0.9922879934310913,-0.007812023162841797],0],
["images/sprite-sheet1.png", 29242, 1, 1, 386, 161, 1, 0.002590673509985209, -1.422360301017761,[],[0.007772026117891073,1.422360301017761,0.9870473146438599,1.422360301017761,0.9870473146438599,2.397515296936035,0.007772026117891073,2.397515296936035],0],
["images/sprite-sheet1.png", 29242, 1, 163, 386, 143, 1, 0.002590673509985209, 0.00699300691485405,[],[0.007772026117891073,0.02097899280488491,0.9870473146438599,0.02097899280488491,0.9870473146438599,0.9930070042610169,0.007772026117891073,0.9930070042610169],0]
]
]
],
[
],
false,
false,
8866041732723937,
[],
null
]
, [
"t4",
cr.plugins_.Sprite,
false,
[9502783634066121],
1,
0,
null,
[
[
"Default",
0,
false,
1,
0,
false,
1996664396285362,
[
["images/but-sheet0.png", 4753, 1, 139, 67, 76, 1, 0.5074626803398132, 0.5,[],[-0.5074626803398132,-0.5,0.4925373196601868,-0.5,0.4925373196601868,-0.5,0.4925373196601868,-0.5,0.4925373196601868,0.5,-0.5074626803398132,0.5,-0.5074626803398132,-0.5],0],
["images/but-sheet0.png", 4753, 140, 74, 69, 74, 1, 0.5072463750839233, 0.5,[],[-0.5072463750839233,-0.5,0.4927536249160767,-0.5,0.4927536249160767,-0.5,0.4927536249160767,-0.5,0.4927536249160767,0.5,-0.5072463750839233,0.5,-0.5072463750839233,-0.5],0],
["images/but-sheet0.png", 4753, 140, 1, 75, 72, 1, 0.5066666603088379, 0.5,[],[-0.5066666603088379,-0.5,0.4933333396911621,-0.5,0.4933333396911621,-0.5,0.4933333396911621,-0.5,0.4933333396911621,0.5,-0.5066666603088379,0.5,-0.5066666603088379,-0.5],0],
["images/but-sheet0.png", 4753, 1, 1, 138, 137, 1, 0.5, 0.5036496520042419,[],[],0]
]
]
],
[
[
"Sine",
cr.behaviors.Sin,
7802112411750133
]
],
false,
false,
4901461668198739,
[],
null
]
, [
"t5",
cr.plugins_.Sprite,
false,
[5287327558191615,6387113113700343],
0,
0,
null,
[
[
"Default",
0,
false,
1,
0,
false,
8826038371212555,
[
["images/kamikaze-sheet0.png", 919, 1, 1, 99, 36, 1, 0.5050504803657532, 0.5,[],[-0.5050504803657532,-0.5,0.4949495196342468,-0.5,0.4949495196342468,0.5,0.4949495196342468,0.5,0.1616165041923523,0.5,-0.5050504803657532,0.5,-0.5050504803657532,0.5],0],
["images/kamikaze-sheet0.png", 919, 1, 38, 99, 36, 1, 0.5050504803657532, 0.5,[],[-0.5050504803657532,-0.5,0.4949495196342468,-0.5,0.4949495196342468,0.5,0.4949495196342468,0.5,0.1616165041923523,0.5,-0.5050504803657532,0.5,-0.5050504803657532,0.5],0],
["images/kamikaze-sheet0.png", 919, 1, 75, 99, 36, 1, 0.5050504803657532, 0.5,[],[-0.5050504803657532,-0.5,0.4949495196342468,-0.5,0.4949495196342468,0.5,0.4949495196342468,0.5,0.1616165041923523,0.5,-0.5050504803657532,0.5,-0.5050504803657532,0.5],0],
["images/kamikaze-sheet1.png", 555, 0, 0, 99, 36, 1, 0.5050504803657532, 0.5,[],[-0.5050504803657532,-0.5,0.4949495196342468,-0.5,0.4949495196342468,0.5,0.4949495196342468,0.5,0.1616165041923523,0.5,-0.5050504803657532,0.5,-0.5050504803657532,0.5],0]
]
]
],
[
],
false,
false,
8461014092164239,
[],
null
]
, [
"t6",
cr.plugins_.Spritefont2,
false,
[7339669109233996],
0,
0,
["images/day.png", 8217, 0],
null,
[
],
false,
false,
4744554460043654,
[],
null
]
, [
"t7",
cr.plugins_.Arr,
false,
[],
0,
0,
null,
null,
[
],
true,
false,
8590963122574673,
[],
null
]
, [
"t8",
cr.plugins_.Touch,
false,
[],
0,
0,
null,
null,
[
],
false,
false,
4853833846066302,
[],
null
,[1]
]
, [
"t9",
cr.plugins_.Browser,
false,
[],
0,
0,
null,
null,
[
],
false,
false,
5735188685463939,
[],
null
,[]
]
, [
"t10",
cr.plugins_.Sprite,
false,
[],
0,
0,
null,
[
[
"Default",
5,
false,
1,
0,
false,
2325989896573274,
[
["images/logo64-sheet0.png", 225, 0, 0, 64, 64, 1, 0, 0,[],[],0]
]
]
],
[
],
false,
false,
6045838252825364,
[],
null
]
, [
"t11",
cr.plugins_.Sprite,
false,
[],
1,
0,
null,
[
[
"Default",
5,
false,
1,
0,
false,
3245993415738393,
[
["images/sprite2-sheet0.png", 435, 0, 0, 500, 700, 1, 0.5, 0.5,[],[],4]
]
]
],
[
[
"Fade",
cr.behaviors.Fade,
9311525355399249
]
],
false,
false,
9720497968798076,
[],
null
]
, [
"t12",
cr.plugins_.Sprite,
false,
[4019558494193485],
0,
0,
null,
[
[
"Default",
0,
false,
1,
0,
false,
7912972602956413,
[
["images/levelsbutton-sheet1.png", 7235, 1, 1, 94, 100, 1, 0.5, 0.5,[],[],0],
["images/levelsbutton-sheet1.png", 7235, 96, 1, 94, 99, 1, 0.5, 0.5050504803657532,[],[-0.5,-0.5050504803657532,-0.5,0.4949495196342468,0.5,0.4949495196342468,0.5,-0.5050504803657532],0],
["images/levelsbutton-sheet0.png", 16401, 1, 1, 95, 100, 1, 0.5052631497383118, 0.5,[],[-0.4842105507850647,-0.3799999952316284,0.4947368502616882,-0.4600000083446503,0.4947368502616882,-0.09000000357627869,0.4947368502616882,0.5,0.4947368502616882,0.5,-0.2631581425666809,0.5],0]
]
]
, [
"1star",
0,
false,
1,
0,
false,
5007394540073674,
[
["images/levelsbutton-sheet0.png", 16401, 97, 1, 95, 100, 1, 0.5052631497383118, 0.5,[],[],0]
]
]
, [
"2star",
0,
false,
1,
0,
false,
1636366990257711,
[
["images/levelsbutton-sheet0.png", 16401, 1, 102, 95, 100, 1, 0.5052631497383118, 0.5,[],[],0]
]
]
, [
"3star",
0,
false,
1,
0,
false,
8218346633048399,
[
["images/levelsbutton-sheet0.png", 16401, 97, 102, 95, 100, 1, 0.5052631497383118, 0.5,[],[-0.5052631497383118,-0.5,0.09473687410354614,-0.5,0.4947368502616882,-0.5,0.4947368502616882,0.5,0.09473687410354614,0.5,-0.5052631497383118,0.5],0]
]
]
],
[
],
false,
false,
2626595128588886,
[],
null
]
, [
"t13",
cr.plugins_.Sprite,
false,
[4290969893313189],
0,
0,
null,
[
[
"Default",
0,
false,
1,
0,
false,
5332395157865379,
[
["images/but-sheet0.png", 4753, 140, 74, 69, 74, 1, 0.5072463750839233, 0.5,[],[-0.5072463750839233,-0.5,0.4927536249160767,-0.5,0.4927536249160767,-0.5,0.4927536249160767,-0.5,0.4927536249160767,0.5,-0.5072463750839233,0.5,-0.5072463750839233,-0.5],0],
["images/but2-sheet0.png", 965, 0, 0, 69, 74, 1, 0.4927536249160767, 0.5,[],[0.5072463750839233,-0.5,0.5072463750839233,0.5,-0.4927536249160767,0.5,-0.4927536249160767,-0.5,-0.4927536249160767,-0.5,-0.4927536249160767,-0.5,0.5072463750839233,-0.5],0]
]
]
],
[
],
false,
false,
266459267238684,
[],
null
]
, [
"t14",
cr.plugins_.Arr,
false,
[],
0,
0,
null,
null,
[
],
true,
false,
9385172411850335,
[],
null
]
, [
"t15",
cr.plugins_.TiledBg,
false,
[],
0,
0,
["images/tiledbackground2.png", 92, 1],
null,
[
],
false,
true,
741687038862552,
[],
null
]
, [
"t16",
cr.plugins_.Sprite,
false,
[],
0,
0,
null,
[
[
"Default",
5,
false,
1,
0,
false,
7008078868047513,
[
["images/logo256-sheet0.png", 592, 0, 0, 256, 256, 1, 0.5, 0.5,[],[],0]
]
]
],
[
],
false,
true,
2728912722909023,
[],
null
]
, [
"t17",
cr.plugins_.Sprite,
false,
[],
0,
0,
null,
[
[
"Default",
5,
false,
1,
0,
false,
3017387505309843,
[
["images/untitled-sheet0.png", 5308, 0, 0, 340, 50, 1, 0.5, 0.550000011920929,[],[-0.449275404214859,-0.5074999928474426,0.04347801208496094,-0.5074999928474426,0.4565219879150391,-0.2737500071525574,-0.1376810073852539,0.300000011920929,0.04347801208496094,0.300000011920929,0.1956520080566406,0.300000011920929],0]
]
]
],
[
],
false,
false,
7488880938098429,
[],
null
]
, [
"t18",
cr.plugins_.WebStorage,
false,
[],
0,
0,
null,
null,
[
],
false,
false,
9563473435939971,
[],
null
,[]
]
, [
"t19",
cr.plugins_.Spritefont2,
false,
[8655571220559716],
0,
0,
["images/day2.png", 8217, 0],
null,
[
],
false,
false,
6290392448251677,
[],
null
]
, [
"t20",
cr.plugins_.Softgames,
false,
[],
0,
0,
null,
null,
[
],
false,
false,
3143169403329861,
[],
null
,[77]
]
],
[
],
[
[
"levels1",
384,
600,
false,
"levelselect",
2271443290227675,
[
[
"Layer 0",
0,
6339876361539137,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
26,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
35,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
36,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 0.800000011920929, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
37,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 0.800000011920929, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
38,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[262.0788269042969, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
39,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[66.316650390625, 33.14364624023438, 0, 316.1051330566406, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
44,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MORE GAMES"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[66.09172058105469, 201.9490814208984, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
33,
[
[1]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[65.97599029541016, 181.2852935791016, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
34,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"1",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[188.1265869140625, 202.7693786621094, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
43,
[
[2]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[188.0108642578125, 182.1055908203125, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
45,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"2",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[311.4395446777344, 202.9425201416016, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
48,
[
[3]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[311.3237915039063, 182.2787322998047, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
49,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"3",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.41082763671875, 319.6491394042969, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
51,
[
[4]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[68.29509735107422, 298.9853515625, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
52,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"4",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[190.4456939697266, 320.4694213867188, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
54,
[
[5]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[190.3299713134766, 299.8056640625, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
55,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"5",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[313.7586669921875, 320.642578125, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
57,
[
[6]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[313.6428833007813, 299.9787902832031, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
58,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"6",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.99578857421875, 439.5648193359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
60,
[
[7]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[68.88005828857422, 418.9010314941406, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
61,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"7",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[191.0306549072266, 440.3851318359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
63,
[
[8]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[190.9149322509766, 419.7213134765625, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
64,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"8",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[314.3436279296875, 440.5582580566406, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
66,
[
[9]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[314.2278442382813, 419.8944702148438, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
67,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"9",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[186, 558, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
409,
[
[99]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"1",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[337, 561, 0, 69, 74, 0, 0, 1, 0.5072463750839233, 0.5, 0, 0, []],
13,
410,
[
[1]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[47, 561, 0, 69, 74, 0, 0, 1, 0.4927536249160767, 0.5, 0, 0, []],
13,
411,
[
[0]
],
[
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
[
null,
14,
42,
[
],
[
],
[
46,
1,
1
]
]
],
[]
]
, [
"levels2",
384,
600,
false,
"levelselect",
2459397666815465,
[
[
"Layer 0",
0,
5046862504068535,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
41,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
69,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
70,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 0.800000011920929, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
71,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 0.800000011920929, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
72,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[262.0788269042969, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
73,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[66.316650390625, 33.14364624023438, 0, 316.1051330566406, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
74,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MORE GAMES"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[66.09172058105469, 201.9490814208984, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
75,
[
[10]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[67.10943603515625, 181.2852935791016, 0, 77, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
76,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"10",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[188.1265869140625, 202.7693786621094, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
78,
[
[11]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[187.6443176269531, 182.1055908203125, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
79,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"11",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[311.4395446777344, 202.9425201416016, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
81,
[
[12]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[310.4572143554688, 182.2787322998047, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
82,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"12",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.41082763671875, 319.6491394042969, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
84,
[
[13]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[66.42854309082031, 298.9853515625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
85,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"13",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[190.4456939697266, 320.4694213867188, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
87,
[
[14]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[188.4634246826172, 299.8056640625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
88,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"14",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[313.7586669921875, 320.642578125, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
90,
[
[15]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[313.2763061523438, 299.9787902832031, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
91,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"15",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.99578857421875, 439.5648193359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
93,
[
[16]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[68.01350402832031, 418.9010314941406, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
94,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"16",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[191.0306549072266, 440.3851318359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
96,
[
[17]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[190.0483856201172, 419.7213134765625, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
97,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"17",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[314.3436279296875, 440.5582580566406, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
99,
[
[18]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[312.8612670898438, 419.8944702148438, 0, 72, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
100,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"18",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[186, 558, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
102,
[
[99]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"2",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[337, 561, 0, 69, 74, 0, 0, 1, 0.5072463750839233, 0.5, 0, 0, []],
13,
103,
[
[1]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[47, 561, 0, 69, 74, 0, 0, 1, 0.4927536249160767, 0.5, 0, 0, []],
13,
104,
[
[0]
],
[
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"levels3",
384,
600,
false,
"levelselect",
7026327256946664,
[
[
"Layer 0",
0,
9865693681911757,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
105,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
106,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
107,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 0.800000011920929, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
108,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 0.800000011920929, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
109,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[262.0788269042969, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
110,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[66.316650390625, 33.14364624023438, 0, 316.1051330566406, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
111,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MORE GAMES"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[66.09172058105469, 201.9490814208984, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
112,
[
[19]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[67.10943603515625, 181.2852935791016, 0, 77, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
113,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"19",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[188.1265869140625, 202.7693786621094, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
115,
[
[20]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[187.6443176269531, 182.1055908203125, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
116,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"20",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[311.4395446777344, 202.9425201416016, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
118,
[
[21]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[310.4572143554688, 182.2787322998047, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
119,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"21",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.41082763671875, 319.6491394042969, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
121,
[
[22]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[66.42854309082031, 298.9853515625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
122,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"22",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[190.4456939697266, 320.4694213867188, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
124,
[
[23]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[188.4634246826172, 299.8056640625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
125,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"23",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[313.7586669921875, 320.642578125, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
127,
[
[24]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[313.2763061523438, 299.9787902832031, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
128,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"24",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.99578857421875, 439.5648193359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
130,
[
[25]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[68.01350402832031, 418.9010314941406, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
131,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"25",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[191.0306549072266, 440.3851318359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
133,
[
[26]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[190.0483856201172, 419.7213134765625, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
134,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"26",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[314.3436279296875, 440.5582580566406, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
136,
[
[27]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[312.8612670898438, 419.8944702148438, 0, 72, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
137,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"27",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[186, 558, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
139,
[
[99]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"3",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[337, 561, 0, 69, 74, 0, 0, 1, 0.5072463750839233, 0.5, 0, 0, []],
13,
140,
[
[1]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[47, 561, 0, 69, 74, 0, 0, 1, 0.4927536249160767, 0.5, 0, 0, []],
13,
141,
[
[0]
],
[
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"levels4",
384,
600,
false,
"levelselect",
2798515885811848,
[
[
"Layer 0",
0,
2425829972258829,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
142,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
143,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
144,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 0.800000011920929, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
145,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 0.800000011920929, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
146,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[262.0788269042969, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
147,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[66.316650390625, 33.14364624023438, 0, 316.1051330566406, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
148,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MORE GAMES"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[66.09172058105469, 201.9490814208984, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
149,
[
[28]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[67.10943603515625, 181.2852935791016, 0, 77, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
150,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"28",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[188.1265869140625, 202.7693786621094, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
152,
[
[29]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[187.6443176269531, 182.1055908203125, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
153,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"29",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[311.4395446777344, 202.9425201416016, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
155,
[
[30]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[310.4572143554688, 182.2787322998047, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
156,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"30",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.41082763671875, 319.6491394042969, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
158,
[
[31]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[66.42854309082031, 298.9853515625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
159,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"31",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[190.4456939697266, 320.4694213867188, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
161,
[
[32]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[188.4634246826172, 299.8056640625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
162,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"32",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[313.7586669921875, 320.642578125, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
164,
[
[33]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[313.2763061523438, 299.9787902832031, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
165,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"33",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.99578857421875, 439.5648193359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
167,
[
[34]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[68.01350402832031, 418.9010314941406, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
168,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"34",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[191.0306549072266, 440.3851318359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
170,
[
[35]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[190.0483856201172, 419.7213134765625, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
171,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"35",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[314.3436279296875, 440.5582580566406, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
173,
[
[36]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[312.8612670898438, 419.8944702148438, 0, 72, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
174,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"36",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[186, 558, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
176,
[
[99]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"4",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[337, 561, 0, 69, 74, 0, 0, 1, 0.5072463750839233, 0.5, 0, 0, []],
13,
177,
[
[1]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[47, 561, 0, 69, 74, 0, 0, 1, 0.4927536249160767, 0.5, 0, 0, []],
13,
178,
[
[0]
],
[
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"levels5",
384,
600,
false,
"levelselect",
7870730390201216,
[
[
"Layer 0",
0,
9719950675536724,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
179,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
180,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
181,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 0.800000011920929, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
182,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 0.800000011920929, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
183,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[262.0788269042969, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
184,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[66.316650390625, 33.14364624023438, 0, 316.1051330566406, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
185,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MORE GAMES"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[66.09172058105469, 201.9490814208984, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
186,
[
[37]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[67.10943603515625, 181.2852935791016, 0, 77, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
187,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"37",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[188.1265869140625, 202.7693786621094, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
189,
[
[38]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[187.6443176269531, 182.1055908203125, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
190,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"38",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[311.4395446777344, 202.9425201416016, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
192,
[
[39]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[310.4572143554688, 182.2787322998047, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
193,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"39",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.41082763671875, 319.6491394042969, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
195,
[
[40]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[66.42854309082031, 298.9853515625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
196,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"40",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[190.4456939697266, 320.4694213867188, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
198,
[
[41]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[188.4634246826172, 299.8056640625, 0, 71, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
199,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"41",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[313.7586669921875, 320.642578125, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
201,
[
[42]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[313.2763061523438, 299.9787902832031, 0, 74, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
202,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"42",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[68.99578857421875, 439.5648193359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
204,
[
[43]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[68.01350402832031, 418.9010314941406, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
205,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"43",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[191.0306549072266, 440.3851318359375, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
207,
[
[44]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[190.0483856201172, 419.7213134765625, 0, 73, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
208,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"44",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[314.3436279296875, 440.5582580566406, 0, 94, 100, 0, 0, 1, 0.5, 0.5, 0, 0, []],
12,
210,
[
[45]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[312.8612670898438, 419.8944702148438, 0, 72, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
211,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"45",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[186, 558, 0, 60.73310852050781, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
6,
213,
[
[99]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"5",
1.2,
0,
1,
1,
1,
0,
0,
0
]
]
, [
[47, 561, 0, 69, 74, 0, 0, 1, 0.4927536249160767, 0.5, 0, 0, []],
13,
215,
[
[0]
],
[
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level1",
384,
600,
false,
"level",
6623983983586913,
[
[
"Layer 0",
0,
7970073798500857,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
5,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
0,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
6,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
11,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
16,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
0,
0,
0,
3,
0,
0,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
2,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
3,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 0.800000011920929, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
7,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 0.800000011920929, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
9,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
10,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
12,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
13,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
14,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
17,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MOVE:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
18,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
21,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
8,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
],
[ ]
]
],
[
[
null,
7,
4,
[
],
[
],
[
10,
1,
1
]
]
],
[]
]
, [
"level2",
384,
600,
false,
"level",
3169851775194241,
[
[
"Layer 0",
0,
9919873687287216,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
214,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
216,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
217,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
219,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[64, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
220,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
221,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
222,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
223,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
224,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
225,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
226,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
227,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
228,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
229,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
230,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
231,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
232,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
233,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
235,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[320, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
236,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
237,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
218,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level3",
384,
600,
false,
"level",
1190102269929686,
[
[
"Layer 0",
0,
8410317708420457,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
238,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
241,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
242,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
243,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
244,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
245,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
246,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
247,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
248,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
249,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
250,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
251,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
252,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
253,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
254,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
255,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
258,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
240,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
260,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
256,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
239,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
257,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
261,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
262,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
263,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level4",
384,
600,
false,
"level",
5279822629421395,
[
[
"Layer 0",
0,
670775923203508,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
264,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
266,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
267,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
268,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
269,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
270,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
271,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
272,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
273,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
274,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
275,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
276,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
277,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
278,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
279,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
280,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
281,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
282,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
286,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
287,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
288,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
289,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
265,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
283,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
284,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
290,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level5",
384,
600,
false,
"level",
8924519312952848,
[
[
"Layer 0",
0,
7930517637937452,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
259,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
285,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
291,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
292,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
293,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
294,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
295,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
296,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
297,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
298,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
299,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
300,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
301,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
302,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
303,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
304,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
305,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
307,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
308,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
310,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
311,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
312,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
313,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
314,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
315,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level6",
384,
600,
false,
"level",
9666701855247536,
[
[
"Layer 0",
0,
8438083283730976,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
306,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
309,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
316,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
317,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
318,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
319,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
320,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
321,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
322,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
323,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
324,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
325,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
326,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
327,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
328,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
329,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
330,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
332,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
334,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
335,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 192, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
338,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
339,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
333,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
337,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
331,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level7",
384,
600,
false,
"level",
9026072239529671,
[
[
"Layer 0",
0,
2089740974850829,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
336,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
340,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
341,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
342,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
343,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
344,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
345,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
346,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
347,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
348,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
349,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
350,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
351,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
352,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
353,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
354,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
355,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
357,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
358,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
361,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
362,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
363,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
364,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level8",
384,
600,
false,
"level",
4573619832630971,
[
[
"Layer 0",
0,
138318962529661,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
356,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
359,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
360,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
365,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
366,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
367,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
368,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
369,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
370,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
371,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
372,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
373,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
374,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
375,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
376,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
377,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
378,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
379,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
380,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
382,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
383,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
385,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
386,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
381,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level9",
384,
600,
false,
"level",
9947002541384644,
[
[
"Layer 0",
0,
2546453387739175,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
384,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
387,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
388,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
389,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
390,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
391,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
392,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
393,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
394,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
395,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
396,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
397,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
398,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
399,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
400,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
402,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
405,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
406,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
412,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
414,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
415,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
416,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
417,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[64, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
418,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level10",
384,
600,
false,
"level",
4930483703681893,
[
[
"Layer 0",
0,
3476779539389082,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
401,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
403,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
404,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
407,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
413,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
419,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
420,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
421,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
422,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
423,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
424,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
425,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
426,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
427,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
428,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
429,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
431,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
432,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
438,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
439,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
440,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
441,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
442,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
443,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
444,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level11",
384,
600,
false,
"level",
2299713904015654,
[
[
"Layer 0",
0,
8256208144337426,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
430,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
433,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
434,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
435,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
436,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
437,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
445,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
446,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
447,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
448,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
449,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
450,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
451,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
452,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
453,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
456,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
458,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
462,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
454,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
455,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[320, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
457,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
459,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
460,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
463,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level12",
384,
600,
false,
"level",
9467835001155093,
[
[
"Layer 0",
0,
1960643085711368,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
461,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
464,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
465,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
466,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
467,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
468,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
469,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
470,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
471,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
472,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
473,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
474,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
475,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
476,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
477,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
478,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
479,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
480,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
481,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
483,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
484,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
485,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
486,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
487,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level13",
384,
600,
false,
"level",
94799150923163,
[
[
"Layer 0",
0,
8741844802706798,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
482,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
488,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
489,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
490,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
491,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
492,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
493,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
494,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
495,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
496,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
497,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
498,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
499,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
500,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
501,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
503,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
504,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
506,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
234,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
507,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
508,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
510,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
62,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
65,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
68,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
77,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
80,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level14",
384,
600,
false,
"level",
3322475643450141,
[
[
"Layer 0",
0,
6708914419688653,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
505,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
511,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
512,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
513,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
514,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
515,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
516,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
517,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
518,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
519,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
520,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
521,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
522,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
523,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
524,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
528,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
532,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
533,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
535,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
537,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
558,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
559,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
560,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
561,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
562,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
563,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
564,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level15",
384,
600,
false,
"level",
2156527214536673,
[
[
"Layer 0",
0,
4762970266213339,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
525,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
527,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
530,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
531,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
538,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
539,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
540,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
541,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
542,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
543,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
544,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
545,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
546,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
547,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
548,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
549,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
550,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
551,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
552,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
553,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
554,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
555,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
556,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
557,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level16",
384,
600,
false,
"level",
8283100192806072,
[
[
"Layer 0",
0,
2619244248760458,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
526,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
529,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
534,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
536,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
565,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
566,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
567,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
568,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
569,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
570,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
571,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
572,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
573,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
574,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
575,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
576,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
577,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
580,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
581,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
585,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
586,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
587,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
588,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
589,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level17",
384,
600,
false,
"level",
9403491072259197,
[
[
"Layer 0",
0,
2390209795771159,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
578,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
579,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
582,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
583,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
584,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
590,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
591,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
592,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
593,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
594,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
595,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
596,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
597,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
598,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
599,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
600,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
603,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
605,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
606,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
608,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
609,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
610,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
611,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
612,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
613,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level18",
384,
600,
false,
"level",
2595189307601753,
[
[
"Layer 0",
0,
2966362878956094,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
614,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
615,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
616,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
617,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
618,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
619,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
620,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
621,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
622,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
623,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
624,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
625,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
626,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
627,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
628,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
629,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
634,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
635,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
637,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
638,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
639,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
640,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
641,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
642,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
601,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
602,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
604,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
607,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
643,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level19",
384,
600,
false,
"level",
9085841114297728,
[
[
"Layer 0",
0,
1391242555587254,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
644,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
645,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
646,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
647,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
648,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
649,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
650,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
651,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
652,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
653,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
654,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
655,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
656,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
657,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
658,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
659,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
660,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
661,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
662,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[320, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
666,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
669,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
671,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
672,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
630,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level20",
384,
600,
false,
"level",
8357726908712119,
[
[
"Layer 0",
0,
824667904277578,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
631,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
632,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
633,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
636,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
663,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
664,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
665,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
667,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
668,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
670,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
673,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
674,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
675,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
676,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
677,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
679,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
680,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
681,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[320, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
682,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
684,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
685,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
686,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
687,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
688,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
689,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
690,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level21",
384,
600,
false,
"level",
2065103741856112,
[
[
"Layer 0",
0,
67843794173942,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
678,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
683,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
691,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
692,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
693,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
694,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
695,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
696,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
697,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
698,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
699,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
700,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
701,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
702,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
703,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
705,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
706,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
708,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
710,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
713,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
715,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
716,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
717,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
718,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
719,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level22",
384,
600,
false,
"level",
2110187236731083,
[
[
"Layer 0",
0,
6265244914397879,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
720,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
721,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
722,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
723,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
724,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
725,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
726,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
727,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
728,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
729,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
730,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
731,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
732,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
733,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
734,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
735,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
736,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
737,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
738,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
741,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
743,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
747,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
748,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
750,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
704,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level23",
384,
600,
false,
"level",
7134303502515761,
[
[
"Layer 0",
0,
2440430589992213,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
707,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
709,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
711,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
712,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
714,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
751,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
752,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
753,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
754,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
755,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
756,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
757,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
758,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
759,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
760,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
763,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
764,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[320, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
765,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
766,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
767,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
769,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
772,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
776,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 192, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
739,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
740,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level24",
384,
600,
false,
"level",
9111904722197818,
[
[
"Layer 0",
0,
5578458993464773,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
742,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
744,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
745,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
746,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
749,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
761,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
762,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
768,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
770,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
771,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
773,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
774,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
775,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
777,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
778,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
780,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
782,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
783,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
784,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
785,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
786,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
787,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
789,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
790,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level25",
384,
600,
false,
"level",
2836795208119585,
[
[
"Layer 0",
0,
3838443176366755,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
779,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
781,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
788,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
791,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
792,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
793,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
794,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
795,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
796,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
797,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
798,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
799,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
800,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
801,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
802,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
803,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
806,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
807,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
809,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
810,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
811,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1325,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1326,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
805,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level26",
384,
600,
false,
"level",
2916441160240258,
[
[
"Layer 0",
0,
8889921899272823,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
814,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[64, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
815,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
816,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
817,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
818,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
819,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
820,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
821,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
822,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
823,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
824,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
825,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
826,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
827,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
828,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
829,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
833,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
834,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
835,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
836,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
838,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
839,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
840,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level27",
384,
600,
false,
"level",
5884138401696381,
[
[
"Layer 0",
0,
943627014304842,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
830,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
831,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
832,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
837,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
841,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
842,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
843,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
844,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
845,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
846,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
847,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
848,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
849,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
850,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
851,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
852,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
853,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
854,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
856,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
857,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
858,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
859,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
860,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
861,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
855,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
862,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level28",
384,
600,
false,
"level",
4549823951795258,
[
[
"Layer 0",
0,
3253358018240081,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
863,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
864,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
865,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
866,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
867,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
868,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
869,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
870,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
871,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
872,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
873,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
874,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
875,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
876,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
877,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
878,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
879,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
880,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
881,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
883,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
884,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
885,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
886,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
889,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
890,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
891,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level29",
384,
600,
false,
"level",
7090009816915044,
[
[
"Layer 0",
0,
2426970501519903,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
882,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
887,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
888,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
892,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
893,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
894,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
895,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
896,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
897,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
898,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
899,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
900,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
901,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
902,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
903,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
904,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
906,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
907,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
908,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
909,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
910,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
911,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
914,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
915,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[320, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
916,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level30",
384,
600,
false,
"level",
9157350502653619,
[
[
"Layer 0",
0,
641698893568282,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
905,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
912,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
913,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
917,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
918,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
919,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
920,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
921,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
922,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
923,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
924,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
925,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
926,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
927,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
928,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
931,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
933,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
934,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
935,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
936,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
937,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
939,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
940,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
941,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
942,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
943,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
944,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level31",
384,
600,
false,
"level",
3296089338341016,
[
[
"Layer 0",
0,
9623474130611904,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
929,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
930,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
932,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
938,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
945,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
946,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
947,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
948,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
949,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
950,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
951,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
952,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
953,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
954,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
955,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
956,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
957,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
959,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
962,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
963,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
964,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
960,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
958,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
965,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
966,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level32",
384,
600,
false,
"level",
6999695560406874,
[
[
"Layer 0",
0,
3723478542626248,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
967,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
968,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
969,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
970,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
971,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
972,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
973,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
974,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
975,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
976,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
977,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
978,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
979,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
980,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
981,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
982,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
984,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
985,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
986,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
987,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
988,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
990,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
991,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
961,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
993,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
994,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
995,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level33",
384,
600,
false,
"level",
9340843592021373,
[
[
"Layer 0",
0,
8993791528598529,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
989,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
992,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
996,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
997,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
998,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
999,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1000,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1001,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1002,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1003,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1004,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1005,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1006,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1007,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1008,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1009,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1010,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1011,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1014,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1015,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1016,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1017,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1018,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1019,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
983,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1012,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1022,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1023,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1024,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level34",
384,
600,
false,
"level",
8836978694370785,
[
[
"Layer 0",
0,
5619228732803368,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1013,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[64, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1020,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1021,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1025,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1026,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1027,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1028,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1029,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1030,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1031,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1032,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1033,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1034,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1035,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1036,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1037,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1038,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1039,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1040,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1042,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1048,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1049,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1051,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1041,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1043,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level35",
384,
600,
false,
"level",
5616076748027522,
[
[
"Layer 0",
0,
401089839475965,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1044,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1045,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1046,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1047,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1050,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
1052,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
1053,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1054,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1055,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1056,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1057,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1058,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1059,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1060,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1061,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1062,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1065,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1066,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1067,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1068,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1069,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1072,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1064,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1071,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
83,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level36",
384,
600,
false,
"level",
3598728722339305,
[
[
"Layer 0",
0,
193284296942073,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1063,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1075,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1076,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1077,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1078,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1079,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1080,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1081,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1082,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1083,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1084,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1085,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1086,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1087,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1088,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1090,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1094,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1095,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1098,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1092,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1093,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1089,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1091,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1096,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1097,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level37",
384,
600,
false,
"level",
5938694497851802,
[
[
"Layer 0",
0,
8541297649509562,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1099,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1100,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1101,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1102,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1103,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1104,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1105,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1106,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1107,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1108,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1109,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1110,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1111,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1112,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1113,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1114,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1115,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1116,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1119,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1121,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1122,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1123,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1120,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1117,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level38",
384,
600,
false,
"level",
9056705169420474,
[
[
"Layer 0",
0,
3165085713215433,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1118,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1124,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1125,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1126,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1127,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1128,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1129,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1130,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1131,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1132,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1133,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1134,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1135,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1136,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1137,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1138,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1139,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1140,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1141,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1142,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1147,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1148,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1144,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level39",
384,
600,
false,
"level",
4235139016807344,
[
[
"Layer 0",
0,
718436258565964,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1143,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[192, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1145,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1146,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1149,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1150,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1151,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1152,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1153,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1154,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1155,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1156,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1157,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1158,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1159,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1160,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1161,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1162,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[0, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1163,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1164,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1165,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1167,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1169,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1170,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1171,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1172,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1173,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level40",
384,
600,
false,
"level",
8896901421998606,
[
[
"Layer 0",
0,
9359295469009389,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1166,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1168,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1174,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1175,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1176,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1177,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1178,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1179,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1180,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1181,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1182,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1183,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1184,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1185,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1186,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1188,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1189,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[128, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1190,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1191,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1196,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1197,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1198,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1199,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1200,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1201,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level41",
384,
600,
false,
"level",
7042312426776311,
[
[
"Layer 0",
0,
6946511892129143,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1187,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1192,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1193,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1194,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1195,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1202,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1203,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1204,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1205,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1206,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1207,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1208,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1209,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1210,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1211,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[320, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1212,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[64, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1213,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[256, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1214,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1216,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1218,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1219,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1220,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1221,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1222,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1223,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1224,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level42",
384,
600,
false,
"level",
9086234496957633,
[
[
"Layer 0",
0,
8820506034855131,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1215,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1217,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1225,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1226,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1227,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1228,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1229,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1230,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1231,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1232,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1233,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1234,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1235,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1236,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1237,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1240,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1241,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1242,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1243,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 128, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1245,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1246,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 384, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1247,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1248,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1249,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1250,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1251,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level43",
384,
600,
false,
"level",
5093009197148014,
[
[
"Layer 0",
0,
9951508908450689,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1239,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[128, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1244,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1252,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1253,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1254,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1255,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1256,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1257,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1258,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1259,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1260,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1261,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1262,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1263,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1264,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1265,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1267,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1268,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1269,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1272,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1273,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1238,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[192, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1277,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 192, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1266,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1270,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1271,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level44",
384,
600,
false,
"level",
5566726237263082,
[
[
"Layer 0",
0,
6999816682334811,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1274,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[64, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1275,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1276,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1278,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1279,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1280,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1281,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1282,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1283,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1284,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1285,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1286,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1287,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1288,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1289,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1290,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[128, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1291,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 384, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1292,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1293,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[192, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1294,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1296,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[128, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1297,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 320, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1298,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1300,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 256, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1301,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[256, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1302,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"level45",
384,
600,
false,
"level",
7653858613575446,
[
[
"Layer 0",
0,
2442361974196188,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
1295,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[64, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1299,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
1303,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1304,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
1305,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673975646496, 0.00699300691485405, 0, 0, []],
3,
1306,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673975646496, -1.422360301017761, 0, 0, []],
3,
1307,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[68, 562, 0, 67, 76, 0, 0, 1, 0.5074626803398132, 0.5, 0, 0, []],
4,
1308,
[
[0]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 562, 0, 75, 72, 0, 0, 1, 0.5066666603088379, 0.5, 0, 0, []],
4,
1309,
[
[1]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
2,
1
]
]
, [
[313, 562, 0, 69, 74, 0, 0, 0.5, 0.5072463750839233, 0.5, 0, 0, []],
4,
1310,
[
[2]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
1,
1
]
]
, [
[318, 91, 0, 99, 36, 0, 0, 1, 0.5050504803657532, 0.5, 0, 0, []],
5,
1311,
[
[0],
[0]
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[9, 0, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1312,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["BEST:"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[8, 64, 0, 256, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1313,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
"MOVE:",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[265, 0, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
1314,
[
[2]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["LEVEL:"]+" 01",
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[192, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
1315,
[
[3]
],
[
[
1,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[0, 192, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1317,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[64, 192, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1318,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[64, 384, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1319,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[0, 128, 0, 192, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1320,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
1,
1
]
]
, [
[0, 320, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1321,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1322,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
, [
[256, 128, 0, 64, 192, 0, 0, 1, 0, 0, 0, 0, []],
0,
1323,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[192, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1324,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[320, 128, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1327,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 320, 0, 64, 128, 0, 0, 1, 0, 0, 0, 0, []],
0,
1328,
[
[0],
[0],
[0]
],
[
[
2,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
2,
1
]
]
, [
[128, 448, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
1316,
[
[0],
[0],
[0]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Default",
3,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"menu",
384,
600,
false,
"menu",
5573629666584475,
[
[
"Layer 0",
0,
1559280090494517,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[0, 512, 0, 389, 384, 0, 0, 1, 0, 1, 0, 0, []],
3,
22,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 256, 0, 128, 64, 0, 0, 1, 0, 0, 0, 0, []],
0,
27,
[
[0],
[0],
[1]
],
[
[
1,
1
],
[
1
],
[
200,
600,
500,
3,
3,
1,
1
]
],
[
0,
"Red",
4,
1
]
]
, [
[320, 320, 0, 64, 64, 0, 0, 1, 0, 1, 0, 0, []],
2,
28,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 512, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
29,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 64, 0, 384, 64, 0, 0, 1, 0, 0, 0, 0, []],
1,
30,
[
],
[
],
[
1,
"Default",
0,
1
]
]
, [
[0, 521, 0, 386, 143, 0, 0, 1, 0.002590673509985209, 0.00699300691485405, 0, 0, []],
3,
31,
[
],
[
],
[
0,
"Default",
2,
1
]
]
, [
[-1, -270, 0, 386, 161, 0, 0, 1, 0.002590673509985209, -1.422360301017761, 0, 0, []],
3,
32,
[
],
[
],
[
0,
"Default",
1,
1
]
]
, [
[262.0788269042969, 56, 0, 100, 100, 0, 0, 1, 0.5, 0.5036496520042419, 0, 0, []],
4,
40,
[
[3]
],
[
[
0,
0,
0,
4,
0,
0,
0,
50,
0
]
],
[
0,
"Default",
3,
1
]
]
, [
[160, 529, 0, 64, 64, 0, 0, 1, 0, 0, 0, 0, []],
10,
23,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[66.316650390625, 33.14364624023438, 0, 316.1051330566406, 64, 0, 0, 1, 0, 0, 0, 0, []],
6,
25,
[
[1]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["MORE GAMES"],
1,
0,
0,
0,
0,
0,
0,
0
]
]
, [
[758, 320, 0, 500, 700, 0, 0, 1, 0.5, 0.5, 0, 0, []],
11,
46,
[
],
[
[
1,
0,
0,
0.5,
1
]
],
[
0,
"Default",
0,
1
]
]
, [
[186, 404, 0, 138, 60, 0, 0, 1, 0.5, 0.550000011920929, 0, 0, []],
17,
56,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[197, 186, 0, 477, 64, 0, 0, 1, 0.5, 0.5, 0, 0, []],
19,
15,
[
[0]
],
[
],
[
29,
43,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,;:?!-_~#\"'&()[]|`\\/@°+=*$£€<>",
sg_texts[SG.lang]["SLIDE GREEN BLOCK TO START"],
1,
0,
1,
1,
1,
0,
-16,
0
]
]
],
[ ]
]
],
[
],
[]
]
, [
"Splash",
384,
600,
false,
"Splash",
2687879298449789,
[
[
"Layer 0",
0,
1474114471424048,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[192, 300, 0, 256, 256, 0, 0, 1, 0.5, 0.5, 0, 0, []],
16,
86,
[
],
[
],
[
0,
"Default",
0,
1
]
]
],
[ ]
]
],
[
],
[]
]
, [
"Loading",
384,
600,
false,
"Loading",
9738847845378719,
[
[
"Layer 0",
0,
1380657750457465,
true,
[44, 44, 44],
false,
1,
1,
1,
false,
1,
0,
0,
[
[
[192, 300, 0, 256, 256, 0, 0, 1, 0.5, 0.5, 0, 0, []],
16,
50,
[
],
[
],
[
0,
"Default",
0,
1
]
]
, [
[0, 517, 0, 1, 7, 0, 0, 1, 0, 0, 0, 0, []],
15,
53,
[
],
[
],
[
0,
0
]
]
],
[ ]
]
],
[
],
[]
]
],
[
[
"level",
[
[
1,
"level",
0,
0,
false,false,6296201313772328,false
]
, [
1,
"stars",
0,
0,
false,false,3464907030350117,false
]
, [
1,
"timee",
0,
0,
false,false,8463331835070682,false
]
, [
0,
null,
false,
null,
6340896181407977,
[
[
-1,
cr.system_object.prototype.cnds.EveryTick,
null,
0,
false,
false,
false,
2642858007107924,
false
]
, [
0,
cr.behaviors.DragnDrop.prototype.cnds.IsDragging,
"DragDrop",
0,
false,
true,
false,
8138022065639615,
false
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetPos,
null,
9926733802307267,
false
,[
[
0,
[
19,
cr.system_object.prototype.exps.lerp
,[
[
20,
0,
cr.plugins_.Sprite.prototype.exps.X,
false,
null
]
,[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.X,
false,
null
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
,[
1,
0.5
]
]
]
]
, [
0,
[
19,
cr.system_object.prototype.exps.lerp
,[
[
20,
0,
cr.plugins_.Sprite.prototype.exps.Y,
false,
null
]
,[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.Y,
false,
null
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
,[
1,
0.5
]
]
]
]
]
]
]
]
, [
0,
null,
true,
null,
3262928771436402,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
1919107708179077,
false
,[
[
4,
0
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
6817187314158365,
false
,[
[
4,
1
]
]
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetPos,
null,
9430797690168518,
false
,[
[
0,
[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
21,
0,
false,
null
,0
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
]
, [
0,
[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
21,
0,
false,
null
,1
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
]
]
]
, [
0,
cr.behaviors.DragnDrop.prototype.acts.Drop,
"DragDrop",
7547028486606034,
false
]
]
]
, [
0,
null,
false,
null,
3154168705741433,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
true,
false,
4044842580857039,
false
,[
[
4,
0
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
true,
false,
5928673735735991,
false
,[
[
4,
1
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOutsideLayout,
null,
0,
false,
true,
false,
8223938642719215,
false
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetInstanceVar,
null,
5350666292592225,
false
,[
[
10,
0
]
, [
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.X,
false,
null
]
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.acts.SetInstanceVar,
null,
8837892996494098,
false
,[
[
10,
1
]
, [
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.Y,
false,
null
]
]
]
]
]
]
, [
0,
null,
false,
null,
3092708355011694,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
1638529156637545,
false
,[
[
4,
2
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet,
null,
0,
false,
false,
false,
5562540127824782,
false
,[
[
10,
2
]
]
]
],
[
[
0,
cr.behaviors.DragnDrop.prototype.acts.SetEnabled,
"DragDrop",
2421275837007395,
false
,[
[
3,
0
]
]
]
]
,[
[
0,
null,
false,
null,
2425612183229859,
[
[
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
1188985158677896,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
],
[
[
4,
cr.plugins_.Sprite.prototype.acts.SetOpacity,
null,
2657520612945695,
false
,[
[
0,
[
0,
100
]
]
]
]
]
]
, [
0,
null,
false,
null,
6458809708918327,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
9120165400229315,
false
]
],
[
[
14,
cr.plugins_.Arr.prototype.acts.SetX,
null,
3212655934846545,
false
,[
[
0,
[
23,
"currentLevel"
]
]
, [
7,
[
19,
cr.system_object.prototype.exps.max
,[
[
4,
[
0,
2
]
,[
23,
"stars"
]
]
,[
20,
14,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
23,
"currentLevel"
]
]
]
]
]
]
]
]
, [
5,
cr.plugins_.Sprite.prototype.acts.SetAnimFrame,
null,
6673877501687342,
false
,[
[
0,
[
5,
[
20,
14,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
23,
"currentLevel"
]
,[
0,
0
]
]
]
,[
0,
2
]
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.AddVar,
null,
6208664989481864,
false
,[
[
11,
"currentLevel"
]
, [
7,
[
0,
1
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
4570722350269926,
[
[
6,
cr.plugins_.Spritefont2.prototype.cnds.OnCreated,
null,
1,
false,
false,
false,
3700932591412556,
false
]
],
[
[
7,
cr.plugins_.Arr.prototype.acts.JSONLoad,
null,
7738146856842609,
false
,[
[
1,
[
2,
"{\"c2array\":true,\"size\":[2,18,1],\"data\":[[[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[24],[26],[27]],[[\"'\"],[\";|\"],[\"Ii.,\"],[\":!-`\"],[\"()°\"],[\"l\\\"[]\"],[\"Le12_=$<>\"],[\"ERSfp357\\\\/\"],[\"BCFGJPTUZbcgjnoqstz4689?+\"],[\"DHNOQdkru0~*\"],[\"AKVYhvy£€\"],[\"ax\"],[\"MXm\"],[\"w&\"],[\"W\"],[\"%\"],[\"#\"],[\"@\"]]]}"
]
]
]
]
]
,[
[
0,
null,
false,
null,
248332985935212,
[
[
-1,
cr.system_object.prototype.cnds.For,
null,
0,
true,
false,
false,
731143400910005,
false
,[
[
1,
[
2,
"y"
]
]
, [
0,
[
0,
0
]
]
, [
0,
[
5,
[
20,
7,
cr.plugins_.Arr.prototype.exps.Height,
false,
null
]
,[
0,
1
]
]
]
]
]
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.SetCharacterWidth,
null,
6143337227191957,
false
,[
[
1,
[
20,
7,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
0,
1
]
,[
19,
cr.system_object.prototype.exps.loopindex
,[
[
2,
"y"
]
]
]
]
]
]
, [
0,
[
20,
7,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
0,
0
]
,[
19,
cr.system_object.prototype.exps.loopindex
,[
[
2,
"y"
]
]
]
]
]
]
]
]
, [
6,
cr.plugins_.Spritefont2.prototype.acts.SetCharacterWidth,
null,
265591441951755,
false
,[
[
1,
[
2,
" "
]
]
, [
0,
[
0,
9
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
4739079917613882,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
6730174611284973,
false
]
, [
6,
cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
1798204198973239,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
],
[
]
,[
[
0,
null,
false,
null,
4017773690330887,
[
[
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
895168830941694,
false
,[
[
11,
"currentLevel"
]
, [
8,
2
]
, [
7,
[
0,
10
]
]
]
]
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.SetText,
null,
3641017931734273,
false
,[
[
7,
[
10,
[
2,
sg_texts[SG.lang]["LEVEL:"]+" 0"
]
,[
23,
"currentLevel"
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
2237060996506978,
[
[
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
620835951072649,
false
,[
[
11,
"currentLevel"
]
, [
8,
5
]
, [
7,
[
0,
10
]
]
]
]
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.SetText,
null,
8373263468762661,
false
,[
[
7,
[
10,
[
2,
sg_texts[SG.lang]["LEVEL:"]+" "
]
,[
23,
"currentLevel"
]
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
7945946285370736,
[
[
-1,
cr.system_object.prototype.cnds.EveryTick,
null,
0,
false,
false,
false,
9787994775176769,
false
]
, [
6,
cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
3919612239108379,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
]
,[
[
0,
null,
false,
null,
5024250802769209,
[
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.SetText,
null,
2073551574911833,
false
,[
[
7,
[
2,
sg_texts[SG.lang]["BEST:"]+" --"
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
5869418437837842,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
4768816212115628,
false
]
, [
6,
cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
2567624814336308,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
8778556185939904,
false
,[
[
11,
"timee"
]
, [
7,
[
0,
0
]
]
]
]
]
]
, [
0,
null,
false,
null,
6337865772441996,
[
[
-1,
cr.system_object.prototype.cnds.EveryTick,
null,
0,
false,
false,
false,
3352956746701932,
false
]
, [
6,
cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
9433860835439984,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
0
]
]
]
]
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.SetText,
null,
5727524538646942,
false
,[
[
7,
[
10,
[
2,
sg_texts[SG.lang]["TIME:"]+" "
]
,[
23,
"timee"
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
2013394728932725,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
2076824864624852,
false
,[
[
4,
4
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
5136684766415976,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
0
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
6474334872826916,
false
,[
[
1,
[
10,
[
2,
"levels"
]
,[
23,
"levelse"
]
]
]
]
]
, [
20,
cr.plugins_.Softgames.prototype.acts.gameOver,
null,
8603298156779475,
false
]
]
]
, [
0,
null,
false,
null,
860354103723071,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
8365919692349908,
false
,[
[
4,
4
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
5564045368465237,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
5741698589192267,
false
,[
[
11,
"level"
]
, [
8,
2
]
, [
7,
[
0,
45
]
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareOpacity,
null,
0,
false,
false,
false,
4439896482544589,
false
,[
[
8,
0
]
, [
0,
[
0,
100
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
8667842642591984,
false
,[
[
1,
[
10,
[
2,
"level"
]
,[
23,
"currentLevel"
]
]
]
]
]
, [
20,
cr.plugins_.Softgames.prototype.acts.levelUp,
null,
9061666706221086,
false
]
]
]
, [
0,
null,
false,
null,
9581356910996781,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
2830429852910951,
false
,[
[
4,
4
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
6245777119770819,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
179933563471751,
false
,[
[
11,
"level"
]
, [
8,
5
]
, [
7,
[
0,
45
]
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareOpacity,
null,
0,
false,
false,
false,
439860637195265,
false
,[
[
8,
0
]
, [
0,
[
0,
100
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
5427045489304109,
false
,[
[
1,
[
2,
"menu"
]
]
]
]
]
]
, [
0,
null,
false,
null,
4119976702168647,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
2570697404681795,
false
,[
[
4,
4
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
6579839735803893,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
3
]
]
]
]
],
[
[
9,
cr.plugins_.Browser.prototype.acts.GoToURLWindow,
null,
7756544790061453,
false
,[
[
1,
[
23,
"MOREGAMESURL"
]
]
, [
1,
[
2,
"6"
]
]
]
]
]
]
, [
0,
null,
false,
null,
823295715877363,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
6203737785697902,
false
,[
[
4,
10
]
]
]
],
[
[
9,
cr.plugins_.Browser.prototype.acts.GoToURLWindow,
null,
7739508632794964,
false
,[
[
1,
[
23,
"MOREGAMESURL"
]
]
, [
1,
[
2,
"5"
]
]
]
]
]
]
, [
0,
null,
false,
null,
6707660831030681,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
8240082648843446,
false
]
],
[
[
3,
cr.plugins_.Sprite.prototype.acts.SetOpacity,
null,
1219728441794125,
false
,[
[
0,
[
0,
100
]
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetActive,
"Sine",
1153872276441199,
false
,[
[
3,
0
]
]
]
]
,[
[
0,
null,
false,
null,
1327481542979748,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
8701887086012961,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.CreateObject,
null,
8685061683612648,
false
,[
[
4,
11
]
, [
5,
[
0,
0
]
]
, [
0,
[
0,
192
]
]
, [
0,
[
0,
300
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
8121912732136716,
[
[
4,
cr.plugins_.Sprite.prototype.cnds.CompareOpacity,
null,
0,
false,
false,
false,
787274713096158,
false
,[
[
8,
0
]
, [
0,
[
0,
100
]
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
3551560271420093,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
],
[
]
,[
[
0,
null,
false,
null,
7222370704869001,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
4485310602139408,
false
]
],
[
[
0,
cr.behaviors.DragnDrop.prototype.acts.SetEnabled,
"DragDrop",
8906206728892161,
false
,[
[
3,
0
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetActive,
"Sine",
1723291120410511,
false
,[
[
3,
1
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetMovement,
"Sine",
5555906476149424,
false
,[
[
3,
5
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetMagnitude,
"Sine",
4282891735253008,
false
,[
[
0,
[
0,
30
]
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetPeriod,
"Sine",
7973253417346936,
false
,[
[
0,
[
0,
1
]
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetWave,
"Sine",
3442608916300307,
false
,[
[
3,
1
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
2133581766194421,
[
[
-1,
cr.system_object.prototype.cnds.Every,
null,
0,
false,
false,
false,
5307744597568933,
false
,[
[
0,
[
1,
1
]
]
]
]
],
[
]
,[
[
0,
null,
false,
null,
7263671102735837,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
true,
false,
5472001303888893,
false
,[
[
4,
2
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet,
null,
0,
false,
false,
false,
7897702033625638,
false
,[
[
10,
2
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.AddVar,
null,
4524483396558973,
false
,[
[
11,
"timee"
]
, [
7,
[
0,
1
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
2659096521787894,
[
[
-1,
cr.system_object.prototype.cnds.CompareBetween,
null,
0,
false,
false,
false,
185379590450836,
false
,[
[
0,
[
23,
"timee"
]
]
, [
0,
[
0,
1
]
]
, [
0,
[
0,
8
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
3748829435026767,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
1510629553795406,
false
,[
[
11,
"stars"
]
, [
7,
[
0,
3
]
]
]
]
]
]
, [
0,
null,
false,
null,
8396812218463581,
[
[
-1,
cr.system_object.prototype.cnds.CompareBetween,
null,
0,
false,
false,
false,
858124192282195,
false
,[
[
0,
[
23,
"timee"
]
]
, [
0,
[
0,
9
]
]
, [
0,
[
0,
30
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
776028382215364,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
5873986245199135,
false
,[
[
11,
"stars"
]
, [
7,
[
0,
2
]
]
]
]
]
]
, [
0,
null,
false,
null,
8583809614422241,
[
[
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
1591815221990498,
false
,[
[
11,
"timee"
]
, [
8,
4
]
, [
7,
[
0,
30
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
8955159555472683,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
365134838687838,
false
,[
[
11,
"stars"
]
, [
7,
[
0,
1
]
]
]
]
]
]
, [
0,
null,
false,
null,
8459327027074263,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
6870692236913369,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
7058571155008255,
false
,[
[
11,
"stars"
]
, [
7,
[
0,
3
]
]
]
]
]
]
, [
0,
null,
false,
null,
5669201686679056,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
9270911393240867,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
1901201281087144,
false
,[
[
11,
"timee"
]
, [
7,
[
0,
0
]
]
]
]
, [
5,
cr.plugins_.Sprite.prototype.acts.SetAnimFrame,
null,
8613287620445448,
false
,[
[
0,
[
5,
[
20,
14,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
23,
"currentLevel"
]
,[
0,
0
]
]
]
,[
0,
2
]
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.SetVar,
null,
6794869556644566,
false
,[
[
11,
"level"
]
, [
7,
[
23,
"currentLevel"
]
]
]
]
]
]
, [
0,
null,
false,
null,
7270044860990173,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
3141513715614628,
false
,[
[
4,
4
]
]
]
, [
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
8082928735325954,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.RestartLayout,
null,
3324592897777375,
false
]
]
,[
[
0,
null,
false,
null,
2613803316073916,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
7586832466079552,
false
,[
[
4,
2
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet,
null,
0,
false,
false,
false,
5591896322999129,
false
,[
[
10,
2
]
]
]
],
[
]
,[
[
0,
null,
false,
null,
8747597547862667,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
8783615622411771,
false
]
],
[
[
14,
cr.plugins_.Arr.prototype.acts.SetX,
null,
5322219567528078,
false
,[
[
0,
[
23,
"currentLevel"
]
]
, [
7,
[
0,
2
]
]
]
]
, [
5,
cr.plugins_.Sprite.prototype.acts.SetAnimFrame,
null,
306530016236553,
false
,[
[
0,
[
5,
[
20,
14,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
23,
"currentLevel"
]
,[
0,
0
]
]
]
,[
0,
2
]
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.AddVar,
null,
4803374966348184,
false
,[
[
11,
"currentLevel"
]
, [
7,
[
0,
-1
]
]
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
1527319069994363,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
686881817592967,
false
]
, [
6,
cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
8086736861930893,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.Destroy,
null,
4622833749328621,
false
]
]
]
, [
0,
null,
false,
null,
1776184089140383,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
2421913765785982,
false
]
],
[
]
,[
[
0,
null,
false,
null,
7918456428498456,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
8260536546051275,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.CreateObject,
null,
1832537669237175,
false
,[
[
4,
10
]
, [
5,
[
0,
0
]
]
, [
0,
[
0,
10
]
]
, [
0,
[
0,
2
]
]
]
]
, [
11,
cr.plugins_.Sprite.prototype.acts.MoveToTop,
null,
5072759491718824,
false
]
]
]
]
]
, [
0,
null,
false,
null,
7243063696866231,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutEnd,
null,
1,
false,
false,
false,
4016981932858083,
false
]
],
[
[
18,
cr.plugins_.WebStorage.prototype.acts.StoreLocal,
null,
9949536141107374,
false
,[
[
1,
[
2,
"save"
]
]
, [
7,
[
20,
14,
cr.plugins_.Arr.prototype.exps.AsJSON,
true,
null
]
]
]
]
, [
18,
cr.plugins_.WebStorage.prototype.acts.StoreLocal,
null,
4011694167217524,
false
,[
[
1,
[
2,
"current"
]
]
, [
7,
[
23,
"currentLevel"
]
]
]
]
]
]
]
]
, [
"menu",
[
[
1,
"MOREGAMESURL",
1,
"",
false,true,2896250554953761,false
]
, [
0,
null,
false,
null,
1251697088673423,
[
[
6,
cr.plugins_.Spritefont2.prototype.cnds.OnCreated,
null,
1,
false,
false,
false,
5084325921798728,
false
]
],
[
[
7,
cr.plugins_.Arr.prototype.acts.JSONLoad,
null,
6548363612825162,
false
,[
[
1,
[
2,
"{\"c2array\":true,\"size\":[2,18,1],\"data\":[[[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[24],[26],[27]],[[\"'\"],[\";|\"],[\"Ii.,\"],[\":!-`\"],[\"()°\"],[\"l\\\"[]\"],[\"Le12_=$<>\"],[\"ERSfp357\\\\/\"],[\"BCFGJPTUZbcgjnoqstz4689?+\"],[\"DHNOQdkru0~*\"],[\"AKVYhvy£€\"],[\"ax\"],[\"MXm\"],[\"w&\"],[\"W\"],[\"%\"],[\"#\"],[\"@\"]]]}"
]
]
]
]
]
,[
[
0,
null,
false,
null,
9118653331583086,
[
[
-1,
cr.system_object.prototype.cnds.For,
null,
0,
true,
false,
false,
1339960626145382,
false
,[
[
1,
[
2,
"y"
]
]
, [
0,
[
0,
0
]
]
, [
0,
[
5,
[
20,
7,
cr.plugins_.Arr.prototype.exps.Height,
false,
null
]
,[
0,
1
]
]
]
]
]
],
[
[
6,
cr.plugins_.Spritefont2.prototype.acts.SetCharacterWidth,
null,
9438675236282495,
false
,[
[
1,
[
20,
7,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
0,
1
]
,[
19,
cr.system_object.prototype.exps.loopindex
,[
[
2,
"y"
]
]
]
]
]
]
, [
0,
[
20,
7,
cr.plugins_.Arr.prototype.exps.At,
false,
null
,[
[
0,
0
]
,[
19,
cr.system_object.prototype.exps.loopindex
,[
[
2,
"y"
]
]
]
]
]
]
]
]
, [
6,
cr.plugins_.Spritefont2.prototype.acts.SetCharacterWidth,
null,
924964173312388,
false
,[
[
1,
[
2,
" "
]
]
, [
0,
[
0,
9
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
2511199676811585,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
2872760565272272,
false
,[
[
4,
10
]
]
]
],
[
[
9,
cr.plugins_.Browser.prototype.acts.GoToURLWindow,
null,
2658644238454745,
false
,[
[
1,
[
23,
"MOREGAMESURL"
]
]
, [
1,
[
2,
"2"
]
]
]
]
]
]
, [
0,
null,
false,
null,
6099757924299238,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
449682400733062,
false
,[
[
4,
4
]
]
]
],
[
[
9,
cr.plugins_.Browser.prototype.acts.GoToURLWindow,
null,
3239769240685774,
false
,[
[
1,
[
23,
"MOREGAMESURL"
]
]
, [
1,
[
2,
"3"
]
]
]
]
]
]
, [
0,
null,
false,
null,
914126883270541,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
854479207791489,
false
,[
[
4,
2
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet,
null,
0,
false,
false,
false,
2118278908019458,
false
,[
[
10,
2
]
]
]
],
[
[
0,
cr.behaviors.DragnDrop.prototype.acts.SetEnabled,
"DragDrop",
1439172145098647,
false
,[
[
3,
0
]
]
]
, [
-1,
cr.system_object.prototype.acts.GoToLayout,
null,
8265309664288159,
false
,[
[
6,
"levels1"
]
]
]
, [
20,
cr.plugins_.Softgames.prototype.acts.startGame,
null,
3971548191852136,
false
]
]
]
, [
0,
null,
false,
null,
9764619254207175,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
3755729855361753,
false
]
],
[
[
3,
cr.plugins_.Sprite.prototype.acts.SetOpacity,
null,
4174496116366403,
false
,[
[
0,
[
0,
100
]
]
]
]
, [
4,
cr.behaviors.Sin.prototype.acts.SetActive,
"Sine",
9383284356642604,
false
,[
[
3,
0
]
]
]
]
,[
[
0,
null,
false,
null,
5973872586172212,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
9039560175824146,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.CreateObject,
null,
9938153221702163,
false
,[
[
4,
11
]
, [
5,
[
0,
0
]
]
, [
0,
[
0,
192
]
]
, [
0,
[
0,
300
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
3949071367812633,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
8154248475573044,
false
,[
[
4,
6
]
]
]
, [
6,
cr.plugins_.Spritefont2.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
5638522598572712,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
9,
cr.plugins_.Browser.prototype.acts.GoToURLWindow,
null,
4460698195027894,
false
,[
[
1,
[
23,
"MOREGAMESURL"
]
]
, [
1,
[
2,
"3"
]
]
]
]
]
]
, [
0,
null,
false,
null,
9658425284273181,
[
[
-1,
cr.system_object.prototype.cnds.EveryTick,
null,
0,
false,
false,
false,
7549973538490019,
false
]
, [
0,
cr.behaviors.DragnDrop.prototype.cnds.IsDragging,
"DragDrop",
0,
false,
true,
false,
4820634245486586,
false
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetPos,
null,
6136239160859562,
false
,[
[
0,
[
19,
cr.system_object.prototype.exps.lerp
,[
[
20,
0,
cr.plugins_.Sprite.prototype.exps.X,
false,
null
]
,[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.X,
false,
null
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
,[
1,
0.5
]
]
]
]
, [
0,
[
19,
cr.system_object.prototype.exps.lerp
,[
[
20,
0,
cr.plugins_.Sprite.prototype.exps.Y,
false,
null
]
,[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.Y,
false,
null
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
,[
1,
0.5
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
6339550090990449,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
true,
false,
5221939089369189,
false
,[
[
4,
0
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
true,
false,
4774494377501017,
false
,[
[
4,
1
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOutsideLayout,
null,
0,
false,
true,
false,
9782006399932237,
false
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
true,
false,
7813332684633102,
false
,[
[
4,
2
]
]
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetInstanceVar,
null,
1199035052368853,
false
,[
[
10,
0
]
, [
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.X,
false,
null
]
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.acts.SetInstanceVar,
null,
8691493484146503,
false
,[
[
10,
1
]
, [
7,
[
20,
0,
cr.plugins_.Sprite.prototype.exps.Y,
false,
null
]
]
]
]
]
]
, [
0,
null,
true,
null,
8059698831282791,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
2194139078029482,
false
,[
[
4,
0
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
3913671306202042,
false
,[
[
4,
1
]
]
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetPos,
null,
9027011837478171,
false
,[
[
0,
[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
21,
0,
false,
null
,0
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
]
, [
0,
[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
21,
0,
false,
null
,1
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
]
]
]
, [
0,
cr.behaviors.DragnDrop.prototype.acts.Drop,
"DragDrop",
2601976952226299,
false
]
]
]
, [
0,
null,
false,
null,
2618674750141266,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
8582798816157578,
false
,[
[
4,
2
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet,
null,
0,
false,
true,
false,
7101248170582682,
false
,[
[
10,
2
]
]
]
],
[
[
0,
cr.plugins_.Sprite.prototype.acts.SetPos,
null,
2550936150303917,
false
,[
[
0,
[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
21,
0,
false,
null
,0
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
]
, [
0,
[
6,
[
19,
cr.system_object.prototype.exps.round
,[
[
7,
[
21,
0,
false,
null
,1
]
,[
0,
64
]
]
]
]
,[
0,
64
]
]
]
]
]
, [
0,
cr.behaviors.DragnDrop.prototype.acts.Drop,
"DragDrop",
845142199252055,
false
]
]
]
, [
0,
null,
false,
null,
1001030491047468,
[
[
0,
cr.plugins_.Sprite.prototype.cnds.IsOverlapping,
null,
0,
false,
false,
false,
8616288651771235,
false
,[
[
4,
2
]
]
]
, [
0,
cr.plugins_.Sprite.prototype.cnds.IsBoolInstanceVarSet,
null,
0,
false,
false,
false,
6092563684882589,
false
,[
[
10,
2
]
]
]
],
[
[
0,
cr.behaviors.DragnDrop.prototype.acts.SetEnabled,
"DragDrop",
9313035551173551,
false
,[
[
3,
0
]
]
]
]
,[
[
0,
null,
false,
null,
8251183701446412,
[
[
4,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
7194828344062397,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
],
[
[
4,
cr.plugins_.Sprite.prototype.acts.SetOpacity,
null,
6517280348638264,
false
,[
[
0,
[
0,
100
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
6180366919094877,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
8388059351280355,
false
]
, [
18,
cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists,
null,
0,
false,
false,
false,
9283664198726753,
false
,[
[
1,
[
2,
"save"
]
]
]
]
],
[
[
14,
cr.plugins_.Arr.prototype.acts.JSONLoad,
null,
6241275822013352,
false
,[
[
1,
[
20,
18,
cr.plugins_.WebStorage.prototype.exps.LocalValue,
true,
null
,[
[
2,
"save"
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
7263361067723026,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
2542281302873987,
false
]
, [
18,
cr.plugins_.WebStorage.prototype.cnds.LocalStorageExists,
null,
0,
false,
false,
false,
7138883073161695,
false
,[
[
1,
[
2,
"current"
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.SetVar,
null,
1460857649450276,
false
,[
[
11,
"currentLevel"
]
, [
7,
[
20,
18,
cr.plugins_.WebStorage.prototype.exps.LocalValue,
true,
null
,[
[
2,
"current"
]
]
]
]
]
]
]
]
]
]
, [
"levelselect",
[
[
1,
"currentLevel",
0,
1,
false,false,9235434867904713,false
]
, [
1,
"levelse",
0,
1,
false,false,4579651540712585,false
]
, [
2,
"menu",
false
]
, [
0,
null,
false,
null,
7299227024563434,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
8893683712062349,
false
,[
[
4,
13
]
]
]
, [
13,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
3935572887466489,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
0
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
1250101509118359,
false
,[
[
11,
"levelse"
]
, [
8,
4
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.SubVar,
null,
2311131798972676,
false
,[
[
11,
"levelse"
]
, [
7,
[
0,
1
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
4221665380804587,
false
,[
[
1,
[
10,
[
2,
"levels"
]
,[
23,
"levelse"
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
5513817968728792,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
7952914812119548,
false
,[
[
4,
13
]
]
]
, [
13,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
8302450242556346,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
0
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
3297340706690954,
false
,[
[
11,
"levelse"
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
238928429085581,
false
,[
[
1,
[
2,
"menu"
]
]
]
]
]
]
, [
0,
null,
false,
null,
7637441374251919,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
5899606795958233,
false
,[
[
4,
13
]
]
]
, [
13,
cr.plugins_.Sprite.prototype.cnds.CompareInstanceVar,
null,
0,
false,
false,
false,
5152791517955322,
false
,[
[
10,
0
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
, [
-1,
cr.system_object.prototype.cnds.CompareVar,
null,
0,
false,
false,
false,
7765357554451001,
false
,[
[
11,
"levelse"
]
, [
8,
2
]
, [
7,
[
0,
11
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.AddVar,
null,
4316488144244032,
false
,[
[
11,
"levelse"
]
, [
7,
[
0,
1
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
7631595429375934,
false
,[
[
1,
[
10,
[
2,
"levels"
]
,[
23,
"levelse"
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
4902046580753422,
[
[
12,
cr.plugins_.Sprite.prototype.cnds.CompareFrame,
null,
0,
false,
false,
false,
7522646479640305,
false
,[
[
8,
0
]
, [
0,
[
0,
1
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.MoveToTop,
null,
2571955871028147,
false
]
, [
11,
cr.plugins_.Sprite.prototype.acts.MoveToTop,
null,
4976674943068493,
false
]
]
]
, [
0,
null,
false,
null,
309085286166799,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
988282266748056,
false
]
],
[
]
,[
[
0,
null,
false,
null,
1032026139240119,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
9762170370544777,
false
,[
[
0,
[
23,
"currentLevel"
]
]
, [
8,
0
]
, [
7,
[
0,
0
]
]
]
]
],
[
[
14,
cr.plugins_.Arr.prototype.acts.SetX,
null,
100076977271996,
false
,[
[
0,
[
23,
"currentLevel"
]
]
, [
7,
[
0,
2
]
]
]
]
]
]
, [
0,
null,
false,
null,
2179640444031156,
[
[
-1,
cr.system_object.prototype.cnds.ForEach,
null,
0,
true,
false,
false,
6499794766885315,
false
,[
[
4,
12
]
]
]
],
[
]
,[
[
0,
null,
false,
null,
8559947353176489,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
1618036470640494,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
0
]
, [
7,
[
0,
0
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.SetAnimFrame,
null,
2987071436818113,
false
,[
[
0,
[
0,
1
]
]
]
]
]
]
, [
0,
null,
false,
null,
8351226443659134,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
5633018969455614,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.SetAnimFrame,
null,
5340654629347036,
false
,[
[
0,
[
0,
0
]
]
]
]
]
]
, [
0,
null,
false,
null,
9652251878730896,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
3047496447637519,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
0
]
, [
7,
[
0,
2
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.SetAnimFrame,
null,
705788475423426,
false
,[
[
0,
[
0,
2
]
]
]
]
]
]
, [
0,
null,
false,
null,
9510315228106781,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
9617154910709708,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
0
]
, [
7,
[
0,
3
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.SetAnim,
null,
7856424008316315,
false
,[
[
1,
[
2,
"1star"
]
]
, [
3,
1
]
]
]
]
]
, [
0,
null,
false,
null,
9421378039809894,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
6879846151875378,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
0
]
, [
7,
[
0,
4
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.SetAnim,
null,
5457807214141602,
false
,[
[
1,
[
2,
"2star"
]
]
, [
3,
1
]
]
]
]
]
, [
0,
null,
false,
null,
9063556420913564,
[
[
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
4146437212286112,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
0
]
, [
7,
[
0,
5
]
]
]
]
],
[
[
12,
cr.plugins_.Sprite.prototype.acts.SetAnim,
null,
7329889470218405,
false
,[
[
1,
[
2,
"3star"
]
]
, [
3,
1
]
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
2135875472858412,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchObject,
null,
1,
false,
false,
false,
7843660074916645,
false
,[
[
4,
12
]
]
]
, [
14,
cr.plugins_.Arr.prototype.cnds.CompareX,
null,
0,
false,
false,
false,
9119878541977444,
false
,[
[
0,
[
21,
12,
false,
null
,0
]
]
, [
8,
4
]
, [
7,
[
0,
0
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayoutByName,
null,
2619277216613189,
false
,[
[
1,
[
10,
[
2,
"level"
]
,[
21,
12,
false,
null
,0
]
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.SetVar,
null,
5162401627640953,
false
,[
[
11,
"currentLevel"
]
, [
7,
[
21,
12,
false,
null
,0
]
]
]
]
]
]
]
]
, [
"Splash",
[
[
0,
null,
false,
null,
8128097849164676,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
9140242570125596,
false
]
],
[
]
,[
[
0,
null,
false,
null,
3425475073615747,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
3786616603548873,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.CreateObject,
null,
4784064840406439,
false
,[
[
4,
11
]
, [
5,
[
0,
0
]
]
, [
0,
[
0,
192
]
]
, [
0,
[
0,
300
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.Wait,
null,
1887515411466389,
false
,[
[
0,
[
0,
2
]
]
]
]
, [
-1,
cr.system_object.prototype.acts.GoToLayout,
null,
4171811604452128,
false
,[
[
6,
"menu"
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
254243853346505,
[
[
8,
cr.plugins_.Touch.prototype.cnds.OnTouchStart,
null,
1,
false,
false,
false,
3851515598960084,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayout,
null,
5768863553506361,
false
,[
[
6,
"menu"
]
]
]
]
]
]
]
, [
"Loading",
[
[
0,
null,
false,
null,
9758285068318356,
[
[
-1,
cr.system_object.prototype.cnds.OnLayoutStart,
null,
1,
false,
false,
false,
9126960228785638,
false
]
],
[
]
,[
[
0,
null,
false,
null,
2059170374988399,
[
[
-1,
cr.system_object.prototype.cnds.TriggerOnce,
null,
0,
false,
false,
false,
1721234934427994,
false
]
],
[
[
-1,
cr.system_object.prototype.acts.CreateObject,
null,
5215254738137696,
false
,[
[
4,
11
]
, [
5,
[
0,
0
]
]
, [
0,
[
0,
192
]
]
, [
0,
[
0,
300
]
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
6862054964407212,
[
[
-1,
cr.system_object.prototype.cnds.EveryTick,
null,
0,
false,
false,
false,
6046639193673458,
false
]
],
[
[
15,
cr.plugins_.TiledBg.prototype.acts.SetWidth,
null,
4958959897573603,
false
,[
[
0,
[
6,
[
19,
cr.system_object.prototype.exps.loadingprogress
]
,[
19,
cr.system_object.prototype.exps.layoutwidth
]
]
]
]
]
]
]
, [
0,
null,
false,
null,
6664285362601632,
[
[
-1,
cr.system_object.prototype.cnds.Compare,
null,
0,
false,
false,
false,
8808189076581826,
false
,[
[
7,
[
19,
cr.system_object.prototype.exps.loadingprogress
]
]
, [
8,
0
]
, [
7,
[
0,
1
]
]
]
]
],
[
[
-1,
cr.system_object.prototype.acts.GoToLayout,
null,
6864498588123869,
false
,[
[
6,
"Splash"
]
]
]
]
]
]
]
],
"media/",
false,
384,
600,
4,
true,
true,
true,
"1.0.0.0",
true,
true,
3,
1,
1329,
false,
true,
[
]
];};