Combined Code
movieClip 4 energyBar {
frame 1 {
function show(value, maxValue) {
_visible = true;
var v1 = Math.round(value * 20 / maxValue);
if (v1 == 0) {
v1 = 1;
}
gotoAndStop(v1);
}
function hide() {
_visible = false;
}
stop();
}
}
frame 1 {
com.novelgames.flashgames.commonAS2.MainDevelopment.initialize(this);
mochi.as2.MochiAd.showPreGameAd({'id': '2ba35bb4862aefa1', 'res': '360x640'});
mochi.as2.MochiServices.connect('2ba35bb4862aefa1');
}
movieClip 6 {
}
movieClip 120 __Packages.mochi.as2.MochiAd {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiAd) {
var v1 = function () {};
mochi.as2.MochiAd = v1;
var v2 = v1.prototype;
v1.getVersion = function () {
return mochi.as2.MochiServices.getVersion();
};
v1.showPreGameAd = function (options) {
var v27 = {'clip': _root, 'ad_timeout': 3000, 'fadeout_time': 250, 'regpt': 'o', 'method': 'showPreloaderAd', 'color': 16747008, 'background': 16777161, 'outline': 13994812, 'no_progress_bar': false, 'ad_started': function () {
this.clip.stop();
}, 'ad_finished': function () {
this.clip.play();
}, 'ad_failed': function () {
trace('[MochiAd] Couldn\'t load an ad, make sure that your game\'s local security sandbox is configured for Access Network Only and that you are not using ad blocking software');
}, 'ad_loaded': function (width, height) {}, 'ad_skipped': function () {}, 'ad_progress': function (percent) {}};
options = mochi.as2.MochiAd._parseOptions(options, v27);
if ('c862232051e0a94e1c3609b3916ddb17'.substr(0) == 'dfeada81ac97cde83665f81c12da7def') {
options.ad_started();
options.ad_finished();
return undefined;
}
var clip = options.clip;
var v24 = 11000;
var v19 = options.ad_timeout;
if (options.skip) {
v19 = 0;
}
delete options.ad_timeout;
var fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!mochi.as2.MochiAd.load(options)) {
options.ad_failed();
options.ad_finished();
return undefined;
}
options.ad_started();
var mc = clip._mochiad;
mc.onUnload = function () {
options.ad_finished();
};
var v15 = mochi.as2.MochiAd._getRes(options);
var v5 = v15[0];
var v14 = v15[1];
mc._x = v5 * 0.5;
mc._y = v14 * 0.5;
var chk = mc.createEmptyMovieClip('_mochiad_wait', 3);
chk._x = v5 * -0.5;
chk._y = v14 * -0.5;
var v7 = chk.createEmptyMovieClip('_mochiad_bar', 4);
if (options.no_progress_bar) {
v7._visible = false;
delete options.no_progress_bar;
} else {
v7._x = 10;
v7._y = v14 - 20;
}
var v23 = options.color;
delete options.color;
var v21 = options.background;
delete options.background;
var v25 = options.outline;
delete options.outline;
var v6 = v7.createEmptyMovieClip('_outline', 1);
v6.beginFill(v21);
v6.moveTo(0, 0);
v6.lineTo(v5 - 20, 0);
v6.lineTo(v5 - 20, 10);
v6.lineTo(0, 10);
v6.lineTo(0, 0);
v6.endFill();
var v4 = v7.createEmptyMovieClip('_inside', 2);
v4.beginFill(v23);
v4.moveTo(0, 0);
v4.lineTo(v5 - 20, 0);
v4.lineTo(v5 - 20, 10);
v4.lineTo(0, 10);
v4.lineTo(0, 0);
v4.endFill();
v4._xscale = 0;
var v8 = v7.createEmptyMovieClip('_outline', 3);
v8.lineStyle(0, v25, 100);
v8.moveTo(0, 0);
v8.lineTo(v5 - 20, 0);
v8.lineTo(v5 - 20, 10);
v8.lineTo(0, 10);
v8.lineTo(0, 0);
chk.ad_msec = v24;
chk.ad_timeout = v19;
chk.started = getTimer();
chk.showing = false;
chk.last_pcnt = 0;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function () {
var v2 = 100 * (1 - (getTimer() - this.fadeout_start) / this.fadeout_time);
if (v2 > 0) {
this._parent._alpha = v2;
} else {
var v3 = this._parent._parent;
mochi.as2.MochiAd.unload(v3);
delete this.onEnterFrame;
}
};
var sendHostProgress = false;
mc.lc.sendHostLoadProgress = function (lc_name) {
sendHostProgress = true;
};
mc.lc.adLoaded = options.ad_loaded;
mc.lc.adSkipped = options.ad_skipped;
mc.lc.adjustProgress = function (msec) {
var v2 = this.mc._mochiad_wait;
v2.server_control = true;
v2.started = getTimer();
v2.ad_msec = msec;
};
mc.lc.rpc = function (callbackID, arg) {
mochi.as2.MochiAd.rpc(clip, callbackID, arg);
};
mc.rpcTestFn = function (s) {
trace('[MOCHIAD rpcTestFn] ' + s);
return s;
};
chk.onEnterFrame = function () {
var v10 = this._parent._parent;
var v3 = v10;
for (;;) {
if (!(!v3.getBytesTotal() && v3)) break;
v3 = v3._parent;
}
if (!v3) {
v3 = _root;
}
var v13 = this._parent._mochiad_ctr;
var v7 = getTimer() - this.started;
var v5 = false;
var v6 = v3.getBytesTotal();
var v9 = v3.getBytesLoaded();
var v4 = 100 * v9 / v6;
var v12 = 100 * v7 / chk.ad_msec;
var v11 = this._mochiad_bar._inside;
var v15 = Math.min(100, Math.min(v4 || 0, v12));
v15 = Math.max(this.last_pcnt, v15);
this.last_pcnt = v15;
v11._xscale = v15;
options.ad_progress(v15);
if (sendHostProgress) {
mochi.as2.MochiAd.containerNotify(clip, {'id': 'hostLoadPcnt', 'pcnt': v4}, clip._mochiad._containerLCName);
if (v4 == 100) {
sendHostProgress = false;
}
}
if (!chk.showing) {
var v8 = v13.getBytesTotal();
if (v8 > 0 || typeof v8 == 'undefined') {
chk.showing = true;
chk.started = getTimer();
} else {
if (v7 > chk.ad_timeout && v4 == 100) {
options.ad_failed();
v5 = true;
}
}
}
if (v7 > chk.ad_msec) {
v5 = true;
}
if (v6 > 0 && v9 >= v6 && v5) {
if (this.server_control) {
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = chk.fadeFunction;
}
}
};
};
v1.showClickAwayAd = function (options) {
var v10 = {'clip': _root, 'ad_timeout': 2000, 'fadeout_time': 250, 'regpt': 'o', 'method': 'showClickAwayAd', 'res': '300x250', 'no_bg': true, 'ad_started': function () {}, 'ad_finished': function () {}, 'ad_loaded': function (width, height) {}, 'ad_failed': function () {
trace('[MochiAd] Couldn\'t load an ad, make sure that your game\'s local security sandbox is configured for Access Network Only and that you are not using ad blocking software');
}, 'ad_skipped': function () {}};
options = mochi.as2.MochiAd._parseOptions(options, v10);
var clip = options.clip;
var v9 = options.ad_timeout;
delete options.ad_timeout;
if (!mochi.as2.MochiAd.load(options)) {
options.ad_failed();
options.ad_finished();
return undefined;
}
options.ad_started();
var v3 = clip._mochiad;
v3.onUnload = function () {
options.ad_finished();
};
var v5 = mochi.as2.MochiAd._getRes(options);
var v11 = v5[0];
var v8 = v5[1];
v3._x = v11 * 0.5;
v3._y = v8 * 0.5;
var chk = v3.createEmptyMovieClip('_mochiad_wait', 3);
chk.ad_timeout = v9;
chk.started = getTimer();
chk.showing = false;
v3.lc.adLoaded = options.ad_loaded;
v3.lc.adSkipped = options.ad_skipped;
v3.lc.rpc = function (callbackID, arg) {
mochi.as2.MochiAd.rpc(clip, callbackID, arg);
};
v3.rpcTestFn = function (s) {
trace('[MOCHIAD rpcTestFn] ' + s);
return s;
};
var v21 = false;
chk.onEnterFrame = function () {
var v5 = this._parent._mochiad_ctr;
var v4 = getTimer() - this.started;
var v2 = false;
if (!chk.showing) {
var v3 = v5.getBytesTotal();
if (v3 > 0 || typeof v3 == 'undefined') {
v2 = true;
chk.showing = true;
chk.started = getTimer();
} else {
if (v4 > chk.ad_timeout) {
options.ad_failed();
v2 = true;
}
}
}
if (v2) {
delete this.onEnterFrame;
}
};
};
v1.showInterLevelAd = function (options) {
var v13 = {'clip': _root, 'ad_timeout': 2000, 'fadeout_time': 250, 'regpt': 'o', 'method': 'showTimedAd', 'ad_started': function () {
this.clip.stop();
}, 'ad_finished': function () {
this.clip.play();
}, 'ad_failed': function () {
trace('[MochiAd] Couldn\'t load an ad, make sure that your game\'s local security sandbox is configured for Access Network Only and that you are not using ad blocking software');
}, 'ad_loaded': function (width, height) {}, 'ad_skipped': function () {}};
options = mochi.as2.MochiAd._parseOptions(options, v13);
var clip = options.clip;
var v10 = 11000;
var v12 = options.ad_timeout;
delete options.ad_timeout;
var fadeout_time = options.fadeout_time;
delete options.fadeout_time;
if (!mochi.as2.MochiAd.load(options)) {
options.ad_failed();
options.ad_finished();
return undefined;
}
options.ad_started();
var mc = clip._mochiad;
mc.onUnload = function () {
options.ad_finished();
};
var v5 = mochi.as2.MochiAd._getRes(options);
var v14 = v5[0];
var v11 = v5[1];
mc._x = v14 * 0.5;
mc._y = v11 * 0.5;
var chk = mc.createEmptyMovieClip('_mochiad_wait', 3);
chk.ad_msec = v10;
chk.ad_timeout = v12;
chk.started = getTimer();
chk.showing = false;
chk.fadeout_time = fadeout_time;
chk.fadeFunction = function () {
var v2 = 100 * (1 - (getTimer() - this.fadeout_start) / this.fadeout_time);
if (v2 > 0) {
this._parent._alpha = v2;
} else {
var v3 = this._parent._parent;
mochi.as2.MochiAd.unload(v3);
delete this.onEnterFrame;
}
};
mc.lc.adLoaded = options.ad_loaded;
mc.lc.adSkipped = options.ad_skipped;
mc.lc.adjustProgress = function (msec) {
var v2 = this.mc._mochiad_wait;
v2.server_control = true;
v2.started = getTimer();
v2.ad_msec = msec - 250;
};
mc.lc.rpc = function (callbackID, arg) {
mochi.as2.MochiAd.rpc(clip, callbackID, arg);
};
mc.rpcTestFn = function (s) {
trace('[MOCHIAD rpcTestFn] ' + s);
return s;
};
chk.onEnterFrame = function () {
var v5 = this._parent._mochiad_ctr;
var v4 = getTimer() - this.started;
var v2 = false;
if (!chk.showing) {
var v3 = v5.getBytesTotal();
if (v3 > 0 || typeof v3 == 'undefined') {
chk.showing = true;
chk.started = getTimer();
} else {
if (v4 > chk.ad_timeout) {
options.ad_failed();
v2 = true;
}
}
}
if (v4 > chk.ad_msec) {
v2 = true;
}
if (v2) {
if (this.server_control) {
delete this.onEnterFrame;
} else {
this.fadeout_start = getTimer();
this.onEnterFrame = this.fadeFunction;
}
}
};
};
v1.showPreloaderAd = function (options) {
trace('[MochiAd] DEPRECATED: showPreloaderAd was renamed to showPreGameAd in 2.0');
mochi.as2.MochiAd.showPreGameAd(options);
};
v1.showTimedAd = function (options) {
trace('[MochiAd] DEPRECATED: showTimedAd was renamed to showInterLevelAd in 2.0');
mochi.as2.MochiAd.showInterLevelAd(options);
};
v1._allowDomains = function (server) {
var v1 = ((server.split('/'))[2].split(':'))[0];
if (System.security) {
if (System.security.allowDomain) {
System.security.allowDomain('*');
System.security.allowDomain(v1);
}
if (System.security.allowInsecureDomain) {
System.security.allowInsecureDomain('*');
System.security.allowInsecureDomain(v1);
}
}
return v1;
};
v1.load = function (options) {
var v12 = {'clip': _root, 'server': 'http://x.mochiads.com/srv/1/', 'method': 'load', 'depth': 10333, 'id': '_UNKNOWN_'};
options = mochi.as2.MochiAd._parseOptions(options, v12);
options.swfv = options.clip.getSWFVersion() || 6;
options.mav = mochi.as2.MochiAd.getVersion();
var v6 = options.clip;
if (!mochi.as2.MochiAd._isNetworkAvailable()) {
return null;
}
if (v6._mochiad_loaded) {
return null;
}
var v11 = options.depth;
delete options.depth;
var mc = v6.createEmptyMovieClip('_mochiad', v11);
var v10 = mochi.as2.MochiAd._getRes(options);
options.res = v10[0] + 'x' + v10[1];
options.server += options.id;
delete options.id;
v6._mochiad_loaded = true;
if (v6._url.indexOf('http') != 0) {
trace('[MochiAd] NOTE: Security Sandbox Violation errors below are normal');
}
var v4 = mc.createEmptyMovieClip('_mochiad_ctr', 1);
for (var v7 in options) {
v4[v7] = options[v7];
}
var v9 = v4.server;
delete v4.server;
var v13 = mochi.as2.MochiAd._allowDomains(v9);
mc.onEnterFrame = function () {
if (this._mochiad_ctr._url != this._url) {
this.onEnterFrame = function () {
if (!this._mochiad_ctr) {
delete this.onEnterFrame;
mochi.as2.MochiAd.unload(this._parent);
}
};
}
};
var v5 = new Object();
var v8 = ['', Math.floor((new Date()).getTime()), random(999999)].join('_');
v5.mc = mc;
v5.name = v8;
v5.hostname = v13;
v5.allowDomain = function (d) {
return true;
};
v5.allowInsecureDomain = v5.allowDomain;
v5.connect(v8);
mc.lc = v5;
mc.lc.regContLC = function (lc_name) {
mc._containerLCName = lc_name;
};
v4.lc = v8;
v4.st = getTimer();
if (!options.skip) {
v4.loadMovie(v9 + '.swf', 'POST');
}
return mc;
};
v1.unload = function (clip) {
if (typeof clip == 'undefined') {
clip = _root;
}
if (clip.clip && clip.clip._mochiad) {
clip = clip.clip;
}
if (!clip._mochiad) {
return false;
}
mochi.as2.MochiAd.containerNotify(clip, {'id': 'unload'}, clip._mochiad._containerLCName);
clip._mochiad.removeMovieClip();
delete clip._mochiad_loaded;
delete clip._mochiad;
return true;
};
v1._isNetworkAvailable = function () {
if (System.security) {
var v1 = System.security;
if (v1.sandboxType == 'localWithFile') {
return false;
}
}
return true;
};
v1._getRes = function (options) {
var v3 = options.clip.getBounds();
var v2 = 0;
var v1 = 0;
if (typeof options.res != 'undefined') {
var v4 = options.res.split('x');
v2 = parseFloat(v4[0]);
v1 = parseFloat(v4[1]);
} else {
v2 = v3.xMax - v3.xMin;
v1 = v3.yMax - v3.yMin;
}
if (v2 == 0 || v1 == 0) {
v2 = Stage.width;
v1 = Stage.height;
}
return [v2, v1];
};
v1._parseOptions = function (options, defaults) {
var v4 = {};
for (var v8 in defaults) {
v4[v8] = defaults[v8];
}
if (options) {
for (v8 in options) {
v4[v8] = options[v8];
}
}
if (_root.mochiad_options) {
var v5 = _root.mochiad_options.split('&');
var v2 = 0;
while (v2 < v5.length) {
var v3 = v5[v2].split('=');
v4[unescape(v3[0])] = unescape(v3[1]);
++v2;
}
}
if (v4.id == 'test') {
trace('[MochiAd] WARNING: Using the MochiAds test identifier, make sure to use the code from your dashboard, not this example!');
}
return v4;
};
v1.rpc = function (clip, callbackID, arg) {
switch (arg.id) {
case 'setValue':
mochi.as2.MochiAd.setValue(clip, arg.objectName, arg.value);
break;
case 'getValue':
var v4 = mochi.as2.MochiAd.getValue(clip, arg.objectName);
mochi.as2.MochiAd.containerRpcResult(clip, callbackID, v4, clip._mochiad._containerLCName);
break;
case 'runMethod':
var v3 = mochi.as2.MochiAd.runMethod(clip, arg.method, arg.args);
mochi.as2.MochiAd.containerRpcResult(clip, callbackID, v3, clip._mochiad._containerLCName);
break;
default:
trace('[mochiads rpc] unknown rpc id: ' + arg.id);
}
};
v1.setValue = function (base, objectName, value) {
var v2 = objectName.split('.');
var v1;
v1 = 0;
while (v1 < v2.length - 1) {
if (base[v2[v1]] == undefined || base[v2[v1]] == null) {
return undefined;
}
base = base[v2[v1]];
++v1;
}
base[v2[v1]] = value;
};
v1.getValue = function (base, objectName) {
var v2 = objectName.split('.');
var v1;
v1 = 0;
while (v1 < v2.length - 1) {
if (base[v2[v1]] == undefined || base[v2[v1]] == null) {
return undefined;
}
base = base[v2[v1]];
++v1;
}
return base[v2[v1]];
};
v1.runMethod = function (base, methodName, argsArray) {
var v2 = methodName.split('.');
var v1;
v1 = 0;
while (v1 < v2.length - 1) {
if (base[v2[v1]] == undefined || base[v2[v1]] == null) {
return undefined;
}
base = base[v2[v1]];
++v1;
}
if (typeof base[v2[v1]] == 'function') {
return base[v2[v1]].apply(base, argsArray);
} else {
return undefined;
}
};
v1.containerNotify = function (clip, args, lcName) {
var v1 = clip._mochiad._mochiad_ctr.ad.app;
if (v1.notify) {
v1.notify(args);
} else {
(new LocalConnection()).send(lcName, 'notify', args);
}
};
v1.containerRpcResult = function (clip, callbackID, val, lcName) {
var v1 = clip._mochiad._mochiad_ctr.ad.app;
if (v1.rpcResult) {
v1.rpcResult(callbackID, val);
} else {
(new LocalConnection()).send(lcName, 'rpcResult', callbackID, val);
}
};
ASSetPropFlags(mochi.as2.MochiAd.prototype, null, 1);
}
#endinitclip
}
movieClip 121 __Packages.mochi.as2.MochiEventDispatcher {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiEventDispatcher) {
var v1 = function () {
this.eventTable = {};
};
mochi.as2.MochiEventDispatcher = v1;
var v2 = v1.prototype;
v2.buildDelegate = function (thisObject, thatObject) {
var v2 = {'thisObject': thisObject, 'thatObject': thatObject};
if (thatObject != undefined) {
var funct = (typeof thatObject == 'string') ? thisObject[thatObject] : thatObject;
v2.delegate = function (args) {
funct.call(thisObject, args);
};
return v2;
}
v2.delegate = thisObject;
return v2;
};
v2.compareDelegate = function (d_A, d_B) {
if (d_A.thisObject != d_B.thisObject || d_A.thatObject != d_B.thatObject) {
return false;
}
return true;
};
v2.addEventListener = function (event, thisObject, thatObject) {
this.removeEventListener(event, thisObject, thatObject);
this.eventTable[event].push(this.buildDelegate(thisObject, thatObject));
};
v2.removeEventListener = function (event, thisObject, thatObject) {
var v3 = this.buildDelegate(thisObject, thatObject);
if (this.eventTable[event] == undefined) {
this.eventTable[event] = [];
return undefined;
}
for (var v4 in this.eventTable[event]) {
if (!this.compareDelegate(this.eventTable[event][v4], v3)) {
continue;
}
this.eventTable[event].splice(Number(v4), 1);
}
};
v2.triggerEvent = function (event, args) {
if (this.eventTable[event] == undefined) {
return undefined;
}
for (var v4 in this.eventTable[event]) {
this.eventTable[event][v4].delegate(args);
}
};
ASSetPropFlags(mochi.as2.MochiEventDispatcher.prototype, null, 1);
}
#endinitclip
}
movieClip 122 __Packages.mochi.as2.MochiServices {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiServices) {
var v1 = function () {};
mochi.as2.MochiServices = v1;
var v2 = v1.prototype;
v1.__get__id = function () {
return mochi.as2.MochiServices._id;
};
v1.__get__clip = function () {
return mochi.as2.MochiServices._container;
};
v1.__get__childClip = function () {
return mochi.as2.MochiServices._clip;
};
v1.getVersion = function () {
return '3.9.1 as2';
};
v1.allowDomains = function (server) {
var v1 = ((server.split('/'))[2].split(':'))[0];
if (System.security) {
if (System.security.allowDomain) {
System.security.allowDomain('*');
System.security.allowDomain(v1);
}
if (System.security.allowInsecureDomain) {
System.security.allowInsecureDomain('*');
System.security.allowInsecureDomain(v1);
}
}
return v1;
};
v1.__get__isNetworkAvailable = function () {
if (System.security) {
var v1 = System.security;
if (v1.sandboxType == 'localWithFile') {
return false;
}
}
return true;
};
v1.__set__comChannelName = function (val) {
if (val != undefined) {
if (val.length > 3) {
mochi.as2.MochiServices._sendChannelName = val + '_fromgame';
mochi.as2.MochiServices.initComChannels();
}
}
return mochi.as2.MochiServices.__get__comChannelName();
};
v1.__get__connected = function () {
return mochi.as2.MochiServices._connected;
};
v1.connect = function (id, clip, onError) {
mochi.as2.MochiServices.warnID(id, false);
if (!mochi.as2.MochiServices._connected && mochi.as2.MochiServices._clip == undefined) {
trace('MochiServices Connecting...');
mochi.as2.MochiServices._connecting = true;
mochi.as2.MochiServices.init(id, clip);
}
if (onError != undefined) {
mochi.as2.MochiServices.onError = onError;
} else {
if (mochi.as2.MochiServices.onError == undefined) {
mochi.as2.MochiServices.onError = function (errorCode) {
trace(errorCode);
};
}
}
};
v1.disconnect = function () {
if (mochi.as2.MochiServices._connected || mochi.as2.MochiServices._connecting) {
mochi.as2.MochiServices._connected = false;
mochi.as2.MochiServices._connecting = mochi.as2.MochiServices._connected;
mochi.as2.MochiServices.flush(true);
if (mochi.as2.MochiServices._clip != undefined) {
mochi.as2.MochiServices._clip.removeMovieClip();
delete mochi.as2.MochiServices._clip;
}
mochi.as2.MochiServices._listenChannel.close();
}
};
v1.init = function (id, clip) {
mochi.as2.MochiServices._id = id;
if (clip != undefined) {
mochi.as2.MochiServices._container = clip;
} else {
mochi.as2.MochiServices._container = _root;
}
mochi.as2.MochiServices.loadCommunicator(id, mochi.as2.MochiServices._container);
};
v1.loadCommunicator = function (id, clip) {
var v6 = '_mochiservices_com_' + id;
var v5 = new MovieClipLoader();
var v3 = {};
if (mochi.as2.MochiServices._clip != null) {
return mochi.as2.MochiServices._clip;
}
if (!mochi.as2.MochiServices.__get__isNetworkAvailable()) {
return null;
}
if ((mochi.as2.MochiServices.urlOptions()).servURL) {
mochi.as2.MochiServices._servURL = (mochi.as2.MochiServices.urlOptions()).servURL;
}
var v4 = mochi.as2.MochiServices._servURL + mochi.as2.MochiServices._services;
if ((mochi.as2.MochiServices.urlOptions()).servicesURL) {
v4 = (mochi.as2.MochiServices.urlOptions()).servicesURL;
}
mochi.as2.MochiServices.allowDomains(v4);
mochi.as2.MochiServices._clip = clip.createEmptyMovieClip(v6, 10336, false);
mochi.as2.MochiServices._listenChannelName += Math.floor((new Date()).getTime()) + '_' + Math.floor(Math.random() * 99999);
mochi.as2.MochiServices.listen();
if (v3.waitInterval != null) {
clearInterval(v3.waitInterval);
}
v3.onLoadError = mochi.as2.MochiServices.loadError;
v3.onLoadStart = function (target_mc) {
this.isLoading = true;
};
v3.onLoadComplete = function (target_mc) {
target_mc.MochiServices = mochi.as2.MochiServices;
};
v3.startTime = getTimer();
v3.wait = function () {
if (getTimer() - this.startTime > 10000) {
if (!this.isLoading) {
mochi.as2.MochiServices.disconnect();
mochi.as2.MochiServices.onError.apply(null, ['IOError']);
}
clearInterval(this.waitInterval);
}
};
v3.waitInterval = setInterval(v3, 'wait', 1000);
v5.addListener(v3);
v5.loadClip(v4 + '?listenLC=' + mochi.as2.MochiServices._listenChannelName + '&mochiad_options=' + escape(_root.mochiad_options) + '&api_version=' + mochi.as2.MochiServices.getVersion(), mochi.as2.MochiServices._clip);
mochi.as2.MochiServices._sendChannel = new LocalConnection();
mochi.as2.MochiServices._sendChannel._queue = [];
return mochi.as2.MochiServices._clip;
};
v1.loadError = function (target_mc, errorCode, httpStatus) {
trace('MochiServices could not load.');
mochi.as2.MochiServices.disconnect();
mochi.as2.MochiServices.onError.apply(null, [errorCode]);
};
v1.onStatus = function (infoObject) {
if (infoObject.level !== 'error') {
} else {
mochi.as2.MochiServices._connected = false;
mochi.as2.MochiServices._listenChannel.connect(mochi.as2.MochiServices._listenChannelName);
}
};
v1.listen = function () {
mochi.as2.MochiServices._listenChannel = new LocalConnection();
mochi.as2.MochiServices._listenChannel.handshake = function (args) {
mochi.as2.MochiServices.__set__comChannelName(args.newChannel);
};
mochi.as2.MochiServices._listenChannel.allowDomain = function (d) {
return true;
};
mochi.as2.MochiServices._listenChannel.allowInsecureDomain = mochi.as2.MochiServices._listenChannel.allowDomain;
mochi.as2.MochiServices._listenChannel._nextcallbackID = 0;
mochi.as2.MochiServices._listenChannel._callbacks = {};
mochi.as2.MochiServices._listenChannel.connect(mochi.as2.MochiServices._listenChannelName);
trace('Waiting for MochiAds services to connect...');
};
v1.initComChannels = function () {
if (!mochi.as2.MochiServices._connected) {
mochi.as2.MochiServices._sendChannel.onStatus = function (infoObject) {
mochi.as2.MochiServices.onStatus(infoObject);
};
mochi.as2.MochiServices._sendChannel.send(mochi.as2.MochiServices._sendChannelName, 'onReceive', {'methodName': 'handshakeDone'});
mochi.as2.MochiServices._sendChannel.send(mochi.as2.MochiServices._sendChannelName, 'onReceive', {'methodName': 'registerGame', 'id': mochi.as2.MochiServices._id, 'version': mochi.as2.MochiServices.getVersion()});
mochi.as2.MochiServices._listenChannel.onStatus = function (infoObject) {
mochi.as2.MochiServices.onStatus(infoObject);
};
mochi.as2.MochiServices._listenChannel.onReceive = function (pkg) {
var v5 = pkg.callbackID;
var v4 = this._callbacks[v5];
if (!v4) {
return undefined;
}
var v2 = v4.callbackMethod;
var v3 = v4.callbackObject;
if (v3 && typeof v2 == 'string') {
v2 = v3[v2];
}
if (v2 != undefined) {
v2.apply(v3, pkg.args);
}
delete this._callbacks[v5];
};
mochi.as2.MochiServices._listenChannel.onEvent = function (pkg) {
switch (pkg.target) {
case 'services':
mochi.as2.MochiServices.triggerEvent(pkg.event, pkg.args);
break;
case 'events':
mochi.as2.MochiEvents.triggerEvent(pkg.event, pkg.args);
break;
case 'coins':
mochi.as2.MochiCoins.triggerEvent(pkg.event, pkg.args);
break;
case 'social':
mochi.as2.MochiSocial.triggerEvent(pkg.event, pkg.args);
}
};
mochi.as2.MochiServices._listenChannel.onError = function () {
mochi.as2.MochiServices.onError.apply(null, ['IOError']);
};
trace('[SERVICES_API] connected!');
mochi.as2.MochiServices._connecting = false;
mochi.as2.MochiServices._connected = true;
while (mochi.as2.MochiServices._sendChannel._queue.length > 0) {
mochi.as2.MochiServices._sendChannel.send(mochi.as2.MochiServices._sendChannelName, 'onReceive', mochi.as2.MochiServices._sendChannel._queue.shift());
}
}
};
v1.flush = function (error) {
var v1;
var v2;
while (mochi.as2.MochiServices._sendChannel._queue.length > 0) {
v1 = mochi.as2.MochiServices._sendChannel._queue.shift();
false;
if (v1.callbackID != null) {
v2 = mochi.as2.MochiServices._listenChannel._callbacks[v1.callbackID];
}
delete mochi.as2.MochiServices._listenChannel._callbacks[v1.callbackID];
if (error) {
mochi.as2.MochiServices.handleError(v1.args, v2.callbackObject, v2.callbackMethod);
}
}
};
v1.handleError = function (args, callbackObject, callbackMethod) {
if (args != null) {
if (args.onError != null) {
args.onError.apply(null, ['NotConnected']);
}
if (args.options != null && args.options.onError != null) {
args.options.onError.apply(null, ['NotConnected']);
}
}
if (callbackMethod != null) {
args = {};
args.error = true;
args.errorCode = 'NotConnected';
if (callbackObject != null && typeof callbackMethod == 'string') {
callbackObject[callbackMethod](args);
} else {
if (callbackMethod != null) {
callbackMethod.apply(args);
}
}
}
};
v1.send = function (methodName, args, callbackObject, callbackMethod) {
if (mochi.as2.MochiServices._connected) {
mochi.as2.MochiServices._sendChannel.send(mochi.as2.MochiServices._sendChannelName, 'onReceive', {'methodName': methodName, 'args': args, 'callbackID': mochi.as2.MochiServices._listenChannel._nextcallbackID});
} else {
if (mochi.as2.MochiServices._clip == undefined || !mochi.as2.MochiServices._connecting) {
trace('Error: MochiServices not connected. Please call MochiServices.connect(). Function: ' + methodName);
mochi.as2.MochiServices.handleError(args, callbackObject, callbackMethod);
mochi.as2.MochiServices.flush(true);
return undefined;
} else {
mochi.as2.MochiServices._sendChannel._queue.push({'methodName': methodName, 'args': args, 'callbackID': mochi.as2.MochiServices._listenChannel._nextcallbackID});
}
}
mochi.as2.MochiServices._listenChannel._callbacks[mochi.as2.MochiServices._listenChannel._nextcallbackID] = {'callbackObject': callbackObject, 'callbackMethod': callbackMethod};
++mochi.as2.MochiServices._listenChannel._nextcallbackID;
};
v1.urlOptions = function () {
var v5 = {};
var v6;
if (_root._url.indexOf('mochiad_options') != -1) {
var v2 = _root._url.indexOf('mochiad_options') + 'mochiad_options'.length + 1;
v6 = _root._url.substr(v2, _root._url.length);
} else {
if (_root.mochiad_options) {
v6 = _root.mochiad_options;
}
}
if (v6) {
var v4 = _root.mochiad_options.split('&');
var v2 = 0;
while (v2 < v4.length) {
var v3 = v4[v2].split('=');
v5[unescape(v3[0])] = unescape(v3[1]);
++v2;
}
}
return v5;
};
v1.warnID = function (bid, leaderboard) {
bid = bid.toLowerCase();
if (bid.length != 16) {
trace('WARNING: ' + (leaderboard ? 'board' : 'game') + ' ID is not the appropriate length');
return undefined;
} else {
if (bid == '1e113c7239048b3f') {
if (leaderboard) {
trace('WARNING: Using testing board ID');
} else {
trace('WARNING: Using testing board ID as game ID');
}
return undefined;
} else {
if (bid == '84993a1de4031cd8') {
if (leaderboard) {
trace('WARNING: Using testing game ID as board ID');
} else {
trace('WARNING: Using testing game ID');
}
return undefined;
}
}
}
var v1 = 0;
while (v1 < bid.length) {
switch (bid.charAt(v1)) {
if (bid.charAt(v1) !== 'f') {
} else {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case 'a':
break;
case 'b':
case 'c':
case 'd':
case 'e':
}
default:
trace('WARNING: Board ID contains illegal characters: ' + bid);
return undefined;
}
++v1;
}
};
v1.addLinkEvent = function (url, burl, btn, onClick) {
var timeout = 1500;
var t0 = getTimer();
var v2 = new Object();
v2.mav = mochi.as2.MochiServices.getVersion();
v2.swfv = btn.getSWFVersion() || 6;
v2.swfurl = btn._url;
v2.fv = System.capabilities.version;
v2.os = System.capabilities.os;
v2.lang = System.capabilities.language;
v2.scres = System.capabilities.screenResolutionX + 'x' + System.capabilities.screenResolutionY;
var s = '?';
var v3 = 0;
for (var v6 in v2) {
if (v3 != 0) {
s += '&';
}
++v3;
s = s + v6 + '=' + escape(v2[v6]);
}
if (!(mochi.as2.MochiServices.netupAttempted || mochi.as2.MochiServices._connected)) {
var ping = btn.createEmptyMovieClip('ping', 777);
var v7 = btn.createEmptyMovieClip('nettest', 778);
mochi.as2.MochiServices.netupAttempted = true;
ping.loadMovie('http://link.mochiads.com/linkping.swf?t=' + getTimer());
v7.onEnterFrame = function () {
if (ping._totalframes > 0 && ping._totalframes == ping._framesloaded) {
delete this.onEnterFrame;
} else {
if (getTimer() - t0 > timeout) {
delete this.onEnterFrame;
mochi.as2.MochiServices.netup = false;
}
}
};
}
var v4 = btn.createEmptyMovieClip('clk', 1001);
v4._alpha = 0;
v4.beginFill(1044735);
v4.moveTo(0, 0);
v4.lineTo(0, btn._height);
v4.lineTo(btn._width, btn._height);
v4.lineTo(btn._width, 0);
v4.lineTo(0, 0);
v4.endFill();
v4.onRelease = function () {
if (mochi.as2.MochiServices.netup) {
getURL(url + s, '_blank');
} else {
getURL(burl, '_blank');
}
if (onClick != undefined) {
onClick();
}
};
};
v1.setContainer = function (clip) {};
v1.stayOnTop = function (clip) {};
v1.addEventListener = function (eventType, thisObject, thatObject) {
mochi.as2.MochiServices._dispatcher.addEventListener(eventType, thisObject, thatObject);
};
v1.triggerEvent = function (eventType, args) {
mochi.as2.MochiServices._dispatcher.triggerEvent(eventType, args);
};
v1.removeEventListener = function (eventType, thisObject, thatObject) {
mochi.as2.MochiServices._dispatcher.removeEventListener(eventType, thisObject, thatObject);
};
v1.CONNECTED = 'onConnected';
v1._servURL = 'http://www.mochiads.com/static/lib/services/';
v1._services = 'services.swf';
v1._mochiLC = 'MochiLC.swf';
v1._listenChannelName = '__ms_';
v1._connecting = false;
v1._connected = false;
v1.netup = true;
v1.netupAttempted = false;
v1._dispatcher = new mochi.as2.MochiEventDispatcher();
v1.addProperty('childClip', v1.__get__childClip, function () {});
v1.addProperty('clip', v1.__get__clip, function () {});
v1.addProperty('comChannelName', function () {}, v1.__set__comChannelName);
v1.addProperty('connected', v1.__get__connected, function () {});
v1.addProperty('id', v1.__get__id, function () {});
v1.addProperty('isNetworkAvailable', v1.__get__isNetworkAvailable, function () {});
ASSetPropFlags(mochi.as2.MochiServices.prototype, null, 1);
}
#endinitclip
}
movieClip 123 __Packages.mochi.as2.MochiEvents {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiEvents) {
var v1 = function () {};
mochi.as2.MochiEvents = v1;
var v2 = v1.prototype;
v1.getVersion = function () {
return mochi.as2.MochiServices.getVersion();
};
v1.startSession = function (achievementID) {
mochi.as2.MochiServices.send('events_beginSession', {'achievementID': achievementID}, null, null);
};
v1.setNotifications = function (clip, style) {
var v2 = {};
for (var v3 in style) {
v2[v3] = style[v3];
}
v2.clip = clip;
mochi.as2.MochiServices.send('events_setNotifications', v2, null, null);
};
v1.addEventListener = function (eventType, thisObject, thatObject) {
mochi.as2.MochiEvents._dispatcher.addEventListener(eventType, thisObject, thatObject);
};
v1.triggerEvent = function (eventType, args) {
mochi.as2.MochiEvents._dispatcher.triggerEvent(eventType, args);
};
v1.removeEventListener = function (eventType, thisObject, thatObject) {
mochi.as2.MochiEvents._dispatcher.removeEventListener(eventType, thisObject, thatObject);
};
v1.startPlay = function (tag) {
if (tag == undefined) {
tag = 'gameplay';
}
mochi.as2.MochiServices.send('events_setRoundID', {'tag': String(tag)}, null, null);
};
v1.endPlay = function () {
mochi.as2.MochiServices.send('events_clearRoundID', null, null, null);
};
v1.trackEvent = function (tag, value) {
mochi.as2.MochiServices.send('events_trackEvent', {'tag': tag, 'value': value}, null, null);
};
v1.ACHIEVEMENT_RECEIVED = 'AchievementReceived';
v1.ALIGN_TOP_LEFT = 'ALIGN_TL';
v1.ALIGN_TOP = 'ALIGN_T';
v1.ALIGN_TOP_RIGHT = 'ALIGN_TR';
v1.ALIGN_LEFT = 'ALIGN_L';
v1.ALIGN_CENTER = 'ALIGN_C';
v1.ALIGN_RIGHT = 'ALIGN_R';
v1.ALIGN_BOTTOM_LEFT = 'ALIGN_BL';
v1.ALIGN_BOTTOM = 'ALIGN_B';
v1.ALIGN_BOTTOM_RIGHT = 'ALIGN_BR';
v1.FORMAT_SHORT = 'ShortForm';
v1.FORMAT_LONG = 'LongForm';
v1._dispatcher = new mochi.as2.MochiEventDispatcher();
ASSetPropFlags(mochi.as2.MochiEvents.prototype, null, 1);
}
#endinitclip
}
movieClip 124 __Packages.mochi.as2.MochiCoins {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiCoins) {
var v1 = function () {};
mochi.as2.MochiCoins = v1;
var v2 = v1.prototype;
v1.getVersion = function () {
return mochi.as2.MochiServices.getVersion();
};
v1.showStore = function (options) {
mochi.as2.MochiServices.send('coins_showStore', {'options': options}, null, null);
};
v1.showItem = function (options) {
if (options == undefined || typeof options.item != 'string') {
trace('ERROR: showItem call must pass an Object with an item key');
return undefined;
}
mochi.as2.MochiServices.send('coins_showItem', {'options': options}, null, null);
};
v1.showVideo = function (options) {
if (options == undefined || typeof options.item != 'string') {
trace('ERROR: showVideo call must pass an Object with an item key');
return undefined;
}
mochi.as2.MochiServices.send('coins_showVideo', {'options': options}, null, null);
};
v1.getStoreItems = function () {
mochi.as2.MochiServices.send('coins_getStoreItems');
};
v1.requestFunding = function (properties) {
mochi.as2.MochiServices.send('social_requestFunding', properties);
};
v1.addEventListener = function (eventType, delegate) {
mochi.as2.MochiCoins._dispatcher.addEventListener(eventType, delegate);
};
v1.triggerEvent = function (eventType, args) {
mochi.as2.MochiCoins._dispatcher.triggerEvent(eventType, args);
};
v1.removeEventListener = function (eventType, delegate) {
mochi.as2.MochiCoins._dispatcher.removeEventListener(eventType, delegate);
};
v1.STORE_SHOW = 'StoreShow';
v1.STORE_HIDE = 'StoreHide';
v1.ITEM_OWNED = 'ItemOwned';
v1.ITEM_NEW = 'ItemNew';
v1.STORE_ITEMS = 'StoreItems';
v1.ERROR = 'Error';
v1.IO_ERROR = 'IOError';
v1.NO_USER = 'NoUser';
v1._dispatcher = new mochi.as2.MochiEventDispatcher();
ASSetPropFlags(mochi.as2.MochiCoins.prototype, null, 1);
}
#endinitclip
}
movieClip 125 __Packages.mochi.as2.MochiSocial {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiSocial) {
var v1 = function () {};
mochi.as2.MochiSocial = v1;
var v2 = v1.prototype;
v1.getVersion = function () {
return mochi.as2.MochiServices.getVersion();
};
v1.showLoginWidget = function (options) {
mochi.as2.MochiServices.setContainer();
mochi.as2.MochiServices.stayOnTop();
mochi.as2.MochiServices.send('social_showLoginWidget', {'options': options});
};
v1.hideLoginWidget = function () {
mochi.as2.MochiServices.send('social_hideLoginWidget');
};
v1.requestLogin = function (properties) {
mochi.as2.MochiServices.send('social_requestLogin', properties);
};
v1.getFriendsList = function (properties) {
mochi.as2.MochiServices.send('social_getFriendsList', properties);
};
v1.postToStream = function (properties) {
mochi.as2.MochiServices.send('social_postToStream', properties);
};
v1.inviteFriends = function (properties) {
mochi.as2.MochiServices.send('social_inviteFriends', properties);
};
v1.requestFan = function (properties) {
mochi.as2.MochiServices.send('social_requestFan', properties);
};
v1.saveUserProperties = function (properties) {
mochi.as2.MochiServices.send('social_saveUserProperties', properties);
};
v1.addEventListener = function (eventType, delegate) {
mochi.as2.MochiSocial._dispatcher.addEventListener(eventType, delegate);
};
v1.triggerEvent = function (eventType, args) {
mochi.as2.MochiSocial._dispatcher.triggerEvent(eventType, args);
};
v1.removeEventListener = function (eventType, delegate) {
mochi.as2.MochiSocial._dispatcher.removeEventListener(eventType, delegate);
};
v1.LOGGED_IN = 'LoggedIn';
v1.LOGGED_OUT = 'LoggedOut';
v1.LOGIN_SHOW = 'LoginShow';
v1.LOGIN_HIDE = 'LoginHide';
v1.LOGIN_SHOWN = 'LoginShown';
v1.PROFILE_SHOW = 'ProfileShow';
v1.PROFILE_HIDE = 'ProfileHide';
v1.PROPERTIES_SAVED = 'PropertySaved';
v1.WIDGET_LOADED = 'WidgetLoaded';
v1.FRIEND_LIST = 'FriendsList';
v1.PROFILE_DATA = 'ProfileData';
v1.GAMEPLAY_DATA = 'GameplayData';
v1.ACTION_CANCELED = 'onCancel';
v1.ACTION_COMPLETE = 'onComplete';
v1.USER_INFO = 'UserInfo';
v1.ERROR = 'Error';
v1.IO_ERROR = 'IOError';
v1.NO_USER = 'NoUser';
v1.PROPERTIES_SIZE = 'PropertiesSize';
v1._dispatcher = new mochi.as2.MochiEventDispatcher();
ASSetPropFlags(mochi.as2.MochiSocial.prototype, null, 1);
}
#endinitclip
}
movieClip 126 __Packages.mochi.as2.MochiScores {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiScores) {
var v1 = function () {};
mochi.as2.MochiScores = v1;
var v2 = v1.prototype;
v1.setBoardID = function (boardID) {
mochi.as2.MochiServices.warnID(boardID, true);
mochi.as2.MochiScores.boardID = boardID;
mochi.as2.MochiServices.send('scores_setBoardID', {'boardID': boardID});
};
v1.showLeaderboard = function (options) {
options.clip = mochi.as2.MochiServices.clip;
if (options.clip != mochi.as2.MochiServices.__get__clip() || (mochi.as2.MochiServices.__get__childClip())._target == undefined) {
mochi.as2.MochiServices.disconnect();
trace('WARNING! This application is attempting to connect to MochiServices inside a showLeaderboard call!');
trace('make sure MochiServices.connect is called as early in the application runtime as possible.');
mochi.as2.MochiServices.connect(mochi.as2.MochiServices.__get__id(), options.clip);
}
delete options.clip;
if (options.name != null) {
if (typeof options.name == 'object') {
if (options.name.text != undefined) {
options.name = options.name.text;
}
}
}
if (options.score != null) {
if (options.score instanceof TextField) {
if (options.score.text != undefined) {
options.score = options.score.text;
}
} else {
if (options.score instanceof mochi.as2.MochiDigits) {
options.score = options.score.value;
}
}
var v1 = Number(options.score);
if (isNaN(v1)) {
trace('ERROR: Submitted score \'' + options.score + '\' will be rejected, score is \'Not a Number\'');
} else {
if (v1 == Number.NEGATIVE_INFINITY || v1 == Number.POSITIVE_INFINITY) {
trace('ERROR: Submitted score \'' + options.score + '\' will be rejected, score is an infinite');
} else {
if (Math.floor(v1) != v1) {
trace('WARNING: Submitted score \'' + options.score + '\' will be truncated');
}
options.score = v1;
}
}
}
if (options.onDisplay != null) {
options.onDisplay();
} else {
(mochi.as2.MochiServices.__get__clip()).stop();
}
if (options.onClose != null) {
mochi.as2.MochiScores.onClose = options.onClose;
} else {
mochi.as2.MochiScores.onClose = function () {
(mochi.as2.MochiServices.__get__clip()).play();
};
}
if (options.onError != null) {
mochi.as2.MochiScores.onError = options.onError;
} else {
mochi.as2.MochiScores.onError = mochi.as2.MochiScores.onClose;
}
if (options.boardID == null) {
if (mochi.as2.MochiScores.boardID != null) {
options.boardID = mochi.as2.MochiScores.boardID;
}
}
mochi.as2.MochiServices.warnID(options.boardID, true);
trace('[MochiScores] NOTE: Security Sandbox Violation errors below are normal');
mochi.as2.MochiServices.send('scores_showLeaderboard', {'options': options}, null, mochi.as2.MochiScores.doClose);
};
v1.closeLeaderboard = function () {
mochi.as2.MochiServices.send('scores_closeLeaderboard');
};
v1.getPlayerInfo = function (callbackObj, callbackMethod) {
mochi.as2.MochiServices.send('scores_getPlayerInfo', null, callbackObj, callbackMethod);
};
v1.submit = function (score, name, callbackObj, callbackMethod) {
score = Number(score);
if (isNaN(score)) {
trace('ERROR: Submitted score \'' + String(score) + '\' will be rejected, score is \'Not a Number\'');
} else {
if (score == Number.NEGATIVE_INFINITY || score == Number.POSITIVE_INFINITY) {
trace('ERROR: Submitted score \'' + String(score) + '\' will be rejected, score is an infinite');
} else {
if (Math.floor(score) != score) {
trace('WARNING: Submitted score \'' + String(score) + '\' will be truncated');
}
score = Number(score);
}
}
mochi.as2.MochiServices.send('scores_submit', {'score': score, 'name': name}, callbackObj, callbackMethod);
};
v1.requestList = function (callbackObj, callbackMethod) {
mochi.as2.MochiServices.send('scores_requestList', null, callbackObj, callbackMethod);
};
v1.scoresArrayToObjects = function (scores) {
var v5 = {};
var v1;
var v4;
var v2;
var v6;
for (var v8 in scores) {
if (typeof scores[v8] == 'object') {
if (scores[v8].cols != null && scores[v8].rows != null) {
v5[v8] = [];
v2 = scores[v8];
v4 = 0;
while (v4 < v2.rows.length) {
v6 = {};
v1 = 0;
while (v1 < v2.cols.length) {
v6[v2.cols[v1]] = v2.rows[v4][v1];
++v1;
}
v5[v8].push(v6);
++v4;
}
} else {
v5[v8] = {};
for (var v7 in scores[v8]) {
v5[v8][v7] = scores[v8][v7];
}
}
} else {
v5[v8] = scores[v8];
}
}
return v5;
};
v1.doClose = function (args) {
if (args.error == true) {
if (args.errorCode == undefined) {
args.errorCode = 'IOError';
}
mochi.as2.MochiScores.onError.apply(null, [args.errorCode]);
} else {
mochi.as2.MochiScores.onClose.apply();
}
};
ASSetPropFlags(mochi.as2.MochiScores.prototype, null, 1);
}
#endinitclip
}
movieClip 127 __Packages.mochi.as2.MochiDigits {
#initclip
if (!_global.mochi) {
_global.mochi = new Object();
}
if (!_global.mochi.as2) {
_global.mochi.as2 = new Object();
}
if (!_global.mochi.as2.MochiDigits) {
var v1 = function (digit, index) {
this.Encoder = 0;
this.setValue(digit, index);
};
mochi.as2.MochiDigits = v1;
var v2 = v1.prototype;
v2.__get__value = function () {
return Number(this.toString());
};
v2.__set__value = function (v) {
this.setValue(v);
return this.__get__value();
};
v2.addValue = function (v) {
this.value += v;
};
v2.setValue = function (digit, index) {
var v3 = digit.toString();
if (index == undefined || isNaN(index)) {
index = 0;
}
this.Fragment = v3.charCodeAt(index++) ^ this.Encoder;
if (index < v3.length) {
this.Sibling = new mochi.as2.MochiDigits(digit, index);
} else {
this.Sibling = null;
}
this.reencode();
};
v2.reencode = function () {
var v2 = int(2147483647 * Math.random());
this.Fragment ^= v2 ^ this.Encoder;
this.Encoder = v2;
};
v2.toString = function () {
var v2 = String.fromCharCode(this.Fragment ^ this.Encoder);
return (this.Sibling != null) ? v2.concat(this.Sibling.toString()) : v2;
};
v2.addProperty('value', v2.__get__value, v2.__set__value);
ASSetPropFlags(mochi.as2.MochiDigits.prototype, null, 1);
}
#endinitclip
}
frame 9 {
}
frame 10 {
function securescore(oldscore, ssval, ssmode) {
ssmodified = false;
if (securestartscore + securetotal / ssfactor != oldscore) {
ssmodified = true;
}
if (ssmode == 1) {
securetotal += ssval * ssfactor;
}
if (ssmode == 2) {
securetotal -= ssval * ssfactor;
}
if (ssmode == 3) {
securetotal += ssval * ssfactor - oldscore;
}
if (ssmode == 4) {
securetotal = ssval * ssfactor;
}
securecount += 1;
if (oldscore != securescorecheck / ssfactor) {
ssmodified = true;
}
if (ssmode == 1) {
securescorecheck += ssval * ssfactor;
}
if (ssmode == 2) {
securescorecheck -= ssval * ssfactor;
}
if (ssmode == 3) {
securescorecheck = ssval * ssfactor;
}
if (ssmode == 4) {
securescorecheck = ssval * ssfactor;
}
if (ssmodified == true) {
securescorecheck = 0;
}
securelog.push(securescorecheck / ssfactor);
return securescorecheck / ssfactor;
}
_global.ROOT = this;
globalcontrol = new Sound();
xmlMenu._visible = false;
loadMovie('http://' + (_url.split('/'))[2] + '/menu.swf?dummy=' + (new Date()).getTime(), menu1);
myDecrypt = _root._level99.decrypt(_root.data_in, _root.highscore_guid);
var data_array = myDecrypt.split(',');
xmlMenu.onRelease = function () {
_root.menu1.nextFrame();
_root.xmlMenu.nextFrame();
};
score = 0;
securestartscore = 0;
securescorecheck = 0;
securetotal = 0;
securecount = 0;
ssfactor = (random(10) + 2) * -1;
securelog = new Array();
}
movieClip 9 {
frame 1 {
stop();
}
}
movieClip 10 {
frame 1 {
_root.stop();
movieSize = _root.getBytesTotal();
}
frame 2 {
movieLoaded = _root.getBytesLoaded();
percent = Math.round((movieLoaded / movieSize) * 100);
loadbar.gotoAndStop(percent);
}
frame 3 {
if (movieLoaded < movieSize) {
gotoAndPlay(_currentframe - 1);
}
}
frame 4 {
_root.play();
}
}
// unknown tag 88 length 63
frame 11 {
startTime = true;
gameOver = false;
stop();
}
// unknown tag 88 length 54
button 31 {
on (release) {
MAXDEPTH = 1;
play();
}
}
// unknown tag 88 length 68
button 39 {
on (release) {
getURL('http://gazuma.com', 'blank');
}
}
// unknown tag 88 length 76
button 47 {
on (release) {
gotoAndPlay('restart');
}
}
movieClip 50 {
frame 1 {
_root.progressBar._visible = false;
stop();
}
frame 2 {
_root.progressBar._visible = true;
_root.progressBar.gotoAndStop(1);
stop();
}
}
button 55 {
on (release, keyPress '<Down>') {
++text.scroll;
if (myscroll._y < 96.59999999999999 - myscroll._height + myscroll.top) {
myscroll._y += (96.40000000000001 - myscroll._height) / myscroll.totalLines;
}
}
}
button 56 {
on (release, keyPress '<Up>') {
--text.scroll;
if (myscroll._y > myscroll.top) {
myscroll._y -= (96.40000000000001 - myscroll._height) / myscroll.totalLines;
}
}
}
button 61 {
on (press) {
startDrag('', false, left, top, right, bottom);
dragging = true;
}
on (release, releaseOutside) {
stopDrag();
dragging = false;
}
}
movieClip 62 {
frame 1 {
function update() {
_height = 576 / (totalLines + 5);
bottom = top + (96.59999999999999 - _height);
}
function appendText(tx) {
++moveNumber;
text = '' + moveNumber + '.' + tx + '\n' + text;
_root.text = title + text;
++totalLines;
update();
gotoBottom();
}
function clearText() {
_root.text = title;
text = '';
totalLines = 1;
update();
moveNumber = 0;
}
totalLines = 0;
title = '\n';
text = '';
top = _y;
left = _x;
right = _x;
clearText();
}
frame 3 {
gotoAndPlay(_currentframe - 1);
}
}
instance myscroll of movieClip 62 {
onClipEvent (enterFrame) {
if (dragging == true) {
_root.text.scroll = 1 + int((_y - top) * totalLines / (96.59999999999999 - _height));
}
}
onClipEvent (load) {
update();
updateAfterEvent();
}
}
button 67 {
on (release) {
_root.select(this._parent.row, this._parent.col);
gotoAndStop('selected');
}
}
movieClip 69 {
frame 19 {
gotoAndPlay(2);
}
}
button 70 {
on (release) {
_root.moveRealPlayer(_root.pieceSelected.row << 9 | _root.pieceSelected.col << 6 | this._parent.row << 3 | this._parent.col, _root.SIDE_PLAYER);
}
}
button 72 {
on (release) {
_root.deselect(this._parent);
_root.gotoAndStop('normal');
}
}
movieClip 73 {
frame 1 {
stop();
}
frame 2 {
stop();
}
frame 3 {
stop();
}
frame 4 {
stop();
}
}
movieClip 87 {
frame 1 {
function showPiece(piece) {
if (piece == _root.VOID) {
gotoAndStop('void');
} else {
if (piece == _root.PAWN_W) {
gotoAndStop('pawn_w');
} else {
if (piece == _root.KNIGHT_W) {
gotoAndStop('knight_w');
} else {
if (piece == _root.ROOK_W) {
gotoAndStop('rook_w');
} else {
if (piece == _root.BISSHOP_W) {
gotoAndStop('bisshop_w');
} else {
if (piece == _root.QUEEN_W) {
gotoAndStop('queen_w');
} else {
if (piece == _root.KING_W) {
gotoAndStop('king_w');
} else {
if (piece == _root.PAWN_B) {
gotoAndStop('pawn_b');
} else {
if (piece == _root.KNIGHT_B) {
gotoAndStop('knight_b');
} else {
if (piece == _root.ROOK_B) {
gotoAndStop('rook_b');
} else {
if (piece == _root.BISSHOP_B) {
gotoAndStop('bisshop_b');
} else {
if (piece == _root.QUEEN_B) {
gotoAndStop('queen_b');
} else {
if (piece == _root.KING_B) {
gotoAndStop('king_b');
}
}
}
}
}
}
}
}
}
}
}
}
}
}
piece = 'void';
stop();
}
frame 2 {
piece = 'pawn_w';
stop();
}
frame 3 {
piece = 'knight_w';
stop();
}
frame 4 {
piece = 'rook_w';
stop();
}
frame 5 {
piece = 'bisshop_w';
stop();
}
frame 6 {
piece = 'queen_w';
stop();
}
frame 7 {
piece = 'king_w';
stop();
}
frame 9 {
piece = 'pawn_b';
stop();
}
frame 10 {
piece = 'knight_b';
stop();
}
frame 11 {
piece = 'rook_b';
stop();
}
frame 12 {
piece = 'bisshop_b';
stop();
}
frame 13 {
piece = 'queen_b';
stop();
}
frame 14 {
piece = 'king_b';
stop();
}
}
// unknown tag 88 length 47
button 94 {
on (release) {
gotoAndStop('on');
}
}
button 96 {
on (release) {
gotoAndStop('off');
}
}
// unknown tag 88 length 70
// unknown tag 88 length 69
movieClip 104 {
frame 1 {
stop();
}
frame 2 {
stop();
}
}
// unknown tag 88 length 54
movieClip 109 {
frame 1 {
if (_root.startTime == true) {
var myNumber = 0;
_root.startTime = false;
}
myNumber += 1;
theTime = myNumber;
var baseScore = 50000;
_global.ROOT.score = _global.ROOT.securescore(_global.ROOT.score, baseScore - myNumber * 10, 4);
if (_root.gameOver == true) {
stop();
}
}
}
movieClip 113 {
}
movieClip 114 {
frame 1 {
var o = {'n': [14, 7, 5, 1, 15, 0, 1, 4, 7, 2, 5, 1, 15, 14, 4, 14], 'f': function (i, s) {
if (s.length == 16) {
return s;
}
return this.f(i + 1, s + this.n[i].toString(16));
}};
var boardID = o.f(0, '');
mochi.as2.MochiScores.showLeaderboard({'boardID': boardID, 'score': _root.score});
}
}
movieClip 119 {
frame 1 {
stop();
}
frame 2 {
stop();
_root.gameOver = true;
}
frame 3 {
stop();
_root.gameOver = true;
}
frame 4 {
stop();
_root.gameOver = true;
}
frame 5 {
stop();
}
frame 6 {
stop();
}
}
frame 13 {
function MovementRules() {
this.up = 0;
this.down = 0;
this.left = 0;
this.right = 0;
this.up_left = 0;
this.up_right = 0;
this.down_left = 0;
this.down_right = 0;
this.isKnight = false;
this.isPawn = false;
}
function Move(firstPosX, firstPosY, lastPosX, lastPosY) {
this.fPX = firstPosX;
this.fPY = firstPosY;
this.lPX = lastPosX;
this.lPY = lastPosY;
}
function rulesFor(piece) {
if (piece == PAWN_W || piece == PAWN_B) {
return pawnRules;
} else {
if (piece == KNIGHT_W || piece == KNIGHT_B) {
return knightRules;
} else {
if (piece == ROOK_W || piece == ROOK_B) {
return rookRules;
} else {
if (piece == BISSHOP_W || piece == BISSHOP_B) {
return bisshopRules;
} else {
if (piece == QUEEN_W || piece == QUEEN_B) {
return queenRules;
} else {
if (piece == KING_W || piece == KING_B) {
return kingRules;
}
}
}
}
}
}
}
function initChessBoard() {
chessBoard = new Array(8);
chessBoard[0] = new Array(ROOK_B, KNIGHT_B, BISSHOP_B, QUEEN_B, KING_B, BISSHOP_B, KNIGHT_B, ROOK_B);
chessBoard[1] = new Array(PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B);
chessBoard[2] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[3] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[4] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[5] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[6] = new Array(PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W);
chessBoard[7] = new Array(ROOK_W, KNIGHT_W, BISSHOP_W, QUEEN_W, KING_W, BISSHOP_W, KNIGHT_W, ROOK_W);
var v3 = 0;
while (v3 < 8) {
var v2 = 0;
while (v2 < 8) {
_root['piece_' + v3 + '_' + v2].showPiece(chessBoard[v3][v2]);
_root['piece_' + v3 + '_' + v2].row = v3;
_root['piece_' + v3 + '_' + v2].col = v2;
++v2;
}
++v3;
}
}
function calculateMoves(row, col, side) {
if (chessBoard[row][col] == VOID) {
trace('Error: no piece to calculate moves for !!');
return null;
}
var v3 = new Array();
rules = rulesFor(chessBoard[row][col]);
var v11;
if (rules.isKnight) {
var v8 = row - 1;
var v7 = col + 2;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row - 1;
v7 = col - 2;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row + 1;
v7 = col + 2;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row + 1;
v7 = col - 2;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row - 2;
v7 = col + 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row - 2;
v7 = col - 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row + 2;
v7 = col - 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
v8 = row + 2;
v7 = col + 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8) {
if (chessBoard[v8][v7] == VOID || side != (chessBoard[v8][v7] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
return v3;
}
if (rules.isPawn) {
if (side == SIDE_PLAYER) {
var v10 = false;
var v6 = row - 1;
if (chessBoard[v6][col] == VOID) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | col;
v10 = true;
}
if (row == 6 && v10) {
--v6;
if (chessBoard[v6][col] == VOID) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | col;
}
}
v8 = row - 1;
v7 = col - 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8 && (chessBoard[v8][v7] != VOID && side != (chessBoard[v8][v7] & 1))) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
v8 = row - 1;
v7 = col + 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8 && (chessBoard[v8][v7] != VOID && side != (chessBoard[v8][v7] & 1))) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
} else {
var v10 = false;
var v6 = row + 1;
if (chessBoard[v6][col] == VOID) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | col;
v10 = true;
}
if (row == 1 && v10) {
++v6;
if (chessBoard[v6][col] == VOID) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | col;
}
}
v8 = row + 1;
v7 = col - 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8 && (chessBoard[v8][v7] != VOID && side != (chessBoard[v8][v7] & 1))) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
v8 = row + 1;
v7 = col + 1;
if (0 <= v8 && v8 < 8 && 0 <= v7 && v7 < 8 && (chessBoard[v8][v7] != VOID && side != (chessBoard[v8][v7] & 1))) {
v3[v3.length] = row << 9 | col << 6 | v8 << 3 | v7;
}
}
return v3;
}
var v9 = rules.up;
v6 = row - 1;
for (;;) {
if (!(v9 > 0 && v6 >= 0)) break;
if (chessBoard[v6][col] == VOID || side != (chessBoard[v6][col] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | col;
} else {
break;
}
if (chessBoard[v6][col] != VOID) {
break;
}
--v6;
--v9;
}
v9 = rules.down;
v6 = row + 1;
for (;;) {
if (!(v9 > 0 && v6 < 8)) break;
if (chessBoard[v6][col] == VOID || side != (chessBoard[v6][col] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | col;
} else {
break;
}
if (chessBoard[v6][col] != VOID) {
break;
}
++v6;
--v9;
}
v9 = rules.left;
var v5 = col - 1;
for (;;) {
if (!(v9 > 0 && v5 >= 0)) break;
if (chessBoard[row][v5] == VOID || side != (chessBoard[row][v5] & 1)) {
v3[v3.length] = row << 9 | col << 6 | row << 3 | v5;
} else {
break;
}
if (chessBoard[row][v5] != VOID) {
break;
}
--v5;
--v9;
}
v9 = rules.right;
v5 = col + 1;
for (;;) {
if (!(v9 > 0 && v5 < 8)) break;
if (chessBoard[row][v5] == VOID || side != (chessBoard[row][v5] & 1)) {
v3[v3.length] = row << 9 | col << 6 | row << 3 | v5;
} else {
break;
}
if (chessBoard[row][v5] != VOID) {
break;
}
++v5;
--v9;
}
v9 = rules.up_left;
v6 = row - 1;
v5 = col - 1;
for (;;) {
if (!(v9 > 0 && v5 >= 0 && v6 >= 0)) break;
if (chessBoard[v6][v5] == VOID || side != (chessBoard[v6][v5] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | v5;
} else {
break;
}
if (chessBoard[v6][v5] != VOID) {
break;
}
--v6;
--v5;
--v9;
}
v9 = rules.up_right;
v6 = row - 1;
v5 = col + 1;
for (;;) {
if (!(v9 > 0 && v5 < 8 && v6 >= 0)) break;
if (chessBoard[v6][v5] == VOID || side != (chessBoard[v6][v5] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | v5;
} else {
break;
}
if (chessBoard[v6][v5] != VOID) {
break;
}
--v6;
++v5;
--v9;
}
v9 = rules.down_left;
v6 = row + 1;
v5 = col - 1;
for (;;) {
if (!(v9 > 0 && v5 >= 0 && v6 < 8)) break;
if (chessBoard[v6][v5] == VOID || side != (chessBoard[v6][v5] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | v5;
} else {
break;
}
if (chessBoard[v6][v5] != VOID) {
break;
}
++v6;
--v5;
--v9;
}
v9 = rules.down_right;
v6 = row + 1;
v5 = col + 1;
for (;;) {
if (!(v9 > 0 && v5 < 8 && v6 < 8)) break;
if (chessBoard[v6][v5] == VOID || side != (chessBoard[v6][v5] & 1)) {
v3[v3.length] = row << 9 | col << 6 | v6 << 3 | v5;
} else {
return v3;
}
if (chessBoard[v6][v5] != VOID) {
return v3;
}
++v6;
++v5;
--v9;
}
return v3;
}
function checkChessState(side) {
var v4;
var v5;
var v6 = 0;
while (v6 < 8) {
var v3 = 0;
while (v3 < 8) {
if ((chessBoard[v6][v3] & 1) == getOpponent(side) && chessBoard[v6][v3] != VOID) {
compMoves = calculateMoves(v6, v3, getOpponent(side));
var v1 = 0;
while (v1 < compMoves.length) {
v4 = compMoves[v1] >> 3 & 7;
v5 = compMoves[v1] & 7;
if (chessBoard[v4][v5] == KING_W && side == SIDE_PLAYER || chessBoard[v4][v5] == KING_B && side == SIDE_COMPUTER) {
if (side == SIDE_PLAYER) {
kingInChess(v4, v5, side);
}
return false;
}
++v1;
}
}
++v3;
}
++v6;
}
if (side == SIDE_PLAYER) {
var v7 = 0;
v6 = 0;
while (v6 < 8) {
v3 = 0;
while (v3 < 8) {
if ((chessBoard[v6][v3] & 1) == SIDE_PLAYER && chessBoard[v6][v3] != VOID) {
v7 += select(v6, v3, true);
}
++v3;
}
++v6;
}
if (v7 == 0) {
invalidateAll();
messages.gotoAndStop('Pat');
}
}
return true;
}
function computerLoose() {
trace('ComputerLost');
invalidateAll();
messages.gotoAndStop(2);
stop();
}
function deselect(piece) {
resetAllSelection();
pieceSelected = null;
possiblePositions = null;
}
function displayMove(move, side) {
var v7 = move >> 9 & 7;
var v6 = move >> 6 & 7;
var v5 = move >> 3 & 7;
var v4 = move & 7;
var v2 = ' ';
if (side == SIDE_COMPUTER) {
v2 += 'Comp: ';
} else {
v2 += 'You: ';
}
v2 += letters[v6];
v2 += 9 - (v7 + 1);
v2 += ' - ';
v2 += letters[v4];
v2 += 9 - (v5 + 1);
_root.myscroll.appendText(v2);
}
function do_move(move, side) {
var v3 = VOID;
var v5 = move >> 9 & 7;
var v4 = move >> 6 & 7;
var v2 = move >> 3 & 7;
var v1 = move & 7;
if (side == SIDE_COMPUTER) {
if (chessBoard[v2][v1] != VOID) {
v3 = chessBoard[v2][v1];
playerScore -= chessBoard[v2][v1] >> 1;
computerScore += chessBoard[v2][v1] >> 1;
}
chessBoard[v2][v1] = chessBoard[v5][v4];
chessBoard[v5][v4] = VOID;
return v3;
} else {
if (chessBoard[v2][v1] != VOID) {
v3 = chessBoard[v2][v1];
playerScore += chessBoard[v2][v1] >> 1;
computerScore -= chessBoard[v2][v1] >> 1;
}
chessBoard[v2][v1] = chessBoard[v5][v4];
chessBoard[v5][v4] = VOID;
return v3;
}
}
function invalidateAll() {
var v3 = 0;
while (v3 < 8) {
var v2 = 0;
while (v2 < 8) {
_root['piece_' + v3 + '_' + v2].marker.gotoAndStop('disabled');
++v2;
}
++v3;
}
}
function movePlayer() {
messages.gotoAndStop(0);
resetAllSelection();
checkChessState(SIDE_PLAYER);
signal.gotoAndStop('player');
}
function moveRealPlayer(move, side) {
var v3 = move >> 9 & 7;
var v2 = move >> 6 & 7;
var v5 = move >> 3 & 7;
var v4 = move & 7;
if (pieceSelected == null) {
trace('ERROR: no piece selected');
return undefined;
}
if (chessBoard[v3][v2] == KING_W && chessBoard[v5][v4] == ROOK_W) {
trace('rocade');
possibleRocade = false;
chessBoard[v3][v2] = VOID;
chessBoard[v5][v4] = VOID;
if (v4 > v2) {
chessBoard[v3][v2 + 2] = KING_W;
chessBoard[v3][v2 + 1] = ROOK_W;
_root['piece_' + v3 + '_' + (v2 + 1)].showPiece(chessBoard[v3][v2 + 1]);
_root['piece_' + v3 + '_' + (v2 + 2)].showPiece(chessBoard[v3][v2 + 2]);
} else {
chessBoard[v3][v2 - 2] = KING_W;
chessBoard[v3][v2 - 1] = ROOK_W;
_root['piece_' + v3 + '_' + (v2 - 1)].showPiece(chessBoard[v3][v2 - 1]);
_root['piece_' + v3 + '_' + (v2 - 2)].showPiece(chessBoard[v3][v2 - 2]);
}
_root['piece_' + v5 + '_' + v4].showPiece(chessBoard[v5][v4]);
_root['piece_' + v3 + '_' + v2].showPiece(chessBoard[v3][v2]);
} else {
if (chessBoard[v3][v2] == KING_W || chessBoard[v3][v2] == ROOK_W) {
possibleRocade = false;
}
var v7 = chessBoard[v5][v4];
if ((v7 & 1) == SIDE_COMPUTER && v7 != VOID) {
trace('capture the computer piece');
}
chessBoard[v5][v4] = chessBoard[v3][v2];
chessBoard[v3][v2] = VOID;
_root['piece_' + v5 + '_' + v4].showPiece(chessBoard[v5][v4]);
_root['piece_' + v3 + '_' + v2].showPiece(VOID);
}
invalidateAll();
if (v5 == 0 && chessBoard[v5][v4] == PAWN_W) {
trace('promotion');
chessBoard[v5][v4] = QUEEN_W;
_root['piece_' + v5 + '_' + v4].showPiece(QUEEN_W);
}
displayMove(move, SIDE_PLAYER);
gotoAndPlay('moveComputer');
}
function moveRealComputer(move) {
var v6 = move >> 9 & 7;
var v5 = move >> 6 & 7;
var v2 = move >> 3 & 7;
var v3 = move & 7;
var v7 = chessBoard[v2][v3];
if ((v7 & 1) == SIDE_PLAYER && v7 != VOID) {
trace('captures the player piece');
}
chessBoard[v2][v3] = chessBoard[v6][v5];
chessBoard[v6][v5] = VOID;
_root['piece_' + v2 + '_' + v3].showPiece(chessBoard[v2][v3]);
_root['piece_' + v6 + '_' + v5].showPiece(VOID);
if (v2 == 7 && chessBoard[v2][v3] == PAWN_B) {
trace('promotion');
chessBoard[v2][v3] = QUEEN_B;
_root['piece_' + v2 + '_' + v3].showPiece(QUEEN_B);
}
displayMove(move, SIDE_COMPUTER);
movePlayer();
}
function resetAllSelection() {
var v3 = 0;
while (v3 < 8) {
var v2 = 0;
while (v2 < 8) {
if (chessBoard[v3][v2] == VOID || (chessBoard[v3][v2] & 1) == SIDE_COMPUTER) {
_root['piece_' + v3 + '_' + v2].marker.gotoAndStop('disabled');
} else {
_root['piece_' + v3 + '_' + v2].marker.gotoAndStop('normal');
}
++v2;
}
++v3;
}
}
function select(row, col, real) {
resetAllSelection();
var v4 = calculateMoves(row, col, SIDE_PLAYER);
if (possibleRocade && real != true) {
if (chessBoard[row][col] == KING_W) {
var v3 = col;
var v8 = true;
while (v8) {
++v3;
if (chessBoard[row][v3] != VOID) {
if (chessBoard[row][v3] == ROOK_W) {
if (verifyKingState(row << 9 | col << 6 | row << 3 | col + 2, SIDE_PLAYER)) {
v4[v4.length] = row << 9 | col << 6 | row << 3 | v3;
}
}
v8 = false;
}
}
v3 = col;
v8 = true;
while (v8) {
--v3;
if (chessBoard[row][v3] != VOID) {
if (chessBoard[row][v3] == ROOK_W) {
if (verifyKingState(row << 9 | col << 6 | row << 3 | col - 2, SIDE_PLAYER)) {
v4[v4.length] = row << 9 | col << 6 | row << 3 | v3;
}
}
v8 = false;
}
}
}
}
var v7 = new Array();
var v6 = 0;
while (v6 < v4.length) {
if (verifyKingState(v4[v6], SIDE_PLAYER)) {
v7[v7.length] = v4[v6];
}
++v6;
}
if (real != true) {
v6 = 0;
while (v6 < v7.length) {
_root['piece_' + (v7[v6] >> 3 & 7) + '_' + (v7[v6] & 7)].marker.gotoAndStop('selectedTo');
++v6;
}
pieceSelected = _root['piece_' + row + '_' + col];
} else {
return v7.length;
}
}
function kingInChess(rowKing, colKing, side) {
trace(' >>>> CHESS ' + side);
possibleRocade = false;
if (side == SIDE_PLAYER) {
messages.gotoAndStop('playerChess');
} else {
messages.gotoAndStop('computerChess');
}
var v4;
var v6 = true;
var v3 = 0;
while (v3 < 8) {
var v2 = 0;
while (v2 < 8) {
if ((chessBoard[v3][v2] & 1) == side && chessBoard[v3][v2] != VOID) {
v4 = calculateMoves(v3, v2, side);
disabled = true;
var v1 = 0;
while (v1 < v4.length) {
if (verifyKingState(v4[v1], side)) {
v6 = false;
}
++v1;
}
}
++v2;
}
++v3;
}
if (v6) {
loose(side);
}
}
function loose(side) {
if (side == SIDE_COMPUTER) {
computerLoose();
} else {
playerLoose();
}
}
function playerLoose() {
trace('Player Lost');
invalidateAll();
messages.gotoAndStop(3);
stop();
}
function search(side, depth, alpha, beta) {
var v6 = -INFINITY;
var v3 = new Array();
var v8 = null;
var v7;
var v11;
var v4 = 0;
while (v4 < 8) {
var v1 = 0;
while (v1 < 8) {
if ((chessBoard[v4][v1] & 1) == side && chessBoard[v4][v1] != VOID) {
v3 = v3.concat(calculateMoves(v4, v1, side));
}
++v1;
}
++v4;
}
v4 = 0;
while (v4 < v3.length) {
v8 = do_move(v3[v4], side);
if (depth == 0) {
v7 = (side == SIDE_COMPUTER) ? computerScore : playerScore;
} else {
v7 = -search(getOpponent(side), depth - 1, -1 * beta, -1 * alpha);
}
undo_move(v3[v4], side, v8);
if (v7 > v6) {
v6 = v7;
}
if (v6 > alpha) {
alpha = v6;
}
if (alpha >= beta) {
return alpha;
}
++v4;
}
return v6;
}
function shuffle(collection) {
var v4 = new Array();
var v3;
var v2;
while (collection.length != 0) {
v2 = Math.round(Math.random() * (collection.length - 1));
v3 = collection[v2];
collection.splice(v2, 1);
v4.push(v3);
}
false;
return v4;
}
function getOpponent(side) {
if (side == SIDE_PLAYER) {
return SIDE_COMPUTER;
} else {
return SIDE_PLAYER;
}
}
function undo_move(move, side, pieceCaptured) {
var v6 = move >> 9 & 7;
var v5 = move >> 6 & 7;
var v2 = move >> 3 & 7;
var v1 = move & 7;
if (side == SIDE_COMPUTER) {
chessBoard[v6][v5] = chessBoard[v2][v1];
if (pieceCaptured != VOID) {
chessBoard[v2][v1] = pieceCaptured;
playerScore += chessBoard[v2][v1] >> 1;
computerScore -= chessBoard[v2][v1] >> 1;
} else {
chessBoard[v2][v1] = VOID;
}
} else {
chessBoard[v6][v5] = chessBoard[v2][v1];
if (pieceCaptured != VOID) {
chessBoard[v2][v1] = pieceCaptured;
playerScore -= chessBoard[v2][v1] >> 1;
computerScore += chessBoard[v2][v1] >> 1;
} else {
chessBoard[v2][v1] = VOID;
}
}
}
function verifyKingState(move, side) {
var v8;
var v4;
var v6;
var v7;
v8 = do_move(move, side);
var v5 = 0;
while (v5 < 8) {
var v2 = 0;
while (v2 < 8) {
if ((chessBoard[v5][v2] & 1) == getOpponent(side) && chessBoard[v5][v2] != VOID) {
v4 = calculateMoves(v5, v2, getOpponent(side));
var v1 = 0;
while (v1 < v4.length) {
v6 = v4[v1] >> 3 & 7;
v7 = v4[v1] & 7;
if (chessBoard[v6][v7] == KING_W && side == SIDE_PLAYER || chessBoard[v6][v7] == KING_B && side == SIDE_COMPUTER) {
undo_move(move, side, v8);
return false;
}
++v1;
}
}
++v2;
}
++v5;
}
undo_move(move, side, v8);
return true;
}
VOID = -1;
PAWN_W = 5;
KNIGHT_W = 13;
ROOK_W = 21;
BISSHOP_W = 17;
QUEEN_W = 29;
KING_W = 2001;
PAWN_B = 4;
KNIGHT_B = 12;
ROOK_B = 20;
BISSHOP_B = 16;
QUEEN_B = 28;
KING_B = 4000;
SIDE_COMPUTER = 0;
SIDE_PLAYER = 1;
letters = new Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
possibleRocade = true;
pawnRules = new MovementRules();
pawnRules.isPawn = true;
pawnRules.up = 1;
knightRules = new MovementRules();
knightRules.isKnight = true;
rookRules = new MovementRules();
rookRules.up = 8;
rookRules.down = 8;
rookRules.left = 8;
rookRules.right = 8;
bisshopRules = new MovementRules();
bisshopRules.up_left = 8;
bisshopRules.up_right = 8;
bisshopRules.down_left = 8;
bisshopRules.down_right = 8;
queenRules = new MovementRules();
queenRules.up = 8;
queenRules.down = 8;
queenRules.left = 8;
queenRules.right = 8;
queenRules.up_left = 8;
queenRules.up_right = 8;
queenRules.down_left = 8;
queenRules.down_right = 8;
kingRules = new MovementRules();
kingRules.up = 1;
kingRules.down = 1;
kingRules.left = 1;
kingRules.right = 1;
kingRules.up_left = 1;
kingRules.up_right = 1;
kingRules.down_left = 1;
kingRules.down_right = 1;
poMo = new Array();
initChessBoard();
movePlayer();
myscroll.clearText();
stop();
}
frame 16 {
signal.gotoAndStop('comp');
messages.gotoAndStop(1);
computerScore = 0;
playerScore = 0;
var i = 0;
while (i < 8) {
j = 0;
while (j < 8) {
if (chessBoard[i][j] != VOID) {
if ((chessBoard[i][j] & 1) == SIDE_COMPUTER) {
computerScore += chessBoard[i][j] >> 1;
playerScore -= chessBoard[i][j] >> 1;
} else {
if ((chessBoard[i][j] & 1) == SIDE_PLAYER) {
computerScore -= chessBoard[i][j] >> 1;
playerScore += chessBoard[i][j] >> 1;
}
}
}
++j;
}
++i;
}
}
frame 17 {
computerScore = 0;
INFINITY = 10000000;
s = getTimer();
trace('my turn');
alpha = -INFINITY;
beta = INFINITY;
bestMove = null;
bestScore = -INFINITY;
allPossibleMoves = new Array();
capturedPiece = null;
moveScore;
compMoves;
side = SIDE_COMPUTER;
depth = MAXDEPTH;
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if ((chessBoard[i][j] & 1) == side && chessBoard[i][j] != VOID) {
compMoves = calculateMoves(i, j, side);
allPossibleMoves = allPossibleMoves.concat(compMoves);
}
++j;
}
++i;
}
allPossibleMoves = shuffle(allPossibleMoves);
index = 0;
}
frame 18 {
if (index < allPossibleMoves.length) {
progressBar.show(index, allPossibleMoves.length - 1);
capturedPiece = do_move(allPossibleMoves[index], side);
moveScore = -search(getOpponent(side), depth, -1 * beta, -1 * alpha);
} else {
gotoAndPlay('searchDone');
}
}
frame 19 {
undo_move(allPossibleMoves[index], side, capturedPiece);
if (moveScore > bestScore) {
bestScore = moveScore;
bestMove = allPossibleMoves[index];
}
if (bestScore > alpha) {
alpha = bestScore;
}
if (alpha >= beta) {
gotoAndPlay('searchDone');
}
++index;
gotoAndPlay(_currentframe - 1);
}
frame 20 {
trace('best: ' + bestMove);
delete allPossibleMoves;
trace('time ' + (getTimer() - s));
if (bestMove == null) {
messages.gotoAndStop('Pat');
}
isPat = checkChessState(SIDE_COMPUTER);
tempP = do_move(bestMove, SIDE_COMPUTER);
isNotMat = checkChessState(SIDE_COMPUTER);
undo_move(bestMove, SIDE_COMPUTER, tempP);
if (isNotMat) {
moveRealComputer(bestMove);
} else {
if (isPat) {
messages.gotoAndStop('Pat');
} else {
computerLoose();
}
}
stop();
}