Section 1
//Game (com.novelgames.flashgames.common.Game)
package com.novelgames.flashgames.common {
import flash.display.*;
public class Game extends MovieClip {
public static var gameStage:Stage;
public function unpause():void{
NewTimer.unpause();
}
public function pause():void{
NewTimer.pause();
}
}
}//package com.novelgames.flashgames.common
Section 2
//Instructions (com.novelgames.flashgames.common.Instructions)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.display.*;
public class Instructions extends MovieClip {
public var startButton:SimpleButton;
private var shownFromGame:Boolean;
public function Instructions(_arg1:Boolean=false){
this.shownFromGame = _arg1;
startButton.addEventListener(MouseEvent.CLICK, startButtonClicked);
}
private function startButtonClicked(_arg1:MouseEvent):void{
if (!shownFromGame){
Object(parent).gotoGamePage();
} else {
Object(parent).hideInstructionsFromGame();
};
}
}
}//package com.novelgames.flashgames.common
Section 3
//InstructionsButton (com.novelgames.flashgames.common.InstructionsButton)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.display.*;
public class InstructionsButton extends MovieClip {
public function InstructionsButton(){
super();
this.buttonMode = true;
this.addEventListener(MouseEvent.CLICK, function ():void{
Object(parent.parent).showInstructionsFromGame();
});
}
}
}//package com.novelgames.flashgames.common
Section 4
//MainDevelopment (com.novelgames.flashgames.common.MainDevelopment)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.media.*;
import flash.display.*;
public class MainDevelopment extends MovieClip {
private var title:Title;
private var musicGameSoundChannel:SoundChannel;
private var titleIndex:int;
private var instructions:Instructions;
private var musicGame:Sound;
private var game:Game;
public function MainDevelopment(){
this.addEventListener(Event.ENTER_FRAME, checkTitle);
}
protected function getMusicGame():Sound{
return (null);
}
public function hideInstructionsFromGame():void{
this.removeChild(instructions);
instructions = null;
game.visible = true;
game.unpause();
}
public function showInstructionsFromGame():void{
game.pause();
game.visible = false;
instructions = new Instructions(true);
this.addChildAt(instructions, (titleIndex + 1));
}
public function gotoGamePage():void{
Game.gameStage = stage;
removePage();
game = getGame();
this.addChildAt(game, titleIndex);
musicGame = getMusicGame();
musicGameSoundChannel = musicGame.play(0, int.MAX_VALUE);
}
private function checkTitle(_arg1:Event):void{
if (!(title = getTitle())){
return;
};
this.removeEventListener(Event.ENTER_FRAME, checkTitle);
stop();
titleIndex = this.getChildIndex(title);
}
public function gotoTitlePage():void{
removePage();
title = new Title();
this.addChildAt(title, titleIndex);
}
public function gotoInstructionsPage():void{
removePage();
instructions = new Instructions();
this.addChildAt(instructions, titleIndex);
}
public function showHighScores():void{
trace("showHighScores()");
}
public function showEnterHighScore(_arg1:int):void{
trace((("showEnterHighScore(" + _arg1) + ")"));
}
protected function getGame():Game{
return (null);
}
private function removePage():void{
if (title){
removeChild(title);
title = null;
};
if (instructions){
removeChild(instructions);
instructions = null;
};
if (game){
removeChild(game);
game = null;
};
if (musicGame){
musicGameSoundChannel.stop();
musicGame = null;
musicGameSoundChannel = null;
};
}
protected function getTitle():Title{
return (null);
}
}
}//package com.novelgames.flashgames.common
Section 5
//MuteButton (com.novelgames.flashgames.common.MuteButton)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.media.*;
import flash.display.*;
public class MuteButton extends MovieClip {
private var gameSoundTransform:SoundTransform;
public function MuteButton(){
if (SoundMixer.soundTransform.volume == 0){
showOff();
} else {
showOn();
};
this.addEventListener(MouseEvent.CLICK, buttonClicked);
this.buttonMode = true;
}
private function showOff():void{
gotoAndStop("off");
}
private function buttonClicked(_arg1:MouseEvent):void{
var _local2:SoundTransform;
_local2 = new SoundTransform();
if (SoundMixer.soundTransform.volume == 0){
_local2.volume = 1;
SoundMixer.soundTransform = _local2;
showOn();
} else {
_local2.volume = 0;
SoundMixer.soundTransform = _local2;
showOff();
};
}
private function showOn():void{
gotoAndStop("on");
}
}
}//package com.novelgames.flashgames.common
Section 6
//NewTimer (com.novelgames.flashgames.common.NewTimer)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.utils.*;
public class NewTimer extends Timer {
private var adjustedStartTime:int;
private var listener:Function;
private var originalRepeatCount:int;
private var originalDelay:int;
private static var pauseTime:int;
private static var paused:Boolean = false;
private static var totalPausedTime:int = 0;
public function NewTimer(_arg1:Number, _arg2:int=0):void{
super(_arg1, _arg2);
originalDelay = _arg1;
originalRepeatCount = _arg2;
}
override public function addEventListener(_arg1:String, _arg2:Function, _arg3:Boolean=false, _arg4:int=0, _arg5:Boolean=false):void{
if (_arg1 != TimerEvent.TIMER){
super.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5);
return;
};
this.listener = _arg2;
super.addEventListener(_arg1, timerEventListener);
}
override public function start():void{
adjustedStartTime = NewTimer.getTimer();
super.start();
}
private function timerEventListener(_arg1:TimerEvent):void{
if (paused){
stop();
delay = Math.max((originalDelay - (NewTimer.getTimer() - adjustedStartTime)), 1);
if (originalRepeatCount > 0){
repeatCount++;
};
super.start();
return;
};
if ((NewTimer.getTimer() - adjustedStartTime) >= originalDelay){
adjustedStartTime = NewTimer.getTimer();
if (delay != originalDelay){
stop();
delay = originalDelay;
super.start();
};
listener(_arg1);
} else {
stop();
delay = Math.max((originalDelay - (NewTimer.getTimer() - adjustedStartTime)), 1);
if (originalRepeatCount > 0){
repeatCount++;
};
super.start();
};
}
public static function unpause():void{
if (!paused){
return;
};
paused = false;
totalPausedTime = (totalPausedTime + (getTimer() - pauseTime));
}
public static function getTimer():int{
if (paused){
return ((pauseTime - totalPausedTime));
};
return ((getTimer() - totalPausedTime));
}
public static function pause():void{
if (paused){
return;
};
paused = true;
pauseTime = getTimer();
}
}
}//package com.novelgames.flashgames.common
Section 7
//Title (com.novelgames.flashgames.common.Title)
package com.novelgames.flashgames.common {
import flash.events.*;
import flash.display.*;
import flash.net.*;
public class Title extends MovieClip {
public var startButton:SimpleButton;
public function Title(){
startButton.addEventListener(MouseEvent.CLICK, startButtonClicked);
}
private function startButtonClicked(_arg1:MouseEvent):void{
Object(parent).gotoInstructionsPage();
}
private function moreGamesButtonClicked(_arg1:MouseEvent):void{
navigateToURL(new URLRequest("http://www.novelgames.com"), "_blank");
}
private function highScoresButtonClicked(_arg1:MouseEvent):void{
Object(parent).showHighScores();
}
}
}//package com.novelgames.flashgames.common
Section 8
//Ball (com.novelgames.flashgames.marble.Ball)
package com.novelgames.flashgames.marble {
import flash.geom.*;
import flash.utils.*;
import flash.display.*;
public class Ball extends MovieClip {
public var xyPoint:Point;
public var pointIndex:Number;
public var insertTime:Number;
public var isOnPath:Boolean;
public var cannotHit:Boolean;
public var maskName:String;
public var ballMask:MovieClip;
public var type:Number;
public var insertX:Number;
public var insertY:Number;
public var speedX:Number;
public var speedY:Number;
public function Ball(){
stop();
}
public function destroy():void{
if (ballMask){
parent.removeChild(ballMask);
};
parent.removeChild(this);
}
public function setXY(_arg1:Number, _arg2:Number):void{
xyPoint.x = _arg1;
xyPoint.y = _arg2;
this.x = _arg1;
this.y = _arg2;
}
public function updateMask(_arg1:String):void{
var _local2:Class;
if (_arg1 == this.maskName){
return;
};
this.maskName = _arg1;
if ((((_arg1 == null)) || ((_arg1 == "")))){
parent.removeChild(ballMask);
ballMask = null;
this.mask = null;
} else {
_local2 = Class(getDefinitionByName(("com.novelgames.flashgames.marble." + _arg1)));
ballMask = new (_local2);
parent.addChild(ballMask);
this.mask = ballMask;
};
}
public function initialize(_arg1:Number):void{
setType(_arg1);
pointIndex = 0;
isOnPath = false;
cannotHit = false;
xyPoint = new Point(0, 0);
this.cacheAsBitmap = Config.CACHEBALLS;
}
public function setType(_arg1:Number):void{
this.type = _arg1;
gotoAndStop((_arg1 + 1));
}
}
}//package com.novelgames.flashgames.marble
Section 9
//Cannon (com.novelgames.flashgames.marble.Cannon)
package com.novelgames.flashgames.marble {
import flash.events.*;
import com.novelgames.flashgames.common.*;
import flash.utils.*;
import flash.display.*;
public class Cannon extends MovieClip {
private var canShoot:Boolean;
private var possibleBallTypes:Array;
public var ballFront:Ball;
public var ballBack:Ball;
private var intervalID:Timer;
private function finishedShooting(_arg1:TimerEvent):void{
intervalID.stop();
ballFront.setType(ballBack.type);
ballFront.visible = true;
ballBack.setType(possibleBallTypes[Math.floor((Math.random() * possibleBallTypes.length))]);
canShoot = true;
}
public function setPossibleBallTypes(_arg1:Array):void{
var _local2:Boolean;
var _local3:Boolean;
var _local4:*;
_local2 = false;
_local3 = false;
this.possibleBallTypes = _arg1;
_local4 = 0;
while (_local4 < _arg1.length) {
if (ballFront.type == _arg1[_local4]){
_local2 = true;
};
if (ballBack.type == _arg1[_local4]){
_local3 = true;
};
_local4++;
};
if (!_local2){
ballFront.setType(_arg1[Math.floor((Math.random() * _arg1.length))]);
};
if (!_local3){
ballBack.setType(_arg1[Math.floor((Math.random() * _arg1.length))]);
};
}
public function shoot():void{
if (!canShoot){
return;
};
Object(parent.parent.parent).shoot();
ballFront.visible = false;
canShoot = false;
intervalID = new NewTimer(Config.BALL_SHOOTINTERVAL, 0);
intervalID.addEventListener(TimerEvent.TIMER, finishedShooting);
intervalID.start();
}
public function swapFrontBack():void{
var _local1:Number;
_local1 = ballFront.type;
ballFront.setType(ballBack.type);
ballBack.setType(_local1);
}
public function updateRotation():void{
this.rotation = (this.rotation + ((Math.atan2(this.mouseY, this.mouseX) * 180) / Math.PI));
}
public function initialize(_arg1:Number){
var _local2:*;
possibleBallTypes = new Array();
_local2 = 0;
while (_local2 < _arg1) {
possibleBallTypes[_local2] = _local2;
_local2++;
};
canShoot = true;
ballFront.initialize(Math.floor((Math.random() * _arg1)));
ballBack.initialize(Math.floor((Math.random() * _arg1)));
updateRotation();
}
}
}//package com.novelgames.flashgames.marble
Section 10
//Config (com.novelgames.flashgames.marble.Config)
package com.novelgames.flashgames.marble {
public class Config {
public static var BALL_LOSESPEED:Number = 1500;
public static var MESSAGE_GAMEOVERTIME:Number = 1000;
public static var BALL_SHOOTINTERVAL:Number = 200;
public static var EXPLODE_TIME:Number = 200;
public static var SCORE_DESTROY:Number = 20;
public static var CACHEBALLS:Boolean = false;
public static var STAGE_INITIALMOVESPEED:Number = 15;
public static var STAGEBACKGROUND_BALLCANNOTHITS:Array = [null, [[[168, 203], [603, 647]]], null];
public static var STAGE_MOVESPEEDINCREASE:Number = 5;
public static var BALL_TYPES:Number = 6;
public static var BALL_CONNECTTTOLERANCE:Number = 5;
public static var STAGE_NOOFBACKGROUNDS:Number = 3;
public static var BALL_SAMEPOSSIBILITY:Number = 0.2;
public static var BALL_DROPACCELERATION:Number = 1000;
public static var EXPLODE_DISTANCE:Number = 10;
public static var BALL_INSERTTIME:Number = 100;
public static var BALL_SHOOTSPEED:Number = 700;
public static var STAR_SPACING:Number = (BALL_RADIUS * 2);
public static var BALL_RADIUS:Number = 13;
public static var STAGEBACKGROUND_BALLMASKS:Array = [null, [[[160, 210, "StageMask1_0"], [590, 660, "StageMask1_1"]]], null];
public static var STAGE_INITIALBALLTYPES:Number = 4;
public static var EXPLODE_NOOFPIECES:Number = 8;
public static var STAGE_CLEARSHOWTIME:Number = 1000;
public static var STAR_TIMEDIFFERENCE:Number = 50;
public static var SCORE_COMBO:Number = 10;
public static var STAGE_BALLTYPESINCREASE:Number = 1;
public static var BALL_CREATEPERCENT:Number = 30;
public static var BALL_CREATESPEED:Number = 1000;
public static var MINGROUPSIZE:Number = 3;
public static var STAR_APPEARTIME:Number = 500;
public static var SCORE_EXTRABALL:Number = 10;
public static var STAGE_INITIALNOOFBALLS:Number = 80;
public static var STAGE_NOOFBALLSINCREASE:Number = 20;
public static var SCORE_STAR:Number = 50;
}
}//package com.novelgames.flashgames.marble
Section 11
//Dialog (com.novelgames.flashgames.marble.Dialog)
package com.novelgames.flashgames.marble {
import flash.events.*;
import flash.display.*;
import flash.text.*;
public class Dialog extends MovieClip {
private var background:Number;
private var messagePlayAgain:MessagePlayAgain;
private var level:Number;
private var messageStageBegin:MessageStageBegin;
public function Dialog(){
stop();
}
public function showGameOver():void{
gotoAndStop("gameOver");
}
public function showPlayAgain():void{
gotoAndStop("gameOver");
messagePlayAgain = new MessagePlayAgain();
messagePlayAgain.playAgainButton.addEventListener(MouseEvent.CLICK, playAgainButtonClicked);
messagePlayAgain.homeButton.addEventListener(MouseEvent.CLICK, homeButtonClicked);
addChild(messagePlayAgain);
}
private function playAgainButtonClicked(_arg1:MouseEvent):void{
Object(parent.parent).gotoGamePage();
}
public function hide():void{
if (messageStageBegin){
this.removeChild(messageStageBegin);
messageStageBegin = null;
};
gotoAndStop("hide");
}
public function showStageBegin(_arg1:Number, _arg2:Number):void{
gotoAndStop("hide");
this.level = _arg1;
this.background = _arg2;
messageStageBegin = new MessageStageBegin();
messageStageBegin.levelText.text = _arg1.toString();
messageStageBegin.backgroundText.text = _arg2.toString();
this.addChild(messageStageBegin);
}
public function showStageClear():void{
gotoAndStop("stageClear");
}
private function homeButtonClicked(_arg1:MouseEvent):void{
Object(parent.parent).gotoTitlePage();
}
}
}//package com.novelgames.flashgames.marble
Section 12
//DropInfo (com.novelgames.flashgames.marble.DropInfo)
package com.novelgames.flashgames.marble {
public class DropInfo {
public var lineIndex:Number;
public var ballIndex:Number;
public var combo:Number;
public var speed:Number;
public var ball:Ball;
public function DropInfo(_arg1:Number, _arg2:Ball, _arg3:Number){
this.lineIndex = _arg1;
this.ball = _arg2;
this.combo = _arg3;
ballIndex = 0;
speed = 0;
}
}
}//package com.novelgames.flashgames.marble
Section 13
//Explode (com.novelgames.flashgames.marble.Explode)
package com.novelgames.flashgames.marble {
import flash.display.*;
public class Explode extends MovieClip {
public var piece3:MovieClip;
public var piece6:MovieClip;
public var piece7:MovieClip;
public var piece2:MovieClip;
public var piece4:MovieClip;
public var piece5:MovieClip;
public var piece0:MovieClip;
public var piece1:MovieClip;
private var pieces:Array;
private var totalSeconds:Number;
public function Explode(){
var _local1:*;
super();
pieces = new Array();
_local1 = 0;
while (_local1 < Config.EXPLODE_NOOFPIECES) {
pieces[_local1] = this[("piece" + _local1)];
_local1++;
};
totalSeconds = 0;
}
public function move(_arg1:Number):Boolean{
var _local2:Boolean;
var _local3:Number;
var _local4:Number;
var _local5:*;
_local2 = false;
totalSeconds = (totalSeconds + _arg1);
if ((totalSeconds * 1000) >= Config.EXPLODE_TIME){
_local3 = 1;
_local2 = true;
} else {
_local3 = ((totalSeconds * 1000) / Config.EXPLODE_TIME);
};
_local4 = (_local3 * Config.EXPLODE_DISTANCE);
_local5 = 0;
while (_local5 < pieces.length) {
pieces[_local5].alpha = (1 - _local3);
pieces[_local5].x = (_local4 * Math.cos(((pieces[_local5].rotation * Math.PI) / 180)));
pieces[_local5].y = (_local4 * Math.sin(((pieces[_local5].rotation * Math.PI) / 180)));
_local5++;
};
return (_local2);
}
}
}//package com.novelgames.flashgames.marble
Section 14
//Game (com.novelgames.flashgames.marble.Game)
package com.novelgames.flashgames.marble {
import flash.geom.*;
import flash.events.*;
import com.novelgames.flashgames.common.*;
import flash.media.*;
import flash.utils.*;
import flash.display.*;
import flash.text.*;
import flash.ui.*;
public class Game extends Game {
private var soundStar:Sound;
private var soundGameOver:Sound;
private var soundShoot:Sound;
private var ballLines:Array;
private var soundWin:Sound;
private var playingStarted:Boolean;
public var backgroundHolder:MovieClip;
private var intervalID:Timer;
private var shootingBalls:Array;
private var showingLose:Boolean;
private var __score:Number;
private var maxNoOfBalls:Number;
private var stageBackground:StageBackground;
public var scoreText:TextField;
private var moveSpeed:Number;
private var cannon:Cannon;
private var lastMoveTime:Number;
public var ballsHolder:MovieClip;
private var noOfBallTypes:Number;
public var dialog:Dialog;
public var starsHolder:MovieClip;
public var clickDetector:MovieClip;
private var currentBackground:Number;
private var currentLevel:Number;
private var noOfBallsCreated:Number;
private var soundLand:Sound;
private var explodes:Array;
private var starLines:Array;
private var dropInfos:Array;
private var showingWin:Boolean;
private var soundDestroy:Sound;
private var lastDestroyPointIndexes:Array;
public var explodesHolder:MovieClip;
public function Game(){
score = 0;
soundShoot = new SoundShoot();
soundDestroy = new SoundDestroy();
soundStar = new SoundStar();
soundWin = new SoundWin();
soundGameOver = new SoundGameOver();
gameStage.focus = gameStage;
gameStage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
this.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveEvent);
clickDetector.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownEvent);
startLevel(1, 1);
}
private function showPlayAgain(_arg1:TimerEvent):void{
Object(parent).showEnterHighScore(score);
dialog.showPlayAgain();
}
public function shoot():void{
var _local1:Ball;
var _local2:Point;
_local1 = new Ball();
_local2 = new Point(0, 0);
_local1.initialize(cannon.ballFront.type);
_local2 = cannon.ballFront.localToGlobal(_local2);
_local1.x = _local2.x;
_local1.y = _local2.y;
_local1.speedX = (Math.cos(((cannon.rotation * Math.PI) / 180)) * Config.BALL_SHOOTSPEED);
_local1.speedY = (Math.sin(((cannon.rotation * Math.PI) / 180)) * Config.BALL_SHOOTSPEED);
ballsHolder.addChild(_local1);
shootingBalls.push(_local1);
soundShoot.play();
}
private function doLoseMove(_arg1:TimerEvent):void{
var _local2:Number;
var _local3:Number;
var _local4:Boolean;
var _local5:*;
var _local6:*;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - lastMoveTime) / 1000);
_local4 = true;
moveExplodes(_local3);
_local5 = 0;
while (_local5 < ballLines.length) {
pushBalls(_local5, 0, ((Config.BALL_LOSESPEED * _local3) / stageBackground.pathInfos[_local5].maxPointSpacing));
_local6 = 0;
while (_local6 < ballLines[_local5].length) {
if (ballLines[_local5][_local6].pointIndex >= (stageBackground.pathInfos[_local5].points.length - 1)){
ballLines[_local5][_local6].destroy();
ballLines[_local5].splice(_local6, 1);
_local6--;
};
_local6++;
};
if (ballLines[_local5].length > 0){
_local4 = false;
};
_local5++;
};
lastMoveTime = _local2;
if (_local4){
intervalID.stop();
gameStage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDownEvent);
dialog.showGameOver();
intervalID = new NewTimer(Config.MESSAGE_GAMEOVERTIME, 1);
intervalID.addEventListener(TimerEvent.TIMER, showPlayAgain);
intervalID.start();
soundGameOver.play();
};
_arg1.updateAfterEvent();
}
private function startLevel(_arg1:Number, _arg2:Number):void{
var _local3:*;
var _local4:Point;
var _local5:Class;
var _local6:*;
currentLevel = _arg1;
currentBackground = _arg2;
gotoAndStop(("background" + _arg2));
noOfBallTypes = (Config.STAGE_INITIALBALLTYPES + ((_arg1 - 1) * Config.STAGE_BALLTYPESINCREASE));
if (noOfBallTypes > Config.BALL_TYPES){
noOfBallTypes = Config.BALL_TYPES;
};
moveSpeed = (Config.STAGE_INITIALMOVESPEED + ((_arg1 - 1) * Config.STAGE_MOVESPEEDINCREASE));
maxNoOfBalls = (Config.STAGE_INITIALNOOFBALLS + ((_arg1 - 1) * Config.STAGE_NOOFBALLSINCREASE));
noOfBallsCreated = 0;
playingStarted = false;
showingWin = false;
showingLose = false;
shootingBalls = new Array();
dropInfos = new Array();
ballLines = new Array();
lastDestroyPointIndexes = new Array();
explodes = new Array();
if (stageBackground){
backgroundHolder.removeChild(stageBackground);
};
_local5 = Class(getDefinitionByName(("com.novelgames.flashgames.marble.StageBackground" + (_arg2 - 1))));
stageBackground = new (_local5);
stageBackground.initialize();
backgroundHolder.addChild(stageBackground);
cannon = stageBackground.cannon;
cannon.initialize(noOfBallTypes);
_local6 = 0;
while (_local6 < stageBackground.pathInfos.length) {
if (((Config.STAGEBACKGROUND_BALLMASKS[(_arg2 - 1)]) && (Config.STAGEBACKGROUND_BALLMASKS[(_arg2 - 1)][_local6]))){
stageBackground.pathInfos[_local6].updateMask(Config.STAGEBACKGROUND_BALLMASKS[(_arg2 - 1)][_local6]);
};
if (((Config.STAGEBACKGROUND_BALLCANNOTHITS[(_arg2 - 1)]) && (Config.STAGEBACKGROUND_BALLCANNOTHITS[(_arg2 - 1)][_local6]))){
stageBackground.pathInfos[_local6].updateCannotHits(Config.STAGEBACKGROUND_BALLCANNOTHITS[(_arg2 - 1)][_local6]);
};
ballLines[_local6] = new Array();
_local6++;
};
dialog.showStageBegin(_arg1, _arg2);
lastMoveTime = NewTimer.getTimer();
intervalID = new NewTimer(1, 0);
intervalID.addEventListener(TimerEvent.TIMER, doCreateMove);
intervalID.start();
}
private function moveShootingBalls(_arg1:Number):void{
var _local2:Ball;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:*;
var _local11:*;
_local10 = 0;
while (_local10 < shootingBalls.length) {
_local2 = shootingBalls[_local10];
_local3 = _local2.x;
_local4 = _local2.y;
_local5 = (_local2.speedX * _arg1);
_local6 = (_local2.speedY * _arg1);
_local7 = Math.ceil((Math.max(Math.abs(_local5), Math.abs(_local6)) / (Config.BALL_RADIUS * 2)));
_local8 = (_local5 / _local7);
_local9 = (_local6 / _local7);
_local11 = 0;
while (_local11 < _local7) {
_local3 = (_local3 + _local8);
_local4 = (_local4 + _local9);
_local2.setXY(_local3, _local4);
if ((((((((_local3 < -(Config.BALL_RADIUS))) || ((_local3 > (stage.stageWidth + Config.BALL_RADIUS))))) || ((_local4 < -(Config.BALL_RADIUS))))) || ((_local4 > (stage.stageHeight + Config.BALL_RADIUS))))){
_local2.destroy();
shootingBalls.splice(_local10, 1);
_local10--;
break;
};
if (landBallOnPath(_local2)){
shootingBalls.splice(_local10, 1);
_local10--;
break;
};
_local11++;
};
_local10++;
};
}
public function get score():Number{
return (__score);
}
private function moveExplodes(_arg1:Number):void{
var _local2:*;
_local2 = 0;
while (_local2 < explodes.length) {
if (explodes[_local2].move(_arg1)){
explodesHolder.removeChild(explodes[_local2]);
explodes.splice(_local2, 1);
_local2--;
};
_local2++;
};
}
private function dropBalls(_arg1:Number):void{
var _local2:Number;
var _local3:Array;
var _local4:Number;
var _local5:Number;
var _local6:Boolean;
var _local7:Number;
var _local8:Number;
var _local9:Point;
var _local10:String;
var _local11:Boolean;
var _local12:Array;
var _local13:*;
var _local14:*;
if (dropInfos.length == 0){
return;
};
_local13 = 0;
while (_local13 < dropInfos.length) {
_local2 = dropInfos[_local13].lineIndex;
_local4 = getBallIndex(_local2, dropInfos[_local13].ball);
if ((((_local4 == -1)) || ((dropInfos[_local13].ballIndex >= (ballLines[_local2].length - 1))))){
dropInfos.splice(_local13, 1);
_local13--;
} else {
dropInfos[_local13].ballIndex = _local4;
};
_local13++;
};
_local12 = new Array();
_local13 = 0;
while (_local13 < dropInfos.length) {
_local6 = false;
_local2 = dropInfos[_local13].lineIndex;
_local3 = ballLines[_local2];
dropInfos[_local13].speed = (dropInfos[_local13].speed + (Config.BALL_DROPACCELERATION * _arg1));
_local5 = ((dropInfos[_local13].speed * _arg1) / stageBackground.pathInfos[_local2].ballSpacing);
_local7 = (dropInfos[_local13].ballIndex + 1);
if (_local13 < (dropInfos.length - 1)){
if (dropInfos[(_local13 + 1)].lineIndex != _local2){
_local8 = _local3.length;
} else {
_local8 = (dropInfos[(_local13 + 1)].ballIndex + 1);
};
} else {
_local8 = _local3.length;
};
if ((_local3[_local7].pointIndex - _local5) <= (_local3[(_local7 - 1)].pointIndex + stageBackground.pathInfos[_local2].ballSpacing)){
_local5 = ((_local3[_local7].pointIndex - _local3[(_local7 - 1)].pointIndex) - stageBackground.pathInfos[_local2].ballSpacing);
_local6 = true;
};
_local14 = _local7;
while (_local14 < _local8) {
_local3[_local14].pointIndex = (_local3[_local14].pointIndex - _local5);
_local9 = stageBackground.pathInfos[_local2].getXY(_local3[_local14].pointIndex);
_local10 = stageBackground.pathInfos[_local2].getMask(_local3[_local14].pointIndex);
_local11 = stageBackground.pathInfos[_local2].getCannotHit(_local3[_local14].pointIndex);
_local3[_local14].setXY(_local9.x, _local9.y);
_local3[_local14].updateMask(_local10);
_local3[_local14].cannotHit = _local11;
_local14++;
};
if (_local6){
_local12.push(dropInfos[_local13]);
dropInfos.splice(_local13, 1);
_local13--;
};
_local13++;
};
_local13 = 0;
while (_local13 < _local12.length) {
_local2 = _local12[_local13].lineIndex;
_local4 = getBallIndex(_local2, _local12[_local13].ball);
if (ballLines[_local2][(_local4 + 1)].type == ballLines[_local2][_local4].type){
checkDestroy(_local2, _local4, _local12[_local13].combo);
};
_local13++;
};
}
private function doWinMove(_arg1:TimerEvent):void{
var _local2:Number;
var _local3:Number;
var _local4:Boolean;
var _local5:Boolean;
var _local6:*;
var _local7:*;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - lastMoveTime) / 1000);
_local4 = true;
moveExplodes(_local3);
_local6 = 0;
while (_local6 < starLines.length) {
_local7 = 0;
while (_local7 < starLines[_local6].length) {
_local5 = starLines[_local6][_local7].visible;
if (!starLines[_local6][_local7].move(_local2)){
_local4 = false;
if (((!(_local5)) && (starLines[_local6][_local7].visible))){
score = (score + Config.SCORE_STAR);
soundStar.play();
};
} else {
starsHolder.removeChild(starLines[_local6][_local7]);
starLines[_local6].splice(_local7, 1);
_local7--;
};
_local7++;
};
_local6++;
};
lastMoveTime = _local2;
if (_local4){
intervalID.stop();
dialog.showStageClear();
soundWin.play();
intervalID = new NewTimer(Config.STAGE_CLEARSHOWTIME, 0);
intervalID.addEventListener(TimerEvent.TIMER, finishedShowingClear);
intervalID.start();
};
_arg1.updateAfterEvent();
}
private function doPlayMove(_arg1:TimerEvent):void{
var _local2:Number;
var _local3:Number;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - lastMoveTime) / 1000);
moveShootingBalls(_local3);
moveBalls(_local3, moveSpeed);
dropBalls(_local3);
moveExplodes(_local3);
checkWinLose();
lastMoveTime = _local2;
_arg1.updateAfterEvent();
}
private function destroyShootingBalls():void{
var _local1:*;
_local1 = 0;
while (_local1 < shootingBalls.length) {
addExplode(shootingBalls[_local1].x, shootingBalls[_local1].y);
shootingBalls[_local1].destroy();
_local1++;
};
shootingBalls = new Array();
}
private function checkWinLose():void{
var _local1:Boolean;
var _local2:*;
_local1 = true;
_local2 = 0;
while (_local2 < ballLines.length) {
if (ballLines[_local2].length == 0){
} else {
_local1 = false;
if (ballLines[_local2][(ballLines[_local2].length - 1)].pointIndex >= (stageBackground.pathInfos[_local2].points.length - 1)){
showLose();
return;
};
};
_local2++;
};
if (_local1){
showWin();
};
}
private function onKeyDownEvent(_arg1:KeyboardEvent):void{
if (!playingStarted){
return;
};
if (showingWin){
return;
};
if (showingLose){
return;
};
if (_arg1.keyCode == Keyboard.SPACE){
cannon.swapFrontBack();
};
}
private function addExplode(_arg1:Number, _arg2:Number):void{
var _local3:Explode;
_local3 = new Explode();
_local3.x = _arg1;
_local3.y = _arg2;
explodesHolder.addChild(_local3);
explodes.push(_local3);
}
override public function unpause():void{
super.unpause();
stage.focus = stage;
}
private function moveBalls(_arg1:Number, _arg2:Number):void{
var _local3:Point;
var _local4:*;
var _local5:*;
_local4 = 0;
while (_local4 < ballLines.length) {
pushBalls(_local4, 0, ((_arg2 * _arg1) / stageBackground.pathInfos[_local4].maxPointSpacing));
while ((((noOfBallsCreated < maxNoOfBalls)) && ((((ballLines[_local4].length == 0)) || ((ballLines[_local4][0].pointIndex >= stageBackground.pathInfos[_local4].ballSpacing)))))) {
createBall(_local4);
_local3 = stageBackground.pathInfos[_local4].getXY(ballLines[_local4][0].pointIndex);
ballLines[_local4][0].setXY(_local3.x, _local3.y);
ballLines[_local4][0].updateMask(stageBackground.pathInfos[_local4].getMask(ballLines[_local4][0].pointIndex));
ballLines[_local4][0].cannotHit = stageBackground.pathInfos[_local4].getCannotHit(ballLines[_local4][0].pointIndex);
};
_local4++;
};
}
private function finishedShowingClear(_arg1:TimerEvent):void{
intervalID.stop();
dialog.hide();
if (currentBackground >= Config.STAGE_NOOFBACKGROUNDS){
startLevel((currentLevel + 1), 1);
} else {
startLevel(currentLevel, (currentBackground + 1));
};
}
private function createBall(_arg1:Number):void{
var _local2:Ball;
_local2 = new Ball();
if (ballLines[_arg1].length == 0){
_local2.initialize(Math.floor((Math.random() * noOfBallTypes)));
_local2.pointIndex = 0;
} else {
_local2.initialize(((Math.random() < Config.BALL_SAMEPOSSIBILITY)) ? ballLines[_arg1][0].type : Math.floor((Math.random() * noOfBallTypes)));
_local2.pointIndex = (ballLines[_arg1][0].pointIndex - stageBackground.pathInfos[_arg1].ballSpacing);
};
_local2.isOnPath = true;
ballsHolder.addChild(_local2);
ballLines[_arg1].unshift(_local2);
noOfBallsCreated++;
}
public function set score(_arg1:Number):void{
__score = _arg1;
scoreText.text = _arg1.toString();
}
private function checkRemainingTypes():void{
var _local1:Array;
var _local2:Array;
var _local3:*;
var _local4:*;
if (noOfBallsCreated < maxNoOfBalls){
return;
};
_local1 = new Array();
_local3 = 0;
while (_local3 < ballLines.length) {
_local4 = 0;
while (_local4 < ballLines[_local3].length) {
_local1[ballLines[_local3][_local4].type] = true;
_local4++;
};
_local3++;
};
_local2 = new Array();
_local3 = 0;
while (_local3 < _local1.length) {
if (_local1[_local3]){
_local2.push(_local3);
};
_local3++;
};
if (_local2.length > 0){
cannon.setPossibleBallTypes(_local2);
};
}
private function pushBalls(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local4:Number;
var _local5:Array;
var _local6:Ball;
var _local7:Point;
var _local8:String;
var _local9:Boolean;
var _local10:Number;
var _local11:Number;
var _local12:*;
_local4 = stageBackground.pathInfos[_arg1].ballSpacing;
_local5 = ballLines[_arg1];
_local12 = _arg2;
while (_local12 < _local5.length) {
_local6 = _local5[_local12];
_local5[_local12].pointIndex = (_local6.pointIndex + _arg3);
_local7 = stageBackground.pathInfos[_arg1].getXY(_local6.pointIndex);
_local8 = stageBackground.pathInfos[_arg1].getMask(_local6.pointIndex);
_local9 = stageBackground.pathInfos[_arg1].getCannotHit(_local6.pointIndex);
if (_local6.isOnPath){
_local6.setXY(_local7.x, _local7.y);
_local6.updateMask(_local8);
_local6.cannotHit = _local9;
if ((((_local12 < (_local5.length - 1))) && ((_local5[(_local12 + 1)].pointIndex > (_local6.pointIndex + _local4))))){
pushBalls(_arg1, (_local12 + 1), 0);
return;
};
} else {
_local10 = NewTimer.getTimer();
if ((_local10 - _local6.insertTime) >= Config.BALL_INSERTTIME){
_local6.isOnPath = true;
_local6.setXY(_local7.x, _local7.y);
_local6.updateMask(_local8);
_local6.cannotHit = _local9;
if ((((_local12 < (_local5.length - 1))) && ((_local5[(_local12 + 1)].pointIndex <= (_local6.pointIndex + _local4))))){
pushBalls(_arg1, (_local12 + 1), ((_local6.pointIndex + _local4) - _local5[(_local12 + 1)].pointIndex));
};
checkDestroy(_arg1, _local12, 0);
return;
} else {
_local11 = ((_local10 - _local6.insertTime) / Config.BALL_INSERTTIME);
_local6.setXY(((_local6.insertX * (1 - _local11)) + (_local7.x * _local11)), ((_local6.insertY * (1 - _local11)) + (_local7.y * _local11)));
_local6.updateMask(_local8);
_local6.cannotHit = _local9;
if ((((_local12 < (_local5.length - 1))) && ((_local5[(_local12 + 1)].pointIndex <= (_local6.pointIndex + (_local4 * _local11)))))){
pushBalls(_arg1, (_local12 + 1), ((_local6.pointIndex + (_local4 * _local11)) - _local5[(_local12 + 1)].pointIndex));
};
return;
};
};
_local12++;
};
}
private function getBallIndex(_arg1:Number, _arg2:Ball):Number{
var _local3:Array;
var _local4:*;
_local3 = ballLines[_arg1];
_local4 = 0;
while (_local4 < _local3.length) {
if (_local3[_local4] == _arg2){
return (_local4);
};
_local4++;
};
return (-1);
}
private function startPlaying():void{
playingStarted = true;
lastMoveTime = NewTimer.getTimer();
intervalID = new NewTimer(1, 0);
intervalID.addEventListener(TimerEvent.TIMER, doPlayMove);
intervalID.start();
}
private function showWin():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:*;
var _local6:Star;
var _local7:Point;
var _local8:*;
var _local9:*;
intervalID.stop();
showingWin = true;
destroyShootingBalls();
starLines = new Array();
_local8 = 0;
while (_local8 < lastDestroyPointIndexes.length) {
_local1 = (((stageBackground.pathInfos[_local8].points.length - 1) - lastDestroyPointIndexes[_local8]) * stageBackground.pathInfos[_local8].maxPointSpacing);
_local2 = (Math.floor((_local1 / Config.STAR_SPACING)) + 1);
_local3 = (Config.STAR_SPACING / stageBackground.pathInfos[_local8].maxPointSpacing);
starLines[_local8] = new Array();
_local9 = 0;
while (_local9 < _local2) {
_local6 = new Star();
_local7 = stageBackground.pathInfos[_local8].getXY(((stageBackground.pathInfos[_local8].points.length - 1) - (_local9 * _local3)));
_local6.initialize(((_local2 - _local9) - 1), _local7.x, _local7.y);
starsHolder.addChild(_local6);
starLines[_local8].push(_local6);
_local9++;
};
_local8++;
};
lastMoveTime = NewTimer.getTimer();
intervalID = new NewTimer(1, 0);
intervalID.addEventListener(TimerEvent.TIMER, doWinMove);
intervalID.start();
}
private function onMouseDownEvent(_arg1:MouseEvent):void{
if (!playingStarted){
return;
};
if (showingWin){
return;
};
if (showingLose){
return;
};
cannon.shoot();
}
private function showLose():void{
intervalID.stop();
showingLose = true;
destroyShootingBalls();
lastMoveTime = NewTimer.getTimer();
intervalID = new NewTimer(1, 0);
intervalID.addEventListener(TimerEvent.TIMER, doLoseMove);
intervalID.start();
}
private function landBallOnPath(_arg1:Ball):Boolean{
var _local2:Number;
var _local3:Number;
var _local4:Point;
var _local5:Point;
var _local6:*;
var _local7:*;
var _local8:*;
_local6 = 0;
while (_local6 < ballLines.length) {
_local7 = 0;
while (_local7 < ballLines[_local6].length) {
if (ballLines[_local6][_local7].cannotHit){
} else {
_local2 = Point.distance(_arg1.xyPoint, ballLines[_local6][_local7].xyPoint);
if (_local2 > (Config.BALL_RADIUS * 2)){
} else {
_local4 = stageBackground.pathInfos[_local6].getXY((ballLines[_local6][_local7].pointIndex - stageBackground.pathInfos[_local6].ballSpacing));
_local5 = stageBackground.pathInfos[_local6].getXY((ballLines[_local6][_local7].pointIndex + stageBackground.pathInfos[_local6].ballSpacing));
if (Point.distance(_arg1.xyPoint, _local4) >= Point.distance(_arg1.xyPoint, _local5)){
_arg1.pointIndex = (ballLines[_local6][_local7].pointIndex + stageBackground.pathInfos[_local6].ballSpacing);
_local3 = (_local7 + 1);
} else {
_arg1.pointIndex = ballLines[_local6][_local7].pointIndex;
_local3 = _local7;
};
_arg1.insertTime = NewTimer.getTimer();
_arg1.insertX = _arg1.x;
_arg1.insertY = _arg1.y;
ballLines[_local6].splice(_local3, 0, _arg1);
if (_local3 > _local7){
_local8 = 0;
while (_local8 < dropInfos.length) {
if (dropInfos[_local8].ball == ballLines[_local6][_local7]){
dropInfos[_local8].ball = _arg1;
break;
};
_local8++;
};
};
return (true);
};
};
_local7++;
};
_local6++;
};
return (false);
}
private function checkDestroy(_arg1:Number, _arg2:Number, _arg3:Number):void{
var _local4:Number;
var _local5:Array;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:DropInfo;
var _local10:Number;
var _local11:*;
_local4 = stageBackground.pathInfos[_arg1].connectedBallSpacing;
_local5 = ballLines[_arg1];
_local6 = _local5[_arg2].type;
_local7 = _arg2;
_local8 = _arg2;
_local10 = 0;
_local11 = (_arg2 - 1);
while (_local11 >= 0) {
if (_local5[_local11].type != _local6){
break;
};
if (_local5[_local11].pointIndex < (_local5[(_local11 + 1)].pointIndex - _local4)){
break;
};
_local7 = _local11;
_local11--;
};
_local11 = (_arg2 + 1);
while (_local11 < _local5.length) {
if (_local5[_local11].type != _local6){
break;
};
if (_local5[_local11].pointIndex > (_local5[(_local11 - 1)].pointIndex + _local4)){
break;
};
_local8 = _local11;
_local11++;
};
if (((_local8 - _local7) + 1) < Config.MINGROUPSIZE){
return;
};
_local10 = (_local10 + Config.SCORE_DESTROY);
if (((_local8 - _local7) + 1) > Config.MINGROUPSIZE){
_local10 = (_local10 + ((((_local8 - _local7) + 1) - Config.MINGROUPSIZE) * Config.SCORE_EXTRABALL));
};
_local10 = (_local10 + (_arg3 * Config.SCORE_COMBO));
score = (score + _local10);
lastDestroyPointIndexes[_arg1] = _local5[_local8].pointIndex;
_local11 = _local7;
while (_local11 <= _local8) {
addExplode(_local5[_local11].x, _local5[_local11].y);
_local5[_local11].destroy();
_local11++;
};
_local5.splice(_local7, ((_local8 - _local7) + 1));
if ((((_local7 > 0)) && ((_local7 < _local5.length)))){
_local9 = new DropInfo(_arg1, _local5[(_local7 - 1)], (_arg3 + 1));
_local11 = 0;
while (_local11 < dropInfos.length) {
if (dropInfos[_local11].lineIndex > _arg1){
break;
};
if (dropInfos[_local11].lineIndex < _arg1){
} else {
if (getBallIndex(_arg1, dropInfos[_local11].ball) > (_local7 - 1)){
break;
};
};
_local11++;
};
dropInfos.splice(_local11, 0, _local9);
};
checkRemainingTypes();
soundDestroy.play();
}
private function onMouseMoveEvent(_arg1:MouseEvent):void{
if (showingWin){
return;
};
if (showingLose){
return;
};
cannon.updateRotation();
}
private function doCreateMove(_arg1:TimerEvent):void{
var _local2:Number;
var _local3:Number;
var _local4:Point;
var _local5:Boolean;
var _local6:*;
var _local7:*;
_local2 = NewTimer.getTimer();
_local3 = ((_local2 - lastMoveTime) / 1000);
_local5 = false;
moveBalls(_local3, Config.BALL_CREATESPEED);
_local6 = 0;
while (_local6 < ballLines.length) {
if (ballLines[_local6][(ballLines[_local6].length - 1)].pointIndex >= ((stageBackground.pathInfos[_local6].points.length * Config.BALL_CREATEPERCENT) / 100)){
_local5 = true;
};
_local6++;
};
lastMoveTime = _local2;
_arg1.updateAfterEvent();
if (_local5){
intervalID.stop();
dialog.hide();
startPlaying();
};
}
}
}//package com.novelgames.flashgames.marble
Section 15
//Main (com.novelgames.flashgames.marble.Main)
package com.novelgames.flashgames.marble {
import com.novelgames.flashgames.common.*;
import flash.media.*;
public class Main extends MainDevelopment {
public var title:Title;
override protected function getMusicGame():Sound{
return (new MusicGame());
}
override protected function getGame():Game{
return (new Game());
}
override protected function getTitle():Title{
return (title);
}
}
}//package com.novelgames.flashgames.marble
Section 16
//MessagePlayAgain (com.novelgames.flashgames.marble.MessagePlayAgain)
package com.novelgames.flashgames.marble {
import flash.display.*;
public dynamic class MessagePlayAgain extends MovieClip {
public var playAgainButton:SimpleButton;
public var homeButton:SimpleButton;
}
}//package com.novelgames.flashgames.marble
Section 17
//MessageStageBegin (com.novelgames.flashgames.marble.MessageStageBegin)
package com.novelgames.flashgames.marble {
import flash.display.*;
import flash.text.*;
public dynamic class MessageStageBegin extends MovieClip {
public var backgroundText:TextField;
public var levelText:TextField;
}
}//package com.novelgames.flashgames.marble
Section 18
//MusicGame (com.novelgames.flashgames.marble.MusicGame)
package com.novelgames.flashgames.marble {
import flash.media.*;
public dynamic class MusicGame extends Sound {
}
}//package com.novelgames.flashgames.marble
Section 19
//PathInfo (com.novelgames.flashgames.marble.PathInfo)
package com.novelgames.flashgames.marble {
import flash.geom.*;
import flash.display.*;
public class PathInfo {
public var points:Array;
public var ballSpacing:Number;
public var masks:Array;
public var cannotHits:Array;
public var maxPointSpacing:Number;
public var connectedBallSpacing:Number;
public function PathInfo(){
points = new Array();
masks = new Array();
cannotHits = new Array();
maxPointSpacing = 0;
ballSpacing = 0;
}
public function updateBallSpacing():void{
var _local1:Number;
var _local2:Number;
var _local3:Number;
var _local4:*;
_local1 = Number.MIN_VALUE;
_local2 = 0;
_local4 = 1;
while (_local4 < points.length) {
_local3 = Point.distance(points[(_local4 - 1)], points[_local4]);
if (_local3 > _local1){
_local1 = _local3;
_local2 = _local4;
};
_local4++;
};
maxPointSpacing = _local1;
ballSpacing = ((Config.BALL_RADIUS * 2) / _local1);
connectedBallSpacing = (((Config.BALL_RADIUS * 2) + Config.BALL_CONNECTTTOLERANCE) / _local1);
}
public function getMask(_arg1:Number):String{
if (_arg1 <= 0){
return (masks[0]);
};
if (_arg1 >= (masks.length - 1)){
return (masks[(masks.length - 1)]);
};
return (masks[Math.floor(_arg1)]);
}
public function updateCannotHits(_arg1:Array):void{
var _local2:*;
var _local3:*;
_local2 = 0;
while (_local2 < _arg1.length) {
_local3 = _arg1[_local2][0];
while (_local3 < _arg1[_local2][1]) {
cannotHits[_local3] = true;
_local3++;
};
_local2++;
};
}
public function getCannotHit(_arg1:Number):Boolean{
if (_arg1 <= 0){
return (cannotHits[0]);
};
if (_arg1 >= (cannotHits.length - 1)){
return (cannotHits[(cannotHits.length - 1)]);
};
return (cannotHits[Math.floor(_arg1)]);
}
public function getXY(_arg1:Number):Point{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
if (_arg1 <= 0){
return (points[0]);
};
if (_arg1 >= (points.length - 1)){
return (points[(points.length - 1)]);
};
_local4 = Math.floor(_arg1);
_local5 = (_arg1 - _local4);
_local2 = ((points[_local4].x * (1 - _local5)) + (points[(_local4 + 1)].x * _local5));
_local3 = ((points[_local4].y * (1 - _local5)) + (points[(_local4 + 1)].y * _local5));
return (new Point(_local2, _local3));
}
public function updateMask(_arg1:Array):void{
var _local2:*;
var _local3:*;
_local2 = 0;
while (_local2 < _arg1.length) {
_local3 = _arg1[_local2][0];
while (_local3 < _arg1[_local2][1]) {
masks[_local3] = _arg1[_local2][2];
_local3++;
};
_local2++;
};
}
public function addPoint(_arg1:Number, _arg2:Number):void{
points.push(new Point(_arg1, _arg2));
masks.push(null);
cannotHits.push(false);
}
}
}//package com.novelgames.flashgames.marble
Section 20
//SoundDestroy (com.novelgames.flashgames.marble.SoundDestroy)
package com.novelgames.flashgames.marble {
import flash.media.*;
public dynamic class SoundDestroy extends Sound {
}
}//package com.novelgames.flashgames.marble
Section 21
//SoundGameOver (com.novelgames.flashgames.marble.SoundGameOver)
package com.novelgames.flashgames.marble {
import flash.media.*;
public dynamic class SoundGameOver extends Sound {
}
}//package com.novelgames.flashgames.marble
Section 22
//SoundShoot (com.novelgames.flashgames.marble.SoundShoot)
package com.novelgames.flashgames.marble {
import flash.media.*;
public dynamic class SoundShoot extends Sound {
}
}//package com.novelgames.flashgames.marble
Section 23
//SoundStar (com.novelgames.flashgames.marble.SoundStar)
package com.novelgames.flashgames.marble {
import flash.media.*;
public dynamic class SoundStar extends Sound {
}
}//package com.novelgames.flashgames.marble
Section 24
//SoundWin (com.novelgames.flashgames.marble.SoundWin)
package com.novelgames.flashgames.marble {
import flash.media.*;
public dynamic class SoundWin extends Sound {
}
}//package com.novelgames.flashgames.marble
Section 25
//StageBackground (com.novelgames.flashgames.marble.StageBackground)
package com.novelgames.flashgames.marble {
import flash.display.*;
public dynamic class StageBackground extends MovieClip {
public var ball1:Ball;
public var ball0:Ball;
public var pathInfos:Array;
public var cannon:Cannon;
public function StageBackground(){
stop();
}
public function initialize():void{
var _local1:Array;
var _local2:*;
_local1 = new Array();
_local2 = 0;
while (this[("ball" + _local2)]) {
_local1[_local2] = this[("ball" + _local2)];
_local1[_local2].visible = false;
_local2++;
};
pathInfos = new Array();
_local2 = 0;
while (_local2 < _local1.length) {
pathInfos.push(new PathInfo());
_local2++;
};
gotoAndStop(1);
while (true) {
_local2 = 0;
while (_local2 < _local1.length) {
pathInfos[_local2].addPoint(_local1[_local2].x, _local1[_local2].y);
_local2++;
};
if (this.currentFrame >= this.totalFrames){
break;
};
this.nextFrame();
};
_local2 = 0;
while (_local2 < _local1.length) {
pathInfos[_local2].updateBallSpacing();
_local2++;
};
this.cacheAsBitmap = true;
}
}
}//package com.novelgames.flashgames.marble
Section 26
//StageBackground0 (com.novelgames.flashgames.marble.StageBackground0)
package com.novelgames.flashgames.marble {
public dynamic class StageBackground0 extends StageBackground {
}
}//package com.novelgames.flashgames.marble
Section 27
//StageBackground1 (com.novelgames.flashgames.marble.StageBackground1)
package com.novelgames.flashgames.marble {
public dynamic class StageBackground1 extends StageBackground {
}
}//package com.novelgames.flashgames.marble
Section 28
//StageBackground2 (com.novelgames.flashgames.marble.StageBackground2)
package com.novelgames.flashgames.marble {
public dynamic class StageBackground2 extends StageBackground {
}
}//package com.novelgames.flashgames.marble
Section 29
//StageMask1_0 (com.novelgames.flashgames.marble.StageMask1_0)
package com.novelgames.flashgames.marble {
import flash.display.*;
public dynamic class StageMask1_0 extends MovieClip {
}
}//package com.novelgames.flashgames.marble
Section 30
//StageMask1_1 (com.novelgames.flashgames.marble.StageMask1_1)
package com.novelgames.flashgames.marble {
import flash.display.*;
public dynamic class StageMask1_1 extends MovieClip {
}
}//package com.novelgames.flashgames.marble
Section 31
//Star (com.novelgames.flashgames.marble.Star)
package com.novelgames.flashgames.marble {
import com.novelgames.flashgames.common.*;
import flash.display.*;
public class Star extends MovieClip {
private var startTime:Number;
private var index:Number;
public function initialize(_arg1:Number, _arg2:Number, _arg3:Number):void{
this.index = _arg1;
this.x = _arg2;
this.y = _arg3;
startTime = (NewTimer.getTimer() + (_arg1 * Config.STAR_TIMEDIFFERENCE));
this.visible = false;
}
public function move(_arg1:Number):Boolean{
if (_arg1 < startTime){
return (false);
};
if (_arg1 >= (startTime + Config.STAR_APPEARTIME)){
this.visible = false;
return (true);
};
this.alpha = (1 - ((_arg1 - startTime) / Config.STAR_APPEARTIME));
this.visible = true;
return (false);
}
}
}//package com.novelgames.flashgames.marble