Symbol 297 MovieClip [LedPanel] Frame 1
#initclip 26
Object.registerClass("LedPanel", king.LedPanel);
#endinitclip
Symbol 300 MovieClip [PinballGameArea] Frame 1
#initclip 25
Object.registerClass("PinballGameArea", king.Pinball);
#endinitclip
Symbol 320 Button
on (press) {
_root.gameArea.exitButtonPressed();
}
Symbol 327 Button
on (press) {
_root.gameArea.soundButtonPressed();
}
Symbol 329 MovieClip Frame 1
var startTime = getTimer();
var frames = 0;
onEnterFrame = function () {
frames++;
var _local1 = getTimer();
if ((_local1 - startTime) > 1000) {
fpsText.text = "FPS: " + frames;
frames = 0;
startTime = startTime + 1000;
}
};
Symbol 350 MovieClip [__Packages.king.Pinball] Frame 0
class king.Pinball extends MovieClip
{
var minigame, signTime, loadGameDataTime, communicator, quitIn, keyboardLaunchTime, shapes, replayMode, encoder, decoder, balls, flippers, currentLayer, areaLayers, ballLost, replayEncoder, bgMc, attachMovie, lager1, lager2, lineMc, createEmptyMovieClip, moveLineMc, pscript, lastTime, _ymouse, areas, firstNode, remainingGameTime, oldBalls, ledPanel, subHits, canNudge, unnudge, random, ballMc0;
function Pinball () {
super();
minigame = undefined;
signTime = 0;
loadGameDataTime = getTimer() + 500;
communicator = new king.Communicator();
king.Collideable.pinball = this;
quitIn = -1;
keyboardLaunchTime = 0;
shapes = new Object();
replayMode = false;
encoder = new king.Encoder();
decoder = new king.Encoder();
balls = new Array();
flippers = new Array();
hasRunOutOfTime = false;
currentLayer = "lager1";
areaLayers = new Object();
ballLost = false;
if (!DEBUG_MODE) {
_root.fpsMeter._visible = false;
} else {
replayEncoder = new king.Encoder();
}
bgMc = attachMovie("BgLayer", "bgLayer", 0);
lager1 = attachMovie("Layer1", "lager1", 10);
lager2 = attachMovie("Layer2", "lager2", 20);
lineMc = createEmptyMovieClip("lineMc", 1000);
lineMc.cacheAsBitmap = true;
moveLineMc = createEmptyMovieClip("moveLineMc", 9);
var _local4 = 0;
while (_local4 < 1) {
attachMovie("Ball", "ballMc" + _local4, 1 + _local4);
balls[_local4] = new king.Sphere();
balls[_local4].fixedPos = false;
balls[_local4].mass = 1;
balls[_local4].radius = 7;
balls[_local4].pos.set(821, 420 + (_local4 * 8));
balls[_local4].motion.set(0, 20);
this["ballMc" + _local4].colorTint._visible = false;
_local4++;
}
Key.addListener(this);
pscript = new king.Pscript(this);
lastTime = getTimer();
if (DEBUG_MODE) {
var debugGameDataXml = new XML();
var t = this;
debugGameDataXml.onLoad = function (success) {
t.debugDataLoaded(debugGameDataXml);
};
debugGameDataXml.ignoreWhite = true;
debugGameDataXml.load("debug_gamedata.xml");
}
}
function debugDataLoaded(debugGameDataXml) {
_root.gameData = debugGameDataXml.toString();
}
function onPress() {
if (!gameStarted) {
return(undefined);
}
if (currentSign != undefined) {
currentSign.onClick();
return(undefined);
}
launching = true;
yLaunch = _ymouse * PLUNGER_SPEED;
}
function onReleaseOutside() {
onMouseUp();
}
function onRelease() {
onMouseUp();
}
function onMouseUp() {
if (!gameStarted) {
return(undefined);
}
if ((launching && (!kblaunching)) && (!replayMode)) {
launching = false;
var _local3 = _ymouse * PLUNGER_SPEED;
var _local2 = _local3 - yLaunch;
if (_local2 < 0) {
_local2 = 0;
}
if (_local2 > MAX_PLUNGER_SPEED) {
_local2 = MAX_PLUNGER_SPEED;
}
_local2 = int(_local2);
if (_local2 > 5) {
king.Sounds.get("launchSound").play();
}
if (!ballLaunched) {
if (balls[0].pos.y >= PLUNGER_HEIGHT) {
encoder.append(255);
encoder.append(_local2);
launch(_local2);
}
}
}
}
function launch(launchSpeed) {
if (!ballLaunched) {
if (balls[0].pos.y >= PLUNGER_HEIGHT) {
balls[0].pos.y = PLUNGER_HEIGHT - 1;
balls[0].motion.y = (-launchSpeed) * 0.5;
hasLaunched = true;
}
}
}
function addFlipper(flipper) {
var _local4 = flippers.length;
var _local2 = moveLineMc.createEmptyMovieClip("flipper" + _local4, 100 + _local4);
flipper.setMovieClip(_local2);
_local2._x = flipper.xPos;
_local2._y = flipper.yPos;
flippers.push(flipper);
}
function switchLayer(layer) {
if ((layer == "lager1") && (pscript.getValue("_volcanoopen") == 1)) {
layer = "lager1_1";
}
ballLaunched = true;
currentLayer = layer;
setLayer(layer);
}
function setLayer(layerName) {
if (areaLayers[layerName] == undefined) {
areaLayers[layerName] = new Array(ZONE_WIDTH);
var _local3 = 0;
while (_local3 < ZONE_WIDTH) {
areaLayers[layerName][_local3] = new Array(ZONE_WIDTH);
var _local2 = 0;
while (_local2 < ZONE_WIDTH) {
areaLayers[layerName][_local3][_local2] = new Array();
_local2++;
}
_local3++;
}
}
areas = areaLayers[layerName];
}
function onKeyDown() {
toggleKey(Key.getCode(), true);
}
function onKeyUp() {
toggleKey(Key.getCode(), false);
}
function toggleKey(key, isDown) {
}
function newCircle(r, g, b, x, y, rx, ry, id) {
if (RENDER_WALLS) {
lineMc.beginFill(((r << 16) | (g << 8)) | b, 100);
lineMc.lineStyle(1, 0, 100);
drawCircle(lineMc, x, y, rx, ry);
lineMc.endFill();
}
var _local2 = new king.Sphere();
shapes[id] = _local2;
_local2.id = id;
_local2.pos.set(x, y);
var _local3 = (rx + ry) / 2;
_local2.radius = _local3;
_local2.rx = _local3 / rx;
_local2.ry = _local3 / ry;
wallType = 0;
if ((((r == 0) && (g == 0)) && (b == 255)) || (((r == 255) && (g == 0)) && (b == 0))) {
wallType = 1;
}
if (((r == 255) && (g == 77)) && (b == 0)) {
wallType = 2;
}
if (wallType == 1) {
_local2.sticky = 0.9;
_local2.launch = 3;
} else if (wallType == 2) {
}
addCorner(_local2);
}
function drawCircle(mc, x, y, rx, ry) {
if (RENDER_WALLS) {
mc.moveTo(x + rx, y);
mc.curveTo(rx + x, (0.414213562373095 * ry) + y, (king.XpMath.sin((Math.PI/4)) * rx) + x, (king.XpMath.sin((Math.PI/4)) * ry) + y);
mc.curveTo((0.414213562373095 * rx) + x, ry + y, x, ry + y);
mc.curveTo((-0.414213562373095 * rx) + x, ry + y, ((-king.XpMath.sin((Math.PI/4))) * rx) + x, (king.XpMath.sin((Math.PI/4)) * ry) + y);
mc.curveTo((-rx) + x, (0.414213562373095 * ry) + y, (-rx) + x, y);
mc.curveTo((-rx) + x, (-0.414213562373095 * ry) + y, ((-king.XpMath.sin((Math.PI/4))) * rx) + x, ((-king.XpMath.sin((Math.PI/4))) * ry) + y);
mc.curveTo((-0.414213562373095 * rx) + x, (-ry) + y, x, (-ry) + y);
mc.curveTo((0.414213562373095 * rx) + x, (-ry) + y, (king.XpMath.sin((Math.PI/4)) * rx) + x, ((-king.XpMath.sin((Math.PI/4))) * ry) + y);
mc.curveTo(rx + x, (-0.414213562373095 * ry) + y, rx + x, y);
}
}
function newArea(r, g, b) {
if (RENDER_WALLS) {
lineMc.beginFill(((r << 16) | (g << 8)) | b, 100);
lineMc.lineStyle(1, 0, 100);
}
wallType = 0;
if ((((r == 0) && (g == 0)) && (b == 255)) || (((r == 255) && (g == 0)) && (b == 0))) {
wallType = 1;
}
if (((r == 255) && (b == 255)) && (g == 0)) {
wallType = 2;
}
if (((r == 0) && (b == 255)) && (g == 255)) {
wallType = 3;
}
firstNode = true;
}
function endArea() {
if (RENDER_WALLS) {
lineMc.endFill();
}
}
function addWall3(r, g, b, x0, y0, x1, y1, firstPoint, id) {
if (((isNaN(x0) || (isNaN(y0))) || (isNaN(x1))) || (isNaN(y1))) {
return(false);
}
if (RENDER_WALLS) {
lineMc.lineStyle(1, ((r << 16) | (g << 8)) | b, 100);
lineMc.moveTo(x0, y0);
lineMc.lineTo(x1, y1);
}
if ((((r << 16) | (g << 8)) | b) == 441856) {
var _local8 = new king.Portal(this, x0, y0, x1, y1);
_local8.targetLayer = id;
addWall2(_local8);
} else if ((((r << 16) | (g << 8)) | b) == 65535) {
var _local9 = new king.Rollover(this, x0, y0, x1, y1);
_local9.targetLayer = id;
addWall2(_local9);
} else {
var _local6 = new king.Wall(x0, y0, x1, y1);
_local6.id = id;
_local6.spring = 0.01;
addWall2(_local6);
if (firstPoint) {
var _local7 = new king.Sphere();
_local7.pos.set(x0, y0);
_local7.spring = 0.01;
addCorner(_local7);
}
var _local7 = new king.Sphere();
_local7.pos.set(x1, y1);
_local7.spring = 0.01;
addCorner(_local7);
}
return(true);
}
function addWall(x0, y0, x1, y1, id) {
if (((isNaN(x0) || (isNaN(y0))) || (isNaN(x1))) || (isNaN(y1))) {
return(undefined);
}
var _local3 = new king.Wall(x0, y0, x1, y1);
_local3.id = id;
if (wallType == 1) {
_local3.sticky = 0.9;
_local3.launch = 7.5;
}
if (wallType == 2) {
_local3.sticky = 0.95;
}
if (wallType == 3) {
_local3.solid = false;
}
addWall2(_local3);
if (RENDER_WALLS) {
if (firstNode) {
lineMc.moveTo(x0, y0);
firstNode = false;
}
lineMc.lineTo(x1, y1);
}
var _local2 = new king.Sphere();
_local2.id = id;
if (wallType == 1) {
_local2.sticky = 0.9;
_local2.launch = 7.5;
}
if (wallType == 2) {
_local2.sticky = 0.95;
}
if (wallType == 3) {
_local2.solid = false;
}
_local2.pos.set(x0, y0);
addCorner(_local2);
}
function addWall2(wall) {
var _local8 = int(wall.v0.x / PIXELS_PER_ZONE);
var _local5 = int(wall.v0.y / PIXELS_PER_ZONE);
var _local7 = int(wall.v1.x / PIXELS_PER_ZONE);
var _local4 = int(wall.v1.y / PIXELS_PER_ZONE);
if (_local8 > _local7) {
var _local9 = _local7;
_local7 = _local8;
_local8 = _local9;
}
if (_local5 > _local4) {
var _local9 = _local4;
_local4 = _local5;
_local5 = _local9;
}
var _local3 = _local8;
while (_local3 <= _local7) {
var _local2 = _local5;
while (_local2 <= _local4) {
areas[_local3][_local2].push(wall);
_local2++;
}
_local3++;
}
}
function addCorner(sphere) {
var _local8 = int((sphere.pos.x - (sphere.radius / sphere.rx)) / PIXELS_PER_ZONE);
var _local6 = int((sphere.pos.y - (sphere.radius / sphere.ry)) / PIXELS_PER_ZONE);
var _local7 = int((sphere.pos.x + (sphere.radius / sphere.rx)) / PIXELS_PER_ZONE);
var _local5 = int((sphere.pos.y + (sphere.radius / sphere.ry)) / PIXELS_PER_ZONE);
var _local3 = _local8;
while (_local3 <= _local7) {
var _local2 = _local6;
while (_local2 <= _local5) {
areas[_local3][_local2].push(sphere);
_local2++;
}
_local3++;
}
}
function gameDataReceived() {
_root.hider._visible = false;
gameStarted = true;
communicator.parseGameData(_root.gameData);
communicator.gameStarted();
pscript.setScript(communicator.pscriptXml);
(new king.LevelData()).parseLevelData(this, communicator);
_root.soundButtonText = (soundOn ? (_global.textMappings.sound_on) : (_global.textMappings.sound_off));
_root.exitButtonText = _global.textMappings.exit_game;
currentSign = new king.InstructionsSign(this);
}
function onEnterFrame() {
if (!gameStarted) {
if ((_root.gameData != undefined) && (getTimer() > loadGameDataTime)) {
gameDataReceived();
}
return(undefined);
}
if (currentSign != undefined) {
currentSign.render();
return(undefined);
}
if (((quitIn >= 0) && (getTimer() > quitIn)) && (balls[0].pos.y > LEVEL_HEIGHT)) {
if (_global.shortGameMode) {
currentSign = new king.ShortGameOverSign(this);
} else {
currentSign = new king.GameOverSign(this);
}
return(undefined);
}
var _local14 = 1000 / TICKS_PER_SECOND;
if (replayMode && (Key.isDown(32))) {
_local14 = 5;
}
var _local15 = getTimer();
var _local16 = 0;
while ((_local15 - lastTime) > _local14) {
var _local4 = 0;
while (_local4 < balls.length) {
balls[_local4].hasStickied = false;
balls[_local4].lastPos.set(balls[_local4].pos.x, balls[_local4].pos.y);
_local4++;
}
advanceTime(tick);
tick++;
_local16++;
if ((tick % TICKS_PER_SECOND) == 0) {
pscript.runScript("timestep");
}
lastTime = lastTime + _local14;
if (_local16 == 10) {
lastTime = _local15;
}
}
var _local9 = (_local15 - lastTime) / _local14;
if ((_local15 - lastTime) > _local14) {
_local9 = 1;
}
var _local18 = pscript.getValue("_balls");
var _local17 = pscript.getValue("_bonus");
var _local19 = int(((remainingGameTime + TICKS_PER_SECOND) - 1) / TICKS_PER_SECOND);
if ((((score != oldScore) || (_local17 != oldBonus)) || (_local19 != oldTime)) || (_local18 != oldBalls)) {
if (signTime == 0) {
ledPanel.renderScore(score, _local17, _local19, _local18 + 1);
oldScore = score;
oldBalls = _local18;
oldTime = _local19;
oldBonus = _local17;
}
}
var _local4 = 0;
while (_local4 < flippers.length) {
flippers[_local4].render(_local9);
_local4++;
}
_local4 = 0;
while (_local4 < balls.length) {
if (currentLayer == "ramp1") {
this["ballMc" + _local4].swapDepths(11 + _local4);
} else if (currentLayer == "ramp2") {
this["ballMc" + _local4].swapDepths(21 + _local4);
} else {
this["ballMc" + _local4].swapDepths(1 + _local4);
}
var _local6 = balls[_local4].lastPos;
var _local7 = 0;
var _local5 = 0;
while (subHits[_local5].t < _local9) {
_local6 = subHits[_local5].p;
_local7 = subHits[_local5].t;
_local5++;
}
var _local10 = subHits[_local5].p;
var _local11 = subHits[_local5].t;
var _local8 = (_local9 - _local7) / (_local11 - _local7);
if ((_local11 - _local7) == 0) {
_local8 = 0.5;
}
var _local12 = _local10.x - _local6.x;
var _local13 = _local10.y - _local6.y;
this["ballMc" + _local4]._x = _local6.x + (_local12 * _local8);
this["ballMc" + _local4]._y = _local6.y + (_local13 * _local8);
_local4++;
}
if (minigame != undefined) {
minigame.render(_local9);
}
}
function spawnBall() {
if ((!DEBUG_MODE) && (gameStarted2)) {
return(undefined);
}
gameStarted2 = true;
encoder = new king.Encoder();
replayMode = false;
canNudge = false;
unnudge = false;
initGame();
}
function replay() {
if (!DEBUG_MODE) {
return(undefined);
}
_root.debugText.text = "";
decodeStep = 0;
decoder = new king.Decoder(DEBUG_DATAS[decodeStep++]);
replayMode = true;
initGame();
tick--;
}
function initGame() {
if (DEBUG_MODE && (DEBUG_RANDOM_SEED)) {
random = new king.util.Random(int(Math.random() * 10000000));
} else {
random = new king.util.Random(communicator.randomSeed);
}
pscript.random = new king.util.Random(random.nextInt(1000000));
remainingGameTime = 120 * TICKS_PER_SECOND;
tick = 0;
pscript.runScript("init");
if (_global.shortGameMode) {
pscript.setVar("shortgame", 1);
}
var _local5 = random.nextInt(5);
var _local4 = random.nextInt(5);
var _local3 = random.nextInt(5);
pscript.setVar("_task0", 1 + _local5);
pscript.setVar("_task1", 11 + _local4);
pscript.setVar("_task2", 21 + _local3);
pscript.runScript("starttask");
hasRunOutOfTime = false;
hasLaunched = false;
newBall();
}
function newBall() {
if (remainingGameTime <= 0) {
finalBallLost = true;
return(undefined);
}
king.Sounds.get("newBallSound").play();
balls[0].pos.set(321, 420);
balls[0].motion.set(0, -2);
subHits = new Array();
var _local2 = new Object();
_local2.t = 0;
_local2.p = new king.Vec(balls[0].pos.x, balls[0].pos.y);
subHits.push(_local2);
_local2 = new Object();
_local2.p = new king.Vec(balls[0].pos.x, balls[0].pos.y);
_local2.t = 1;
subHits.push(_local2);
ballLocked = false;
ballLost = false;
currentLayer = "ramp2";
ballLaunched = false;
tilted = false;
pscript.runScript("newball");
}
function addTime(seconds) {
remainingGameTime = remainingGameTime + (seconds * TICKS_PER_SECOND);
}
function launchBall(x, y) {
var _local2 = balls[0];
_local2.motion.set(x, y);
ballLocked = false;
}
function lockBall(posName) {
var _local2 = balls[0];
_local2.pos.x = shapes[posName].pos.x;
_local2.pos.y = shapes[posName].pos.y;
_local2.motion.set(0, 0);
subHits = new Array();
var _local3 = new Object();
_local3.t = 0;
_local3.p = new king.Vec(_local2.pos.x, _local2.pos.y);
subHits.push(_local3);
_local3 = new Object();
_local3.t = 1;
_local3.p = new king.Vec(_local2.pos.x, _local2.pos.y);
subHits.push(_local3);
ballLocked = true;
}
function tilt() {
tilted = true;
showSign(106);
}
function advanceTime(tick) {
if (signTime > 0) {
signTime--;
}
var _local52 = false;
king.MoveableSphere.debugText = _local52;
if (nudgeAnimTime > 0) {
nudgeAnimTime--;
moveLineMc._y = -nudgeAnimTime;
_root.launcher._y = PLUNGER_Y_POS - nudgeAnimTime;
bgMc._y = -nudgeAnimTime;
lager1._y = -nudgeAnimTime;
lager2._y = -nudgeAnimTime;
}
if (replayMode && (!decoder.hasMoreTicks())) {
decoder = new king.Decoder(DEBUG_DATAS[decodeStep++]);
}
if (!gameStarted2) {
return(undefined);
}
var _local53 = pscript.getValue("_balls");
if (_local53 < 0) {
remainingGameTime = 0;
}
if (((!isBoardAlive()) && (balls[0].pos.y >= PLUNGER_HEIGHT)) && (!ballLaunched)) {
launchSpeed = int(MAX_PLUNGER_SPEED / 4);
encoder.append(255);
encoder.append(launchSpeed);
launch(launchSpeed);
}
if (Key.isDown(40) && (!cheatMode)) {
kblaunching = true;
keyboardLaunchTime++;
if (keyboardLaunchTime > MAX_PLUNGER_SPEED) {
keyboardLaunchTime = int(MAX_PLUNGER_SPEED / 2);
}
} else {
if (keyboardLaunchTime > 0) {
var launchSpeed = keyboardLaunchTime;
if (launchSpeed > 5) {
king.Sounds.get("launchSound").play();
}
kblaunching = false;
if (!ballLaunched) {
if (balls[0].pos.y >= PLUNGER_HEIGHT) {
encoder.append(255);
encoder.append(launchSpeed);
launch(launchSpeed);
}
}
}
keyboardLaunchTime = 0;
}
if (kblaunching) {
_root.launcher.gotoAndStop(1 + int((99 * keyboardLaunchTime) / MAX_PLUNGER_SPEED));
} else if (launching) {
var _local57 = _ymouse * PLUNGER_SPEED;
var _local49 = _local57 - yLaunch;
yLaunch = yLaunch + (_local49 * 0.1);
if (_local49 < 0) {
_local49 = 0;
}
if (_local49 > MAX_PLUNGER_SPEED) {
_local49 = MAX_PLUNGER_SPEED;
yLaunch = yLaunch + (_local49 - MAX_PLUNGER_SPEED);
}
_root.launcher.gotoAndStop(1 + int((99 * _local49) / MAX_PLUNGER_SPEED));
} else {
_root.launcher.gotoAndStop(1);
}
st = st + sta;
sta = sta * 0.96;
lager1.spin.gotoAndStop((int(st) % 6) + 1);
if ((minigame == undefined) && (hasLaunched)) {
remainingGameTime--;
}
if ((!hasRunOutOfTime) && (remainingGameTime <= 0)) {
hasRunOutOfTime = true;
pscript.runScript("gameover");
var _local55 = pscript.getValue("_score");
encoder.append(0);
encoder.flush();
communicator.sendMotionData(encoder.res);
encoder = new king.Encoder();
communicator.gameEnd(_local55);
quitIn = getTimer() + 500;
}
if (!ballLaunched) {
if (balls[0].pos.y > PLUNGER_HEIGHT) {
balls[0].pos.y = PLUNGER_HEIGHT;
balls[0].motion.y = 0;
}
}
if (minigame == null) {
pscript.tick();
}
if (Key.isDown(13)) {
spawnBall();
}
if (Key.isDown(46)) {
replay();
return(undefined);
}
setLayer(currentLayer);
var _local41 = false;
var _local40 = false;
var _local50 = false;
var _local47 = false;
var _local45 = false;
var _local46 = false;
var _local44 = false;
if (replayMode) {
var _local48 = decoder.next();
while (_local48 == 255) {
launch(decoder.next());
_local48 = decoder.next();
}
_local41 = (_local48 & 1) > 0;
_local40 = (_local48 & 2) > 0;
_local50 = (_local48 & 4) > 0;
_local47 = (_local48 & 8) > 0;
_local45 = (_local48 & 16) > 0;
_local46 = (_local48 & 32) > 0;
_local44 = (_local48 & 64) > 0;
} else {
if (DEBUG_MODE && (Key.isDown(27))) {
cheatMode = true;
}
if (Key.isDown(27)) {
useShift = true;
}
if (useShift) {
_local41 = Key.isDown(16);
_local40 = Key.isDown(17);
} else {
_local41 = false;
_local40 = false;
}
_local50 = Key.isDown(32);
if (cheatMode) {
_local47 = Key.isDown(37);
_local45 = Key.isDown(39);
_local46 = Key.isDown(38);
_local44 = Key.isDown(40);
} else {
_local50 = _local50 | Key.isDown(38);
_local41 = _local41 | Key.isDown(37);
_local40 = _local40 | Key.isDown(39);
}
var _local48 = 0;
if (_local41) {
_local48 = _local48 + 1;
}
if (_local40) {
_local48 = _local48 + 2;
}
if (_local50) {
_local48 = _local48 + 4;
}
if (_local47) {
_local48 = _local48 + 8;
}
if (_local45) {
_local48 = _local48 + 16;
}
if (_local46) {
_local48 = _local48 + 32;
}
if (_local44) {
_local48 = _local48 + 64;
}
encoder.append(_local48);
if (encoder.res.length >= 60) {
encoder.flush();
communicator.sendMotionData(encoder.res);
encoder = new king.Encoder();
}
}
if (!_local50) {
canNudge = true;
}
if (((remainingGameTime > 0) && (!tilted)) && (minigame == undefined)) {
if (_local41 != leftFlipperDown) {
leftFlipperDown = _local41;
if (leftFlipperDown) {
pscript.runScript("flip.left");
}
}
if (_local40 != rightFlipperDown) {
rightFlipperDown = _local40;
if (rightFlipperDown) {
pscript.runScript("flip.right");
}
}
var _local42 = false;
var _local43 = false;
var _local5 = 0;
while (_local5 < flippers.length) {
var _local38 = flippers[_local5].isPressed;
var _local33 = false;
if (flippers[_local5].facing == 1) {
flippers[_local5].isPressed = _local41;
_local33 = !_local42;
_local42 = true;
} else {
flippers[_local5].isPressed = _local40;
_local33 = !_local43;
_local43 = true;
}
if ((_local38 ^ flippers[_local5].isPressed) && (_local33)) {
if (_local38) {
king.Sounds.get("flipperUpSound").play();
} else {
king.Sounds.get("flipperDownSound").play();
}
}
_local5++;
}
} else {
var _local5 = 0;
while (_local5 < flippers.length) {
flippers[_local5].isPressed = false;
_local5++;
}
}
if (!ballLost) {
if (balls[0].pos.y > LEVEL_HEIGHT) {
ballLost = true;
king.Sounds.get("ballostsound").play();
pscript.runScript("ball.lost");
}
}
if (unnudge) {
unnudge = false;
var _local51 = 0;
var _local56 = -4;
if (!ballLocked) {
balls[0].motion.addV(_local51, _local56);
}
}
if (nudgeWarning > 0) {
nudgeWarning--;
}
if ((_local50 && (canNudge)) && (isBoardAlive())) {
nudgeAnimTime = 4;
moveLineMc._y = -3;
_root.launcher._y = PLUNGER_Y_POS - 3;
bgMc._y = -3;
lager1._y = -3;
lager2._y = -3;
unnudge = true;
canNudge = false;
nudgeWarning = nudgeWarning + NUDGE_WARNING_VALUE;
if (nudgeWarning >= NUDGE_TILT_LIMIT) {
tilt();
}
var _local58 = ((random.nextDouble() < 0.5) ? -1 : 1);
var _local51 = ((random.nextDouble() * 1.2) + 0.5) * _local58;
var _local54 = balls[0].pos.x - 170;
_local51 = _local51 + ((_local54 * 4) / 170);
var _local56 = 4;
if (!ballLocked) {
balls[0].motion.addV(_local51, _local56);
}
}
if (!ballLocked) {
var _local5 = 0;
while (_local5 < balls.length) {
balls[_local5].motion.addV((_local47 ? -0.5 : 0), (_local46 ? -0.5 : 0));
balls[_local5].motion.addV((_local45 ? 0.5 : 0), (_local44 ? 0.5 : 0));
balls[_local5].motion.addV(0, GRAVITY);
balls[_local5].motion.scale(INERTIA);
var _local34 = MAX_BALL_SPEED;
ballRolling = balls[_local5].motion.lengthSqr() > 25;
if (balls[_local5].motion.lengthSqr() > (_local34 * _local34)) {
balls[_local5].motion.normalize();
balls[_local5].motion.scale(_local34);
}
_local5++;
}
} else {
ballRolling = false;
}
if (ballRolling != ballWasRolling) {
if (ballRolling) {
king.Sounds.get("ballRollSound").play();
} else {
king.Sounds.get("ballRollSound").stop();
}
ballWasRolling = ballRolling;
}
var _local31 = 1;
subHits = new Array();
var _local5 = 0;
while (_local5 < flippers.length) {
flippers[_local5].tick();
_local5++;
}
var _local23 = new king.Vec(0, 0);
var _local18 = new king.Vec(0, 0);
var _local37 = 0;
var _local15 = 0;
if (minigame != null) {
minigame.tick(_local41, _local40);
}
do {
if (_local31 <= 0) {
break;
}
_local37++;
var _local3 = _local31;
var _local13;
var _local22;
var _local4 = new Array(4);
var _local16 = 0;
while (_local16 < balls.length) {
_local4[_local16] = new Array();
var _local9 = balls[_local16];
if ((_local37 > 4) && (_local9.motion.lengthSqr() < 0.2)) {
_local9.motion.set(0, 0);
}
var _local14 = _local9.pos;
_local18.set(_local9.pos.x + _local9.motion.x, _local9.pos.y + _local9.motion.y);
var _local12 = _local14.x;
var _local7 = _local14.y;
var _local11 = _local18.x;
var _local6 = _local18.y;
if (_local12 > _local11) {
var _local32 = _local11;
_local11 = _local12;
_local12 = _local32;
}
if (_local7 > _local6) {
var _local32 = _local6;
_local6 = _local7;
_local7 = _local32;
}
var _local30 = _local12;
var _local28 = _local7;
var _local29 = _local11;
var _local27 = _local6;
_local12 = int((_local12 - _local9.radius) / PIXELS_PER_ZONE);
_local7 = int((_local7 - _local9.radius) / PIXELS_PER_ZONE);
_local11 = int((_local11 + _local9.radius) / PIXELS_PER_ZONE);
_local6 = int((_local6 + _local9.radius) / PIXELS_PER_ZONE);
currentCollideTick++;
var _local17 = _local12;
while (_local17 <= _local11) {
var _local10 = _local7;
while (_local10 <= _local6) {
var _local21 = areas[_local17][_local10];
_local5 = 0;
while (_local5 < _local21.length) {
var _local8 = _local21[_local5];
if (_local8.lastTick != currentCollideTick) {
_local8.lastTick = currentCollideTick;
var _local26 = _local8.getCollisionTime(_local9, _local14, _local18, _local15, currentCollideTick);
if (_local26 < 1) {
_local4[_local16].push(_local8);
}
if ((_local26 >= 0) && (_local26 < _local3)) {
_local22 = _local9;
_local3 = _local26;
_local13 = _local8;
}
}
_local5++;
}
_local10++;
}
_local17++;
}
if ((currentLayer == "lager1") || (currentLayer == "lager1_1")) {
var _local36 = 0;
while (_local36 < flippers.length) {
var _local20 = flippers[_local36].xPos;
var _local25 = flippers[_local36].yPos - flippers[_local36].radius;
var _local19 = flippers[_local36].xPos;
var _local24 = flippers[_local36].yPos + flippers[_local36].radius;
if (flippers[_local36].facing == -1) {
_local20 = _local20 - flippers[_local36].radius;
_local19 = _local19 + 10;
} else {
_local20 = _local20 - 10;
_local19 = _local19 + flippers[_local36].radius;
}
if ((((_local29 > _local20) && (_local30 < _local19)) && (_local27 > _local25)) && (_local28 < _local24)) {
var _local21 = flippers[_local36].collideables;
_local5 = 0;
while (_local5 < _local21.length) {
var _local8 = _local21[_local5];
var _local26 = _local8.getCollisionTime(_local9, _local14, _local18, _local15);
_local4[_local16].push(_local8);
if (_local26 < _local3) {
_local22 = _local9;
_local3 = _local26;
_local13 = _local8;
}
_local5++;
}
}
_local36++;
}
}
_local16++;
}
if (_local3 < 0) {
_local3 = 0;
}
var _local9 = _local22;
_local9 = balls[0];
if (_local3 >= _local31) {
_local3 = _local31;
}
var _local39 = _local3;
var _local35 = false;
_local23.set(_local9.pos.x + (_local9.motion.x * _local3), _local9.pos.y + (_local9.motion.y * _local3));
do {
_local35 = false;
_local16 = 0;
_local5 = 0;
while (_local5 < _local4[_local16].length) {
if (_local4[_local16][_local5].solid && (_local4[_local16][_local5].isInside(_local23, _local15 + _local3, _local9))) {
_local13 = _local4[_local16][_local5];
_local35 = true;
}
_local5++;
}
if (_local35) {
_local3 = _local3 - 0.01;
if (_local3 < 0) {
_local3 = 0;
}
_local23.set(_local9.pos.x + (_local9.motion.x * _local3), _local9.pos.y + (_local9.motion.y * _local3));
}
} while (_local35 && (_local3 > 0));
if (_local3 < 0) {
_local3 = 0;
}
_local31 = _local31 - _local39;
_local15 = _local15 + _local3;
_local9.pos.set(_local23.x, _local23.y);
var _local26 = _local15 + _local3;
if (_local26 < 0) {
_local26 = 0;
}
if (_local26 > 1) {
_local26 = 1;
}
if (_local13 != null) {
_local13.collide(_local9, _local26);
if (_local13.id != undefined) {
if ((remainingGameTime > 0) && (!tilted)) {
pscript.runScript(_local13.id + ".collide");
} else {
pscript.runScript(_local13.id + ".collide.outoftime");
}
}
_local31 = _local31 - 0.01;
_local15 = _local15 - 0.01;
}
_local35 = new Object();
_local35.t = _local26;
_local35.p = new king.Vec(_local23.x, _local23.y);
subHits.push(_local35);
} while (_local37 <= 5);
score = pscript.getValue("_score");
if (_local15 > 1) {
_local15 = 1;
}
if (_local15 < 0) {
_local15 = 0;
}
var _local36 = 0;
while (_local36 < flippers.length) {
flippers[_local36].addTime(_local15);
_local36++;
}
}
function refreshlayer() {
if ((currentLayer == "lager1") || (currentLayer == "lager1_1")) {
switchLayer("lager1");
}
}
function isBoardAlive() {
return((remainingGameTime > 0) && (!tilted));
}
function rollOver(line) {
if ((remainingGameTime > 0) && (!tilted)) {
pscript.runScript(line + ".rollover");
} else {
pscript.runScript(line + ".rollover.outoftime");
}
}
function spin() {
sta = 4;
}
function flipperCollided() {
var _local2 = tick - flipperCollideTick;
if (_local2 > 3) {
pscript.runScript("flipperhit");
}
flipperCollideTick = tick;
}
function setBallGlow(shouldGlow) {
if (wasGlowing != shouldGlow) {
if (shouldGlow) {
king.Sounds.get("gamemusic").stop();
king.Sounds.get("lavamusic").playLooping();
king.Sounds.get("lavamusic").setVolume(30);
} else {
king.Sounds.get("lavamusic").stop();
king.Sounds.get("gamemusic").playLooping();
king.Sounds.get("gamemusic").setVolume(30);
}
wasGlowing = shouldGlow;
}
ballMc0.colorTint._visible = shouldGlow;
}
function shortGameOver() {
remainingGameTime = 0;
}
function soundButtonPressed() {
king.Sounds.toggleSound();
soundOn = !soundOn;
_root.soundButtonText = (soundOn ? (_global.textMappings.sound_on) : (_global.textMappings.sound_off));
}
function exitButtonPressed() {
if (remainingGameTime > 0) {
encoder.append(0);
encoder.flush();
communicator.sendMotionData(encoder.res);
encoder = new king.Encoder();
communicator.sendEndGamePressed();
remainingGameTime = 0;
}
}
function showSign(signNum) {
ledPanel.renderSign(signNum);
if ((signNum >= 100) && (signNum < 200)) {
signTime = 50;
} else {
signTime = 150;
}
}
function playMiniGame(minigameNum) {
minigame = new king.MiniGame(this, random);
_root.sign._visible = true;
_root.sign._x = 0;
_root.sign._y = 110;
_root.sign.titleText.text = _global.textMappings.minigame_title;
_root.sign.bodyText.text = _global.textMappings.minigame_instructions;
_root.sign.timeText.text = "";
}
var DEBUG_MODE = false;
var DEBUG_RANDOM_SEED = true;
var DEBUG_DATAS = ["A!3100Y!31k0100p10O00z10I00#00F10P00#00#00#00V10b00710130M201", "310I00h10e00i20T00#00#00m10900Z20L00#00u10C00#00#00W20U00E101", "010m00#00#00210I00y20I00n10T00E10G00#00#00#00z10500#00O20L001", "G10C00#00I10j00#00#00#00#00#00w10d00#00#00E20S00U20R00i10U001", "#00#00U20C00#00I20I00#00310Q50S10E00d!31R0100#00#00H10L00#001", "E10N00#00E10Z00m20F00#00#00#00210Y00#00Y10G00#00F10T00#00j201", "020C00#00#00Q20600#00#00E20E00110Y00P10Z00K10S00#00110k00c101", "010Z00#00720130I20200O10u00Z10c00J10L20530N20100#00#00#10Z001", "#00#00#00S10Z00#00#00#00910#10#10B00b10#10#10#10d00a10c00G101", "010130l10100v10H00#00#00#00W10800l30j20300y10C00f20E30A202001", "#00D20I00H10F00#00#00G10A00r20E00910b00j10U00910B00B10A00I101", "010A00f30Q20100#00I20P00g10S00O10J00m20230O20700h20U00#00m101", "010900#00a20V00k20n00#00O20I00310K30O20400S!31O0100A10#10r001", "z10D00I20I00v10d00#00M10N50M70130820C00#00#00O20B00#00#00U101", "010B00#00U20P00U20I00#00z10b00I10E00#00610L00s20I00#00#002101", "010K00#00F10Q00o10C00d10A30c20300#00#00a20F00#00#00#00X109001", "#00B20M00v10J00T10330C20400#00x10M00#00310O00#00110#10C00J101", "010e00d10o00J10P00#00410o00R10P00510X00J10#10400D10d00w10c001", "#00#00\u00C3\u00A4'r#00V10M00d30j20200w10M00E20I00#00X10d00#00e20M00#00#001", "n20O60N20130210I00o10b00p10A00W20L00#00H10S00410A00I10J00h101", "010130i20330A20I00x20R00#00G10Q001"];
static var TICKS_PER_SECOND = 50;
static var RENDER_WALLS = false;
static var PIXELS_PER_ZONE = 48;
static var ZONE_WIDTH = int(1000 / PIXELS_PER_ZONE);
static var GRAVITY = 0.15;
static var INERTIA = 0.999;
static var PLUNGER_SPEED = 0.5;
static var MAX_PLUNGER_SPEED = 80;
static var PLUNGER_HEIGHT = 403;
static var PLUNGER_Y_POS = 455;
static var MAX_BALL_SPEED = 20;
static var LEVEL_HEIGHT = 507;
static var NUDGE_WARNING_VALUE = 30;
static var NUDGE_TILT_LIMIT = 60;
var nudgeWarning = 0;
var ballLaunched = false;
var cheatMode = false;
var useShift = false;
var hasRunOutOfTime = false;
var currentSign = undefined;
var ballLocked = false;
var tilted = false;
var hasLaunched = false;
var finalBallLost = false;
var currentCollideTick = 0;
var leftFlipKey = false;
var rightFlipKey = false;
var tick = 0;
var flipperCollideTick = 0;
var gameStarted = false;
var gameStarted2 = false;
var score = 0;
var oldScore = -1;
var oldTime = -1;
var oldBonus = -1;
var decodeStep = 0;
var launching = false;
var kblaunching = false;
var yLaunch = 0;
var wallType = 0;
var leftFlipperDown = false;
var rightFlipperDown = false;
var st = 0;
var sta = 0;
var ballWasRolling = false;
var ballRolling = false;
var nudgeAnimTime = 0;
var wasGlowing = false;
var soundOn = true;
}
Symbol 351 MovieClip [__Packages.king.Communicator] Frame 0
class king.Communicator
{
var levelVersion, layerDatas, randomSeed, pscriptXml;
function Communicator () {
levelVersion = "v0";
layerDatas = new Object();
}
function gameStarted() {
fscommand ("gameStart");
sendLevelVersion(levelVersion);
}
function gameEnd(score) {
if (!hasSentGameEnd) {
hasSentGameEnd = true;
fscommand ("gameEnd", score);
}
}
function gameQuit() {
if (!hasSentGameOver) {
hasSentGameOver = true;
fscommand ("gameQuit");
}
}
function sendLevelVersion(levelVersion) {
fscommand ("playData", ((CMD_LEVEL_VERSION + ",") + levelVersion) + "=0");
}
function sendMotionData(data) {
fscommand ("playData", ((CMD_MOTION_DATA + ",") + data) + "=0");
}
function sendEndGamePressed(startTime) {
fscommand ("playData", CMD_END_GAME_CLICKED + "=0");
}
function parseGameData(gameData) {
XML.prototype.ignoreWhite = true;
var _local7 = new XML(_root.gameData);
_global.shortGameMode = new String(_local7.childNodes[0].attributes.mode) == "short";
_global.textMappings = new Object();
var _local5 = _local7.childNodes[0].childNodes;
randomSeed = new Number(_local7.childNodes[0].attributes.randomseed).valueOf();
var _local4 = 0;
while (_local4 < _local5.length) {
if (_local5[_local4].nodeName == "text") {
_global.textMappings[_local5[_local4].attributes.id] = new String(_local5[_local4].firstChild.nodeValue);
} else if (_local5[_local4].nodeName == "levelversion") {
levelVersion = new String(_local5[_local4].firstChild.nodeValue);
} else if (_local5[_local4].nodeName == "pscript") {
pscriptXml = _local5[_local4].firstChild;
} else if ((_local5[_local4].nodeName = "layer")) {
var _local6 = new String(_local5[_local4].attributes.name);
layerDatas[_local6] = _local5[_local4].firstChild;
} else {
_root.debugText.text = _root.debugText.text + (("\"" + _local5[_local4].nodeName) + "\"\r");
}
_local4++;
}
}
var hasSentGameEnd = false;
var hasSentGameOver = false;
static var VERSION_NUM = 0;
static var CMD_MOTION_DATA = 578;
static var CMD_LEVEL_VERSION = 330;
static var CMD_END_GAME_CLICKED = 100;
}
Symbol 352 MovieClip [__Packages.king.Collideable] Frame 0
class king.Collideable
{
static var pinball;
var spring, sticky, launch, solid;
function Collideable () {
spring = 0.2;
sticky = 1;
launch = 0;
solid = true;
}
function processCollide(b, n, normal, sideDistance, backSide) {
b.motion.addV(n.x, n.y);
b.motion.scale(sticky);
if ((launch > 0) && (pinball.isBoardAlive())) {
var _local4 = 1 - sideDistance;
if (sideDistance < 0) {
_local4 = 1 + sideDistance;
}
var _local6 = ((-king.XpMath.sin(sideDistance)) * launch) * _local4;
var _local2 = (king.XpMath.cos(sideDistance) * launch) * _local4;
if (backSide) {
_local2 = -_local2;
}
b.motion.add(new king.Vec(normal.x * _local2, normal.y * _local2));
b.motion.add(new king.Vec(normal.y * _local6, (-normal.x) * _local6));
}
}
var lastTick = 0;
}
Symbol 353 MovieClip [__Packages.king.XpMath] Frame 0
class king.XpMath
{
function XpMath () {
}
static function cos(f) {
var _local2 = 0;
var _local1 = ((f > 0) ? (f) : (-f));
if (_local1 >= 14.1371669411541) {
_local2 = int(_local1 * 0.636619772367581);
if ((_local2 & 1) != 0) {
_local2++;
}
_local1 = _local1 - (_local2 * 1.5707963267949 /* Math.PI/2 */);
} else if (_local1 < 1.5707963267949 /* Math.PI/2 */) {
} else if (_local1 < 4.71238898038469) {
_local1 = _local1 - Math.PI;
_local2 = 2;
} else if (_local1 < 7.85398163397448) {
_local1 = _local1 - (Math.PI*2);
} else if (_local1 < 10.9955742875643) {
_local1 = _local1 - 9.42477796076938;
_local2 = 2;
} else {
_local1 = _local1 - 12.5663706143592;
}
var _local3 = _local1 * _local1;
var _local4 = 0.999999953027512 + (_local3 * (-0.499999047777921 + (_local3 * (0.041663573160188 + (_local3 * (-0.0013853629536173 + (_local3 * 2.31524166599385E-5)))))));
return((((_local2 & 2) != 0) ? (-_local4) : (_local4)));
}
static function sin(f) {
f = f - 1.5707963267949 /* Math.PI/2 */;
var _local2 = 0;
var _local1 = ((f > 0) ? (f) : (-f));
if (_local1 >= 14.1371669411541) {
_local2 = int(_local1 * 0.636619772367581);
if ((_local2 & 1) != 0) {
_local2++;
}
_local1 = _local1 - (_local2 * 1.5707963267949 /* Math.PI/2 */);
} else if (_local1 < 1.5707963267949 /* Math.PI/2 */) {
} else if (_local1 < 4.71238898038469) {
_local1 = _local1 - Math.PI;
_local2 = 2;
} else if (_local1 < 7.85398163397448) {
_local1 = _local1 - (Math.PI*2);
} else if (_local1 < 10.9955742875643) {
_local1 = _local1 - 9.42477796076938;
_local2 = 2;
} else {
_local1 = _local1 - 12.5663706143592;
}
var _local3 = _local1 * _local1;
var _local4 = 0.999999953027512 + (_local3 * (-0.499999047777921 + (_local3 * (0.041663573160188 + (_local3 * (-0.0013853629536173 + (_local3 * 2.31524166599385E-5)))))));
return((((_local2 & 2) != 0) ? (-_local4) : (_local4)));
}
}
Symbol 354 MovieClip [__Packages.king.Vec] Frame 0
class king.Vec
{
function Vec (x, y) {
this.x = x;
this.y = y;
}
function lengthSqr() {
return((x * x) + (y * y));
}
function length() {
return(Math.sqrt(lengthSqr()));
}
function normalize() {
scale(1 / length());
}
function dot(v) {
return((x * v.x) + (y * v.y));
}
function add(v) {
x = x + v.x;
y = y + v.y;
}
function addV(xd, yd) {
x = x + xd;
y = y + yd;
}
function scale(f) {
x = x * f;
y = y * f;
}
function distanceSqr(pos) {
var _local2 = pos.x - x;
var _local3 = pos.y - y;
return((_local2 * _local2) + (_local3 * _local3));
}
function distance(pos) {
return(Math.sqrt(distanceSqr(pos)));
}
function set(x, y) {
this.x = x;
this.y = y;
}
var x = 0;
var y = 0;
}
Symbol 355 MovieClip [__Packages.king.Encoder] Frame 0
class king.Encoder
{
var res, lastValue, run;
function Encoder () {
res = "";
lastValue = 0;
run = 0;
}
function append(value) {
if (value == lastValue) {
run++;
if (run == 63) {
run--;
res = res + BASE_64_CHARS.charAt(run);
res = res + BASE_64_CHARS.charAt(value % 64);
res = res + BASE_64_CHARS.charAt(value / 64);
run = 1;
}
} else {
res = res + BASE_64_CHARS.charAt(run);
run = 1;
res = res + BASE_64_CHARS.charAt(value % 64);
res = res + BASE_64_CHARS.charAt(value / 64);
lastValue = value;
}
}
function flush() {
res = res + BASE_64_CHARS.charAt(run);
run = 0;
}
static var BASE_64_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#!";
}
Symbol 356 MovieClip [__Packages.king.Sphere] Frame 0
class king.Sphere extends king.Collideable
{
var hasStickied, n, normal, pos, lastPos, motion, solid, spring;
function Sphere () {
super();
hasStickied = false;
n = new king.Vec(0, 0);
normal = new king.Vec(0, 0);
rx = 1;
ry = 1;
pos = new king.Vec(0, 0);
lastPos = new king.Vec(0, 0);
motion = new king.Vec(0, 0);
}
function isInside(p, t, ball) {
var _local2 = p.x - pos.x;
var _local3 = p.y - pos.y;
var _local5 = (_local2 * _local2) + (_local3 * _local3);
var _local4 = ball.radius;
return(_local5 < (_local4 * _local4));
}
function getCollisionTime(ball, v0, v1) {
if (!solid) {
return(undefined);
}
var _local3 = ball.pos.x - pos.x;
var _local2 = ball.pos.y - pos.y;
var _local4 = ball.motion.x - motion.x;
var _local5 = ball.motion.y - motion.y;
_local3 = _local3 * rx;
_local2 = _local2 * ry;
_local4 = _local4 * rx;
_local5 = _local5 * ry;
if (((_local3 * _local4) + (_local2 * _local5)) >= 0) {
return(999);
}
var _local9 = ball.radius + radius;
var _local10 = (_local4 * _local4) + (_local5 * _local5);
var _local6 = ((_local4 * _local3) + (_local5 * _local2)) * 2;
var _local15 = ((_local3 * _local3) + (_local2 * _local2)) - (_local9 * _local9);
var _local14 = (_local6 * _local6) - ((4 * _local10) * _local15);
if (_local14 >= 0) {
var _local11 = Math.sqrt(_local14);
var _local13 = _local10 * 2;
var _local8 = ((-_local6) - _local11) / _local13;
var _local12 = ((-_local6) + _local11) / _local13;
if (_local12 < _local8) {
_local8 = _local12;
}
return(_local8);
}
return(999);
}
function collide(b, t) {
if (!solid) {
return(undefined);
}
var _local5 = pos.x - b.pos.x;
var _local4 = pos.y - b.pos.y;
_local5 = _local5 * rx;
_local4 = _local4 * ry;
n.set(_local5, _local4);
n.normalize();
normal.set(-n.x, -n.y);
var _local7 = motion.dot(n);
var _local3 = b.motion.dot(n);
if (_local3 > 3) {
king.Sounds.get("collideSound" + int(Math.random() * 4)).play();
}
var _local8 = (_local7 - _local3) + ((_local7 - _local3) * spring);
n.scale(_local8);
super.processCollide(b, n, normal, 0, false);
}
static var NO_COLLISION = 99999;
var radius = 0;
var rx = 1;
var ry = 1;
var mass = 100000;
var fixedPos = true;
}
Symbol 357 MovieClip [__Packages.king.Sounds] Frame 0
class king.Sounds
{
static var globalSound;
var soundMc, sound;
function Sounds (ownerMc, soundName) {
var _local2 = ownerMc.getNextHighestDepth();
soundMc = ownerMc.createEmptyMovieClip("soundMcc" + _local2, _local2);
sound = new Sound(soundMc);
sound.attachSound(soundName);
}
static function get(resourceName) {
var _local2 = soundMap[resourceName];
if ((_local2 == undefined) || (_local2 == null)) {
_local2 = new king.Sounds(_root, resourceName);
soundMap[resourceName] = _local2;
}
return(_local2);
}
static function toggleSound() {
if (globalSound == undefined) {
globalSound = new Sound(_root);
}
soundOn = !soundOn;
globalSound.setVolume((soundOn ? 100 : 0));
}
function setVolume(volume) {
sound.setVolume(volume);
}
function playLooping() {
if (noSounds) {
return(undefined);
}
sound.start(0, 9999999);
}
function stopAndPlayOffs(offs) {
if (noSounds) {
return(undefined);
}
sound.stop();
sound.start(offs, 0);
}
function stopAndPlay() {
if (noSounds) {
return(undefined);
}
sound.stop();
sound.start(0);
}
function playOffs(offs) {
if (noSounds) {
return(undefined);
}
sound.start(offs, 0);
}
function playOffsVolPan(offs, vol, pan) {
if (noSounds) {
return(undefined);
}
sound.start(offs, 0);
sound.setVolume(vol);
sound.setPan(pan);
}
function play() {
if (noSounds) {
return(undefined);
}
sound.start(0);
}
function stop() {
sound.stop();
}
static var soundMap = new Object();
static var soundOn = true;
static var noSounds = false;
}
Symbol 358 MovieClip [__Packages.king.Pscript] Frame 0
class king.Pscript
{
var root, templights, blinklights, schedule, toSchedule, scripts, step, _levelDataXml, variables, random;
function Pscript (root) {
this.root = root;
templights = new Object();
blinklights = new Object();
schedule = new Object();
toSchedule = new Object();
scripts = new Object();
step = 0;
}
function tick() {
step++;
if ((step % 8) == 0) {
var _local4 = (step % 16) == 0;
for (var _local5 in blinklights) {
root.bgMc[_local5]._visible = _local4;
root.lager1[_local5]._visible = _local4;
root.lager2[_local5]._visible = _local4;
}
}
var _local2 = new Array();
for (var _local5 in templights) {
templights[_local5]--;
if (templights[_local5] == 0) {
_local2.push(_local5);
root.bgMc[_local5]._visible = false;
root.lager1[_local5]._visible = false;
root.lager2[_local5]._visible = false;
}
}
var _local3 = 0;
while (_local3 < _local2.length) {
delete templights[_local2[_local3]];
_local3++;
}
for (var _local5 in toSchedule) {
schedule[_local5] = toSchedule[_local5];
}
toSchedule = new Object();
_local2 = new Array();
for (var _local5 in schedule) {
schedule[_local5]--;
if (schedule[_local5] == 0) {
_local2.push(_local5);
runScript(_local5);
}
}
_local3 = 0;
while (_local3 < _local2.length) {
delete schedule[_local2[_local3]];
_local3++;
}
}
function setScript(scriptXml) {
_levelDataXml = scriptXml;
loaded();
variables = new Object();
}
static function lTrim(s) {
var _local1 = 0;
while ((((s.charCodeAt(_local1) == SPACE) || (s.charCodeAt(_local1) == CARRIAGE)) || (s.charCodeAt(_local1) == LINEFEED)) || (s.charCodeAt(_local1) == TAB)) {
_local1++;
}
return(s.substring(_local1, s.length));
}
static function rTrim(s) {
var _local1 = s.length - 1;
while ((((s.charCodeAt(_local1) == SPACE) || (s.charCodeAt(_local1) == CARRIAGE)) || (s.charCodeAt(_local1) == LINEFEED)) || (s.charCodeAt(_local1) == TAB)) {
_local1--;
}
return(s.substring(0, _local1 + 1));
}
static function trim(s) {
return(lTrim(rTrim(s)));
}
function loaded() {
var _local9 = _levelDataXml.childNodes;
var _local8 = 0;
while (_local8 < _local9.length) {
var _local7 = _local9[_local8];
if (_local7.nodeName == "script") {
var _local5 = trim(new String(_local7.attributes.name));
var _local6 = _local7.firstChild.nodeValue;
_local6 = _local6.split("\r").join(newline);
var _local4 = _local6.split(newline);
scripts[_local5] = new Array();
var _local2 = 0;
while (_local2 < _local4.length) {
var _local3 = trim(_local4[_local2]);
if (_local3.length > 0) {
scripts[_local5].push(_local3.split(" "));
}
_local2++;
}
}
_local8++;
}
runScript("init");
}
function setVar(variable, value) {
variables[variable] = value;
}
function getValue(val) {
var _local2 = val.charCodeAt(0);
if (((_local2 >= 48) && (_local2 <= 57)) || (_local2 == 45)) {
return(parseInt(val));
}
var _local3 = variables[val];
if (_local3 != undefined) {
return(_local3);
}
return(0);
}
function runScript(scriptName) {
var _local7 = scripts[scriptName];
var _local8 = 0;
while (_local8 < _local7.length) {
var _local3 = _local7[_local8];
var _local5;
_local8++;
var _local4 = _local3[0];
if (_local4 == "set") {
variables[_local3[1]] = getValue(_local3[2]);
} else if (_local4 == "rand") {
var _local10 = getValue(_local3[2]);
var _local11 = getValue(_local3[3]);
variables[_local3[1]] = random.nextInt((_local11 - _local10) + 1) + _local10;
} else if (_local4 == "add") {
variables[_local3[1]] = variables[_local3[1]] + getValue(_local3[2]);
} else if (_local4 == "sub") {
variables[_local3[1]] = variables[_local3[1]] - getValue(_local3[2]);
} else if (_local4 == "mul") {
variables[_local3[1]] = variables[_local3[1]] * getValue(_local3[2]);
} else if (_local4 == "div") {
variables[_local3[1]] = variables[_local3[1]] / getValue(_local3[2]);
} else if (_local4 == "mod") {
variables[_local3[1]] = variables[_local3[1]] % getValue(_local3[2]);
} else if (_local4 == "goto") {
_local5 = _local3[1];
} else if (_local4 == "run") {
runScript(_local3[1]);
} else if (_local4 == "schedule") {
toSchedule[_local3[1]] = getValue(_local3[2]);
} else if (_local4 == "if") {
if (getValue(_local3[1]) != 0) {
_local5 = _local3[2];
}
} else if ((_local4 == "ifg") || (_local4 == "ifgr")) {
if (getValue(_local3[1]) > getValue(_local3[2])) {
_local5 = _local3[3];
}
} else if (_local4 == "ifl") {
if (getValue(_local3[1]) < getValue(_local3[2])) {
_local5 = _local3[3];
}
} else if (_local4 == "ifge") {
if (getValue(_local3[1]) >= getValue(_local3[2])) {
_local5 = _local3[3];
}
} else if (_local4 == "ifle") {
if (getValue(_local3[1]) <= getValue(_local3[2])) {
_local5 = _local3[3];
}
} else if ((_local4 == "ife") || (_local4 == "ifeq")) {
if (getValue(_local3[1]) == getValue(_local3[2])) {
_local5 = _local3[3];
}
} else if (_local4 == "ifne") {
if (getValue(_local3[1]) != getValue(_local3[2])) {
_local5 = _local3[3];
}
} else if (_local4 == "blink") {
if (getValue(_local3[2]) > 0) {
blinklights[_local3[1]] = 1;
} else {
delete blinklights[_local3[1]];
}
} else if (_local4 == "blinknum") {
if (getValue(_local3[3]) > 0) {
blinklights[_local3[1] + getValue(_local3[2])] = 1;
} else {
delete blinklights[_local3[1] + getValue(_local3[2])];
}
} else if (_local4 == "blinkrange") {
var _local6 = getValue(_local3[2]);
while (_local6 <= getValue(_local3[3])) {
if (getValue(_local3[4]) > 0) {
blinklights[_local3[1] + _local6] = 1;
} else {
delete blinklights[_local3[1] + _local6];
}
_local6++;
}
} else if (_local4 == "light") {
root.bgMc[_local3[1]]._visible = getValue(_local3[2]) > 0;
root.lager1[_local3[1]]._visible = getValue(_local3[2]) > 0;
root.lager2[_local3[1]]._visible = getValue(_local3[2]) > 0;
} else if (_local4 == "templight") {
templights[_local3[1]] = getValue(_local3[2]);
root.bgMc[_local3[1]]._visible = true;
root.lager1[_local3[1]]._visible = true;
root.lager2[_local3[1]]._visible = true;
} else if (_local4 == "lightnum") {
root.bgMc[_local3[1] + getValue(_local3[2])]._visible = getValue(_local3[3]) > 0;
root.lager1[_local3[1] + getValue(_local3[2])]._visible = getValue(_local3[3]) > 0;
root.lager2[_local3[1] + getValue(_local3[2])]._visible = getValue(_local3[3]) > 0;
} else if (_local4 == "lightrange") {
var _local6 = getValue(_local3[2]);
while (_local6 <= getValue(_local3[3])) {
root.bgMc[_local3[1] + _local6]._visible = getValue(_local3[4]) > 0;
root.lager1[_local3[1] + _local6]._visible = getValue(_local3[4]) > 0;
root.lager2[_local3[1] + _local6]._visible = getValue(_local3[4]) > 0;
_local6++;
}
} else if (_local4 == "lock") {
root.lockBall(_local3[1]);
} else if (_local4 == "addtime") {
root.addTime(getValue(_local3[1]));
} else if (_local4 == "shorgameover") {
root.shortGameOver();
} else if (_local4 == "launch") {
var _local13 = getValue(_local3[1]);
var _local12 = getValue(_local3[2]);
root.launchBall(_local13, _local12);
} else if (_local4 == "setlayer") {
root.switchLayer(_local3[1]);
} else if (_local4 == "trace") {
var _local6 = 1;
while (_local6 < _local3.length) {
_root.debugText.text = _root.debugText.text + (_local3[_local6] + " ");
_local6++;
}
_root.debugText.text = _root.debugText.text + "\r";
} else if (_local4 == "spin") {
root.spin();
} else if (_local4 == "spawnball") {
root.newBall();
} else if (_local4 == "ballglow") {
root.setBallGlow(_local3[1] == "1");
} else if (_local4 == "refreshlayer") {
root.refreshlayer();
} else if (_local4 == "sound") {
king.Sounds.get(_local3[1]).play();
} else if (_local4 == "stopsound") {
king.Sounds.get(_local3[1]).stop();
} else if (_local4 == "showsign") {
root.showSign(getValue(_local3[1]));
} else if (_local4 == "minigame") {
root.playMiniGame(getValue(_local3[1]));
}
if (_local5 != undefined) {
_local8 = _local7.length;
var _local9 = _local5 + ":";
var _local6 = 0;
while (_local6 < _local7.length) {
if (_local7[_local6][0] == _local9) {
_local8 = _local6;
break;
}
_local6++;
}
}
}
}
static var TAB = 9;
static var LINEFEED = 10;
static var CARRIAGE = 13;
static var SPACE = 32;
}
Symbol 359 MovieClip [__Packages.king.Portal] Frame 0
class king.Portal extends king.Collideable
{
var pinball, targetLayer, sphere, v0, v1, angle, length, normal, c, c1;
function Portal (pinball, x0, y0, x1, y1) {
super();
this.pinball = pinball;
targetLayer = "NO TARGET";
lastTick = 0;
sphere = new king.Sphere();
v0 = new king.Vec(x0, y0);
v1 = new king.Vec(x1, y1);
angle = new king.Vec(x1 - x0, y1 - y0);
length = angle.length();
angle.normalize();
normal = new king.Vec(angle.y, -angle.x);
c = normal.dot(v0);
c1 = angle.dot(v0);
}
function getCollisionTime(ball, v0, v1) {
var _local3 = ((normal.x * v0.x) + (normal.y * v0.y)) - c;
var _local5 = ((normal.x * v1.x) + (normal.y * v1.y)) - c;
if (_local3 > 0) {
if (_local5 > 0) {
return(999);
}
} else if (_local5 < 0) {
return(999);
}
var _local2 = _local3 - _local5;
if (_local2 != 0) {
_local2 = _local3 / (_local3 - _local5);
} else {
_local2 = 0.5;
}
var _local9 = ((v1.x - v0.x) * _local2) + v0.x;
var _local8 = ((v1.y - v0.y) * _local2) + v0.y;
var _local6 = ((angle.x * _local9) + (angle.y * _local8)) - c1;
if ((_local6 < 0) || (_local6 > length)) {
return(999);
}
return(_local2);
}
function collide(b, t) {
if (targetLayer != "lager1") {
king.Sounds.get("rampSound").playLooping();
} else {
king.Sounds.get("rampSound").stop();
}
pinball.switchLayer(targetLayer);
}
function isInside(p, t, ball) {
return(false);
}
function pushOut(p, t, ball) {
return(undefined);
}
var lastTick = 0;
static var layerChange = 0;
}
Symbol 360 MovieClip [__Packages.king.Rollover] Frame 0
class king.Rollover extends king.Collideable
{
var pinball, targetLayer, sphere, v0, v1, angle, length, normal, c, c1;
function Rollover (pinball, x0, y0, x1, y1) {
super();
this.pinball = pinball;
targetLayer = "NO TARGET";
lastTick = 0;
skipTick = 0;
sphere = new king.Sphere();
v0 = new king.Vec(x0, y0);
v1 = new king.Vec(x1, y1);
angle = new king.Vec(x1 - x0, y1 - y0);
length = angle.length();
angle.normalize();
normal = new king.Vec(angle.y, -angle.x);
c = normal.dot(v0);
c1 = angle.dot(v0);
}
function getCollisionTime(ball, v0, v1, passedTime, currentCollideTick) {
if (currentCollideTick == skipTick) {
return(undefined);
}
lastTick = currentCollideTick;
var _local3 = ((normal.x * v0.x) + (normal.y * v0.y)) - c;
var _local5 = ((normal.x * v1.x) + (normal.y * v1.y)) - c;
if (_local3 > 0) {
if (_local5 > 0) {
return(999);
}
} else if (_local5 < 0) {
return(999);
}
var _local2 = _local3 - _local5;
if (_local2 != 0) {
_local2 = _local3 / (_local3 - _local5);
} else {
_local2 = 0.5;
}
var _local9 = ((v1.x - v0.x) * _local2) + v0.x;
var _local8 = ((v1.y - v0.y) * _local2) + v0.y;
var _local6 = ((angle.x * _local9) + (angle.y * _local8)) - c1;
if ((_local6 < 0) || (_local6 > length)) {
return(999);
}
return(_local2);
}
function collide(b, t) {
skipTick = lastTick + 1;
pinball.rollOver(targetLayer);
}
function isInside(p, t, ball) {
return(false);
}
function pushOut(p, t, ball) {
return(undefined);
}
var skipTick = 0;
var lastTick = 0;
}
Symbol 361 MovieClip [__Packages.king.Wall] Frame 0
class king.Wall extends king.Collideable
{
var wid, sphere, v0, v1, angle, length, normal, c, c1, solid, spring;
function Wall (x0, y0, x1, y1) {
super();
wid = idCounter;
idCounter++;
lastTick = 0;
sphere = new king.Sphere();
v0 = new king.Vec(x0, y0);
v1 = new king.Vec(x1, y1);
angle = new king.Vec(x1 - x0, y1 - y0);
length = angle.length();
angle.normalize();
normal = new king.Vec(angle.y, -angle.x);
c = normal.dot(v0);
c1 = angle.dot(v0);
}
function getCollisionTime(ball, v0, v1) {
if (!solid) {
return(999);
}
var _local2 = ((normal.x * v0.x) + (normal.y * v0.y)) - c;
var _local3 = ((normal.x * v1.x) + (normal.y * v1.y)) - c;
if (_local2 > 0) {
if (_local3 > _local2) {
return(999);
}
_local2 = _local2 - ball.radius;
_local3 = _local3 - ball.radius;
if (_local3 > 0) {
return(999);
}
} else {
if (_local3 < _local2) {
return(999);
}
_local2 = _local2 + ball.radius;
_local3 = _local3 + ball.radius;
if (_local3 < 0) {
return(999);
}
}
var _local4 = _local2 - _local3;
if (_local4 != 0) {
_local4 = _local2 / _local4;
} else {
_local4 = 0.5;
}
var _local10 = ((v1.x - v0.x) * _local4) + v0.x;
var _local9 = ((v1.y - v0.y) * _local4) + v0.y;
var _local7 = ((angle.x * _local10) + (angle.y * _local9)) - c1;
if ((_local7 < 0) || (_local7 > length)) {
return(999);
}
return(_local4);
}
function collide(b, t) {
if (!solid) {
return(undefined);
}
var _local4 = new king.Vec(normal.x, normal.y);
var _local6 = 0;
var _local5 = b.motion.dot(_local4);
if (_local5 < -3) {
king.Sounds.get("collideSound" + int(Math.random() * 4)).play();
}
var _local8 = (_local6 - _local5) + ((_local6 - _local5) * spring);
_local4.scale(_local8);
var _local7 = ((((angle.x * b.pos.x) + (angle.y * b.pos.y)) - c1) / length) - 0.5;
var _local9 = (((normal.x * b.pos.x) + (normal.y * b.pos.y)) - c) < 0;
super.processCollide(b, _local4, normal, _local7, _local9);
}
function isInside(p, t, ball) {
var _local6 = p.x;
var _local5 = p.y;
var _local3 = ball.radius;
var _local2 = ((normal.x * _local6) + (normal.y * _local5)) - c;
if ((_local2 > _local3) || (_local2 < (-_local3))) {
return(false);
}
var _local4 = ((angle.x * _local6) + (angle.y * _local5)) - c1;
if ((_local4 < 0) || (_local4 > length)) {
return(false);
}
return(true);
}
function pushOut(p, t, ball) {
var _local6 = p.x;
var _local5 = p.y;
var _local2 = ((normal.x * _local6) + (normal.y * _local5)) - c;
if ((_local2 > ball.radius) || (_local2 < (-ball.radius))) {
return(undefined);
}
var _local4 = ((angle.x * _local6) + (angle.y * _local5)) - c1;
if ((_local4 < 0) || (_local4 > length)) {
return(undefined);
}
if (_local2 > 0) {
var _local7 = ball.radius - _local2;
ball.impulse.addV(normal.x * _local7, normal.y * _local7);
} else {
var _local7 = (-ball.radius) - _local2;
ball.impulse.addV(normal.x * _local7, normal.y * _local7);
}
}
function draw(mc) {
mc.moveTo(v0.x, v0.y);
mc.lineTo(v1.x, v1.y);
}
var lastTick = 0;
static var idCounter = 0;
}
Symbol 362 MovieClip [__Packages.king.LevelData] Frame 0
class king.LevelData
{
var layerXmls, wallReceiver, _levelDataXml;
function LevelData () {
}
function parseLevelData(wallReceiver, communicator) {
layerXmls = new Array();
this.wallReceiver = wallReceiver;
loadLevel(communicator, "lager1");
loadLevel(communicator, "lager1", "lager1_1");
loadLevel(communicator, "hatch", "lager1_1");
loadLevel(communicator, "ramp1");
loadLevel(communicator, "ramp2");
var _local3 = this;
}
function loadLevel(communicator, svgFileName, targetLayer) {
if (targetLayer == undefined) {
targetLayer = svgFileName;
}
_levelDataXml = communicator.layerDatas[svgFileName];
loaded(targetLayer, true);
}
function loaded(layerName, success) {
wallReceiver.setLayer(layerName);
addWalls(_levelDataXml.childNodes);
}
function addWalls(cn) {
var _local2 = 0;
while (_local2 < cn.length) {
var _local7 = 0;
var _local6 = 0;
var _local8 = 0;
var _local16 = 0;
var _local18 = 0;
var _local20 = 0;
var _local4;
if (cn[_local2].attributes.id != undefined) {
_local4 = cn[_local2].attributes.id;
_local4 = _local4.split("_")[0];
}
if ((cn[_local2].attributes.fill != undefined) && (cn[_local2].attributes.fill != "none")) {
var _local30 = new String(cn[_local2].attributes.fill).substr(-6, 6);
var _local24 = parseInt(_local30, 16);
_local7 = (_local24 >> 16) & 255;
_local6 = (_local24 >> 8) & 255;
_local8 = _local24 & 255;
}
if ((cn[_local2].attributes.stroke != undefined) && (cn[_local2].attributes.stroke != "none")) {
var _local30 = new String(cn[_local2].attributes.stroke).substr(-6, 6);
var _local24 = parseInt(_local30, 16);
_local16 = (_local24 >> 16) & 255;
_local18 = (_local24 >> 8) & 255;
_local20 = _local24 & 255;
}
if (cn[_local2].nodeName == "g") {
addWalls(cn[_local2].childNodes);
}
if (cn[_local2].nodeName == "circle") {
var _local5 = parseDouble(cn[_local2].attributes.cx);
var _local11 = parseDouble(cn[_local2].attributes.cy);
var _local25 = parseDouble(cn[_local2].attributes.r);
wallReceiver.newCircle(_local7, _local6, _local8, _local5, _local11, _local25, _local25, _local4);
}
if (cn[_local2].nodeName == "ellipse") {
var _local5 = parseDouble(cn[_local2].attributes.cx);
var _local11 = parseDouble(cn[_local2].attributes.cy);
var _local32 = parseDouble(cn[_local2].attributes.rx);
var _local31 = parseDouble(cn[_local2].attributes.ry);
wallReceiver.newCircle(_local7, _local6, _local8, _local5, _local11, _local32, _local31, _local4);
}
if (cn[_local2].nodeName == "rect") {
var _local5 = parseDouble(cn[_local2].attributes.x);
var _local11 = parseDouble(cn[_local2].attributes.y);
if (isNaN(_local5)) {
_local5 = 0;
}
if (isNaN(_local11)) {
_local11 = 0;
}
var _local21 = parseDouble(cn[_local2].attributes.width);
var _local19 = parseDouble(cn[_local2].attributes.height);
wallReceiver.newArea(_local7, _local6, _local8);
wallReceiver.addWall(_local5, _local11, _local5 + _local21, _local11, _local4);
wallReceiver.addWall(_local5 + _local21, _local11, _local5 + _local21, _local11 + _local19, _local4);
wallReceiver.addWall(_local5 + _local21, _local11 + _local19, _local5, _local11 + _local19, _local4);
wallReceiver.addWall(_local5, _local11 + _local19, _local5, _local11, _local4);
wallReceiver.endArea();
}
if (cn[_local2].nodeName == "line") {
var _local29 = parseDouble(cn[_local2].attributes.x1);
var _local27 = parseDouble(cn[_local2].attributes.y1);
var _local28 = parseDouble(cn[_local2].attributes.x2);
var _local26 = parseDouble(cn[_local2].attributes.y2);
wallReceiver.newArea(_local7, _local6, _local8);
wallReceiver.addWall3(_local16, _local18, _local20, _local29, _local27, _local28, _local26, true, _local4);
wallReceiver.endArea();
}
if (cn[_local2].nodeName == "polyline") {
wallReceiver.newArea(_local7, _local6, _local8);
var _local33 = cn[_local2].attributes.points;
var _local9 = _local33.split(" ");
var _local12 = -999;
var _local15 = -999;
var _local13 = -999;
var _local23 = -999;
var _local22 = true;
var _local10 = 0;
while (_local10 < _local9.length) {
var _local14 = _local9[_local10].split(",");
var _local5 = parseDouble(_local14[0]);
var _local11 = parseDouble(_local14[1]);
if ((_local13 == -999) || (isNaN(_local13))) {
_local13 = _local5;
_local23 = _local11;
}
if (!isNaN(_local5)) {
if (_local12 != -999) {
if (wallReceiver.addWall3(_local16, _local18, _local20, _local12, _local15, _local5, _local11, _local22, _local4)) {
_local22 = false;
}
}
_local12 = _local5;
_local15 = _local11;
}
_local10++;
}
wallReceiver.endArea();
}
if (cn[_local2].nodeName == "polygon") {
var _local33 = cn[_local2].attributes.points;
var _local9 = _local33.split(" ");
if ((((_local7 << 16) | (_local6 << 8)) | _local8) == 16711935) {
var _local17 = new king.Flipper(wallReceiver);
var _local10 = 0;
while (_local10 < _local9.length) {
var _local14 = _local9[_local10].split(",");
var _local5 = parseDouble(_local14[0]);
var _local11 = parseDouble(_local14[1]);
if (!isNaN(_local5)) {
_local17.addCoords(_local5, _local11);
}
_local10++;
}
_local17.compile();
wallReceiver.addFlipper(_local17);
} else {
wallReceiver.newArea(_local7, _local6, _local8);
var _local12 = -999;
var _local15 = -999;
var _local13 = -999;
var _local23 = -999;
var _local10 = 0;
while (_local10 < _local9.length) {
var _local14 = _local9[_local10].split(",");
var _local5 = parseDouble(_local14[0]);
var _local11 = parseDouble(_local14[1]);
if ((_local13 == -999) || (isNaN(_local13))) {
_local13 = _local5;
_local23 = _local11;
}
if (!isNaN(_local5)) {
if (_local12 != -999) {
wallReceiver.addWall(_local12, _local15, _local5, _local11, _local4);
}
_local12 = _local5;
_local15 = _local11;
}
_local10++;
}
wallReceiver.addWall(_local12, _local15, _local13, _local23, _local4);
wallReceiver.endArea();
}
}
_local2++;
}
}
function parseDouble(str) {
var _local5 = 0;
var _local7 = false;
var _local9 = false;
var _local8 = 1;
if (str == undefined) {
return(Number.NaN);
}
str = king.Pscript.trim(str);
if (str == "") {
return(Number.NaN);
}
var _local3 = 0;
while (_local3 < str.length) {
var _local2 = str.charAt(_local3);
if (_local2 == "-") {
_local9 = true;
} else if (_local2 == ".") {
_local7 = true;
} else {
var _local4 = parseInt(_local2);
if (!_local7) {
_local5 = (_local5 * 10) + _local4;
} else {
_local8 = _local8 * 0.1;
_local5 = _local5 + (_local4 * _local8);
}
}
_local3++;
}
if (_local9) {
_local5 = -_local5;
}
var _local10 = _local5 - parseFloat(str);
if (_local10 != 0) {
_root.debugText.text = _root.debugText.text + (((str + " -> ") + _local10) + "\r");
}
return(_local5);
}
}
Symbol 363 MovieClip [__Packages.king.Flipper] Frame 0
class king.Flipper
{
var pinball, xCoords, yCoords, lastRot, lastlastRot, rot, rotA, isPressed, corners, collideables, currentRot, oldUpperNormal, upperNormal, mc, xPos, yPos, radius, facing;
function Flipper (pinball) {
this.pinball = pinball;
xCoords = new Array();
yCoords = new Array();
lastRot = -9999;
lastlastRot = 0;
rot = 0;
rotA = 0;
isPressed = false;
corners = new Array();
collideables = new Array();
currentRot = 0;
oldUpperNormal = new king.Vec();
upperNormal = new king.Vec();
}
function setMovieClip(mc) {
this.mc = mc;
var _local3 = mc.attachMovie("Flipper", "flipper", 100);
var _local2 = xCoords.length - 1;
var _local4 = corners[_local2].x - corners[0].x;
var _local5 = corners[_local2].y - corners[0].y;
var _local6 = (Math.atan2(_local5, _local4) * 180) / Math.PI;
_local3._rotation = _local6;
}
function drawCircle(mc, x, y, rx, ry) {
}
function render(alpha) {
var _local2 = lastRot + ((rot - lastRot) * alpha);
if (currentRot != _local2) {
mc._rotation = _local2;
currentRot = _local2;
}
}
function addCoords(x, y) {
xCoords.push(x);
yCoords.push(y);
}
function compile() {
var _local14 = -9;
var _local13 = 999999999 /* 0x3B9AC9FF */;
var _local4 = 0;
while (_local4 < xCoords.length) {
var _local5 = (_local4 + 2) % xCoords.length;
var _local7 = xCoords[_local5] - xCoords[_local4];
var _local8 = yCoords[_local5] - yCoords[_local4];
var _local6 = (_local7 * _local7) + (_local8 * _local8);
if (_local6 < _local13) {
_local13 = _local6;
_local14 = (_local4 + 1) % xCoords.length;
}
_local4++;
}
xPos = xCoords[_local14];
yPos = yCoords[_local14];
var _local12 = 0;
var _local11 = 0;
radius = 0;
var _local15 = 0;
_local4 = 0;
while (_local4 < xCoords.length) {
xCoords[_local4] = xCoords[_local4] - xPos;
yCoords[_local4] = yCoords[_local4] - yPos;
if (xCoords[_local4] < _local12) {
_local12 = xCoords[_local4];
}
if (xCoords[_local4] > _local11) {
_local11 = xCoords[_local4];
}
var _local6 = (xCoords[_local4] * xCoords[_local4]) + (yCoords[_local4] * yCoords[_local4]);
if (_local6 > radius) {
radius = _local6;
_local15 = _local4;
}
_local4++;
}
var _local16 = xCoords[_local15];
var _local17 = yCoords[_local15];
radius = Math.sqrt(radius) + 8;
facing = 1;
if ((-_local12) > _local11) {
facing = -1;
}
radius = radius + 3;
xCoords = new Array();
yCoords = new Array();
corners = new Array();
var _local3 = 10;
_local4 = 0;
while (_local4 <= _local3) {
var _local10 = (((_local16 * (radius - 4)) / radius) * _local4) / _local3;
var _local9 = (((_local17 * (radius - 4)) / radius) * _local4) / _local3;
xCoords.push(_local10);
yCoords.push(_local9);
var _local2 = new king.MoveableSphere(this, xCoords[_local4], yCoords[_local4]);
if ((_local4 != 0) && (_local4 != _local3)) {
_local2.sideways = ((_local4 * 2) / _local3) - 0.8;
_local2.upperNormal = upperNormal;
_local2.oldUpperNormal = oldUpperNormal;
}
_local2.radius = 6 - ((_local4 * 2) / _local3);
corners.push(_local2);
_local4++;
}
_local4 = 0;
while (_local4 < corners.length) {
collideables.push(corners[_local4]);
_local4++;
}
}
function tick() {
var _local12 = (isPressed ? (UP_ANGLE * facing) : 0);
rotA = _local12 - rot;
if (rotA < (-MAX_TURN)) {
rotA = -MAX_TURN;
}
if (rotA > MAX_TURN) {
rotA = MAX_TURN;
}
if ((lastlastRot != lastRot) || (lastRot != rot)) {
var _local8 = rot + rotA;
var _local7 = king.XpMath.sin((_local8 * Math.PI) / 180);
var _local6 = king.XpMath.cos((_local8 * Math.PI) / 180);
if (king.MoveableSphere.debugText) {
_root.debugText.text = _root.debugText.text + "---\r";
_root.debugText.text = _root.debugText.text + (king.FloatEncoder.encodeBits(Math.PI) + "\r");
_root.debugText.text = _root.debugText.text + (king.FloatEncoder.encodeBits((_local8 * Math.PI) / 180) + "\r");
_root.debugText.text = _root.debugText.text + (king.FloatEncoder.encodeBits(_local7) + "\r");
_root.debugText.text = _root.debugText.text + (king.FloatEncoder.encodeBits(_local6) + "\r");
}
var _local3 = 0;
while (_local3 < xCoords.length) {
var _local5 = ((xCoords[_local3] * _local6) - (yCoords[_local3] * _local7)) + xPos;
var _local4 = ((yCoords[_local3] * _local6) + (xCoords[_local3] * _local7)) + yPos;
corners[_local3].tick(_local5, _local4);
_local3++;
}
var _local9 = xCoords.length - 1;
var _local10 = corners[_local9].x - corners[0].x;
var _local11 = corners[_local9].y - corners[0].y;
oldUpperNormal.set(upperNormal.x, upperNormal.y);
upperNormal.set(-_local11, _local10);
upperNormal.normalize();
}
}
function addTime(t) {
lastlastRot = lastRot;
lastRot = rot;
rot = rot + (rotA * t);
}
function collided() {
var _local3 = (isPressed ? (UP_ANGLE * facing) : 0);
var _local2 = _local3 - rot;
if ((_local2 < -0.5) || (_local2 > 0.5)) {
pinball.flipperCollided();
}
}
var MAX_TURN = 20;
var UP_ANGLE = -60;
}
Symbol 364 MovieClip [__Packages.king.MoveableSphere] Frame 0
class king.MoveableSphere extends king.Collideable
{
var sideways, upperNormal, lowerNormal, n, normal, motion, flipper, sticky, spring, xd, yd, xold, x, yold, y, pos, oldUpperNormal;
function MoveableSphere (flipper, x, y) {
super();
sideways = 0;
upperNormal = undefined;
lowerNormal = undefined;
n = new king.Vec(0, 0);
normal = new king.Vec(0, 0);
motion = new king.Vec(0, 0);
this.flipper = flipper;
sticky = 0.7;
spring = 0.3 * sticky;
xd = 0;
yd = 0;
xold = (this.x = x);
yold = (this.y = y);
pos = new king.Vec(x, y);
}
function tick(_xx, _yy) {
xd = _xx - x;
yd = _yy - y;
xold = x;
yold = y;
x = _xx;
y = _yy;
pos.set(x, y);
}
function mTick(_xx, _yy) {
x = _xx;
y = _yy;
pos.set(x, y);
}
function fakeTick(_xx, _yy) {
pos.set(_xx, _yy);
}
function setupSphereTime(t) {
pos.set(xold + (xd * t), yold + (yd * t));
}
function isInside(p, t, b) {
var _local3 = p.x - (xold + (xd * t));
var _local4 = p.y - (yold + (yd * t));
var _local5 = (_local3 * _local3) + (_local4 * _local4);
var _local2 = b.radius + radius;
_local2 = _local2 * 0.7;
if (_local5 < (_local2 * _local2)) {
return(true);
}
return(false);
}
function getCollisionTime(ball, v0, v1, timeOffs) {
if ((timeOffs > 1) || (timeOffs < 0)) {
return(undefined);
}
var _local9 = timeOffs;
pos.set(xold + (xd * _local9), yold + (yd * _local9));
var _local3 = ball.pos.x - pos.x;
var _local2 = ball.pos.y - pos.y;
var _local5 = ball.motion.x - xd;
var _local6 = ball.motion.y - yd;
if (((_local3 * _local5) + (_local2 * _local6)) >= 0) {
return(999);
}
var _local10 = ball.radius + radius;
var _local11 = (_local5 * _local5) + (_local6 * _local6);
var _local4 = ((_local5 * _local3) + (_local6 * _local2)) * 2;
var _local17 = ((_local3 * _local3) + (_local2 * _local2)) - (_local10 * _local10);
var _local15 = (_local4 * _local4) - ((4 * _local11) * _local17);
if (_local15 > 0) {
var _local12 = Math.sqrt(_local15);
var _local14 = _local11 * 2;
var _local8 = ((-_local4) - _local12) / _local14;
var _local13 = ((-_local4) + _local12) / _local14;
if (_local13 < _local8) {
_local8 = _local13;
}
return(_local8);
}
return(999);
}
function collide(b, t) {
pos.set(xold + (xd * t), yold + (yd * t));
var _local12 = pos.x - b.pos.x;
var _local11 = pos.y - b.pos.y;
var _local15 = upperNormal != undefined;
if (_local15) {
var _local20 = oldUpperNormal.x + ((upperNormal.x - oldUpperNormal.x) * t);
var _local18 = oldUpperNormal.y + ((upperNormal.y - oldUpperNormal.y) * t);
n.set(_local20, _local18);
} else {
n.set(-_local12, -_local11);
}
n.normalize();
var _local13 = 1;
var _local4 = (_local12 * n.x) + (_local11 * n.y);
var _local16 = _local4 < 0;
motion.set(xd * _local13, yd * _local13);
var _local14 = motion.dot(n);
var _local10 = b.motion.dot(n);
if (_local10 > 3) {
king.Sounds.get("collideSound" + int(Math.random() * 4)).play();
}
if (!b.hasStickied) {
b.motion.scale(sticky);
b.hasStickied = true;
}
var _local5 = 0.1;
if (_local16 || (!_local15)) {
b.motion.addV(n.x * _local5, n.y * _local5);
} else {
b.motion.addV((-n.x) * _local5, (-n.y) * _local5);
}
var _local17 = (_local14 - _local10) + ((_local14 - _local10) * spring);
n.scale(_local17);
b.motion.addV(n.x, n.y);
flipper.collided();
var _local7 = b.pos;
var _local8 = _local7.x - (xold + (xd * t));
var _local9 = _local7.y - (yold + (yd * t));
_local4 = (_local8 * _local8) + (_local9 * _local9);
var _local6 = b.radius + radius;
if (_local4 < (_local6 * _local6)) {
_local4 = Math.sqrt(_local4);
var _local19 = xold + (xd * t);
var _local21 = yold + (yd * t);
_local7.set(_local19 + ((_local8 * _local6) / _local4), _local21 + ((_local9 * _local6) / _local4));
}
}
function dumpInfo() {
_root.debugText.text = _root.debugText.text + "Collide with moveablesphere\r";
var _local4 = oldUpperNormal.x + ((upperNormal.x - oldUpperNormal.x) * 0.5);
var _local3 = oldUpperNormal.y + ((upperNormal.y - oldUpperNormal.y) * 0.5);
_root.debugText.text = _root.debugText.text + (king.FloatEncoder.encodeBits(_local4) + "\r");
_root.debugText.text = _root.debugText.text + (king.FloatEncoder.encodeBits(_local3) + "\r");
}
static var NO_COLLISION = 99999;
var radius = 0;
var mass = 100000;
var fixedPos = true;
static var debugText = false;
}
Symbol 365 MovieClip [__Packages.king.FloatEncoder] Frame 0
class king.FloatEncoder
{
function FloatEncoder () {
}
static function encodeBits(val) {
var _local6 = val < 0;
if (_local6) {
val = -val;
}
var _local4 = 0;
while (val > 1) {
val = val / 2;
_local4++;
}
if (_local6) {
_local4 = (-_local4) - 1;
}
var _local5 = _local4 + ".";
do {
var _local3 = 0;
var _local1 = 0;
while (_local1 < 6) {
if (val >= 1) {
val = val - 1;
_local3 = _local3 | (1 << _local1);
}
val = val * 2;
_local1++;
}
_local5 = _local5 + BASE_64_CHARS.charAt(_local3);
} while (val > 0);
return(_local5);
}
static function decodeBits(encodedData) {
var _local6 = encodedData.split(".");
var _local7 = parseInt(_local6[0]);
var _local8 = _local7 < 0;
var _local5 = _local6[1];
var _local2 = 0;
if (_local8) {
_local7 = (-_local7) - 1;
}
var _local4 = 0;
while (_local4 < _local5.length) {
_local6 = _local5.charAt((_local5.length - _local4) - 1);
var _local3 = BASE_64_CHARS.indexOf(_local6);
var _local1 = 0;
while (_local1 < 6) {
_local2 = _local2 / 2;
if (((_local3 >> (5 - _local1)) & 1) > 0) {
_local2 = _local2 + 1;
}
_local1++;
}
_local4++;
}
_local4 = 0;
while (_local4 < _local7) {
_local2 = _local2 * 2;
_local4++;
}
if (_local8) {
_local2 = -_local2;
}
return(_local2);
}
static var BASE_64_CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ()";
}
Symbol 366 MovieClip [__Packages.king.InstructionsSign] Frame 0
class king.InstructionsSign
{
var pinball, signMc, startTime;
function InstructionsSign (pinball) {
this.pinball = pinball;
signMc = _root.sign;
signMc._visible = true;
signMc.gotoAndStop(1);
startTime = getTimer();
_root.launcher.gotoAndStop(1);
pinball.lager1.spin.gotoAndStop(1);
signMc.titleText.text = _global.textMappings.instructions_title;
signMc.bodyText.text = _global.textMappings.instructions_text;
render();
king.Sounds.get("intromusic").play();
king.Sounds.get("intromusic").setVolume(30);
}
function render() {
var _local6 = getTimer() - startTime;
var _local4 = SIGN_TIME - _local6;
if (_local4 < 500) {
var _local7 = (500 - _local4) / 500;
var _local8 = (_local7 * _local7) * 600;
_root.sign._y = 110 - _local8;
}
pinball.ledPanel.renderScrollText(_global.textMappings.instructions_text, int((_local6 / 1000) * 70));
var _local5 = int((_local4 + 999) / 1000);
if (_local5 <= 0) {
king.Sounds.get("intromusic").stop();
king.Sounds.get("gamemusic").playLooping();
king.Sounds.get("gamemusic").setVolume(50);
_local5 = 0;
signMc._visible = false;
pinball.currentSign = undefined;
pinball.spawnBall();
}
signMc.timeText.text = _global.textMappings.game_starts_in.split("[0]").join(_local5);
}
function onClick() {
var _local2 = getTimer() - startTime;
var _local3 = SIGN_TIME - _local2;
if (_local3 >= 500) {
startTime = (getTimer() - SIGN_TIME) + 500;
}
}
var SIGN_TIME = 15000;
}
Symbol 367 MovieClip [__Packages.king.ShortGameOverSign] Frame 0
class king.ShortGameOverSign
{
var pinball, signMc, startTime;
function ShortGameOverSign (pinball) {
this.pinball = pinball;
signMc = _root.sign;
signMc._visible = true;
signMc.gotoAndStop(2);
startTime = getTimer();
signMc.titleText.text = _global.textMappings.nag_title;
signMc.bodyText.text = _global.textMappings.nag_text;
render();
king.Sounds.get("lavamusic").stop();
king.Sounds.get("gamemusic").stop();
king.Sounds.get("gameovermusic").play();
}
function render() {
var _local4 = getTimer() - startTime;
if (_local4 < 500) {
var _local6 = (500 - _local4) / 500;
var _local8 = (_local6 * _local6) * 600;
_root.sign._y = 110 - _local8;
}
var _local7 = SIGN_TIME - _local4;
var _local5 = int((_local7 + 999) / 1000);
if (_local5 <= 0) {
_local5 = 0;
onClick();
}
signMc.timeText.text = _global.textMappings.game_ends_in.split("[0]").join(_local5);
}
function onClick() {
var _local2 = getTimer() - startTime;
if (_local2 > 1000) {
pinball.communicator.gameQuit();
}
}
var SIGN_TIME = 5000;
}
Symbol 368 MovieClip [__Packages.king.GameOverSign] Frame 0
class king.GameOverSign
{
var pinball, signMc, startTime;
function GameOverSign (pinball) {
this.pinball = pinball;
signMc = _root.sign;
signMc._visible = true;
signMc.gotoAndStop(3);
startTime = getTimer();
signMc.titleText.text = _global.textMappings.game_over_title;
signMc.bodyText.text = "";
signMc.scoreText.text = _global.textMappings.score;
signMc.bonusText.text = _global.textMappings.bonus;
signMc.totalScoreText.text = _global.textMappings.total_score;
var _local5 = pinball.pscript.getValue("_score");
var _local4 = pinball.pscript.getValue("_totalbonus");
signMc.score.text = _local5 - _local4;
signMc.bonus.text = _local4;
signMc.totalScore.text = _local5;
render();
king.Sounds.get("lavamusic").stop();
king.Sounds.get("gamemusic").stop();
king.Sounds.get("gameovermusic").play();
}
function render() {
var _local4 = getTimer() - startTime;
if (_local4 < 500) {
var _local6 = (500 - _local4) / 500;
var _local8 = (_local6 * _local6) * 600;
_root.sign._y = 110 - _local8;
}
var _local7 = SIGN_TIME - _local4;
var _local5 = int((_local7 + 999) / 1000);
if (_local5 <= 0) {
_local5 = 0;
onClick();
}
signMc.timeText.text = _global.textMappings.game_ends_in.split("[0]").join(_local5);
}
function onClick() {
var _local2 = getTimer() - startTime;
if (_local2 > 1000) {
pinball.communicator.gameQuit();
}
}
var SIGN_TIME = 5000;
}
Symbol 369 MovieClip [__Packages.king.Decoder] Frame 0
class king.Decoder
{
var res, p, lastValue, run;
function Decoder (res) {
this.res = res;
p = 0;
lastValue = 0;
run = BASE_64_CHARS.indexOf(res.charAt(p++));
}
function next() {
while (run <= 0) {
lastValue = BASE_64_CHARS.indexOf(res.charAt(p++));
lastValue = lastValue + (BASE_64_CHARS.indexOf(res.charAt(p++)) * 64);
run = BASE_64_CHARS.indexOf(res.charAt(p++));
}
run--;
return(lastValue);
}
function hasMoreTicks() {
return((run > 0) || (p < (res.length - 1)));
}
static var BASE_64_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#!";
}
Symbol 370 MovieClip [__Packages.king.util.Random] Frame 0
class king.util.Random
{
var mta, mti, lastSeed;
function Random (aSeed) {
mta = new Array(N);
mti = N + 1;
if (aSeed != undefined) {
init_genrand(aSeed);
}
}
function set seed(s) {
init_genrand(s);
//return(seed);
}
function get seed() {
return(lastSeed);
}
function nextInt(n) {
return((genrand_int32() & 2147483647) % n);
}
function nextFloat() {
return(next(24) / 16777216);
}
function nextDouble() {
return(next(24) / 16777216);
}
function next(bits) {
if (bits < 32) {
return(genrand_int32() & ((1 << bits) - 1));
}
return(genrand_int32());
}
function init_genrand(s) {
s = int(s);
trace("Random::init_genrand(): seed=" + s);
var _local6 = getTimer();
lastSeed = s;
mta[0] = s;
var _local2 = s;
var _local3 = new king.util.Integer64();
var _local4 = N;
mti = 1;
while (mti < _local4) {
_local3.init32((_local2 >>> 30) ^ _local2);
_local3.mulu32(1812433253);
_local2 = (mta[mti] = int(_local3.lsb + mti));
mti++;
}
var _local7 = getTimer();
trace(("Random::init_genrand(): initialization ~" + (_local7 - _local6)) + "ms");
}
function genrand_int32() {
var _local9 = N;
var _local3 = 0;
if (mti >= _local9) {
if (mti == (_local9 + 1)) {
init_genrand(5489);
}
var _local8 = M;
var _local6 = UPPER_MASK;
var _local4 = LOWER_MASK;
var _local5 = mag01;
var _local11 = getTimer();
var _local2 = 0;
var _local7 = _local9 - _local8;
var _local10 = _local8 - _local9;
_local2 = 0;
while (_local2 < _local7) {
_local3 = (mta[_local2] & _local6) | (mta[_local2 + 1] & _local4);
mta[_local2] = (mta[_local2 + _local8] ^ (_local3 >>> 1)) ^ _local5[_local3 & 1];
_local2++;
}
_local7 = _local9 - 1;
while (_local2 < _local7) {
_local3 = (mta[_local2] & _local6) | (mta[_local2 + 1] & _local4);
mta[_local2] = (mta[_local2 + _local10] ^ (_local3 >>> 1)) ^ _local5[_local3 & 1];
_local2++;
}
_local3 = (mta[_local9 - 1] & _local6) | (mta[0] & _local4);
mta[_local9 - 1] = (mta[_local8 - 1] ^ (_local3 >>> 1)) ^ _local5[_local3 & 1];
mti = 0;
var _local12 = getTimer();
trace(((("Random::genrand_int32(): precalc " + _local9) + " new numbers ~") + (_local12 - _local11)) + "ms");
}
_local3 = mta[mti++];
_local3 = _local3 ^ (_local3 >>> 11);
_local3 = _local3 ^ ((_local3 << 7) & 2636928640);
_local3 = _local3 ^ ((_local3 << 15) & 4022730752);
_local3 = _local3 ^ (_local3 >>> 18);
return(_local3);
}
static var N = 624;
static var M = 397;
static var MATRIX_A = 2567483615;
static var UPPER_MASK = 2147483648;
static var LOWER_MASK = 2147483647;
static var mag01 = [0, 2567483615];
}
Symbol 371 MovieClip [__Packages.king.util.Integer64] Frame 0
class king.util.Integer64
{
var r, p, s;
function Integer64 (lowInt) {
r = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]];
p = [0, 0, 0, 0, 0];
s = [0, 0, 0];
if (lowInt != undefined) {
merge(lowInt);
}
}
function init(v) {
var _local2 = 0;
while (_local2 < p.length) {
p[_local2] = v.p[_local2];
_local2++;
}
}
function init32(n) {
p[0] = n & 32767;
n = n >>> 15;
p[1] = n & 32767;
n = n >>> 15;
p[2] = n & 3;
p[3] = 0;
p[4] = 0;
}
function get lsb() {
return((p[0] | (p[1] << SH)) | ((p[2] & 3) << 30));
}
function get msb() {
return((((p[2] >> 2) | ((p[3] << SH) >> 2)) | ((p[4] << (SH * 2)) >> 2)) & 2147483647);
}
function binaryShiftLeft(step) {
var _local2 = 0;
while (_local2 < step) {
shl();
_local2++;
}
}
function binaryShiftRight(step) {
var _local4 = (step / SH) >> 0;
var _local5 = step - (_local4 * SH);
var _local2 = p.length - 1;
while (_local2 > 0) {
var _local3 = 0;
while (_local3 < _local4) {
p[_local3] = p[_local3 + 1];
_local3++;
}
p[_local2--] = 0;
}
if (_local5 > 0) {
var _local3 = 0;
while (_local3 < _local5) {
shr();
_local3++;
}
}
}
function binaryNot(o) {
p[0] = p[0] ^ o.p[0];
p[1] = p[1] ^ o.p[1];
p[2] = p[2] ^ o.p[2];
p[3] = p[3] ^ o.p[3];
p[4] = p[4] ^ o.p[4];
}
function add64(o) {
var _local4 = 0;
var _local3 = 1;
var _local2 = 0;
while ((_local3 < p.length) && (o.p[_local2] != 0)) {
_local3++;
}
_local2 = 0;
while (_local2 < _local3) {
_local4 = _local4 + (p[_local2] + o.p[_local2]);
p[_local2] = _local4 & MASK;
_local4 = _local4 >> SH;
_local2++;
}
}
function add32(num) {
var _local2 = 0;
var _local5 = num & MASK;
num = num >> SH;
var _local6 = num & MASK;
num = num >> SH;
var _local4 = num & 3;
_local2 = _local2 + (p[0] + _local5);
p[0] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (p[1] + _local6);
p[1] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (p[2] + _local4);
p[2] = _local2 & MASK;
}
function mulu32(num) {
var _local3 = 0;
s[0] = num & MASK;
num = num >>> 15;
s[1] = num & MASK;
num = num >>> 15;
s[2] = num & 3;
var _local2 = 0;
while (_local2 < 3) {
var _local4 = s[_local2];
_local3 = _local4 * p[0];
r[_local2][0] = _local3 & MASK;
_local3 = _local3 >> SH;
_local3 = _local3 + (_local4 * p[1]);
r[_local2][1] = _local3 & MASK;
_local3 = _local3 >> SH;
_local3 = _local3 + (_local4 * p[2]);
r[_local2][2] = _local3 & 3;
_local2++;
}
_local3 = r[0][0];
p[0] = _local3 & MASK;
_local3 = _local3 >> SH;
_local3 = _local3 + (r[0][1] + r[1][0]);
p[1] = _local3 & MASK;
_local3 = _local3 >> SH;
_local3 = _local3 + ((r[0][2] + r[1][1]) + r[2][0]);
p[2] = _local3 & 3;
p[3] = 0;
p[4] = 0;
}
function mul64(o) {
var _local2 = 0;
var _local3 = 0;
while (_local3 < 5) {
var _local4 = o.p[_local3];
_local2 = _local4 * p[0];
r[_local3][0] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (_local4 * p[1]);
r[_local3][1] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (_local4 * p[2]);
r[_local3][2] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (_local4 * p[3]);
r[_local3][3] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (_local4 * p[4]);
r[_local3][4] = _local2 & MASK;
_local3++;
}
_local2 = r[0][0];
p[0] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (r[0][1] + r[1][0]);
p[1] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + ((r[0][2] + r[1][1]) + r[2][0]);
p[2] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + (((r[0][3] + r[1][2]) + r[2][1]) + r[3][0]);
p[3] = _local2 & MASK;
_local2 = _local2 >> SH;
_local2 = _local2 + ((((r[0][4] + r[1][3]) + r[2][2]) + r[3][1]) + r[4][0]);
p[4] = _local2 & 7;
}
function mul32(value) {
mul64(new king.util.Integer64(value));
}
function merge(a) {
var _local2 = 0;
while (_local2 < 3) {
p[_local2] = p[_local2] + (a & 32767);
a = a >>> 15;
_local2++;
}
return(a);
}
function shl() {
var _local5 = 0;
var _local4 = 0;
var _local2 = 0;
var _local3 = p.length;
while (_local2 < _local3) {
_local5 = (p[_local2] & 16384) >> 14;
p[_local2] = p[_local2] << 1;
p[_local2] = (p[_local2] | _local4) & 32767;
_local2++;
_local4 = _local5;
}
}
function shr() {
var _local4 = 0;
var _local3 = 0;
var _local2 = p.length - 1;
while (_local2 >= 0) {
_local4 = (p[_local2] & 1) << 14;
p[_local2] = p[_local2] >> 1;
p[_local2] = (p[_local2] | _local3) & 32767;
_local2--;
_local3 = _local4;
}
}
static var MASK = 32767;
static var SH = 15;
}
Symbol 372 MovieClip [__Packages.king.MiniGame] Frame 0
class king.MiniGame
{
var pinball, random, xPos, xa, animStep, crashed, crashTime, winTime, xStone0, yStone0, xStone1, yStone1, remainingStones;
function MiniGame (pinball, random) {
this.pinball = pinball;
this.random = random;
xPos = 40;
xa = 0;
animStep = 0;
crashed = false;
crashTime = 0;
winTime = 0;
xStone0 = (random.nextDouble() * 2) - 1;
yStone0 = 260;
xStone1 = (random.nextDouble() * 2) - 1;
yStone1 = 300;
remainingStones = 15;
king.Sounds.get("minigamesound").play();
}
function tick(leftFlipperDown, rightFlipperDown) {
if (leftFlipperDown) {
xa = xa - 0.4;
}
if (rightFlipperDown) {
xa = xa + 0.4;
}
if (!crashed) {
animStep++;
xPos = xPos + xa;
xa = xa * 0.7;
if (xPos > 80) {
xPos = 80;
}
if (xPos < 0) {
xPos = 0;
}
var _local4 = (xPos / 40) - 1;
yStone0 = yStone0 - 1.5;
if (yStone0 < 0) {
remainingStones--;
xStone0 = (random.nextDouble() * 2) - 1;
yStone0 = 80;
if (remainingStones <= 1) {
yStone0 = yStone0 + 100000;
}
if (remainingStones <= 0) {
if (winTime == 0) {
king.Sounds.get("minigamewinsound").play();
winTime = 1;
}
}
} else if (yStone0 < 15) {
var _local3 = (_local4 - xStone0) * 80;
if ((_local3 > -20) && (_local3 < 20)) {
king.Sounds.get("crashsound").play();
crashed = true;
}
}
yStone1 = yStone1 - 1.5;
if (yStone1 < 0) {
remainingStones--;
xStone1 = (random.nextDouble() * 2) - 1;
yStone1 = 80;
if (remainingStones <= 1) {
yStone1 = yStone1 + 100000;
}
if (remainingStones <= 0) {
if (winTime == 0) {
king.Sounds.get("minigamewinsound").play();
winTime = 1;
}
}
} else if (yStone1 < 15) {
var _local3 = (_local4 - xStone1) * 80;
if ((_local3 > -20) && (_local3 < 20)) {
king.Sounds.get("crashsound").play();
crashed = true;
}
}
if (winTime > 0) {
winTime++;
if (winTime == 120) {
win();
}
}
} else {
crashTime++;
if (crashTime == 50) {
king.Sounds.get("minigamelosesound").play();
}
if (crashTime > 100) {
pinball.minigame = undefined;
pinball.oldScore = -9999;
_root.sign._visible = false;
}
}
}
function win() {
var _local3 = pinball.pscript.getValue("_score");
_local3 = _local3 + 1000;
pinball.pscript.setVar("_score", _local3);
pinball.minigame = undefined;
pinball.oldScore = -9999;
_root.sign._visible = false;
pinball.showSign(120);
}
function render(alpha) {
var _local2 = pinball.ledPanel;
_local2.animation._visible = true;
_local2.animation.gotoAndStop(10);
_local2.animation.riverBank.gotoAndStop((int(animStep / 5) % 5) + 1);
_local2.animation.raft._x = int(xPos);
_local2.animation.raft._y = 26 + int(Math.sin(animStep / 5) * 2);
_local2.animation.raft.gotoAndStop(1);
_local2.animation.remainingStones.text = remainingStones;
if (crashed) {
_local2.animation.raft._y = _local2.animation.raft._y + int(crashTime / 2);
_local2.animation.raft.gotoAndStop((int(crashTime / 2) % 4) + 2);
}
_local2.animation.stone0.gotoAndStop(1);
_local2.animation.stone1.gotoAndStop(2);
var _local3 = 2000 / yStone0;
_local2.animation.stone0._xscale = _local3;
_local2.animation.stone0._yscale = _local3;
_local2.animation.stone0._x = ((400 * xStone0) / yStone0) + 40;
_local2.animation.stone0._y = (400 / yStone0) - 5;
_local3 = 2000 / yStone1;
_local2.animation.stone1._xscale = _local3;
_local2.animation.stone1._yscale = _local3;
_local2.animation.stone1._x = ((400 * xStone1) / yStone1) + 40;
_local2.animation.stone1._y = (400 / yStone1) - 5;
if (crashed && (crashTime > 50)) {
_local2.animation.gotoAndStop(11);
_local2.animation.sings.gotoAndStop(1);
_local2.animation.sings._x = 0;
}
if (winTime > 0) {
_local2.animation.gotoAndStop(11);
_local2.animation.sings.gotoAndStop(2);
_local2.animation.sings._x = 80 - (winTime * 2);
}
_local2.bitmap.draw(_local2.animation);
_local2.animation._visible = false;
}
}
Symbol 373 MovieClip [__Packages.king.LedPanel] Frame 0
class king.LedPanel extends MovieClip
{
var bitmap, mc, animation, attachMovie;
function LedPanel () {
super();
bitmap = new flash.display.BitmapData(80, 32, false, 0);
var _local3 = mc.createEmptyMovieClip("mc", 0);
_local3.attachBitmap(bitmap, 0);
_local3._xscale = 400;
_local3._yscale = 400;
animation = attachMovie("Animation", "anim", 1000);
animation._x = 101;
renderScore(0, 60);
}
function renderSign(signNum) {
animation._visible = true;
if (signNum < 100) {
animation.gotoAndStop(3);
animation.taskNames.gotoAndStop(signNum);
} else if (signNum < 200) {
animation.gotoAndStop(4);
animation.signs.gotoAndStop(signNum - 100);
}
bitmap.draw(animation);
animation._visible = false;
}
function renderScore(score, bonus, time, balls) {
if (time < 0) {
time = 0;
}
if (balls < 0) {
balls = 0;
}
animation._visible = true;
animation.gotoAndStop(1);
animation.text.text = score;
animation.bonus.text = bonus;
animation.time.text = time;
animation.ballCount.text = "Balls: " + balls;
bitmap.draw(animation);
animation._visible = false;
}
function renderScrollText(scrollText, pos) {
animation._visible = true;
animation.gotoAndStop(2);
animation.text.text = scrollText;
animation.text._x = 80 - pos;
bitmap.draw(animation);
animation._visible = false;
}
}