Frame 1
Stage.showMenu = false;
_focusrect = false;
Frame 2
stop();
Instance of Symbol 34 MovieClip "mcLoad" in Frame 2
onClipEvent (load) {
btContinue._visible = false;
}
onClipEvent (enterFrame) {
btContinue._visible = false;
if (_parent._framesloaded == _parent._totalframes) {
_parent.gotoAndPlay("performanceTest");
}
}
Frame 10
sarbakan.utils.PerformanceWatcher.start(35);
mcLoad.btContinue._visible = false;
Frame 45
nPerformanceTestResult = sarbakan.utils.PerformanceWatcher.fps;
sarbakan.utils.PerformanceWatcher.stop();
Frame 46
mcLoad.mcLoading._visible = false;
mcLoad.btContinue._visible = true;
stop();
Frame 47
stop();
Symbol 33 Button
on (release) {
_parent.gotoAndStop("game");
}
Symbol 38 Button
on (keyPress "<Left>") {
return(undefined);
}
on (keyPress "<Right>") {
return(undefined);
}
on (keyPress "<Up>") {
return(undefined);
}
on (keyPress "<Down>") {
return(undefined);
}
Symbol 39 MovieClip [_pause] Frame 1
Symbol 41 MovieClip Frame 1
_visible = false;
Symbol 58 MovieClip Frame 2
stop();
Symbol 221 MovieClip Frame 1
stop();
Symbol 226 MovieClip Frame 1
stop();
Symbol 226 MovieClip Frame 15
oCosmo.onBubbleDisappeared();
Symbol 261 MovieClip Frame 15
stop();
Symbol 475 MovieClip Frame 19
stopOnLastFrame();
Symbol 612 MovieClip Frame 1
stop();
Symbol 635 MovieClip Frame 37
stop();
Symbol 773 MovieClip Frame 3
stopOnLastFrame();
Symbol 923 MovieClip Frame 5
stopOnLastFrame();
Symbol 933 MovieClip Frame 6
stop();
Symbol 951 MovieClip Frame 10
stop();
Symbol 1061 MovieClip Frame 4
stop();
Symbol 1175 MovieClip Frame 19
gotoAndPlay ("return");
Symbol 1257 MovieClip Frame 17
stop();
Symbol 1282 MovieClip Frame 1
stop();
Symbol 1282 MovieClip Frame 12
stop();
Symbol 1282 MovieClip Frame 23
stop();
Symbol 1282 MovieClip Frame 34
stop();
Symbol 1282 MovieClip Frame 45
stop();
Symbol 1285 MovieClip Frame 14
stop();
Symbol 1286 MovieClip Frame 14
stop();
Symbol 1302 MovieClip Frame 1
_global.C.oLevel.addFloor(new elements.Floor(this));
Symbol 1305 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Wall(this));
Symbol 1308 MovieClip Frame 1
Controller.getInstance().oLevel.addFloor(new elements.Floor(this, "bottleCap"));
Symbol 1309 MovieClip Frame 1
Controller.getInstance().oLevel.addFloor(new elements.Floor(this, "coin"));
Symbol 1312 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Lashes(this));
Symbol 1319 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Lump(this, GameData.LUMPS_DATA[0]));
Symbol 1321 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Lump(this, GameData.LUMPS_DATA[1]));
Symbol 1324 MovieClip Frame 1
var _oPos = {x:0, y:0};
_oPos.x = _x;
_oPos.y = _y;
_parent.localToGlobal(_oPos);
Controller.getInstance().oLevel.addJumpPoint(new AIJumpPoint(_oPos.x + 20, _oPos.y, 1, true));
Symbol 1325 MovieClip Frame 1
var _oPos = {x:0, y:0};
_oPos.x = _x;
_oPos.y = _y;
_parent.localToGlobal(_oPos);
Controller.getInstance().oLevel.addJumpPoint(new AIJumpPoint(_oPos.x - 20, _oPos.y, -1, true));
Symbol 1327 MovieClip Frame 3
stop();
Symbol 1328 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.EnnemyTimmase(this));
Symbol 1331 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.EnnemyFrancis(this));
Instance of Symbol 1328 MovieClip in Symbol 1333 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_RIGHT;
}
Instance of Symbol 1331 MovieClip in Symbol 1335 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_DOWN;
}
Instance of Symbol 1328 MovieClip in Symbol 1337 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_LEFT;
}
Symbol 1342 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.CosmoBonus(this));
Symbol 1344 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Lump(this, GameData.LUMPS_DATA[2]));
Symbol 1356 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Lump(this, GameData.LUMPS_DATA[3]));
Symbol 1358 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.Lump(this, GameData.LUMPS_DATA[4]));
Instance of Symbol 1331 MovieClip in Symbol 1361 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_DOWN;
}
Instance of Symbol 1328 MovieClip in Symbol 1363 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_TOP;
}
Instance of Symbol 1328 MovieClip in Symbol 1375 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_DOWN;
}
Instance of Symbol 1331 MovieClip in Symbol 1377 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_TOP;
}
Instance of Symbol 1331 MovieClip in Symbol 1379 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_LEFT;
}
Symbol 1398 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.EnnemyTimmaseSuper(this));
Symbol 1399 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.EnnemyFrancisSuper(this));
Symbol 1400 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.EnnemyFrancisSuper(this));
Instance of Symbol 1398 MovieClip in Symbol 1401 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_TOP;
}
Instance of Symbol 1328 MovieClip in Symbol 1403 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_LEFT;
}
Instance of Symbol 1331 MovieClip in Symbol 1407 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_RIGHT;
}
Instance of Symbol 1398 MovieClip in Symbol 1409 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_RIGHT;
}
Instance of Symbol 1398 MovieClip in Symbol 1410 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_DOWN;
}
Instance of Symbol 1331 MovieClip in Symbol 1411 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_TOP;
}
Instance of Symbol 1398 MovieClip in Symbol 1413 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_LEFT;
}
Instance of Symbol 1400 MovieClip in Symbol 1430 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_TOP;
}
Instance of Symbol 1400 MovieClip in Symbol 1431 MovieClip Frame 1
onClipEvent (load) {
bSneak = true;
nDirection = GameData.DIRECTION_LEFT;
}
Instance of Symbol 1400 MovieClip in Symbol 1432 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_DOWN;
}
Instance of Symbol 1398 MovieClip in Symbol 1433 MovieClip Frame 1
onClipEvent (load) {
bTimed = true;
nDelay = _parent._name;
nDirection = GameData.DIRECTION_TOP;
}
Symbol 1456 MovieClip Frame 1
Controller.getInstance().oLevel.addFloor(new elements.Floor(this, "coinBoss"));
Symbol 1457 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.BossVicky(this));
Symbol 1461 MovieClip Frame 1
Controller.getInstance().oLevel.addInteractiveElement(new elements.characters.BossTapeworm(this));
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 2
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 8
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 14
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 20
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 26
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 32
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 38
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 44
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 50
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 56
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 62
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 68
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 74
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 80
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 86
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 92
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 98
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 104
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 110
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 116
onClipEvent (load) {
this.bFinal = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 122
onClipEvent (load) {
this.bRespawn = true;
}
Instance of Symbol 1342 MovieClip in Symbol 1462 MovieClip [levelData] Frame 128
onClipEvent (load) {
this.bRespawn = true;
}
Symbol 1513 MovieClip Frame 1
stop();
Symbol 1975 MovieClip [__Packages.sarbakan.visual.element.BaseElement] Frame 0
class sarbakan.visual.element.BaseElement
{
static var nNextID;
var id, oAttachProperties, oOwner, mc, sLinkage, nAttachDepth;
function BaseElement (_sID) {
id = _sID;
oAttachProperties = {};
}
function init() {
}
function setOwner(_oOwner) {
oOwner = _oOwner;
}
function setMC(_mc) {
mc = _mc;
if (mc.onElementCreated) {
mc.onElementCreated(this);
delete mc.onElementCreated;
}
}
function getMC() {
return(mc);
}
function setLinkage(_sLinkage) {
sLinkage = _sLinkage;
}
function attachMC(_mcAttach) {
if (nAttachDepth == undefined) {
nAttachDepth = oOwner.getNextDepth();
oOwner.reserveDepth(nAttachDepth);
}
if (_mcAttach == undefined) {
_mcAttach = oOwner.mc;
}
setMC(_mcAttach.attachMovie(sLinkage, id, nAttachDepth, oAttachProperties));
}
function detachMC() {
if (mc != undefined) {
oAttachProperties = {_x:mc._x, _y:mc._y, _xscale:mc._xscale, _yscale:mc._yscale, _height:mc._height, _width:mc._width, _rotation:mc._rotation, _alpha:mc._alpha, _visible:mc._visible};
mc.removeMovieClip();
}
setMC(undefined);
}
function removeReferenceMC() {
mc.swapDepths(16383);
detachMC();
}
function toString() {
return(("[Element " + id) + "]");
}
static function resetID() {
nNextID = undefined;
}
static function getNextID() {
if (!nNextID) {
nNextID = 0;
}
return(nNextID++);
}
}
Symbol 1976 MovieClip [__Packages.sarbakan.visual.layer.Layer] Frame 0
class sarbakan.visual.layer.Layer
{
var mc, oDynamicElements, oStaticElements, oCollisionMaps, oActivationManager, nHighestDepth, aReservedDepth, nOriginalX, nOriginalY, nStageWHalf, nStageHHalf;
function Layer (_mc, _oActivationManager) {
mc = _mc;
oDynamicElements = {};
oStaticElements = [];
oCollisionMaps = {};
oActivationManager = _oActivationManager;
nHighestDepth = 0;
aReservedDepth = [];
nOriginalX = _mc._x;
nOriginalY = _mc._y;
}
function init(_nStageW, _nStageH) {
nStageWHalf = _nStageW / 2;
nStageHHalf = _nStageH / 2;
oActivationManager.init(_nStageW, _nStageH);
}
function addDynamicElement(_oElement) {
oDynamicElements[_oElement.id] = _oElement;
_oElement.setOwner(this);
_oElement.init();
if (oDynamicElements[_oElement.id] != undefined) {
if (!_oElement.bAlwaysActive) {
var _local3 = _oElement.getGlobalPos(_oElement.mc);
oActivationManager.addDynamicElement(_oElement, _local3.x, _local3.y, _oElement.mc._width, _oElement.mc._height);
} else {
oActivationManager.addAlwaysActiveElement(_oElement);
}
_oElement.disable();
updateActivation(true);
}
}
function changeDynamicElementID(_oElement, _sNewID) {
delete oDynamicElements[_oElement.id];
_oElement.id = _sNewID;
oDynamicElements[_oElement.id] = _oElement;
}
function removeDynamicElement(_oElement) {
if (_oElement.bAlwaysActive) {
oActivationManager.removeAlwaysActiveElement(_oElement);
} else {
oActivationManager.removeDynamicElement(_oElement);
}
delete oDynamicElements[_oElement.id];
}
function addStaticElement(_oElement) {
_oElement.setOwner(this);
_oElement.init();
oActivationManager.addStaticElement(_oElement, _oElement.mc._x, _oElement.mc._y, _oElement.mc._width, _oElement.mc._height);
_oElement.disable();
updateActivation(true);
oStaticElements.push(_oElement);
}
function getDisplacementX() {
return(nOriginalX - mc._x);
}
function getDisplacementY() {
return(nOriginalY - mc._y);
}
function addCollisionMap(_oCollisionMap) {
oCollisionMaps[_oCollisionMap.id] = _oCollisionMap;
}
function getCollisionMap(_sCollisionMapID) {
return(oCollisionMaps[_sCollisionMapID]);
}
function reserveDepth(_nDepth) {
if (_nDepth > nHighestDepth) {
nHighestDepth = _nDepth;
}
aReservedDepth[_nDepth] = true;
}
function isDepthReserved(_nDepth) {
return(aReservedDepth[_nDepth] == true);
}
function getNextDepth() {
return(++nHighestDepth);
}
function update() {
updateActivation(false);
var _local2 = oActivationManager.getActiveElements();
for (var _local3 in _local2) {
if (_local2[_local3].bGarbaged != true) {
_local2[_local3].update();
}
}
}
function reset() {
for (var _local2 in oDynamicElements) {
oDynamicElements[_local2].reset();
}
updateActivation(true);
}
function pause() {
var _local2;
_local2 = oActivationManager.getActiveElements();
for (var _local3 in _local2) {
_local2[_local3].pause();
}
}
function unpause() {
var _local2;
_local2 = oActivationManager.getActiveElements();
for (var _local3 in _local2) {
_local2[_local3].unpause();
}
}
function destroy() {
for (var _local2 in oDynamicElements) {
oDynamicElements[_local2].remove();
}
for (var _local2 in oStaticElements) {
oStaticElements[_local2].removeMovieClip();
}
for (var _local2 in oCollisionMaps) {
oCollisionMaps[_local2].remove();
}
mc._x = nOriginalX;
mc._y = nOriginalY;
}
function updateActivation(_bForceUpdate) {
oActivationManager.updateActivation((mc._x - nStageWHalf) * -1, (mc._y - nStageHHalf) * -1, _bForceUpdate);
}
}
Symbol 1977 MovieClip [__Packages.sarbakan.visual.activation.ActivationManager] Frame 0
class sarbakan.visual.activation.ActivationManager
{
var nZoneWidth, nZoneHeight;
function ActivationManager () {
}
function init(_nZoneWidth, _nZoneHeight) {
nZoneWidth = _nZoneWidth;
nZoneHeight = _nZoneHeight;
}
function addDynamicElement(_oElement, _nX, _nY, _nWidth, _nHeight) {
}
function updateDynamicElement(_oElement, _nX, _nY, _nWidth, _nHeight) {
removeDynamicElement(_oElement);
addDynamicElement(_oElement, _nX, _nY, _nWidth, _nHeight);
}
function addAlwaysActiveElement(_oElement) {
}
function removeAlwaysActiveElement(_oElement) {
}
function removeDynamicElement(_oElement) {
}
function addStaticElement(_oElement, _nX, _nY, _nWidth, _nHeight) {
}
function removeStaticElement(_oElement) {
}
function updateActivation(_nX, _nY) {
}
function getActiveElements() {
return([]);
}
}
Symbol 1978 MovieClip [__Packages.sarbakan.visual.element.DynamicElement] Frame 0
class sarbakan.visual.element.DynamicElement extends sarbakan.visual.element.BaseElement
{
var nSpeedX, nSpeedXLast, nSpeedY, nSpeedYLast, bAlwaysActive, bStaticMovieClip, bAnimStopped, bKeepStateOnEnable, mc, sState, sNextState, detachMC, bNoPause, bGarbaged, oOwner, oAttachProperties;
function DynamicElement (_sID) {
super(_sID);
nSpeedX = 0;
nSpeedXLast = 0;
nSpeedY = 0;
nSpeedYLast = 0;
bAlwaysActive = false;
bStaticMovieClip = false;
bAnimStopped = false;
bKeepStateOnEnable = false;
enablePause();
}
function update() {
updateState();
updateMove();
}
function elementOnScreen() {
var _local2 = {x:0, y:0};
_local2 = {x:mc._x, y:mc._y};
mc._parent.localToGlobal(_local2);
var _local4 = _local2.x;
var _local3 = _local2.y;
var _local6 = _local4 + mc.state._width;
var _local5 = _local3 + mc.state._height;
return((((_local4 >= 0) && (_local4 <= 600)) && ((_local3 >= 0) && (_local3 <= 300))) || (((_local6 >= 0) && (_local6 <= 600)) && ((_local5 >= 0) && (_local5 <= 300))));
}
function enable() {
if (!isActive()) {
attachMC();
if (bKeepStateOnEnable && (sState != undefined)) {
setState(sState);
} else if (sNextState) {
setState(sNextState);
} else {
setState(DEFAULT_STATE);
}
updateState();
onEnable();
}
}
function disable() {
if (isActive()) {
detachMC();
onDisable();
}
}
function isActive() {
return(mc != undefined);
}
function pause() {
mc.state.stop();
}
function unpause() {
if (!bAnimStopped) {
mc.state.play();
}
}
function disablePause() {
bNoPause = true;
bAnimStopped = true;
}
function enablePause() {
bNoPause = false;
}
function stopOnLastFrame() {
mc.state.stop();
bAnimStopped = true;
}
function remove() {
bGarbaged = true;
disable();
if (!bStaticMovieClip) {
mc.removeMovieClip();
}
oOwner.removeDynamicElement(this);
}
function reset() {
}
function setMC(_mc) {
super.setMC(_mc);
if (sState) {
sNextState = sState;
} else {
sNextState = DEFAULT_STATE;
}
if (isActive()) {
updateState();
}
}
function attachMC() {
super.attachMC();
setState(DEFAULT_STATE);
}
function getElement(_sElementID) {
return(oOwner.oDynamicElements[_sElementID]);
}
function setState(_sState) {
sNextState = _sState;
}
function getState() {
return(sState);
}
function stateStarting() {
return(mc.state._currentframe == 1);
}
function stateFinished() {
return(mc.state._currentframe == mc.state._totalframes);
}
function stateCurrentFrame() {
return(mc.state._currentframe);
}
function stateIsNot() {
var _local3 = false;
for (var _local4 in arguments) {
if (arguments[_local4] == sState) {
_local3 = true;
break;
}
}
return(!_local3);
}
function getCoord() {
var _local2 = {};
if (mc != undefined) {
_local2.x = mc._x;
_local2.y = mc._y;
} else {
_local2.x = oAttachProperties._x;
_local2.y = oAttachProperties._y;
}
return(_local2);
}
function setCoord(_oPos) {
mc._x = _oPos.x;
mc._y = _oPos.y;
}
function teleportTo(_nX, _nY) {
if (isActive()) {
mc._x = _nX;
mc._y = _nY;
updatePosInActivation();
} else {
oAttachProperties._x = _nX;
oAttachProperties._y = _nY;
attachMC();
updatePosInActivation();
detachMC();
}
oOwner.updateActivation(true);
}
function getGlobalPos(_mc) {
var _local1 = new Object();
_local1.x = 0;
_local1.y = 0;
_local1.x = _mc._x;
_local1.y = _mc._y;
_mc._parent.localToGlobal(_local1);
return(_local1);
}
function collideWithMap(_sCollisionMapID) {
var _local3;
if (typeof(arguments[1]) == "movieclip") {
_local3 = getGlobalPos(arguments[1]);
} else if (typeof(arguments[1]) == "object") {
_local3 = arguments[1];
} else {
_local3 = getGlobalPos(mc);
}
return(oOwner.oCollisionMaps[_sCollisionMapID].mc.hitTest(_local3.x, _local3.y, true));
}
function collideWithElement(_sElementID) {
var _local3;
if (arguments[1]) {
_local3 = getGlobalPos(arguments[1]);
} else {
_local3 = getGlobalPos(mc);
}
return(oOwner.oDynamicElements[_sElementID].mc.hitTest(_local3.x, _local3.y, false));
}
function collideWithElementBox(_sElementID) {
var _local3;
if (arguments[1]) {
_local3 = arguments[1];
} else {
_local3 = mc;
}
return(oOwner.oDynamicElements[_sElementID].mc.hitTest(_local3));
}
function onEnable() {
}
function onDisable() {
}
function updateState() {
if (sNextState != undefined) {
sState = sNextState;
sNextState = undefined;
mc.gotoAndStop(sState);
if (!bNoPause) {
bAnimStopped = false;
}
mc.state.oOwner = this;
mc.state.stopOnLastFrame = sarbakan.utils.Delegate.create(this, stopOnLastFrame);
}
this[sState]();
}
function updateMove() {
mc._x = nSpeedX + mc._x;
mc._y = nSpeedY + mc._y;
if ((!bAlwaysActive) && ((nSpeedX != 0) || (nSpeedY != 0))) {
updatePosInActivation();
}
}
function updatePosInActivation() {
var _local2 = getGlobalPos(mc);
_local2.x = _local2.x + oOwner.getDisplacementX();
_local2.y = _local2.y + oOwner.getDisplacementY();
oOwner.oActivationManager.updateDynamicElement(this, _local2.x, _local2.y, mc._width, mc._height);
}
var DEFAULT_STATE = "idle";
}
Symbol 1979 MovieClip [__Packages.sarbakan.utils.Delegate] Frame 0
class sarbakan.utils.Delegate extends Object
{
var func;
function Delegate () {
super();
}
function DelegateArgs(f) {
func = f;
}
static function create(obj, func) {
var _local2 = function () {
var _local3 = arguments.callee.target;
var _local4 = arguments.callee.func;
var _local2 = arguments.callee.arg;
_local2 = _local2.concat(arguments);
return(_local4.apply(_local3, _local2));
};
_local2.target = obj;
_local2.func = func;
_local2.arg = arguments.slice(2);
return(_local2);
}
function createDelegate(obj) {
return(create(obj, func));
}
}
Symbol 1980 MovieClip [__Packages.sarbakan.visual.layer.CollisionMap] Frame 0
class sarbakan.visual.layer.CollisionMap
{
static var nDepth;
var id, oLayer, mc, nColor;
function CollisionMap (_sID, _oLayer, _nColor) {
if (!nDepth) {
nDepth = BASE_DEPTH;
}
id = _sID;
oLayer = _oLayer;
mc = oLayer.mc.createEmptyMovieClip(id, nDepth++);
mc._visible = false;
if (!_nColor) {
nColor = 16711935 /* 0xFF00FF */;
} else {
nColor = _nColor;
}
}
function show(_nAlpha) {
mc._visible = true;
if (_nAlpha) {
mc._alpha = _nAlpha;
} else {
mc._alpha = 100;
}
}
function hide() {
mc._visible = false;
mc._alpha = 100;
}
function drawRect(_nX, _nY, _nWidth, _nHeight) {
mc.moveTo(_nX, _nY);
mc.beginFill(nColor);
mc.lineTo(_nX + _nWidth, _nY);
mc.lineTo(_nX + _nWidth, _nY + _nHeight);
mc.lineTo(_nX, _nY + _nHeight);
mc.lineTo(_nX, _nY);
}
function setNewSource(_mcSource) {
remove();
mc = _mcSource;
mc._visible = false;
}
function attachMC(_sLinkage, _nX, _nY, _sName) {
if (!_sName) {
_sName = String(mc.getNextHighestDepth());
}
return(mc.attachMovie(_sLinkage, _sName, mc.getNextHighestDepth(), {_x:_nX, _y:_nY}));
}
function remove() {
mc.removeMovieClip();
}
function getMC() {
return(mc);
}
static var BASE_DEPTH = 64000;
}
Symbol 1981 MovieClip [__Packages.sarbakan.visual.element.StaticElement] Frame 0
class sarbakan.visual.element.StaticElement extends sarbakan.visual.element.BaseElement
{
var attachMC, detachMC, mc;
function StaticElement (_sID) {
super(_sID);
}
function enable() {
if (!isActive()) {
attachMC();
}
}
function disable() {
if (isActive()) {
detachMC();
}
}
function isActive() {
return(mc != undefined);
}
}
Symbol 1982 MovieClip [__Packages.elements.Floor] Frame 0
class elements.Floor extends sarbakan.visual.element.StaticElement
{
var setLinkage, oAttachProperties, attachMC, oOwner;
function Floor (_mc, _sLinkage) {
super("floor" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage(_sLinkage);
var _local4 = {x:0, y:0};
_local4.x = _mc._x;
_local4.y = _mc._y;
_mc._parent.localToGlobal(_local4);
oAttachProperties._x = _local4.x - (_mc._width / 2);
oAttachProperties._y = _local4.y - (_mc._height / 2);
var _local5 = Controller.getInstance().oLevel.oLayerGame.oCollisionMaps.floor;
_local5.drawRect(_local4.x - (_mc._width / 2), _local4.y - (_mc._height / 2), _mc._width, _mc._height);
Controller.getInstance().oLevel.addJumpPoint(new AIJumpPoint(_local4.x - (_mc._width / 2), _local4.y - (_mc._height / 2), 1, false));
Controller.getInstance().oLevel.addJumpPoint(new AIJumpPoint(_local4.x + (_mc._width / 2), _local4.y + (_mc._height / 2), -1, false));
}
function init() {
attachMC(oOwner.mc.mcBg.mcBack);
}
function enable() {
}
function disable() {
}
}
Symbol 1983 MovieClip [__Packages.Controller] Frame 0
class Controller
{
static var oInstance;
var mcBase, oPackaging, oUnlockedCodes, bMultiplayer, bTransitionningBetweenLevels, nDifficultyLevel, nScore, nTimmyEnergy, oMusic, oLevel, bInGame, oHUD, aLevelSequence, bEasterEgg, aUnplayedLevels;
function Controller (_mcBase) {
oInstance = this;
mcBase = _mcBase;
mcBase.gotoAndStop("packaging");
mcBase.onEnterFrame = sarbakan.utils.Delegate.create(this, update);
sarbakan.sound.SoundManager.init(mcBase);
initMusic("musicPackaging");
oPackaging = new Packaging(mcBase.mcPackaging);
oUnlockedCodes = {data:{PAPPY:true}};
oPackaging.clickSound();
}
static function getInstance() {
return(oInstance);
}
function startGame(_bMultiplayer) {
bMultiplayer = _bMultiplayer;
bTransitionningBetweenLevels = false;
nDifficultyLevel = 1;
nScore = 0;
delete nTimmyEnergy;
resetUnplayedLevels();
setLevelSequence();
transitionToNextLevel();
}
function continueGame(_bMultiplayer) {
bMultiplayer = _bMultiplayer;
bTransitionningBetweenLevels = false;
nDifficultyLevel++;
setLevelSequence();
transitionToNextLevel();
}
function addScore(_nAmount) {
nScore = nScore + _nAmount;
}
function unlockCode(_sCodeID) {
if (_sCodeID == "RESET") {
for (var _local2 in oUnlockedCodes.data) {
oUnlockedCodes.data[_local2] = false;
}
} else {
oUnlockedCodes.data[_sCodeID] = true;
}
}
function initMusic(_sMusicID) {
sarbakan.sound.SoundManager.stop(oMusic);
var _local2;
if (_sMusicID == "musicTransition") {
_local2 = 1;
} else {
_local2 = 99999999 /* 0x5F5E0FF */;
}
oMusic = sarbakan.sound.SoundManager.play(_sMusicID, GameData.VOLUME_MUSIC, _local2, true);
}
function setPackagingQuality() {
_quality = "high";
}
function setInGameQuality() {
if (mcBase._parent.nPerformanceTestResult < GameData.FRAME_PERFORMANCE_THRESHOLD) {
_quality = "medium";
} else {
_quality = "high";
}
}
function onLevelDone() {
addScore(GameData.SCORE_LEVEL);
transitionToNextLevel();
oLevel.destroy();
nTimmyEnergy = getTimmy().nEnergy;
bInGame = false;
}
function onLose() {
bInGame = false;
sarbakan.visual.PauseManager.pause();
oPackaging.goto("lose");
}
function update() {
if (!sarbakan.visual.PauseManager.bPaused) {
oLevel.update();
oHUD.update();
oPackaging.update();
}
}
function transitionToNextLevel() {
if (!bTransitionningBetweenLevels) {
initMusic("musicTransition");
if (aLevelSequence.length > 0) {
oPackaging.transitionTo("normal", sarbakan.utils.Delegate.create(this, initNextLevel));
var _local3 = Number(String(aLevelSequence[0]).substring(0, 1));
if ((_local3 != 4) && (_local3 != 5)) {
var _local2;
if (String(aLevelSequence[0]).substring(0, 4) == "boss") {
_local2 = String(aLevelSequence[0]).substring(0, 5);
} else {
_local2 = String(aLevelSequence[0]).substring(0, 1);
}
if (bMultiplayer) {
_local2 = _local2 + "_multi";
} else {
_local2 = _local2 + "_single";
}
oPackaging.oTransition.mc.sTipID = _local2;
}
} else {
oPackaging.goto("win");
}
sarbakan.visual.PauseManager.pause();
bTransitionningBetweenLevels = true;
}
}
function initNextLevel() {
initLevel(String(aLevelSequence.shift()), bMultiplayer, oUnlockedCodes.data.PAPPY);
if (nTimmyEnergy != undefined) {
getTimmy().setEnergy(nTimmyEnergy);
}
}
function initLevel(_sLevelID, _bMultiplayer, _bCode) {
destroyLevel();
setInGameQuality();
mcBase.gotoAndStop("game");
oLevel = new LevelManager(mcBase.mcGame, _sLevelID, _bMultiplayer, _bCode);
oLevel.init();
if (_sLevelID.substring(0, 4) == "boss") {
initMusic("musicBoss");
} else {
initMusic("musicInGame");
}
oHUD = new HUD(mcBase.mcHUD);
bTransitionningBetweenLevels = false;
bEasterEgg = false;
bInGame = true;
}
function destroyLevel() {
mcBase.gotoAndStop("reset");
sarbakan.visual.PauseManager.unpause();
if (oLevel != undefined) {
delete oLevel;
oLevel.destroy();
}
}
function setLevelSequence() {
aLevelSequence = [];
if (nDifficultyLevel < GameData.DIFFICULTY_LEVELS) {
aLevelSequence.push(getRandomUnplayedLevel(1));
aLevelSequence.push(getRandomUnplayedLevel(2));
aLevelSequence.push(getRandomUnplayedLevel(3));
aLevelSequence.push("boss1");
aLevelSequence.push(getRandomUnplayedLevel(4));
aLevelSequence.push(getRandomUnplayedLevel(5));
aLevelSequence.push("boss2");
} else {
resetUnplayedLevels();
aLevelSequence.push(getRandomUnplayedLevel(1));
aLevelSequence.push(getRandomUnplayedLevel(1));
aLevelSequence.push(getRandomUnplayedLevel(2));
aLevelSequence.push(getRandomUnplayedLevel(2));
aLevelSequence.push(getRandomUnplayedLevel(3));
aLevelSequence.push(getRandomUnplayedLevel(3));
aLevelSequence.push("boss1");
aLevelSequence.push(getRandomUnplayedLevel(4));
aLevelSequence.push(getRandomUnplayedLevel(4));
aLevelSequence.push(getRandomUnplayedLevel(5));
aLevelSequence.push(getRandomUnplayedLevel(5));
aLevelSequence.push("boss2");
}
}
function getRandomUnplayedLevel(_nLevelNumber) {
var _local2 = aUnplayedLevels[_nLevelNumber - 1];
return(_local2.splice(sarbakan.utils.MoreMath.random(0, _local2.length - 1), 1));
}
function resetUnplayedLevels() {
aUnplayedLevels = [];
var _local2 = 0;
while (_local2 < 5) {
aUnplayedLevels[_local2] = GameData.LEVELS[_local2].slice();
_local2++;
}
}
function getTimmy() {
return(oLevel.oLayerGame.oDynamicElements.timmy);
}
}
Symbol 1984 MovieClip [__Packages.Packaging] Frame 0
class Packaging
{
var mc, bMuted, oCtrl, oTransition, oSecretCodeInterface, nCurrentScreen, oHiScoreBoard, bContinue;
function Packaging (_mc) {
mc = _mc;
bMuted = false;
oCtrl = Controller.getInstance();
oTransition = new sarbakan.packaging.TransitionManager(mc._parent.mcTransition);
goto("title");
_global.oHS = new objHSNick();
_global.oHS.fDoHSInit();
}
function update() {
oSecretCodeInterface.update();
}
function goto(_sDest, _sTransitionToUse) {
oCtrl.setPackagingQuality();
nCurrentScreen = _sDest;
if (_sTransitionToUse != undefined) {
transitionTo(_sTransitionToUse, sarbakan.utils.Delegate.create(this, goto, _sDest));
} else {
mc.gotoAndStop(_sDest);
initScreen(_sDest);
}
if (((_sDest != "menu") && (_sDest != "menuQuit")) && (!(_global.C.isInGame() && ((_sDest == "instructions1") || (_sDest == "instructions2"))))) {
_global.C.initPackagingMusic();
}
}
function hide() {
oCtrl.setInGameQuality();
mc.gotoAndStop("hidden");
if (oHiScoreBoard) {
delete oHiScoreBoard;
}
}
function transitionTo(_sTransitionID, _fListener) {
var _local2 = {middleListener:_fListener, inID:"in" + _sTransitionID, outID:"out" + _sTransitionID};
oTransition.startTransition(_local2);
}
function clickSound() {
sarbakan.sound.SoundManager.play("click", GameData.VOLUME_BUTTON_CLICK, 1, false);
}
function onButtonPlay() {
clickSound();
if (oCtrl.bInGame) {
hide();
oCtrl.oHUD.hideMenu("hidden");
} else {
bContinue = false;
goto("start");
}
}
function onButtonBack() {
clickSound();
goto("title");
}
function onButtonContinue() {
clickSound();
goto("start");
}
function onButtonCode() {
clickSound();
oSecretCodeInterface = new SecretCodeInterface(mc.mcCode);
oSecretCodeInterface.show();
}
function onButtonInstructions() {
clickSound();
goto("instructions1");
}
function onButtonInstructionsNext() {
clickSound();
goto("instructions2");
}
function onButtonInstructionsNextB() {
clickSound();
goto("instructions2-b");
}
function onButtonInstructions3_1P() {
clickSound();
goto("instructions3-1p");
}
function onButtonInstructions3_2P() {
clickSound();
goto("instructions3-2p");
}
function onButtonInstructions4_1P() {
clickSound();
goto("instructions4-1p");
}
function onButtonInstructions4_2P() {
clickSound();
goto("instructions4-2p");
}
function onButtonStart(_bMultiplayer) {
clickSound();
if (bContinue == true) {
oCtrl.continueGame(_bMultiplayer);
} else {
oCtrl.startGame(_bMultiplayer);
}
hide();
}
function onButtonScore(_bFromTitle, _bSubmit) {
clickSound();
goto("hiscore");
if (_bSubmit) {
mc.mcScreen.btScoreSubmit._visible = false;
}
_global.oHS.bSubmitHS = _bSubmit;
_global.oHS.fDoViewHS(mc, true);
initHiScore(_bFromTitle);
}
function onButtonScoreFromScore() {
clickSound();
mc.mcScreen.btScoreSubmit._visible = false;
oHiScoreBoard.clearScores();
_global.oHS.bSubmitHS = true;
_global.oHS.fDoViewHS(mc, true);
initHiScore(false);
}
function initScreen(_sDest) {
switch (_sDest) {
case "title" :
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
mc.mcScreen.btScoreView.onRelease = sarbakan.utils.Delegate.create(this, onButtonScore, true, false);
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions);
mc.mcScreen.btCode.onRelease = sarbakan.utils.Delegate.create(this, onButtonCode);
break;
case "instructions1" :
if (Controller.getInstance().bMultiplayer != undefined) {
mc.mcScreen.btNext.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructionsNext);
} else {
mc.mcScreen.btNext.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructionsNextB);
}
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "instructions2-b" :
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "instructions2" :
if (Controller.getInstance().bMultiplayer) {
mc.mcScreen.btNext.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions3_2P);
} else {
mc.mcScreen.btNext.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions3_1P);
}
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "instructions3-1p" :
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructionsNext);
mc.mcScreen.btNext.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions4_1P);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "instructions3-2p" :
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructionsNext);
mc.mcScreen.btNext.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions4_2P);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "instructions4-1p" :
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions3_1P);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "instructions4-2p" :
mc.mcScreen.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onButtonInstructions3_2P);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
break;
case "start" :
mc.mcScreen.btStartSingle.onRelease = sarbakan.utils.Delegate.create(this, onButtonStart, false);
mc.mcScreen.btStartMulti.onRelease = sarbakan.utils.Delegate.create(this, onButtonStart, true);
break;
case "win" :
bContinue = true;
mc.mcScreen.score = Number(Controller.getInstance().nScore);
oCtrl.oLevel.destroy();
oCtrl.initMusic("musicPackaging");
if (oCtrl.nDifficultyLevel < GameData.DIFFICULTY_LEVELS) {
mc.mcScreen.mcMsg.gotoAndStop(1);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonContinue);
} else {
mc.mcScreen.mcMsg.gotoAndStop(2);
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
}
mc.mcScreen.btScoreView.onRelease = sarbakan.utils.Delegate.create(this, onButtonScore, false, false);
mc.mcScreen.btScoreSubmit.onRelease = sarbakan.utils.Delegate.create(this, onButtonScore, false, true);
if (!_global.gProxyObj.getIsLoggedIn()) {
mc.mcScreen.btScoreSubmit._visible = false;
}
break;
case "lose" :
bContinue = false;
mc.mcScreen.score = Number(Controller.getInstance().nScore);
oCtrl.oLevel.destroy();
oCtrl.initMusic("musicPackaging");
mc.mcScreen.mcMsg.gotoAndStop(sarbakan.utils.MoreMath.random(1, 2));
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
mc.mcScreen.btScoreView.onRelease = sarbakan.utils.Delegate.create(this, onButtonScore, false, false);
mc.mcScreen.btScoreSubmit.onRelease = sarbakan.utils.Delegate.create(this, onButtonScore, false, true);
if (!_global.gProxyObj.getIsLoggedIn()) {
mc.mcScreen.btScoreSubmit._visible = false;
}
break;
case "hiscore" :
if (oCtrl.nDifficultyLevel < GameData.DIFFICULTY_LEVELS) {
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonContinue);
} else {
mc.mcScreen.btPlay.onRelease = sarbakan.utils.Delegate.create(this, onButtonPlay);
}
mc.mcScreen.btScoreSubmit.onRelease = sarbakan.utils.Delegate.create(this, onButtonScoreFromScore, false, true);
if (_global.gProxyObj.getIsLoggedIn()) {
break;
}
mc.mcScreen.btScoreSubmit._visible = false;
}
}
function initHiScore(_bFromTitle) {
oHiScoreBoard = new sarbakan.packaging.HighScoreBoard(mc.mcScreen.mcHiScore, mc.mcScreen.mcHiScore.mcLine, 180);
oHiScoreBoard.setScrollButtons(mc.mcScreen.mcScroll.btUp, mc.mcScreen.mcScroll.btDown);
oHiScoreBoard.setMargin(-4);
_global.oHS.fSetHSBoard(mc);
_global.oHS.bGetHS = true;
if (_bFromTitle) {
mc.mcScreen.btRestart._visible = false;
mc.mcScreen.btScoreSubmit._visible = false;
mc.mcScreen.btPlay._visible = false;
mc.mcScreen.btBack.onRelease = sarbakan.utils.Delegate.create(this, onButtonBack);
} else {
mc.mcScreen.btBack._visible = false;
}
if ((_global.oHS.bGetHS == true) && (_global.oHS.bSubmitHS != true)) {
_global.oHS.bGetHS = false;
_global.oHS.getScores();
} else if (_global.oHS.bSubmitHS == true) {
_global.oHS.bSubmitHS = false;
_global.oHS.submitScore(oCtrl.nScore);
}
}
}
Symbol 1985 MovieClip [__Packages.sarbakan.packaging.TransitionManager] Frame 0
class sarbakan.packaging.TransitionManager
{
var mc, oEnterFrameListener, oCurrentTransition, sState;
function TransitionManager (_mc) {
mc = _mc;
mc.gotoAndStop("inactive");
mx.transitions.OnEnterFrameBeacon.init();
oEnterFrameListener = new Object();
oEnterFrameListener.onEnterFrame = sarbakan.utils.Delegate.create(this, update);
}
function startTransition(_oTransition) {
oCurrentTransition = _oTransition;
sState = "Out";
mc.gotoAndStop(oCurrentTransition.outID);
MovieClip.removeListener(oEnterFrameListener);
MovieClip.addListener(oEnterFrameListener);
}
function endTransition() {
MovieClip.removeListener(oEnterFrameListener);
if (typeof(oCurrentTransition.endListener) != "function") {
for (var _local2 in oCurrentTransition.endListener) {
oCurrentTransition.endListener[_local2];
}
} else {
oCurrentTransition.endListener();
}
delete oCurrentTransition;
sState = "";
mc.gotoAndStop("inactive");
}
function update() {
if (sState == "Out") {
if (stateFinished()) {
mc.gotoAndStop(oCurrentTransition.inID);
sState = "In";
if (typeof(oCurrentTransition.middleListener) != "function") {
for (var _local2 in oCurrentTransition.middleListener) {
oCurrentTransition.middleListener[_local2]();
}
} else {
oCurrentTransition.middleListener();
}
}
} else if (sState == "In") {
if (stateFinished()) {
endTransition();
}
}
}
function stateStarting() {
return(mc.state._currentframe == 1);
}
function stateFinished() {
return(mc.state._currentframe == mc.state._totalframes);
}
}
Symbol 1986 MovieClip [__Packages.mx.transitions.OnEnterFrameBeacon] Frame 0
class mx.transitions.OnEnterFrameBeacon
{
function OnEnterFrameBeacon () {
}
static function init() {
var _local4 = _global.MovieClip;
if (!_root.__OnEnterFrameBeacon) {
mx.transitions.BroadcasterMX.initialize(_local4);
var _local3 = _root.createEmptyMovieClip("__OnEnterFrameBeacon", 9876);
_local3.onEnterFrame = function () {
_global.MovieClip.broadcastMessage("onEnterFrame");
};
}
}
static var version = "1.1.0.52";
}
Symbol 1987 MovieClip [__Packages.mx.transitions.BroadcasterMX] Frame 0
class mx.transitions.BroadcasterMX
{
var _listeners;
function BroadcasterMX () {
}
static function initialize(o, dontCreateArray) {
if (o.broadcastMessage != undefined) {
delete o.broadcastMessage;
}
o.addListener = mx.transitions.BroadcasterMX.prototype.addListener;
o.removeListener = mx.transitions.BroadcasterMX.prototype.removeListener;
if (!dontCreateArray) {
o._listeners = new Array();
}
}
function addListener(o) {
removeListener(o);
if (broadcastMessage == undefined) {
broadcastMessage = mx.transitions.BroadcasterMX.prototype.broadcastMessage;
}
return(_listeners.push(o));
}
function removeListener(o) {
var _local2 = _listeners;
var _local3 = _local2.length;
while (_local3--) {
if (_local2[_local3] == o) {
_local2.splice(_local3, 1);
if (!_local2.length) {
broadcastMessage = undefined;
}
return(true);
}
}
return(false);
}
function broadcastMessage() {
var _local5 = String(arguments.shift());
var _local4 = _listeners.concat();
var _local6 = _local4.length;
var _local3 = 0;
while (_local3 < _local6) {
_local4[_local3][_local5].apply(_local4[_local3], arguments);
_local3++;
}
}
static var version = "1.1.0.52";
}
Symbol 1988 MovieClip [__Packages.sarbakan.packaging.HighScoreBoard] Frame 0
class sarbakan.packaging.HighScoreBoard
{
var mcBoard, mcFields, nNextY, nNextX, nFieldID, nMargin, nScrollPC, nBoardHeight, nResultHeight, nScorePosition, btUp, btDown, mcScrollBar, nScrollMin, nScrollMax, nScrollOriginX, nScrollOriginY, bScrolling, bButtonScrolling, nScrollUpdateCount, nButtonScrollingDirection;
function HighScoreBoard (_mcBoard, _mcFields, _nBoardHeight) {
mcBoard = _mcBoard;
mcFields = _mcFields;
nNextY = mcFields._y;
nNextX = mcFields._x;
mcFields._visible = false;
nFieldID = 0;
nMargin = DEFAULT_MARGIN;
nScrollPC = 0;
nBoardHeight = _nBoardHeight;
nResultHeight = 0;
nScorePosition = 0;
_mcBoard.onEnterFrame = sarbakan.utils.Delegate.create(this, onScrollUpdate);
setMessage("Retrieving scores...");
}
function setScrollButtons(_btUp, _btDown) {
btUp = _btUp;
btUp.onPress = sarbakan.utils.Delegate.create(this, startButtonScroll, -1);
btUp.onRelease = sarbakan.utils.Delegate.create(this, endButtonScroll);
btDown = _btDown;
btDown.onPress = sarbakan.utils.Delegate.create(this, startButtonScroll, 1);
btDown.onRelease = sarbakan.utils.Delegate.create(this, endButtonScroll);
}
function setScrollBar(_mc, _nMinY, _nMaxY) {
mcScrollBar = _mc;
mcScrollBar._visible = false;
nScrollMin = _nMinY;
nScrollMax = _nMaxY;
mcScrollBar.onPress = sarbakan.utils.Delegate.create(this, onScrollBarClick);
mcScrollBar.onRelease = sarbakan.utils.Delegate.create(this, onScrollBarRelease);
mcScrollBar.onReleaseOutside = mcScrollBar.onRelease;
}
function setMargin(_nMargin) {
nMargin = _nMargin;
}
function enableScroll() {
mcScrollBar._visible = true;
btUp._visible = true;
btDown._visible = true;
}
function disableScroll() {
mcScrollBar._visible = false;
btUp._visible = false;
btDown._visible = false;
}
function addEntry(_sName, _nScore) {
var _local2 = mcFields.duplicateMovieClip("mcField" + (nFieldID++), mcFields._parent.getNextHighestDepth());
_local2._visible = true;
_local2._y = nNextY;
nNextY = nNextY + (mcFields._height + nMargin);
_local2.position = ++nScorePosition;
_local2.name = _sName;
_local2.score = sarbakan.utils.MoreString.formatNumber(_nScore, 0);
clearMessage();
if (nNextY > nBoardHeight) {
enableScroll();
} else {
disableScroll();
}
}
function setMessage(_sMessage) {
mcBoard.message = _sMessage;
disableScroll();
}
function clearMessage() {
mcBoard.message = "";
}
function clearScores() {
var _local2 = nFieldID;
while (_local2 >= 0) {
mcBoard["mcField" + _local2].removeMovieClip();
_local2--;
}
nFieldID = 0;
nNextY = mcFields._y;
nScrollPC = 0;
nResultHeight = 0;
scrollTo(0);
}
function scrollTo(_nScrollPC) {
if (!nScrollOriginX) {
nScrollOriginX = mcBoard._x;
}
if (!nScrollOriginY) {
nScrollOriginY = mcBoard._y;
}
var _local2 = (mcBoard._height - nBoardHeight) * (_nScrollPC / 100);
mcBoard._y = nScrollOriginY - _local2;
}
function scrollUp() {
nScrollPC = nScrollPC - 10;
if (nScrollPC < 0) {
nScrollPC = 0;
}
scrollTo(nScrollPC);
}
function scrollDown() {
nScrollPC = nScrollPC + 10;
if (nScrollPC > 100) {
nScrollPC = 100;
}
scrollTo(nScrollPC);
}
function onScrollUpdate() {
if (bScrolling) {
var _local2 = Math.round(((mcScrollBar._y - nScrollMin) / (nScrollMax - nScrollMin)) * 100);
if (_local2 != nScrollPC) {
nScrollPC = _local2;
scrollTo(nScrollPC);
}
}
if (bButtonScrolling && ((++nScrollUpdateCount) >= SCROLL_UPDATE_RATE)) {
nScrollUpdateCount = 0;
if (nButtonScrollingDirection == 1) {
scrollDown();
} else {
scrollUp();
}
}
}
function onScrollBarClick() {
bScrolling = true;
mcScrollBar.startDrag(false, mcScrollBar._x, nScrollMin, mcScrollBar._x, nScrollMax);
}
function onScrollBarRelease() {
bScrolling = false;
mcScrollBar.stopDrag();
}
function startButtonScroll(_nDirection) {
bButtonScrolling = true;
nButtonScrollingDirection = _nDirection;
nScrollUpdateCount = SCROLL_UPDATE_RATE;
}
function endButtonScroll() {
bButtonScrolling = false;
}
static var DEFAULT_MARGIN = 5;
static var SCROLL_UPDATE_RATE = 3;
}
Symbol 1989 MovieClip [__Packages.sarbakan.utils.MoreString] Frame 0
class sarbakan.utils.MoreString
{
function MoreString () {
}
static function pad(_sToPad, _sCharPad, _nMinLength, _sSideToPad) {
var _local1 = String(_sToPad);
while (_local1.length < _nMinLength) {
if (_sSideToPad == "RIGHT") {
_local1 = _local1 + _sCharPad;
} else {
_local1 = _sCharPad + _local1;
}
}
return(_local1);
}
static function trim(_sToTrim, _sCharTrim, _sSideToTrim) {
var _local1 = String(_sToTrim);
if (_sSideToTrim == "RIGHT") {
while (_local1.substr(_local1.length - 2, 1) == _sCharTrim) {
_local1 = _local1.slice(-1);
}
} else {
while (_local1.substr(0, 1) == _sCharTrim) {
_local1 = _local1.slice(1);
}
}
return(_local1);
}
static function replace(_sString, _sFind, _sReplace) {
return(_sString.split(_sFind).join(_sReplace));
}
static function formatTime(_nTime) {
var _local2 = _nTime;
var _local1 = Math.floor(_local2 / 60);
var _local3 = Math.round(_local2 - (_local1 * 60));
return((pad(String(_local1), "0", 2) + ":") + pad(String(_local3), "0", 2));
}
static function formatNumber(__nNumber, __nMinimumChar) {
var _local1 = String(__nNumber);
var _local3 = "";
var _local4 = _local1.length;
_local4 = _local4 / 3;
var _local5;
var _local2;
if (_local4 <= 1) {
_local5 = _local1;
if (_local5.length < __nMinimumChar) {
_local5 = "0" + _local5;
}
} else {
_local2 = _local4;
while (_local2 > 1) {
_local3 = (" " + _local1.substr(-3)) + _local3;
_local1 = _local1.substr(0, -3);
_local2--;
}
_local5 = _local1 + _local3;
if (_local5.length < __nMinimumChar) {
_local5 = "0" + _local5;
}
}
return(_local5);
}
static function upperFirstChar(_sString) {
return(_sString.substr(0, 1).toUpperCase() + _sString.substr(1));
}
}
Symbol 1990 MovieClip [__Packages.SecretCodeInterface] Frame 0
class SecretCodeInterface extends sarbakan.visual.element.DynamicElement
{
var setMC, setState, stateFinished, stateStarting, mc;
function SecretCodeInterface (l_mc) {
super("secretCode");
setMC(l_mc);
}
function show() {
setState("open");
}
function open() {
if (stateFinished()) {
setState("idle");
}
}
function idle() {
if (stateStarting()) {
initButtons();
}
if (Key.isDown(13)) {
onButtonValidate();
}
}
function good() {
if (stateFinished()) {
setState("close");
}
}
function bad() {
if (stateFinished()) {
setState("idle");
}
}
function close() {
if (stateFinished()) {
setState("inactive");
}
}
function onButtonValidate() {
_global.C.oPackaging.clickSound();
validateCode();
}
function onButtonBack() {
_global.C.oPackaging.clickSound();
setState("close");
}
function initButtons() {
mc.state.btValidate.onRelease = sarbakan.utils.Delegate.create(this, onButtonValidate);
mc.state.btBack.onRelease = sarbakan.utils.Delegate.create(this, onButtonBack);
}
function validateCode() {
var _local2 = false;
for (var _local3 in SECRET_CODES) {
if (mc.state.code.text.toLowerCase() == SECRET_CODES[_local3]) {
Controller.getInstance().unlockCode(_local3);
_local2 = true;
setState("good");
break;
}
}
if (!_local2) {
setState("bad");
}
}
static var SECRET_CODES = {PAPPY:"pappy", RESET:"reset"};
}
Symbol 1991 MovieClip [__Packages.objHSNick] Frame 0
class objHSNick
{
var bHSAvailable, G_TestHighScore, bSubmitHS, bGetHS, G_GameID, mcHSZone;
function objHSNick () {
bHSAvailable = true;
G_TestHighScore = false;
bSubmitHS = false;
bGetHS = false;
G_GameID = "fop_glory";
mcHSZone = undefined;
if (G_TestHighScore == true) {
_global.gProxyObj.setServer("www.nick.com");
_global.gProxyObj.setScreenName("sarbakanTest");
_global.gProxyObj.setIsLoggedIn(true);
}
}
function getScores() {
if (_global.gProxyObj == undefined) {
listScores();
} else {
_global.gProxyObj.getScores(cbFunc2);
}
}
function submitScore(theScore) {
addMessage("The high score list is updating!");
_global.gProxyObj.submitScore(theScore, cbFunc);
}
function initHiScores() {
_global.gProxyObj.setGame_Id(G_GameID);
}
function getScoreString() {
var _local8 = "Oops! The high score list is not available right now!";
if (_global.gProxyObj != undefined) {
var _local7 = _global.gProxyObj.getScoreCount();
if (_local7 > 0) {
var _local3;
var _local4;
var _local5;
var _local6;
removeMessage();
_local3 = 0;
while (_local3 < _local7) {
_local8 = "";
_local4 = _global.gProxyObj.getScoreItem(_local3);
_local5 = _local4[0];
_local6 = _local4[1];
Controller.getInstance().oPackaging.oHiScoreBoard.addEntry(_local5, _local6);
_local3++;
}
} else {
addMessage("Oops! The high score list is not available right now!");
}
} else {
addMessage("Oops! The high score list is not available right now!");
}
return(_local8);
}
function listScores() {
getScoreString();
}
function cbFunc(thisBool) {
if (thisBool) {
_global.oHS.listScores();
} else {
addMessage("Oops! The high score list is not available right now!");
}
}
function cbFunc2(thisBool) {
if (thisBool) {
_global.oHS.listScores();
} else {
addMessage("Oops! The high score list is not available right now!");
}
}
function fDoHSInit() {
initHiScores();
if (_global.gProxyObj.getIsLoggedIn()) {
mcHSZone.btnSubmitHS._visible = true;
} else {
mcHSZone.btnSubmitHS._visible = false;
}
}
function fDoSubmitHS(l_mcStage) {
bSubmitHS = true;
}
function fDoViewHS(l_mcStage, l_bFromGame) {
bGetHS = true;
_global.KMC.startHighScore(l_mcStage, l_bFromGame);
}
function fSetHSBoard(P_mcRef) {
mcHSZone = P_mcRef;
if (_global.gProxyObj.getIsLoggedIn()) {
mcHSZone.btnSubmitHS._visible = true;
} else {
mcHSZone.btnSubmitHS._visible = false;
}
}
function addMessage(l_sMsg) {
Controller.getInstance().oPackaging.oHiScoreBoard.setMessage(l_sMsg);
}
function removeMessage() {
Controller.getInstance().oPackaging.oHiScoreBoard.clearMessage();
}
}
Symbol 1992 MovieClip [__Packages.sarbakan.sound.SoundManager] Frame 0
class sarbakan.sound.SoundManager
{
static var mc, aSounds, oRootSound, oEnterFrameListener, bMuted;
function SoundManager () {
}
static function init(_mc) {
mc = _mc;
aSounds = [];
oRootSound = new Sound(mc);
if (!oEnterFrameListener) {
mx.transitions.OnEnterFrameBeacon.init();
oEnterFrameListener = new Object();
oEnterFrameListener.onEnterFrame = sarbakan.utils.Delegate.create(sarbakan.sound.SoundManager, update);
MovieClip.removeListener(oEnterFrameListener);
MovieClip.addListener(oEnterFrameListener);
}
}
static function play(_sLinkage, _nVolume, _nLoop, _bUnique) {
if (!mc) {
}
if (_nVolume == undefined) {
_nVolume = 100;
}
if (_nLoop == undefined) {
_nLoop = 1;
}
if (_bUnique == undefined) {
_bUnique = false;
}
var _local3 = canPlaySound(_sLinkage);
if (_local3 == true) {
var _local1 = {};
_local1.mc = mc.createEmptyMovieClip(MOVIECLIP_BASE_NAME + mc.getNextHighestDepth(), mc.getNextHighestDepth());
_local1.sLinkage = _sLinkage;
_local1.bUnique = _bUnique;
_local1.aFade = [];
_local1.oSound = new Sound(_local1.mc);
_local1.oSound.attachSound(_sLinkage);
_local1.oSound.onSoundComplete = sarbakan.utils.Delegate.create(sarbakan.sound.SoundManager, remove, _local1.oSound);
_local1.oSound.start(0, _nLoop);
_local1.oSound.setVolume(_nVolume);
aSounds.push(_local1);
return(_local1.oSound);
}
return(_local3);
}
static function stop(_oSound) {
_oSound.stop();
remove(_oSound);
}
static function mute() {
bMuted = true;
oRootSound.setVolume(0);
}
static function unmute() {
bMuted = false;
oRootSound.setVolume(100);
}
static function fade(_oSound, _nFadeType, _nDestination, _nSpeed, _bDelete) {
var _local2;
var _local3;
switch (_nFadeType) {
case FADE_VOLUME :
_local2 = sarbakan.utils.Delegate.create(_oSound, _oSound.getVolume);
_local3 = sarbakan.utils.Delegate.create(_oSound, _oSound.setVolume);
break;
case FADE_PAN :
_local2 = sarbakan.utils.Delegate.create(_oSound, _oSound.getPan);
_local3 = sarbakan.utils.Delegate.create(_oSound, _oSound.setPan);
}
var _local4 = getSoundData(_oSound);
if (_nDestination < _local2()) {
_nSpeed = _nSpeed * -1;
}
aSounds[_local4.nPosition].aFade[_nFadeType] = {nDest:_nDestination, nSpeed:_nSpeed, fSet:_local3, fGet:_local2, bDelete:_bDelete};
}
static function fadeInAll(_nSpeed) {
if (!_nSpeed) {
_nSpeed = FADE_DEFAULT_SPEED;
}
fadeAll(FADE_VOLUME, 100, _nSpeed);
}
static function fadeOutAll(_nSpeed) {
if (!_nSpeed) {
_nSpeed = FADE_DEFAULT_SPEED;
}
fadeAll(FADE_VOLUME, 0, _nSpeed);
}
static function getLinkage(_oSound) {
return(getSoundData(_oSound).oData.sLinkage);
}
static function isSoundPlaying(_oSound) {
var _local2 = false;
if ((_oSound.position != undefined) && (_oSound.duration != undefined)) {
if (_oSound.position < _oSound.duration) {
_local2 = true;
}
}
return(_local2);
}
static function isMuted() {
return(bMuted);
}
static function remove(_oSound) {
var _local1 = getSoundData(_oSound);
_local1.oData.mc.removeMovieClip();
delete aSounds[_local1.nPosition].oSound;
delete aSounds[_local1.nPosition];
aSounds.splice(_local1.nPosition, 1);
}
static function update() {
for (var _local2 in aSounds) {
for (var _local1 in aSounds[_local2].aFade) {
if (aSounds[_local2].aFade[_local1]) {
aSounds[_local2].aFade[_local1].fSet(aSounds[_local2].aFade[_local1].fGet() + aSounds[_local2].aFade[_local1].nSpeed);
if (((aSounds[_local2].aFade[_local1].nSpeed > 0) && (aSounds[_local2].aFade[_local1].fGet() >= aSounds[_local2].aFade[_local1].nDest)) or ((aSounds[_local2].aFade[_local1].nSpeed < 0) && (aSounds[_local2].aFade[_local1].fGet() <= aSounds[_local2].aFade[_local1].nDest))) {
aSounds[_local2].aFade[_local1].fSet(aSounds[_local2].aFade[_local1].nDest);
if (aSounds[_local2].aFade[_local1].bDelete) {
stop(aSounds[_local2].oSound);
}
delete aSounds[_local2].aFade[_local1];
}
}
}
}
}
static function canPlaySound(_sLinkage) {
for (var _local2 in aSounds) {
if (aSounds[_local2].bUnique && (aSounds[_local2].sLinkage == _sLinkage)) {
return(aSounds[_local2].oSound);
}
}
return(true);
}
static function getSoundData(_oSound) {
for (var _local4 in aSounds) {
if (aSounds[_local4].oSound == _oSound) {
return({oData:aSounds[_local4], nPosition:_local4});
}
}
}
static function fadeAll(_nFadeType, _nDestination, _nSpeed) {
for (var _local4 in aSounds) {
fade(aSounds[_local4].oSound, _nFadeType, _nDestination, _nSpeed);
}
}
static var MOVIECLIP_BASE_NAME = "mcSounds";
static var FADE_DEFAULT_SPEED = 10;
static var FADE_VOLUME = 0;
static var FADE_PAN = 1;
}
Symbol 1993 MovieClip [__Packages.GameData] Frame 0
class GameData
{
function GameData () {
}
static var FRAME_RATE = 35;
static var FRAME_PERFORMANCE_THRESHOLD = 12;
static var SCREEN_WIDTH = 600;
static var SCREEN_HEIGHT = 300;
static var DIRECTION_TOP = 0;
static var DIRECTION_RIGHT = 1;
static var DIRECTION_DOWN = 3;
static var DIRECTION_LEFT = 4;
static var DIFFICULTY_LEVELS = 5;
static var LEVELS = [["1a", "1b", "1c", "1d"], ["2a", "2b", "2c", "2d"], ["3a", "3b", "3c", "3d"], ["4a", "4b", "4c", "4d"], ["5a", "5b", "5c", "5d"]];
static var LEVEL_WIDTH = 2000;
static var LEVEL_WIDTH_BOSS = 600;
static var LEVEL_SCROLL_RATE_FAST = 2;
static var LEVEL_SCROLL_RATE_SLOW = 3;
static var LEVEL_SCROLL_SPEED = 3;
static var LEVEL_SCROLL_DELAY_START = 15;
static var LEVEL_DISTANCE_OFFSCREEN = 200;
static var SCREEN_PUSH_DISTANCE = 20;
static var ENERGY_GAIN_CHOCOLATE = 15;
static var ENERGY_GAIN_BURGER = 100;
static var ENERGY_HIT_PUNCH = 5;
static var ENERGY_HIT_KICK = 10;
static var ENERGY_HIT_HARPOON = 15;
static var ENERGY_HIT_BOOT = 15;
static var ENERGY_HIT_CABBAGEBOMB = 100;
static var ENERGY_HIT_SWALLOWBOMB = 25;
static var ENERGY_HURT_ANTIBODY = 5;
static var ENERGY_HURT_TAPEWORM = 10;
static var ENERGY_HURT_VICKY = 10;
static var ENERGY_HURT_VICKY_GRAB = 5;
static var ENERGY_HURT_LASHES = 0;
static var ENERGY_HURT_LUMP = 2;
static var ENERGY_HURT_TIMMASE = 5;
static var ENERGY_HURT_TIMMASE_SUPER = 5;
static var ENERGY_HURT_FRANCIS = 5;
static var ENERGY_HURT_FRANCIS_SUPER = 5;
static var ENERGY_TIMMY = 100;
static var ENERGY_LIFE_TIMMASE = 20;
static var ENERGY_LIFE_TIMMASE_SUPER = 30;
static var ENERGY_LIFE_FRANCIS = 25;
static var ENERGY_LIFE_FRANCIS_SUPER = 40;
static var ENERGY_LIFE_VICKY = 100;
static var ENERGY_LIFE_TAPEWORM_HEAD = 2;
static var ENERGY_LIFE_TAPEWORM_HEAD_FINAL = 6;
static var ENERGY_LIFE_TAPEWORM_TAIL = 8;
static var SCORE_PUNCH = 500;
static var SCORE_KICK = 750;
static var SCORE_HARPOON = 1500;
static var SCORE_BOOT = 1000;
static var SCORE_PRUNEBOMB = 3000;
static var SCORE_CABBAGEBOMB = 7500;
static var SCORE_KILL = 3000;
static var SCORE_WISH = 50;
static var SCORE_CHOCOLATE = 100;
static var SCORE_BURGER = 250;
static var SCORE_CHINFIGURINE = 5000;
static var SCORE_TRIXIEDOLL = 10000;
static var SCORE_BOSS1 = 50000;
static var SCORE_BOSS2 = 100000;
static var SCORE_LEVEL = 10000;
static var COLOR_TRANSFORM_NONE = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa:100, ab:0};
static var LUMPS_DATA = [{nFrequency:3, nSpeed:5}, {nFrequency:3, nSpeed:6}, {nFrequency:2, nSpeed:6}, {nFrequency:2, nSpeed:7}, {nFrequency:1, nSpeed:6}];
static var BONUSES_CHANCE = {single:{trixieDoll:10, chocolate:40, burger:10, pruneBomb:25, cabbageBomb:15, boot:0, chinFigurine:0, nothing:0}, single_code:{trixieDoll:9, chocolate:36, burger:9, pruneBomb:22, cabbageBomb:12, boot:0, chinFigurine:12, nothing:0}, single_boss1:{trixieDoll:15, chocolate:30, burger:15, pruneBomb:20, cabbageBomb:20, boot:0, chinFigurine:0, nothing:0}, single_boss2:{trixieDoll:25, chocolate:30, burger:25, pruneBomb:20, cabbageBomb:0, boot:0, chinFigurine:0, nothing:0}, multi:{trixieDoll:3.5, chocolate:9, burger:3.5, pruneBomb:7, cabbageBomb:4.5, boot:35.5, chinFigurine:0, nothing:37}, multi_code:{trixieDoll:3, chocolate:10.5, burger:3, pruneBomb:4.5, cabbageBomb:4, boot:34, chinFigurine:4, nothing:37}, multi_boss1:{trixieDoll:5, chocolate:10, burger:5, pruneBomb:15, cabbageBomb:15, boot:20, chinFigurine:0, nothing:30}, multi_boss2:{trixieDoll:5, chocolate:20, burger:5, pruneBomb:20, cabbageBomb:0, boot:10, chinFigurine:0, nothing:40}};
static var VOLUME_MUSIC = 60;
static var VOLUME_STEP = 120;
static var VOLUME_JUMP = 65;
static var VOLUME_LAND = 120;
static var VOLUME_SWOOSH = 80;
static var VOLUME_HARPOON_THROW = 100;
static var VOLUME_HARPOON_HIT = 60;
static var VOLUME_HIT = 80;
static var VOLUME_INVINCIBLE = 100;
static var VOLUME_TIMMASE_DIE = 90;
static var VOLUME_FRANCIS_DIE_START = 100;
static var VOLUME_FRANCIS_DIE_END = 95;
static var VOLUME_LASHES = 120;
static var VOLUME_EAT = 100;
static var VOLUME_TADAM = 75;
static var VOLUME_APPEAR = 90;
static var VOLUME_MAGIC = 90;
static var VOLUME_BREAKWALL = 80;
static var VOLUME_COLLAPSE = 80;
static var VOLUME_NOTHING = 80;
static var VOLUME_LUMP_SPIT = 45;
static var VOLUME_LUMP_HIT = 150;
static var VOLUME_THROW = 80;
static var VOLUME_CABBAGE = 80;
static var VOLUME_PRUNE = 80;
static var VOLUME_DOLL = 80;
static var VOLUME_VICKY_MOUTH = 90;
static var VOLUME_VICKY_SWALLOW = 110;
static var VOLUME_VICKY_BOOM = 120;
static var VOLUME_VICKY_DIE = 120;
static var VOLUME_VICKY_ATTACK = 100;
static var VOLUME_ANTIBODY = 90;
static var VOLUME_WORM_APPEAR = 100;
static var VOLUME_WORM_ATTACK = 100;
static var VOLUME_WORM_WALK = 180;
static var VOLUME_WORM_RUN = 75;
static var VOLUME_BUTTON_CLICK = 75;
}
Symbol 1994 MovieClip [__Packages.sarbakan.utils.MoreMath] Frame 0
class sarbakan.utils.MoreMath
{
function MoreMath () {
}
static function random(_nMin, _nMax) {
_nMax++;
return(Math.floor(Math.random() * (_nMax - _nMin)) + _nMin);
}
static function randomFromPredefined(_oPredefined, _nMin, _nMax) {
return(Math.floor(_oPredefined.get() * (_nMax - _nMin)) + _nMin);
}
static function getDistance(_x1, _y1, _x2, _y2) {
return(Math.sqrt(Math.pow(Math.abs(_x2 - _x1), 2) + Math.pow(Math.abs(_y2 - _y1), 2)));
}
static function getManhattanDistance(_x1, _y1, _x2, _y2) {
return(Math.abs(_x1 - _x2) + Math.abs(_y1 - _y2));
}
static function wrapInRange(_nNumber, _nMin, _nMax) {
_nNumber = Math.max(_nNumber, _nMin);
_nNumber = Math.min(_nNumber, _nMax);
return(_nNumber);
}
static function convertToRadians(_nAngle) {
return((_nAngle * Math.PI) / 180);
}
static function getAngle(_oPt1, _oPt2) {
var _local2 = 0;
var _local3 = 0;
var _local1 = 0;
var _local4 = 0;
_local2 = (_oPt1.x - _oPt2.x) * -1;
_local3 = (_oPt1.y - _oPt2.y) * -1;
_local1 = Math.atan2(_local3, _local2);
_local1 = (_local1 * 180) / Math.PI;
if (_local1 < 0) {
_local1 = _local1 * -1;
_local4 = 180 - _local1;
_local1 = 180 + _local4;
}
if (_local1 < 0) {
_local1 = _local1 + 360;
}
return(_local1);
}
static function getRadian(_oPt1, _oPt2) {
var _local1 = 0;
var _local2 = 0;
var _local3 = 0;
_local1 = (_oPt1.x - _oPt2.x) * -1;
_local2 = (_oPt1.y - _oPt2.y) * -1;
_local3 = Math.atan2(_local2, _local1);
return(_local3);
}
}
Symbol 1995 MovieClip [__Packages.sarbakan.utils.PredefinedRandom] Frame 0
class sarbakan.utils.PredefinedRandom
{
var nListSize, aList, aOriginalList;
function PredefinedRandom (_nListSize) {
if (_nListSize) {
nListSize = _nListSize;
} else {
nListSize = DEFAULT_LIST_SIZE;
}
regenerate();
}
function reset() {
aList = sarbakan.utils.Tools.copyArray(aOriginalList);
}
function regenerate() {
aList = [];
var _local2 = 0;
while (_local2 < nListSize) {
aList.push(Math.random());
_local2++;
}
aOriginalList = sarbakan.utils.Tools.copyArray(aList);
}
function get() {
var _local2 = aList.pop();
aList.unshift(_local2);
return(_local2);
}
function getLastGetted() {
return(aList[0]);
}
static var DEFAULT_LIST_SIZE = 50;
}
Symbol 1996 MovieClip [__Packages.sarbakan.utils.Tools] Frame 0
class sarbakan.utils.Tools
{
function Tools () {
}
static function copyArray(_aArraySource) {
var _local3 = new Array();
var _local1 = 0;
_local1 = 0;
while (_local1 < _aArraySource.length) {
if (_aArraySource[_local1] instanceof Array) {
_local3.push(copyArray(_aArraySource[_local1]));
} else {
_local3.push(_aArraySource[_local1]);
}
_local1++;
}
return(_local3);
}
}
Symbol 1997 MovieClip [__Packages.sarbakan.structure.Sequence] Frame 0
class sarbakan.structure.Sequence
{
function Sequence () {
}
function init() {
}
function update() {
}
function destroy() {
}
}
Symbol 1998 MovieClip [__Packages.LevelManager] Frame 0
class LevelManager extends sarbakan.structure.Sequence
{
var mcBase, sLevelID, bMultiplayer, bCode, bBoss, nScrollDelay, nScrollX, aInteractiveElements, aJumpPoints, oView, oCam, oLayerBackground, oLayerFloor, oLayerGame, nScrollRate, bScreenShake, oBonusPicker, nScreenShakeCount, nPosXNextElement;
function LevelManager (_mcBase, _sLevelID, _bMultiplayer, _bCode) {
super();
mcBase = _mcBase;
sLevelID = _sLevelID;
bMultiplayer = _bMultiplayer;
bCode = _bCode;
bBoss = _sLevelID.substring(0, 4) == "boss";
nScrollDelay = GameData.LEVEL_SCROLL_DELAY_START * -1;
nScrollX = 0;
aInteractiveElements = [];
aJumpPoints = [];
elements.characters.BaseEnnemy.reset();
}
function init() {
var _local2 = GameData.LEVEL_WIDTH;
if (bBoss) {
_local2 = GameData.LEVEL_WIDTH_BOSS;
}
_local2 = _local2 + SCREEN_SHAKE_WIDTH;
oView = new sarbakan.visual.layer.LayerManager(_local2, GameData.SCREEN_HEIGHT, GameData.SCREEN_WIDTH, GameData.SCREEN_HEIGHT);
oCam = oView.getCamera();
oCam.lockOn(sarbakan.utils.Delegate.create(this, getCamCoord));
var _local3 = mcBase.createEmptyMovieClip("mcLayerBg", mcBase.getNextHighestDepth());
oLayerBackground = new sarbakan.visual.layer.Layer(_local3, new sarbakan.visual.activation.NoActivation());
oView.addLayer(oLayerBackground, 1, 1);
_local3 = mcBase.createEmptyMovieClip("mcLayerFloor", mcBase.getNextHighestDepth());
oLayerFloor = new sarbakan.visual.layer.Layer(_local3, new sarbakan.visual.activation.NoActivation());
oView.addLayer(oLayerFloor, 1, 1);
_local3 = mcBase.createEmptyMovieClip("mcLayerGame", mcBase.getNextHighestDepth());
oLayerGame = new sarbakan.visual.layer.Layer(_local3, new sarbakan.visual.activation.NoActivation());
oLayerGame.addCollisionMap(new sarbakan.visual.layer.CollisionMap("floor", oLayerGame, 12632256));
oView.addLayer(oLayerGame, 1, 1);
initBonusPicker();
if (Number(sLevelID.substring(0, 1)) <= 3) {
nScrollRate = GameData.LEVEL_SCROLL_RATE_FAST;
} else {
nScrollRate = GameData.LEVEL_SCROLL_RATE_SLOW;
}
GameData.SCREEN_PUSH_SPEED = GameData.LEVEL_SCROLL_SPEED / nScrollRate;
loadLevelBackground();
loadLevelData();
}
function update() {
if (bScreenShake == true) {
updateScreenShake();
} else {
updateScroll();
}
oView.update();
}
function destroy() {
oView.destroy();
}
function pause() {
oView.pause();
}
function unpause() {
oView.unpause();
}
function addInteractiveElement(_oElement) {
var _local2 = Math.round(_oElement.oAttachProperties._x - DISTANCE_INIT);
if (nScrollX < _local2) {
aInteractiveElements.push({posX:_local2, element:_oElement});
aInteractiveElements.sortOn("posX", Array.NUMERIC);
} else {
oLayerGame.addDynamicElement(_oElement);
}
}
function addFloor(_oElement) {
oLayerBackground.addStaticElement(_oElement);
}
function addJumpPoint(_oJumpPoint) {
aJumpPoints.push(_oJumpPoint);
}
function getCamCoord() {
return({x:nScrollX, y:0});
}
function reachedEndOfLevel() {
return(nScrollX >= ((oCam.nViewZoneW - GameData.SCREEN_WIDTH) - SCREEN_SHAKE_WIDTH));
}
function getNewBonus() {
return(oBonusPicker.getRandomItem());
}
function initScreenShake() {
bScreenShake = true;
nScreenShakeCount = 0;
}
function loadLevelBackground() {
oLayerBackground.mc.attachMovie("backgroundLevel", "mcBg", oLayerBackground.mc.getNextHighestDepth());
if (bBoss) {
if (sLevelID.substring(0, 5) == "boss1") {
if (bMultiplayer) {
oLayerBackground.mc.mcBg.gotoAndStop("boss1_multi");
} else {
oLayerBackground.mc.mcBg.gotoAndStop("boss1_single");
}
} else {
oLayerBackground.mc.mcBg.gotoAndStop("boss2");
}
} else {
oLayerBackground.mc.mcBg.gotoAndStop("level");
}
oLayerBackground.mc.mcBg.mcFloor.swapDepths(666);
}
function loadLevelData() {
var _local2 = mcBase.attachMovie("levelData", "mcData", mcBase.getNextHighestDepth());
_local2._visible = false;
_local2.onEnterFrame = sarbakan.utils.Delegate.create(_local2, _local2.removeMovieClip);
var _local3 = "single";
if (bMultiplayer) {
_local3 = "multi";
}
_local2.gotoAndStop((sLevelID + "_") + _local3);
oLayerGame.addDynamicElement(new elements.characters.Timmy());
if (bMultiplayer) {
oLayerGame.addDynamicElement(new elements.characters.Cosmo("cosmo"));
}
}
function initBonusPicker() {
oBonusPicker = new sarbakan.utils.PercentRandomizer();
var _local2;
if (!bMultiplayer) {
_local2 = "single";
} else {
_local2 = "multi";
}
if (bBoss) {
_local2 = _local2 + ("_" + sLevelID);
} else if (bCode) {
_local2 = _local2 + "_code";
}
for (var _local3 in GameData.BONUSES_CHANCE[_local2]) {
oBonusPicker.addItem(_local3, GameData.BONUSES_CHANCE[_local2][_local3]);
}
}
function updateScroll() {
if (nPosXNextElement == undefined) {
nPosXNextElement = aInteractiveElements[0].posX;
}
if ((++nScrollDelay) == nScrollRate) {
nScrollDelay = 0;
if (!reachedEndOfLevel()) {
nScrollX = nScrollX + GameData.LEVEL_SCROLL_SPEED;
}
if ((aInteractiveElements.length > 0) && (nScrollX > nPosXNextElement)) {
while ((aInteractiveElements.length > 0) && (aInteractiveElements[0].posX <= nPosXNextElement)) {
oLayerGame.addDynamicElement(aInteractiveElements[0].element);
aInteractiveElements.shift();
}
nPosXNextElement = aInteractiveElements[0].posX;
}
}
}
function updateScreenShake() {
oCam.unlock();
if ((++nScreenShakeCount) < SCREEN_SHAKE_DURATION) {
var _local3 = nScrollX;
if (Math.random() < 0.5) {
_local3 = _local3 + sarbakan.utils.MoreMath.random(SCREEN_SHAKE_MIN, SCREEN_SHAKE_MAX);
} else {
_local3 = _local3 - sarbakan.utils.MoreMath.random(SCREEN_SHAKE_MIN, SCREEN_SHAKE_MAX);
}
var _local2 = 0;
if (Math.random() < 0.5) {
_local2 = _local2 + sarbakan.utils.MoreMath.random(SCREEN_SHAKE_MIN, SCREEN_SHAKE_MAX);
} else {
_local2 = _local2 - sarbakan.utils.MoreMath.random(SCREEN_SHAKE_MIN, SCREEN_SHAKE_MAX);
}
oCam.moveTo(_local3, _local2);
} else {
bScreenShake = false;
oCam.lockOn(sarbakan.utils.Delegate.create(this, getCamCoord));
}
}
static var DISTANCE_INIT = 700;
static var SCREEN_SHAKE_DURATION = 18;
static var SCREEN_SHAKE_MIN = 1;
static var SCREEN_SHAKE_MAX = 8;
static var SCREEN_SHAKE_WIDTH = 8;
}
Symbol 1999 MovieClip [__Packages.mx.transitions.easing.Regular] Frame 0
class mx.transitions.easing.Regular
{
function Regular () {
}
static function easeIn(t, b, c, d) {
t = t / d;
return(((c * t) * t) + b);
}
static function easeOut(t, b, c, d) {
t = t / d;
return((((-c) * t) * (t - 2)) + b);
}
static function easeInOut(t, b, c, d) {
t = t / (d / 2);
if (t < 1) {
return((((c / 2) * t) * t) + b);
}
t--;
return((((-c) / 2) * ((t * (t - 2)) - 1)) + b);
}
static var version = "1.1.0.52";
}
Symbol 2000 MovieClip [__Packages.sarbakan.visual.Camera] Frame 0
class sarbakan.visual.Camera
{
static var oEnterFrameListener;
var nX, nY, nViewZoneW, nViewZoneH, nStageW, nStageH, bLockedOn, nSpeed, bTravelling, oTweenX, fEasing, oTweenY, nTravelDestX, nTravelDestY, fEndListener, fLockedFunction, __get__x, __get__y;
function Camera (_viewZoneW, _viewZoneH, _nStageW, _nStageH) {
mx.transitions.OnEnterFrameBeacon.init();
oEnterFrameListener = new Object();
oEnterFrameListener.onEnterFrame = mx.utils.Delegate.create(this, update);
MovieClip.removeListener(oEnterFrameListener);
MovieClip.addListener(oEnterFrameListener);
nX = 0;
nY = 0;
nViewZoneW = _viewZoneW;
nViewZoneH = _viewZoneH;
nStageW = _nStageW;
nStageH = _nStageH;
setSpeed(DEFAULT_SPEED);
setEasing(DEFAULT_EASING);
bLockedOn = false;
}
function travelTo(_nDestX, _nDestY, _fListener) {
var _local2 = Math.round(sarbakan.utils.MoreMath.getDistance(nX * -1, nY * -1, _nDestX, _nDestY) / nSpeed);
if (_local2 == 0) {
_local2 = 1;
}
if (!bTravelling) {
oTweenX = new mx.transitions.Tween(this, "x", fEasing, nX * -1, _nDestX, _local2, false);
oTweenY = new mx.transitions.Tween(this, "y", fEasing, nY * -1, _nDestY, _local2, false);
oTweenX.onMotionFinished = mx.utils.Delegate.create(this, onTravelFinished);
} else {
oTweenX.continueTo(_nDestX, _local2);
oTweenY.continueTo(_nDestY, _local2);
}
nTravelDestX = _nDestX;
nTravelDestY = _nDestY;
if (_fListener) {
fEndListener = _fListener;
}
bTravelling = true;
}
function moveTo(_nDestX, _nDestY) {
x = (_nDestX);
y = (_nDestY);
}
function lockOn(_fLockFunction, _bInstant, _fEndListener) {
bLockedOn = true;
fLockedFunction = _fLockFunction;
var _local2 = fLockedFunction();
if ((_local2.x != nX) || (_local2.y != nY)) {
if (_bInstant) {
moveTo(_local2.x, _local2.y);
} else {
travelTo(_local2.x, _local2.y, _fEndListener);
}
}
}
function unlock() {
bLockedOn = false;
fLockedFunction = undefined;
}
function setSpeed(_nSpeed) {
if (_nSpeed) {
nSpeed = _nSpeed;
} else {
setSpeed(DEFAULT_SPEED);
}
}
function setEasing(_fEasing) {
if (_fEasing) {
fEasing = _fEasing;
} else {
setEasing(DEFAULT_EASING);
}
}
function set x(_nX) {
nX = _nX;
if (nX < 0) {
nX = 0;
}
if (nX > (nViewZoneW - nStageW)) {
nX = Math.round(nViewZoneW - nStageW);
}
nX = nX * -1;
//return(__get__x());
}
function set y(_nY) {
nY = _nY;
if (nY < 0) {
nY = 0;
}
if (nY > (nViewZoneH - nStageH)) {
nY = Math.round(nViewZoneH - nStageH);
}
nY = nY * -1;
//return(__get__y());
}
function getX() {
return(nX);
}
function getY() {
return(nY);
}
function destroy() {
MovieClip.removeListener(oEnterFrameListener);
}
function pause() {
oTweenX.stop();
oTweenY.stop();
}
function unpause() {
oTweenX.resume();
oTweenY.resume();
}
function update() {
if (bLockedOn) {
var _local2;
if ((!bTravelling) && (bLockedOn)) {
_local2 = fLockedFunction();
moveTo(_local2.x, _local2.y);
} else if ((_local2.x != nTravelDestX) || (_local2.y != nTravelDestY)) {
}
}
}
function onTravelFinished() {
bTravelling = false;
if (fEndListener) {
fEndListener();
fEndListener = undefined;
}
}
static var DEFAULT_SPEED = 5;
static var DEFAULT_EASING = mx.transitions.easing.Regular.easeOut;
}
Symbol 2001 MovieClip [__Packages.mx.transitions.Tween] Frame 0
class mx.transitions.Tween
{
var obj, prop, begin, useSeconds, _listeners, addListener, prevTime, _time, looping, _duration, broadcastMessage, isPlaying, _fps, prevPos, _pos, change, _intervalID, _startTime;
function Tween (obj, prop, func, begin, finish, duration, useSeconds) {
mx.transitions.OnEnterFrameBeacon.init();
if (!arguments.length) {
return;
}
this.obj = obj;
this.prop = prop;
this.begin = begin;
position = (begin);
this.duration = (duration);
this.useSeconds = useSeconds;
if (func) {
this.func = func;
}
this.finish = (finish);
_listeners = [];
addListener(this);
start();
}
function set time(t) {
prevTime = _time;
if (t > duration) {
if (looping) {
rewind(t - _duration);
update();
broadcastMessage("onMotionLooped", this);
} else {
if (useSeconds) {
_time = _duration;
update();
}
stop();
broadcastMessage("onMotionFinished", this);
}
} else if (t < 0) {
rewind();
update();
} else {
_time = t;
update();
}
//return(time);
}
function get time() {
return(_time);
}
function set duration(d) {
_duration = (((d == null) || (d <= 0)) ? (_global.Infinity) : (d));
//return(duration);
}
function get duration() {
return(_duration);
}
function set FPS(fps) {
var _local2 = isPlaying;
stopEnterFrame();
_fps = fps;
if (_local2) {
startEnterFrame();
}
//return(FPS);
}
function get FPS() {
return(_fps);
}
function set position(p) {
setPosition(p);
//return(position);
}
function setPosition(p) {
prevPos = _pos;
obj[prop] = (_pos = p);
broadcastMessage("onMotionChanged", this, _pos);
updateAfterEvent();
}
function get position() {
return(getPosition());
}
function getPosition(t) {
if (t == undefined) {
t = _time;
}
return(func(t, begin, change, _duration));
}
function set finish(f) {
change = f - begin;
//return(finish);
}
function get finish() {
return(begin + change);
}
function continueTo(finish, duration) {
begin = position;
this.finish = (finish);
if (duration != undefined) {
this.duration = (duration);
}
start();
}
function yoyo() {
continueTo(begin, time);
}
function startEnterFrame() {
if (_fps == undefined) {
_global.MovieClip.addListener(this);
} else {
_intervalID = setInterval(this, "onEnterFrame", 1000 / _fps);
}
isPlaying = true;
}
function stopEnterFrame() {
if (_fps == undefined) {
_global.MovieClip.removeListener(this);
} else {
clearInterval(_intervalID);
}
isPlaying = false;
}
function start() {
rewind();
startEnterFrame();
broadcastMessage("onMotionStarted", this);
}
function stop() {
stopEnterFrame();
broadcastMessage("onMotionStopped", this);
}
function resume() {
fixTime();
startEnterFrame();
broadcastMessage("onMotionResumed", this);
}
function rewind(t) {
_time = ((t == undefined) ? 0 : (t));
fixTime();
update();
}
function fforward() {
time = (_duration);
fixTime();
}
function nextFrame() {
if (useSeconds) {
time = ((getTimer() - _startTime) / 1000);
} else {
time = (_time + 1);
}
}
function onEnterFrame() {
nextFrame();
}
function prevFrame() {
if (!useSeconds) {
time = (_time - 1);
}
}
function toString() {
return("[Tween]");
}
function fixTime() {
if (useSeconds) {
_startTime = getTimer() - (_time * 1000);
}
}
function update() {
position = (getPosition(_time));
}
static var version = "1.1.0.52";
static var __initBeacon = mx.transitions.OnEnterFrameBeacon.init();
static var __initBroadcaster = mx.transitions.BroadcasterMX.initialize(mx.transitions.Tween.prototype, true);
function func(t, b, c, d) {
return(((c * t) / d) + b);
}
}
Symbol 2002 MovieClip [__Packages.mx.utils.Delegate] Frame 0
class mx.utils.Delegate extends Object
{
var func;
function Delegate (f) {
super();
func = f;
}
static function create(obj, func) {
var _local2 = function () {
var _local2 = arguments.callee.target;
var _local3 = arguments.callee.func;
return(_local3.apply(_local2, arguments));
};
_local2.target = obj;
_local2.func = func;
return(_local2);
}
function createDelegate(obj) {
return(create(obj, func));
}
}
Symbol 2003 MovieClip [__Packages.sarbakan.visual.layer.LayerManager] Frame 0
class sarbakan.visual.layer.LayerManager
{
var nStageW, nStageH, oCam, aLayers, bPaused, bWillPause;
function LayerManager (_nViewZoneW, _nViewZoneH, _nStageW, _nStageH) {
nStageW = _nStageW;
nStageH = _nStageH;
oCam = new sarbakan.visual.Camera(_nViewZoneW, _nViewZoneH, nStageW, nStageH);
aLayers = [];
bPaused = false;
bWillPause = false;
}
function addLayer(_oLayer, _parallaxRatioX, _parallaxRatioY) {
aLayers.push({layer:_oLayer, mc:_oLayer.mc, ratioX:_parallaxRatioX, ratioY:_parallaxRatioY});
_oLayer.init(nStageW, nStageH);
}
function getCamera() {
return(oCam);
}
function destroy() {
var _local2 = 0;
while (_local2 < aLayers.length) {
aLayers[_local2].layer.destroy();
_local2++;
}
oCam.destroy();
}
function pause() {
bWillPause = true;
}
function unpause() {
if (bPaused) {
var _local2 = 0;
while (_local2 < aLayers.length) {
aLayers[_local2].layer.unpause();
_local2++;
}
oCam.unpause();
sarbakan.visual.PauseManager.unpause();
}
bPaused = false;
bWillPause = false;
}
function togglePause() {
if (!bPaused) {
pause();
} else {
unpause();
}
}
function update() {
if (bWillPause) {
bPaused = true;
bWillPause = false;
var _local2 = 0;
while (_local2 < aLayers.length) {
aLayers[_local2].layer.pause();
_local2++;
}
oCam.pause();
sarbakan.visual.PauseManager.pause();
}
if (!bPaused) {
var _local2 = 0;
while (_local2 < aLayers.length) {
aLayers[_local2].layer.update();
_local2++;
}
var _local4 = oCam.getX();
var _local3 = oCam.getY();
_local2 = 0;
while (_local2 < aLayers.length) {
aLayers[_local2].mc._x = Math.round(_local4 * aLayers[_local2].ratioX);
aLayers[_local2].mc._y = Math.round(_local3 * aLayers[_local2].ratioY);
_local2++;
}
}
}
}
Symbol 2004 MovieClip [__Packages.sarbakan.visual.PauseManager] Frame 0
class sarbakan.visual.PauseManager
{
static var oPausableList, bPaused;
function PauseManager (_mc) {
if (!oPausableList) {
reset();
}
register(_mc._parent);
_mc._visible = false;
_mc.swapDepths(999999);
_mc.removeMovieClip();
bPaused = false;
}
static function register(_mc) {
oPausableList[_mc] = _mc;
_mc.onUnload = function () {
sarbakan.visual.PauseManager.remove(this);
};
}
static function remove(_mc) {
delete oPausableList[_mc];
}
static function reset() {
oPausableList = {};
}
static function pause() {
for (var _local1 in oPausableList) {
oPausableList[_local1].stop();
}
bPaused = true;
}
static function unpause() {
for (var _local1 in oPausableList) {
oPausableList[_local1].play();
}
bPaused = false;
}
}
Symbol 2005 MovieClip [__Packages.elements.Wall] Frame 0
class elements.Wall extends sarbakan.visual.element.DynamicElement
{
var setLinkage, getGlobalPos, oAttachProperties, oTimmy, oCosmo, attachMC, stateStarting, stateFinished, setState, mc, getState;
function Wall (_mc) {
super("wall" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("wall");
var _local3 = getGlobalPos(_mc);
oAttachProperties._x = _local3.x + CORRECTION_SPAWN_X;
oAttachProperties._y = _local3.y + CORRECTION_SPAWN_Y;
Controller.getInstance().oLevel.oWall = this;
oTimmy = Controller.getInstance().oLevel.oLayerGame.oDynamicElements.timmy;
oCosmo = Controller.getInstance().oLevel.oLayerGame.oDynamicElements.cosmo;
}
function init() {
attachMC();
}
function idle() {
if (stateStarting()) {
enableClick();
} else if (stateFinished()) {
setState("collapse");
}
}
function collapse() {
if (stateStarting()) {
disableClick();
sarbakan.sound.SoundManager.play("collapse", GameData.VOLUME_COLLAPSE);
}
if (stateFinished()) {
oTimmy.onWin();
setState("collapsed");
}
}
function onRelease() {
oCosmo.onBreakWall(this);
disableClick();
}
function onHit() {
mc.state.play();
}
function onBreakDone() {
if ((getState() == "idle") && (Controller.getInstance().oLevel.bMultiplayer == false)) {
oCosmo.onBreakWall(this);
} else {
enableClick();
}
}
function enableClick() {
mc.onRelease = sarbakan.utils.Delegate.create(this, onRelease);
mc.useHandCursor = false;
}
function disableClick() {
if ((oCosmo.getState == "breakWall") || (Controller.getInstance().oLevel.bMultiplayer == false)) {
delete mc.onRelease;
}
}
static var CORRECTION_SPAWN_X = 0;
static var CORRECTION_SPAWN_Y = 0;
}
Symbol 2006 MovieClip [__Packages.elements.characters.Cosmo] Frame 0
class elements.characters.Cosmo extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oCtrl, oAttachProperties, attachMC, nDirectionY, oTimmy, getElement, nDirectionX, mc, nSpeedX, nSpeedY, setState, stateFinished, stateStarting, sStoredBonusID, nBonusAnimCurrentFrame, sUsedBonusID, sLastUsedBonusID, stateCurrentFrame, nGrabDurationCount, oWall, collideWithElement, getState, oCurrentPt, getGlobalPos, nDiffX, nDiffY;
function Cosmo (_sID) {
super(_sID);
setLinkage("cosmo");
oCtrl = Controller.getInstance();
oAttachProperties._x = SPAWN_X;
oAttachProperties._y = SPAWN_Y;
}
function init() {
attachMC();
setDirection(1);
nDirectionY = 0;
oTimmy = getElement("timmy");
oTimmy.oCosmo = this;
Mouse.addListener(this);
}
function setDirection(_nDirection) {
nDirectionX = _nDirection;
if (nDirectionX != 0) {
mc._xscale = Math.abs(mc._xscale) * nDirectionX;
}
}
function update() {
super.update();
mc.mcBubble._xscale = nDirectionX * 100;
mc.swapDepths(6666);
}
function remove() {
super.remove();
Mouse.removeListener(this);
}
function idle() {
nSpeedX = 0;
nSpeedY = 0;
updateBonus();
if (mustMove()) {
setState("flyStart");
}
}
function flyStart() {
updateBonus();
if (stateFinished()) {
setState("fly");
}
}
function fly() {
updateBonus();
if (mustMove()) {
updateMovement();
} else {
setState("flyEnd");
}
}
function flyEnd() {
updateBonus();
if (stateFinished()) {
setState("idle");
}
}
function sludge() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
sStoredBonusID = oCtrl.oLevel.getNewBonus();
nBonusAnimCurrentFrame = 1;
if (((!oCtrl.oLevel.bBoss) && (oCtrl.oLevel.reachedEndOfLevel())) || ((oCtrl.oLevel.sLevelID == "boss2") && (oCtrl.oLevel.oBoss.nEnergyTail == 0))) {
sStoredBonusID = "boot";
}
if (sStoredBonusID == "nothing") {
sarbakan.sound.SoundManager.play("nothing", GameData.VOLUME_NOTHING);
} else {
sarbakan.sound.SoundManager.play("magic", GameData.VOLUME_MAGIC);
}
}
updateBonus();
if (stateFinished()) {
setState("idle");
if (sStoredBonusID == "nothing") {
destroyBonusBubble();
}
}
}
function bonusThrow() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("throw", GameData.VOLUME_THROW);
}
if (stateStarting() && ((sUsedBonusID == "burger") || (sUsedBonusID == "chocolate"))) {
lookTowardTimmy();
}
nSpeedX = 0;
nSpeedY = 0;
updateBonus();
mc.state.mcBonus.gotoAndStop(sUsedBonusID);
if (stateFinished()) {
switch (sUsedBonusID) {
case "burger" :
oTimmy.gainEnergy(GameData.ENERGY_GAIN_BURGER);
oTimmy.setState("eat");
oCtrl.addScore(GameData.SCORE_BURGER);
break;
case "chocolate" :
oTimmy.gainEnergy(GameData.ENERGY_GAIN_CHOCOLATE);
oTimmy.setState("eat");
oCtrl.addScore(GameData.SCORE_CHOCOLATE);
break;
case "boot" :
oCtrl.oLevel.addInteractiveElement(new elements.Boot(this));
break;
case "pruneBomb" :
if (canThrowInVicky()) {
throwInVicky();
} else {
elements.characters.BaseEnnemy.onStunAll();
if (oCtrl.oLevel.sLevelID == "boss2") {
oCtrl.oLevel.oBoss.onStun();
}
oCtrl.oLevel.initScreenShake();
sarbakan.sound.SoundManager.play("prune", GameData.VOLUME_PRUNE);
}
oCtrl.addScore(GameData.SCORE_PRUNEBOMB);
break;
case "cabbageBomb" :
if (canThrowInVicky()) {
throwInVicky();
} else {
oCtrl.oLevel.addInteractiveElement(new elements.CabbageExplosion(this));
}
oCtrl.addScore(GameData.SCORE_CABBAGEBOMB);
}
setState("idle");
sLastUsedBonusID = sUsedBonusID;
delete sUsedBonusID;
sUsedBonusID = undefined;
}
}
function bonusMagic() {
nSpeedX = 0;
nSpeedY = 0;
updateBonus();
if (stateStarting()) {
sarbakan.sound.SoundManager.play("magic", GameData.VOLUME_MAGIC);
}
if (stateCurrentFrame() == 15) {
switch (sUsedBonusID) {
case "trixieDoll" :
sarbakan.sound.SoundManager.play("doll", GameData.VOLUME_DOLL);
oCtrl.oLevel.addInteractiveElement(new elements.Points(this));
oCtrl.addScore(GameData.SCORE_TRIXIEDOLL);
break;
case "chinFigurine" :
oTimmy.initInvincibility();
oCtrl.addScore(GameData.SCORE_CHINFIGURINE);
}
}
if (stateFinished()) {
setState("idle");
delete sUsedBonusID;
sUsedBonusID = undefined;
}
}
function grabStart() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
nGrabDurationCount = 0;
}
if (stateFinished()) {
if (oTimmy.getState() == "captured") {
oTimmy.onRelease();
}
oTimmy.setState("grabbed");
setState("grabIdle");
}
}
function grabIdle() {
if (mustReleaseGrab()) {
releaseGrab();
} else if (mustMove()) {
setState("grabFly");
} else {
nSpeedX = 0;
nSpeedY = 0;
oTimmy.nSpeedX = nSpeedX;
oTimmy.nSpeedY = nSpeedY;
}
}
function grabFly() {
if (mustReleaseGrab()) {
releaseGrab();
} else if (mustMove()) {
updateMovement();
oTimmy.nSpeedX = nSpeedX;
oTimmy.nSpeedY = nSpeedY;
} else {
setState("grabFlyEnd");
}
}
function grabFlyEnd() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
oTimmy.nSpeedX = nSpeedX;
oTimmy.nSpeedY = nSpeedY;
}
if (mustReleaseGrab()) {
releaseGrab();
} else if (stateFinished()) {
setState("grabIdle");
}
}
function breakWall() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
setDirection(1);
sarbakan.sound.SoundManager.play("breakWall", GameData.VOLUME_BREAKWALL);
}
if (stateCurrentFrame() == FRAME_WALL_HIT) {
oWall.onHit();
}
if (stateFinished()) {
setState("idle");
oWall.onBreakDone();
}
}
function onHitDrop() {
if (isGrabbingTimmy()) {
oTimmy.setState("idle");
setState("idle");
} else if (!oTimmy.bWin) {
setState("sludge");
}
}
function onBubbleDisappeared() {
delete sStoredBonusID;
}
function onMouseUp() {
if ((sStoredBonusID != undefined) && (sUsedBonusID == undefined)) {
useBonus();
} else if (((oTimmy.getState() != "grabbed") && (collideWithElement("timmy"))) && (getState() != "breakWall")) {
sStoredBonusID = undefined;
sUsedBonusID = undefined;
setState("grabStart");
} else if (isGrabbingTimmy()) {
releaseGrab();
}
}
function onBreakWall(_oWall) {
_oWall.oCosmo = this;
if (((sStoredBonusID == undefined) && (sUsedBonusID == undefined)) && (Math.abs(mc._x - oWall.mc._x) <= WALL_HIT_MAX_DISTANCE)) {
oWall = _oWall;
setState("breakWall");
} else {
_oWall.onBreakDone();
}
}
function updateMovement() {
if (oCurrentPt.x < _root._xmouse) {
setDirection(1);
} else {
setDirection(-1);
}
var _local3 = sarbakan.utils.MoreMath.getAngle(oCurrentPt, {x:_root._xmouse, y:_root._ymouse});
_local3 = sarbakan.utils.MoreMath.convertToRadians(_local3);
nSpeedX = Math.cos(_local3) * BASE_SPEED_X;
nSpeedY = Math.sin(_local3) * BASE_SPEED_Y;
}
function mustMove() {
oCurrentPt = getGlobalPos(mc);
nDiffX = Math.abs(oCurrentPt.x - _root._xmouse);
nDiffY = Math.abs(oCurrentPt.y - _root._ymouse);
return(((nDiffX + nDiffY) / 2) > DISTANCE_FOLLOW);
}
function moveToMousePoint() {
mc._x = mc._x + (oCurrentPt.x - _root._xmouse);
mc._y = mc._y + (oCurrentPt.y - _root._ymouse);
}
function isGrabbingTimmy() {
return(((getState() == "grabIdle") || (getState() == "grabFly")) || (getState() == "grabFlyEnd"));
}
function mustReleaseGrab() {
return(((++nGrabDurationCount) >= GRAB_MAX_DURATION) || (oTimmy.getState() != "grabbed"));
}
function releaseGrab() {
setState("idle");
if (oTimmy.getState() == "grabbed") {
oTimmy.setDirection(nDirectionX);
oTimmy.setState("fall");
oTimmy.mc._y = mc._y + GRAB_RELEASE_Y_CORRECTION;
oTimmy.mc._y = Math.min(oTimmy.mc._y, GRAB_RELEASE_Y_MAX);
oTimmy.bDroppedByCosmo = true;
}
}
function useBonus() {
sUsedBonusID = sStoredBonusID;
switch (sUsedBonusID) {
case "burger" :
case "chocolate" :
case "boot" :
case "cabbageBomb" :
case "pruneBomb" :
setState("bonusThrow");
break;
case "chinFigurine" :
case "trixieDoll" :
setState("bonusMagic");
}
destroyBonusBubble();
oCtrl.addScore(GameData.SCORE_WISH);
}
function updateBonus() {
if (sStoredBonusID == undefined) {
mc.mcBubble._visible = false;
} else {
mc.mcBubble._visible = true;
if (nBonusAnimCurrentFrame == 1) {
mc.mcBubble.mcContent.mcBonus.gotoAndStop(sStoredBonusID);
} else {
mc.mcBubble.mcContent.gotoAndStop(++nBonusAnimCurrentFrame);
}
}
if (sStoredBonusID == "nothing") {
mc.mcBubble.mcContent.mcShape.gotoAndStop(2);
} else {
mc.mcBubble.mcContent.mcShape.gotoAndStop(1);
}
mc.mcBubble.mcContent.oCosmo = this;
}
function destroyBonusBubble() {
mc.mcBubble.mcContent.gotoAndStop("destroy");
nBonusAnimCurrentFrame = mc.mcBubble.mcContent._currentframe;
}
function lookTowardTimmy() {
if ((nDirectionX == 1) && (mc._x > oTimmy.mc._x)) {
setDirection(-1);
} else if ((nDirectionX == -1) && (mc._x < oTimmy.mc._x)) {
setDirection(1);
}
}
function canThrowInVicky() {
return(oCtrl.oLevel.oBoss.getState() == "openMouth");
}
function throwInVicky() {
lookTowardVicky();
oCtrl.oLevel.oBoss.setState("swallow");
}
function lookTowardVicky() {
var _local2 = oCtrl.oLevel.oBoss.mc;
if ((nDirectionX == 1) && (mc._x > _local2._x)) {
setDirection(-1);
} else if ((nDirectionX == -1) && (mc._x < _local2._x)) {
setDirection(1);
}
}
static var SPAWN_X = 50;
static var SPAWN_Y = 50;
static var BASE_SPEED_X = 12;
static var BASE_SPEED_Y = 9;
static var DISTANCE_FOLLOW = 30;
static var GRAB_MAX_DURATION = 90;
static var GRAB_RELEASE_Y_CORRECTION = 80;
static var GRAB_RELEASE_Y_MAX = 255;
static var FRAME_WALL_HIT = 4;
static var WALL_HIT_MAX_DISTANCE = 95;
}
Symbol 2007 MovieClip [__Packages.sarbakan.visual.element.basicElement.Character] Frame 0
class sarbakan.visual.element.basicElement.Character extends sarbakan.visual.element.DynamicElement
{
var sFloorColliderID, sWallColliderID, sCeilingColliderID, sFrontColliderName, sBackColliderName, sBottomColliderName, sTopColliderName, nMoveSpeedX, nAirSpeedX, bNoFlip, nDirection, mc, setState, nSpeedX, nSpeedY, stateStarting, stateFinished, getGlobalPos, collideWithMap;
function Character (_sID) {
super(_sID);
sFloorColliderID = "floor";
sWallColliderID = "wall";
sCeilingColliderID = "ceiling";
sFrontColliderName = "front";
sBackColliderName = "back";
sBottomColliderName = "bottom";
sTopColliderName = "top";
nMoveSpeedX = SPEED_RUN;
nAirSpeedX = SPEED_AIR_MOVEX;
bNoFlip = false;
}
function setDirection(_nDirection) {
if ((_nDirection >= -1) && (_nDirection <= 1)) {
nDirection = _nDirection;
if (bNoFlip != true) {
mc._xscale = Math.abs(mc._xscale) * nDirection;
}
}
}
function getDirection() {
return(nDirection);
}
function initIdle() {
setState("idle");
}
function idle() {
nSpeedX = 0;
nSpeedY = 0;
checkFall();
}
function run() {
nSpeedX = nMoveSpeedX * nDirection;
nSpeedY = 0;
checkFall();
setPositionOutFloor();
checkWall();
}
function fall() {
if (stateStarting()) {
nSpeedY = 1;
}
if (stateFinished()) {
mc.state.stop();
}
nSpeedY = nSpeedY + (nSpeedY * GRAVITY);
if (nSpeedY > SPEED_FALL) {
nSpeedY = SPEED_FALL;
}
if (isOnGround()) {
setPositionOutFloor();
setState("land");
} else if (nSpeedX != 0) {
nSpeedX = nDirection * nAirSpeedX;
}
checkWall();
}
function land() {
nSpeedX = 0;
nSpeedY = 0;
if (stateFinished()) {
initIdle();
setPositionOutFloor();
}
}
function jump() {
if (stateStarting()) {
nAirSpeedX = SPEED_AIR_MOVEX;
nSpeedY = JUMP_FORCE;
} else {
nSpeedY = nSpeedY - (nSpeedY * GRAVITY);
if (nSpeedX != 0) {
nSpeedX = nDirection * nAirSpeedX;
}
if (nSpeedY > -1) {
setState("fall");
}
}
checkWall();
if (nSpeedY <= -1) {
checkCeiling();
}
}
function jumpStart() {
if (stateFinished()) {
setState("jump");
}
}
function onEnable() {
setDirection(nDirection);
}
function checkFall() {
var _local2 = mc._y;
while (!isOnGround()) {
mc._y = mc._y + ADJUST_FLOOR;
if ((mc._y - _local2) > DISTANCE_FALL) {
setState("fall");
break;
}
nSpeedY = mc._y - _local2;
}
if (mc._y != _local2) {
mc._y = _local2;
return(false);
}
return(true);
}
function checkWall() {
if (isHittingWall()) {
setPositionOutWall();
}
}
function checkCeiling() {
if (isHittingCeiling()) {
nSpeedY = 0;
setState("fall");
}
}
function isOnGround() {
var _local2 = getGlobalPos(mc[sBottomColliderName]);
return(collideWithMap(sFloorColliderID, {x:_local2.x + nSpeedX, y:_local2.y + nSpeedY}));
}
function isHittingWall() {
var _local2;
_local2 = getGlobalPos(mc[sFrontColliderName]);
if (collideWithMap(sWallColliderID, {x:_local2.x + nSpeedX, y:_local2.y + nSpeedY})) {
return(-1);
}
if (sBackColliderName) {
_local2 = getGlobalPos(mc[sBackColliderName]);
if (collideWithMap(sWallColliderID, {x:_local2.x + nSpeedX, y:_local2.y + nSpeedY})) {
return(1);
}
}
}
function isHittingCeiling() {
var _local3 = false;
if (sTopColliderName) {
var _local2;
_local2 = getGlobalPos(mc[sTopColliderName]);
if (collideWithMap(sCeilingColliderID, {x:_local2.x + nSpeedX, y:_local2.y + nSpeedY})) {
_local3 = true;
}
}
return(_local3);
}
function setPositionOutFloor() {
while (isOnGround()) {
nSpeedY--;
}
}
function setPositionInFloor() {
while (!isOnGround()) {
nSpeedY++;
}
}
function setPositionOutWall() {
var _local2;
var _local3 = 0;
while (_local2 = isHittingWall() && (_local3 < 10) , _local2) {
_local2 = isHittingWall();
nSpeedX = nSpeedX + (_local2 * (mc._xscale / Math.abs(mc._xscale)));
_local3++;
}
}
var ADJUST_FLOOR = 1;
var DISTANCE_FALL = 8;
var JUMP_FORCE = -20;
var GRAVITY = 0.2;
var SPEED_RUN = 3;
var SPEED_FALL = 10;
var SPEED_AIR_MOVEX = 3;
}
Symbol 2008 MovieClip [__Packages.elements.characters.Timmy] Frame 0
class elements.characters.Timmy extends sarbakan.visual.element.basicElement.Character
{
var setLinkage, oCtrl, sCeilingColliderID, oAttachProperties, nAttackDelayCount, aComboKeySequenceLeft, aComboKeySequenceRight, nEnergy, attachMC, setDirection, bInvincible, oHurtingEnnemy, nHitSpeedX, nHitSpeedY, setState, oHarpoon, bWin, getState, nInvincibilityCount, oKey, nDirection, nSpeedX, mc, stateCurrentFrame, stateStarting, bJumping, bDroppedByCosmo, nFallDistance, nSpeedY, stateFinished, checkWall, stopOnLastFrame, isOnGround, setPositionOutFloor, oCosmo, bCaptured, nAirSpeedX, oInvincibleSound, getGlobalPos, collideWithElement;
function Timmy () {
super("timmy");
setLinkage("timmy");
oCtrl = Controller.getInstance();
sCeilingColliderID = "floor";
oAttachProperties._x = SPAWN_X;
oAttachProperties._y = SPAWN_Y;
nAttackDelayCount = 0;
aComboKeySequenceLeft = [];
aComboKeySequenceRight = [];
nEnergy = GameData.ENERGY_TIMMY;
setupKeys();
}
function init() {
attachMC();
setDirection(1);
}
function update() {
super.update();
updateInvincibility();
checkGlobalKeys();
}
function setEnergy(_nEnergy) {
nEnergy = _nEnergy;
oCtrl.oHUD.updateEnergyInstant();
}
function loseEnergy(_nEnergy) {
nEnergy = nEnergy - _nEnergy;
nEnergy = Math.max(0, nEnergy);
if (nEnergy == 0) {
oCtrl.onLose();
}
}
function initHurt(_oHurtingEnnemy, _nHitSpeedX, _nHitSpeedY, _nEnergyValue) {
if ((!bInvincible) && (!isHurt())) {
oHurtingEnnemy = _oHurtingEnnemy;
nHitSpeedX = _nHitSpeedX;
nHitSpeedY = _nHitSpeedY;
setState("hurt");
loseEnergy(_nEnergyValue);
if (oHarpoon != undefined) {
oHarpoon.setState("disappear");
delete oHarpoon;
}
}
}
function gainEnergy(_nEnergyValue) {
nEnergy = nEnergy + _nEnergyValue;
nEnergy = Math.min(nEnergy, GameData.ENERGY_TIMMY);
}
function isHurt() {
return(((bWin || (getState() == "hurt")) || (getState() == "hurtFall")) || (getState() == "captured"));
}
function initInvincibility() {
bInvincible = true;
nInvincibilityCount = 0;
}
function idle() {
super.idle();
if (bWin) {
setDirection(1);
setState("run");
} else {
if (oKey.RIGHT) {
setDirection(1);
setState("run");
} else if (oKey.LEFT) {
setDirection(-1);
setState("run");
} else if (isBlockedByScreen().left) {
setDirection(1);
setState("run");
}
if (oKey.JUMP) {
setState("jump");
}
checkAttack();
}
}
function idleWeak() {
idle();
}
function run() {
super.run();
var _local3 = isBlockedByScreen();
if (!bWin) {
if (((nDirection == 1) && (oKey.LEFT)) && (!oKey.RIGHT)) {
setDirection(-1);
} else if (((nDirection == -1) && (!oKey.LEFT)) && (oKey.RIGHT)) {
setDirection(1);
} else if (((nDirection == -1) && (oKey.LEFT)) && (_local3.left)) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
} else if (((nDirection == 1) && (oKey.RIGHT)) && (_local3.right)) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
} else if (((!oKey.LEFT) && (!oKey.RIGHT)) && (_local3.left)) {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
setDirection(1);
} else if ((((!bWin) && (!oKey.LEFT)) && (!oKey.RIGHT)) && (!_local3.left)) {
initIdle();
}
checkAttack();
if (oKey.JUMP) {
setState("jump");
}
if (((nDirection == 1) && (mc._x > (GameData.LEVEL_WIDTH - LEVEL_END_BLOCK_LIMIT))) && (!oCtrl.oLevel.bBoss)) {
nSpeedX = 0;
}
}
if (bWin && (mc._x > (GameData.LEVEL_WIDTH + LEVEL_END_BLOCK_LIMIT))) {
oCtrl.onLevelDone();
}
if ((stateCurrentFrame() == FRAME_STEP1) || (stateCurrentFrame() == FRAME_STEP2)) {
if (mc._y > 250) {
sarbakan.sound.SoundManager.play("walk" + sarbakan.utils.MoreMath.random(1, 3), GameData.VOLUME_STEP);
} else {
sarbakan.sound.SoundManager.play("walkMetal" + sarbakan.utils.MoreMath.random(1, 2), GameData.VOLUME_STEP);
}
}
}
function jump() {
super.jump();
if (stateStarting()) {
bJumping = true;
sarbakan.sound.SoundManager.play("jump", GameData.VOLUME_JUMP);
}
if (!bWin) {
checkAirControl();
checkAttack();
}
if (isBlockedByScreen().left) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
} else if (isBlockedByScreen().right) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
}
}
function fall() {
super.fall();
if (!bWin) {
checkAirControl();
checkAttack();
}
if (stateStarting()) {
if (bDroppedByCosmo) {
nFallDistance = DISTANCE_HIT_WORM;
} else {
nFallDistance = 0;
}
}
bDroppedByCosmo = false;
nFallDistance = nFallDistance + nSpeedY;
if (isBlockedByScreen().left) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
} else if (isBlockedByScreen().right) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
}
}
function land() {
super.land();
if (stateStarting() && (isJumpHurtingTapeworm())) {
setState("jump");
oCtrl.oLevel.oBoss.initHurtTail();
}
if (stateStarting()) {
sarbakan.sound.SoundManager.play("land", GameData.VOLUME_LAND);
}
if (stateFinished()) {
bJumping = false;
}
}
function kick() {
attack();
}
function punch() {
attack();
}
function attack() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
sarbakan.sound.SoundManager.play("swoosh" + sarbakan.utils.MoreMath.random(1, 2), GameData.VOLUME_SWOOSH);
}
blockAtScreenLimit();
if (stateCurrentFrame() == FRAME_HIT) {
var _local2;
if (getState() == "punch") {
_local2 = elements.characters.BaseEnnemy.checkIfHit(this, mc.hit, HIT_PUNCH_SPEEDX, HIT_PUNCH_SPEEDY, GameData.ENERGY_HIT_PUNCH);
oCtrl.addScore(GameData.SCORE_PUNCH * _local2);
} else {
_local2 = elements.characters.BaseEnnemy.checkIfHit(this, mc.hit, HIT_KICK_SPEEDX, HIT_KICK_SPEEDY, GameData.ENERGY_HIT_KICK);
oCtrl.addScore(GameData.SCORE_KICK * _local2);
}
if (_local2 > 0) {
sarbakan.sound.SoundManager.play("hit" + sarbakan.utils.MoreMath.random(1, 3), GameData.VOLUME_HIT);
}
if (isHittingTapeworm()) {
oCtrl.oLevel.oBoss.initHurtHead();
oCtrl.addScore(GameData.SCORE_KICK);
}
if (isHittingTapewormMini()) {
oCtrl.oLevel.oBoss.initHurtHead();
oCtrl.addScore(GameData.SCORE_KICK);
}
}
if (stateFinished()) {
if (bJumping) {
setState("fall");
} else {
initIdle();
}
}
}
function jumpOuch() {
fall();
}
function hurt() {
if (stateStarting()) {
nSpeedY = -1 * nHitSpeedY;
if (oHurtingEnnemy.nDirection != undefined) {
nDirection = oHurtingEnnemy.nDirection;
}
} else {
nSpeedY = nSpeedY - (nSpeedY * GRAVITY);
nSpeedX = nDirection * nHitSpeedX;
if (nSpeedY > -1) {
nSpeedY = 1;
setState("hurtFall");
}
}
checkWall();
if (nSpeedY <= -1) {
checkCeiling();
}
if (stateFinished()) {
stopOnLastFrame();
}
blockAtScreenLimit();
}
function hurtFall() {
if (stateFinished()) {
stopOnLastFrame();
}
nSpeedY = nSpeedY + (nSpeedY * GRAVITY);
if (nSpeedY > SPEED_FALL) {
nSpeedY = SPEED_FALL;
}
if (isOnGround()) {
setPositionOutFloor();
setState("land");
} else {
nSpeedX = (nDirection * nHitSpeedX) / 2;
}
checkWall();
blockAtScreenLimit();
}
function captured() {
nSpeedX = 0;
nSpeedY = 0;
}
function eat() {
nSpeedX = 0;
nSpeedY = 0;
if (stateStarting()) {
sarbakan.sound.SoundManager.play("eat", GameData.VOLUME_EAT);
}
mc.state.mcBonus.gotoAndStop(oCosmo.sLastUsedBonusID);
if (stateFinished()) {
initIdle();
}
blockAtScreenLimit();
}
function harpoon() {
nSpeedX = 0;
nSpeedY = 0;
if (stateStarting()) {
sarbakan.sound.SoundManager.play("harpoonThrow", GameData.VOLUME_HARPOON_THROW);
}
if (stateFinished() && (oHarpoon == undefined)) {
mc.state.stop();
oHarpoon = new elements.Harpoon(this);
oCtrl.oLevel.addInteractiveElement(oHarpoon);
}
blockAtScreenLimit();
}
function win() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
sarbakan.sound.SoundManager.play("tadam", GameData.VOLUME_TADAM);
}
if (stateFinished()) {
if (oCtrl.oLevel.bBoss) {
setState("idle");
} else {
setDirection(1);
setState("run");
}
}
}
function onHarpoonDone(_oHarpoon) {
if ((_oHarpoon == oHarpoon) && (getState() == "harpoon")) {
initIdle();
delete oHarpoon;
}
}
function onCapture() {
bCaptured = true;
}
function onRelease() {
bCaptured = false;
}
function onWin() {
bWin = true;
setState("win");
}
function setupKeys() {
oKey = sarbakan.input.KeyManager.getInstance();
oKey.addKeyListener(37, "LEFT");
oKey.addKeyListener(39, "RIGHT");
oKey.addKeyListener(38, "JUMP");
oKey.addKeyListener(40, "DOWN");
oKey.addKeyListener(32, "KICK");
oKey.addKeyListener(17, "PUNCH");
oKey.addKeyListener(8, "CHEAT");
oKey.addKeyListener(80, "PAUSE");
oKey.addKeyListener(77, "EASTEREGG");
}
function checkAirControl() {
if ((!oKey.LEFT) && (!oKey.RIGHT)) {
nAirSpeedX = 0;
}
if ((nDirection == 1) && (oKey.LEFT)) {
setDirection(-1);
}
if ((nDirection == -1) && (oKey.RIGHT)) {
setDirection(1);
}
if ((nSpeedX == 0) && (oKey.RIGHT || (oKey.LEFT))) {
if (oKey.RIGHT) {
setDirection(1);
} else {
setDirection(-1);
}
nSpeedX = nDirection * SPEED_RUN;
}
}
function checkAttack() {
if (nAttackDelayCount < (ATTACK_DELAY_KICK + ATTACK_DELAY_PUNCH)) {
nAttackDelayCount++;
}
if ((nAttackDelayCount >= ATTACK_DELAY_KICK) || (nAttackDelayCount >= ATTACK_DELAY_PUNCH)) {
if ((nAttackDelayCount >= ATTACK_DELAY_KICK) && (oKey.KICK)) {
nAttackDelayCount = 0;
setState("kick");
} else if ((nAttackDelayCount >= ATTACK_DELAY_PUNCH) && (oKey.PUNCH)) {
nAttackDelayCount = 0;
setState("punch");
} else if ((oHarpoon == undefined) && (checkHarpoonCombo(COMBO_HARPOON_LEFT, aComboKeySequenceLeft) || (checkHarpoonCombo(COMBO_HARPOON_RIGHT, aComboKeySequenceRight)))) {
nAttackDelayCount = 0;
aComboKeySequenceRight = [];
aComboKeySequenceLeft = [];
setState("harpoon");
}
}
}
function checkGlobalKeys() {
if (oKey.PAUSE) {
oCtrl.oHUD.showMenu();
}
if (oKey.EASTEREGG && (!oCtrl.bEasterEgg)) {
oCtrl.bEasterEgg = true;
oCtrl.initMusic("musicEasterEgg");
}
}
function checkHarpoonCombo(_aCombo, _aSequence) {
var _local3 = true;
for (var _local5 in _aCombo) {
if (!oKey[_aCombo[_local5]]) {
_local3 = false;
break;
}
}
var _local6 = _aSequence.length;
if ((!_local3) && (oKey[_aCombo[_local6]])) {
_aSequence.push(_aCombo[_local6]);
} else if (_local3 || ((oKey.bAllKeyUp == false) && (!oKey[_aSequence[_aSequence.length - 1]]))) {
_aSequence = [];
}
return(_aSequence.length == _aCombo.length);
}
function checkCeiling() {
if (isHittingCeiling()) {
nSpeedY = 0;
setState("jumpOuch");
}
}
function initIdle() {
if (nEnergy <= (GameData.ENERGY_TIMMY / 4)) {
setState("idleWeak");
} else {
setState("idle");
}
}
function updateInvincibility() {
if (bInvincible) {
oInvincibleSound = sarbakan.sound.SoundManager.play("invincible", GameData.VOLUME_INVINCIBLE, 99999, true);
var _local2 = new Color(mc);
if ((++nInvincibilityCount) < INVINCIBILITY_DURATION) {
if ((nInvincibilityCount % 5) == 0) {
_local2.setTransform(GameData.COLOR_TRANSFORM_NONE);
} else {
_local2.setTransform(INVINCIBILITY_COLOR_TRANSFORM);
}
} else {
bInvincible = false;
_local2.setTransform(GameData.COLOR_TRANSFORM_NONE);
}
} else if (oInvincibleSound) {
sarbakan.sound.SoundManager.stop(oInvincibleSound);
delete oInvincibleSound;
}
}
function isBlockedByScreen() {
var _local2 = getGlobalPos(mc);
return({left:_local2.x < GameData.SCREEN_PUSH_DISTANCE, right:(_local2.x > (GameData.SCREEN_WIDTH - GameData.SCREEN_PUSH_DISTANCE)) || (((nDirection == 1) && (mc._x > (GameData.LEVEL_WIDTH - LEVEL_END_BLOCK_LIMIT))) && (!oCtrl.oLevel.bBoss))});
}
function blockAtScreenLimit() {
if (isBlockedByScreen().left) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED + 14;
setDirection(1);
}
} else if (isBlockedByScreen().right) {
nSpeedX = 0;
}
}
function isHittingCeiling() {
return(super.isHittingCeiling() || (mc._y <= CEILING_LIMIT_Y));
}
function isHittingTapeworm() {
var _local2 = oCtrl.oLevel.oBoss.getState();
return(((oCtrl.oLevel.sLevelID == "boss2") && (_local2 == "run")) && (oCtrl.oLevel.oBoss.collideWithElement("timmy", mc.mcHead)));
}
function isJumpHurtingTapeworm() {
return((((oCtrl.oLevel.sLevelID == "boss2") && (nFallDistance >= DISTANCE_HIT_WORM)) && (oCtrl.oLevel.oBoss.stateIsNot("appear", "disappear"))) && (collideWithElement("tapeworm")));
}
function isHittingTapewormMini() {
var _local2 = oCtrl.oLevel.oBoss.getState();
return(((oCtrl.oLevel.sLevelID == "boss2") && ((_local2 == "idleMini") || (_local2 == "runMini"))) && (collideWithElement("tapeworm")));
}
static var SPAWN_X = 20;
static var SPAWN_Y = 250;
var JUMP_FORCE = -25;
var GRAVITY = 0.28;
var SPEED_RUN = 5;
var SPEED_FALL = 10;
var SPEED_AIR_MOVEX = 3;
var SPEED_INAIR_BREAK = 0.33;
var CEILING_LIMIT_Y = 66;
var ATTACK_DELAY_PUNCH = 5;
var ATTACK_DELAY_KICK = 12;
var LEVEL_END_BLOCK_LIMIT = 90;
static var HIT_PUNCH_SPEEDX = 4;
static var HIT_PUNCH_SPEEDY = 10;
static var HIT_KICK_SPEEDX = 7;
static var HIT_KICK_SPEEDY = 4;
static var DISTANCE_HIT_WORM = 100;
static var FRAME_HIT = 5;
static var FRAME_STEP1 = 5;
static var FRAME_STEP2 = 9;
static var COMBO_HARPOON_RIGHT = ["DOWN", "DOWN", "LEFT", "RIGHT"];
static var COMBO_HARPOON_LEFT = ["DOWN", "DOWN", "RIGHT", "LEFT"];
static var INVINCIBILITY_DURATION = 200;
static var INVINCIBILITY_COLOR_TRANSFORM = {ra:55, rb:128, ga:55, gb:128, ba:55, bb:128, aa:100, ab:0};
}
Symbol 2009 MovieClip [__Packages.elements.Harpoon] Frame 0
class elements.Harpoon extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oAttachProperties, oTimmy, attachMC, collideWithElement, mc, nIdleFrame, stateFinished, setState, remove;
function Harpoon (_oTimmy) {
super("harpoon" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("harpoon");
oAttachProperties._x = _oTimmy.mc._x + (CORRECTION_SPAWN_X * _oTimmy.nDirection);
oAttachProperties._y = _oTimmy.mc._y + CORRECTION_SPAWN_Y;
oAttachProperties._xscale = _oTimmy.nDirection * 100;
oTimmy = _oTimmy;
}
function init() {
attachMC();
}
function idle() {
var _local3 = 0;
var _local2 = Controller.getInstance().oLevel;
if (_local2.sLevelID == "boss2") {
if (_local2.oBoss.stateIsNot("hurt", "hurtMini", "appear", "disappear") && (collideWithElement("tapeworm", mc.state.hit))) {
_local2.oBoss.initHurtHead();
_local3 = 1;
}
} else {
_local3 = elements.characters.BaseEnnemy.checkIfHit(this, mc.state.hit, HIT_SPEEDX, HIT_SPEEDY, GameData.ENERGY_HIT_HARPOON);
}
Controller.getInstance().addScore(Number(GameData.SCORE_HARPOON * _local3));
if (_local3 > 0) {
sarbakan.sound.SoundManager.play("harpoonHit", GameData.VOLUME_HARPOON_HIT, 1, true);
}
nIdleFrame = mc.state._currentframe;
if (stateFinished()) {
setState("disappear");
}
}
function disappear() {
mc.state.mcHarpoon.gotoAndStop(nIdleFrame);
if (stateFinished()) {
oTimmy.onHarpoonDone(this);
remove();
}
}
static var CORRECTION_SPAWN_X = 44;
static var CORRECTION_SPAWN_Y = -8;
static var HIT_SPEEDX = 7;
static var HIT_SPEEDY = 4;
}
Symbol 2010 MovieClip [__Packages.elements.characters.BaseEnnemy] Frame 0
class elements.characters.BaseEnnemy extends sarbakan.visual.element.basicElement.Character
{
static var oActiveEnnemy, nOffensiveEnnemy;
var setLinkage, getGlobalPos, oAttachProperties, sCeilingColliderID, oCtrl, oLevel, oTimmy, nAttackDelayCount, bOffensiveBehavior, bSneak, bTimed, nEnterDirection, nEnterDelay, nEnterDelayCount, nEnergy, nEnergyHurt, oDecisionMaker, id, attachMC, mc, remove, setState, getState, nDirection, oElementDest, bCanJump, bJumping, bAttacking, stateStarting, nSpeedX, nSpeedY, stateCurrentFrame, collideWithElementBox, stateFinished, nHitSpeedY, nHitSpeedX, checkWall, checkCeiling, stopOnLastFrame, isOnGround, setPositionOutFloor, nSneakPoint, setDirection, nStunnedCount;
function BaseEnnemy (_sLinkage, _mc) {
super(_sLinkage + sarbakan.visual.element.BaseElement.getNextID());
setLinkage(_sLinkage);
var _local4 = getGlobalPos(_mc);
oAttachProperties._x = _local4.x;
oAttachProperties._y = _local4.y;
sCeilingColliderID = "floor";
oCtrl = Controller.getInstance();
oLevel = Controller.getInstance().oLevel;
oTimmy = Controller.getInstance().oLevel.oLayerGame.oDynamicElements.timmy;
oActiveEnnemy = {};
nAttackDelayCount = 0;
bOffensiveBehavior = false;
if (_mc.bSneak != undefined) {
bSneak = true;
}
if (_mc.bTimed != undefined) {
bTimed = true;
}
if (_mc.nDirection != undefined) {
nEnterDirection = _mc.nDirection;
}
if (_mc.nDelay != undefined) {
nEnterDelay = _mc.nDelay * GameData.FRAME_RATE;
nEnterDelayCount = 0;
}
nEnergy = ENERGY_BASE;
if (oCtrl.nDifficultyLevel >= 2) {
nEnergy = nEnergy * 2;
}
nEnergyHurt = ENERGY_HURT_TIMMY;
if (oCtrl.nDifficultyLevel >= 3) {
nEnergyHurt = nEnergyHurt * 2;
}
if (oCtrl.nDifficultyLevel >= 4) {
SPEED_RUN = SPEED_RUN * 2;
}
SPEED_RUN = SPEED_RUN + Math.random();
oDecisionMaker = new sarbakan.ai.DecisionMaker(this, id);
}
function init() {
attachMC();
mc.debug = id;
}
function update() {
super.update();
if ((!oDecisionMaker.isEmpty()) && (oDecisionMaker.isDecisionCompleted())) {
oDecisionMaker.makeDecision();
}
if (mc._x < (oLevel.nScrollX - GameData.LEVEL_DISTANCE_OFFSCREEN)) {
remove();
}
}
function enable() {
oActiveEnnemy[id] = this;
if (bSneak || (bTimed)) {
setSneakPoint();
setState("waitForEnter");
}
}
function disable() {
setBehaviorFreelance();
delete oActiveEnnemy[id];
}
static function reset() {
nOffensiveEnnemy = 0;
}
function canSwitchToOffensive() {
return(nOffensiveEnnemy < OFFENSIVE_ENNEMY_MAX);
}
function addOffensiveEnnemy(_bForce) {
if ((canSwitchToOffensive() || (_bForce)) && (bOffensiveBehavior != true)) {
nOffensiveEnnemy++;
bOffensiveBehavior = true;
}
}
function removeOffensiveEnnemy() {
if (bOffensiveBehavior == true) {
nOffensiveEnnemy--;
bOffensiveBehavior = false;
}
}
static function checkIfHit(_oHitter, _mcHit, _nSpeedXHurt, _nSpeedYHurt, _nEnergyValue) {
var _local1 = 0;
for (var _local7 in oActiveEnnemy) {
if ((!oActiveEnnemy[_local7].isHurt()) && (_oHitter.collideWithElementBox(oActiveEnnemy[_local7].id, _mcHit))) {
oActiveEnnemy[_local7].initHurt(_nSpeedXHurt, _nSpeedYHurt, _nEnergyValue);
_local1++;
}
}
return(_local1);
}
function isAttacked() {
return((((oTimmy.getState() == "punch") || (oTimmy.getState() == "kick")) && (isOnElementFloor(oTimmy))) && (isNearElement(oTimmy, DISTANCE_NEAR * 2)));
}
function isHurt() {
return((getState() == "hurt") || (getState() == "hurtFall"));
}
function isOnElementFloor(_oElement) {
var _local2 = mc._y - _oElement.mc._y;
return(_oElement.stateIsNot("jump", "fall") && (Math.abs(_local2) <= DISTANCE_FLOOR));
}
function isHigherThanElement(_oElement) {
var _local2 = mc._y - _oElement.mc._y;
return(((!isOnElementFloor(_oElement)) && (_local2 < 0)) && (Math.abs(_local2) >= DISTANCE_FLOOR));
}
function mustJumpOverHole(_oElement, _oJumpPoint) {
return((_oJumpPoint.isIndicatingHole() && (_oJumpPoint.getJumpDirection() == nDirection)) && (!isHigherThanElement(_oElement)));
}
function isNearElement(_oElement, _nDistance) {
var _local3 = mc._x - _oElement.mc._x;
if (_nDistance == undefined) {
_nDistance = DISTANCE_NEAR;
}
return(((Math.abs(_local3) <= _nDistance) && (isOnElementFloor(_oElement))) && (_oElement.getState() != "captured"));
}
function isLookingAtElement(_oElement) {
return(((nDirection == 1) && (mc._x <= _oElement.mc._x)) || ((nDirection == -1) && (mc._x >= oElementDest.mc._x)));
}
function canJump() {
return(bCanJump);
}
function setBehaviorFreelance() {
}
function setBehaviorOffensive() {
}
function setBehaviorRush() {
}
function getJumpPoint() {
var _local3;
var _local2 = Controller.getInstance().oLevel.aJumpPoints;
for (var _local4 in _local2) {
if (_local2[_local4].isOnPoint(this)) {
_local3 = _local2[_local4];
break;
}
}
return(_local3);
}
function initJump() {
bJumping = true;
setState("jump");
sarbakan.sound.SoundManager.play("jump", GameData.VOLUME_JUMP);
oDecisionMaker.clear();
}
function initAttack() {
bAttacking = true;
setState("attack");
}
function idle() {
super.idle();
if (oDecisionMaker.isEmpty()) {
if (bOffensiveBehavior || (canSwitchToOffensive() && (Math.random() < 0.4))) {
setBehaviorOffensive();
} else {
setBehaviorFreelance();
}
}
}
function attack() {
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
sarbakan.sound.SoundManager.play("swoosh" + sarbakan.utils.MoreMath.random(1, 2), GameData.VOLUME_SWOOSH);
}
if (stateCurrentFrame() == FRAME_HIT) {
if (collideWithElementBox("timmy", mc.hit)) {
oTimmy.initHurt(this, HIT_SPEEDX, HIT_SPEEDY, nEnergyHurt);
sarbakan.sound.SoundManager.play("hit" + sarbakan.utils.MoreMath.random(1, 3), GameData.VOLUME_HIT);
}
}
if (stateFinished()) {
bAttacking = false;
setState("idle");
}
blockAtScreenLimit();
}
function land() {
super.land();
if (stateFinished()) {
nDirection = 0;
bJumping = false;
}
}
function hurt() {
if (stateStarting()) {
bAttacking = false;
nSpeedY = -1 * nHitSpeedY;
nDirection = oTimmy.nDirection;
} else {
nSpeedY = nSpeedY - (nSpeedY * GRAVITY);
nSpeedX = nDirection * nHitSpeedX;
if (nSpeedY > -1) {
nSpeedY = 1;
setState("hurtFall");
}
}
checkWall();
if (nSpeedY <= -1) {
checkCeiling();
}
if (stateFinished()) {
stopOnLastFrame();
}
blockAtScreenLimit();
}
function hurtFall() {
if (stateFinished()) {
stopOnLastFrame();
}
nSpeedY = nSpeedY + (nSpeedY * GRAVITY);
if (nSpeedY > SPEED_FALL) {
nSpeedY = SPEED_FALL;
}
if (isOnGround()) {
setPositionOutFloor();
setState("land");
} else {
nSpeedX = (nDirection * nHitSpeedX) / 2;
}
checkWall();
blockAtScreenLimit();
}
function die() {
if (mc._xscale == 100) {
mc.state.mcBubble.gotoAndStop(2);
} else {
mc.state.mcBubble.gotoAndStop(1);
}
if (stateStarting()) {
nSpeedX = 0;
nSpeedY = 0;
oDecisionMaker.clear();
}
if (stateFinished()) {
remove();
oCtrl.addScore(GameData.SCORE_KILL);
}
}
function waitForEnter() {
nSpeedX = 0;
nSpeedY = 0;
oDecisionMaker.clear();
delete oElementDest;
if (((bSneak == true) && (oTimmy.mc._x >= nSneakPoint)) || (((bTimed == true) && (oLevel.reachedEndOfLevel())) && ((++nEnterDelayCount) >= nEnterDelay))) {
bSneak = false;
bTimed = false;
switch (nEnterDirection) {
case GameData.DIRECTION_LEFT :
mc._x = oLevel.nScrollX - SNEAKPOINT_SPAWN_MARGIN;
setState("idle");
break;
case GameData.DIRECTION_RIGHT :
mc._x = (oLevel.nScrollX + GameData.SCREEN_WIDTH) + SNEAKPOINT_SPAWN_MARGIN;
setState("idle");
break;
case GameData.DIRECTION_TOP :
setState("idle");
break;
case GameData.DIRECTION_DOWN :
initJump();
}
if (mc._x < oTimmy.mc._x) {
setDirection(1);
} else {
setDirection(-1);
}
}
}
function stunnedStart() {
if (stateStarting()) {
oDecisionMaker.clear();
nSpeedX = 0;
nSpeedY = 0;
}
if (stateFinished()) {
nStunnedCount = 0;
setState("stunned");
}
}
function stunned() {
if (((++nStunnedCount) >= STUNNED_DURATION) && (Math.random() < STUNNED_END_CHANCE)) {
setState("idle");
}
}
static function onStunAll() {
for (var _local1 in oActiveEnnemy) {
oActiveEnnemy[_local1].initStun();
}
}
function initHurt(_nHitSpeedX, _nHitSpeedY, _nEnergyValue) {
nEnergy = nEnergy - _nEnergyValue;
if (nEnergy <= 0) {
setState("die");
} else {
nHitSpeedX = _nHitSpeedX;
nHitSpeedY = _nHitSpeedY;
setState("hurt");
addOffensiveEnnemy(true);
setBehaviorOffensive();
}
}
function initStun() {
setState("stunnedStart");
}
function setSneakPoint() {
if (nSneakPoint == undefined) {
switch (nEnterDirection) {
case GameData.DIRECTION_LEFT :
nSneakPoint = mc._x + SNEAKPOINT_HORIZONTAL;
break;
case GameData.DIRECTION_RIGHT :
nSneakPoint = mc._x - SNEAKPOINT_HORIZONTAL;
break;
case GameData.DIRECTION_TOP :
case GameData.DIRECTION_DOWN :
nSneakPoint = mc._x - SNEAKPOINT_VERTICAL;
}
}
}
function isBlockedByScreen() {
var _local2 = getGlobalPos(mc);
return({left:_local2.x < GameData.SCREEN_PUSH_DISTANCE, right:_local2.x > (GameData.SCREEN_WIDTH - GameData.SCREEN_PUSH_DISTANCE)});
}
function blockAtScreenLimit() {
if (isBlockedByScreen().left) {
if (oCtrl.oLevel.reachedEndOfLevel()) {
nSpeedX = 0;
} else {
nSpeedX = GameData.SCREEN_PUSH_SPEED;
}
} else if (isBlockedByScreen().right) {
nSpeedX = 0;
}
}
var JUMP_FORCE = -22;
var GRAVITY = 0.28;
var SPEED_RUN = 2;
var SPEED_FALL = 10;
var SPEED_AIR_MOVEX = 3;
var SPEED_INAIR_BREAK = 0.33;
static var FRAME_HIT = 5;
var DISTANCE_LINE_OF_SIGHT = 400;
var DISTANCE_FLOOR = 40;
var DISTANCE_NEAR = 35;
var SNEAKPOINT_HORIZONTAL = 300;
var SNEAKPOINT_VERTICAL = 85;
var SNEAKPOINT_SPAWN_MARGIN = 50;
var STUNNED_DURATION = 180;
var STUNNED_END_CHANCE = 0.1;
var HIT_SPEEDX = 7;
var HIT_SPEEDY = 4;
var OFFENSIVE_ENNEMY_MAX = 2;
var ENERGY_BASE = 100;
var ENERGY_HURT_TIMMY = 5;
}
Symbol 2011 MovieClip [__Packages.sarbakan.ai.DecisionMaker] Frame 0
class sarbakan.ai.DecisionMaker
{
var oOwner, sOwner, aDecisionList, bDebug, oCurrentDecision;
function DecisionMaker (_oOwner, _sOwner) {
oOwner = _oOwner;
sOwner = _sOwner;
clear();
}
function addDecision(_oDecision) {
_oDecision.setOwner(oOwner);
aDecisionList.push(_oDecision);
}
function addDecisionFirst(_oDecision) {
aDecisionList.unshift(_oDecision);
}
function removeDecision(_sType) {
for (var _local3 in aDecisionList) {
if (aDecisionList[_local3].getType() == _sType) {
aDecisionList.splice(_local3, 1);
}
}
}
function makeDecision() {
var _local3;
if (bDebug) {
}
if (isEmpty()) {
if (bDebug) {
}
} else {
var _local2 = 0;
while (_local2 < aDecisionList.length) {
_local3 = aDecisionList[_local2];
if (_local3.make()) {
if (bDebug) {
}
break;
}
_local2++;
}
}
oCurrentDecision = _local3;
return(_local3.getType());
}
function isDecisionCompleted() {
var _local2 = true;
if (oCurrentDecision != undefined) {
_local2 = oCurrentDecision.isCompleted();
}
return(_local2);
}
function clear() {
aDecisionList = [];
}
function isEmpty() {
return(aDecisionList.length < 1);
}
function enableDebug() {
bDebug = true;
}
function disableDebug() {
bDebug = false;
}
function traceDecisionList() {
var _local2 = 0;
while (_local2 < aDecisionList.length) {
_local2++;
}
}
}
Symbol 2012 MovieClip [__Packages.sarbakan.ai.Decision] Frame 0
class sarbakan.ai.Decision
{
var oOwner, bDecisionMade;
function Decision () {
}
function setOwner(_oOwner) {
oOwner = _oOwner;
}
function make() {
bDecisionMade = false;
checkConditions();
return(bDecisionMade);
}
function getType() {
return(TYPE);
}
function toString() {
return(("[Decision " + TYPE) + "]");
}
function isCompleted() {
return(true);
}
function checkConditions() {
}
var TYPE = "Decision";
}
Symbol 2013 MovieClip [__Packages.AIJumpPoint] Frame 0
class AIJumpPoint
{
var nX, nY, nDirection, bHole, mc, oOwningEnnemy;
function AIJumpPoint (_nX, _nY, _nDirection, _bHole) {
nX = Math.round(_nX);
if (_nDirection == 1) {
nX = nX - POINT_WIDTH;
}
nY = Math.round(_nY);
nDirection = _nDirection;
bHole = _bHole;
mc = {};
mc._x = nX + (50 * _nDirection);
mc._y = nY;
}
function isOnPoint(_oEnnemy) {
return((((_oEnnemy.mc._x >= nX) && (_oEnnemy.mc._x <= (nX + POINT_WIDTH))) && (_oEnnemy.mc._y >= nY)) && (_oEnnemy.mc._y <= (nY + POINT_HEIGHT)));
}
function getJumpDirection() {
return(nDirection);
}
function isIndicatingHole() {
return(bHole);
}
function setOwningEnnemy(_oEnnemy) {
oOwningEnnemy = _oEnnemy;
}
function clearOwningEnnemy() {
delete oOwningEnnemy;
}
function hasOwningEnnemy() {
return(oOwningEnnemy != undefined);
}
function toString() {
return(((("[AIJumpPoint " + nX) + ",") + nY) + "]");
}
function stateIsNot() {
return(true);
}
static var POINT_WIDTH = 40;
static var POINT_HEIGHT = 80;
}
Symbol 2014 MovieClip [__Packages.sarbakan.input.KeyManager] Frame 0
class sarbakan.input.KeyManager
{
static var oInstance;
var oKeyList, bAllKeyUp;
function KeyManager () {
oKeyList = new Object();
}
static function getInstance() {
if (!oInstance) {
oInstance = new sarbakan.input.KeyManager();
}
initEnterFrame();
return(oInstance);
}
function addKeyListener(_nKeyCode, _sKeyName) {
oKeyList[_sKeyName] = new Object();
oKeyList[_sKeyName].nKeyCode = _nKeyCode;
this[_sKeyName] = false;
}
function onEnterFrame() {
setKey();
}
function setKey() {
var _local2;
bAllKeyUp = true;
for (_local2 in oKeyList) {
if (Key.isDown(oKeyList[_local2].nKeyCode)) {
bAllKeyUp = false;
this[_local2] = true;
} else {
this[_local2] = false;
}
}
}
static function initEnterFrame() {
mx.transitions.OnEnterFrameBeacon.init();
MovieClip.removeListener(oInstance);
MovieClip.addListener(oInstance);
}
}
Symbol 2015 MovieClip [__Packages.elements.Boot] Frame 0
class elements.Boot extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oAttachProperties, oLevel, oTimmy, attachMC, mc, collideWithElement, remove;
function Boot (_oCosmo) {
super("boot" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("boot");
oAttachProperties._x = _oCosmo.mc._x + (CORRECTION_SPAWN_X * _oCosmo.nDirectionX);
oAttachProperties._y = _oCosmo.mc._y + CORRECTION_SPAWN_Y;
if (_oCosmo.nDirectionX == 1) {
oAttachProperties._xscale = -CORRECTION_SCALE;
} else {
oAttachProperties._xscale = CORRECTION_SCALE;
}
oAttachProperties._yscale = CORRECTION_SCALE;
oLevel = Controller.getInstance().oLevel;
oTimmy = Controller.getInstance().oLevel.oLayerGame.oDynamicElements.timmy;
}
function init() {
attachMC();
}
function idle() {
mc._y = mc._y + SPEED;
if (oLevel.sLevelID == "boss2") {
if (oLevel.oBoss.stateIsNot("hurt", "hurtMini", "appear", "disappear") && (collideWithElement("tapeworm"))) {
oLevel.oBoss.initHurtHead();
Controller.getInstance().addScore(GameData.SCORE_BOOT);
}
} else {
var _local2 = 0;
_local2 = elements.characters.BaseEnnemy.checkIfHit(this, mc.hit, HIT_SPEEDX, HIT_SPEEDY, GameData.ENERGY_HIT_BOOT);
Controller.getInstance().addScore(GameData.SCORE_BOOT * _local2);
if ((!oTimmy.isHurt()) && (collideWithElement("timmy", mc.hit))) {
oTimmy.initHurt(this, HIT_SPEEDX, HIT_SPEEDY, GameData.ENERGY_HIT_BOOT);
_local2++;
}
}
if (_local2 > 0) {
sarbakan.sound.SoundManager.play("hit" + sarbakan.utils.MoreMath.random(1, 3), GameData.VOLUME_HIT);
}
if (mc._y > DISTANCE_REMOVE) {
remove();
}
}
static var DISTANCE_REMOVE = 350;
static var SPEED = 8;
static var TIMMY_HURT_SPEEDX = 3;
static var TIMMY_HURT_SPEEDY = 4;
static var CORRECTION_SPAWN_X = 30;
static var CORRECTION_SPAWN_Y = 50;
static var CORRECTION_SCALE = 80;
static var HIT_SPEEDX = 7;
static var HIT_SPEEDY = 4;
}
Symbol 2016 MovieClip [__Packages.elements.CabbageExplosion] Frame 0
class elements.CabbageExplosion extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oAttachProperties, attachMC, stateStarting, stateCurrentFrame, mc, stateFinished, remove;
function CabbageExplosion (_oCosmo) {
super("cabbageExplosion" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("cabbageExplosion");
oAttachProperties._x = _oCosmo.mc._x + CORRECTION_SPAWN_X;
oAttachProperties._y = _oCosmo.mc._y + CORRECTION_SPAWN_Y;
if ((oAttachProperties._y > MAX_Y) || (Controller.getInstance().oLevel.bMultiplayer != true)) {
oAttachProperties._y = MAX_Y;
}
}
function init() {
attachMC();
}
function idle() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("cabbage", GameData.VOLUME_CABBAGE, 1, true);
}
if (stateCurrentFrame() == FRAME_HIT) {
elements.characters.BaseEnnemy.checkIfHit(this, mc.hit, 0, 0, GameData.ENERGY_HIT_CABBAGEBOMB);
}
if (stateFinished()) {
remove();
}
}
static var CORRECTION_SPAWN_X = 0;
static var CORRECTION_SPAWN_Y = 120;
static var MAX_Y = 275;
static var FRAME_HIT = 12;
}
Symbol 2017 MovieClip [__Packages.elements.Points] Frame 0
class elements.Points extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oAttachProperties, attachMC, stateFinished, remove;
function Points (_oCosmo) {
super("points" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("points");
oAttachProperties._x = _oCosmo.mc._x + CORRECTION_SPAWN_X;
oAttachProperties._y = _oCosmo.mc._y + CORRECTION_SPAWN_Y;
}
function init() {
attachMC();
}
function idle() {
if (stateFinished()) {
remove();
}
}
static var CORRECTION_SPAWN_X = 0;
static var CORRECTION_SPAWN_Y = 0;
}
Symbol 2018 MovieClip [__Packages.sarbakan.utils.PercentRandomizer] Frame 0
class sarbakan.utils.PercentRandomizer
{
var aElements;
function PercentRandomizer () {
aElements = [];
}
function addItem(_sID, _nChances) {
var _local3;
if (aElements.length == 0) {
_local3 = 0;
} else {
_local3 = aElements[aElements.length - 1].chance;
}
var _local2 = _local3 + (_nChances / 100);
if (_local2 > 1) {
} else if (_local2 > 0) {
aElements.push({id:_sID, chance:_local2});
}
}
function getRandomItem() {
var _local3 = Math.random();
var _local4 = aElements.length;
var _local2 = 0;
while (_local2 < _local4) {
if (_local3 <= aElements[_local2].chance) {
return(aElements[_local2].id);
}
_local2++;
}
}
}
Symbol 2019 MovieClip [__Packages.sarbakan.visual.activation.NoActivation] Frame 0
class sarbakan.visual.activation.NoActivation extends sarbakan.visual.activation.ActivationManager
{
var oDynamicElements, oStaticElements, oElementsToDelete, bEnableElements;
function NoActivation () {
super();
oDynamicElements = {};
oStaticElements = {};
oElementsToDelete = {};
bEnableElements = false;
}
function addDynamicElement(_oElement, _nX, _nY, _nWidth, _nHeight) {
oDynamicElements[_oElement.id] = _oElement;
delete oElementsToDelete[_oElement.id];
bEnableElements = true;
}
function addAlwaysActiveElement(_oElement) {
addDynamicElement(_oElement);
}
function removeDynamicElement(_oElement) {
oElementsToDelete[_oElement.id] = _oElement;
}
function removeAlwaysActiveElement(_oElement) {
removeDynamicElement(_oElement);
}
function addStaticElement(_oElement, _nX, _nY, _nWidth, _nHeight) {
oStaticElements[_oElement.id] = _oElement;
bEnableElements = true;
}
function getActiveElements() {
var _local2 = [];
for (var _local3 in oElementsToDelete) {
delete oDynamicElements[_local3];
}
oElementsToDelete = {};
for (var _local3 in oDynamicElements) {
_local2.push(oDynamicElements[_local3]);
if (bEnableElements) {
oDynamicElements[_local3].enable();
}
}
if (bEnableElements) {
for (var _local3 in oStaticElements) {
oStaticElements[_local3].enable();
}
}
bEnableElements = false;
return(_local2);
}
}
Symbol 2020 MovieClip [__Packages.HUD] Frame 0
class HUD
{
var mc, oCtrl, oTimmy, oScoreField;
function HUD (_mcHUD) {
mc = _mcHUD;
oCtrl = Controller.getInstance();
oTimmy = oCtrl.oLevel.oLayerGame.oDynamicElements.timmy;
updateEnergyInstant();
oScoreField = new sarbakan.packaging.DigitBitmapField([mc.mcDigit0, mc.mcDigit1, mc.mcDigit2, mc.mcDigit3, mc.mcDigit4, mc.mcDigit5, mc.mcDigit6, mc.mcDigit7, mc.mcDigit8]);
oScoreField.setContent(oCtrl.nScore);
mc.btMenu.onRelease = sarbakan.utils.Delegate.create(this, showMenu);
}
function update() {
updateEnergy();
updateScore();
}
function updateEnergyInstant() {
mc.mcEnergy.gotoAndStop(oTimmy.nEnergy);
}
function showMenu() {
oCtrl.oPackaging.clickSound();
oCtrl.oLevel.pause();
mc.mcMenu.gotoAndPlay("menu");
mc.mcMenu.mcContent.btResume.onRelease = sarbakan.utils.Delegate.create(this, onBtResume, "menuOut");
mc.mcMenu.mcContent.btInstructions.onRelease = sarbakan.utils.Delegate.create(this, onBtInstructions);
mc.mcMenu.mcContent.btQuit.onRelease = sarbakan.utils.Delegate.create(this, onBtQuit);
oCtrl.oLevel.oBoss.nStopDelayCount = 999999 /* 0x0F423F */;
sarbakan.sound.SoundManager.stop(oCtrl.oLevel.oBoss.oRunSound);
updateSoundMenu();
}
function hideMenu(_sLabelToGo) {
oCtrl.oLevel.unpause();
mc.mcMenu.gotoAndPlay(_sLabelToGo);
}
function onBtResume(_sLabelToGo) {
oCtrl.oPackaging.clickSound();
hideMenu(_sLabelToGo);
}
function onBtInstructions() {
oCtrl.oPackaging.clickSound();
oCtrl.oPackaging.goto("instructions1");
}
function onBtQuit() {
oCtrl.oPackaging.clickSound();
mc.mcMenu.gotoAndStop("quit");
mc.mcMenu.mcContent.btYes.onRelease = sarbakan.utils.Delegate.create(oCtrl, oCtrl.onLose);
mc.mcMenu.mcContent.btNo.onRelease = sarbakan.utils.Delegate.create(this, onBtResume, "quitOut");
}
function onMute() {
sarbakan.sound.SoundManager.mute();
updateSoundMenu();
}
function onUnMute() {
oCtrl.oPackaging.clickSound();
sarbakan.sound.SoundManager.unmute();
updateSoundMenu();
}
function updateEnergy() {
if (mc.mcEnergy._currentframe < oTimmy.nEnergy) {
mc.mcEnergy.nextFrame();
} else if (mc.mcEnergy._currentframe > oTimmy.nEnergy) {
mc.mcEnergy.prevFrame();
}
}
function updateScore() {
if (oScoreField.getContent() < oCtrl.nScore) {
oScoreField.setContent(oScoreField.getContent() + SCORE_INCREMENT_STEP);
oScoreField.setContent(Math.min(oScoreField.getContent(), oCtrl.nScore));
}
}
function updateSoundMenu() {
if (sarbakan.sound.SoundManager.isMuted()) {
mc.mcMenu.mcContent.mcSound.gotoAndStop("off");
mc.mcMenu.mcContent.mcSound.btOn.onRelease = sarbakan.utils.Delegate.create(this, onUnMute);
} else {
mc.mcMenu.mcContent.mcSound.gotoAndStop("on");
mc.mcMenu.mcContent.mcSound.btOff.onRelease = sarbakan.utils.Delegate.create(this, onMute);
}
}
static var SCORE_INCREMENT_STEP = 500;
}
Symbol 2021 MovieClip [__Packages.sarbakan.packaging.DigitBitmapField] Frame 0
class sarbakan.packaging.DigitBitmapField
{
var mcDigitList, nNumber;
function DigitBitmapField (_mcDigitList) {
mcDigitList = _mcDigitList;
setContent(0);
}
function setContent(_number) {
nNumber = _number;
update();
}
function getContent() {
return(nNumber);
}
function update() {
var _local3 = getNumberToPaddedString();
var _local2 = 0;
while (_local2 < mcDigitList.length) {
mcDigitList[_local2].gotoAndStop(Number(_local3.charAt(_local2)) + 1);
_local2++;
}
}
function getNumberToPaddedString() {
var _local2 = String(nNumber);
while (_local2.length < mcDigitList.length) {
_local2 = "0" + _local2;
}
return(_local2);
}
}
Symbol 2022 MovieClip [__Packages.elements.Lashes] Frame 0
class elements.Lashes extends sarbakan.visual.element.DynamicElement
{
var setLinkage, getGlobalPos, oAttachProperties, oLevel, oTimmy, removeReferenceMC, attachMC, mc, remove, id, setState, nReleaseDelay, nReleaseDelayCount, nDirection, stateStarting, stateCurrentFrame;
function Lashes (_mc) {
super("lashes" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("lashes");
var _local3 = getGlobalPos(_mc);
oAttachProperties._x = _local3.x;
oAttachProperties._y = _local3.y;
oLevel = Controller.getInstance().oLevel;
oTimmy = Controller.getInstance().oLevel.oLayerGame.oDynamicElements.timmy;
}
function init() {
removeReferenceMC();
attachMC();
}
function update() {
super.update();
if (mc._x < (oLevel.nScrollX - GameData.LEVEL_DISTANCE_OFFSCREEN)) {
remove();
}
}
function idle() {
if ((((((oTimmy.getState() == "idle") || (oTimmy.getState() == "run")) && (!oTimmy.isHurt())) && (!oTimmy.bCaptured)) && (!oTimmy.bInvincible)) && (oTimmy.collideWithElement(id, mc.bottom))) {
oTimmy.onCapture();
setState("capture");
nReleaseDelay = RELEASE_DELAY;
if (oLevel.bMultiplayer) {
nReleaseDelay = nReleaseDelay * 2;
}
nReleaseDelayCount = 0;
nDirection = oTimmy.nDirection;
}
}
function capture() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("lashesSound", GameData.VOLUME_LASHES);
}
if (stateCurrentFrame() == FRAME_CAPTURE) {
oTimmy.setState("captured");
} else if ((stateCurrentFrame() > FRAME_CAPTURE) && (oTimmy.getState() != "captured")) {
setState("idle");
} else if (((++nReleaseDelayCount) >= RELEASE_DELAY) || (getGlobalPos(mc).x < 25)) {
setState("release");
}
}
function release() {
if (stateCurrentFrame() == (FRAME_RELEASE - 1)) {
oTimmy.setState("idle");
}
if (stateCurrentFrame() == FRAME_RELEASE) {
var _local2 = getGlobalPos(mc);
if (_local2.x < RELEASE_LIMIT_LEFT) {
nDirection = 1;
} else if (_local2.x > RELEASE_LIMIT_RIGHT) {
nDirection = -1;
}
oTimmy.onRelease();
oTimmy.setDirection(nDirection);
oTimmy.mc._x = oTimmy.mc._x + (RELEASE_TIMMY_ADJUST * nDirection);
oTimmy.initHurt(this, RELEASE_TIMMY_SPEEDX, RELEASE_TIMMY_SPEEDY, GameData.ENERGY_HURT_LASHES);
setState("idle");
}
}
static var RELEASE_DELAY = 65;
static var RELEASE_TIMMY_ADJUST = 50;
static var RELEASE_TIMMY_SPEEDX = 6;
static var RELEASE_TIMMY_SPEEDY = 4;
static var RELEASE_LIMIT_LEFT = 100;
static var RELEASE_LIMIT_RIGHT = 500;
static var FRAME_CAPTURE = 6;
static var FRAME_RELEASE = 2;
var DISTANCE_OFFSCREEN = 100;
}
Symbol 2023 MovieClip [__Packages.elements.Lump] Frame 0
class elements.Lump extends sarbakan.visual.element.DynamicElement
{
var setLinkage, getGlobalPos, oAttachProperties, nFrequency, nSpeed, nDropDelayCount, oLevel, nAttachDepth, oOwner, setMC, sLinkage, id, mc, remove, setState, stateStarting, stateCurrentFrame, stateFinished;
function Lump (_mc, _oData) {
super("lump" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("lump");
var _local3 = getGlobalPos(_mc);
oAttachProperties._x = _local3.x;
oAttachProperties._y = _local3.y;
nFrequency = _oData.nFrequency * GameData.FRAME_RATE;
nSpeed = _oData.nSpeed;
nDropDelayCount = 0;
oLevel = Controller.getInstance().oLevel;
}
function init() {
attachMC();
}
function attachMC() {
if (nAttachDepth == undefined) {
nAttachDepth = oOwner.getNextDepth();
oOwner.reserveDepth(nAttachDepth);
}
setMC(oLevel.oLayerBackground.mc.mcBg.mcLump.attachMovie(sLinkage, id, nAttachDepth, oAttachProperties));
oLevel.oLayerBackground.mc.mcBg.mcFloor.swapDepths(oLevel.oLayerBackground.mc.mcBg.getNextHighestDepth());
}
function update() {
super.update();
if (mc._x < (oLevel.nScrollX - GameData.LEVEL_DISTANCE_OFFSCREEN)) {
remove();
}
}
function idle() {
if ((++nDropDelayCount) == nFrequency) {
setState("spit");
nDropDelayCount = 0;
}
}
function spit() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("lumpSpit", GameData.VOLUME_LUMP_SPIT);
}
if (stateCurrentFrame() == FRAME_SPIT) {
oLevel.addInteractiveElement(new elements.LumpDrop(mc, nSpeed));
}
if (stateFinished()) {
setState("idle");
}
}
static var FRAME_SPIT = 6;
}
Symbol 2024 MovieClip [__Packages.elements.LumpDrop] Frame 0
class elements.LumpDrop extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oAttachProperties, nSpeed, oLevel, oCosmo, attachMC, mc, remove, stateStarting, stateFinished, collideWithElementBox, setState, collideWithElement;
function LumpDrop (_mcLump, _nSpeed) {
super("lumpDrop" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("lumpDrop");
oAttachProperties._x = _mcLump._x;
oAttachProperties._y = _mcLump._y + CORRECTION_SPAWN_Y;
nSpeed = _nSpeed;
oLevel = Controller.getInstance().oLevel;
if (oLevel.bMultiplayer) {
oCosmo = oLevel.oLayerGame.oDynamicElements.cosmo;
}
}
function init() {
attachMC();
}
function idle() {
mc._y = mc._y + nSpeed;
if (!checkIfHitCosmo()) {
checkIfHitTimmy();
}
if (mc._y > DISTANCE_REMOVE) {
remove();
}
}
function hit() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("lumpHit", GameData.VOLUME_LUMP_HIT);
}
if (stateFinished()) {
remove();
}
}
function checkIfHitCosmo() {
if ((((oLevel.bMultiplayer == true) && (oCosmo.sUsedBonusID == undefined)) && (oCosmo.sStoredBonusID == undefined)) && (collideWithElementBox("cosmo", mc.hit))) {
setState("hit");
oCosmo.onHitDrop();
return(true);
}
}
function checkIfHitTimmy() {
if (collideWithElement("timmy", mc.hit)) {
setState("hit");
oLevel.oLayerGame.oDynamicElements.timmy.initHurt(this, TIMMY_HURT_SPEEDX, TIMMY_HURT_SPEEDY, GameData.ENERGY_HURT_LUMP);
return(true);
}
}
static var DISTANCE_REMOVE = 350;
static var TIMMY_HURT_SPEEDX = 3;
static var TIMMY_HURT_SPEEDY = 4;
static var CORRECTION_SPAWN_Y = 40;
}
Symbol 2025 MovieClip [__Packages.elements.characters.EnnemyTimmase] Frame 0
class elements.characters.EnnemyTimmase extends elements.characters.BaseEnnemy
{
var bCanJump, oDecisionMaker, removeOffensiveEnnemy, oTimmy, addOffensiveEnnemy, stateStarting;
function EnnemyTimmase (_mc) {
super("timmase", _mc);
bCanJump = true;
}
function setBehaviorFreelance() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionDefenseJump(CHANCE_DEFENSE_JUMP));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionWait());
oDecisionMaker.addDecision(new decisions.DecisionJumpAtPoint());
oDecisionMaker.addDecision(new decisions.DecisionFreelance());
oDecisionMaker.addDecision(new decisions.DecisionIdle());
removeOffensiveEnnemy();
}
function setBehaviorOffensive() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionLookAtPlayer());
oDecisionMaker.addDecision(new decisions.DecisionDefenseJump(CHANCE_DEFENSE_JUMP));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionJumpAtPoint());
oDecisionMaker.addDecision(new decisions.DecisionRandomJump(CHANCE_RANDOM_JUMP));
oDecisionMaker.addDecision(new decisions.DecisionGoNearElement(oTimmy, CHANCE_RANDOM_PAUSE));
oDecisionMaker.addDecision(new decisions.DecisionIdle());
addOffensiveEnnemy();
}
function setBehaviorRush() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionDefenseJump(CHANCE_DEFENSE_JUMP));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionRunToLimit());
oDecisionMaker.addDecision(new decisions.DecisionIdle());
removeOffensiveEnnemy();
}
function die() {
super.die();
if (stateStarting()) {
sarbakan.sound.SoundManager.play("timmaseDie", GameData.VOLUME_TIMMASE_DIE);
}
}
var SPEED_RUN = 3;
var STUNNED_DURATION = 60;
var CHANCE_DEFENSE_JUMP = 0.8;
var CHANCE_RANDOM_JUMP = 0.05;
var CHANCE_RANDOM_PAUSE = 0.05;
var CHANCE_ATTACK = 0.2;
var DELAY_ATTACK = 10;
var ENERGY_BASE = GameData.ENERGY_LIFE_TIMMASE;
var ENERGY_HURT_TIMMY = GameData.ENERGY_HURT_TIMMASE;
}
Symbol 2026 MovieClip [__Packages.decisions.DecisionDefenseJump] Frame 0
class decisions.DecisionDefenseJump extends sarbakan.ai.Decision
{
var nDefenseChance, oOwner, bDecisionMade;
function DecisionDefenseJump (_nDefenseChance) {
super();
nDefenseChance = _nDefenseChance;
}
function isCompleted() {
if (oOwner.bJumping == false) {
oOwner.bNoFlip = false;
oOwner.nAirSpeedX = oOwner.nAirSpeedX / 3;
oOwner.setDirection(oOwner.oTimmy.nDirection * -1);
return(true);
}
}
function checkConditions() {
if (((!oOwner.isHurt()) && (oOwner.isAttacked())) && (Math.random() <= nDefenseChance)) {
oOwner.nAirSpeedX = oOwner.nAirSpeedX * 3;
if (Math.random() > 0.5) {
oOwner.bNoFlip = true;
oOwner.initJump();
oOwner.setDirection(oOwner.oTimmy.nDirection);
} else {
oOwner.bNoFlip = false;
oOwner.initJump();
oOwner.setDirection(oOwner.oTimmy.nDirection * -1);
}
oOwner.nSpeedX = oOwner.SPEED_RUN;
bDecisionMade = true;
}
}
var TYPE = "DefenseJump";
}
Symbol 2027 MovieClip [__Packages.decisions.DecisionAttack] Frame 0
class decisions.DecisionAttack extends sarbakan.ai.Decision
{
var nAttackDelay, nAttackChance, oOwner, bDecisionMade;
function DecisionAttack (_nAttackDelay, _nAttackChance) {
super();
nAttackDelay = _nAttackDelay;
nAttackChance = _nAttackChance;
}
function isCompleted() {
return(oOwner.bAttacking != true);
}
function checkConditions() {
if (((oOwner.getState() == "idle") || (oOwner.getState() == "run")) && (canAttack())) {
oOwner.nAttackDelayCount = 0;
oOwner.initAttack();
bDecisionMade = true;
}
}
function canAttack() {
var _local2 = oOwner.mc._x - oOwner.oTimmy.mc._x;
return((((Math.abs(_local2) < oOwner.DISTANCE_NEAR) && (oOwner.isOnElementFloor(oOwner.oTimmy))) && ((++oOwner.nAttackDelayCount) >= nAttackDelay)) && (Math.random() <= nAttackChance));
}
var TYPE = "Attack";
}
Symbol 2028 MovieClip [__Packages.decisions.DecisionWait] Frame 0
class decisions.DecisionWait extends sarbakan.ai.Decision
{
var nWaitDelay, nWaitDelayCount, oOwner, bDecisionMade;
function DecisionWait (_nMinimumDelay) {
super();
if (_nMinimumDelay != undefined) {
nWaitDelay = _nMinimumDelay;
} else {
nWaitDelay = DELAY_MINIMUM_WAIT;
}
}
function isCompleted() {
if (((++nWaitDelayCount) >= nWaitDelay) && (Math.random() < CHANCE_RESUME)) {
return(true);
}
}
function checkConditions() {
if (Math.random() < CHANCE_WAIT) {
nWaitDelayCount = 0;
oOwner.setState("idle");
bDecisionMade = true;
}
}
var TYPE = "Wait";
static var CHANCE_WAIT = 0.1;
static var CHANCE_RESUME = 0.08;
static var DELAY_MINIMUM_WAIT = 50;
}
Symbol 2029 MovieClip [__Packages.decisions.DecisionJumpAtPoint] Frame 0
class decisions.DecisionJumpAtPoint extends sarbakan.ai.Decision
{
var oOwner, bDecisionMade;
function DecisionJumpAtPoint () {
super();
}
function isCompleted() {
return(oOwner.bJumping == false);
}
function checkConditions() {
if (((oOwner.getState() == "idle") || (oOwner.getState() == "run")) && (Math.random() < CHANCE_JUMP)) {
var _local2 = oOwner.getJumpPoint();
if ((_local2 != undefined) && ((_local2.isIndicatingHole() && (oOwner.mustJumpOverHole(oOwner.oElementDest, _local2))) || (((!_local2.isIndicatingHole()) && (!oOwner.isHigherThanElement(oOwner.oElementDest))) && (!oOwner.isOnElementFloor(oOwner.oElementDest))))) {
oOwner.setDirection(_local2.getJumpDirection());
oOwner.initJump();
oOwner.nSpeedX = oOwner.SPEED_RUN;
oOwner.oLastJumpPoint = _local2;
bDecisionMade = true;
}
}
}
var TYPE = "JumpAtPoint";
static var CHANCE_JUMP = 1;
}
Symbol 2030 MovieClip [__Packages.decisions.DecisionGoNearElement] Frame 0
class decisions.DecisionGoNearElement extends sarbakan.ai.Decision
{
var oElementDest, nPauseChance, oOwner, bDecisionMade;
function DecisionGoNearElement (_oElementDest, _nPauseChance) {
super();
oElementDest = _oElementDest;
nPauseChance = _nPauseChance;
}
function setOwner(oOwner) {
super.setOwner(oOwner);
oOwner.oElementDest = oElementDest;
}
function isCompleted() {
var _local2 = false;
if (oElementDest.getState() == "captured") {
oOwner.setBehaviorFreelance();
} else if ((oElementDest == undefined) || (mustJump())) {
if (!oOwner.canJump()) {
oOwner.setBehaviorFreelance();
}
_local2 = true;
} else if (oOwner.isNearElement(oElementDest) || (oOwner.isNearElement(oOwner.oTimmy))) {
_local2 = true;
oOwner.setState("idle");
if (((oOwner.bOffensiveBehavior == false) && (oOwner.canSwitchToOffensive())) && (oOwner.isNearElement(oOwner.oTimmy))) {
oOwner.setBehaviorOffensive();
}
} else {
runTowardElement();
}
return(_local2);
}
function checkConditions() {
if (!oOwner.isNearElement(oElementDest)) {
runTowardElement();
bDecisionMade = true;
}
}
function mustJump() {
var _local3 = false;
var _local2 = oOwner.getJumpPoint();
if (((_local2 != undefined) && (_local2 != oOwner.oLastJumpPoint)) && (oElementDest.stateIsNot("jump", "fall"))) {
var _local4 = oOwner.mc._y - oElementDest.mc._y;
if ((_local4 >= oOwner.DISTANCE_FLOOR) || (oOwner.mustJumpOverHole(oElementDest, _local2))) {
_local3 = true;
}
}
return(_local3);
}
function runTowardElement() {
var _local2 = 1;
if (oOwner.mc._x <= oElementDest.mc._x) {
_local2 = 1;
} else {
_local2 = -1;
}
if ((oOwner.isOnElementFloor(oElementDest) || (oOwner.nDirection == 0)) || ((!oOwner.canJump()) && (Math.random() < 0.02))) {
oOwner.setDirection(_local2);
}
if ((oOwner.getState() == "idle") && (oOwner.nSpeedY == 0)) {
oOwner.setState("run");
}
}
var TYPE = "GoNearElement";
}
Symbol 2031 MovieClip [__Packages.decisions.DecisionFreelance] Frame 0
class decisions.DecisionFreelance extends decisions.DecisionGoNearElement
{
var oOwner, oElementDest;
function DecisionFreelance () {
super(undefined, 0);
}
function setOwner(_oOwner) {
oOwner = _oOwner;
oElementDest = oOwner.oElementDest;
selectNewDestination();
}
function selectNewDestination() {
if (oOwner.oElementDest == undefined) {
var _local2 = Controller.getInstance().oLevel.aJumpPoints;
var _local5 = [];
for (var _local6 in _local2) {
var _local3 = _local2[_local6].nX;
var _local4 = Controller.getInstance().oLevel.nScrollX;
if (((((!_local2[_local6].hasOwningEnnemy()) && (_local2[_local6] != oOwner.oElementDest)) && (_local2[_local6] != oOwner.oLastElementDest)) && (_local3 > (_local4 + LEVEL_LEFT_RIGHT))) && (_local3 < (_local4 + GameData.SCREEN_WIDTH))) {
_local5.push(_local2[_local6]);
}
}
if (_local5.length > 0) {
oElementDest = _local5[sarbakan.utils.MoreMath.random(0, _local5.length)];
oElementDest.setOwningEnnemy(oOwner);
oOwner.oElementDest = oElementDest;
} else {
oOwner.setBehaviorRush();
}
} else if (oOwner.isNearElement(oElementDest) && (Math.random() < 0.02)) {
oElementDest.clearOwningEnnemy();
oOwner.oLastElementDest = oElementDest;
delete oElementDest;
delete oOwner.oElementDest;
}
}
var TYPE = "Freelance";
static var LEVEL_LEFT_RIGHT = 200;
}
Symbol 2032 MovieClip [__Packages.decisions.DecisionIdle] Frame 0
class decisions.DecisionIdle extends sarbakan.ai.Decision
{
var oOwner, bDecisionMade;
function DecisionIdle () {
super();
}
function isCompleted() {
return(true);
}
function checkConditions() {
oOwner.setState("idle");
oOwner.oDecisionMaker.clear();
bDecisionMade = true;
}
var TYPE = "Idle";
}
Symbol 2033 MovieClip [__Packages.decisions.DecisionLookAtPlayer] Frame 0
class decisions.DecisionLookAtPlayer extends sarbakan.ai.Decision
{
var oOwner;
function DecisionLookAtPlayer () {
super();
}
function isCompleted() {
return(true);
}
function checkConditions() {
if (oOwner.isOnElementFloor(oOwner.oTimmy)) {
var _local2;
if ((oOwner.mc._x <= oOwner.oTimmy.mc._x) && (oOwner.nDirection != 1)) {
_local2 = 1;
} else if ((oOwner.mc._x > oOwner.oTimmy.mc._x) && (oOwner.nDirection != -1)) {
_local2 = -1;
}
if (_local2 != undefined) {
oOwner.setDirection(_local2);
}
}
}
var TYPE = "LookAtPlayer";
}
Symbol 2034 MovieClip [__Packages.decisions.DecisionRandomJump] Frame 0
class decisions.DecisionRandomJump extends sarbakan.ai.Decision
{
var nJumpChance, oOwner, bDecisionMade;
function DecisionRandomJump (_nJumpChance) {
super();
nJumpChance = _nJumpChance;
}
function isCompleted() {
if (oOwner.bJumping == false) {
oOwner.nAirSpeedX = oOwner.nAirSpeedX / 2;
return(true);
}
}
function checkConditions() {
if (((oOwner.getState() == "run") || (oOwner.getState() == "idle")) && (Math.random() <= nJumpChance)) {
oOwner.nAirSpeedX = oOwner.nAirSpeedX * 2;
oOwner.initJump();
oOwner.nSpeedX = oOwner.SPEED_RUN;
bDecisionMade = true;
}
}
var TYPE = "RandomJump";
}
Symbol 2035 MovieClip [__Packages.decisions.DecisionRunToLimit] Frame 0
class decisions.DecisionRunToLimit extends sarbakan.ai.Decision
{
var oOwner, bDecisionMade;
function DecisionRunToLimit () {
super();
}
function isCompleted() {
var _local2 = Controller.getInstance().oLevel.nScrollX;
if (oOwner.mc._x > (_local2 + LEVEL_LIMIT_RIGHT)) {
oOwner.setState("idle");
oOwner.oDecisionMaker.clear();
}
return(true);
}
function checkConditions() {
oOwner.setDirection(1);
oOwner.setState("run");
bDecisionMade = true;
}
var TYPE = "RunToLimit";
static var LEVEL_LIMIT_RIGHT = 500;
}
Symbol 2036 MovieClip [__Packages.elements.characters.EnnemyFrancis] Frame 0
class elements.characters.EnnemyFrancis extends elements.characters.BaseEnnemy
{
var bCanJump, oDecisionMaker, removeOffensiveEnnemy, oTimmy, addOffensiveEnnemy, bOffensiveBehavior, nSpeedX, nDirection, stateStarting, stateCurrentFrame;
function EnnemyFrancis (_mc) {
super("francis", _mc);
bCanJump = false;
}
function setBehaviorFreelance() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionDefenseWalkBackward(CHANCE_DEFENSE_WALK_BACKWARD));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionWait());
oDecisionMaker.addDecision(new decisions.DecisionWalkBackAndForth());
oDecisionMaker.addDecision(new decisions.DecisionIdle());
removeOffensiveEnnemy();
}
function setBehaviorOffensive() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionLookAtPlayer());
oDecisionMaker.addDecision(new decisions.DecisionDefenseWalkBackward(CHANCE_DEFENSE_WALK_BACKWARD));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK_OFFENSIVE));
oDecisionMaker.addDecision(new decisions.DecisionGoNearElement(oTimmy, CHANCE_RANDOM_PAUSE));
oDecisionMaker.addDecision(new decisions.DecisionIdle());
addOffensiveEnnemy();
}
function setBehaviorRush() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionRunToLimit());
oDecisionMaker.addDecision(new decisions.DecisionIdle());
removeOffensiveEnnemy();
}
function run() {
super.run();
if (bOffensiveBehavior) {
nSpeedX = SPEED_RUN_OFFENSIVE * nDirection;
}
}
function die() {
super.die();
if (stateStarting()) {
sarbakan.sound.SoundManager.play("francisDieStart", GameData.VOLUME_FRANCIS_DIE_START);
}
if (stateCurrentFrame() == 23) {
sarbakan.sound.SoundManager.play("francisDieEnd", GameData.VOLUME_FRANCIS_DIE_END);
}
}
var SPEED_RUN = 1.5;
var SPEED_RUN_OFFENSIVE = 5;
var STUNNED_DURATION = 50;
var CHANCE_DEFENSE_WALK_BACKWARD = 0.7;
var CHANCE_RANDOM_JUMP = 0.05;
var CHANCE_RANDOM_PAUSE = 0.05;
var CHANCE_ATTACK = 0.2;
var CHANCE_ATTACK_OFFENSIVE = 0.5;
var DELAY_ATTACK = 10;
var ENERGY_BASE = GameData.ENERGY_LIFE_FRANCIS;
var ENERGY_HURT_TIMMY = GameData.ENERGY_HURT_FRANCIS;
}
Symbol 2037 MovieClip [__Packages.decisions.DecisionDefenseWalkBackward] Frame 0
class decisions.DecisionDefenseWalkBackward extends sarbakan.ai.Decision
{
var nDefenseChance, nWalkCount, oOwner, bDecisionMade;
function DecisionDefenseWalkBackward (_nDefenseChance) {
super();
nDefenseChance = _nDefenseChance;
}
function isCompleted() {
if (((++nWalkCount) >= WALK_DURATION) && (Math.random() < CHANCE_DONE)) {
oOwner.bNoFlip = false;
oOwner.nMoveSpeedX = oOwner.nMoveSpeedX / 2;
oOwner.setDirection(oOwner.oTimmy.nDirection * -1);
return(true);
}
}
function checkConditions() {
if (((!oOwner.isHurt()) && (oOwner.isAttacked())) && (Math.random() <= nDefenseChance)) {
oOwner.nMoveSpeedX = oOwner.nMoveSpeedX * 2;
oOwner.setState("run");
oOwner.bNoFlip = true;
oOwner.setDirection(oOwner.oTimmy.nDirection);
nWalkCount = 0;
bDecisionMade = true;
}
}
var TYPE = "DefenseWalkBackward";
static var WALK_DURATION = 15;
static var CHANCE_DONE = 0.3;
}
Symbol 2038 MovieClip [__Packages.decisions.DecisionWalkBackAndForth] Frame 0
class decisions.DecisionWalkBackAndForth extends sarbakan.ai.Decision
{
var nDistanceNear, oOwner, nSwitchDelayCount, bDecisionMade;
function DecisionWalkBackAndForth (_nDistanceNear) {
super();
if (_nDistanceNear != undefined) {
nDistanceNear = _nDistanceNear;
} else {
nDistanceNear = DISTANCE_NEAR_ATTACK;
}
}
function isCompleted() {
if ((oOwner.isNearElement(oOwner.oTimmy, nDistanceNear) && (oOwner.isLookingAtElement(oOwner.oTimmy))) && (Math.random() < CHANCE_SIGHT)) {
oOwner.setBehaviorOffensive();
return(true);
}
if (((++nSwitchDelayCount) >= DELAY_MINIMUM_SWITCH) && (Math.random() < CHANCE_DONE)) {
return(true);
}
}
function checkConditions() {
if (oOwner.nSpeedY == 0) {
nSwitchDelayCount = 0;
if ((oOwner.nDirection == 0) || (oOwner.nDirection == undefined)) {
oOwner.setDirection(1);
} else {
oOwner.setDirection(oOwner.nDirection * -1);
}
oOwner.setState("run");
bDecisionMade = true;
}
}
var TYPE = "WalkBackAndForth";
static var DELAY_MINIMUM_SWITCH = 50;
static var DISTANCE_NEAR_ATTACK = 250;
static var CHANCE_DONE = 0.03;
static var CHANCE_SIGHT = 0.1;
}
Symbol 2039 MovieClip [__Packages.elements.characters.CosmoBonus] Frame 0
class elements.characters.CosmoBonus extends elements.characters.Cosmo
{
var getGlobalPos, oAttachProperties, nAppearDelayCount, nBonusDelayCount, DEFAULT_STATE, bFinal, oWall, bRespawn, oCtrl, mc, remove, setState, stateStarting, stateFinished, sStoredBonusID, sUsedBonusID, nSpeedX, nSpeedY, updateBonus, collideWithElementBox, lookTowardTimmy, useBonus, setDirection, onBreakWall;
function CosmoBonus (_mc) {
super("cosmoBonus" + sarbakan.visual.element.BaseElement.getNextID());
var _local3 = getGlobalPos(_mc);
oAttachProperties._x = _local3.x;
oAttachProperties._y = _local3.y;
nAppearDelayCount = APPEAR_DELAY;
nBonusDelayCount = 0;
DEFAULT_STATE = "waitForEnter";
if (_mc.bFinal != undefined) {
bFinal = true;
oWall = Controller.getInstance().oLevel.oWall;
}
if (_mc.bRespawn != undefined) {
bRespawn = true;
}
}
function update() {
super.update();
if (mc._x < (oCtrl.oLevel.nScrollX - GameData.LEVEL_DISTANCE_OFFSCREEN)) {
remove();
}
}
function waitForEnter() {
if (nAppearDelayCount < APPEAR_DELAY) {
nAppearDelayCount++;
} else if (mustAppear()) {
setState("appear");
}
}
function appear() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("appear", GameData.VOLUME_APPEAR);
}
if (mc._xscale == 100) {
mc.state.mcBubble.gotoAndStop(1);
} else {
mc.state.mcBubble.gotoAndStop(2);
}
if (stateFinished()) {
setState("idle");
}
}
function disappear() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("disappear", GameData.VOLUME_APPEAR);
}
if (mc._xscale == 100) {
mc.state.mcBubble.gotoAndStop(1);
} else {
mc.state.mcBubble.gotoAndStop(2);
}
if (stateFinished()) {
if (bRespawn) {
setState("waitForEnter");
nAppearDelayCount = 0;
nBonusDelayCount = 0;
delete sStoredBonusID;
delete sUsedBonusID;
} else {
remove();
}
}
}
function idle() {
nSpeedX = 0;
nSpeedY = 0;
updateBonus();
if (sStoredBonusID == undefined) {
if (collideWithElementBox("timmy", mc.state)) {
lookTowardTimmy();
setState("sludge");
}
} else if ((++nBonusDelayCount) == BONUS_USE_DELAY) {
useBonus();
}
}
function fly() {
updateBonus();
if (Math.abs(mc._x - oWall.mc._x) >= elements.characters.Cosmo.WALL_HIT_MAX_DISTANCE) {
setDirection(1);
nSpeedX = elements.characters.Cosmo.BASE_SPEED_X;
nSpeedY = 0;
} else {
setState("flyEnd");
}
}
function flyEnd() {
updateBonus();
if (stateFinished()) {
onBreakWall(oWall);
}
}
function bonusThrow() {
super.bonusThrow();
if (stateFinished()) {
if (bFinal) {
setState("flyStart");
} else {
setState("disappear");
}
}
}
function bonusMagic() {
super.bonusMagic();
if (stateFinished()) {
if (bFinal) {
setState("flyStart");
} else {
setState("disappear");
}
}
}
function onMouseUp() {
Mouse.removeListener(this);
}
function mustAppear() {
return((((!bFinal) || (bFinal && (oCtrl.oLevel.reachedEndOfLevel()))) && (!((oCtrl.oLevel.sLevelID == "boss2") && (oCtrl.oLevel.oBoss.nEnergyTail == 0)))) && (bRespawn || (getGlobalPos(mc).x <= APPEAR_POS_X)));
}
static var APPEAR_DELAY = 335;
static var APPEAR_POS_X = 500;
static var BONUS_USE_DELAY = 15;
}
Symbol 2040 MovieClip [__Packages.elements.characters.EnnemyTimmaseSuper] Frame 0
class elements.characters.EnnemyTimmaseSuper extends elements.characters.EnnemyTimmase
{
var mc;
function EnnemyTimmaseSuper (_mc) {
super(_mc);
}
function init() {
super.init();
var _local3 = new Color(mc);
_local3.setTransform(COLOR_TRANSFORM);
}
var SPEED_RUN = 3;
var STUNNED_DURATION = 60;
var CHANCE_DEFENSE_JUMP = 0.8;
var CHANCE_DEFENSE_WALK_BACKWARD = 0.8;
var CHANCE_RANDOM_JUMP = 0.02;
var CHANCE_RANDOM_PAUSE = 0.02;
var CHANCE_ATTACK = 0.4;
var DELAY_ATTACK = 10;
var ENERGY_BASE = GameData.ENERGY_LIFE_TIMMASE_SUPER;
var ENERGY_HURT_TIMMY = GameData.ENERGY_HURT_TIMMASE_SUPER;
static var COLOR_TRANSFORM = {ra:55, rb:0, ga:55, gb:23, ba:55, bb:92, aa:100, ab:0};
}
Symbol 2041 MovieClip [__Packages.elements.characters.EnnemyFrancisSuper] Frame 0
class elements.characters.EnnemyFrancisSuper extends elements.characters.EnnemyFrancis
{
var mc;
function EnnemyFrancisSuper (_mc) {
super(_mc);
}
function init() {
super.init();
var _local3 = new Color(mc);
_local3.setTransform(COLOR_TRANSFORM);
}
var SPEED_RUN = 1.5;
var SPEED_RUN_OFFENSIVE = 5;
var STUNNED_DURATION = 50;
var CHANCE_DEFENSE_WALK_BACKWARD = 0.8;
var CHANCE_RANDOM_JUMP = 0.02;
var CHANCE_RANDOM_PAUSE = 0.02;
var CHANCE_ATTACK = 0.4;
var CHANCE_ATTACK_OFFENSIVE = 0.6;
var DELAY_ATTACK = 10;
var ENERGY_BASE = GameData.ENERGY_LIFE_FRANCIS_SUPER;
var ENERGY_HURT_TIMMY = GameData.ENERGY_HURT_FRANCIS_SUPER;
static var COLOR_TRANSFORM = {ra:70, rb:77, ga:70, gb:77, ba:70, bb:0, aa:100, ab:0};
}
Symbol 2042 MovieClip [__Packages.elements.characters.BossVicky] Frame 0
class elements.characters.BossVicky extends elements.characters.BaseEnnemy
{
var bCanJump, nStartDelayCount, oDecisionMaker, bOffensiveBehavior, nSpeedX, nDirection, nSpeedY, stateStarting, stateFinished, setState, stateCurrentFrame, oLevel, mc, bAttacking, getElement, nEnergy, collideWithElementBox, oTimmy, removeOffensiveEnnemy, addOffensiveEnnemy, setDirection, stateIsNot, sState;
function BossVicky (_mc) {
super("vicky", _mc);
bCanJump = false;
Controller.getInstance().oLevel.oBoss = this;
nStartDelayCount = 0;
}
function idle() {
super.idle();
if (nStartDelayCount < DELAY_START) {
nStartDelayCount++;
oDecisionMaker.clear();
} else if (oDecisionMaker.isEmpty()) {
setBehaviorFreelance();
}
}
function run() {
super.run();
stayInsideScreen();
if (bOffensiveBehavior) {
nSpeedX = SPEED_RUN_OFFENSIVE * nDirection;
}
}
function openMouth() {
nSpeedX = 0;
nSpeedY = 0;
if (stateStarting()) {
sarbakan.sound.SoundManager.play("vickyMouth", GameData.VOLUME_VICKY_MOUTH);
}
if (stateFinished()) {
setState("spit");
}
}
function spit() {
if (stateCurrentFrame() == FRAME_SPIT) {
var _local2;
if (nDirection == 1) {
_local2 = SPIT_SPAWN_X_RIGHT;
} else {
_local2 = SPIT_SPAWN_X_LEFT;
}
oLevel.addInteractiveElement(new elements.Antibody(mc, _local2, SPIT_SPAWN_Y, 90));
oLevel.addInteractiveElement(new elements.Antibody(mc, _local2, SPIT_SPAWN_Y, 145));
oLevel.addInteractiveElement(new elements.Antibody(mc, _local2, SPIT_SPAWN_Y, 50));
oLevel.addInteractiveElement(new elements.Antibody(mc, _local2, SPIT_SPAWN_Y, 190));
oLevel.addInteractiveElement(new elements.Antibody(mc, _local2, SPIT_SPAWN_Y, -10));
}
if (stateFinished()) {
bAttacking = false;
setState("idle");
if (canSpawnEnnemy()) {
spawnEnnemy();
}
}
}
function swallow() {
mc.state.mcBonus.gotoAndStop(getElement("timmy").oCosmo.sLastUsedBonusID);
if (stateStarting()) {
sarbakan.sound.SoundManager.play("vickySwallow", GameData.VOLUME_VICKY_SWALLOW);
}
if (stateFinished()) {
setState("swallowHurt");
}
}
function swallowHurt() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("vickyBoom", GameData.VOLUME_VICKY_BOOM);
}
if (stateFinished()) {
setState("idle");
nEnergy = nEnergy - GameData.ENERGY_HIT_SWALLOWBOMB;
if (nEnergy <= 0) {
setState("swallowDie");
} else {
bAttacking = false;
}
}
}
function swallowDie() {
die();
}
function grabStart() {
nSpeedX = 0;
nSpeedY = 0;
if (stateFinished()) {
if (collideWithElementBox("timmy", mc.hit)) {
setState("grab");
oTimmy.onCapture();
oTimmy.setState("captured");
} else {
setState("grabEnd");
}
}
}
function grab() {
if (stateStarting()) {
oTimmy.loseEnergy(GameData.ENERGY_HURT_VICKY_GRAB);
}
if (stateFinished()) {
setState("grabEnd");
oTimmy.setState("idle");
oTimmy.setDirection(nDirection);
}
}
function grabEnd() {
if (stateStarting() && (oTimmy.bCaptured)) {
oTimmy.onRelease();
oTimmy.mc._x = mc._x + (100 * nDirection);
oTimmy.mc._x = sarbakan.utils.MoreMath.wrapInRange(oTimmy.mc._x, 0 + oTimmy.mc._width, GameData.LEVEL_WIDTH_BOSS - oTimmy.mc._width);
oTimmy.mc._y = mc._y;
oTimmy.initHurt(this, elements.Lashes.RELEASE_TIMMY_SPEEDX, elements.Lashes.RELEASE_TIMMY_SPEEDY, 0);
}
if (stateFinished()) {
bAttacking = false;
setState("idle");
}
}
function die() {
super.die();
if (stateStarting()) {
sarbakan.sound.SoundManager.play("vickyDie", GameData.VOLUME_VICKY_DIE);
}
if (stateFinished()) {
Controller.getInstance().onLevelDone();
Controller.getInstance().addScore(GameData.SCORE_BOSS1);
}
}
function setBehaviorFreelance() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionDefenseWalkBackward(CHANCE_DEFENSE_WALK_BACKWARD));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionGrab(DELAY_ATTACK, CHANCE_ATTACK));
oDecisionMaker.addDecision(new decisions.DecisionSpit(DELAY_SPIT, CHANCE_SPIT));
oDecisionMaker.addDecision(new decisions.DecisionWait(60));
oDecisionMaker.addDecision(new decisions.DecisionWalkBackAndForth(500));
oDecisionMaker.addDecision(new decisions.DecisionIdle());
removeOffensiveEnnemy();
}
function setBehaviorOffensive() {
oDecisionMaker.clear();
oDecisionMaker.addDecision(new decisions.DecisionLookAtPlayer());
oDecisionMaker.addDecision(new decisions.DecisionDefenseWalkBackward(CHANCE_DEFENSE_WALK_BACKWARD));
oDecisionMaker.addDecision(new decisions.DecisionAttack(DELAY_ATTACK, CHANCE_ATTACK_OFFENSIVE));
oDecisionMaker.addDecision(new decisions.DecisionGrab(DELAY_ATTACK, CHANCE_ATTACK_OFFENSIVE));
oDecisionMaker.addDecision(new decisions.DecisionSpit(DELAY_SPIT, CHANCE_SPIT));
oDecisionMaker.addDecision(new decisions.DecisionGoNearElement(oTimmy, CHANCE_RANDOM_PAUSE));
oDecisionMaker.addDecision(new decisions.DecisionIdle());
addOffensiveEnnemy();
}
function initSpit() {
bAttacking = true;
setState("openMouth");
}
function stayInsideScreen() {
if (((nDirection == -1) && (mc._x < 25)) || ((nDirection == 1) && (mc._x > 575))) {
setBehaviorFreelance();
setDirection(nDirection * -1);
}
}
function initStun() {
}
function initHurt(_nHitSpeedX, _nHitSpeedY, _nEnergyValue) {
if (stateIsNot("openMouth", "spit", "swallow", "swallowHurt", "swallowDie") && (_nEnergyValue != GameData.ENERGY_HIT_CABBAGEBOMB)) {
super.initHurt(_nHitSpeedX, _nHitSpeedY, _nEnergyValue);
} else if (sState == "openMouth") {
bAttacking = false;
setState("idle");
}
}
function initGrab() {
bAttacking = true;
setState("grabStart");
}
function canSpawnEnnemy() {
var _local1 = 0;
for (var _local2 in elements.characters.BaseEnnemy.oActiveEnnemy) {
_local1++;
}
return(_local1 < (ENNEMY_SPAWN_MAX + 1));
}
function spawnEnnemy() {
var _local1;
switch (sarbakan.utils.MoreMath.random(1, 4)) {
case 1 :
_local1 = new elements.characters.EnnemyTimmase();
break;
case 2 :
_local1 = new elements.characters.EnnemyTimmaseSuper();
break;
case 3 :
_local1 = new elements.characters.EnnemyFrancis();
break;
case 4 :
_local1 = new elements.characters.EnnemyFrancisSuper();
}
if (Math.random() < 0.5) {
_local1.oAttachProperties._x = ENNEMY_SPAWN_TOP_X;
_local1.oAttachProperties._y = ENNEMY_SPAWN_TOP_Y;
} else if (Math.random() < 0.5) {
_local1.oAttachProperties._x = ENNEMY_SPAWN_LEFT_X;
_local1.oAttachProperties._y = ENNEMY_SPAWN_LEFT_Y;
} else {
_local1.oAttachProperties._x = ENNEMY_SPAWN_RIGHT_X;
_local1.oAttachProperties._y = ENNEMY_SPAWN_RIGHT_Y;
}
Controller.getInstance().oLevel.addInteractiveElement(_local1);
}
var SPEED_RUN = 3.5;
var SPEED_RUN_OFFENSIVE = 5.5;
var STUNNED_DURATION = 1;
var CHANCE_DEFENSE_WALK_BACKWARD = 0.7;
var CHANCE_RANDOM_PAUSE = 0.25;
var CHANCE_ATTACK = 0.25;
var CHANCE_ATTACK_OFFENSIVE = 0.7;
var DELAY_ATTACK = 10;
var CHANCE_SPIT = 1;
var DELAY_SPIT = 2;
static var DELAY_START = 20;
static var SPIT_SPAWN_X_LEFT = 10;
static var SPIT_SPAWN_X_RIGHT = -10;
static var SPIT_SPAWN_Y = -70;
var DISTANCE_LINE_OF_SIGHT = 600;
var DISTANCE_NEAR = 35;
var HIT_SPEEDX = 12;
var HIT_SPEEDY = 15;
var ENERGY_BASE = GameData.ENERGY_LIFE_VICKY;
var ENERGY_HURT_TIMMY = GameData.ENERGY_HURT_VICKY;
var FRAME_SPIT = 1;
static var ENNEMY_SPAWN_TOP_X = 100;
static var ENNEMY_SPAWN_TOP_Y = -50;
static var ENNEMY_SPAWN_LEFT_X = -50;
static var ENNEMY_SPAWN_LEFT_Y = 50;
static var ENNEMY_SPAWN_RIGHT_X = 650;
static var ENNEMY_SPAWN_RIGHT_Y = 50;
static var ENNEMY_SPAWN_MAX = 1;
}
Symbol 2043 MovieClip [__Packages.elements.Antibody] Frame 0
class elements.Antibody extends sarbakan.visual.element.DynamicElement
{
var setLinkage, oAttachProperties, nAngle, oLevel, oCosmo, attachMC, setState, stateFinished, remove, oTweenX, mc, oTweenY, collideWithElement;
function Antibody (_mcVicky, _nPosX, _nPosY, _nAngle) {
super("antibody" + sarbakan.visual.element.BaseElement.getNextID());
setLinkage("antibody");
oAttachProperties._x = _mcVicky._x + _nPosX;
oAttachProperties._y = _mcVicky._y + _nPosY;
nAngle = _nAngle;
oLevel = Controller.getInstance().oLevel;
if (oLevel.bMultiplayer) {
oCosmo = oLevel.oLayerGame.oDynamicElements.cosmo;
}
}
function init() {
attachMC();
}
function enable() {
super.enable();
initTween();
}
function disable() {
destroyTween();
}
function idle() {
if (checkIfHitTimmy()) {
destroyTween();
setState("hit");
sarbakan.sound.SoundManager.play("antibodyHit", GameData.VOLUME_ANTIBODY);
}
}
function hit() {
if (stateFinished()) {
remove();
}
}
function initTween() {
if (oTweenX == undefined) {
var _local2 = sarbakan.utils.MoreMath.convertToRadians(nAngle);
var _local3 = (Math.cos(_local2) * MOVE_SPEED) * MOVE_DURATION;
var _local4 = (Math.sin(_local2) * MOVE_SPEED) * MOVE_DURATION;
oTweenX = new mx.transitions.Tween(mc, "_x", mx.transitions.easing.Back.easeIn, mc._x, mc._x - _local3, MOVE_DURATION);
oTweenY = new mx.transitions.Tween(mc, "_y", mx.transitions.easing.Back.easeIn, mc._y, mc._y - _local4, MOVE_DURATION);
oTweenX.onMotionFinished = sarbakan.utils.Delegate.create(this, setState, "hit");
}
}
function destroyTween() {
oTweenX.stop();
oTweenY.stop();
delete oTweenX;
delete oTweenY;
}
function checkIfHitTimmy() {
if (collideWithElement("timmy", mc.hit)) {
setState("hit");
oLevel.oLayerGame.oDynamicElements.timmy.initHurt(this, TIMMY_HURT_SPEEDX, TIMMY_HURT_SPEEDY, GameData.ENERGY_HURT_ANTIBODY);
return(true);
}
}
static var TIMMY_HURT_SPEEDX = 8;
static var TIMMY_HURT_SPEEDY = 5;
static var MOVE_DURATION = 30;
static var MOVE_SPEED = 10;
}
Symbol 2044 MovieClip [__Packages.mx.transitions.easing.Back] Frame 0
class mx.transitions.easing.Back
{
function Back () {
}
static function easeIn(t, b, c, d, s) {
if (s == undefined) {
s = 1.70158;
}
t = t / d;
return((((c * t) * t) * (((s + 1) * t) - s)) + b);
}
static function easeOut(t, b, c, d, s) {
if (s == undefined) {
s = 1.70158;
}
t = (t / d) - 1;
return((c * (((t * t) * (((s + 1) * t) + s)) + 1)) + b);
}
static function easeInOut(t, b, c, d, s) {
if (s == undefined) {
s = 1.70158;
}
t = t / (d / 2);
if (t < 1) {
s = s * 1.525;
return(((c / 2) * ((t * t) * (((s + 1) * t) - s))) + b);
}
t = t - 2;
s = s * 1.525;
return(((c / 2) * (((t * t) * (((s + 1) * t) + s)) + 2)) + b);
}
static var version = "1.1.0.52";
}
Symbol 2045 MovieClip [__Packages.decisions.DecisionGrab] Frame 0
class decisions.DecisionGrab extends sarbakan.ai.Decision
{
var nAttackDelay, nAttackChance, oOwner, bDecisionMade;
function DecisionGrab (_nAttackDelay, _nAttackChance) {
super();
nAttackDelay = _nAttackDelay;
nAttackChance = _nAttackChance;
}
function isCompleted() {
return(oOwner.bAttacking != true);
}
function checkConditions() {
if (canAttack()) {
oOwner.nAttackDelayCount = 0;
oOwner.initGrab();
bDecisionMade = true;
}
}
function canAttack() {
var _local2 = oOwner.mc._x - oOwner.oTimmy.mc._x;
return((((Math.abs(_local2) < oOwner.DISTANCE_NEAR) && (oOwner.isOnElementFloor(oOwner.oTimmy))) && ((++oOwner.nAttackDelayCount) >= nAttackDelay)) && (Math.random() <= nAttackChance));
}
var TYPE = "Grab";
}
Symbol 2046 MovieClip [__Packages.decisions.DecisionSpit] Frame 0
class decisions.DecisionSpit extends sarbakan.ai.Decision
{
var nAttackDelay, nAttackChance, oOwner, bDecisionMade;
function DecisionSpit (_nAttackDelay, _nAttackChance) {
super();
nAttackDelay = _nAttackDelay;
nAttackChance = _nAttackChance;
}
function isCompleted() {
return(oOwner.bAttacking != true);
}
function checkConditions() {
if (((oOwner.getState() == "idle") || (oOwner.getState() == "run")) && (canAttack())) {
oOwner.nAttackDelayCount = 0;
oOwner.initSpit();
bDecisionMade = true;
}
}
function canAttack() {
return(((!oOwner.isNearElement(oOwner.oTimmy, MIN_DISTANCE)) && ((++oOwner.nAttackDelayCount) >= nAttackDelay)) && (Math.random() <= nAttackChance));
}
var TYPE = "Spit";
static var MIN_DISTANCE = 60;
}
Symbol 2047 MovieClip [__Packages.elements.characters.BossTapeworm] Frame 0
class elements.characters.BossTapeworm extends sarbakan.visual.element.DynamicElement
{
var setLinkage, DEFAULT_STATE, getGlobalPos, oAttachProperties, nEnergyHead, nEnergyTail, nParts, nAttackDelayCount, nStopDelayCount, nDisappearDelayCount, nDurationCount, attachMC, oTimmy, getElement, oLevel, nDirection, mc, setState, stateFinished, stateStarting, nSpeedX, stateCurrentFrame, bSwitchDirection, collideWithElementBox, oRunSound, remove, getState;
function BossTapeworm (_mc) {
super("tapeworm");
setLinkage("tapeworm");
setDirection(1);
DEFAULT_STATE = "waitBeforeAppear";
var _local3 = getGlobalPos(_mc);
oAttachProperties._x = _local3.x;
oAttachProperties._y = _local3.y;
Controller.getInstance().oLevel.oBoss = this;
nEnergyHead = ENERGY_HEAD;
nEnergyTail = ENERGY_TAIL;
nParts = getPartsFromEnergy();
nAttackDelayCount = 0;
nStopDelayCount = 0;
nDisappearDelayCount = 0;
nDurationCount = 0;
}
function init() {
attachMC();
oTimmy = getElement("timmy");
oLevel = Controller.getInstance().oLevel;
}
function update() {
super.update();
updateWormParts();
}
function setDirection(_nDirection) {
nDirection = _nDirection;
if (nDirection != 0) {
mc._xscale = Math.abs(mc._xscale) * nDirection;
}
}
function initHurtTail() {
if (nEnergyTail > 0) {
nEnergyTail--;
setState("hurt");
}
}
function initHurtHead() {
nEnergyHead--;
if (nEnergyTail == 0) {
if (nEnergyHead <= 0) {
setState("dieMini");
} else {
setState("hurtMini");
}
} else {
setState("hurt");
}
}
function waitBeforeAppear() {
if (stateFinished()) {
setState("appear");
}
}
function appear() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("wormAppear", GameData.VOLUME_WORM_APPEAR);
mc._x = sarbakan.utils.MoreMath.random(100, 500);
if (Math.random() < 0.5) {
setDirection(1);
} else {
setDirection(-1);
}
}
if (stateFinished()) {
setState("run");
}
}
function disappear() {
if (stateStarting()) {
nSpeedX = 0;
sarbakan.sound.SoundManager.play("wormDisappear", GameData.VOLUME_WORM_APPEAR);
}
if (stateCurrentFrame() == FRAME_SHAKE) {
oLevel.initScreenShake();
}
if (stateCurrentFrame() == FRAME_LUMP_DROP) {
spawnLumpDrops();
}
if (stateFinished()) {
setState("appear");
}
}
function idle() {
if (bSwitchDirection) {
bSwitchDirection = false;
setDirection(nDirection * -1);
}
if (((++nDurationCount) >= IDLE_DURATION) && (Math.random() < CHANCE_RUN)) {
nEnergyHead = ENERGY_HEAD;
nDurationCount = 0;
setState("run");
}
}
function run() {
if (bSwitchDirection) {
bSwitchDirection = false;
setDirection(nDirection * -1);
}
if (stateStarting()) {
sarbakan.sound.SoundManager.play("wormWalk", GameData.VOLUME_WORM_WALK);
}
if (stateCurrentFrame() > FRAME_RUN) {
nSpeedX = (SPEED_BASE - nParts) * nDirection;
} else {
nSpeedX = 0;
}
if (((++nDisappearDelayCount) >= DISAPPEAR_DELAY) && (Math.random() < CHANCE_DISAPPEAR)) {
nDisappearDelayCount = 0;
setState("disappear");
}
checkAttack();
if (mustSwitchDirection()) {
setState("switchDirection");
}
}
function switchDirection() {
nSpeedX = 0;
if (stateCurrentFrame() == FRAME_REMOVE_PART) {
nParts = getPartsFromEnergy();
if (nParts == 0) {
nEnergyHead = ENERGY_HEAD_FINAL;
setState("appearMini");
}
}
if (stateFinished()) {
bSwitchDirection = true;
setState("run");
}
}
function attack() {
nSpeedX = 0;
if (stateStarting()) {
sarbakan.sound.SoundManager.play("wormBite", GameData.VOLUME_WORM_ATTACK);
}
if ((stateCurrentFrame() == FRAME_ATTACK) && (collideWithElementBox("timmy", mc.hit))) {
oTimmy.initHurt(this, TIMMY_HURT_SPEEDX, TIMMY_HURT_SPEEDY, GameData.ENERGY_HURT_TAPEWORM);
}
if (stateFinished()) {
setState("run");
}
}
function hurt() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("hit" + sarbakan.utils.MoreMath.random(1, 3), GameData.VOLUME_HIT);
}
nSpeedX = 0;
if (stateFinished()) {
if (nEnergyHead == 0) {
nEnergyHead = ENERGY_HEAD;
setState("idle");
} else if (getPartsFromEnergy() < nParts) {
setState("switchDirection");
} else {
setState("run");
}
}
}
function appearMini() {
nSpeedX = 0;
if (stateFinished()) {
setState("idleMini");
}
}
function idleMini() {
if (Math.abs(nSpeedX) > 0) {
nSpeedX = nSpeedX - (nSpeedX * SPEED_DECEL_RATE);
if (Math.abs(nSpeedX) < 0.0001) {
nSpeedX = 0;
}
}
if (Math.random() < CHANCE_RUN) {
setState("runMini");
}
}
function runMini() {
if (stateStarting()) {
oRunSound = sarbakan.sound.SoundManager.play("wormRun", GameData.VOLUME_WORM_RUN, 9999, true);
}
if (((++nStopDelayCount) >= STOP_DELAY) && (Math.random() < CHANCE_STOP)) {
nStopDelayCount = 0;
setState("idleMini");
sarbakan.sound.SoundManager.stop(oRunSound);
} else if (mustSwitchDirection()) {
setDirection(nDirection * -1);
}
nSpeedX = SPEED_BASE * nDirection;
}
function hurtMini() {
if (stateStarting()) {
sarbakan.sound.SoundManager.play("hit" + sarbakan.utils.MoreMath.random(1, 3), GameData.VOLUME_HIT);
sarbakan.sound.SoundManager.stop(oRunSound);
}
if (stateFinished()) {
setState("runMini");
}
}
function dieMini() {
if (stateStarting()) {
nSpeedX = 0;
sarbakan.sound.SoundManager.stop(oRunSound);
sarbakan.sound.SoundManager.play("vickyDie", GameData.VOLUME_VICKY_DIE);
}
if (stateFinished()) {
Controller.getInstance().addScore(GameData.SCORE_BOSS2);
Controller.getInstance().onLevelDone();
remove();
}
}
function onStun() {
if ((getState() != "appear") || (getState() != "disappear")) {
setState("idle");
}
}
function updateWormParts() {
var _local2 = 1;
while (_local2 <= PARTS_TOTAL) {
if (_local2 < nParts) {
if ((_local2 % 2) == 1) {
mc.state["part" + _local2].gotoAndStop("normal");
} else {
mc.state["part" + _local2].gotoAndStop("normalFlip");
}
} else if (_local2 == nParts) {
if ((_local2 % 2) == 1) {
mc.state["part" + _local2].gotoAndStop("normal");
} else {
mc.state["part" + _local2].gotoAndStop("normalFlip");
}
var _local3 = new Color(mc.state["part" + _local2].mc);
if ((nEnergyTail % 2) == 1) {
_local3.setTransform(HURT_COLOR_TRANSFORM);
} else {
_local3.setTransform(GameData.COLOR_TRANSFORM_NONE);
}
} else {
mc.state["part" + _local2].gotoAndStop("none");
}
_local2++;
}
}
function mustSwitchDirection() {
return(((nDirection == -1) && (mc._x < DISTANCE_LIMIT_SCREEN)) || ((nDirection == 1) && (mc._x > (GameData.SCREEN_WIDTH - DISTANCE_LIMIT_SCREEN))));
}
function checkAttack() {
if (nAttackDelayCount < ATTACK_DELAY) {
nAttackDelayCount++;
} else if (((oTimmy.getState() == "idle") || (oTimmy.getState() == "run")) && (collideWithElementBox("timmy", mc.sight))) {
nAttackDelayCount = 0;
setState("attack");
}
}
function getPartsFromEnergy() {
return(Math.round(nEnergyTail / 2));
}
function spawnLumpDrops() {
var _local3 = mc._parent.createEmptyMovieClip("lumpCreator", mc._parent.getNextHighestDepth());
_local3._x = LUMP_MARGIN_X / 2;
var _local4 = 1;
if (oTimmy.mc._x > (GameData.SCREEN_WIDTH / 2)) {
_local3._y = LUMP_BASE_Y;
_local4 = -1;
} else {
_local3._y = LUMP_BASE_Y - (LUMP_MARGIN_Y * LUMP_TOTAL);
_local4 = 1;
}
var _local2 = 0;
while (_local2 < LUMP_TOTAL) {
oLevel.addInteractiveElement(new elements.LumpDrop(_local3, LUMP_SPEED - _local2));
_local3._x = _local3._x + (LUMP_MARGIN_X + ((-nDirection) * (_local2 * 2)));
_local3._y = _local3._y + (LUMP_MARGIN_Y * _local4);
_local2++;
}
_local3.removeMovieClip();
sarbakan.sound.SoundManager.play("lumpSpit", GameData.VOLUME_LUMP_SPIT);
}
static var PARTS_TOTAL = 4;
static var DISTANCE_LIMIT_SCREEN = 50;
static var SPEED_BASE = 12;
static var SPEED_DECEL_RATE = 0.3;
static var ENERGY_HEAD = GameData.ENERGY_LIFE_TAPEWORM_HEAD;
static var ENERGY_HEAD_FINAL = GameData.ENERGY_LIFE_TAPEWORM_HEAD_FINAL;
static var ENERGY_TAIL = GameData.ENERGY_LIFE_TAPEWORM_TAIL;
static var ATTACK_DELAY = 60;
static var STOP_DELAY = 20;
static var DISAPPEAR_DELAY = 90;
static var IDLE_DURATION = 120;
static var CHANCE_RUN = 0.05;
static var CHANCE_STOP = 0.05;
static var CHANCE_DISAPPEAR = 0.03;
static var FRAME_RUN = 17;
static var FRAME_ATTACK = 6;
static var FRAME_REMOVE_PART = 8;
static var FRAME_SHAKE = 11;
static var FRAME_LUMP_DROP = 30;
static var TIMMY_HURT_SPEEDX = 18;
static var TIMMY_HURT_SPEEDY = 8;
static var LUMP_TOTAL = 7;
static var LUMP_BASE_Y = -25;
static var LUMP_MARGIN_X = 100;
static var LUMP_MARGIN_Y = 50;
static var LUMP_SPEED = 10;
static var HURT_COLOR_TRANSFORM = {ra:52, rb:73, ga:52, gb:24, ba:52, bb:24, aa:100, ab:0};
}
Symbol 2048 MovieClip [__Packages.sarbakan.utils.PerformanceWatcher] Frame 0
class sarbakan.utils.PerformanceWatcher
{
static var nMovieFPS, bActive, oEnterFrameListener, nCurrentFPS, mcDebug, nUpdateCount, nLastGetTimer;
function PerformanceWatcher () {
}
static function start(_nMovieFPS) {
nMovieFPS = _nMovieFPS;
if (!bActive) {
bActive = true;
mx.transitions.OnEnterFrameBeacon.init();
oEnterFrameListener = new Object();
oEnterFrameListener.onEnterFrame = mx.utils.Delegate.create(sarbakan.utils.PerformanceWatcher, update);
MovieClip.removeListener(oEnterFrameListener);
MovieClip.addListener(oEnterFrameListener);
}
nCurrentFPS = nMovieFPS;
reset();
}
static function stop() {
if (bActive) {
bActive = false;
MovieClip.removeListener(oEnterFrameListener);
stopDebug();
}
}
static function addListener(_listener, _nMinFPS, _bDelete) {
aListeners.push({listener:_listener, nMinFPS:_nMinFPS, bDelete:_bDelete});
}
static function removeListener(_listener) {
for (var _local2 in aListeners) {
if (aListeners[_local2].listener == _listener) {
aListeners.splice(_local2, 1);
}
}
}
static function get fps() {
return(nCurrentFPS);
}
static function startDebug(_mcTimeline) {
mcDebug = _mcTimeline.createEmptyMovieClip("PerformanceWatcherDebug", DEBUG_DEPTH);
mcDebug._x = (Stage.width - DEBUG_RIGHT_MARGIN) - 50;
mcDebug._y = DEBUG_TOP_MARGIN;
mcDebug.createTextField("field", 2, 0, 0, 50, 50);
var _local1 = new TextFormat();
_local1.font = DEBUG_FONT;
_local1.size = DEBUG_FONT_SIZE;
_local1.color = DEBUG_FONT_COLOR;
_local1.align = "right";
mcDebug.field.setNewTextFormat(_local1);
mcDebug.field.selectable = false;
mcDebug.createTextField("fieldShadow", 1, 1, 1, 50, 50);
var _local2 = new TextFormat();
_local2.font = DEBUG_FONT;
_local2.size = DEBUG_FONT_SIZE;
_local2.color = DEBUG_FONT_SHADOW_COLOR;
_local2.align = "right";
mcDebug.fieldShadow.setNewTextFormat(_local2);
mcDebug.fieldShadow.selectable = false;
}
static function stopDebug() {
if (mcDebug != undefined) {
mcDebug.removeMovieClip();
}
}
static function update() {
if ((++nUpdateCount) == nMovieFPS) {
computeFrameRate();
updateDebug();
notifyListeners();
}
}
static function reset() {
nUpdateCount = 0;
nLastGetTimer = getTimer();
}
static function computeFrameRate() {
var _local1 = getTimer() - nLastGetTimer;
var _local2 = _local1 / 1000;
nCurrentFPS = Math.round(nMovieFPS / _local2);
reset();
}
static function notifyListeners() {
var _local1 = new Array();
for (var _local2 in aListeners) {
if (aListeners[_local2].nMinFPS >= nCurrentFPS) {
aListeners[_local2].listener(nCurrentFPS);
if (aListeners[_local2].bDelete) {
_local1.push(aListeners[_local2].listener);
}
}
}
for (var _local2 in _local1) {
removeListener(_local1[_local2]);
}
}
static function updateDebug() {
if (mcDebug != undefined) {
mcDebug.field.text = nCurrentFPS + " fps";
mcDebug.fieldShadow.text = nCurrentFPS + " fps";
}
}
static var DEBUG_DEPTH = 123456;
static var DEBUG_RIGHT_MARGIN = 0;
static var DEBUG_TOP_MARGIN = 0;
static var DEBUG_FONT = "Verdana";
static var DEBUG_FONT_SIZE = 10;
static var DEBUG_FONT_COLOR = 16777215;
static var DEBUG_FONT_SHADOW_COLOR = 0;
static var aListeners = new Array();
}
Symbol 1519 MovieClip Frame 1
onRelease = function () {
};
useHandCursor = false;
_alpha = 0;
Symbol 1583 MovieClip Frame 23
stop();
Symbol 1589 MovieClip Frame 35
stop();
Symbol 1593 MovieClip Frame 35
stop();
Symbol 1594 MovieClip Frame 18
stop();
Symbol 1595 MovieClip Frame 1
stop();
Symbol 1739 MovieClip Frame 9
stop();
Symbol 1826 MovieClip Frame 1
stop();
Symbol 1871 Button
on (release) {
Controller.getInstance().oPackaging.clickSound();
_parent.nextFrame();
}
Symbol 1896 MovieClip Frame 85
stop();
Symbol 1898 MovieClip Frame 1
if ((_parent.sTipID == "1_single") || (_parent.sTipID == "1_multi")) {
gotoAndStop ("tip");
}
Symbol 1898 MovieClip Frame 120
if (((_parent.sTipID != undefined) && (_parent.sTipID != "2_single")) && (_parent.sTipID != "2_multi")) {
Controller.getInstance().oLevel.pause();
Controller.getInstance().setPackagingQuality();
mcTips.gotoAndStop(_parent.sTipID);
delete _parent.sTipID;
stop();
} else {
nextFrame();
}
Symbol 1900 MovieClip Frame 1
stop();
Symbol 1932 MovieClip Frame 2
stop();
Symbol 1932 MovieClip Frame 22
stop();
Symbol 1932 MovieClip Frame 32
gotoAndStop ("hidden");
Symbol 1932 MovieClip Frame 52
gotoAndStop ("hidden");
Symbol 1935 MovieClip Frame 2
stop();
Symbol 1946 MovieClip Frame 1
stop();
Symbol 1946 MovieClip Frame 2
stop();
Symbol 1974 MovieClip Frame 1
new Controller(this);
Symbol 1974 MovieClip Frame 2
stop();