STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
232959
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2639 · P5277

<div style="position:absolute;top:-99px;left:-99px;"><img src="https://tools.swfchan.com/stathit.asp?noj=FRM60575100-15DC&rnd=60575100" width="1" height="1"></div>

armorgames avalancher-3212.swf

This is the info page for
Flash #263288

(Click the ID number above for more basic data on this flash file.)


Text
<p align="center"><font face="Stentiga" size="21" color="#ffffff" letterSpacing="0.000000" kerning="1"><b>Loading Avalancher</b></font></p><p align="center"><font face="Stentiga" size="21" color="#ffffff" letterSpacing="0.000000" kerning="1"><b>0%</b></font></p>

Presented By

Play More Games

Play More Games

Created By Sinistersea.com

Created By Sinistersea.com

Avalancher

Video Walkthrough

Video Walkthrough

<p align="center"><font face="Arial Rounded MT Bold" size="14" color="#ffffff" letterSpacing="0.000000" kerning="1">Wormwood</font></p><p align="center"><font face="Arial Rounded MT Bold" size="14" color="#ffffff" letterSpacing="0.000000" kerning="1">Peak</font></p><p align="center"><font face="Arial Rounded MT Bold" size="14" color="#ffffff" letterSpacing="0.000000" kerning="1">4500</font></p>

<p align="right"><font face="Arial Black" size="22" color="#000000" letterSpacing="0.000000" kerning="1">0</font></p>

<p align="center"><font face="Stentiga" size="60" color="#ff0000" letterSpacing="0.000000" kerning="1">FAIL.</font></p>

Here Lies A
Dead Eskimo.

Good Work.

<p align="center"><font face="Stentiga" size="60" color="#00cc00" letterSpacing="0.000000" kerning="1">SUCCESS!</font></p>

<p align="left"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">Level Bonus:</font></p><p align="left"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">Health Bonus:</font></p><p align="left"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">Unused Block Bonus:</font></p>

<p align="right"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">5000</font></p><p align="right"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">425</font></p><p align="right"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">300</font></p>

<p align="left"><font face="Stentiga" size="16" color="#000000" letterSpacing="0.000000" kerning="1">Not a Scratch</font></p><p align="left"><font face="Stentiga" size="16" color="#000000" letterSpacing="0.000000" kerning="1">No Igloo</font></p>

<p align="right"><font face="Stentiga" size="16" color="#000000" letterSpacing="0.000000" kerning="1">+ 500</font></p><p align="right"><font face="Stentiga" size="16" color="#000000" letterSpacing="0.000000" kerning="1">+ 200</font></p>

<p align="right"><font face="Stentiga" size="24" color="#000000" letterSpacing="0.000000" kerning="1">5000</font></p>

<p align="left"><font face="Stentiga" size="20" color="#000000" letterSpacing="0.000000" kerning="1">Other Bonuses/Penalties: </font></p>

<p align="left"><font face="Stentiga" size="24" color="#000000" letterSpacing="0.000000" kerning="1">Final Score: </font></p>

<p align="left"><font face="Stentiga" size="16" color="#000000" letterSpacing="0.000000" kerning="1">Previous Best:</font></p>

<p align="right"><font face="Stentiga" size="16" color="#000000" letterSpacing="0.000000" kerning="1">2000</font></p>

Try Again

Try Again

New Level

New Level

Music Off

Music On

SFX Off

SFX ON

<p align="left"><font face="Stentiga" size="14" color="#000000" letterSpacing="0.000000" kerning="1">First, find a safe spot for your eskimo before the avalanche starts.</font></p>

Click Eskimo for New Position
Press Space to Trigger Avalanche

<p align="left"><font face="Stentiga" size="24" color="#ffffff" letterSpacing="0.000000" kerning="1">Score: 1000</font></p>

Submit/View Scores

Submit/View Scores

Safe Spot

Go there

Start Here

<p align="center"><font face="Stentiga" size="33" color="#000000" letterSpacing="0.000000" kerning="1">Congratulations!</font></p>

In honor of your
bravery, you have
been named the new
king of the eskimos.
Wear your crown
with pride and dignity!

Ok!

Ok!

If you are interested in hosting a
copy of Avalancher on your
website, go to
www.sinistersea.com/avalancher
for a distribution kit

If you are interested in hosting a
copy of Avalancher on your
website, go to
www.sinistersea.com/avalancher
for a distribution kit

ActionScript [AS3]

Section 1
//ag_intro_mc_46 (Avalancher_ArmorGames_fla.ag_intro_mc_46) package Avalancher_ArmorGames_fla { import flash.display.*; public dynamic class ag_intro_mc_46 extends MovieClip { public var timeToMoveOn:Boolean; public function ag_intro_mc_46(){ addFrameScript(0, frame1, 217, frame218); } function frame218(){ timeToMoveOn = true; } function frame1(){ timeToMoveOn = false; } } }//package Avalancher_ArmorGames_fla
Section 2
//MainTimeline (Avalancher_ArmorGames_fla.MainTimeline) package Avalancher_ArmorGames_fla { import flash.events.*; import flash.display.*; import org.generalrelativity.foam.view.*; import flash.utils.*; import flash.media.*; import flash.text.*; import flash.net.*; import mochi.*; import adobe.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.external.*; import flash.filters.*; import flash.geom.*; import flash.printing.*; import flash.system.*; import flash.ui.*; import flash.xml.*; public dynamic class MainTimeline extends MovieClip { public var hostButton:HostButton; public var bytesloaded; public var loadCounter:TextField; public var sclbar; public var agTeaserClip:MovieClip; public var bytestotal; public var domName; public function MainTimeline(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5); } public function stepFrame(_arg1:Event){ bytestotal = stage.loaderInfo.bytesTotal; bytesloaded = stage.loaderInfo.bytesLoaded; sclbar = Math.round(((bytesloaded * 100) / bytestotal)); loadCounter.text = (("Loading Avalancher\n" + String(sclbar)) + "%"); if (bytesloaded >= bytestotal){ removeEventListener(Event.ENTER_FRAME, stepFrame); play(); }; } public function checkToMove(_arg1:Event){ if (agTeaserClip.timeToMoveOn){ stage.removeEventListener(Event.ENTER_FRAME, checkToMove); gotoAndPlay(4); }; } public function hostClicked(_arg1:MouseEvent){ var _local2:URLRequest; _local2 = new URLRequest("http://www.sinistersea.com/avalancher"); navigateToURL(_local2, "_blank"); } function frame3(){ stop(); stage.addEventListener(Event.ENTER_FRAME, checkToMove); agTeaserClip.addEventListener(MouseEvent.CLICK, sponsorClicked); agTeaserClip.buttonMode = true; agTeaserClip.useHandCursor = true; } function frame1(){ stop(); bytestotal = stage.loaderInfo.bytesTotal; bytesloaded = stage.loaderInfo.bytesLoaded; sclbar = Math.round(((bytesloaded * 100) / bytestotal)); addEventListener(Event.ENTER_FRAME, stepFrame); } function frame4(){ stop(); addChild(AvalancherManager.screenDisplay); addChild(AvalancherManager.interfaceDisplay); addChild(AvalancherManager.fadeDisplay); AvalancherManager.initiate(); } function frame2(){ stop(); domName = loaderInfo.loaderURL.toUpperCase(); if ((((domName.indexOf("ARMORGAMES.COM") == -1)) && ((domName.indexOf("SINISTERSEA.COM") == -1)))){ gotoAndStop(5); } else { play(); }; } function frame5(){ stop(); hostButton.addEventListener(MouseEvent.CLICK, hostClicked); } public function sponsorClicked(_arg1:MouseEvent){ var _local2:URLRequest; _local2 = new URLRequest("http://www.armorgames.com/"); navigateToURL(_local2, "_blank"); } } }//package Avalancher_ArmorGames_fla
Section 3
//AuxFunctions (caurina.transitions.AuxFunctions) package caurina.transitions { public class AuxFunctions { public static function getObjectLength(_arg1:Object):uint{ var _local2:uint; var _local3:String; _local2 = 0; for (_local3 in _arg1) { _local2++; }; return (_local2); } public static function numberToG(_arg1:Number):Number{ return (((_arg1 & 0xFF00) >> 8)); } public static function numberToB(_arg1:Number):Number{ return ((_arg1 & 0xFF)); } public static function numberToR(_arg1:Number):Number{ return (((_arg1 & 0xFF0000) >> 16)); } public static function concatObjects(... _args):Object{ var _local2:Object; var _local3:Object; var _local4:int; var _local5:String; _local2 = {}; _local4 = 0; while (_local4 < _args.length) { _local3 = _args[_local4]; for (_local5 in _local3) { if (_local3[_local5] == null){ delete _local2[_local5]; } else { _local2[_local5] = _local3[_local5]; }; }; _local4++; }; return (_local2); } } }//package caurina.transitions
Section 4
//Equations (caurina.transitions.Equations) package caurina.transitions { public class Equations { public function Equations(){ trace("Equations is a static class and should not be instantiated."); } public static function easeOutBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); if (_arg1 < (1 / 2.75)){ return (((_arg3 * ((7.5625 * _arg1) * _arg1)) + _arg2)); }; if (_arg1 < (2 / 2.75)){ _arg1 = (_arg1 - (1.5 / 2.75)); return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.75)) + _arg2)); }; if (_arg1 < (2.5 / 2.75)){ _arg1 = (_arg1 - (2.25 / 2.75)); return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.9375)) + _arg2)); }; _arg1 = (_arg1 - (2.625 / 2.75)); return (((_arg3 * (((7.5625 * _arg1) * _arg1) + 0.984375)) + _arg2)); } public static function easeInOutElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ var _local6:Number; var _local7:Number; var _local8:Number; if (_arg1 == 0){ return (_arg2); }; _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 == 2){ return ((_arg2 + _arg3)); }; _local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.period)))) ? (_arg4 * (0.3 * 1.5)) : _arg5.period; _local8 = (((!(Boolean(_arg5))) || (isNaN(_arg5.amplitude)))) ? 0 : _arg5.amplitude; if (((!(Boolean(_local8))) || ((_local8 < Math.abs(_arg3))))){ _local8 = _arg3; _local7 = (_local6 / 4); } else { _local7 = ((_local6 / (2 * Math.PI)) * Math.asin((_arg3 / _local8))); }; if (_arg1 < 1){ --_arg1; return (((-0.5 * ((_local8 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6)))) + _arg2)); }; --_arg1; return ((((((_local8 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6))) * 0.5) + _arg3) + _arg2)); } public static function easeInOutQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ return (((((_arg3 / 2) * _arg1) * _arg1) + _arg2)); }; --_arg1; return ((((-(_arg3) / 2) * ((_arg1 * (_arg1 - 2)) - 1)) + _arg2)); } public static function easeInOutBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (((easeInBounce((_arg1 * 2), 0, _arg3, _arg4) * 0.5) + _arg2)); }; return ((((easeOutBounce(((_arg1 * 2) - _arg4), 0, _arg3, _arg4) * 0.5) + (_arg3 * 0.5)) + _arg2)); } public static function easeInOutBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ var _local6:Number; _local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.overshoot)))) ? 1.70158 : _arg5.overshoot; _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ _local6 = (_local6 * 1.525); return ((((_arg3 / 2) * ((_arg1 * _arg1) * (((_local6 + 1) * _arg1) - _local6))) + _arg2)); }; _arg1 = (_arg1 - 2); _local6 = (_local6 * 1.525); return ((((_arg3 / 2) * (((_arg1 * _arg1) * (((_local6 + 1) * _arg1) + _local6)) + 2)) + _arg2)); } public static function easeOutInCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutCubic((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInCubic(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeNone(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return ((((_arg3 * _arg1) / _arg4) + _arg2)); } public static function easeOutBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ var _local6:Number; _local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.overshoot)))) ? 1.70158 : _arg5.overshoot; _arg1 = ((_arg1 / _arg4) - 1); return (((_arg3 * (((_arg1 * _arg1) * (((_local6 + 1) * _arg1) + _local6)) + 1)) + _arg2)); } public static function easeInOutSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return ((((-(_arg3) / 2) * (Math.cos(((Math.PI * _arg1) / _arg4)) - 1)) + _arg2)); } public static function easeInBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ var _local6:Number; _local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.overshoot)))) ? 1.70158 : _arg5.overshoot; _arg1 = (_arg1 / _arg4); return (((((_arg3 * _arg1) * _arg1) * (((_local6 + 1) * _arg1) - _local6)) + _arg2)); } public static function easeInQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); return ((((((_arg3 * _arg1) * _arg1) * _arg1) * _arg1) + _arg2)); } public static function easeOutInQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutQuint((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInQuint(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeOutInBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutBounce((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInBounce(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function init():void{ Tweener.registerTransition("easenone", easeNone); Tweener.registerTransition("linear", easeNone); Tweener.registerTransition("easeinquad", easeInQuad); Tweener.registerTransition("easeoutquad", easeOutQuad); Tweener.registerTransition("easeinoutquad", easeInOutQuad); Tweener.registerTransition("easeoutinquad", easeOutInQuad); Tweener.registerTransition("easeincubic", easeInCubic); Tweener.registerTransition("easeoutcubic", easeOutCubic); Tweener.registerTransition("easeinoutcubic", easeInOutCubic); Tweener.registerTransition("easeoutincubic", easeOutInCubic); Tweener.registerTransition("easeinquart", easeInQuart); Tweener.registerTransition("easeoutquart", easeOutQuart); Tweener.registerTransition("easeinoutquart", easeInOutQuart); Tweener.registerTransition("easeoutinquart", easeOutInQuart); Tweener.registerTransition("easeinquint", easeInQuint); Tweener.registerTransition("easeoutquint", easeOutQuint); Tweener.registerTransition("easeinoutquint", easeInOutQuint); Tweener.registerTransition("easeoutinquint", easeOutInQuint); Tweener.registerTransition("easeinsine", easeInSine); Tweener.registerTransition("easeoutsine", easeOutSine); Tweener.registerTransition("easeinoutsine", easeInOutSine); Tweener.registerTransition("easeoutinsine", easeOutInSine); Tweener.registerTransition("easeincirc", easeInCirc); Tweener.registerTransition("easeoutcirc", easeOutCirc); Tweener.registerTransition("easeinoutcirc", easeInOutCirc); Tweener.registerTransition("easeoutincirc", easeOutInCirc); Tweener.registerTransition("easeinexpo", easeInExpo); Tweener.registerTransition("easeoutexpo", easeOutExpo); Tweener.registerTransition("easeinoutexpo", easeInOutExpo); Tweener.registerTransition("easeoutinexpo", easeOutInExpo); Tweener.registerTransition("easeinelastic", easeInElastic); Tweener.registerTransition("easeoutelastic", easeOutElastic); Tweener.registerTransition("easeinoutelastic", easeInOutElastic); Tweener.registerTransition("easeoutinelastic", easeOutInElastic); Tweener.registerTransition("easeinback", easeInBack); Tweener.registerTransition("easeoutback", easeOutBack); Tweener.registerTransition("easeinoutback", easeInOutBack); Tweener.registerTransition("easeoutinback", easeOutInBack); Tweener.registerTransition("easeinbounce", easeInBounce); Tweener.registerTransition("easeoutbounce", easeOutBounce); Tweener.registerTransition("easeinoutbounce", easeInOutBounce); Tweener.registerTransition("easeoutinbounce", easeOutInBounce); } public static function easeOutExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return (((_arg1)==_arg4) ? (_arg2 + _arg3) : (((_arg3 * 1.001) * (-(Math.pow(2, ((-10 * _arg1) / _arg4))) + 1)) + _arg2)); } public static function easeOutInBack(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutBack((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInBack(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeInExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return (((_arg1)==0) ? _arg2 : (((_arg3 * Math.pow(2, (10 * ((_arg1 / _arg4) - 1)))) + _arg2) - (_arg3 * 0.001))); } public static function easeInCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); return (((((_arg3 * _arg1) * _arg1) * _arg1) + _arg2)); } public static function easeInQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); return (((((((_arg3 * _arg1) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2)); } public static function easeInOutCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ return ((((-(_arg3) / 2) * (Math.sqrt((1 - (_arg1 * _arg1))) - 1)) + _arg2)); }; _arg1 = (_arg1 - 2); return ((((_arg3 / 2) * (Math.sqrt((1 - (_arg1 * _arg1))) + 1)) + _arg2)); } public static function easeInQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); return ((((_arg3 * _arg1) * _arg1) + _arg2)); } public static function easeInBounce(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return (((_arg3 - easeOutBounce((_arg4 - _arg1), 0, _arg3, _arg4)) + _arg2)); } public static function easeOutInExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutExpo((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInExpo(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeOutQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = ((_arg1 / _arg4) - 1); return (((-(_arg3) * ((((_arg1 * _arg1) * _arg1) * _arg1) - 1)) + _arg2)); } public static function easeInSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return ((((-(_arg3) * Math.cos(((_arg1 / _arg4) * (Math.PI / 2)))) + _arg3) + _arg2)); } public static function easeInOutQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ return (((((((_arg3 / 2) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2)); }; _arg1 = (_arg1 - 2); return ((((-(_arg3) / 2) * ((((_arg1 * _arg1) * _arg1) * _arg1) - 2)) + _arg2)); } public static function easeOutQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); return ((((-(_arg3) * _arg1) * (_arg1 - 2)) + _arg2)); } public static function easeOutInElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutElastic((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInElastic(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeInElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ var _local6:Number; var _local7:Number; var _local8:Number; if (_arg1 == 0){ return (_arg2); }; _arg1 = (_arg1 / _arg4); if (_arg1 == 1){ return ((_arg2 + _arg3)); }; _local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.period)))) ? (_arg4 * 0.3) : _arg5.period; _local8 = (((!(Boolean(_arg5))) || (isNaN(_arg5.amplitude)))) ? 0 : _arg5.amplitude; if (((!(Boolean(_local8))) || ((_local8 < Math.abs(_arg3))))){ _local8 = _arg3; _local7 = (_local6 / 4); } else { _local7 = ((_local6 / (2 * Math.PI)) * Math.asin((_arg3 / _local8))); }; --_arg1; return ((-(((_local8 * Math.pow(2, (10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6)))) + _arg2)); } public static function easeOutCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = ((_arg1 / _arg4) - 1); return (((_arg3 * (((_arg1 * _arg1) * _arg1) + 1)) + _arg2)); } public static function easeOutQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = ((_arg1 / _arg4) - 1); return (((_arg3 * (((((_arg1 * _arg1) * _arg1) * _arg1) * _arg1) + 1)) + _arg2)); } public static function easeOutInQuad(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutQuad((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInQuad(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeOutSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ return (((_arg3 * Math.sin(((_arg1 / _arg4) * (Math.PI / 2)))) + _arg2)); } public static function easeInOutCubic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ return ((((((_arg3 / 2) * _arg1) * _arg1) * _arg1) + _arg2)); }; _arg1 = (_arg1 - 2); return ((((_arg3 / 2) * (((_arg1 * _arg1) * _arg1) + 2)) + _arg2)); } public static function easeInOutQuint(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ return ((((((((_arg3 / 2) * _arg1) * _arg1) * _arg1) * _arg1) * _arg1) + _arg2)); }; _arg1 = (_arg1 - 2); return ((((_arg3 / 2) * (((((_arg1 * _arg1) * _arg1) * _arg1) * _arg1) + 2)) + _arg2)); } public static function easeInCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = (_arg1 / _arg4); return (((-(_arg3) * (Math.sqrt((1 - (_arg1 * _arg1))) - 1)) + _arg2)); } public static function easeOutInSine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutSine((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInSine(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeInOutExpo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 == 0){ return (_arg2); }; if (_arg1 == _arg4){ return ((_arg2 + _arg3)); }; _arg1 = (_arg1 / (_arg4 / 2)); if (_arg1 < 1){ return (((((_arg3 / 2) * Math.pow(2, (10 * (_arg1 - 1)))) + _arg2) - (_arg3 * 0.0005))); }; --_arg1; return (((((_arg3 / 2) * 1.0005) * (-(Math.pow(2, (-10 * _arg1))) + 2)) + _arg2)); } public static function easeOutElastic(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ var _local6:Number; var _local7:Number; var _local8:Number; if (_arg1 == 0){ return (_arg2); }; _arg1 = (_arg1 / _arg4); if (_arg1 == 1){ return ((_arg2 + _arg3)); }; _local6 = (((!(Boolean(_arg5))) || (isNaN(_arg5.period)))) ? (_arg4 * 0.3) : _arg5.period; _local8 = (((!(Boolean(_arg5))) || (isNaN(_arg5.amplitude)))) ? 0 : _arg5.amplitude; if (((!(Boolean(_local8))) || ((_local8 < Math.abs(_arg3))))){ _local8 = _arg3; _local7 = (_local6 / 4); } else { _local7 = ((_local6 / (2 * Math.PI)) * Math.asin((_arg3 / _local8))); }; return (((((_local8 * Math.pow(2, (-10 * _arg1))) * Math.sin(((((_arg1 * _arg4) - _local7) * (2 * Math.PI)) / _local6))) + _arg3) + _arg2)); } public static function easeOutCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ _arg1 = ((_arg1 / _arg4) - 1); return (((_arg3 * Math.sqrt((1 - (_arg1 * _arg1)))) + _arg2)); } public static function easeOutInQuart(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutQuart((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInQuart(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } public static function easeOutInCirc(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Object=null):Number{ if (_arg1 < (_arg4 / 2)){ return (easeOutCirc((_arg1 * 2), _arg2, (_arg3 / 2), _arg4, _arg5)); }; return (easeInCirc(((_arg1 * 2) - _arg4), (_arg2 + (_arg3 / 2)), (_arg3 / 2), _arg4, _arg5)); } } }//package caurina.transitions
Section 5
//PropertyInfoObj (caurina.transitions.PropertyInfoObj) package caurina.transitions { public class PropertyInfoObj { public var originalValueComplete:Object; public var modifierParameters:Array; public var isSpecialProperty:Boolean; public var hasModifier:Boolean; public var valueComplete:Number; public var extra:Object; public var valueStart:Number; public var modifierFunction:Function; public var arrayIndex:Number; public function PropertyInfoObj(_arg1:Number, _arg2:Number, _arg3:Object, _arg4:Number, _arg5:Object, _arg6:Boolean, _arg7:Function, _arg8:Array){ valueStart = _arg1; valueComplete = _arg2; originalValueComplete = _arg3; arrayIndex = _arg4; extra = _arg5; isSpecialProperty = _arg6; hasModifier = Boolean(_arg7); modifierFunction = _arg7; modifierParameters = _arg8; } public function toString():String{ var _local1:String; _local1 = "\n[PropertyInfoObj "; _local1 = (_local1 + ("valueStart:" + String(valueStart))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("valueComplete:" + String(valueComplete))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("originalValueComplete:" + String(originalValueComplete))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("arrayIndex:" + String(arrayIndex))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("extra:" + String(extra))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("isSpecialProperty:" + String(isSpecialProperty))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("hasModifier:" + String(hasModifier))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("modifierFunction:" + String(modifierFunction))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("modifierParameters:" + String(modifierParameters))); _local1 = (_local1 + "]\n"); return (_local1); } public function clone():PropertyInfoObj{ var _local1:PropertyInfoObj; _local1 = new PropertyInfoObj(valueStart, valueComplete, originalValueComplete, arrayIndex, extra, isSpecialProperty, modifierFunction, modifierParameters); return (_local1); } } }//package caurina.transitions
Section 6
//SpecialProperty (caurina.transitions.SpecialProperty) package caurina.transitions { public class SpecialProperty { public var parameters:Array; public var preProcess:Function; public var setValue:Function; public var getValue:Function; public function SpecialProperty(_arg1:Function, _arg2:Function, _arg3:Array=null, _arg4:Function=null){ getValue = _arg1; setValue = _arg2; parameters = _arg3; preProcess = _arg4; } public function toString():String{ var _local1:String; _local1 = ""; _local1 = (_local1 + "[SpecialProperty "); _local1 = (_local1 + ("getValue:" + String(getValue))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("setValue:" + String(setValue))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("parameters:" + String(parameters))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("preProcess:" + String(preProcess))); _local1 = (_local1 + "]"); return (_local1); } } }//package caurina.transitions
Section 7
//SpecialPropertyModifier (caurina.transitions.SpecialPropertyModifier) package caurina.transitions { public class SpecialPropertyModifier { public var getValue:Function; public var modifyValues:Function; public function SpecialPropertyModifier(_arg1:Function, _arg2:Function){ modifyValues = _arg1; getValue = _arg2; } public function toString():String{ var _local1:String; _local1 = ""; _local1 = (_local1 + "[SpecialPropertyModifier "); _local1 = (_local1 + ("modifyValues:" + String(modifyValues))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("getValue:" + String(getValue))); _local1 = (_local1 + "]"); return (_local1); } } }//package caurina.transitions
Section 8
//SpecialPropertySplitter (caurina.transitions.SpecialPropertySplitter) package caurina.transitions { public class SpecialPropertySplitter { public var parameters:Array; public var splitValues:Function; public function SpecialPropertySplitter(_arg1:Function, _arg2:Array){ splitValues = _arg1; parameters = _arg2; } public function toString():String{ var _local1:String; _local1 = ""; _local1 = (_local1 + "[SpecialPropertySplitter "); _local1 = (_local1 + ("splitValues:" + String(splitValues))); _local1 = (_local1 + ", "); _local1 = (_local1 + ("parameters:" + String(parameters))); _local1 = (_local1 + "]"); return (_local1); } } }//package caurina.transitions
Section 9
//Tweener (caurina.transitions.Tweener) package caurina.transitions { import flash.events.*; import flash.display.*; import flash.utils.*; public class Tweener { private static var _timeScale:Number = 1; private static var _currentTimeFrame:Number; private static var _specialPropertySplitterList:Object; private static var _engineExists:Boolean = false; private static var _specialPropertyModifierList:Object; private static var _currentTime:Number; private static var _tweenList:Array; private static var _specialPropertyList:Object; private static var _transitionList:Object; private static var _inited:Boolean = false; private static var __tweener_controller__:MovieClip; public function Tweener(){ trace("Tweener is a static class and should not be instantiated."); } public static function registerSpecialPropertyModifier(_arg1:String, _arg2:Function, _arg3:Function):void{ var _local4:SpecialPropertyModifier; if (!_inited){ init(); }; _local4 = new SpecialPropertyModifier(_arg2, _arg3); _specialPropertyModifierList[_arg1] = _local4; } public static function registerSpecialProperty(_arg1:String, _arg2:Function, _arg3:Function, _arg4:Array=null, _arg5:Function=null):void{ var _local6:SpecialProperty; if (!_inited){ init(); }; _local6 = new SpecialProperty(_arg2, _arg3, _arg4, _arg5); _specialPropertyList[_arg1] = _local6; } public static function init(... _args):void{ _inited = true; _transitionList = new Object(); Equations.init(); _specialPropertyList = new Object(); _specialPropertyModifierList = new Object(); _specialPropertySplitterList = new Object(); } private static function updateTweens():Boolean{ var _local1:int; if (_tweenList.length == 0){ return (false); }; _local1 = 0; while (_local1 < _tweenList.length) { if ((((_tweenList[_local1] == undefined)) || (!(_tweenList[_local1].isPaused)))){ if (!updateTweenByIndex(_local1)){ removeTweenByIndex(_local1); }; if (_tweenList[_local1] == null){ removeTweenByIndex(_local1, true); _local1--; }; }; _local1++; }; return (true); } public static function addCaller(_arg1:Object=null, _arg2:Object=null):Boolean{ var _local3:Number; var _local4:Array; var _local5:Object; var _local6:Number; var _local7:Number; var _local8:Function; var _local9:TweenListObj; var _local10:Number; var _local11:String; if (!Boolean(_arg1)){ return (false); }; if ((_arg1 is Array)){ _local4 = _arg1.concat(); } else { _local4 = [_arg1]; }; _local5 = _arg2; if (!_inited){ init(); }; if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){ startEngine(); }; _local6 = (isNaN(_local5.time)) ? 0 : _local5.time; _local7 = (isNaN(_local5.delay)) ? 0 : _local5.delay; if (typeof(_local5.transition) == "string"){ _local11 = _local5.transition.toLowerCase(); _local8 = _transitionList[_local11]; } else { _local8 = _local5.transition; }; if (!Boolean(_local8)){ _local8 = _transitionList["easeoutexpo"]; }; _local3 = 0; while (_local3 < _local4.length) { if (_local5.useFrames == true){ _local9 = new TweenListObj(_local4[_local3], (_currentTimeFrame + (_local7 / _timeScale)), (_currentTimeFrame + ((_local7 + _local6) / _timeScale)), true, _local8, _local5.transitionParams); } else { _local9 = new TweenListObj(_local4[_local3], (_currentTime + ((_local7 * 1000) / _timeScale)), (_currentTime + (((_local7 * 1000) + (_local6 * 1000)) / _timeScale)), false, _local8, _local5.transitionParams); }; _local9.properties = null; _local9.onStart = _local5.onStart; _local9.onUpdate = _local5.onUpdate; _local9.onComplete = _local5.onComplete; _local9.onOverwrite = _local5.onOverwrite; _local9.onStartParams = _local5.onStartParams; _local9.onUpdateParams = _local5.onUpdateParams; _local9.onCompleteParams = _local5.onCompleteParams; _local9.onOverwriteParams = _local5.onOverwriteParams; _local9.onStartScope = _local5.onStartScope; _local9.onUpdateScope = _local5.onUpdateScope; _local9.onCompleteScope = _local5.onCompleteScope; _local9.onOverwriteScope = _local5.onOverwriteScope; _local9.onErrorScope = _local5.onErrorScope; _local9.isCaller = true; _local9.count = _local5.count; _local9.waitFrames = _local5.waitFrames; _tweenList.push(_local9); if ((((_local6 == 0)) && ((_local7 == 0)))){ _local10 = (_tweenList.length - 1); updateTweenByIndex(_local10); removeTweenByIndex(_local10); }; _local3++; }; return (true); } public static function pauseAllTweens():Boolean{ var _local1:Boolean; var _local2:uint; if (!Boolean(_tweenList)){ return (false); }; _local1 = false; _local2 = 0; while (_local2 < _tweenList.length) { pauseTweenByIndex(_local2); _local1 = true; _local2++; }; return (_local1); } public static function removeTweens(_arg1:Object, ... _args):Boolean{ var _local3:Array; var _local4:uint; var _local5:SpecialPropertySplitter; var _local6:Array; var _local7:uint; _local3 = new Array(); _local4 = 0; while (_local4 < _args.length) { if ((((typeof(_args[_local4]) == "string")) && ((_local3.indexOf(_args[_local4]) == -1)))){ if (_specialPropertySplitterList[_args[_local4]]){ _local5 = _specialPropertySplitterList[_args[_local4]]; _local6 = _local5.splitValues(_arg1, null); _local7 = 0; while (_local7 < _local6.length) { _local3.push(_local6[_local7].name); _local7++; }; } else { _local3.push(_args[_local4]); }; }; _local4++; }; return (affectTweens(removeTweenByIndex, _arg1, _local3)); } public static function splitTweens(_arg1:Number, _arg2:Array):uint{ var _local3:TweenListObj; var _local4:TweenListObj; var _local5:uint; var _local6:String; var _local7:Boolean; _local3 = _tweenList[_arg1]; _local4 = _local3.clone(false); _local5 = 0; while (_local5 < _arg2.length) { _local6 = _arg2[_local5]; if (Boolean(_local3.properties[_local6])){ _local3.properties[_local6] = undefined; delete _local3.properties[_local6]; }; _local5++; }; for (_local6 in _local4.properties) { _local7 = false; _local5 = 0; while (_local5 < _arg2.length) { if (_arg2[_local5] == _local6){ _local7 = true; break; }; _local5++; }; if (!_local7){ _local4.properties[_local6] = undefined; delete _local4.properties[_local6]; }; }; _tweenList.push(_local4); return ((_tweenList.length - 1)); } public static function updateFrame():void{ _currentTimeFrame++; } public static function resumeTweenByIndex(_arg1:Number):Boolean{ var _local2:TweenListObj; var _local3:Number; _local2 = _tweenList[_arg1]; if ((((_local2 == null)) || (!(_local2.isPaused)))){ return (false); }; _local3 = getCurrentTweeningTime(_local2); _local2.timeStart = (_local2.timeStart + (_local3 - _local2.timePaused)); _local2.timeComplete = (_local2.timeComplete + (_local3 - _local2.timePaused)); _local2.timePaused = undefined; _local2.isPaused = false; return (true); } public static function getVersion():String{ return ("AS3 1.31.74"); } public static function onEnterFrame(_arg1:Event):void{ var _local2:Boolean; updateTime(); updateFrame(); _local2 = false; _local2 = updateTweens(); if (!_local2){ stopEngine(); }; } public static function updateTime():void{ _currentTime = getTimer(); } private static function updateTweenByIndex(_arg1:Number):Boolean{ var tTweening:TweenListObj; var isOver:Boolean; var mustUpdate:Boolean; var nv:Number; var t:Number; var b:Number; var c:Number; var d:Number; var pName:String; var eventScope:Object; var tScope:Object; var cTime:Number; var tProperty:Object; var pv:Number; var i = _arg1; tTweening = _tweenList[i]; if ((((tTweening == null)) || (!(Boolean(tTweening.scope))))){ return (false); }; isOver = false; cTime = getCurrentTweeningTime(tTweening); if (cTime >= tTweening.timeStart){ tScope = tTweening.scope; if (tTweening.isCaller){ do { t = (((tTweening.timeComplete - tTweening.timeStart) / tTweening.count) * (tTweening.timesCalled + 1)); b = tTweening.timeStart; c = (tTweening.timeComplete - tTweening.timeStart); d = (tTweening.timeComplete - tTweening.timeStart); nv = tTweening.transition(t, b, c, d); } while (!(cTime >= nv)); } else { mustUpdate = (((((tTweening.skipUpdates < 1)) || (!(tTweening.skipUpdates)))) || ((tTweening.updatesSkipped >= tTweening.skipUpdates))); if (cTime >= tTweening.timeComplete){ isOver = true; mustUpdate = true; }; if (!tTweening.hasStarted){ if (Boolean(tTweening.onStart)){ eventScope = (Boolean(tTweening.onStartScope)) ? tTweening.onStartScope : tScope; try { tTweening.onStart.apply(eventScope, tTweening.onStartParams); } catch(e2:Error) { handleError(tTweening, e2, "onStart"); }; }; for (pName in tTweening.properties) { if (tTweening.properties[pName].isSpecialProperty){ if (Boolean(_specialPropertyList[pName].preProcess)){ tTweening.properties[pName].valueComplete = _specialPropertyList[pName].preProcess(tScope, _specialPropertyList[pName].parameters, tTweening.properties[pName].originalValueComplete, tTweening.properties[pName].extra); }; pv = _specialPropertyList[pName].getValue(tScope, _specialPropertyList[pName].parameters, tTweening.properties[pName].extra); } else { pv = tScope[pName]; }; tTweening.properties[pName].valueStart = (isNaN(pv)) ? tTweening.properties[pName].valueComplete : pv; }; mustUpdate = true; tTweening.hasStarted = true; }; if (mustUpdate){ for (pName in tTweening.properties) { tProperty = tTweening.properties[pName]; if (isOver){ nv = tProperty.valueComplete; } else { if (tProperty.hasModifier){ t = (cTime - tTweening.timeStart); d = (tTweening.timeComplete - tTweening.timeStart); nv = tTweening.transition(t, 0, 1, d, tTweening.transitionParams); nv = tProperty.modifierFunction(tProperty.valueStart, tProperty.valueComplete, nv, tProperty.modifierParameters); } else { t = (cTime - tTweening.timeStart); b = tProperty.valueStart; c = (tProperty.valueComplete - tProperty.valueStart); d = (tTweening.timeComplete - tTweening.timeStart); nv = tTweening.transition(t, b, c, d, tTweening.transitionParams); }; }; if (tTweening.rounded){ nv = Math.round(nv); }; if (tProperty.isSpecialProperty){ _specialPropertyList[pName].setValue(tScope, nv, _specialPropertyList[pName].parameters, tTweening.properties[pName].extra); } else { tScope[pName] = nv; }; }; tTweening.updatesSkipped = 0; if (Boolean(tTweening.onUpdate)){ eventScope = (Boolean(tTweening.onUpdateScope)) ? tTweening.onUpdateScope : tScope; try { tTweening.onUpdate.apply(eventScope, tTweening.onUpdateParams); } catch(e3:Error) { handleError(tTweening, e3, "onUpdate"); }; }; } else { tTweening.updatesSkipped++; }; }; if (((isOver) && (Boolean(tTweening.onComplete)))){ eventScope = (Boolean(tTweening.onCompleteScope)) ? tTweening.onCompleteScope : tScope; try { tTweening.onComplete.apply(eventScope, tTweening.onCompleteParams); } catch(e4:Error) { handleError(tTweening, e4, "onComplete"); }; }; return (!(isOver)); }; return (true); } public static function setTimeScale(_arg1:Number):void{ var _local2:Number; var _local3:Number; if (isNaN(_arg1)){ _arg1 = 1; }; if (_arg1 < 1E-5){ _arg1 = 1E-5; }; if (_arg1 != _timeScale){ if (_tweenList != null){ _local2 = 0; while (_local2 < _tweenList.length) { _local3 = getCurrentTweeningTime(_tweenList[_local2]); _tweenList[_local2].timeStart = (_local3 - (((_local3 - _tweenList[_local2].timeStart) * _timeScale) / _arg1)); _tweenList[_local2].timeComplete = (_local3 - (((_local3 - _tweenList[_local2].timeComplete) * _timeScale) / _arg1)); if (_tweenList[_local2].timePaused != undefined){ _tweenList[_local2].timePaused = (_local3 - (((_local3 - _tweenList[_local2].timePaused) * _timeScale) / _arg1)); }; _local2++; }; }; _timeScale = _arg1; }; } public static function resumeAllTweens():Boolean{ var _local1:Boolean; var _local2:uint; if (!Boolean(_tweenList)){ return (false); }; _local1 = false; _local2 = 0; while (_local2 < _tweenList.length) { resumeTweenByIndex(_local2); _local1 = true; _local2++; }; return (_local1); } private static function handleError(_arg1:TweenListObj, _arg2:Error, _arg3:String):void{ var eventScope:Object; var pTweening = _arg1; var pError = _arg2; var pCallBackName = _arg3; if (((Boolean(pTweening.onError)) && ((pTweening.onError is Function)))){ eventScope = (Boolean(pTweening.onErrorScope)) ? pTweening.onErrorScope : pTweening.scope; try { pTweening.onError.apply(eventScope, [pTweening.scope, pError]); } catch(metaError:Error) { printError(((((String(pTweening.scope) + " raised an error while executing the 'onError' handler. Original error:\n ") + pError.getStackTrace()) + "\nonError error: ") + metaError.getStackTrace())); }; } else { if (!Boolean(pTweening.onError)){ printError(((((String(pTweening.scope) + " raised an error while executing the '") + pCallBackName) + "'handler. \n") + pError.getStackTrace())); }; }; } private static function startEngine():void{ _engineExists = true; _tweenList = new Array(); __tweener_controller__ = new MovieClip(); __tweener_controller__.addEventListener(Event.ENTER_FRAME, Tweener.onEnterFrame); _currentTimeFrame = 0; updateTime(); } public static function removeAllTweens():Boolean{ var _local1:Boolean; var _local2:uint; if (!Boolean(_tweenList)){ return (false); }; _local1 = false; _local2 = 0; while (_local2 < _tweenList.length) { removeTweenByIndex(_local2); _local1 = true; _local2++; }; return (_local1); } public static function addTween(_arg1:Object=null, _arg2:Object=null):Boolean{ var _local3:Number; var _local4:Number; var _local5:String; var _local6:Array; var _local7:Object; var _local8:Number; var _local9:Number; var _local10:Array; var _local11:Object; var _local12:Object; var _local13:Function; var _local14:Object; var _local15:TweenListObj; var _local16:Number; var _local17:Array; var _local18:Array; var _local19:Array; var _local20:String; if (!Boolean(_arg1)){ return (false); }; if ((_arg1 is Array)){ _local6 = _arg1.concat(); } else { _local6 = [_arg1]; }; _local7 = TweenListObj.makePropertiesChain(_arg2); if (!_inited){ init(); }; if (((!(_engineExists)) || (!(Boolean(__tweener_controller__))))){ startEngine(); }; _local8 = (isNaN(_local7.time)) ? 0 : _local7.time; _local9 = (isNaN(_local7.delay)) ? 0 : _local7.delay; _local10 = new Array(); _local11 = {time:true, delay:true, useFrames:true, skipUpdates:true, transition:true, transitionParams:true, onStart:true, onUpdate:true, onComplete:true, onOverwrite:true, onError:true, rounded:true, onStartParams:true, onUpdateParams:true, onCompleteParams:true, onOverwriteParams:true, onStartScope:true, onUpdateScope:true, onCompleteScope:true, onOverwriteScope:true, onErrorScope:true}; _local12 = new Object(); for (_local5 in _local7) { if (!_local11[_local5]){ if (_specialPropertySplitterList[_local5]){ _local17 = _specialPropertySplitterList[_local5].splitValues(_local7[_local5], _specialPropertySplitterList[_local5].parameters); _local3 = 0; while (_local3 < _local17.length) { if (_specialPropertySplitterList[_local17[_local3].name]){ _local18 = _specialPropertySplitterList[_local17[_local3].name].splitValues(_local17[_local3].value, _specialPropertySplitterList[_local17[_local3].name].parameters); _local4 = 0; while (_local4 < _local18.length) { _local10[_local18[_local4].name] = {valueStart:undefined, valueComplete:_local18[_local4].value, arrayIndex:_local18[_local4].arrayIndex, isSpecialProperty:false}; _local4++; }; } else { _local10[_local17[_local3].name] = {valueStart:undefined, valueComplete:_local17[_local3].value, arrayIndex:_local17[_local3].arrayIndex, isSpecialProperty:false}; }; _local3++; }; } else { if (_specialPropertyModifierList[_local5] != undefined){ _local19 = _specialPropertyModifierList[_local5].modifyValues(_local7[_local5]); _local3 = 0; while (_local3 < _local19.length) { _local12[_local19[_local3].name] = {modifierParameters:_local19[_local3].parameters, modifierFunction:_specialPropertyModifierList[_local5].getValue}; _local3++; }; } else { _local10[_local5] = {valueStart:undefined, valueComplete:_local7[_local5]}; }; }; }; }; for (_local5 in _local10) { if (_specialPropertyList[_local5] != undefined){ _local10[_local5].isSpecialProperty = true; } else { if (_local6[0][_local5] == undefined){ printError((((("The property '" + _local5) + "' doesn't seem to be a normal object property of ") + String(_local6[0])) + " or a registered special property.")); }; }; }; for (_local5 in _local12) { if (_local10[_local5] != undefined){ _local10[_local5].modifierParameters = _local12[_local5].modifierParameters; _local10[_local5].modifierFunction = _local12[_local5].modifierFunction; }; }; if (typeof(_local7.transition) == "string"){ _local20 = _local7.transition.toLowerCase(); _local13 = _transitionList[_local20]; } else { _local13 = _local7.transition; }; if (!Boolean(_local13)){ _local13 = _transitionList["easeoutexpo"]; }; _local3 = 0; while (_local3 < _local6.length) { _local14 = new Object(); for (_local5 in _local10) { _local14[_local5] = new PropertyInfoObj(_local10[_local5].valueStart, _local10[_local5].valueComplete, _local10[_local5].valueComplete, _local10[_local5].arrayIndex, {}, _local10[_local5].isSpecialProperty, _local10[_local5].modifierFunction, _local10[_local5].modifierParameters); }; if (_local7.useFrames == true){ _local15 = new TweenListObj(_local6[_local3], (_currentTimeFrame + (_local9 / _timeScale)), (_currentTimeFrame + ((_local9 + _local8) / _timeScale)), true, _local13, _local7.transitionParams); } else { _local15 = new TweenListObj(_local6[_local3], (_currentTime + ((_local9 * 1000) / _timeScale)), (_currentTime + (((_local9 * 1000) + (_local8 * 1000)) / _timeScale)), false, _local13, _local7.transitionParams); }; _local15.properties = _local14; _local15.onStart = _local7.onStart; _local15.onUpdate = _local7.onUpdate; _local15.onComplete = _local7.onComplete; _local15.onOverwrite = _local7.onOverwrite; _local15.onError = _local7.onError; _local15.onStartParams = _local7.onStartParams; _local15.onUpdateParams = _local7.onUpdateParams; _local15.onCompleteParams = _local7.onCompleteParams; _local15.onOverwriteParams = _local7.onOverwriteParams; _local15.onStartScope = _local7.onStartScope; _local15.onUpdateScope = _local7.onUpdateScope; _local15.onCompleteScope = _local7.onCompleteScope; _local15.onOverwriteScope = _local7.onOverwriteScope; _local15.onErrorScope = _local7.onErrorScope; _local15.rounded = _local7.rounded; _local15.skipUpdates = _local7.skipUpdates; removeTweensByTime(_local15.scope, _local15.properties, _local15.timeStart, _local15.timeComplete); _tweenList.push(_local15); if ((((_local8 == 0)) && ((_local9 == 0)))){ _local16 = (_tweenList.length - 1); updateTweenByIndex(_local16); removeTweenByIndex(_local16); }; _local3++; }; return (true); } public static function registerTransition(_arg1:String, _arg2:Function):void{ if (!_inited){ init(); }; _transitionList[_arg1] = _arg2; } public static function printError(_arg1:String):void{ trace(("## [Tweener] Error: " + _arg1)); } private static function affectTweens(_arg1:Function, _arg2:Object, _arg3:Array):Boolean{ var _local4:Boolean; var _local5:uint; var _local6:Array; var _local7:uint; var _local8:uint; var _local9:uint; _local4 = false; if (!Boolean(_tweenList)){ return (false); }; _local5 = 0; while (_local5 < _tweenList.length) { if (((_tweenList[_local5]) && ((_tweenList[_local5].scope == _arg2)))){ if (_arg3.length == 0){ _arg1(_local5); _local4 = true; } else { _local6 = new Array(); _local7 = 0; while (_local7 < _arg3.length) { if (Boolean(_tweenList[_local5].properties[_arg3[_local7]])){ _local6.push(_arg3[_local7]); }; _local7++; }; if (_local6.length > 0){ _local8 = AuxFunctions.getObjectLength(_tweenList[_local5].properties); if (_local8 == _local6.length){ _arg1(_local5); _local4 = true; } else { _local9 = splitTweens(_local5, _local6); _arg1(_local9); _local4 = true; }; }; }; }; _local5++; }; return (_local4); } public static function getTweens(_arg1:Object):Array{ var _local2:uint; var _local3:String; var _local4:Array; if (!Boolean(_tweenList)){ return ([]); }; _local4 = new Array(); _local2 = 0; while (_local2 < _tweenList.length) { if (((Boolean(_tweenList[_local2])) && ((_tweenList[_local2].scope == _arg1)))){ for (_local3 in _tweenList[_local2].properties) { _local4.push(_local3); }; }; _local2++; }; return (_local4); } public static function isTweening(_arg1:Object):Boolean{ var _local2:uint; if (!Boolean(_tweenList)){ return (false); }; _local2 = 0; while (_local2 < _tweenList.length) { if (((Boolean(_tweenList[_local2])) && ((_tweenList[_local2].scope == _arg1)))){ return (true); }; _local2++; }; return (false); } public static function pauseTweenByIndex(_arg1:Number):Boolean{ var _local2:TweenListObj; _local2 = _tweenList[_arg1]; if ((((_local2 == null)) || (_local2.isPaused))){ return (false); }; _local2.timePaused = getCurrentTweeningTime(_local2); _local2.isPaused = true; return (true); } public static function getCurrentTweeningTime(_arg1:Object):Number{ return ((_arg1.useFrames) ? _currentTimeFrame : _currentTime); } public static function getTweenCount(_arg1:Object):Number{ var _local2:uint; var _local3:Number; if (!Boolean(_tweenList)){ return (0); }; _local3 = 0; _local2 = 0; while (_local2 < _tweenList.length) { if (((Boolean(_tweenList[_local2])) && ((_tweenList[_local2].scope == _arg1)))){ _local3 = (_local3 + AuxFunctions.getObjectLength(_tweenList[_local2].properties)); }; _local2++; }; return (_local3); } private static function stopEngine():void{ _engineExists = false; _tweenList = null; _currentTime = 0; _currentTimeFrame = 0; __tweener_controller__.removeEventListener(Event.ENTER_FRAME, Tweener.onEnterFrame); __tweener_controller__ = null; } public static function removeTweensByTime(_arg1:Object, _arg2:Object, _arg3:Number, _arg4:Number):Boolean{ var removed:Boolean; var removedLocally:Boolean; var i:uint; var tl:uint; var pName:String; var eventScope:Object; var p_scope = _arg1; var p_properties = _arg2; var p_timeStart = _arg3; var p_timeComplete = _arg4; removed = false; tl = _tweenList.length; i = 0; while (i < tl) { if (((Boolean(_tweenList[i])) && ((p_scope == _tweenList[i].scope)))){ if ((((p_timeComplete > _tweenList[i].timeStart)) && ((p_timeStart < _tweenList[i].timeComplete)))){ removedLocally = false; for (pName in _tweenList[i].properties) { if (Boolean(p_properties[pName])){ if (Boolean(_tweenList[i].onOverwrite)){ eventScope = (Boolean(_tweenList[i].onOverwriteScope)) ? _tweenList[i].onOverwriteScope : _tweenList[i].scope; try { _tweenList[i].onOverwrite.apply(eventScope, _tweenList[i].onOverwriteParams); } catch(e:Error) { handleError(_tweenList[i], e, "onOverwrite"); }; }; _tweenList[i].properties[pName] = undefined; delete _tweenList[i].properties[pName]; removedLocally = true; removed = true; }; }; if (removedLocally){ if (AuxFunctions.getObjectLength(_tweenList[i].properties) == 0){ removeTweenByIndex(i); }; }; }; }; i = (i + 1); }; return (removed); } public static function registerSpecialPropertySplitter(_arg1:String, _arg2:Function, _arg3:Array=null):void{ var _local4:SpecialPropertySplitter; if (!_inited){ init(); }; _local4 = new SpecialPropertySplitter(_arg2, _arg3); _specialPropertySplitterList[_arg1] = _local4; } public static function removeTweenByIndex(_arg1:Number, _arg2:Boolean=false):Boolean{ _tweenList[_arg1] = null; if (_arg2){ _tweenList.splice(_arg1, 1); }; return (true); } public static function resumeTweens(_arg1:Object, ... _args):Boolean{ var _local3:Array; var _local4:uint; _local3 = new Array(); _local4 = 0; while (_local4 < _args.length) { if ((((typeof(_args[_local4]) == "string")) && ((_local3.indexOf(_args[_local4]) == -1)))){ _local3.push(_args[_local4]); }; _local4++; }; return (affectTweens(resumeTweenByIndex, _arg1, _local3)); } public static function pauseTweens(_arg1:Object, ... _args):Boolean{ var _local3:Array; var _local4:uint; _local3 = new Array(); _local4 = 0; while (_local4 < _args.length) { if ((((typeof(_args[_local4]) == "string")) && ((_local3.indexOf(_args[_local4]) == -1)))){ _local3.push(_args[_local4]); }; _local4++; }; return (affectTweens(pauseTweenByIndex, _arg1, _local3)); } } }//package caurina.transitions
Section 10
//TweenListObj (caurina.transitions.TweenListObj) package caurina.transitions { public class TweenListObj { public var onUpdate:Function; public var useFrames:Boolean; public var hasStarted:Boolean; public var onOverwriteParams:Array; public var timeStart:Number; public var count:Number; public var timeComplete:Number; public var onStartParams:Array; public var onUpdateScope:Object; public var rounded:Boolean; public var onUpdateParams:Array; public var properties:Object; public var onComplete:Function; public var transitionParams:Object; public var updatesSkipped:Number; public var onStart:Function; public var onOverwriteScope:Object; public var skipUpdates:Number; public var onStartScope:Object; public var scope:Object; public var transition:Function; public var timePaused:Number; public var onCompleteParams:Array; public var timesCalled:Number; public var isCaller:Boolean; public var onError:Function; public var onErrorScope:Object; public var onOverwrite:Function; public var isPaused:Boolean; public var waitFrames:Boolean; public var onCompleteScope:Object; public function TweenListObj(_arg1:Object, _arg2:Number, _arg3:Number, _arg4:Boolean, _arg5:Function, _arg6:Object){ scope = _arg1; timeStart = _arg2; timeComplete = _arg3; useFrames = _arg4; transition = _arg5; transitionParams = _arg6; properties = new Object(); isPaused = false; timePaused = undefined; isCaller = false; updatesSkipped = 0; timesCalled = 0; skipUpdates = 0; hasStarted = false; } public function clone(_arg1:Boolean):TweenListObj{ var _local2:TweenListObj; var _local3:String; _local2 = new TweenListObj(scope, timeStart, timeComplete, useFrames, transition, transitionParams); _local2.properties = new Array(); for (_local3 in properties) { _local2.properties[_local3] = properties[_local3].clone(); }; _local2.skipUpdates = skipUpdates; _local2.updatesSkipped = updatesSkipped; if (!_arg1){ _local2.onStart = onStart; _local2.onUpdate = onUpdate; _local2.onComplete = onComplete; _local2.onOverwrite = onOverwrite; _local2.onError = onError; _local2.onStartParams = onStartParams; _local2.onUpdateParams = onUpdateParams; _local2.onCompleteParams = onCompleteParams; _local2.onOverwriteParams = onOverwriteParams; _local2.onStartScope = onStartScope; _local2.onUpdateScope = onUpdateScope; _local2.onCompleteScope = onCompleteScope; _local2.onOverwriteScope = onOverwriteScope; _local2.onErrorScope = onErrorScope; }; _local2.rounded = rounded; _local2.isPaused = isPaused; _local2.timePaused = timePaused; _local2.isCaller = isCaller; _local2.count = count; _local2.timesCalled = timesCalled; _local2.waitFrames = waitFrames; _local2.hasStarted = hasStarted; return (_local2); } public function toString():String{ var _local1:String; var _local2:Boolean; var _local3:String; _local1 = "\n[TweenListObj "; _local1 = (_local1 + ("scope:" + String(scope))); _local1 = (_local1 + ", properties:"); _local2 = true; for (_local3 in properties) { if (!_local2){ _local1 = (_local1 + ","); }; _local1 = (_local1 + ("[name:" + properties[_local3].name)); _local1 = (_local1 + (",valueStart:" + properties[_local3].valueStart)); _local1 = (_local1 + (",valueComplete:" + properties[_local3].valueComplete)); _local1 = (_local1 + "]"); _local2 = false; }; _local1 = (_local1 + (", timeStart:" + String(timeStart))); _local1 = (_local1 + (", timeComplete:" + String(timeComplete))); _local1 = (_local1 + (", useFrames:" + String(useFrames))); _local1 = (_local1 + (", transition:" + String(transition))); _local1 = (_local1 + (", transitionParams:" + String(transitionParams))); if (skipUpdates){ _local1 = (_local1 + (", skipUpdates:" + String(skipUpdates))); }; if (updatesSkipped){ _local1 = (_local1 + (", updatesSkipped:" + String(updatesSkipped))); }; if (Boolean(onStart)){ _local1 = (_local1 + (", onStart:" + String(onStart))); }; if (Boolean(onUpdate)){ _local1 = (_local1 + (", onUpdate:" + String(onUpdate))); }; if (Boolean(onComplete)){ _local1 = (_local1 + (", onComplete:" + String(onComplete))); }; if (Boolean(onOverwrite)){ _local1 = (_local1 + (", onOverwrite:" + String(onOverwrite))); }; if (Boolean(onError)){ _local1 = (_local1 + (", onError:" + String(onError))); }; if (onStartParams){ _local1 = (_local1 + (", onStartParams:" + String(onStartParams))); }; if (onUpdateParams){ _local1 = (_local1 + (", onUpdateParams:" + String(onUpdateParams))); }; if (onCompleteParams){ _local1 = (_local1 + (", onCompleteParams:" + String(onCompleteParams))); }; if (onOverwriteParams){ _local1 = (_local1 + (", onOverwriteParams:" + String(onOverwriteParams))); }; if (onStartScope){ _local1 = (_local1 + (", onStartScope:" + String(onStartScope))); }; if (onUpdateScope){ _local1 = (_local1 + (", onUpdateScope:" + String(onUpdateScope))); }; if (onCompleteScope){ _local1 = (_local1 + (", onCompleteScope:" + String(onCompleteScope))); }; if (onOverwriteScope){ _local1 = (_local1 + (", onOverwriteScope:" + String(onOverwriteScope))); }; if (onErrorScope){ _local1 = (_local1 + (", onErrorScope:" + String(onErrorScope))); }; if (rounded){ _local1 = (_local1 + (", rounded:" + String(rounded))); }; if (isPaused){ _local1 = (_local1 + (", isPaused:" + String(isPaused))); }; if (timePaused){ _local1 = (_local1 + (", timePaused:" + String(timePaused))); }; if (isCaller){ _local1 = (_local1 + (", isCaller:" + String(isCaller))); }; if (count){ _local1 = (_local1 + (", count:" + String(count))); }; if (timesCalled){ _local1 = (_local1 + (", timesCalled:" + String(timesCalled))); }; if (waitFrames){ _local1 = (_local1 + (", waitFrames:" + String(waitFrames))); }; if (hasStarted){ _local1 = (_local1 + (", hasStarted:" + String(hasStarted))); }; _local1 = (_local1 + "]\n"); return (_local1); } public static function makePropertiesChain(_arg1:Object):Object{ var _local2:Object; var _local3:Object; var _local4:Object; var _local5:Object; var _local6:Number; var _local7:Number; var _local8:Number; _local2 = _arg1.base; if (_local2){ _local3 = {}; if ((_local2 is Array)){ _local4 = []; _local8 = 0; while (_local8 < _local2.length) { _local4.push(_local2[_local8]); _local8++; }; } else { _local4 = [_local2]; }; _local4.push(_arg1); _local6 = _local4.length; _local7 = 0; while (_local7 < _local6) { if (_local4[_local7]["base"]){ _local5 = AuxFunctions.concatObjects(makePropertiesChain(_local4[_local7]["base"]), _local4[_local7]); } else { _local5 = _local4[_local7]; }; _local3 = AuxFunctions.concatObjects(_local3, _local5); _local7++; }; if (_local3["base"]){ delete _local3["base"]; }; return (_local3); //unresolved jump }; return (_arg1); } } }//package caurina.transitions
Section 11
//AABRDetector (org.generalrelativity.foam.dynamics.collision.coarse.AABRDetector) package org.generalrelativity.foam.dynamics.collision.coarse { import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.collision.geom.*; import org.generalrelativity.foam.dynamics.collision.fine.sat.*; import org.generalrelativity.foam.dynamics.enum.*; import flash.utils.*; public class AABRDetector implements ICoarseCollisionDetector { private var _staticAABRCache:Dictionary; private var _dynamicLength:int; private var _factory:ICollisionFactory; private var _dynamicCollidables:Array; private var _staticCollidables:Array; private var _dynamicAABRCache:Dictionary; private var _collidablesLength:int; public function AABRDetector(){ _staticAABRCache = new Dictionary(true); _dynamicAABRCache = new Dictionary(true); _staticCollidables = new Array(); _dynamicCollidables = new Array(); _factory = new SATCollisionFactory(); } public function getCandidates():Array{ var _local1:Array; var _local2:AABR; var _local3:AABR; var _local4:int; var _local5:int; var _local6:Array; _dynamicAABRCache = new Dictionary(true); _local1 = new Array(); _local4 = -1; _local6 = _dynamicCollidables.concat(_staticCollidables); while (++_local4 < _dynamicLength) { _local2 = getBoundedAABR(_dynamicCollidables[_local4]); _local5 = _local4; while (++_local5 < _collidablesLength) { _local3 = getBoundedAABR(_local6[_local5]); if (_local2.hasCollision(_local3)){ _local1.push(_factory.getCollisionDetector(_local6[_local4], _local6[_local5])); }; }; }; return (_local1); } private function getBoundedAABR(_arg1:IBody):AABR{ var _local2:AABR; if (_dynamicAABRCache[_arg1]){ return (AABR(_dynamicAABRCache[_arg1])); }; if (_staticAABRCache[_arg1]){ return (AABR(_staticAABRCache[_arg1])); }; _local2 = new AABR(); _local2.bound(_arg1); return (_local2); } public function set factory(_arg1:ICollisionFactory):void{ _factory = _arg1; } public function removeCollidable(_arg1:ISimulatable):void{ var _local2:int; _local2 = _dynamicCollidables.indexOf(_arg1); if (_local2 > -1){ _dynamicCollidables.splice(_dynamicCollidables.indexOf(_arg1), 1); } else { _local2 = _staticCollidables.indexOf(_arg1); if (_local2 > -1){ _staticCollidables.splice(_staticCollidables.indexOf(_arg1), 1); }; }; _dynamicLength = _dynamicCollidables.length; _collidablesLength = (_dynamicLength + _staticCollidables.length); } public function addCollidable(_arg1:ISimulatable):void{ if (_arg1.mass == Simplification.INFINITE_MASS){ _staticCollidables.push(_arg1); } else { _dynamicCollidables.push(_arg1); _dynamicLength++; }; _collidablesLength++; } public function getDynamicCollidables():Array{ return (_dynamicCollidables); } } }//package org.generalrelativity.foam.dynamics.collision.coarse
Section 12
//CollisionType (org.generalrelativity.foam.dynamics.collision.enum.CollisionType) package org.generalrelativity.foam.dynamics.collision.enum { public class CollisionType { public static const CIRCLE:String = "circle"; public static const ABSTRACT_PARTICLE:String = "abstract_particle"; public static const CUBIC_BEZIER_CURVE:String = "cubic_bezier_curve"; public static const RIGID_BODY:String = "rigid_body"; } }//package org.generalrelativity.foam.dynamics.collision.enum
Section 13
//AxisProjection (org.generalrelativity.foam.dynamics.collision.fine.sat.AxisProjection) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class AxisProjection { public var min:Number; public var max:Number; public function AxisProjection(_arg1:IBody, _arg2:Vector){ project(_arg1, _arg2); } protected function project(_arg1:IBody, _arg2:Vector):void{ var _local3:RotationMatrix; var _local4:Number; var _local5:Number; _local3 = _arg1.rotation; _local4 = _arg2.dot(_local3.getVectorProduct(Vector(_arg1.vertices[0])).plus(_arg1.position)); min = _local4; max = _local4; _local5 = 0; while (++_local5 < _arg1.vertices.length) { _local4 = _arg2.dot(_local3.getVectorProduct(Vector(_arg1.vertices[_local5])).plus(_arg1.position)); if (_local4 < min){ min = _local4; } else { if (_local4 > max){ max = _local4; }; }; }; } public function getDistance(_arg1:AxisProjection):Number{ if (min < _arg1.min){ return ((_arg1.min - max)); }; return ((min - _arg1.max)); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 14
//BezierDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.BezierDetector) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.element.body.*; public class BezierDetector implements IFineCollisionDetector { protected var detectors:Array; protected var body2:IBody; protected var curve:CubicBezierCurve; public function BezierDetector(_arg1:CubicBezierCurve, _arg2:IBody){ this.curve = _arg1; this.body2 = _arg2; } public function getContacts():Array{ var _local1:Array; _local1 = new Array(); while (detectors.length) { _local1 = _local1.concat(IFineCollisionDetector(detectors.pop()).getContacts()); }; return (_local1); } public function hasCollision():Boolean{ var _local1:IFineCollisionDetector; var _local2:IBody; detectors = new Array(); for each (_local2 in curve.lines) { if ((body2 is Circle)){ _local1 = new CirclePolygonDetector(Circle(body2), _local2); } else { _local1 = new PolygonPolygonDetector(_local2, body2); }; if (_local1.hasCollision()){ detectors.push(_local1); }; }; return ((detectors.length > 0)); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 15
//CircleAxisProjection (org.generalrelativity.foam.dynamics.collision.fine.sat.CircleAxisProjection) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.element.body.*; public class CircleAxisProjection extends AxisProjection { public function CircleAxisProjection(_arg1:Circle, _arg2:Vector){ super(_arg1, _arg2); } override protected function project(_arg1:IBody, _arg2:Vector):void{ var _local3:Circle; var _local4:Number; _local3 = Circle(_arg1); _local4 = _arg2.dot(_local3.position); min = (_local4 - _local3.radius); max = (_local4 + _local3.radius); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 16
//CircleCircleDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.CircleCircleDetector) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.element.body.*; public class CircleCircleDetector implements IFineCollisionDetector { public var circle1:Circle; public var dist:Number; public var circle2:Circle; public function CircleCircleDetector(_arg1:Circle, _arg2:Circle){ this.circle1 = _arg1; this.circle2 = _arg2; } public function getContacts():Array{ var _local1:Vector; var _local2:Number; var _local3:Vector; var _local4:Vector; dist = Math.sqrt(dist); _local1 = circle1.position.minus(circle2.position); _local2 = ((circle1.radius + circle2.radius) - dist); _local1.normalize(); _local3 = _local1.times(_local2); _local3.dividedByEquals((circle1.inverseMass + circle2.inverseMass)); circle1.x = (circle1.x + (_local3.x * circle1.inverseMass)); circle1.y = (circle1.y + (_local3.y * circle1.inverseMass)); circle2.x = (circle2.x - (_local3.x * circle2.inverseMass)); circle2.y = (circle2.y - (_local3.y * circle2.inverseMass)); _local4 = circle1.position.minus(_local1.times(circle1.radius)); return ([new Contact(_local4, circle1, circle2, _local1)]); } public function hasCollision():Boolean{ var _local1:Vector; _local1 = circle1.position.minus(circle2.position); dist = _local1.dot(_local1); return ((dist <= ((circle1.radius + circle2.radius) * (circle1.radius + circle2.radius)))); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 17
//CirclePolygonDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.CirclePolygonDetector) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.element.body.*; public class CirclePolygonDetector implements IFineCollisionDetector { public var body:IBody; public var minDistance:Number; public var penetrationAxis:Vector; public var circle:Circle; public function CirclePolygonDetector(_arg1:Circle, _arg2:IBody){ this.circle = _arg1; this.body = _arg2; } public function getContacts():Array{ var _local1:Vector; var _local2:Vector; var _local3:Vector; _local1 = circle.position.minus(body.position); if (_local1.dot(penetrationAxis) < 0){ penetrationAxis.negate(); }; _local2 = penetrationAxis.times(minDistance); _local2.dividedByEquals((circle.inverseMass + body.inverseMass)); circle.x = (circle.x + (_local2.x * circle.inverseMass)); circle.y = (circle.y + (_local2.y * circle.inverseMass)); body.x = (body.x - (_local2.x * body.inverseMass)); body.y = (body.y - (_local2.y * body.inverseMass)); _local3 = circle.position.minus(penetrationAxis.times(circle.radius)); return ([new Contact(_local3, circle, body, penetrationAxis)]); } public function hasCollision():Boolean{ var _local1:Vector; var _local2:CircleAxisProjection; var _local3:AxisProjection; var _local4:RotationMatrix; var _local5:Array; var _local6:int; var _local7:Number; var _local8:Vector; var _local9:Number; var _local10:Vector; var _local11:Vector; var _local12:Number; var _local13:Vector; var _local14:Number; if ((((circle.inverseMass == 0)) && ((body.inverseMass == 0)))){ return (false); }; _local4 = body.rotation; minDistance = Number.MAX_VALUE; _local5 = body.edges; _local6 = _local5.length; _local7 = -1; while (++_local7 < _local6) { _local1 = _local4.getVectorProduct((_local5[_local7] as Vector)); _local11 = new Vector(-(_local1.y), _local1.x); _local11.normalize(); _local2 = new CircleAxisProjection(circle, _local11); _local3 = new AxisProjection(body, _local11); _local12 = _local2.getDistance(_local3); if (_local12 > 0){ return (false); }; _local12 = Math.abs(_local12); if (_local12 < minDistance){ minDistance = _local12; penetrationAxis = _local11; }; }; _local9 = Number.MAX_VALUE; for each (_local10 in body.vertices) { _local8 = body.rotation.getVectorProduct(_local10).plus(body.position); _local13 = circle.position.minus(_local8); _local14 = ((_local13.x * _local13.x) + (_local13.y * _local13.y)); if (_local14 < _local9){ _local9 = _local14; _local11 = _local13; }; }; _local11.normalize(); _local2 = new CircleAxisProjection(circle, _local11); _local3 = new AxisProjection(body, _local11); _local12 = _local3.getDistance(_local2); if (_local12 > 0){ return (false); }; _local12 = Math.abs(_local12); if (_local12 < minDistance){ minDistance = _local12; penetrationAxis = _local11; }; return (true); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 18
//PointPolygonDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.PointPolygonDetector) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.element.body.*; public class PointPolygonDetector { protected var point:Vector; protected var body:IBody; protected static const EPSILON:Number = 15; public function PointPolygonDetector(_arg1:IBody, _arg2:Vector){ this.body = _arg1; this.point = _arg2; } public function hasCollision():Boolean{ var _local1:Vector; var _local2:RotationMatrix; var _local3:int; var _local4:Vector; var _local5:AxisProjection; var _local6:Number; var _local7:Number; var _local8:Number; if ((body is Circle)){ _local8 = point.minus(body.position).magnitude; if (_local8 <= Circle(body).radius){ return (true); }; return (false); }; _local2 = body.rotation; _local3 = body.edges.length; _local7 = -1; while (++_local7 < _local3) { _local1 = _local2.getVectorProduct((body.edges[_local7] as Vector)); _local4 = new Vector(-(_local1.y), _local1.x); _local4.normalize(); _local5 = new AxisProjection(body, _local4); _local6 = _local4.dot(point); if (((((_local6 + PointPolygonDetector.EPSILON) < _local5.min)) || (((_local6 - PointPolygonDetector.EPSILON) > _local5.max)))){ return (false); }; }; _local4 = point.minus(body.position); _local4.normalize(); _local5 = new AxisProjection(body, _local4); _local6 = _local4.dot(point); if (((((_local6 + PointPolygonDetector.EPSILON) < _local5.min)) || (((_local6 - PointPolygonDetector.EPSILON) > _local5.max)))){ return (false); }; return (true); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 19
//PolygonPolygonDetector (org.generalrelativity.foam.dynamics.collision.fine.sat.PolygonPolygonDetector) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.collision.*; import flash.utils.*; public class PolygonPolygonDetector implements IFineCollisionDetector { public var penetrationAxis:Vector; public var body2:IBody; public var body1:IBody; private var swapBodies:Boolean; public var minDistance:Number; public static const EPSILON:Number = 0.1; public function PolygonPolygonDetector(_arg1:IBody, _arg2:IBody){ this.body1 = _arg1; this.body2 = _arg2; swapBodies = true; } public function getContacts():Array{ var _local1:Vector; var _local2:Vector; var _local3:Number; var _local4:Array; var _local5:Vector; var _local6:RotationMatrix; var _local7:Vector; var _local8:Array; var _local9:Array; var _local10:IBody; var _local11:Vector; var _local12:Number; var _local13:Vector; var _local14:Dictionary; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Array; if (swapBodies){ _local10 = body1; body1 = body2; body2 = _local10; }; _local1 = body1.position.minus(body2.position); if (_local1.dot(penetrationAxis) < 0){ penetrationAxis.negate(); }; _local2 = penetrationAxis.times(minDistance); _local2.dividedByEquals((body1.inverseMass + body2.inverseMass)); body1.x = (body1.x + (_local2.x * body1.inverseMass)); body1.y = (body1.y + (_local2.y * body1.inverseMass)); body2.x = (body2.x - (_local2.x * body2.inverseMass)); body2.y = (body2.y - (_local2.y * body2.inverseMass)); _local3 = Number.MAX_VALUE; _local5 = penetrationAxis.clone(); _local6 = body1.rotation; for each (_local7 in body1.vertices) { _local11 = _local6.getVectorProduct(_local7).plus(body1.position); _local12 = _local5.dot(_local11); if (_local12 < (_local3 + PolygonPolygonDetector.EPSILON)){ if (Math.abs((_local3 - _local12)) < PolygonPolygonDetector.EPSILON){ _local4 = [_local4[0], _local11]; } else { _local4 = [_local11]; _local3 = _local12; }; }; }; if (_local4.length == 1){ return ([new Contact(_local4[0], body1, body2, penetrationAxis)]); }; _local3 = Number.MAX_VALUE; _local5.negate(); _local6 = body2.rotation; for each (_local7 in body2.vertices) { _local11 = _local6.getVectorProduct(_local7).plus(body2.position); _local12 = _local5.dot(_local11); if (_local12 < (_local3 + PolygonPolygonDetector.EPSILON)){ if (Math.abs((_local3 - _local12)) < PolygonPolygonDetector.EPSILON){ _local8 = [_local8[0], _local11]; } else { _local8 = [_local11]; _local3 = _local12; }; }; }; _local9 = new Array(); if (_local8.length == 2){ _local13 = penetrationAxis.getPerp().getUnit(); _local14 = new Dictionary(true); _local15 = _local13.dot((_local4[0] as Vector)); _local16 = _local13.dot((_local4[1] as Vector)); _local17 = _local13.dot((_local8[0] as Vector)); _local18 = _local13.dot((_local8[1] as Vector)); _local14[_local15] = _local4[0]; _local14[_local16] = _local4[1]; _local14[_local17] = _local8[0]; _local14[_local18] = _local8[1]; _local19 = [_local15, _local16, _local17, _local18]; _local19.sort(Array.DESCENDING); _local9.push(new Contact(_local14[_local19[1]], body1, body2, penetrationAxis), new Contact(_local14[_local19[2]], body1, body2, penetrationAxis)); } else { _local9.push(new Contact(_local8[0], body1, body2, penetrationAxis)); }; return (_local9); } public function hasCollision():Boolean{ var _local1:Vector; var _local2:AxisProjection; var _local3:AxisProjection; var _local4:RotationMatrix; var _local5:Array; var _local6:int; var _local7:Number; var _local8:Vector; var _local9:Number; if ((((body1.inverseMass == 0)) && ((body2.inverseMass == 0)))){ return (false); }; _local4 = body1.rotation; minDistance = Number.MAX_VALUE; _local5 = body1.edges.concat(body2.edges); _local6 = _local5.length; _local7 = -1; while (++_local7 < _local6) { if (_local7 == body1.edges.length){ _local4 = body2.rotation; }; _local1 = _local4.getVectorProduct((_local5[_local7] as Vector)); _local8 = new Vector(-(_local1.y), _local1.x); _local8.normalize(); _local2 = new AxisProjection(body1, _local8); _local3 = new AxisProjection(body2, _local8); _local9 = _local2.getDistance(_local3); if (_local9 > 0){ return (false); }; _local9 = ((_local9 < 0)) ? -(_local9) : _local9; if (_local9 < minDistance){ minDistance = _local9; penetrationAxis = _local8; if (((swapBodies) && ((_local7 > body1.edges.length)))){ swapBodies = false; }; }; }; return (true); } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 20
//SATCollisionFactory (org.generalrelativity.foam.dynamics.collision.fine.sat.SATCollisionFactory) package org.generalrelativity.foam.dynamics.collision.fine.sat { import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.element.body.*; import org.generalrelativity.foam.dynamics.collision.enum.*; import flash.utils.*; public class SATCollisionFactory implements ICollisionFactory { private var detectorMap:Dictionary; public function SATCollisionFactory(){ buildDetectorMap(); } public function getCollisionDetector(_arg1:ISimulatable, _arg2:ISimulatable):IFineCollisionDetector{ var _local3:Class; _local3 = detectorMap[_arg1.collisionTypeID][_arg2.collisionTypeID]; if ((((_arg2 is Circle)) || ((_arg2 is CubicBezierCurve)))){ return (IFineCollisionDetector(new _local3(_arg2, _arg1))); }; return (IFineCollisionDetector(new _local3(_arg1, _arg2))); } private function buildDetectorMap():void{ var _local1:Dictionary; var _local2:Dictionary; var _local3:Dictionary; detectorMap = new Dictionary(true); _local1 = new Dictionary(true); _local1[CollisionType.CIRCLE] = CirclePolygonDetector; _local1[CollisionType.CUBIC_BEZIER_CURVE] = BezierDetector; _local1[CollisionType.RIGID_BODY] = PolygonPolygonDetector; _local2 = new Dictionary(true); _local2[CollisionType.RIGID_BODY] = CirclePolygonDetector; _local2[CollisionType.CIRCLE] = CircleCircleDetector; _local2[CollisionType.CUBIC_BEZIER_CURVE] = BezierDetector; _local3 = new Dictionary(true); _local3[CollisionType.RIGID_BODY] = BezierDetector; _local3[CollisionType.CIRCLE] = BezierDetector; detectorMap[CollisionType.RIGID_BODY] = _local1; detectorMap[CollisionType.CIRCLE] = _local2; detectorMap[CollisionType.CUBIC_BEZIER_CURVE] = _local3; } } }//package org.generalrelativity.foam.dynamics.collision.fine.sat
Section 21
//AABR (org.generalrelativity.foam.dynamics.collision.geom.AABR) package org.generalrelativity.foam.dynamics.collision.geom { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.element.body.*; public class AABR { public var minX:Number; public var minY:Number; public var maxX:Number; public var maxY:Number; private function updateBounds(_arg1:Vector):void{ if (_arg1.x < minX){ minX = _arg1.x; } else { if (_arg1.x > maxX){ maxX = _arg1.x; }; }; if (_arg1.y < minY){ minY = _arg1.y; } else { if (_arg1.y > maxY){ maxY = _arg1.y; }; }; } public function hasCollision(_arg1:AABR):Boolean{ if (maxX < _arg1.minX){ return (false); }; if (maxY < _arg1.minY){ return (false); }; if (_arg1.maxX < minX){ return (false); }; if (_arg1.maxY < minY){ return (false); }; return (true); } public function bound(_arg1:IBody):void{ var _local2:Number; var _local3:RotationMatrix; var _local4:int; var _local5:Vector; if ((_arg1 is Circle)){ _local2 = Circle(_arg1).radius; minX = (_arg1.x - _local2); maxX = (_arg1.x + _local2); minY = (_arg1.y - _local2); maxY = (_arg1.y + _local2); } else { minX = (maxX = _arg1.x); minY = (maxY = _arg1.y); _local3 = _arg1.rotation; _local4 = -1; for each (_local5 in _arg1.vertices) { updateBounds(_arg1.position.plus(_local3.getVectorProduct(_local5))); }; }; } } }//package org.generalrelativity.foam.dynamics.collision.geom
Section 22
//CollisionResolver (org.generalrelativity.foam.dynamics.collision.CollisionResolver) package org.generalrelativity.foam.dynamics.collision { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class CollisionResolver { public static function resolve(_arg1:Array):void{ var _local2:IBody; var _local3:IBody; var _local4:Vector; var _local5:Vector; var _local6:Number; var _local7:Boolean; var _local8:Contact; var _local9:Vector; var _local10:Vector; var _local11:Vector; var _local12:Vector; var _local13:Number; var _local14:Number; var _local15:Number; var _local16:Vector; var _local17:Vector; var _local18:Vector; var _local19:Number; var _local20:Number; var _local21:Number; var _local22:Vector; var _local23:Number; var _local24:Vector; var _local25:Number; var _local26:Vector; var _local27:Number; var _local28:Number; var _local29:Number; _local6 = 0; _local7 = false; for each (_local8 in _arg1) { _local2 = _local8.body1; _local3 = _local8.body2; if (_local2.foamLabel == 2){ if (_local3.foamLabel == 3){ _local4 = _local2.velocity; if ((((_local4.x > 3)) || ((_local4.y > 3)))){ _local3.isAlive = false; }; }; } else { if (_local2.foamLabel == 3){ if (_local3.foamLabel == 2){ _local4 = _local3.velocity; if ((((_local4.x > 3)) || ((_local4.y > 3)))){ _local2.isAlive = false; }; }; }; }; _local9 = _local8.position.minus(_local8.body1.position); _local10 = _local8.position.minus(_local8.body2.position); _local11 = _local9.getPerp(); _local12 = _local10.getPerp(); _local13 = _local11.dot(_local8.normal); _local14 = _local12.dot(_local8.normal); _local15 = _local8.normal.dot(_local8.normal.times((_local2.inverseMass + _local3.inverseMass))); _local15 = (_local15 + ((_local13 * _local13) * _local2.inverseI)); _local15 = (_local15 + ((_local14 * _local14) * _local3.inverseI)); _local16 = _local11.times(_local2.av).plus(_local2.velocity); _local17 = _local12.times(_local3.av).plus(_local3.velocity); _local18 = _local16.minus(_local17); _local19 = _local18.dot(_local8.normal); _local20 = ((_local2.elasticity + _local3.elasticity) * 0.5); _local21 = ((-((1 + _local20)) * _local19) / _local15); _local22 = _local8.normal.times((_local21 * _local2.inverseMass)); _local23 = (_local11.dot(_local8.normal.times(_local21)) * _local2.inverseI); _local24 = _local8.normal.times((-(_local21) * _local3.inverseMass)); _local25 = (_local12.dot(_local8.normal.times(-(_local21))) * _local3.inverseI); _local26 = _local8.normal.getPerp(); _local27 = _local11.dot(_local26); _local28 = _local12.dot(_local26); _local15 = _local26.dot(_local26.times((_local2.inverseMass + _local3.inverseMass))); _local15 = (_local15 + ((_local27 * _local27) * _local2.inverseI)); _local15 = (_local15 + ((_local28 * _local28) * _local3.inverseI)); _local29 = _local18.dot(_local26); _local21 = (((-(_local29) / _local15) * (_local2.friction + _local3.friction)) * 0.5); _local22.plusEquals(_local26.times((_local21 * _local2.inverseMass))); _local23 = (_local23 + (_local11.dot(_local26.times(_local21)) * _local2.inverseI)); _local24.plusEquals(_local26.times((-(_local21) * _local3.inverseMass))); _local25 = (_local25 + (_local12.dot(_local26.times(-(_local21))) * _local3.inverseI)); _local2.vx = (_local2.vx + _local22.x); _local2.vy = (_local2.vy + _local22.y); _local2.av = (_local2.av + _local23); _local3.vx = (_local3.vx + _local24.x); _local3.vy = (_local3.vy + _local24.y); _local3.av = (_local3.av + _local25); if (_local2.foamLabel == 1){ _local4 = _local22; _local4.x = Math.abs(_local4.x); _local4.y = Math.abs(_local4.y); if ((((_local4.x > 9)) || ((_local4.y > 9)))){ if (!_local7){ _local7 = true; if (_local4.x > 9){ _local6 = _local4.x; }; if (_local4.y > 9){ if (_local4.y > _local6){ _local6 = _local4.y; }; }; _local6 = (_local6 / 2); _local2.lifeLeft = (_local2.lifeLeft - _local6); if (_local2.lifeLeft < 0){ _local2.lifeLeft = 0; }; }; }; } else { if (_local3.foamLabel == 1){ _local4 = _local24; _local4.x = Math.abs(_local4.x); _local4.y = Math.abs(_local4.y); if ((((_local4.x > 9)) || ((_local4.y > 9)))){ if (!_local7){ _local7 = true; if (_local4.x > 9){ _local6 = _local4.x; }; if (_local4.y > 9){ if (_local4.y > _local6){ _local6 = _local4.y; }; }; _local6 = (_local6 / 2); _local3.lifeLeft = (_local3.lifeLeft - _local6); if (_local3.lifeLeft < 0){ _local3.lifeLeft = 0; }; }; }; }; }; }; } } }//package org.generalrelativity.foam.dynamics.collision
Section 23
//Contact (org.generalrelativity.foam.dynamics.collision.Contact) package org.generalrelativity.foam.dynamics.collision { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class Contact { public var normal:Vector; public var position:Vector; public var body2:IBody; public var body1:IBody; public function Contact(_arg1:Vector, _arg2:IBody, _arg3:IBody, _arg4:Vector){ this.position = _arg1; this.body1 = _arg2; this.body2 = _arg3; this.normal = _arg4; } } }//package org.generalrelativity.foam.dynamics.collision
Section 24
//ICoarseCollisionDetector (org.generalrelativity.foam.dynamics.collision.ICoarseCollisionDetector) package org.generalrelativity.foam.dynamics.collision { import org.generalrelativity.foam.dynamics.element.*; public interface ICoarseCollisionDetector { function addCollidable(_arg1:ISimulatable):void; function set factory(_arg1:ICollisionFactory):void; function removeCollidable(_arg1:ISimulatable):void; function getCandidates():Array; function getDynamicCollidables():Array; } }//package org.generalrelativity.foam.dynamics.collision
Section 25
//ICollisionFactory (org.generalrelativity.foam.dynamics.collision.ICollisionFactory) package org.generalrelativity.foam.dynamics.collision { import org.generalrelativity.foam.dynamics.element.*; public interface ICollisionFactory { function getCollisionDetector(_arg1:ISimulatable, _arg2:ISimulatable):IFineCollisionDetector; } }//package org.generalrelativity.foam.dynamics.collision
Section 26
//IFineCollisionDetector (org.generalrelativity.foam.dynamics.collision.IFineCollisionDetector) package org.generalrelativity.foam.dynamics.collision { public interface IFineCollisionDetector { function hasCollision():Boolean; function getContacts():Array; } }//package org.generalrelativity.foam.dynamics.collision
Section 27
//Circle (org.generalrelativity.foam.dynamics.element.body.Circle) package org.generalrelativity.foam.dynamics.element.body { import org.generalrelativity.foam.dynamics.enum.*; import org.generalrelativity.foam.dynamics.collision.enum.*; public class Circle extends RigidBody { public var radius:Number; public function Circle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number=100, _arg5:Number=0, _arg6:Number=0, _arg7:Number=0.5, _arg8:Number=0.15, _arg9:Number=0, _arg10:Number=0){ this.radius = _arg3; super(_arg1, _arg2, _arg4, null, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10); } override public function get collisionTypeID():String{ return (CollisionType.CIRCLE); } override protected function calculateInertiaTensor():void{ if (mass == Simplification.INFINITE_MASS){ _I = Simplification.INFINITE_MASS; _inverseI = 0; return; }; _I = ((radius * radius) * mass); _inverseI = (1 / _I); } } }//package org.generalrelativity.foam.dynamics.element.body
Section 28
//CubicBezierCurve (org.generalrelativity.foam.dynamics.element.body.CubicBezierCurve) package org.generalrelativity.foam.dynamics.element.body { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.enum.*; import org.generalrelativity.foam.dynamics.collision.enum.*; public class CubicBezierCurve extends RigidBody { public var lines:Array; protected var anchor1:Vector; protected var height:Number; protected var anchor2:Vector; protected var control1:Vector; protected var control2:Vector; protected var resolution:int; public function CubicBezierCurve(_arg1:Number, _arg2:Number, _arg3:Vector, _arg4:Vector, _arg5:Vector, _arg6:Vector, _arg7:int=7, _arg8:Number=INF, _arg9:Number=0, _arg10:Number=0, _arg11:Number=0, _arg12:Number=0, _arg13:Number=0.2, _arg14:Number=0.15, _arg15:Number=150){ super(_arg1, _arg2, _arg8, null, _arg9, _arg10, _arg13, _arg14, _arg11, _arg12); this.height = _arg15; this.resolution = _arg7; this.control1 = _arg3; this.control2 = _arg5; this.anchor1 = _arg4; this.anchor2 = _arg6; createLines(); } protected function createLines():void{ var _local1:int; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:RigidBody; _local8 = (1 / resolution); _local11 = control1.x; _local12 = control1.y; lines = new Array(); while (++_local1 <= resolution) { _local2 = (_local8 * _local1); _local3 = (_local2 * _local2); _local4 = (_local3 * _local2); _local5 = (1 - _local2); _local6 = ((1 - _local2) * _local5); _local7 = (_local6 * _local5); _local9 = ((((_local7 * control1.x) + (((3 * _local2) * _local6) * anchor1.x)) + (((3 * anchor2.x) * _local3) * _local5)) + (control2.x * _local4)); _local10 = ((((_local7 * control1.y) + (((3 * _local2) * _local6) * anchor1.y)) + (((3 * anchor2.y) * _local3) * _local5)) + (control2.y * _local4)); _local13 = (_local9 - _local11); _local14 = (_local10 - _local12); _local15 = new RigidBody(((x + _local11) + (_local13 / 2)), ((y + _local12) + (_local14 / 2)), Simplification.INFINITE_MASS, [new Vector((_local13 / 2), (_local14 / 2)), new Vector((-(_local13) / 2), (-(_local14) / 2))], 0, 0, 0, 0, friction); _local11 = _local9; _local12 = _local10; lines.push(_local15); }; } override public function get collisionTypeID():String{ return (CollisionType.CUBIC_BEZIER_CURVE); } override protected function calculateInertiaTensor():void{ if (mass == Simplification.INFINITE_MASS){ _I = Simplification.INFINITE_MASS; _inverseI = 0; return; }; _I = ((control1.magnitude * mass) / 3); _I = (_I + ((control2.magnitude * mass) / 3)); _I = (_I + (((anchor1.magnitude * mass) / 3) * 0.5)); _I = (_I + (((anchor2.magnitude * mass) / 3) * 0.5)); _inverseI = (1 / _I); } } }//package org.generalrelativity.foam.dynamics.element.body
Section 29
//RigidBody (org.generalrelativity.foam.dynamics.element.body.RigidBody) package org.generalrelativity.foam.dynamics.element.body { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.ode.*; import org.generalrelativity.foam.util.*; import org.generalrelativity.foam.dynamics.enum.*; import org.generalrelativity.foam.dynamics.collision.enum.*; import org.generalrelativity.foam.dynamics.element.particle.*; public class RigidBody extends SimpleParticle implements IODE, ISimulatable, IBody { protected var _torque:Number; protected var _edges:Array; protected var _vertices:Array; protected var _inverseI:Number; protected var _I:Number; protected var _rotation:RotationMatrix; public function RigidBody(_arg1:Number, _arg2:Number, _arg3:Number=100, _arg4:Array=null, _arg5:Number=0, _arg6:Number=0, _arg7:Number=0.2, _arg8:Number=0.25, _arg9:Number=0, _arg10:Number=0){ if (_arg4){ _vertices = _arg4; _edges = ShapeUtil.getEdges(_arg4); }; super(_arg1, _arg2, _arg5, _arg6, _arg3, _arg7, _arg8, 6); this.q = _arg9; this.av = _arg10; _rotation = new RotationMatrix(_arg9); clearTorque(); calculateInertiaTensor(); } public function get vertices():Array{ return (_vertices); } public function addTorque(_arg1:Number):void{ _torque = (_torque + _arg1); } public function get torque():Number{ return (_torque); } public function get inverseI():Number{ return (_inverseI); } public function get av():Number{ return (_state[5]); } public function get I():Number{ return (_I); } public function getVelocityAtPoint(_arg1:Vector):Vector{ var _local2:Vector; _local2 = _arg1.minus(position).getPerp(); _local2.normalize(); return (velocity.plus(_local2.times(av))); } public function get edges():Array{ return (_edges); } public function set av(_arg1:Number):void{ _state[5] = _arg1; } public function get q():Number{ return (_state[4]); } override public function getDerivative(_arg1:Array, _arg2:Array):void{ this._state = _arg1; accumulateForces(); _arg2[0] = _arg1[2]; _arg2[1] = _arg1[3]; _arg2[2] = (_force.x * _inverseMass); _arg2[3] = (_force.y * _inverseMass); _arg2[4] = _arg1[5]; _arg2[5] = (_torque * _inverseI); clearForces(); clearTorque(); } public function get rotation():RotationMatrix{ if (_rotation.theta != q){ _rotation = new RotationMatrix(q); }; return (_rotation); } override public function get collisionTypeID():String{ return (CollisionType.RIGID_BODY); } public function clearTorque():void{ _torque = 0; } public function set q(_arg1:Number):void{ _state[4] = _arg1; } protected function calculateInertiaTensor():void{ var _local1:Number; var _local2:Vector; if (mass == Simplification.INFINITE_MASS){ _I = Simplification.INFINITE_MASS; _inverseI = 0; return; }; _I = 0; _local1 = (mass / _vertices.length); for each (_local2 in _vertices) { _I = (_I + (_local2.dot(_local2) * _local1)); }; _inverseI = (1 / _I); } public function addForceAtPoint(_arg1:Vector, _arg2:Vector):void{ addForce(_arg2); addTorque(_arg1.getPerp().dot(_arg2)); } } }//package org.generalrelativity.foam.dynamics.element.body
Section 30
//SimpleParticle (org.generalrelativity.foam.dynamics.element.particle.SimpleParticle) package org.generalrelativity.foam.dynamics.element.particle { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.force.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.ode.*; import org.generalrelativity.foam.util.*; import org.generalrelativity.foam.dynamics.enum.*; import org.generalrelativity.foam.dynamics.collision.enum.*; public class SimpleParticle implements IODE, ISimulatable { protected var _lifeLeft:int;// = 100 protected var _isAlive:Boolean;// = true protected var _inverseMass:Number; protected var _state:Array; protected var _alreadyDead:Boolean;// = false protected var _generators:Array; protected var _foamLabel:int;// = 0 protected var _mass:Number; protected var _elasticity:Number; protected var _friction:Number; protected var _force:Vector; public function SimpleParticle(_arg1:Number, _arg2:Number, _arg3:Number=0, _arg4:Number=0, _arg5:Number=100, _arg6:Number=0.2, _arg7:Number=0.25, _arg8:uint=4){ _foamLabel = 0; _isAlive = true; _alreadyDead = false; _lifeLeft = 100; super(); _state = new Array(_arg8); _generators = new Array(); this.x = _arg1; this.y = _arg2; this.vx = _arg3; this.vy = _arg4; this.mass = _arg5; this.friction = _arg6; this.elasticity = _arg7; clearForces(); } public function set friction(_arg1:Number):void{ _friction = MathUtil.clamp(0, 1, _arg1); } public function set vy(_arg1:Number):void{ _state[3] = _arg1; } public function get friction():Number{ return (_friction); } public function getDerivative(_arg1:Array, _arg2:Array):void{ this._state = _arg1; accumulateForces(); _arg2[0] = _arg1[2]; _arg2[1] = _arg1[3]; _arg2[2] = (_force.x * inverseMass); _arg2[3] = (_force.y * inverseMass); clearForces(); } public function get state():Array{ return (_state); } public function set vx(_arg1:Number):void{ _state[2] = _arg1; } public function clearForces():void{ _force = new Vector(); } public function set isAlive(_arg1:Boolean):void{ _isAlive = _arg1; } public function get lifeLeft():int{ return (_lifeLeft); } public function get collisionTypeID():String{ return (CollisionType.ABSTRACT_PARTICLE); } public function addForceGenerator(_arg1:IForceGenerator):void{ if (_generators.indexOf(_arg1) == -1){ _generators.push(_arg1); }; } public function set elasticity(_arg1:Number):void{ _elasticity = MathUtil.clamp(0, 1, _arg1); } public function get elasticity():Number{ return (_elasticity); } public function get foamLabel():int{ return (_foamLabel); } public function get position():Vector{ return (new Vector(x, y)); } public function get vx():Number{ return (_state[2]); } public function get vy():Number{ return (_state[3]); } public function get inverseMass():Number{ return (_inverseMass); } public function set alreadyDead(_arg1:Boolean):void{ _alreadyDead = _arg1; } public function addForce(_arg1:Vector):void{ _force.plusEquals(_arg1); } public function removeForceGenerator(_arg1:IForceGenerator):void{ var _local2:int; _local2 = _generators.indexOf(_arg1); if (_local2 > -1){ _generators.splice(_generators.indexOf(_arg1), 1); }; } public function set lifeLeft(_arg1:int):void{ _lifeLeft = _arg1; } public function get alreadyDead():Boolean{ return (_alreadyDead); } public function get velocity():Vector{ return (new Vector(vx, vy)); } public function get isAlive():Boolean{ return (_isAlive); } public function set mass(_arg1:Number):void{ _mass = _arg1; if (_mass == Simplification.INFINITE_MASS){ _inverseMass = 0; } else { _inverseMass = (1 / _arg1); }; } public function accumulateForces():void{ var _local1:IForceGenerator; for each (_local1 in _generators) { _local1.generate(this); }; } public function set x(_arg1:Number):void{ _state[0] = _arg1; } public function set y(_arg1:Number):void{ _state[1] = _arg1; } public function get mass():Number{ return (_mass); } public function get y():Number{ return (_state[1]); } public function get force():Vector{ return (_force); } public function set foamLabel(_arg1:int):void{ _foamLabel = _arg1; } public function get x():Number{ return (_state[0]); } } }//package org.generalrelativity.foam.dynamics.element.particle
Section 31
//IBody (org.generalrelativity.foam.dynamics.element.IBody) package org.generalrelativity.foam.dynamics.element { import org.generalrelativity.foam.math.*; public interface IBody extends ISimulatable { function get rotation():RotationMatrix; function get vertices():Array; function get I():Number; function getVelocityAtPoint(_arg1:Vector):Vector; function get edges():Array; function set av(_arg1:Number):void; function get inverseI():Number; function addTorque(_arg1:Number):void; function set q(_arg1:Number):void; function clearTorque():void; function get q():Number; function addForceAtPoint(_arg1:Vector, _arg2:Vector):void; function get av():Number; } }//package org.generalrelativity.foam.dynamics.element
Section 32
//ISimulatable (org.generalrelativity.foam.dynamics.element.ISimulatable) package org.generalrelativity.foam.dynamics.element { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.force.*; public interface ISimulatable { function get y():Number; function get vx():Number; function get isAlive():Boolean; function set vx(_arg1:Number):void; function set lifeLeft(_arg1:int):void; function set y(_arg1:Number):void; function get inverseMass():Number; function removeForceGenerator(_arg1:IForceGenerator):void; function set isAlive(_arg1:Boolean):void; function set alreadyDead(_arg1:Boolean):void; function addForce(_arg1:Vector):void; function get vy():Number; function set vy(_arg1:Number):void; function addForceGenerator(_arg1:IForceGenerator):void; function get alreadyDead():Boolean; function get velocity():Vector; function get lifeLeft():int; function clearForces():void; function get collisionTypeID():String; function set mass(_arg1:Number):void; function get position():Vector; function accumulateForces():void; function get force():Vector; function set x(_arg1:Number):void; function set elasticity(_arg1:Number):void; function get mass():Number; function get x():Number; function get elasticity():Number; function get friction():Number; function set friction(_arg1:Number):void; function set foamLabel(_arg1:int):void; function get foamLabel():int; } }//package org.generalrelativity.foam.dynamics.element
Section 33
//Simplification (org.generalrelativity.foam.dynamics.enum.Simplification) package org.generalrelativity.foam.dynamics.enum { public class Simplification { public static const INFINITE_MASS:Number = INF; } }//package org.generalrelativity.foam.dynamics.enum
Section 34
//Bungee (org.generalrelativity.foam.dynamics.force.spring.Bungee) package org.generalrelativity.foam.dynamics.force.spring { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class Bungee extends Spring { public function Bungee(_arg1:ISimulatable, _arg2:ISimulatable, _arg3:Number=0.01, _arg4:Number=0.4){ super(_arg1, _arg2, _arg3, _arg4); } override public function generate(_arg1:ISimulatable):void{ var _local2:Vector; var _local3:Number; _local2 = new Vector((element1.x - element2.x), (element1.y - element2.y)); _local3 = _local2.magnitude; if (_local3 <= _restLength){ return; }; _force = _local2.times((-(k) * (_local3 - _restLength))); _force.minusEquals(new Vector(element1.vx, element1.vy).times(damp)); element1.addForce(_force); } } }//package org.generalrelativity.foam.dynamics.force.spring
Section 35
//MouseSpring (org.generalrelativity.foam.dynamics.force.spring.MouseSpring) package org.generalrelativity.foam.dynamics.force.spring { import flash.display.*; import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.force.*; import org.generalrelativity.foam.dynamics.element.*; public class MouseSpring extends SimpleForceGenerator implements IForceGenerator { protected var body:IBody; protected var displayObject:DisplayObject; protected var k:Number; protected var damp:Number; protected var point:Vector; protected var restLength:Number; public function MouseSpring(_arg1:IBody, _arg2:Vector, _arg3:DisplayObject){ this.body = _arg1; this.point = _arg1.rotation.getTransposeVectorProduct(_arg2); this.displayObject = _arg3; restLength = 40; k = 0.001; damp = 0.3; _arg1.addForceGenerator(this); } public function getPointInWorldSpace():Vector{ var _local1:RotationMatrix; var _local2:Vector; _local1 = body.rotation; _local2 = _local1.getVectorProduct(point); return (_local2.plus(body.position)); } public function destroy():void{ body.removeForceGenerator(this); } override public function generate(_arg1:ISimulatable):void{ var _local2:RotationMatrix; var _local3:Vector; var _local4:Vector; var _local5:Vector; _local2 = body.rotation; _local3 = _local2.getVectorProduct(point); _local4 = getPointInWorldSpace(); _local5 = new Vector((_local4.x - displayObject.mouseX), (_local4.y - displayObject.mouseY)); if (_local5.magnitude < restLength){ return; }; _force = _local5.times((-(k) * (_local5.magnitude - restLength))); _force.minusEquals(body.velocity.times(damp)); body.addForceAtPoint(_local3, _force); } } }//package org.generalrelativity.foam.dynamics.force.spring
Section 36
//RigidBodyBungee (org.generalrelativity.foam.dynamics.force.spring.RigidBodyBungee) package org.generalrelativity.foam.dynamics.force.spring { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class RigidBodyBungee extends RigidBodySpring { public function RigidBodyBungee(_arg1:IBody, _arg2:Vector, _arg3:IBody, _arg4:Vector, _arg5:Number=0.01, _arg6:Number=0.01){ super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6); } override public function clone(_arg1:Boolean=true):Spring{ if (_arg1){ return (new RigidBodyBungee(IBody(element2), point2, IBody(element1), point1, k, damp)); }; return (new RigidBodyBungee(IBody(element1), point1, IBody(element2), point2, k, damp)); } override public function generate(_arg1:ISimulatable):void{ var _local2:RotationMatrix; var _local3:Vector; var _local4:Vector; var _local5:RotationMatrix; var _local6:Vector; var _local7:Vector; var _local8:Vector; var _local9:Number; _local2 = IBody(element1).rotation; _local3 = _local2.getVectorProduct(point1); _local4 = _local3.plus(element1.position); _local5 = IBody(element2).rotation; _local6 = _local5.getVectorProduct(point2); _local7 = _local6.plus(element2.position); _local8 = new Vector((_local4.x - _local7.x), (_local4.y - _local7.y)); _local9 = _local8.magnitude; if (_local9 <= _restLength){ return; }; _force = _local8.times((-(k) * (_local8.magnitude - _restLength))); _force.minusEquals(IBody(element1).getVelocityAtPoint(_local3).times(damp)); IBody(element1).addForceAtPoint(_local3, _force); } } }//package org.generalrelativity.foam.dynamics.force.spring
Section 37
//RigidBodySpring (org.generalrelativity.foam.dynamics.force.spring.RigidBodySpring) package org.generalrelativity.foam.dynamics.force.spring { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.util.*; public class RigidBodySpring extends Spring { protected var point1:Vector; protected var point2:Vector; public function RigidBodySpring(_arg1:IBody, _arg2:Vector, _arg3:IBody, _arg4:Vector, _arg5:Number=0.01, _arg6:Number=0.01){ var _local7:Vector; var _local8:Vector; super(_arg1, _arg3, _arg5, _arg6); this.point1 = _arg2; this.point2 = _arg4; _local7 = _arg1.rotation.getVectorProduct(_arg2); _local8 = _arg3.rotation.getVectorProduct(_arg4); restLength = MathUtil.distance((_arg1.x + _local7.x), (_arg3.x + _local8.x), (_arg1.y + _local7.y), (_arg3.y + _local8.y)); } override public function getPoint1InWorldSpace():Vector{ var _local1:RotationMatrix; var _local2:Vector; _local1 = IBody(element1).rotation; _local2 = _local1.getVectorProduct(point1); return (_local2.plus(element1.position)); } override public function getPoint2InWorldSpace():Vector{ var _local1:RotationMatrix; var _local2:Vector; _local1 = IBody(element2).rotation; _local2 = _local1.getVectorProduct(point2); return (_local2.plus(element2.position)); } override public function clone(_arg1:Boolean=true):Spring{ if (_arg1){ return (new RigidBodySpring(IBody(element2), point2, IBody(element1), point1, k, damp)); }; return (new RigidBodySpring(IBody(element1), point1, IBody(element2), point2, k, damp)); } override public function generate(_arg1:ISimulatable):void{ var _local2:RotationMatrix; var _local3:Vector; var _local4:Vector; var _local5:RotationMatrix; var _local6:Vector; var _local7:Vector; var _local8:Vector; _local2 = IBody(element1).rotation; _local3 = _local2.getVectorProduct(point1); _local4 = _local3.plus(new Vector(element1.x, element1.y)); _local5 = IBody(element2).rotation; _local6 = _local5.getVectorProduct(point2); _local7 = _local6.plus(new Vector(element2.x, element2.y)); _local8 = new Vector((_local4.x - _local7.x), (_local4.y - _local7.y)); _force = _local8.times((-(k) * (_local8.magnitude - _restLength))); _force.minusEquals(IBody(element1).getVelocityAtPoint(_local3).times(damp)); IBody(element1).addForceAtPoint(_local3, _force); } } }//package org.generalrelativity.foam.dynamics.force.spring
Section 38
//Spring (org.generalrelativity.foam.dynamics.force.spring.Spring) package org.generalrelativity.foam.dynamics.force.spring { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.force.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.util.*; public class Spring extends SimpleForceGenerator implements IForceGenerator { protected var damp:Number; protected var element1:ISimulatable; protected var k:Number; protected var element2:ISimulatable; protected var _restLength:Number; public function Spring(_arg1:ISimulatable, _arg2:ISimulatable, _arg3:Number=0.01, _arg4:Number=0.4){ this.element1 = _arg1; this.element2 = _arg2; this.k = _arg3; this.damp = _arg4; _arg1.addForceGenerator(this); restLength = MathUtil.distance(_arg1.x, _arg2.x, _arg1.y, _arg2.y); } public function invert():void{ var _local1:ISimulatable; element1.removeForceGenerator(this); _local1 = ISimulatable(element2); element2 = element1; element1 = _local1; element1.addForceGenerator(this); } public function getPoint1InWorldSpace():Vector{ return (element1.position); } public function getPoint2InWorldSpace():Vector{ return (element2.position); } public function set restLength(_arg1:Number):void{ _restLength = _arg1; } override public function generate(_arg1:ISimulatable):void{ var _local2:Vector; _local2 = new Vector((element1.x - element2.x), (element1.y - element2.y)); _force = _local2.times((-(k) * (_local2.magnitude - _restLength))); _force.minusEquals(new Vector(element1.vx, element1.vy).times(damp)); element1.addForce(_force); } public function clone(_arg1:Boolean=true):Spring{ if (_arg1){ return (new Spring(element2, element1, k, damp)); }; return (new Spring(element1, element2, k, damp)); } public static function createDoubleSidedSpring(_arg1:ISimulatable, _arg2:ISimulatable, _arg3:Number=0.01, _arg4:Number=0.1):void{ var _local5:Spring; _local5 = new Spring(_arg1, _arg2, _arg3, _arg4); _local5 = new Spring(_arg2, _arg1, _arg3, _arg4); } } }//package org.generalrelativity.foam.dynamics.force.spring
Section 39
//Friction (org.generalrelativity.foam.dynamics.force.Friction) package org.generalrelativity.foam.dynamics.force { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class Friction extends SimpleForceGenerator implements IForceGenerator { protected var coefficient:Number; public function Friction(_arg1:Number=0.1){ this.coefficient = _arg1; } override public function generate(_arg1:ISimulatable):void{ var _local2:IBody; _arg1.addForce(new Vector(((-(_arg1.vx) * coefficient) * _arg1.mass), ((-(_arg1.vy) * coefficient) * _arg1.mass))); if ((_arg1 is IBody)){ _local2 = IBody(_arg1); _local2.addTorque(((-(_local2.av) * coefficient) * _local2.I)); }; } } }//package org.generalrelativity.foam.dynamics.force
Section 40
//Gravity (org.generalrelativity.foam.dynamics.force.Gravity) package org.generalrelativity.foam.dynamics.force { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class Gravity extends SimpleForceGenerator implements IForceGenerator { public function Gravity(_arg1:Vector){ super(_arg1); } override public function generate(_arg1:ISimulatable):void{ _arg1.addForce(_force.times(_arg1.mass)); } } }//package org.generalrelativity.foam.dynamics.force
Section 41
//IForceGenerator (org.generalrelativity.foam.dynamics.force.IForceGenerator) package org.generalrelativity.foam.dynamics.force { import org.generalrelativity.foam.dynamics.element.*; public interface IForceGenerator { function generate(_arg1:ISimulatable):void; } }//package org.generalrelativity.foam.dynamics.force
Section 42
//SimpleForceGenerator (org.generalrelativity.foam.dynamics.force.SimpleForceGenerator) package org.generalrelativity.foam.dynamics.force { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; public class SimpleForceGenerator implements IForceGenerator { protected var _force:Vector; public function SimpleForceGenerator(_arg1:Vector=null):void{ _force = _arg1; } public function generate(_arg1:ISimulatable):void{ _arg1.addForce(_force); } } }//package org.generalrelativity.foam.dynamics.force
Section 43
//AbstractSolver (org.generalrelativity.foam.dynamics.ode.solver.AbstractSolver) package org.generalrelativity.foam.dynamics.ode.solver { import org.generalrelativity.foam.dynamics.ode.*; public class AbstractSolver implements IODESolver { protected var _ode:IODE; public function AbstractSolver(_arg1:IODE):void{ _ode = _arg1; } public function get ode():IODE{ return (_ode); } public function step(_arg1:Number):void{ throw (new Error("AbstractSolver.step must be overridden")); } } }//package org.generalrelativity.foam.dynamics.ode.solver
Section 44
//RK4 (org.generalrelativity.foam.dynamics.ode.solver.RK4) package org.generalrelativity.foam.dynamics.ode.solver { import org.generalrelativity.foam.dynamics.ode.*; public class RK4 extends AbstractSolver implements IODESolver { private var k1:Array; private var k3:Array; private var k4:Array; private var k2:Array; public function RK4(_arg1:IODE){ var ode = _arg1; super(ode); try { k1 = new Array(ode.state.length); k2 = new Array(ode.state.length); k3 = new Array(ode.state.length); k4 = new Array(ode.state.length); } catch(error:Error) { k1 = new Array(); k2 = new Array(); k3 = new Array(); k4 = new Array(); }; } override public function step(_arg1:Number):void{ var _local2:Array; var _local3:Array; var _local4:int; _local2 = new Array(_ode.state.length); _local3 = _ode.state; _local4 = -1; _ode.getDerivative(_local3, k1); while (++_local4 < _local3.length) { _local2[_local4] = (_local3[_local4] + ((k1[_local4] * _arg1) * 0.5)); }; _local4 = -1; _ode.getDerivative(_local2, k2); while (++_local4 < _local3.length) { _local2[_local4] = (_local3[_local4] + ((k2[_local4] * _arg1) * 0.5)); }; _local4 = -1; _ode.getDerivative(_local2, k3); while (++_local4 < _local3.length) { _local2[_local4] = (_local3[_local4] + (k3[_local4] * _arg1)); }; _local4 = -1; _ode.getDerivative(_local2, k4); while (++_local4 < _local3.length) { _local3[_local4] = (_local3[_local4] + ((_arg1 * (((k1[_local4] + (2 * k2[_local4])) + (2 * k3[_local4])) + k4[_local4])) / 6)); }; } } }//package org.generalrelativity.foam.dynamics.ode.solver
Section 45
//IODE (org.generalrelativity.foam.dynamics.ode.IODE) package org.generalrelativity.foam.dynamics.ode { public interface IODE { function get state():Array; function getDerivative(_arg1:Array, _arg2:Array):void; } }//package org.generalrelativity.foam.dynamics.ode
Section 46
//IODESolver (org.generalrelativity.foam.dynamics.ode.IODESolver) package org.generalrelativity.foam.dynamics.ode { public interface IODESolver { function get ode():IODE; function step(_arg1:Number):void; } }//package org.generalrelativity.foam.dynamics.ode
Section 47
//PhysicsEngine (org.generalrelativity.foam.dynamics.PhysicsEngine) package org.generalrelativity.foam.dynamics { import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.dynamics.ode.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.collision.fine.sat.*; import org.generalrelativity.foam.dynamics.collision.coarse.*; public class PhysicsEngine { private var _solverIterations:int; private var _odeSolvers:Array; private var _coarseDetector:ICoarseCollisionDetector; private var _numODESolvers:int; public static const SOLVER_ITERATIONS:int = 3; public static const DEFAULT_COARSE_COLLISION_DETECTOR:Class = AABRDetector; public function PhysicsEngine(){ _odeSolvers = new Array(); _solverIterations = PhysicsEngine.SOLVER_ITERATIONS; } public function setCoarseCollisionDetector(_arg1:ICoarseCollisionDetector):void{ _coarseDetector = _arg1; } public function addODESolver(_arg1:IODESolver):void{ _odeSolvers.push(_arg1); _numODESolvers = _odeSolvers.length; } public function removeCollidable(_arg1:ISimulatable):void{ _coarseDetector.removeCollidable(_arg1); } public function addCollidable(_arg1:ISimulatable):void{ if (!_coarseDetector){ _coarseDetector = new PhysicsEngine.DEFAULT_COARSE_COLLISION_DETECTOR(); }; _coarseDetector.addCollidable(_arg1); } public function step(_arg1:Number=1):void{ var _local2:int; var _local3:int; var _local4:Number; _local3 = 0; _local4 = (_arg1 / _solverIterations); while (++_local3 <= _solverIterations) { _local2 = _numODESolvers; while (--_local2 > -1) { IODESolver(_odeSolvers[_local2]).step(_local4); }; if (_coarseDetector){ resolveCollisions(); }; }; } private function resolveCollisions():void{ var _local1:Array; var _local2:IFineCollisionDetector; _local1 = _coarseDetector.getCandidates(); for each (_local2 in _local1) { if (_local2.hasCollision()){ CollisionResolver.resolve(_local2.getContacts()); }; }; } public function set solverIterations(_arg1:int):void{ _solverIterations = Math.max(Math.abs(_arg1), 1); } public function setCollisionFactory(_arg1:ICollisionFactory):void{ _coarseDetector.factory = _arg1; } public function getBodyUnderPoint(_arg1:Vector):IBody{ var _local2:PointPolygonDetector; var _local3:IODESolver; for each (_local3 in _odeSolvers) { if ((_local3.ode is IBody)){ _local2 = new PointPolygonDetector(IBody(_local3.ode), _arg1); if (_local2.hasCollision()){ return (IBody(_local3.ode)); }; }; }; return (null); } public function removeODESolver(_arg1:IODESolver):void{ var _local2:int; _local2 = _odeSolvers.indexOf(_arg1); if (_local2 > -1){ _odeSolvers.splice(_odeSolvers.indexOf(_arg1), 1); }; _numODESolvers = _odeSolvers.length; } } }//package org.generalrelativity.foam.dynamics
Section 48
//RotationMatrix (org.generalrelativity.foam.math.RotationMatrix) package org.generalrelativity.foam.math { public class RotationMatrix { protected var r21:Number; protected var r11:Number; protected var r12:Number; protected var r22:Number; protected var _theta:Number; public function RotationMatrix(_arg1:Number=0){ this.theta = _arg1; } public function get theta():Number{ return (_theta); } public function getTransposeVectorProduct(_arg1:Vector):Vector{ return (new Vector(((r11 * _arg1.x) + (r21 * _arg1.y)), ((r12 * _arg1.x) + (r22 * _arg1.y)))); } public function getVectorProduct(_arg1:Vector):Vector{ return (new Vector(((r11 * _arg1.x) + (r12 * _arg1.y)), ((r21 * _arg1.x) + (r22 * _arg1.y)))); } public function set theta(_arg1:Number):void{ _theta = _arg1; r11 = Math.cos(theta); r21 = Math.sin(theta); r12 = -(r21); r22 = r11; } } }//package org.generalrelativity.foam.math
Section 49
//Vector (org.generalrelativity.foam.math.Vector) package org.generalrelativity.foam.math { public class Vector { public var y:Number; public var x:Number; public function Vector(_arg1:Number=0, _arg2:Number=0){ this.x = _arg1; this.y = _arg2; } public function cross(_arg1:Vector):Number{ return (((x * _arg1.y) - (y * _arg1.x))); } public function dividedBy(_arg1:Number):Vector{ return (new Vector((x / _arg1), (y / _arg1))); } public function times(_arg1:Number):Vector{ return (new Vector((x * _arg1), (y * _arg1))); } public function dot(_arg1:Vector):Number{ return (((x * _arg1.x) + (y * _arg1.y))); } public function crossScalar(_arg1:Number):Vector{ return (new Vector((-(_arg1) * y), (_arg1 * x))); } public function normalize():void{ dividedByEquals(magnitude); } public function minusEquals(_arg1:Vector):void{ x = (x - _arg1.x); y = (y - _arg1.y); } public function get magnitude():Number{ return (Math.sqrt(((x * x) + (y * y)))); } public function negate():void{ x = (x * -1); y = (y * -1); } public function plus(_arg1:Vector):Vector{ return (new Vector((x + _arg1.x), (y + _arg1.y))); } public function clone():Vector{ return (new Vector(x, y)); } public function dividedByEquals(_arg1:Number):void{ x = (x / _arg1); y = (y / _arg1); } public function getAngle(_arg1:Vector):Number{ return (Math.atan2((_arg1.y - y), (_arg1.x - x))); } public function timesEquals(_arg1:Number):void{ x = (x * _arg1); y = (y * _arg1); } public function getPerp():Vector{ return (new Vector(-(y), x)); } public function minus(_arg1:Vector):Vector{ return (new Vector((x - _arg1.x), (y - _arg1.y))); } public function plusEquals(_arg1:Vector):void{ x = (x + _arg1.x); y = (y + _arg1.y); } public function getUnit():Vector{ return (dividedBy(magnitude)); } public static function project(_arg1:Number, _arg2:Number):Vector{ return (new Vector((Math.cos(_arg1) * _arg2), (Math.sin(_arg1) * _arg2))); } } }//package org.generalrelativity.foam.math
Section 50
//MathUtil (org.generalrelativity.foam.util.MathUtil) package org.generalrelativity.foam.util { public class MathUtil { public static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{ if (_arg3 < _arg1){ return (_arg1); }; if (_arg3 > _arg2){ return (_arg2); }; return (_arg3); } public static function distance(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Number{ var _local5:Number; var _local6:Number; _local5 = (_arg1 - _arg2); _local6 = (_arg3 - _arg4); return (Math.sqrt(((_local5 * _local5) + (_local6 * _local6)))); } } }//package org.generalrelativity.foam.util
Section 51
//RenderingUtil (org.generalrelativity.foam.util.RenderingUtil) package org.generalrelativity.foam.util { import flash.display.*; import org.generalrelativity.foam.math.*; public class RenderingUtil { public static function drawHash(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:RotationMatrix, _arg5:int=3, _arg6:int=8):void{ var _local7:Vector; _arg1.lineStyle(1); _local7 = _arg4.getVectorProduct(new Vector(-(_arg5), -(_arg5))); _arg1.moveTo((_arg2 + _local7.x), (_arg3 + _local7.y)); _local7 = _arg4.getVectorProduct(new Vector(_arg5, _arg5)); _arg1.lineTo((_arg2 + _local7.x), (_arg3 + _local7.y)); _local7 = _arg4.getVectorProduct(new Vector(-(_arg5), _arg5)); _arg1.moveTo((_arg2 + _local7.x), (_arg3 + _local7.y)); _local7 = _arg4.getVectorProduct(new Vector(_arg5, -(_arg5))); _arg1.lineTo((_arg2 + _local7.x), (_arg3 + _local7.y)); _arg1.drawCircle(_arg2, _arg3, _arg6); } public static function drawVector(_arg1:Graphics, _arg2:Vector, _arg3:Number=0, _arg4:Number=0, _arg5:Number=3):void{ var _local6:Vector; var _local7:Vector; _arg1.moveTo(_arg3, _arg4); _local6 = _arg2.getUnit().times(_arg5); _local7 = Vector.project((Math.atan2(_arg2.y, _arg2.x) - (Math.PI / 2)), _arg5); _arg1.lineTo((_arg3 + _arg2.x), (_arg4 + _arg2.y)); _arg1.lineTo(((_arg3 + _arg2.x) + _local7.x), ((_arg4 + _arg2.y) + _local7.y)); _arg1.lineTo(((_arg3 + _arg2.x) + _local6.x), ((_arg4 + _arg2.y) + _local6.y)); _local7.negate(); _arg1.lineTo(((_arg3 + _arg2.x) + _local7.x), ((_arg4 + _arg2.y) + _local7.y)); _arg1.lineTo((_arg3 + _arg2.x), (_arg4 + _arg2.y)); _arg1.endFill(); } } }//package org.generalrelativity.foam.util
Section 52
//ShapeUtil (org.generalrelativity.foam.util.ShapeUtil) package org.generalrelativity.foam.util { import org.generalrelativity.foam.math.*; public class ShapeUtil { public static function getEdges(_arg1:Array):Array{ var _local2:Array; var _local3:Vector; var _local4:Vector; var _local5:int; _local2 = new Array(); _local5 = -1; while (++_local5 < _arg1.length) { _local3 = (_arg1[_local5] as Vector); if ((_local5 + 1) == _arg1.length){ _local4 = (_arg1[0] as Vector); } else { _local4 = (_arg1[(_local5 + 1)] as Vector); }; _local2.push(_local3.minus(_local4)); }; return (_local2); } public static function createRectangle(_arg1:Number, _arg2:Number):Array{ return ([new Vector((-(_arg1) / 2), (-(_arg2) / 2)), new Vector((_arg1 / 2), (-(_arg2) / 2)), new Vector((_arg1 / 2), (_arg2 / 2)), new Vector((-(_arg1) / 2), (_arg2 / 2))]); } public static function createSymmetricPolygon(_arg1:int=3, _arg2:Number=50, _arg3:Number=0):Array{ var _local4:Array; var _local5:Number; var _local6:int; _local4 = new Array(); _local5 = (((360 / _arg1) * Math.PI) / 180); _local6 = _arg1; while (_local6--) { _local4.push(new Vector((Math.cos(_arg3) * _arg2), (Math.sin(_arg3) * _arg2))); _arg3 = (_arg3 + _local5); }; return (_local4); } } }//package org.generalrelativity.foam.util
Section 53
//SimpleMap (org.generalrelativity.foam.util.SimpleMap) package org.generalrelativity.foam.util { public class SimpleMap { protected var _values:Array; protected var _keys:Array; public function SimpleMap(){ _keys = new Array(); _values = new Array(); } public function remove(_arg1):void{ var _local2:int; _local2 = getKeyIndex(_arg1); if (_local2 > -1){ _keys.splice(_local2, 1); _values.splice(_local2, 1); }; } public function getKey(_arg1){ var _local2:int; _local2 = getValueIndex(_arg1); if (_local2 > -1){ return (_keys[_local2]); }; } public function get length():int{ return (_keys.length); } public function put(_arg1, _arg2):void{ var _local3:int; _local3 = getKeyIndex(_arg1); if (_local3 > -1){ _values[_local3] = _arg2; } else { _keys.push(_arg1); _values.push(_arg2); }; } public function getKeyIndex(_arg1):int{ return (_keys.indexOf(_arg1)); } public function get values():Array{ return (_values.slice()); } public function has(_arg1):Boolean{ return ((getKeyIndex(_arg1) > -1)); } public function get keys():Array{ return (_keys.slice()); } public function getValueIndex(_arg1):int{ return (_values.indexOf(_arg1)); } public function getValue(_arg1){ var _local2:int; _local2 = getKeyIndex(_arg1); if (_local2 > -1){ return (_values[_local2]); }; } } }//package org.generalrelativity.foam.util
Section 54
//DisplayObjectData (org.generalrelativity.foam.view.DisplayObjectData) package org.generalrelativity.foam.view { import flash.display.*; public dynamic class DisplayObjectData { protected var _displayObject:DisplayObject; public var autoCenter:Boolean; public var offsetX:Number; public var offsetY:Number; public var hasBeenDisplayed:Boolean; public function DisplayObjectData(_arg1, _arg2:Number=0, _arg3:Number=0, _arg4:Boolean=true){ this.displayObject = _arg1; this.offsetX = _arg2; this.offsetY = _arg3; this.autoCenter = _arg4; } public function set displayObject(_arg1):void{ if ((_arg1 is DisplayObject)){ _displayObject = _arg1; } else { if ((_arg1 is Class)){ _displayObject = new (_arg1); } else { throw (new ArgumentError("DisplayObjectData.displayObject must be a DisplayObject or DisplayObject Class")); }; }; } public function get displayObject():DisplayObject{ return (_displayObject); } } }//package org.generalrelativity.foam.view
Section 55
//DisplayObjectFoamRenderer (org.generalrelativity.foam.view.DisplayObjectFoamRenderer) package org.generalrelativity.foam.view { import flash.display.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.util.*; public class DisplayObjectFoamRenderer extends SimpleFoamRenderer implements IFoamRenderer { protected var _containerMap:SimpleMap; public function DisplayObjectFoamRenderer(){ _containerMap = new SimpleMap(); } override public function draw():void{ var _local1:DisplayObject; var _local2:Renderable; staticCanvas.graphics.clear(); currentCanvas = staticCanvas; for each (_local2 in _staticRenderables) { if (_containerMap.has(_local2)){ _local1 = (_containerMap.getValue(_local2) as DisplayObject); if ((_local2.element is ISimulatable)){ _local1.x = ISimulatable(_local2.element).x; _local1.y = ISimulatable(_local2.element).y; if ((_local2.element is IBody)){ _local1.rotation = ((IBody(_local2.element).q * 180) / Math.PI); }; }; } else { proxy(_local2, 0, null); }; }; } override public function addRenderable(_arg1:Renderable):void{ var _local2:Sprite; var _local3:DisplayObject; if (_arg1.data.displayObject){ _local2 = (addChild(new Sprite()) as Sprite); _local3 = _local2.addChild(_arg1.data.displayObject); if (!_arg1.data.hasBeenDisplayed){ if (_arg1.data.offsetX){ _local3.x = (_local3.x + _arg1.data.offsetX); }; if (_arg1.data.offsetY){ _local3.y = (_local3.y + _arg1.data.offsetY); }; if (_arg1.data.autoCenter){ _local3.x = (_local3.x - (_local3.width / 2)); _local3.y = (_local3.y - (_local3.height / 2)); }; _arg1.data.hasBeenDisplayed = true; }; _containerMap.put(_arg1, _local2); }; super.addRenderable(_arg1); draw(); redraw(); } override public function removeRenderable(_arg1:Renderable):void{ var _local2:Sprite; if (_containerMap.has(_arg1)){ _local2 = (_containerMap.getValue(_arg1) as Sprite); removeChild(_local2); }; super.removeRenderable(_arg1); } override public function getDisplayObject(_arg1:Renderable):DisplayObject{ return (this); } override public function redraw():void{ var _local1:DisplayObject; var _local2:Renderable; auxillaryCanvas.graphics.clear(); dynamicCanvas.graphics.clear(); currentCanvas = dynamicCanvas; for each (_local2 in _dynamicRenderables) { if (_containerMap.has(_local2)){ _local1 = (_containerMap.getValue(_local2) as DisplayObject); if ((_local2.element is ISimulatable)){ _local1.x = ISimulatable(_local2.element).x; _local1.y = ISimulatable(_local2.element).y; if ((_local2.element is IBody)){ _local1.rotation = ((IBody(_local2.element).q * 180) / Math.PI); }; }; } else { proxy(_local2, 0, null); }; }; } } }//package org.generalrelativity.foam.view
Section 56
//IFoamRenderer (org.generalrelativity.foam.view.IFoamRenderer) package org.generalrelativity.foam.view { import flash.display.*; public interface IFoamRenderer { function addRenderable(_arg1:Renderable):void; function draw():void; function removeRenderable(_arg1:Renderable):void; function copy(_arg1:IFoamRenderer):void; function get renderables():Array; function getDisplayObject(_arg1:Renderable):DisplayObject; function redraw():void; } }//package org.generalrelativity.foam.view
Section 57
//Renderable (org.generalrelativity.foam.view.Renderable) package org.generalrelativity.foam.view { import flash.utils.*; public class Renderable { public var renderMethodKey:Class; public var data; public var isDynamic:Boolean; public var element; public function Renderable(_arg1, _arg2:Boolean=true, _arg3=null){ this.element = _arg1; this.isDynamic = _arg2; if (_arg3){ this.data = _arg3; } else { this.data = new Object(); }; this.renderMethodKey = (getDefinitionByName(getQualifiedClassName(_arg1)) as Class); } } }//package org.generalrelativity.foam.view
Section 58
//SimpleFoamRenderer (org.generalrelativity.foam.view.SimpleFoamRenderer) package org.generalrelativity.foam.view { import flash.display.*; import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.element.body.*; import org.generalrelativity.foam.dynamics.force.spring.*; import org.generalrelativity.foam.util.*; public class SimpleFoamRenderer extends Sprite implements IFoamRenderer { protected var auxillaryCanvas:Sprite; protected var currentCanvas:Sprite; protected var _dynamicRenderables:Array; protected var staticCanvas:Sprite; protected var dynamicCanvas:Sprite; protected var _staticRenderables:Array; public static const DEFAULT_COLOR:uint = 0xFFFFFF; public function SimpleFoamRenderer(){ staticCanvas = (addChild(new Sprite()) as Sprite); dynamicCanvas = (addChild(new Sprite()) as Sprite); auxillaryCanvas = (addChild(new Sprite()) as Sprite); _staticRenderables = new Array(); _dynamicRenderables = new Array(); } protected function drawMouseSpring(_arg1:MouseSpring):void{ var _local2:Vector; currentCanvas.graphics.lineStyle(1, 0xFF0000); _local2 = _arg1.getPointInWorldSpace(); currentCanvas.graphics.moveTo(_local2.x, _local2.y); currentCanvas.graphics.lineTo(mouseX, mouseY); } protected function drawCircle(_arg1:Circle, _arg2:uint, _arg3:Number, _arg4:int):void{ currentCanvas.graphics.lineStyle(1, 0x333333); currentCanvas.graphics.beginFill(_arg2, _arg3); currentCanvas.graphics.drawCircle(_arg1.x, _arg1.y, _arg1.radius); currentCanvas.graphics.endFill(); currentCanvas.graphics.beginFill(0xFFFFFF); RenderingUtil.drawHash(currentCanvas.graphics, _arg1.x, _arg1.y, _arg1.rotation, _arg4); currentCanvas.graphics.endFill(); } protected function setupRenderDataDefaults(_arg1:Renderable):void{ if (_arg1.data.color == null){ _arg1.data.color = SimpleFoamRenderer.DEFAULT_COLOR; }; if (!_arg1.data.alpha){ _arg1.data.alpha = 0.5; }; if (!_arg1.data.hashSize){ _arg1.data.hashSize = 10; }; } public function draw():void{ currentCanvas = staticCanvas; currentCanvas.graphics.clear(); _staticRenderables.forEach(proxy); redraw(); } protected function drawPolygon(_arg1:RigidBody, _arg2:uint, _arg3:Number):void{ var _local4:RotationMatrix; var _local5:Vector; var _local6:Vector; var _local7:int; currentCanvas.graphics.lineStyle(3, 0x333333, 0.4); currentCanvas.graphics.beginFill(_arg2, _arg3); _local4 = _arg1.rotation; _local5 = _local4.getVectorProduct((_arg1.vertices[0] as Vector)); _local6 = _local5; currentCanvas.graphics.moveTo((_arg1.x + _local6.x), (_arg1.y + _local6.y)); _local7 = 0; while (++_local7 < _arg1.vertices.length) { _local5 = _local4.getVectorProduct((_arg1.vertices[_local7] as Vector)); currentCanvas.graphics.lineTo((_arg1.x + _local5.x), (_arg1.y + _local5.y)); }; currentCanvas.graphics.lineTo((_arg1.x + _local6.x), (_arg1.y + _local6.y)); currentCanvas.graphics.beginFill(0xFFFFFF); if (_arg1.vertices.length > 2){ RenderingUtil.drawHash(currentCanvas.graphics, _arg1.x, _arg1.y, _arg1.rotation); }; currentCanvas.graphics.endFill(); } protected function proxy(_arg1:Renderable, _arg2:int, _arg3:Array):void{ switch (_arg1.renderMethodKey){ case Circle: drawCircle(Circle(_arg1.element), _arg1.data.color, _arg1.data.alpha, _arg1.data.hashSize); break; case RigidBody: drawPolygon(RigidBody(_arg1.element), _arg1.data.color, _arg1.data.alpha); break; case Spring: currentCanvas = auxillaryCanvas; drawSpring(Spring(_arg1.element)); currentCanvas = dynamicCanvas; break; case Bungee: currentCanvas = auxillaryCanvas; drawSpring(Spring(_arg1.element)); currentCanvas = dynamicCanvas; break; case RigidBodySpring: currentCanvas = auxillaryCanvas; drawSpring(Spring(_arg1.element)); currentCanvas = dynamicCanvas; break; case RigidBodyBungee: currentCanvas = auxillaryCanvas; drawSpring(Spring(_arg1.element)); currentCanvas = dynamicCanvas; break; case MouseSpring: currentCanvas = auxillaryCanvas; drawMouseSpring(MouseSpring(_arg1.element)); currentCanvas = dynamicCanvas; break; }; } public function addRenderable(_arg1:Renderable):void{ setupRenderDataDefaults(_arg1); if (_arg1.isDynamic){ _dynamicRenderables.push(_arg1); } else { _staticRenderables.push(_arg1); }; } public function copy(_arg1:IFoamRenderer):void{ var _local2:Array; var _local3:Renderable; _local2 = renderables; for each (_local3 in _local2) { _arg1.addRenderable(_local3); }; } public function get renderables():Array{ return (_staticRenderables.concat(_dynamicRenderables)); } public function removeRenderable(_arg1:Renderable):void{ var _local2:Array; var _local3:int; if (_arg1.isDynamic){ _local2 = _dynamicRenderables; } else { _local2 = _staticRenderables; }; _local3 = _local2.indexOf(_arg1); if (_local3 > -1){ _local2.splice(_local3, 1); }; } protected function drawSpring(_arg1:Spring):void{ var _local2:Vector; var _local3:Vector; currentCanvas.graphics.lineStyle(1, 0xFF0000); _local2 = _arg1.getPoint1InWorldSpace(); _local3 = _arg1.getPoint2InWorldSpace(); currentCanvas.graphics.moveTo(_local2.x, _local2.y); currentCanvas.graphics.lineTo(_local3.x, _local3.y); } public function getDisplayObject(_arg1:Renderable):DisplayObject{ if (_staticRenderables.indexOf(_arg1) != -1){ return (staticCanvas); }; if (_dynamicRenderables.indexOf(_arg1) != -1){ return (dynamicCanvas); }; return (null); } public function redraw():void{ auxillaryCanvas.graphics.clear(); dynamicCanvas.graphics.clear(); currentCanvas = dynamicCanvas; _dynamicRenderables.forEach(proxy); } } }//package org.generalrelativity.foam.view
Section 59
//Foam (org.generalrelativity.foam.Foam) package org.generalrelativity.foam { import flash.events.*; import flash.display.*; import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.force.*; import org.generalrelativity.foam.dynamics.element.*; import org.generalrelativity.foam.view.*; import org.generalrelativity.foam.dynamics.ode.*; import org.generalrelativity.foam.dynamics.collision.*; import org.generalrelativity.foam.dynamics.force.spring.*; import org.generalrelativity.foam.dynamics.*; import org.generalrelativity.foam.util.*; import org.generalrelativity.foam.dynamics.enum.*; import org.generalrelativity.foam.dynamics.ode.solver.*; public class Foam extends Sprite { private var _renderer:IFoamRenderer; private var _useMouseDragger:Boolean; private var _globalForceGenerators:Array; private var _callOnAddedToStage:Array; private var _mouseSpring:MouseSpring; private var _renderMap:SimpleMap; private var _engine:PhysicsEngine; private var _timestep:Number; private var _isSimulating:Boolean; private var _defaultSolver:Class; private var _solverMap:SimpleMap; public static const DEFAULT_ODE_SOLVER:Class = RK4; public static const STEP:String = "step"; public function Foam(){ _solverMap = new SimpleMap(); _renderMap = new SimpleMap(); _engine = new PhysicsEngine(); _globalForceGenerators = new Array(); _callOnAddedToStage = new Array(); _defaultSolver = Foam.DEFAULT_ODE_SOLVER; _timestep = 1; addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true); } public function setCollisionFactory(_arg1:ICollisionFactory):void{ _engine.setCollisionFactory(_arg1); } public function addGlobalForceGenerator(_arg1:IForceGenerator, _arg2:Boolean=true):void{ var _local3:ISimulatable; if (_arg2){ for each (_local3 in _solverMap.keys) { _local3.addForceGenerator(_arg1); }; }; _globalForceGenerators.push(_arg1); } public function stop():void{ if (_isSimulating){ _isSimulating = false; removeEventListener(Event.ENTER_FRAME, stepForward); }; } public function get timestep():Number{ return (_timestep); } public function simulate():void{ if (((!(_isSimulating)) && (_solverMap.length))){ _isSimulating = true; _renderer.draw(); addEventListener(Event.ENTER_FRAME, stepForward, false, 0, true); }; } public function set timestep(_arg1:Number):void{ _timestep = _arg1; } private function onMouseUp(_arg1:MouseEvent):void{ _mouseSpring.destroy(); stopDrawing(_mouseSpring); stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); } public function setRenderer(_arg1:IFoamRenderer):void{ if (_renderer){ _renderer.copy(_arg1); removeChild(DisplayObject(_renderer)); }; _renderer = _arg1; addChild(DisplayObject(_renderer)); } public function addElement(_arg1:ISimulatable, _arg2:Boolean=true, _arg3:Boolean=true, _arg4=null, _arg5:IODESolver=null):void{ var _local6:IForceGenerator; if (((!((_arg1.mass == Simplification.INFINITE_MASS))) && ((_arg1 is IODE)))){ if (!_arg5){ _arg5 = new _defaultSolver(_arg1); }; _solverMap.put(_arg1, _arg5); _engine.addODESolver(_arg5); for each (_local6 in _globalForceGenerators) { _arg1.addForceGenerator(_local6); }; }; if (_arg2){ _engine.addCollidable(_arg1); }; if (_arg3){ if (!_renderer){ _renderer = new SimpleFoamRenderer(); addChild(DisplayObject(_renderer)); }; addRenderable(new Renderable(_arg1, !((_arg1.mass == Simplification.INFINITE_MASS)), _arg4)); }; } public function get engine():PhysicsEngine{ return (_engine); } public function useMouseDragger(_arg1:Boolean):void{ if (!stage){ if (_callOnAddedToStage.indexOf(useMouseDragger) == -1){ _callOnAddedToStage.push(useMouseDragger, [_arg1]); }; return; }; if (_useMouseDragger != _arg1){ _useMouseDragger = _arg1; if (_useMouseDragger){ stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true); } else { stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); }; }; } public function setCoarseCollisionDetector(_arg1:ICoarseCollisionDetector):void{ _engine.setCoarseCollisionDetector(_arg1); } public function set defaultSolver(_arg1:Class):void{ _defaultSolver = _arg1; } public function removeGlobalForceGenerator(_arg1:IForceGenerator, _arg2:Boolean=false):void{ var _local3:int; var _local4:ISimulatable; _local3 = _globalForceGenerators.indexOf(_arg1); if (_local3 > -1){ if (!_arg2){ for each (_local4 in _solverMap.keys) { _local4.removeForceGenerator(_arg1); }; }; _globalForceGenerators.splice(_globalForceGenerators.indexOf(_arg1), 1); }; } public function set solverIterations(_arg1:int):void{ _engine.solverIterations = _arg1; } public function stepForward(_arg1:Event=null):void{ _engine.step(_timestep); _renderer.redraw(); dispatchEvent(new Event(Foam.STEP)); } public function stopSimulating(_arg1:ISimulatable):void{ if (_solverMap.has(_arg1)){ _engine.removeODESolver(IODESolver(_solverMap.getValue(_arg1))); _solverMap.remove(_arg1); stopColliding(_arg1); }; if (!_solverMap.keys.length){ stop(); }; } public function get simulatables():Array{ return (_solverMap.keys); } public function stopColliding(_arg1:ISimulatable):void{ _engine.removeCollidable(_arg1); } private function onAddedToStage(_arg1:Event):void{ var _local2:Array; var _local3:Function; while (_callOnAddedToStage.length) { _local2 = _callOnAddedToStage.pop(); _local3 = _callOnAddedToStage.pop(); _local3.apply(this, _local2); }; } public function addRenderable(_arg1:Renderable):void{ _renderMap.put(_arg1.element, _arg1); _renderer.addRenderable(_arg1); } public function stopDrawing(_arg1):void{ if (_renderMap.has(_arg1)){ _renderer.removeRenderable(Renderable(_renderMap.getValue(_arg1))); _renderMap.remove(_arg1); if (_isSimulating){ _renderer.draw(); }; }; } private function onMouseDown(_arg1:MouseEvent):void{ var _local2:Vector; var _local3:IBody; _local2 = new Vector(mouseX, mouseY); _local3 = _engine.getBodyUnderPoint(_local2); if (_local3){ _mouseSpring = new MouseSpring(_local3, _local2.minus(_local3.position), this); addRenderable(new Renderable(_mouseSpring)); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp, false, 0, true); }; } public function stepBackward(_arg1:Event=null):void{ _engine.step(-(_timestep)); _renderer.redraw(); dispatchEvent(new Event(Foam.STEP)); } public function removeElement(_arg1:ISimulatable):void{ stopDrawing(_arg1); stopSimulating(_arg1); } } }//package org.generalrelativity.foam
Section 60
//ArmorGamesButton (ArmorGamesButton) package { import flash.display.*; public dynamic class ArmorGamesButton extends SimpleButton { } }//package
Section 61
//AvalancherLevel (AvalancherLevel) package { import flash.events.*; import caurina.transitions.*; import flash.display.*; import org.generalrelativity.foam.math.*; import org.generalrelativity.foam.dynamics.force.*; import org.generalrelativity.foam.view.*; import org.generalrelativity.foam.dynamics.element.body.*; import org.generalrelativity.foam.dynamics.force.spring.*; import org.generalrelativity.foam.util.*; import org.generalrelativity.foam.dynamics.enum.*; import org.generalrelativity.foam.*; import flash.net.*; import mochi.*; public class AvalancherLevel extends Sprite { const WONLEVELFX:int = 5; const MOVEDESKIMOFX:int = 6; const BIGBOULDERTRACTION:Number = 0.9; const FOAMESKIMO:int = 1; const HURT2FX:int = 14; const AVALANCHEFX:int = 1; const RIGHTBOUNDARY:int = -640; const ESKIMOFRICTION:Number = 0.1; const TREEHEIGHT:int = 100; const GOODSPOTFX:int = 2; const HURT1FX:int = 13; const TOPBOUNDARY:int = 0; const ESKIMODIEDFX:int = 9; const NUMLEVELS:int = 12; const BIGBOULDERSIZE:int = 25; const SLOPE_ENDING_POINT:int = 50; const TREEFRICTION:Number = 0; const BACKRIGHTBOUNDARY:int = -320; const MAXHEALTH:int = 100; const LEVELWIDTH:int = 0x0500; const STATE_PLACINGESKIMO:int = 1; const TREEWIDTH:int = 20; const ICEBLOCKMASS:int = 20; const BUTTONCLICKFX:int = 10; const DELETE_BLOCK:int = 2; const FOAMBLOCK:int = 3; const NOPEFX:int = 12; const BIGBOULDER1:int = 99; const BIGBOULDER2:int = 102; const BIGBOULDERFRICTION:Number = 0.1; const HOLDBLOCK:int = 104; const ESKIMOMASS:int = 1; const PLACEDBLOCKFX:int = 7; const LEFTBOUNDARY:int = 0; const DRAG:int = 57; const ESKIMOBOUNCE:Number = 0.3; const ESKIMOWIDTH:int = 15; const BACKTOPBOUNDARY:int = 0; const INCREASESIZE:int = 38; const SPACEBAR:int = 32; const BUILD_BLOCK:int = 1; const BOTTOMBOUNDARY:int = -800; const SCROLLAMOUNT:int = 20; const BIGBOULDERMASS:int = 100; const FOAMBOULDER:int = 2; const SLOPEFRICTION:Number = 0; const LEVELHEIGHT:int = 0x0500; const TREEMASS:Number = 50; const BACKLEFTBOUNDARY:int = 0; const LOSTLEVELFX:int = 3; const BACKGROUNDSCROLLAMOUNT:int = 10; const TREE:int = 103; const DECREASESIZE:int = 40; const NOBLOCKSFX:int = 11; const TREEBOUNCE:Number = 0.1; const MEDBOULDER1:int = 98; const MEDBOULDER2:int = 101; const DELETE:int = 48; const EXPORT:int = 96; const BIGBOULDERBOUNCE:Number = 0.5; const SLOPE_POINT:int = 51; const NO_BUILD_STATE:int = 0; const STATE_AVALANCHE:int = 3; const STATE_BUILDINGIGLOO:int = 2; const SLOPEBOUNCE:Number = 0.25; const ESKIMOHEIGHT:int = 26; const REMOVEDBLOCKFX:int = 8; const ICEBLOCKFRICTION:Number = 0.7; const HURT3FX:int = 15; const SLOPE_STARTING_POINT:int = 49; const SMALLBOULDER1:int = 97; const SMALLBOULDER2:int = 100; const ICEBLOCKBOUNCE:Number = 0; const BACKBOTTOMBOUNDARY:int = -400; private var timeBar:TimeBar; public var iceBlocks:Array; public var maxBlocks:int;// = 0 private var healthBar:HealthBar; public var maxTime:int;// = 0 private var hurtSoundUpdater:int;// = 0 private var prevHealth:int;// = 100 private var slopePoints:Array; public var currentBlocks:int;// = 0 private var screenObscurer:ScreenObscurer; private var foregroundBoulders:Array; public var levelWon:Boolean;// = true private var trees:Array; private var treeStands:Array; public var blocksLeft:BlocksLeft; private var mouseHidden:Boolean;// = false private var foam:Foam; private var slopeShape:Sprite; private var linkPhysics:Array; private var blockPhysics:Array; private var eskimoMarker:RigidBody; private var validSpot:Boolean;// = false private var clipsToRemove:Array; public var mouseBuildState:int;// = 0 private var levelState:int;// = 0 public var levelScore:int;// = 0 private var scrollArrow:ScrollArrow; private var triggerInstructions:TriggerInstructions; private var mouseClip:EskimoClip; private var tutorialBox:TutorialBox; private var scoreScreen:ScoreScreen; private var lineSegments:Array; private var levelBackground:Sprite; private var eskimoSkin:EskimoClip; public var currentTime:int;// = 0 private var levelForeground:Sprite; private var goodSpotArrow:GoodSpotArrow; private var currentLevel:int;// = 0 public function AvalancherLevel(_arg1:int){ var _local2:RigidBody; var _local3:int; var _local4:int; var _local5:Circle; var _local6:int; var _local7:RigidBody; var _local8:RigidBody; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:SmallBoulder1; var _local14:TreeClip; levelForeground = new Sprite(); slopePoints = new Array(); lineSegments = new Array(); foregroundBoulders = new Array(); trees = new Array(); treeStands = new Array(); slopeShape = new Sprite(); blockPhysics = new Array(); linkPhysics = new Array(); levelState = 0; validSpot = false; mouseBuildState = NO_BUILD_STATE; iceBlocks = new Array(); currentLevel = 0; clipsToRemove = new Array(); currentTime = 0; maxTime = 0; maxBlocks = 0; currentBlocks = 0; eskimoSkin = new EskimoClip(); levelWon = true; levelScore = 0; scoreScreen = new ScoreScreen(); prevHealth = 100; hurtSoundUpdater = 0; foam = new Foam(); mouseHidden = false; scrollArrow = new ScrollArrow(); mouseClip = new EskimoClip(); healthBar = new HealthBar(); timeBar = new TimeBar(); blocksLeft = new BlocksLeft(); super(); if (!AvalancherManager.congratsShown){ mouseClip.crownClip.visible = false; eskimoSkin.crownClip.visible = false; }; currentLevel = _arg1; levelState = STATE_PLACINGESKIMO; levelBackground = new AvalancherManager.levelInfo[_arg1].backgroundType(); levelBackground.x = -160; levelBackground.y = -200; levelForeground.x = -320; levelForeground.y = -400; addChild(levelBackground); addChild(levelForeground); maxTime = AvalancherManager.levelInfo[_arg1].levelTime; currentTime = AvalancherManager.levelInfo[_arg1].levelTime; maxBlocks = AvalancherManager.levelInfo[_arg1].startingBlocks; currentBlocks = maxBlocks; blocksLeft.blocksLeftText.text = String(currentBlocks); timeBar.x = 20; timeBar.y = 20; timeBar.gotoAndStop(100); addChild(timeBar); healthBar.x = 20; healthBar.y = 50; healthBar.gotoAndStop(100); addChild(healthBar); blocksLeft.x = 20; blocksLeft.y = 80; addChild(blocksLeft); if (currentLevel == 0){ tutorialBox = new TutorialBox(); tutorialBox.x = 220; tutorialBox.y = 20; tutorialBox.tutorialText.text = "Find a safe spot for the Eskimo. During the avalanche, boulders will come rolling down the slope."; addChild(tutorialBox); goodSpotArrow = new GoodSpotArrow(); goodSpotArrow.x = 570; goodSpotArrow.y = 500; levelForeground.addChildAt(goodSpotArrow, 0); }; levelForeground.addChild(foam); foam.setRenderer(new DisplayObjectFoamRenderer()); foam.solverIterations = 2; foam.addGlobalForceGenerator(new Gravity(new Vector(0, 1.3))); foam.addGlobalForceGenerator(new Friction(0.01)); _local3 = AvalancherManager.levelInfo[_arg1].slopePointPos[0].length; slopeShape.graphics.lineStyle(5, 0xCCCCCC); slopeShape.graphics.beginFill(0xFFFFFF); slopeShape.graphics.moveTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][0], AvalancherManager.levelInfo[_arg1].slopePointPos[1][0]); _local4 = 0; while (_local4 < _local3) { if (_local4 > 0){ slopeShape.graphics.lineTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4], AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]); _local9 = getMidPoint(AvalancherManager.levelInfo[_arg1].slopePointPos[0][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4]); _local10 = getMidPoint(AvalancherManager.levelInfo[_arg1].slopePointPos[1][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]); _local11 = (getDistance(AvalancherManager.levelInfo[_arg1].slopePointPos[0][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[1][(_local4 - 1)], AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4], AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4]) / 2); _local12 = getTargetRotation((AvalancherManager.levelInfo[_arg1].slopePointPos[0][(_local4 - 1)] - AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4]), (AvalancherManager.levelInfo[_arg1].slopePointPos[1][(_local4 - 1)] - AvalancherManager.levelInfo[_arg1].slopePointPos[1][_local4])); _local2 = new RigidBody(_local9, _local10, Simplification.INFINITE_MASS, ShapeUtil.createSymmetricPolygon(2, _local11), 0, 0, SLOPEFRICTION, SLOPEBOUNCE, _local12, 0); foam.addElement(_local2); foam.stopDrawing(_local2); lineSegments.push(_local2); if (_local4 == (_local3 - 1)){ slopeShape.graphics.lineStyle(0, 0); slopeShape.graphics.lineTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][_local4], 1700); slopeShape.graphics.lineTo(0, 1700); slopeShape.graphics.lineTo(AvalancherManager.levelInfo[_arg1].slopePointPos[0][0], AvalancherManager.levelInfo[_arg1].slopePointPos[1][0]); }; }; _local4++; }; levelForeground.addChildAt(slopeShape, 0); _local3 = AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[0].length; _local6 = 0; _local4 = 0; while (_local4 < _local3) { if ((((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] > 0)) && ((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] < 20)))){ _local6 = 40; } else { if ((((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] >= 20)) && ((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] < 40)))){ _local6 = 100; } else { if ((((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] >= 40)) && ((AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] < 60)))){ _local6 = 150; } else { if (AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] >= 60){ _local6 = 200; }; }; }; }; _local5 = new Circle(AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[0][_local4], AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[1][_local4], AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4], _local6, 0, 0, 0.5, 0.15, 0, 0); _local5.foamLabel = FOAMBOULDER; _local13 = new SmallBoulder1(); _local13.height = (AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] * 2); _local13.width = (AvalancherManager.levelInfo[_arg1].foregroundBoulderPos[2][_local4] * 2); foam.addElement(_local5, true, true, new DisplayObjectData(_local13, 0, 0)); foregroundBoulders.push(_local5); _local4++; }; _local3 = AvalancherManager.levelInfo[_arg1].treePos[0].length; _local4 = 0; while (_local4 < _local3) { _local7 = new RigidBody(AvalancherManager.levelInfo[_arg1].treePos[0][_local4], AvalancherManager.levelInfo[_arg1].treePos[1][_local4], TREEMASS, ShapeUtil.createRectangle(TREEWIDTH, TREEHEIGHT), 0, 0, 0.1, 0); _local7.foamLabel = FOAMBOULDER; _local14 = new TreeClip(); foam.addElement(_local7, true, true, new DisplayObjectData(_local14, 0, 0)); trees.push(_local7); _local8 = new RigidBody(AvalancherManager.levelInfo[_arg1].treePos[0][_local4], (AvalancherManager.levelInfo[_arg1].treePos[1][_local4] + ((TREEHEIGHT / 2) + 1)), Simplification.INFINITE_MASS, ShapeUtil.createSymmetricPolygon(2, 10), 0, 0, 0.1, 0); foam.addElement(_local8); foam.stopDrawing(_local8); treeStands.push(_local8); _local4++; }; } private function stepLevel(_arg1:Event){ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:IceBlockClip; var _local11:int; var _local12:EskimoHit; var _local13:int; scrollLevel(); switch (levelState){ case STATE_PLACINGESKIMO: mouseClip.x = (mouseX - levelForeground.x); mouseClip.y = (mouseY - levelForeground.y); validSpot = true; if (((((((slopeShape.hitTestPoint(mouseX, (mouseY + ESKIMOHEIGHT), true)) || (slopeShape.hitTestPoint(mouseX, (mouseY - ESKIMOHEIGHT), true)))) || (slopeShape.hitTestPoint((mouseX + ESKIMOWIDTH), mouseY, true)))) || (slopeShape.hitTestPoint((mouseX - ESKIMOWIDTH), mouseY, true)))){ validSpot = false; } else { _local5 = AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0].length; _local6 = AvalancherManager.levelInfo[currentLevel].treePos[0].length; _local7 = 0; while (_local7 < _local5) { if (getDistance(AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0][_local7], AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[1][_local7], mouseClip.x, mouseClip.y) < (ESKIMOHEIGHT + AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[2][_local7])){ validSpot = false; }; _local7++; }; _local8 = 0; while (_local8 < _local6) { if ((((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[0][_local8] - mouseClip.x)) < (TREEWIDTH + ESKIMOWIDTH))) && ((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[1][_local8] - mouseClip.y)) < (TREEHEIGHT - 20))))){ validSpot = false; }; _local8++; }; }; if (validSpot){ mouseClip.gotoAndStop("normal"); } else { mouseClip.gotoAndStop("badSpot"); }; break; case STATE_BUILDINGIGLOO: break; case STATE_AVALANCHE: _local2 = blockPhysics.length; _local9 = (_local2 - 1); while (_local9 >= 0) { if (!blockPhysics[_local9].isAlive){ if (!blockPhysics[_local9].alreadyDead){ blockPhysics[_local9].alreadyDead = true; _local10 = new IceBlockClip(); _local10.x = (blockPhysics[_local9].x - 10); _local10.y = (blockPhysics[_local9].y - 10); levelForeground.addChild(_local10); _local10.gotoAndPlay("blowUp"); clipsToRemove.push(_local10); foam.stopColliding(blockPhysics[_local9]); foam.stopDrawing(blockPhysics[_local9]); }; }; _local9--; }; _local3 = clipsToRemove.length; _local11 = (_local3 - 1); while (_local11 >= 0) { if (clipsToRemove[_local11].currentLabel == "removeMe"){ levelForeground.removeChild(clipsToRemove[_local11]); clipsToRemove.splice(_local11, 1); }; _local11--; }; _local4 = int(((eskimoMarker.lifeLeft / MAXHEALTH) * 100)); if (_local4 < (prevHealth - 5)){ _local12 = new EskimoHit(); _local12.x = eskimoMarker.x; _local12.y = eskimoMarker.y; levelForeground.addChild(_local12); clipsToRemove.push(_local12); AvalancherManager.playFx((13 + hurtSoundUpdater)); if (hurtSoundUpdater >= 2){ hurtSoundUpdater = 0; } else { hurtSoundUpdater++; }; }; prevHealth = _local4; healthBar.gotoAndStop(_local4); if (_local4 <= 0){ eskimoSkin.gotoAndStop("dead"); if (levelWon){ AvalancherManager.playFx(ESKIMODIEDFX); }; levelWon = false; }; if ((((((eskimoMarker.x < 0)) || ((eskimoMarker.x > 1300)))) || ((eskimoMarker.y > 1300)))){ if (levelWon){ AvalancherManager.playFx(ESKIMODIEDFX); }; levelWon = false; eskimoMarker.lifeLeft = 0; healthBar.gotoAndStop(0); }; if (levelWon){ currentTime--; } else { currentTime = (currentTime - 5); }; if (currentTime <= 0){ foam.stop(); timeBar.gotoAndStop(0); endLevel(); } else { _local13 = int(((currentTime / maxTime) * 100)); timeBar.gotoAndStop(_local13); }; break; }; } private function startAvalanche(){ var _local1:RigidBody; var _local2:Bungee; var _local3:int; var _local4:int; var _local5:int; var _local6:IceBlockClip; _local3 = 0; while (_local3 < 6) { _local5 = 0; while (_local5 < 9) { if (iceBlocks[_local3][_local5].blockHere){ _local1 = new RigidBody(iceBlocks[_local3][_local5].x, iceBlocks[_local3][_local5].y, Simplification.INFINITE_MASS, ShapeUtil.createRectangle(20, 20)); _local1.foamLabel = FOAMBLOCK; _local6 = new IceBlockClip(); foam.addElement(_local1, true, true, new DisplayObjectData(_local6, 0, 0)); blockPhysics.push(_local1); }; _local5++; }; _local3++; }; if (currentLevel == 0){ tutorialBox.tutorialText.text = "Hope for the best!"; }; removeIceBlocks(); levelForeground.removeChild(triggerInstructions); triggerInstructions = null; levelForeground.removeChild(mouseClip); eskimoMarker = new RigidBody(mouseClip.x, mouseClip.y, ESKIMOMASS, ShapeUtil.createRectangle((ESKIMOWIDTH * 2), (ESKIMOHEIGHT * 2))); eskimoMarker.foamLabel = FOAMESKIMO; foam.addElement(eskimoMarker, true, true, new DisplayObjectData(eskimoSkin, ESKIMOWIDTH, (ESKIMOHEIGHT + 15))); AvalancherManager.playFx(AVALANCHEFX); Tweener.addTween(this, {x:10, time:0.1, transition:"easeInExpo"}); Tweener.addTween(this, {y:-10, time:0.1, transition:"easeInExpo"}); Tweener.addTween(this, {x:20, time:0.1, delay:0.1, transition:"easeInExpo"}); Tweener.addTween(this, {y:20, time:0.1, delay:0.1, transition:"easeInExpo"}); Tweener.addTween(this, {x:-10, time:0.1, delay:0.2, transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:0.2, transition:"easeInExpo"}); Tweener.addTween(this, {x:20, time:0.1, delay:0.3, transition:"easeInExpo"}); Tweener.addTween(this, {y:-15, time:0.1, delay:0.3, transition:"easeInExpo"}); Tweener.addTween(this, {x:-20, time:0.1, delay:0.4, transition:"easeInExpo"}); Tweener.addTween(this, {y:-20, time:0.1, delay:0.4, transition:"easeInExpo"}); Tweener.addTween(this, {x:0, time:0.1, delay:0.5, transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:0.5, transition:"easeInExpo"}); Tweener.addTween(this, {x:20, time:0.1, delay:0.6, transition:"easeInExpo"}); Tweener.addTween(this, {y:20, time:0.1, delay:0.6, transition:"easeInExpo"}); Tweener.addTween(this, {x:-10, time:0.1, delay:0.7, transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:0.7, transition:"easeInExpo"}); Tweener.addTween(this, {x:20, time:0.1, delay:0.8, transition:"easeInExpo"}); Tweener.addTween(this, {y:-15, time:0.1, delay:0.8, transition:"easeInExpo"}); Tweener.addTween(this, {x:-20, time:0.1, delay:0.9, transition:"easeInExpo"}); Tweener.addTween(this, {y:-20, time:0.1, delay:0.9, transition:"easeInExpo"}); Tweener.addTween(this, {x:0, time:0.1, delay:1, transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:1, transition:"easeInExpo"}); _local4 = 1; while (_local4 < 3) { Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.1), transition:"easeInExpo"}); Tweener.addTween(this, {y:20, time:0.1, delay:(_local4 + 0.1), transition:"easeInExpo"}); Tweener.addTween(this, {x:-10, time:0.1, delay:(_local4 + 0.2), transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 0.2), transition:"easeInExpo"}); Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.3), transition:"easeInExpo"}); Tweener.addTween(this, {y:-15, time:0.1, delay:(_local4 + 0.3), transition:"easeInExpo"}); Tweener.addTween(this, {x:-20, time:0.1, delay:(_local4 + 0.4), transition:"easeInExpo"}); Tweener.addTween(this, {y:-20, time:0.1, delay:(_local4 + 0.4), transition:"easeInExpo"}); Tweener.addTween(this, {x:0, time:0.1, delay:(_local4 + 0.5), transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 0.5), transition:"easeInExpo"}); Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.6), transition:"easeInExpo"}); Tweener.addTween(this, {y:20, time:0.1, delay:(_local4 + 0.6), transition:"easeInExpo"}); Tweener.addTween(this, {x:-10, time:0.1, delay:(_local4 + 0.7), transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 0.7), transition:"easeInExpo"}); if (_local4 < 2){ Tweener.addTween(this, {x:20, time:0.1, delay:(_local4 + 0.8), transition:"easeInExpo"}); Tweener.addTween(this, {y:-15, time:0.1, delay:(_local4 + 0.8), transition:"easeInExpo"}); Tweener.addTween(this, {x:-20, time:0.1, delay:(_local4 + 0.9), transition:"easeInExpo"}); Tweener.addTween(this, {y:-20, time:0.1, delay:(_local4 + 0.9), transition:"easeInExpo"}); Tweener.addTween(this, {x:0, time:0.1, delay:(_local4 + 1), transition:"easeInExpo"}); Tweener.addTween(this, {y:0, time:0.1, delay:(_local4 + 1), transition:"easeInExpo"}); } else { Tweener.addTween(this, {x:20, time:0.2, delay:(_local4 + 0.8), transition:"linear"}); Tweener.addTween(this, {y:-15, time:0.2, delay:(_local4 + 0.8), transition:"linear"}); Tweener.addTween(this, {x:-20, time:0.3, delay:(_local4 + 1), transition:"linear"}); Tweener.addTween(this, {y:-20, time:0.3, delay:(_local4 + 1), transition:"linear"}); Tweener.addTween(this, {x:0, time:0.5, delay:(_local4 + 1.3), transition:"easeOutExpo"}); Tweener.addTween(this, {y:0, time:0.5, delay:(_local4 + 1.3), transition:"easeOutExpo"}); }; _local4++; }; foam.simulate(); } private function populateIceBlocks(){ var _local1:IceBlock; var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:int; _local2 = (mouseClip.x - 80); _local3 = (mouseClip.y - 80); _local4 = 0; while (_local4 < 6) { iceBlocks[_local4] = new Array(); _local5 = 0; while (_local5 < 9) { _local1 = new IceBlock(_local4, _local5); _local1.x = (_local2 + (_local5 * 20)); _local1.y = (_local3 + (_local4 * 20)); levelForeground.addChild(_local1); _local1.activate(); if ((((((_local5 >= 3)) && ((_local5 <= 5)))) && ((((_local4 >= 3)) && ((_local4 <= 5)))))){ _local1.visible = false; _local1.permanentlyEmpty = true; } else { if (((((((slopeShape.hitTestPoint(((_local1.x + levelForeground.x) - 10), ((_local1.y + levelForeground.y) - 10), true)) || (slopeShape.hitTestPoint(((_local1.x + levelForeground.x) + 10), ((_local1.y + levelForeground.y) - 10), true)))) || (slopeShape.hitTestPoint(((_local1.x + levelForeground.x) + 10), ((_local1.y + levelForeground.y) + 10), true)))) || (slopeShape.hitTestPoint(((_local1.x + levelForeground.x) - 10), ((_local1.y + levelForeground.y) + 10), true)))){ _local1.visible = false; _local1.permanentlyEmpty = true; } else { _local6 = AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0].length; _local7 = AvalancherManager.levelInfo[currentLevel].treePos[0].length; _local8 = 0; while (_local8 < _local6) { if (getDistance(AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[0][_local8], AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[1][_local8], _local1.x, _local1.y) < (10 + AvalancherManager.levelInfo[currentLevel].foregroundBoulderPos[2][_local8])){ _local1.visible = false; _local1.permanentlyEmpty = true; }; _local8++; }; _local9 = 0; while (_local9 < _local7) { if ((((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[0][_local9] - _local1.x)) < (TREEWIDTH + 10))) && ((Math.abs((AvalancherManager.levelInfo[currentLevel].treePos[1][_local9] - _local1.y)) < (TREEHEIGHT - 20))))){ _local1.visible = false; _local1.permanentlyEmpty = true; }; _local9++; }; }; }; iceBlocks[_local4].push(_local1); _local5++; }; _local4++; }; } private function clickedEskimo(_arg1:MouseEvent){ mouseClip.buttonMode = false; mouseClip.useHandCursor = false; mouseClip.x = mouseX; mouseClip.y = mouseY; mouseClip.removeEventListener(MouseEvent.CLICK, clickedEskimo); mouseClip.addEventListener(MouseEvent.CLICK, placeEskimo); levelForeground.removeChild(triggerInstructions); if (currentLevel == 0){ tutorialBox.tutorialText.text = "Find a safe spot for the Eskimo. During the avalanche, boulders will come rolling down the slope."; levelForeground.addChildAt(goodSpotArrow, 0); }; removeIceBlocks(); currentBlocks = maxBlocks; blocksLeft.blocksLeftText.text = String(currentBlocks); levelState = STATE_PLACINGESKIMO; AvalancherManager.playFx(MOVEDESKIMOFX); } public function tryAgain(_arg1:MouseEvent){ AvalancherManager.playFx(BUTTONCLICKFX); deactivate(); AvalancherManager.restartLevel(currentLevel); } public function deactivate(){ stage.removeEventListener(KeyboardEvent.KEY_UP, keyPressed); } private function scrollLevel(){ var _local1:Boolean; var _local2:String; var _local3:String; var _local4:String; var _local5:String; _local1 = false; _local2 = "O"; _local3 = "O"; _local4 = "O"; _local5 = "O"; if (stage.mouseY < 50){ if (levelForeground.y < TOPBOUNDARY){ if (!mouseHidden){ scrollArrow.x = mouseX; scrollArrow.y = mouseY; addChild(scrollArrow); mouseHidden = true; } else { scrollArrow.x = mouseX; scrollArrow.y = mouseY; }; if ((levelForeground.y + SCROLLAMOUNT) < TOPBOUNDARY){ levelForeground.y = (levelForeground.y + SCROLLAMOUNT); levelBackground.y = (levelBackground.y + BACKGROUNDSCROLLAMOUNT); } else { levelForeground.y = TOPBOUNDARY; levelBackground.y = BACKTOPBOUNDARY; }; _local1 = true; _local2 = "X"; }; } else { if (stage.mouseY >= 430){ if (levelForeground.y > BOTTOMBOUNDARY){ if (!mouseHidden){ scrollArrow.x = mouseX; scrollArrow.y = mouseY; addChild(scrollArrow); mouseHidden = true; } else { scrollArrow.x = mouseX; scrollArrow.y = mouseY; }; if ((levelForeground.y - SCROLLAMOUNT) > BOTTOMBOUNDARY){ levelForeground.y = (levelForeground.y - SCROLLAMOUNT); levelBackground.y = (levelBackground.y - BACKGROUNDSCROLLAMOUNT); } else { levelForeground.y = BOTTOMBOUNDARY; levelBackground.y = BACKBOTTOMBOUNDARY; }; _local1 = true; _local3 = "X"; }; }; }; if (stage.mouseX < 50){ if (levelForeground.x < LEFTBOUNDARY){ if (!mouseHidden){ scrollArrow.x = mouseX; scrollArrow.y = mouseY; addChild(scrollArrow); mouseHidden = true; } else { scrollArrow.x = mouseX; scrollArrow.y = mouseY; }; if ((levelForeground.x + SCROLLAMOUNT) < LEFTBOUNDARY){ levelForeground.x = (levelForeground.x + SCROLLAMOUNT); levelBackground.x = (levelBackground.x + BACKGROUNDSCROLLAMOUNT); } else { levelForeground.x = LEFTBOUNDARY; levelBackground.x = BACKLEFTBOUNDARY; }; _local1 = true; _local4 = "X"; }; } else { if (stage.mouseX >= 590){ if (levelForeground.x > RIGHTBOUNDARY){ if (!mouseHidden){ scrollArrow.x = mouseX; scrollArrow.y = mouseY; addChild(scrollArrow); mouseHidden = true; } else { scrollArrow.x = mouseX; scrollArrow.y = mouseY; }; if ((levelForeground.x - SCROLLAMOUNT) > RIGHTBOUNDARY){ levelForeground.x = (levelForeground.x - SCROLLAMOUNT); levelBackground.x = (levelBackground.x - BACKGROUNDSCROLLAMOUNT); } else { levelForeground.x = RIGHTBOUNDARY; levelBackground.x = BACKRIGHTBOUNDARY; }; _local1 = true; _local5 = "X"; }; }; }; if (!_local1){ if (mouseHidden){ removeChild(scrollArrow); mouseHidden = false; }; } else { scrollArrow.gotoAndStop((((_local2 + _local5) + _local3) + _local4)); }; } private function keyPressed(_arg1:KeyboardEvent){ switch (_arg1.keyCode){ case SPACEBAR: if (levelState == STATE_BUILDINGIGLOO){ levelState = STATE_AVALANCHE; startAvalanche(); }; break; }; } public function activate(){ mouseClip.x = mouseX; mouseClip.y = mouseY; levelForeground.addChild(mouseClip); mouseClip.addEventListener(MouseEvent.CLICK, placeEskimo); addEventListener(Event.ENTER_FRAME, stepLevel); stage.addEventListener(KeyboardEvent.KEY_UP, keyPressed); } public function placeEskimo(_arg1:MouseEvent){ if (validSpot){ mouseClip.removeEventListener(MouseEvent.CLICK, placeEskimo); mouseClip.addEventListener(MouseEvent.CLICK, clickedEskimo); mouseClip.buttonMode = true; mouseClip.useHandCursor = true; levelState = STATE_BUILDINGIGLOO; addEventListener(MouseEvent.MOUSE_UP, mouseButtonUp); populateIceBlocks(); AvalancherManager.playFx(GOODSPOTFX); if (currentLevel == 0){ tutorialBox.tutorialText.text = "Now build him a protective igloo. Just click and drag the area around him to add/remove blocks."; levelForeground.removeChild(goodSpotArrow); }; triggerInstructions = new TriggerInstructions(); triggerInstructions.x = mouseClip.x; triggerInstructions.y = (mouseClip.y - 120); levelForeground.addChild(triggerInstructions); } else { AvalancherManager.playFx(NOPEFX); }; } public function getTargetRotation(_arg1:Number, _arg2:Number):Number{ var _local3:*; _local3 = Math.atan2(_arg2, _arg1); return (_local3); } private function mouseButtonUp(_arg1:MouseEvent){ mouseBuildState = NO_BUILD_STATE; } public function getDistance(_arg1:int, _arg2:int, _arg3:int, _arg4:int):Number{ return (Math.sqrt((((_arg3 - _arg1) * (_arg3 - _arg1)) + ((_arg4 - _arg2) * (_arg4 - _arg2))))); } public function endLevel(){ screenObscurer = new ScreenObscurer(); addChild(screenObscurer); removeEventListener(Event.ENTER_FRAME, stepLevel); if (levelWon){ AvalancherManager.playFx(WONLEVELFX); scoreScreen.titleFail.visible = false; scoreScreen.failGrave.visible = false; scoreScreen.bonusLabel.text = "Level Bonus: \nHealth Bonus: \nUnused Block Bonus:"; scoreScreen.bonusAmounts.text = ((((String(AvalancherManager.levelInfo[currentLevel].levelBonus) + "\n") + String((eskimoMarker.lifeLeft * 10))) + "\n") + String((currentBlocks * 50))); levelScore = (levelScore + AvalancherManager.levelInfo[currentLevel].levelBonus); levelScore = (levelScore + (eskimoMarker.lifeLeft * 10)); levelScore = (levelScore + (currentBlocks * 50)); scoreScreen.otherBonusText.text = ""; scoreScreen.otherBonusAmounts.text = ""; if (eskimoMarker.lifeLeft >= 100){ scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "Not a Scratch \n"); scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "+ 250 \n"); levelScore = (levelScore + 250); } else { if (eskimoMarker.lifeLeft <= 25){ scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "Large Hospital Bill \n"); scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "- 250 \n"); levelScore = (levelScore - 250); }; }; if (currentBlocks == maxBlocks){ scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "No Igloo \n"); scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "+ 150 \n"); levelScore = (levelScore + 150); } else { if (currentBlocks == 0){ scoreScreen.otherBonusText.text = (scoreScreen.otherBonusText.text + "Igloo McMansion \n"); scoreScreen.otherBonusAmounts.text = (scoreScreen.otherBonusAmounts.text + "- 150 \n"); levelScore = (levelScore - 150); }; }; scoreScreen.previousAmount.text = String(AvalancherManager.levelInfo[currentLevel].bestScore); scoreScreen.finalAmount.text = String(levelScore); AvalancherManager.levelBeaten(currentLevel, levelScore); } else { AvalancherManager.playFx(LOSTLEVELFX); scoreScreen.titleSuccess.visible = false; scoreScreen.bonusLabel.visible = false; scoreScreen.bonusAmounts.visible = false; scoreScreen.otherBonusLabel.visible = false; scoreScreen.otherBonusText.visible = false; scoreScreen.otherBonusAmounts.visible = false; scoreScreen.finalLabel.visible = false; scoreScreen.finalAmount.visible = false; scoreScreen.previousLabel.visible = false; scoreScreen.previousAmount.visible = false; }; scoreScreen.tryAgainButton.addEventListener(MouseEvent.CLICK, tryAgain); scoreScreen.newLevelButton.addEventListener(MouseEvent.CLICK, newLevel); scoreScreen.x = 320; scoreScreen.y = -200; addChild(scoreScreen); Tweener.addTween(scoreScreen, {y:240, time:2}); } public function getMidPoint(_arg1:int, _arg2:int):Number{ return (((_arg1 + _arg2) / 2)); } private function removeIceBlocks(){ var _local1:int; var _local2:int; _local1 = 5; while (_local1 >= 0) { _local2 = 8; while (_local2 >= 0) { iceBlocks[_local1][_local2].deactivate(); levelForeground.removeChild(iceBlocks[_local1][_local2]); _local2--; }; _local1--; }; } public function newLevel(_arg1:MouseEvent){ AvalancherManager.playFx(BUTTONCLICKFX); deactivate(); AvalancherManager.returnToTitle(); } } }//package
Section 62
//AvalancherManager (AvalancherManager) package { import flash.events.*; import caurina.transitions.*; import flash.display.*; import org.generalrelativity.foam.view.*; import flash.media.*; import flash.net.*; import mochi.*; public final class AvalancherManager { const WONLEVELFX:int = 5; const BUTTONCLICKFX:int = 10; const HOLDBLOCK:int = 104; const MOVEDESKIMOFX:int = 6; const HURT2FX:int = 14; const BACKTOPBOUNDARY:int = 0; const BIGBOULDERTRACTION:Number = 0.9; const ESKIMOMASS:int = 1; const FOAMESKIMO:int = 1; const AVALANCHEFX:int = 1; const RIGHTBOUNDARY:int = -640; const ESKIMOFRICTION:Number = 0.1; const PLACEDBLOCKFX:int = 7; const LEFTBOUNDARY:int = 0; const DRAG:int = 57; const ESKIMOBOUNCE:Number = 0.3; const ESKIMOWIDTH:int = 15; const NOPEFX:int = 12; const INCREASESIZE:int = 38; const BUILD_BLOCK:int = 1; const SPACEBAR:int = 32; const GOODSPOTFX:int = 2; const TREEHEIGHT:int = 100; const BOTTOMBOUNDARY:int = -800; const HURT1FX:int = 13; const NUMLEVELS:int = 12; const TOPBOUNDARY:int = 0; const BIGBOULDERMASS:int = 100; const ESKIMODIEDFX:int = 9; const SCROLLAMOUNT:int = 20; const BIGBOULDERSIZE:int = 25; const SLOPEFRICTION:Number = 0; const FOAMBOULDER:int = 2; const LEVELHEIGHT:int = 0x0500; const SLOPE_ENDING_POINT:int = 50; const TREEMASS:Number = 50; const BACKGROUNDSCROLLAMOUNT:int = 10; const BACKLEFTBOUNDARY:int = 0; const LOSTLEVELFX:int = 3; const TREE:int = 103; const BACKRIGHTBOUNDARY:int = -320; const MAXHEALTH:int = 100; const DECREASESIZE:int = 40; const NOBLOCKSFX:int = 11; const DELETE:int = 48; const MEDBOULDER1:int = 98; const MEDBOULDER2:int = 101; const EXPORT:int = 96; const BIGBOULDERBOUNCE:Number = 0.5; const TREEFRICTION:Number = 0; const SLOPE_POINT:int = 51; const REMOVEDBLOCKFX:int = 8; const NO_BUILD_STATE:int = 0; const STATE_PLACINGESKIMO:int = 1; const STATE_AVALANCHE:int = 3; const LEVELWIDTH:int = 0x0500; const STATE_BUILDINGIGLOO:int = 2; const TREEWIDTH:int = 20; const SLOPEBOUNCE:Number = 0.25; const ESKIMOHEIGHT:int = 26; const ICEBLOCKMASS:int = 20; const TREEBOUNCE:Number = 0.1; const DELETE_BLOCK:int = 2; const ICEBLOCKFRICTION:Number = 0.7; const BIGBOULDER1:int = 99; const SLOPE_STARTING_POINT:int = 49; const BIGBOULDERFRICTION:Number = 0.1; const ICEBLOCKBOUNCE:Number = 0; const SMALLBOULDER1:int = 97; const SMALLBOULDER2:int = 100; const HURT3FX:int = 15; const BIGBOULDER2:int = 102; const FOAMBLOCK:int = 3; const BACKBOTTOMBOUNDARY:int = -400; public static var buttonClickedSound:ButtonClickedSound = new ButtonClickedSound(); public static var removedBlockSound:RemovedBlockSound = new RemovedBlockSound(); public static var ssIntroSound:SSIntroSound = new SSIntroSound(); private static var currentLevel:AvalancherLevel; public static var lastSubmittedScore:int = 0; private static var currentScore:int = 0; public static var avalancheSound:AvalancheSound = new AvalancheSound(); public static var musicChannel:SoundChannel = new SoundChannel(); public static var placedBlockSound:PlacedBlockSound = new PlacedBlockSound(); public static var transitionScreen:TransitionScreen = new TransitionScreen(); public static var fxButton:ToggleButton = new ToggleButton(); public static var fadeDisplay:Sprite = new Sprite(); public static var wonLevelSound:WonLevelSound = new WonLevelSound(); public static var hurt1Sound:Hurt1Sound = new Hurt1Sound(); public static var lostLevelSound:LostLevelSound = new LostLevelSound(); public static var screenDisplay:Sprite = new Sprite(); public static var musicButton:ToggleButton = new ToggleButton(); public static var nopeSound:NopeSound = new NopeSound(); public static var fxTransform:SoundTransform = new SoundTransform(); public static var congratsShown:Boolean = false; public static var noBlocksSound:NoBlocksSound = new NoBlocksSound(); public static var avalancherMusic:AvalancherMusic = new AvalancherMusic(); public static var musicTransform:SoundTransform = new SoundTransform(); public static var interfaceDisplay:Sprite = new Sprite(); public static var movedEskimoSound:MovedEskimoSound = new MovedEskimoSound(); public static var musicPlaying:Boolean = false; public static var fxChannel:SoundChannel = new SoundChannel(); public static var levelInfo:Array = new Array(); public static var hurt2Sound:Hurt2Sound = new Hurt2Sound(); public static var resumeLSO:SharedObject = SharedObject.getLocal("avalancherResume"); private static var titleScreen:AvalancherTitleScreen; public static var hurt3Sound:Hurt3Sound = new Hurt3Sound(); private static var goThereIntro:GoThereIntro; private static var ssIntro:LogoIntroClip; public static var goodSpotSound:GoodSpotSound = new GoodSpotSound(); public static var eskimoDiedSound:EskimoDiedSound = new EskimoDiedSound(); public static function removeTransition(){ fadeDisplay.removeChild(transitionScreen); } private static function clickedGoThere(_arg1:MouseEvent){ var _local2:URLRequest; _local2 = new URLRequest("http://www.sinistersea.com"); navigateToURL(_local2, "_blank"); } private static function addGoThere(){ goThereIntro = new GoThereIntro(); goThereIntro.useHandCursor = true; goThereIntro.buttonMode = true; screenDisplay.addChild(goThereIntro); goThereIntro.addEventListener(MouseEvent.ROLL_OVER, mouseOverGoThere); goThereIntro.addEventListener(MouseEvent.ROLL_OUT, mouseOutGoThere); goThereIntro.addEventListener(MouseEvent.CLICK, clickedGoThere); } public static function removeLevel_Restart(_arg1:int){ screenDisplay.removeChild(currentLevel); loadLevel(_arg1); fadeIn(); } private static function mouseOverGoThere(_arg1:MouseEvent){ goThereIntro.gotoAndPlay(2); } public static function initiate(){ var _local1:int; var _local2:int; populateLevels(); loadIntro(); musicTransform.volume = 0; musicChannel.soundTransform = musicTransform; fadeDisplay.mouseEnabled = false; fadeDisplay.mouseChildren = false; transitionScreen.mouseEnabled = false; transitionScreen.mouseChildren = false; musicButton.clip = new MusicButton(); fxButton.clip = new FxButton(); musicButton.clip.x = 540; musicButton.clip.y = 20; fxButton.clip.x = 585; fxButton.clip.y = 20; musicButton.clip.visible = false; fxButton.clip.visible = false; interfaceDisplay.addChild(musicButton.clip); interfaceDisplay.addChild(fxButton.clip); musicButton.activate(); fxButton.activate(); musicButton.turnOn(); fxButton.turnOn(); musicButton.clip.addEventListener(MouseEvent.CLICK, musicToggle); fxButton.clip.addEventListener(MouseEvent.CLICK, fxToggle); if (resumeLSO.data.previouslyViewed){ _local1 = 0; while (_local1 < 12) { levelInfo[_local1].beaten = resumeLSO.data.beatenArray[_local1]; levelInfo[_local1].isAvailable = resumeLSO.data.availableArray[_local1]; levelInfo[_local1].bestScore = resumeLSO.data.bestScoreArray[_local1]; congratsShown = resumeLSO.data.congratsShown; _local1++; }; lastSubmittedScore = resumeLSO.data.lastSubmittedScore; } else { resumeLSO.data.previouslyViewed = true; resumeLSO.data.beatenArray = new Array(); resumeLSO.data.availableArray = new Array(); resumeLSO.data.bestScoreArray = new Array(); resumeLSO.data.lastSubmittedScore = 0; resumeLSO.data.congratsShown = false; _local2 = 0; while (_local2 < 12) { resumeLSO.data.beatenArray.push(false); resumeLSO.data.availableArray.push(false); resumeLSO.data.bestScoreArray.push(0); _local2++; }; resumeLSO.data.availableArray[0] = true; }; } public static function levelBeaten(_arg1:int, _arg2:int){ var i:int; var sentLevel = _arg1; var sentScore = _arg2; if (sentScore > levelInfo[sentLevel].bestScore){ levelInfo[sentLevel].bestScore = sentScore; }; levelInfo[sentLevel].beaten = true; switch (sentLevel){ case 0: levelInfo[1].isAvailable = true; levelInfo[2].isAvailable = true; levelInfo[5].isAvailable = true; levelInfo[6].isAvailable = true; break; case 1: if (((((levelInfo[2].beaten) && (levelInfo[5].beaten))) && (levelInfo[6].beaten))){ levelInfo[4].isAvailable = true; levelInfo[9].isAvailable = true; levelInfo[3].isAvailable = true; levelInfo[7].isAvailable = true; }; break; case 2: if (((((levelInfo[1].beaten) && (levelInfo[5].beaten))) && (levelInfo[6].beaten))){ levelInfo[4].isAvailable = true; levelInfo[9].isAvailable = true; levelInfo[3].isAvailable = true; levelInfo[7].isAvailable = true; }; break; case 5: if (((((levelInfo[2].beaten) && (levelInfo[1].beaten))) && (levelInfo[6].beaten))){ levelInfo[4].isAvailable = true; levelInfo[9].isAvailable = true; levelInfo[3].isAvailable = true; levelInfo[7].isAvailable = true; }; break; case 6: if (((((levelInfo[2].beaten) && (levelInfo[5].beaten))) && (levelInfo[1].beaten))){ levelInfo[4].isAvailable = true; levelInfo[9].isAvailable = true; levelInfo[3].isAvailable = true; levelInfo[7].isAvailable = true; }; break; case 4: if (((((levelInfo[9].beaten) && (levelInfo[3].beaten))) && (levelInfo[7].beaten))){ levelInfo[8].isAvailable = true; levelInfo[10].isAvailable = true; levelInfo[11].isAvailable = true; }; break; case 9: if (((((levelInfo[4].beaten) && (levelInfo[3].beaten))) && (levelInfo[7].beaten))){ levelInfo[8].isAvailable = true; levelInfo[10].isAvailable = true; levelInfo[11].isAvailable = true; }; break; case 3: if (((((levelInfo[9].beaten) && (levelInfo[4].beaten))) && (levelInfo[7].beaten))){ levelInfo[8].isAvailable = true; levelInfo[10].isAvailable = true; levelInfo[11].isAvailable = true; }; break; case 7: if (((((levelInfo[9].beaten) && (levelInfo[3].beaten))) && (levelInfo[4].beaten))){ levelInfo[8].isAvailable = true; levelInfo[10].isAvailable = true; levelInfo[11].isAvailable = true; }; break; }; i = 0; while (i < 12) { resumeLSO.data.beatenArray[i] = levelInfo[i].beaten; resumeLSO.data.availableArray[i] = levelInfo[i].isAvailable; resumeLSO.data.bestScoreArray[i] = levelInfo[i].bestScore; i = (i + 1); }; try { resumeLSO.flush(); } catch(e:Error) { }; } public static function removeLevel_Title(){ screenDisplay.removeChild(currentLevel); loadTitle(); fadeIn(); } private static function mouseOutGoThere(_arg1:MouseEvent){ goThereIntro.gotoAndStop(1); } public static function loadTitle(){ if (((musicButton.isOn) && (!(musicPlaying)))){ musicChannel = avalancherMusic.play(0, int.MAX_VALUE); Tweener.addTween(musicTransform, {volume:1, time:3, onUpdate:function (){ musicChannel.soundTransform = musicTransform; }}); musicPlaying = true; }; titleScreen = new AvalancherTitleScreen(); screenDisplay.addChild(titleScreen); titleScreen.activate(); musicButton.clip.visible = true; fxButton.clip.visible = true; fadeIn(); } public static function playFx(_arg1:int){ if (fxButton.isOn){ switch (_arg1){ case 1: fxChannel = avalancheSound.play(); break; case 2: fxChannel = goodSpotSound.play(); break; case 3: fxChannel = lostLevelSound.play(); break; case 5: fxChannel = wonLevelSound.play(); break; case 6: fxChannel = movedEskimoSound.play(); break; case 7: fxChannel = placedBlockSound.play(); break; case 8: fxChannel = removedBlockSound.play(); break; case 9: fxChannel = eskimoDiedSound.play(); break; case 10: fxChannel = buttonClickedSound.play(); break; case 11: fxChannel = noBlocksSound.play(); break; case 12: fxChannel = nopeSound.play(); break; case 13: fxChannel = hurt1Sound.play(); break; case 14: fxChannel = hurt2Sound.play(); break; case 15: fxChannel = hurt3Sound.play(); break; }; }; } public static function fadeIn(){ transitionScreen.alpha = 1; Tweener.addTween(transitionScreen, {alpha:0, time:2, onComplete:removeTransition}); } public static function clearTitle(_arg1:int){ screenDisplay.removeChild(titleScreen); loadLevel(_arg1); } public static function fxToggle(_arg1:MouseEvent){ var e = _arg1; if (fxButton.isOn){ Tweener.addTween(fxTransform, {volume:0, time:1, onUpdate:function (){ fxChannel.soundTransform = fxTransform; }, onComplete:function (){ fxChannel.stop(); }}); fxButton.turnOff(); } else { fxButton.turnOn(); }; } public static function returnToTitle(){ startFadeOut(); Tweener.addTween(transitionScreen, {alpha:1, time:2, onComplete:removeLevel_Title}); } public static function loadLevel(_arg1:int){ currentLevel = new AvalancherLevel(_arg1); screenDisplay.addChild(currentLevel); currentLevel.activate(); fadeIn(); } public static function musicToggle(_arg1:MouseEvent){ var e = _arg1; if (musicButton.isOn){ Tweener.addTween(musicTransform, {volume:0, time:1, onUpdate:function (){ musicChannel.soundTransform = musicTransform; }, onComplete:function (){ musicChannel.stop(); }}); musicButton.turnOff(); } else { musicChannel = avalancherMusic.play(0, int.MAX_VALUE); Tweener.addTween(musicTransform, {volume:1, time:3, onUpdate:function (){ musicChannel.soundTransform = musicTransform; }}); musicButton.turnOn(); }; } public static function loadIntro(){ ssIntro = new LogoIntroClip(); ssIntro.x = 320; ssIntro.y = 240; ssIntro.width = 26573; ssIntro.height = 4489.7; screenDisplay.addChild(ssIntro); Tweener.addTween(ssIntro, {x:491.3, time:1.5, onComplete:addGoThere}); Tweener.addTween(ssIntro, {width:389.4, time:2}); Tweener.addTween(ssIntro, {height:65.8, time:2}); Tweener.addTween(ssIntro, {x:1200, time:3, delay:4}); Tweener.addTween(ssIntro, {width:26573, time:3, delay:4, onComplete:endIntro}); Tweener.addTween(ssIntro, {height:4489.7, time:3, delay:4}); fxChannel = ssIntroSound.play(); } public static function restartLevel(_arg1:int){ startFadeOut(); Tweener.addTween(transitionScreen, {alpha:1, time:2, onComplete:removeLevel_Restart, onCompleteParams:[_arg1]}); } public static function leaveTitle(_arg1:int){ titleScreen.deactivate(); startFadeOut(); Tweener.addTween(transitionScreen, {alpha:1, time:2, onComplete:clearTitle, onCompleteParams:[_arg1]}); } public static function endIntro(){ transitionScreen.alpha = 1; fadeDisplay.addChild(transitionScreen); goThereIntro.removeEventListener(MouseEvent.ROLL_OVER, mouseOverGoThere); goThereIntro.removeEventListener(MouseEvent.ROLL_OUT, mouseOverGoThere); goThereIntro.removeEventListener(MouseEvent.CLICK, clickedGoThere); screenDisplay.removeChild(goThereIntro); screenDisplay.removeChild(ssIntro); ssIntro = null; loadTitle(); } private static function populateLevels(){ var _local1:LevelData; var _local2:int; _local2 = 0; while (_local2 < 12) { _local1 = new LevelData(_local2); levelInfo.push(_local1); _local2++; }; } public static function startFadeOut(){ transitionScreen.alpha = 0; fadeDisplay.addChild(transitionScreen); } } }//package
Section 63
//AvalancherMusic (AvalancherMusic) package { import flash.media.*; public dynamic class AvalancherMusic extends Sound { } }//package
Section 64
//AvalancherTitleScreen (AvalancherTitleScreen) package { import flash.events.*; import caurina.transitions.*; import flash.display.*; import org.generalrelativity.foam.view.*; import flash.net.*; import mochi.*; public class AvalancherTitleScreen extends Sprite { const WONLEVELFX:int = 5; const MOVEDESKIMOFX:int = 6; const BIGBOULDERTRACTION:Number = 0.9; const FOAMESKIMO:int = 1; const HURT2FX:int = 14; const AVALANCHEFX:int = 1; const RIGHTBOUNDARY:int = -640; const ESKIMOFRICTION:Number = 0.1; const TREEHEIGHT:int = 100; const GOODSPOTFX:int = 2; const HURT1FX:int = 13; const TOPBOUNDARY:int = 0; const ESKIMODIEDFX:int = 9; const NUMLEVELS:int = 12; const BIGBOULDERSIZE:int = 25; const SLOPE_ENDING_POINT:int = 50; const TREEFRICTION:Number = 0; const BACKRIGHTBOUNDARY:int = -320; const MAXHEALTH:int = 100; const LEVELWIDTH:int = 0x0500; const STATE_PLACINGESKIMO:int = 1; const TREEWIDTH:int = 20; const ICEBLOCKMASS:int = 20; const BUTTONCLICKFX:int = 10; const DELETE_BLOCK:int = 2; const FOAMBLOCK:int = 3; const NOPEFX:int = 12; const BIGBOULDER1:int = 99; const BIGBOULDER2:int = 102; const BIGBOULDERFRICTION:Number = 0.1; const HOLDBLOCK:int = 104; const ESKIMOMASS:int = 1; const PLACEDBLOCKFX:int = 7; const LEFTBOUNDARY:int = 0; const DRAG:int = 57; const ESKIMOBOUNCE:Number = 0.3; const ESKIMOWIDTH:int = 15; const BACKTOPBOUNDARY:int = 0; const INCREASESIZE:int = 38; const SPACEBAR:int = 32; const BUILD_BLOCK:int = 1; const BOTTOMBOUNDARY:int = -800; const SCROLLAMOUNT:int = 20; const BIGBOULDERMASS:int = 100; const FOAMBOULDER:int = 2; const SLOPEFRICTION:Number = 0; const LEVELHEIGHT:int = 0x0500; const TREEMASS:Number = 50; const BACKLEFTBOUNDARY:int = 0; const LOSTLEVELFX:int = 3; const BACKGROUNDSCROLLAMOUNT:int = 10; const TREE:int = 103; const DECREASESIZE:int = 40; const NOBLOCKSFX:int = 11; const TREEBOUNCE:Number = 0.1; const MEDBOULDER1:int = 98; const MEDBOULDER2:int = 101; const DELETE:int = 48; const EXPORT:int = 96; const BIGBOULDERBOUNCE:Number = 0.5; const SLOPE_POINT:int = 51; const NO_BUILD_STATE:int = 0; const STATE_AVALANCHE:int = 3; const STATE_BUILDINGIGLOO:int = 2; const SLOPEBOUNCE:Number = 0.25; const ESKIMOHEIGHT:int = 26; const REMOVEDBLOCKFX:int = 8; const ICEBLOCKFRICTION:Number = 0.7; const HURT3FX:int = 15; const SLOPE_STARTING_POINT:int = 49; const SMALLBOULDER1:int = 97; const SMALLBOULDER2:int = 100; const ICEBLOCKBOUNCE:Number = 0; const BACKBOTTOMBOUNDARY:int = -400; private var startHereAdded:Boolean;// = false public var playMoreGamesButton:PlayMoreGamesButton; public var agButton:ArmorGamesButton; private var titleScore:TitleScore; private var submitScoreButton:SubmitScoreButton; private var levelMarkers:Array; public var createdByButton:CreatedByButton; private var startHere:StartHereClip; public var totalScore:int;// = 0 private var allBeaten:Boolean;// = true private var congratsScreen:CongratsScreen; public var videoWalkthroughButton:VideoWalkthroughButton; public function AvalancherTitleScreen(){ levelMarkers = new Array(); titleScore = new TitleScore(); submitScoreButton = new SubmitScoreButton(); totalScore = 0; allBeaten = true; startHere = new StartHereClip(); startHereAdded = false; super(); populateMarkers(); titleScore.scoreText.text = ("Score: " + String(totalScore)); titleScore.x = 8; titleScore.y = 9; addChild(titleScore); } public function congratsComplete(){ removeChild(congratsScreen); congratsScreen = null; activate(); } public function deactivate(){ var _local1:int; _local1 = 0; while (_local1 < NUMLEVELS) { levelMarkers[_local1].deactivate(); _local1++; }; createdByButton.removeEventListener(MouseEvent.CLICK, ssClicked); videoWalkthroughButton.removeEventListener(MouseEvent.CLICK, goToWalkthrough); playMoreGamesButton.removeEventListener(MouseEvent.CLICK, goToAG); agButton.removeEventListener(MouseEvent.CLICK, goToAG); if (startHereAdded){ removeChild(startHere); }; } private function okClicked(_arg1:MouseEvent){ congratsScreen.okButton.removeEventListener(MouseEvent.CLICK, okClicked); AvalancherManager.playFx(BUTTONCLICKFX); Tweener.addTween(congratsScreen, {x:-400, time:2, onComplete:congratsComplete}); } public function activate(){ var _local1:int; allBeaten = true; _local1 = 0; while (_local1 < NUMLEVELS) { levelMarkers[_local1].activate(); if (!levelMarkers[_local1].isBeaten){ allBeaten = false; }; _local1++; }; createdByButton.addEventListener(MouseEvent.CLICK, ssClicked); agButton.addEventListener(MouseEvent.CLICK, goToAG); videoWalkthroughButton.addEventListener(MouseEvent.CLICK, goToWalkthrough); playMoreGamesButton.addEventListener(MouseEvent.CLICK, goToAG); if (((allBeaten) && (!(AvalancherManager.congratsShown)))){ AvalancherManager.congratsShown = true; AvalancherManager.resumeLSO.data.congratsShown = true; AvalancherManager.playFx(WONLEVELFX); deactivate(); congratsScreen = new CongratsScreen(); congratsScreen.x = -400; congratsScreen.y = 240; addChild(congratsScreen); congratsScreen.okButton.addEventListener(MouseEvent.CLICK, okClicked); Tweener.addTween(congratsScreen, {x:320, time:2}); }; } private function goToAG(_arg1:MouseEvent){ var _local2:URLRequest; _local2 = new URLRequest("http://www.armorgames.com"); navigateToURL(_local2, "_blank"); } public function populateMarkers(){ var _local1:LevelMarker; var _local2:int; _local2 = 0; while (_local2 < NUMLEVELS) { _local1 = new LevelMarker(_local2); _local1.x = AvalancherManager.levelInfo[_local2].mapPosX; _local1.y = AvalancherManager.levelInfo[_local2].mapPosY; addChild(_local1); if (AvalancherManager.levelInfo[_local2].beaten){ _local1.makeBeaten(); }; if (AvalancherManager.levelInfo[_local2].isAvailable){ _local1.makeAvailable(); }; if ((((_local2 == 1)) && (!(AvalancherManager.levelInfo[_local2].isAvailable)))){ startHere.x = 330; startHere.y = 310; addChild(startHere); startHereAdded = true; } else { startHereAdded = false; }; levelMarkers.push(_local1); totalScore = (totalScore + AvalancherManager.levelInfo[_local2].bestScore); _local2++; }; } private function goToWalkthrough(_arg1:MouseEvent){ var _local2:URLRequest; _local2 = new URLRequest("http://www.youtube.com/watch?v=QFE-BDl1v6I"); navigateToURL(_local2, "_blank"); } private function ssClicked(_arg1:MouseEvent){ var _local2:URLRequest; _local2 = new URLRequest("http://www.sinistersea.com"); navigateToURL(_local2, "_blank"); } } }//package
Section 65
//AvalancheSound (AvalancheSound) package { import flash.media.*; public dynamic class AvalancheSound extends Sound { } }//package
Section 66
//Background1 (Background1) package { import flash.display.*; public dynamic class Background1 extends Sprite { } }//package
Section 67
//BeatenFlag (BeatenFlag) package { import flash.display.*; public dynamic class BeatenFlag extends Sprite { } }//package
Section 68
//BlockHighlight (BlockHighlight) package { import flash.display.*; public dynamic class BlockHighlight extends Sprite { } }//package
Section 69
//BlocksLeft (BlocksLeft) package { import flash.display.*; import flash.text.*; public dynamic class BlocksLeft extends MovieClip { public var blocksLeftText:TextField; public function BlocksLeft(){ addFrameScript(0, frame1, 40, frame41); } function frame1(){ stop(); } function frame41(){ gotoAndStop("normal"); } } }//package
Section 70
//ButtonClickedSound (ButtonClickedSound) package { import flash.media.*; public dynamic class ButtonClickedSound extends Sound { } }//package
Section 71
//CongratsScreen (CongratsScreen) package { import flash.display.*; import flash.text.*; public dynamic class CongratsScreen extends MovieClip { public var okButton:OkButtoncopy; public var titleSuccess:TextField; } }//package
Section 72
//CreatedByButton (CreatedByButton) package { import flash.display.*; public dynamic class CreatedByButton extends SimpleButton { } }//package
Section 73
//Crown (Crown) package { import flash.display.*; public dynamic class Crown extends Sprite { } }//package
Section 74
//EskimoClip (EskimoClip) package { import flash.display.*; public dynamic class EskimoClip extends MovieClip { public var crownClip:Crown; public function EskimoClip(){ addFrameScript(0, frame1, 1, frame2, 2, frame3); } function frame3(){ stop(); } function frame1(){ stop(); } function frame2(){ stop(); } } }//package
Section 75
//EskimoDiedSound (EskimoDiedSound) package { import flash.media.*; public dynamic class EskimoDiedSound extends Sound { } }//package
Section 76
//EskimoHit (EskimoHit) package { import flash.display.*; public dynamic class EskimoHit extends MovieClip { public function EskimoHit(){ addFrameScript(18, frame19); } function frame19(){ stop(); } } }//package
Section 77
//EverythingHolder (EverythingHolder) package { import flash.display.*; public dynamic class EverythingHolder extends MovieClip { public function EverythingHolder(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package
Section 78
//FxButton (FxButton) package { import flash.display.*; public dynamic class FxButton extends MovieClip { public function FxButton(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame3(){ stop(); } function frame1(){ stop(); } function frame4(){ stop(); } function frame2(){ stop(); } } }//package
Section 79
//GoodSpotArrow (GoodSpotArrow) package { import flash.display.*; public dynamic class GoodSpotArrow extends Sprite { } }//package
Section 80
//GoodSpotSound (GoodSpotSound) package { import flash.media.*; public dynamic class GoodSpotSound extends Sound { } }//package
Section 81
//GoThereIntro (GoThereIntro) package { import flash.display.*; public dynamic class GoThereIntro extends MovieClip { public function GoThereIntro(){ addFrameScript(0, frame1, 19, frame20); } function frame1(){ stop(); } function frame20(){ stop(); } } }//package
Section 82
//GraveClip (GraveClip) package { import flash.display.*; public dynamic class GraveClip extends Sprite { } }//package
Section 83
//HealthBar (HealthBar) package { import flash.display.*; public dynamic class HealthBar extends MovieClip { } }//package
Section 84
//HostButton (HostButton) package { import flash.display.*; public dynamic class HostButton extends SimpleButton { } }//package
Section 85
//Hurt1Sound (Hurt1Sound) package { import flash.media.*; public dynamic class Hurt1Sound extends Sound { } }//package
Section 86
//Hurt2Sound (Hurt2Sound) package { import flash.media.*; public dynamic class Hurt2Sound extends Sound { } }//package
Section 87
//Hurt3Sound (Hurt3Sound) package { import flash.media.*; public dynamic class Hurt3Sound extends Sound { } }//package
Section 88
//IceBlock (IceBlock) package { import flash.events.*; import flash.display.*; import org.generalrelativity.foam.view.*; import flash.net.*; import mochi.*; public class IceBlock extends MovieClip { const WONLEVELFX:int = 5; const MOVEDESKIMOFX:int = 6; const BIGBOULDERTRACTION:Number = 0.9; const FOAMESKIMO:int = 1; const HURT2FX:int = 14; const AVALANCHEFX:int = 1; const RIGHTBOUNDARY:int = -640; const ESKIMOFRICTION:Number = 0.1; const TREEHEIGHT:int = 100; const GOODSPOTFX:int = 2; const HURT1FX:int = 13; const TOPBOUNDARY:int = 0; const ESKIMODIEDFX:int = 9; const NUMLEVELS:int = 12; const BIGBOULDERSIZE:int = 25; const SLOPE_ENDING_POINT:int = 50; const TREEFRICTION:Number = 0; const BACKRIGHTBOUNDARY:int = -320; const MAXHEALTH:int = 100; const LEVELWIDTH:int = 0x0500; const STATE_PLACINGESKIMO:int = 1; const TREEWIDTH:int = 20; const ICEBLOCKMASS:int = 20; const DELETE_BLOCK:int = 2; const BUTTONCLICKFX:int = 10; const BIGBOULDER1:int = 99; const BIGBOULDER2:int = 102; const BIGBOULDERFRICTION:Number = 0.1; const NOPEFX:int = 12; const HOLDBLOCK:int = 104; const FOAMBLOCK:int = 3; const ESKIMOMASS:int = 1; const PLACEDBLOCKFX:int = 7; const BACKTOPBOUNDARY:int = 0; const LEFTBOUNDARY:int = 0; const ESKIMOBOUNCE:Number = 0.3; const ESKIMOWIDTH:int = 15; const DRAG:int = 57; const INCREASESIZE:int = 38; const SPACEBAR:int = 32; const BUILD_BLOCK:int = 1; const BOTTOMBOUNDARY:int = -800; const SCROLLAMOUNT:int = 20; const BIGBOULDERMASS:int = 100; const FOAMBOULDER:int = 2; const SLOPEFRICTION:Number = 0; const LEVELHEIGHT:int = 0x0500; const TREEMASS:Number = 50; const BACKLEFTBOUNDARY:int = 0; const LOSTLEVELFX:int = 3; const BACKGROUNDSCROLLAMOUNT:int = 10; const TREE:int = 103; const DECREASESIZE:int = 40; const NOBLOCKSFX:int = 11; const TREEBOUNCE:Number = 0.1; const MEDBOULDER1:int = 98; const MEDBOULDER2:int = 101; const DELETE:int = 48; const EXPORT:int = 96; const BIGBOULDERBOUNCE:Number = 0.5; const SLOPE_POINT:int = 51; const NO_BUILD_STATE:int = 0; const STATE_AVALANCHE:int = 3; const STATE_BUILDINGIGLOO:int = 2; const SLOPEBOUNCE:Number = 0.25; const ESKIMOHEIGHT:int = 26; const REMOVEDBLOCKFX:int = 8; const HURT3FX:int = 15; const ICEBLOCKFRICTION:Number = 0.7; const SLOPE_STARTING_POINT:int = 49; const SMALLBOULDER1:int = 97; const SMALLBOULDER2:int = 100; const ICEBLOCKBOUNCE:Number = 0; const BACKBOTTOMBOUNDARY:int = -400; public var blockHere:Boolean;// = false public var blockHighlight:BlockHighlight; public var linkId:int;// = 0 public var xPos:int;// = 0 public var yPos:int;// = 0 public var permanentlyEmpty:Boolean;// = false public function IceBlock(_arg1:int, _arg2:int){ blockHighlight = new BlockHighlight(); blockHere = false; permanentlyEmpty = false; yPos = 0; xPos = 0; linkId = 0; super(); addFrameScript(0, frame1, 1, frame2); this.mouseChildren = false; yPos = _arg1; xPos = _arg2; } private function mousePressed(_arg1:MouseEvent){ if (!permanentlyEmpty){ if (blockHere){ _arg1.target.parent.parent.mouseBuildState = DELETE_BLOCK; removeBlock(); if (_arg1.target.parent.parent.currentBlocks < _arg1.target.parent.parent.maxBlocks){ _arg1.target.parent.parent.currentBlocks++; }; _arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks); _arg1.target.parent.parent.blocksLeft.gotoAndStop("normal"); } else { _arg1.target.parent.parent.mouseBuildState = BUILD_BLOCK; if (_arg1.target.parent.parent.currentBlocks > 0){ addBlock(); _arg1.target.parent.parent.currentBlocks--; _arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks); _arg1.target.parent.parent.blocksLeft.gotoAndStop("normal"); } else { if (_arg1.target.parent.parent.blocksLeft.currentLabel == "normal"){ _arg1.target.parent.parent.blocksLeft.gotoAndPlay("outOfBlocks"); AvalancherManager.playFx(NOBLOCKSFX); }; }; }; }; } private function mouseOverClip(_arg1:MouseEvent){ if (!permanentlyEmpty){ addChild(blockHighlight); if (_arg1.buttonDown){ if (_arg1.target.parent.parent.mouseBuildState == DELETE_BLOCK){ if (blockHere){ removeBlock(); if (_arg1.target.parent.parent.currentBlocks < _arg1.target.parent.parent.maxBlocks){ _arg1.target.parent.parent.currentBlocks++; }; _arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks); _arg1.target.parent.parent.blocksLeft.gotoAndStop("normal"); }; } else { if (_arg1.target.parent.parent.mouseBuildState == BUILD_BLOCK){ if ((((_arg1.target.parent.parent.currentBlocks > 0)) && (!(blockHere)))){ addBlock(); _arg1.target.parent.parent.currentBlocks--; _arg1.target.parent.parent.blocksLeft.blocksLeftText.text = String(_arg1.target.parent.parent.currentBlocks); _arg1.target.parent.parent.blocksLeft.gotoAndStop("normal"); } else { if (_arg1.target.parent.parent.currentBlocks <= 0){ if (_arg1.target.parent.parent.blocksLeft.currentLabel == "normal"){ _arg1.target.parent.parent.blocksLeft.gotoAndPlay("outOfBlocks"); AvalancherManager.playFx(NOBLOCKSFX); }; }; }; }; }; }; }; } function frame2(){ stop(); } private function removeBlock(){ AvalancherManager.playFx(REMOVEDBLOCKFX); gotoAndStop("empty"); blockHere = false; } public function deactivate(){ removeEventListener(MouseEvent.MOUSE_DOWN, mousePressed); removeEventListener(MouseEvent.MOUSE_OVER, mouseOverClip); removeEventListener(MouseEvent.MOUSE_OUT, mouseLeftClip); buttonMode = false; useHandCursor = false; } private function addBlock(){ AvalancherManager.playFx(PLACEDBLOCKFX); gotoAndStop("OOOO"); blockHere = true; } function frame1(){ stop(); } public function activate(){ addEventListener(MouseEvent.MOUSE_DOWN, mousePressed); addEventListener(MouseEvent.ROLL_OVER, mouseOverClip); addEventListener(MouseEvent.ROLL_OUT, mouseLeftClip); buttonMode = true; useHandCursor = true; } private function mouseLeftClip(_arg1:MouseEvent){ if (!permanentlyEmpty){ removeChild(blockHighlight); }; } } }//package
Section 89
//IceBlockClip (IceBlockClip) package { import flash.display.*; public dynamic class IceBlockClip extends MovieClip { public function IceBlockClip(){ addFrameScript(0, frame1, 20, frame21); } function frame1(){ stop(); } function frame21(){ stop(); } } }//package
Section 90
//LevelData (LevelData) package { import flash.events.*; public class LevelData { const WONLEVELFX:int = 5; const BUTTONCLICKFX:int = 10; const HOLDBLOCK:int = 104; const MOVEDESKIMOFX:int = 6; const HURT2FX:int = 14; const BACKTOPBOUNDARY:int = 0; const BIGBOULDERTRACTION:Number = 0.9; const ESKIMOMASS:int = 1; const FOAMESKIMO:int = 1; const AVALANCHEFX:int = 1; const RIGHTBOUNDARY:int = -640; const ESKIMOFRICTION:Number = 0.1; const PLACEDBLOCKFX:int = 7; const LEFTBOUNDARY:int = 0; const DRAG:int = 57; const ESKIMOBOUNCE:Number = 0.3; const ESKIMOWIDTH:int = 15; const NOPEFX:int = 12; const INCREASESIZE:int = 38; const BUILD_BLOCK:int = 1; const SPACEBAR:int = 32; const GOODSPOTFX:int = 2; const TREEHEIGHT:int = 100; const BOTTOMBOUNDARY:int = -800; const HURT1FX:int = 13; const NUMLEVELS:int = 12; const TOPBOUNDARY:int = 0; const BIGBOULDERMASS:int = 100; const ESKIMODIEDFX:int = 9; const SCROLLAMOUNT:int = 20; const BIGBOULDERSIZE:int = 25; const SLOPEFRICTION:Number = 0; const FOAMBOULDER:int = 2; const LEVELHEIGHT:int = 0x0500; const SLOPE_ENDING_POINT:int = 50; const TREEMASS:Number = 50; const BACKGROUNDSCROLLAMOUNT:int = 10; const BACKLEFTBOUNDARY:int = 0; const LOSTLEVELFX:int = 3; const TREE:int = 103; const BACKRIGHTBOUNDARY:int = -320; const MAXHEALTH:int = 100; const DECREASESIZE:int = 40; const NOBLOCKSFX:int = 11; const DELETE:int = 48; const MEDBOULDER1:int = 98; const MEDBOULDER2:int = 101; const EXPORT:int = 96; const BIGBOULDERBOUNCE:Number = 0.5; const TREEFRICTION:Number = 0; const SLOPE_POINT:int = 51; const REMOVEDBLOCKFX:int = 8; const NO_BUILD_STATE:int = 0; const STATE_PLACINGESKIMO:int = 1; const STATE_AVALANCHE:int = 3; const LEVELWIDTH:int = 0x0500; const STATE_BUILDINGIGLOO:int = 2; const TREEWIDTH:int = 20; const SLOPEBOUNCE:Number = 0.25; const ESKIMOHEIGHT:int = 26; const ICEBLOCKMASS:int = 20; const TREEBOUNCE:Number = 0.1; const DELETE_BLOCK:int = 2; const ICEBLOCKFRICTION:Number = 0.7; const BIGBOULDER1:int = 99; const SLOPE_STARTING_POINT:int = 49; const BIGBOULDERFRICTION:Number = 0.1; const ICEBLOCKBOUNCE:Number = 0; const SMALLBOULDER1:int = 97; const SMALLBOULDER2:int = 100; const HURT3FX:int = 15; const BIGBOULDER2:int = 102; const FOAMBLOCK:int = 3; const BACKBOTTOMBOUNDARY:int = -400; public var foregroundBoulderPos:Array; public var backgroundBoulderPos:Array; public var mapPosY:int;// = 0 public var bestScore:int;// = 0 public var levelName:String; public var treePos:Array; public var mapPosX:int;// = 0 public var levelTime:int;// = 0 public var slopePointPos:Array; public var backgroundType:Object; public var isAvailable:Boolean;// = false public var startingBlocks:int;// = 0 public var levelNumber:int;// = 0 public var beaten:Boolean;// = false public var levelBonus:int;// = 0 public function LevelData(_arg1:int){ levelNumber = 0; levelTime = 0; startingBlocks = 0; levelBonus = 0; isAvailable = false; beaten = false; bestScore = 0; mapPosX = 0; mapPosY = 0; slopePointPos = new Array(); foregroundBoulderPos = new Array(); backgroundBoulderPos = new Array(); treePos = new Array(); super(); levelNumber = _arg1; populateLevel(); } public function deactivate(){ } private function startGame(_arg1:MouseEvent){ deactivate(); } public function populateLevel(){ switch (levelNumber){ case 0: levelName = "Bunny Slope"; levelTime = 300; startingBlocks = 10; levelBonus = 100; mapPosX = 500; mapPosY = 340; isAvailable = true; backgroundType = Background1; slopePointPos[0] = [-400, 110, 185, 314, 377, 469, 670, 772, 770, 926, 1045, 1202, 1325, 1486, 1680]; slopePointPos[1] = [1272, 1055, 915, 884, 761, 673, 622, 622, 486, 425, 283, 142, 106, 61, -8]; foregroundBoulderPos[0] = [1307, 1344, 1330, 1393, 1364, 1465, 1596, 1567, 1626, 1519]; foregroundBoulderPos[1] = [88, 71, 28, 45, -9, -81, -32, -116, -111, 14]; foregroundBoulderPos[2] = [16, 21, 11, 31, 21, 56, 36, 21, 31, 21]; treePos[0] = [269, 212, 56, 539]; treePos[1] = [835, 851, 1019, 595]; break; case 1: levelName = "Hidden Valley"; levelTime = 200; startingBlocks = 15; levelBonus = 600; mapPosX = 290; mapPosY = 350; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, -88, 90, 210, 245, 289, 371, 421, 461, 509, 570, 619, 720, 833, 934, 990, 1048, 1073, 1054, 985, 908, 1134, 1346, 1404, 1680]; slopePointPos[1] = [-293, -26, 258, 688, 909, 1021, 1029, 999, 885, 774, 737, 667, 668, 703, 855, 869, 867, 784, 601, 532, 463, 397, 34, -155, -314]; foregroundBoulderPos[0] = [-202, -138, -99, 1425, 1478, 1571, 1577, 1630]; foregroundBoulderPos[1] = [-180, -177, -101, -206, -270, -303, -359, -317]; foregroundBoulderPos[2] = [31, 21, 41, 21, 51, 36, 11, 21]; treePos[0] = [525, 824, 383, 329, 297, 708]; treePos[1] = [704, 640, 962, 968, 963, 612]; break; case 2: levelName = "Bald Mountain"; levelTime = 125; startingBlocks = 15; levelBonus = 500; mapPosX = 70; mapPosY = 125; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 42, 114, 162, 200, 211, 238, 245, 338, 342, 379, 395, 494, 527, 562, 599, 637, 682, 714, 761, 866, 885, 905, 925, 935, 1053, 1058, 1103, 1181, 1265, 1360, 1680]; slopePointPos[1] = [916, 1201, 1207, 1185, 1111, 1032, 988, 897, 897, 781, 694, 621, 621, 564, 475, 424, 411, 424, 478, 625, 625, 687, 736, 807, 889, 889, 1017, 1057, 1070, 1039, 981, 902]; foregroundBoulderPos[0] = [695, 605, 623, 677, 609, 698, 572, 647]; foregroundBoulderPos[1] = [-137, -67, -204, -233, -358, -190, -148, -311]; foregroundBoulderPos[2] = [21, 11, 26, 21, 11, 11, 21, 36]; treePos[0] = [1042, 954, 855, 772, 482, 403, 325, 249]; treePos[1] = [834, 834, 569, 569, 564, 565, 842, 843]; break; case 3: levelName = "Indiana Heights"; levelTime = 250; startingBlocks = 1; levelBonus = 1100; mapPosX = 170; mapPosY = 270; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 18, 108, 149, 178, 190, 233, 284, 361, 459, 564, 653, 684, 725, 797, 869, 987, 1058, 1121, 1172, 1322, 1680]; slopePointPos[1] = [-98, 206, 208, 235, 279, 330, 392, 451, 488, 525, 0x0200, 546, 628, 735, 815, 841, 841, 853, 901, 994, 1157, 1427]; foregroundBoulderPos[0] = [-297]; foregroundBoulderPos[1] = [-142]; foregroundBoulderPos[2] = [81]; treePos[0] = []; treePos[1] = []; break; case 4: levelName = "The Gap"; levelTime = 240; startingBlocks = 5; levelBonus = 1200; mapPosX = 360; mapPosY = 270; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, -190, 98, 259, 496, 601, 597, 797, 801, 921, 1199, 1396, 1680]; slopePointPos[1] = [151, 381, 520, 671, 749, 749, 1619, 1618, 747, 748, 613, 351, 51]; foregroundBoulderPos[0] = [-211, -256, -324, -260, -177, 1546, 1597, 1630]; foregroundBoulderPos[1] = [295, 225, 168, 148, 249, 131, 100, 55]; foregroundBoulderPos[2] = [26, 46, 36, 21, 16, 36, 21, 31]; treePos[0] = [826, 572]; treePos[1] = [691, 694]; break; case 5: levelName = "Mount Crumpet"; levelTime = 180; startingBlocks = 5; levelBonus = 1000; mapPosX = 175; mapPosY = 145; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 119, 233, 365, 435, 376, 320, 248, 195, 131, 142, 219, 308, 374, 459, 543, 655, 842, 1020, 1303, 1680]; slopePointPos[1] = [1590, 1556, 1304, 1173, 987, 795, 664, 599, 595, 649, 567, 498, 498, 521, 591, 701, 841, 1019, 1141, 1231, 1590]; foregroundBoulderPos[0] = [176, 240, 243, 268, 383, 479, 331, 393]; foregroundBoulderPos[1] = [-191, -289, -34, -126, -335, -171, -196, -80]; foregroundBoulderPos[2] = [26, 41, 11, 31, 36, 46, 16, 11]; treePos[0] = [1072, 1222, 301]; treePos[1] = [1099, 1146, 1172]; break; case 6: levelName = "Meteor Flats"; levelTime = 150; startingBlocks = 3; levelBonus = 500; mapPosX = 80; mapPosY = 350; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 1680]; slopePointPos[1] = [825, 825]; foregroundBoulderPos[0] = [50, 175, 340, 249, 469, 550, 670, 743, 878, 810, 968, 1066, 1138, 1228, 582]; foregroundBoulderPos[1] = [-132, -99, -172, -131, -105, -336, -233, -114, -168, -262, -98, -282, -179, -98, -152]; foregroundBoulderPos[2] = [36, 21, 51, 16, 31, 36, 26, 46, 36, 16, 51, 51, 41, 21, 76]; treePos[0] = [1155, 915, 239]; treePos[1] = [0x0300, 0x0300, 769]; break; case 7: levelName = "Lover's Leap"; levelTime = 200; startingBlocks = 0; levelBonus = 1100; mapPosX = 320; mapPosY = 95; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, -10, 194, 287, 391, 394, 662, 654, 0x0303, 1002, 1157, 1336, 1680]; slopePointPos[1] = [-260, 266, 388, 405, 405, 1636, 1633, 921, 919, 781, 659, 415, 115]; foregroundBoulderPos[0] = [1341, -128]; foregroundBoulderPos[1] = [330, 53]; foregroundBoulderPos[2] = [56, 26]; treePos[0] = []; treePos[1] = []; break; case 8: levelName = "Lemming Cliff"; levelTime = 250; startingBlocks = 20; levelBonus = 1700; mapPosX = 280; mapPosY = 175; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 481, 479, 624, 793, 1004, 1146, 1680]; slopePointPos[1] = [1557, 1546, 845, 836, 773, 635, 472, -330]; foregroundBoulderPos[0] = [1469, 1486, 1524, 1557, 1538, 1505, 1575, 1527, 1500, 1592, 1564, 1585, 1613, 1585, 1553, 1513, 1476, 1463, 1614, 1632]; foregroundBoulderPos[1] = [-34, -59, -116, -171, -143, -85, -198, -172, -116, -231, -232, -212, -256, -269, -201, -143, -88, -60, -282, -280]; foregroundBoulderPos[2] = [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]; treePos[0] = [704, 865]; treePos[1] = [748, 666]; break; case 9: levelName = "Precarious Peaks"; levelTime = 250; startingBlocks = 5; levelBonus = 700; mapPosX = 555; mapPosY = 140; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 247, 249, 365, 371, 470, 469, 577, 580, 686, 685, 794, 793, 910, 910, 1031, 1030, 1680]; slopePointPos[1] = [-108, 607, 1607, 1607, 823, 823, 1604, 1606, 944, 944, 1603, 1602, 814, 814, 1603, 1602, 599, -108]; foregroundBoulderPos[0] = [1456, 1520, -261, -206, -158, -133, -340, -281, 1612, 1627, 1549, 1418]; foregroundBoulderPos[1] = [62, -38, -63, 29, 97, 42, -134, -171, -102, -185, -146, 119]; foregroundBoulderPos[2] = [36, 61, 61, 41, 31, 16, 31, 31, 36, 41, 21, 16]; treePos[0] = []; treePos[1] = []; break; case 10: levelName = "The Great Depression"; levelTime = 220; startingBlocks = 30; levelBonus = 1500; mapPosX = 440; mapPosY = 200; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, -54, 97, 259, 382, 482, 578, 659, 741, 821, 931, 1032, 1148, 1289, 1680]; slopePointPos[1] = [-99, 462, 719, 934, 1085, 1154, 1198, 1198, 1196, 1158, 1075, 944, 778, 574, -102]; foregroundBoulderPos[0] = [1587, 1487, -24, -43, -19, -65, -23, -92, -27, 1614, 1631, 1557, 1510]; foregroundBoulderPos[1] = [-131, -185, 468, 425, 394, 375, 351, 305, 304, -332, -223, -227, -290]; foregroundBoulderPos[2] = [46, 46, 16, 21, 11, 26, 16, 41, 21, 61, 41, 31, 41]; treePos[0] = []; treePos[1] = []; break; case 11: levelName = "Mount Doom"; levelTime = 100; startingBlocks = 15; levelBonus = 1800; mapPosX = 420; mapPosY = 50; isAvailable = false; backgroundType = Background1; slopePointPos[0] = [-400, 236, 419, 500, 499, 539, 540, 577, 606, 670, 666, 707, 708, 750, 750, 841, 1026, 1680]; slopePointPos[1] = [1379, 727, 442, 233, 317, 317, 471, 471, 1634, 1635, 462, 462, 318, 318, 235, 444, 725, 1379]; foregroundBoulderPos[0] = [524, 533, 605, 670, 618, 545, 594, 661, 670, 564, 636, 563, 683, 593, 548, 673, 725, 373, 848, 259, 272, 1008, 1053, 904, 447]; foregroundBoulderPos[1] = [-312, -246, -260, -323, -355, -97, -27, -71, -144, -357, -302, -280, -197, -116, -185, -372, -264, -187, -124, -48, -237, -263, -107, -345, -275]; foregroundBoulderPos[2] = [16, 11, 21, 16, 21, 6, 6, 11, 16, 26, 21, 21, 16, 11, 21, 26, 21, 21, 26, 26, 31, 31, 36, 31, 26]; treePos[0] = []; treePos[1] = []; break; }; } public function activate(){ } } }//package
Section 91
//LevelMarker (LevelMarker) package { import flash.events.*; import flash.display.*; import org.generalrelativity.foam.view.*; import flash.text.*; import flash.net.*; import mochi.*; public class LevelMarker extends MovieClip { const WONLEVELFX:int = 5; const MOVEDESKIMOFX:int = 6; const BIGBOULDERTRACTION:Number = 0.9; const FOAMESKIMO:int = 1; const HURT2FX:int = 14; const AVALANCHEFX:int = 1; const RIGHTBOUNDARY:int = -640; const ESKIMOFRICTION:Number = 0.1; const TREEHEIGHT:int = 100; const GOODSPOTFX:int = 2; const HURT1FX:int = 13; const TOPBOUNDARY:int = 0; const ESKIMODIEDFX:int = 9; const NUMLEVELS:int = 12; const BIGBOULDERSIZE:int = 25; const SLOPE_ENDING_POINT:int = 50; const TREEFRICTION:Number = 0; const BACKRIGHTBOUNDARY:int = -320; const MAXHEALTH:int = 100; const LEVELWIDTH:int = 0x0500; const STATE_PLACINGESKIMO:int = 1; const TREEWIDTH:int = 20; const ICEBLOCKMASS:int = 20; const DELETE_BLOCK:int = 2; const BUTTONCLICKFX:int = 10; const BIGBOULDER1:int = 99; const BIGBOULDER2:int = 102; const BIGBOULDERFRICTION:Number = 0.1; const NOPEFX:int = 12; const HOLDBLOCK:int = 104; const FOAMBLOCK:int = 3; const ESKIMOMASS:int = 1; const BACKTOPBOUNDARY:int = 0; const LEFTBOUNDARY:int = 0; const ESKIMOBOUNCE:Number = 0.3; const ESKIMOWIDTH:int = 15; const DRAG:int = 57; const INCREASESIZE:int = 38; const PLACEDBLOCKFX:int = 7; const SPACEBAR:int = 32; const BUILD_BLOCK:int = 1; const BOTTOMBOUNDARY:int = -800; const SCROLLAMOUNT:int = 20; const BIGBOULDERMASS:int = 100; const FOAMBOULDER:int = 2; const SLOPEFRICTION:Number = 0; const LEVELHEIGHT:int = 0x0500; const TREEMASS:Number = 50; const BACKLEFTBOUNDARY:int = 0; const LOSTLEVELFX:int = 3; const BACKGROUNDSCROLLAMOUNT:int = 10; const TREE:int = 103; const DECREASESIZE:int = 40; const NOBLOCKSFX:int = 11; const TREEBOUNCE:Number = 0.1; const MEDBOULDER1:int = 98; const MEDBOULDER2:int = 101; const DELETE:int = 48; const EXPORT:int = 96; const BIGBOULDERBOUNCE:Number = 0.5; const SLOPE_POINT:int = 51; const NO_BUILD_STATE:int = 0; const STATE_AVALANCHE:int = 3; const STATE_BUILDINGIGLOO:int = 2; const SLOPEBOUNCE:Number = 0.25; const ESKIMOHEIGHT:int = 26; const REMOVEDBLOCKFX:int = 8; const ICEBLOCKFRICTION:Number = 0.7; const SLOPE_STARTING_POINT:int = 49; const SMALLBOULDER1:int = 97; const SMALLBOULDER2:int = 100; const HURT3FX:int = 15; const ICEBLOCKBOUNCE:Number = 0; const BACKBOTTOMBOUNDARY:int = -400; public var isBeaten:Boolean;// = false public var isAvailable:Boolean;// = false public var beatenFlag:BeatenFlag; public var markerHover:MarkerHover; public var levelLabel:TextField; public var levelNumber:int;// = 0 public function LevelMarker(_arg1:int){ levelNumber = 0; isAvailable = false; isBeaten = false; super(); addFrameScript(0, frame1, 1, frame2); this.buttonMode = true; this.useHandCursor = true; this.mouseChildren = false; levelNumber = _arg1; gotoAndStop("unavailable"); markerHover.visible = false; beatenFlag.visible = false; levelLabel.visible = false; } private function mouseOverClip(_arg1:MouseEvent){ if (isAvailable){ markerHover.visible = true; }; } function frame2(){ stop(); } private function startLevel(_arg1:MouseEvent){ AvalancherManager.leaveTitle(levelNumber); AvalancherManager.playFx(BUTTONCLICKFX); } public function deactivate(){ if (isAvailable){ removeEventListener(MouseEvent.CLICK, startLevel); }; removeEventListener(MouseEvent.ROLL_OVER, mouseOverClip); removeEventListener(MouseEvent.ROLL_OUT, mouseOutClip); } public function makeAvailable(){ levelLabel.visible = true; isAvailable = true; gotoAndStop("available"); levelLabel.text = AvalancherManager.levelInfo[levelNumber].levelName; if (isBeaten){ beatenFlag.visible = true; levelLabel.text = ((AvalancherManager.levelInfo[levelNumber].levelName + "\n") + String(AvalancherManager.levelInfo[levelNumber].bestScore)); }; } public function makeBeaten(){ isBeaten = true; beatenFlag.visible = true; levelLabel.text = ((AvalancherManager.levelInfo[levelNumber].levelName + "\n") + String(AvalancherManager.levelInfo[levelNumber].bestScore)); } function frame1(){ stop(); } public function activate(){ if (isAvailable){ addEventListener(MouseEvent.CLICK, startLevel); }; addEventListener(MouseEvent.ROLL_OVER, mouseOverClip); addEventListener(MouseEvent.ROLL_OUT, mouseOutClip); } private function mouseOutClip(_arg1:MouseEvent){ if (isAvailable){ markerHover.visible = false; }; } } }//package
Section 92
//LogoIntroClip (LogoIntroClip) package { import flash.display.*; public dynamic class LogoIntroClip extends MovieClip { } }//package
Section 93
//LostLevelSound (LostLevelSound) package { import flash.media.*; public dynamic class LostLevelSound extends Sound { } }//package
Section 94
//MarkerHover (MarkerHover) package { import flash.display.*; public dynamic class MarkerHover extends Sprite { } }//package
Section 95
//MovedEskimoSound (MovedEskimoSound) package { import flash.media.*; public dynamic class MovedEskimoSound extends Sound { } }//package
Section 96
//MusicButton (MusicButton) package { import flash.display.*; public dynamic class MusicButton extends MovieClip { public function MusicButton(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4); } function frame3(){ stop(); } function frame1(){ stop(); } function frame4(){ stop(); } function frame2(){ stop(); } } }//package
Section 97
//NewLevelButton (NewLevelButton) package { import flash.display.*; public dynamic class NewLevelButton extends SimpleButton { } }//package
Section 98
//NoBlocksSound (NoBlocksSound) package { import flash.media.*; public dynamic class NoBlocksSound extends Sound { } }//package
Section 99
//NopeSound (NopeSound) package { import flash.media.*; public dynamic class NopeSound extends Sound { } }//package
Section 100
//OkButtoncopy (OkButtoncopy) package { import flash.display.*; public dynamic class OkButtoncopy extends SimpleButton { } }//package
Section 101
//PlacedBlockSound (PlacedBlockSound) package { import flash.media.*; public dynamic class PlacedBlockSound extends Sound { } }//package
Section 102
//PlayMoreGamesButton (PlayMoreGamesButton) package { import flash.display.*; public dynamic class PlayMoreGamesButton extends SimpleButton { } }//package
Section 103
//RemovedBlockSound (RemovedBlockSound) package { import flash.media.*; public dynamic class RemovedBlockSound extends Sound { } }//package
Section 104
//ScoreScreen (ScoreScreen) package { import flash.display.*; import flash.text.*; public dynamic class ScoreScreen extends MovieClip { public var tryAgainButton:TryAgainButton; public var bonusAmounts:TextField; public var bonusLabel:TextField; public var finalLabel:TextField; public var newLevelButton:NewLevelButton; public var otherBonusAmounts:TextField; public var previousAmount:TextField; public var previousLabel:TextField; public var otherBonusLabel:TextField; public var finalAmount:TextField; public var failGrave:GraveClip; public var titleSuccess:TextField; public var titleFail:TextField; public var otherBonusText:TextField; } }//package
Section 105
//ScreenObscurer (ScreenObscurer) package { import flash.display.*; public dynamic class ScreenObscurer extends MovieClip { public function ScreenObscurer(){ addFrameScript(34, frame35); } function frame35(){ stop(); } } }//package
Section 106
//ScrollArrow (ScrollArrow) package { import flash.display.*; public dynamic class ScrollArrow extends MovieClip { public function ScrollArrow(){ addFrameScript(0, frame1, 1, frame2, 2, frame3, 3, frame4, 4, frame5, 5, frame6, 6, frame7, 7, frame8); } function frame3(){ stop(); } function frame6(){ stop(); } function frame7(){ stop(); } function frame1(){ stop(); } function frame4(){ stop(); } function frame5(){ stop(); } function frame8(){ stop(); } function frame2(){ stop(); } } }//package
Section 107
//SmallBoulder1 (SmallBoulder1) package { import flash.display.*; public dynamic class SmallBoulder1 extends MovieClip { } }//package
Section 108
//SmallBoulder2 (SmallBoulder2) package { import flash.display.*; public dynamic class SmallBoulder2 extends MovieClip { } }//package
Section 109
//Smash (Smash) package { import flash.media.*; public dynamic class Smash extends Sound { } }//package
Section 110
//SSIntroSound (SSIntroSound) package { import flash.media.*; public dynamic class SSIntroSound extends Sound { } }//package
Section 111
//StartHereClip (StartHereClip) package { import flash.display.*; public dynamic class StartHereClip extends Sprite { } }//package
Section 112
//SubmitScoreButton (SubmitScoreButton) package { import flash.display.*; public dynamic class SubmitScoreButton extends SimpleButton { } }//package
Section 113
//TimeBar (TimeBar) package { import flash.display.*; public dynamic class TimeBar extends MovieClip { } }//package
Section 114
//TitleScore (TitleScore) package { import flash.display.*; import flash.text.*; public dynamic class TitleScore extends Sprite { public var scoreText:TextField; } }//package
Section 115
//ToggleButton (ToggleButton) package { import flash.events.*; import flash.display.*; public class ToggleButton { public var idNumber:int;// = 0 public var isOn:Boolean;// = false public var isMouseOver:Boolean;// = false public var clip:MovieClip; public function ToggleButton(){ isOn = false; isMouseOver = false; idNumber = 0; super(); } public function turnOn(){ isOn = true; if (isMouseOver){ clip.gotoAndStop("onOver"); } else { clip.gotoAndStop("on"); }; } public function mouseOverButton(_arg1:MouseEvent){ isMouseOver = true; if (isOn){ clip.gotoAndStop("onOver"); } else { clip.gotoAndStop("offOver"); }; } public function deactivate(){ clip.removeEventListener(MouseEvent.MOUSE_OVER, mouseOverButton); clip.removeEventListener(MouseEvent.MOUSE_OUT, mouseOffButton); clip.buttonMode = false; } public function turnOff(){ isOn = false; if (isMouseOver){ clip.gotoAndStop("offOver"); } else { clip.gotoAndStop("off"); }; } public function activate(){ clip.addEventListener(MouseEvent.MOUSE_OVER, mouseOverButton); clip.addEventListener(MouseEvent.MOUSE_OUT, mouseOffButton); clip.buttonMode = true; } public function mouseClickedButton(_arg1:MouseEvent){ if (isOn){ isOn = false; clip.gotoAndStop("offOver"); } else { isOn = true; clip.gotoAndStop("onOver"); }; } public function mouseOffButton(_arg1:MouseEvent){ isMouseOver = false; if (isOn){ clip.gotoAndStop("on"); } else { clip.gotoAndStop("off"); }; } } }//package
Section 116
//TransitionScreen (TransitionScreen) package { import flash.display.*; public dynamic class TransitionScreen extends Sprite { } }//package
Section 117
//TreeClip (TreeClip) package { import flash.display.*; public dynamic class TreeClip extends Sprite { } }//package
Section 118
//TriggerInstructions (TriggerInstructions) package { import flash.display.*; public dynamic class TriggerInstructions extends Sprite { } }//package
Section 119
//TryAgainButton (TryAgainButton) package { import flash.display.*; public dynamic class TryAgainButton extends SimpleButton { } }//package
Section 120
//TutorialBox (TutorialBox) package { import flash.display.*; import flash.text.*; public dynamic class TutorialBox extends MovieClip { public var tutorialText:TextField; } }//package
Section 121
//VideoWalkthroughButton (VideoWalkthroughButton) package { import flash.display.*; public dynamic class VideoWalkthroughButton extends SimpleButton { } }//package
Section 122
//WonLevelSound (WonLevelSound) package { import flash.media.*; public dynamic class WonLevelSound extends Sound { } }//package

Library Items

Symbol 1 Sound {Smash}
Symbol 2 GraphicUsed by:3
Symbol 3 MovieClip {SmallBoulder2}Uses:2
Symbol 4 FontUsed by:5 95 102 103 104 105 106 107 108 109 110 111 138 147 164 166
Symbol 5 EditableTextUses:4 22Used by:Timeline
Symbol 6 GraphicUsed by:26 29 33 36 151 188 207
Symbol 7 GraphicUsed by:188
Symbol 8 GraphicUsed by:16
Symbol 9 GraphicUsed by:16
Symbol 10 GraphicUsed by:16
Symbol 11 GraphicUsed by:16
Symbol 12 GraphicUsed by:16
Symbol 13 GraphicUsed by:16
Symbol 14 GraphicUsed by:16
Symbol 15 GraphicUsed by:16
Symbol 16 MovieClip {ScrollArrow}Uses:8 9 10 11 12 13 14 15Used by:188
Symbol 17 BitmapUsed by:18
Symbol 18 GraphicUses:17Used by:19
Symbol 19 MovieClip {Background1}Uses:18Used by:188
Symbol 20 BitmapUsed by:21
Symbol 21 GraphicUses:20Used by:37
Symbol 22 FontUsed by:5 23 24 25 27 28 30 34 35 95 97 99 102 103 104 105 106 107 108 109 110 111 113 115 118 119 128 130 133 135 138 141 147 149 150 153 166 167 168 169 205 206
Symbol 23 TextUses:22Used by:37
Symbol 24 TextUses:22Used by:26
Symbol 25 TextUses:22Used by:26
Symbol 26 Button {PlayMoreGamesButton}Uses:24 25 6Used by:37
Symbol 27 TextUses:22Used by:29
Symbol 28 TextUses:22Used by:29
Symbol 29 Button {CreatedByButton}Uses:27 28 6Used by:37 188
Symbol 30 TextUses:22Used by:37
Symbol 31 BitmapUsed by:32
Symbol 32 GraphicUses:31Used by:33
Symbol 33 Button {ArmorGamesButton}Uses:32 6Used by:37
Symbol 34 TextUses:22Used by:36
Symbol 35 TextUses:22Used by:36
Symbol 36 Button {VideoWalkthroughButton}Uses:34 35 6Used by:37
Symbol 37 MovieClip {AvalancherTitleScreen}Uses:21 23 26 29 30 33 36Used by:188
Symbol 38 GraphicUsed by:39
Symbol 39 MovieClip {MarkerHover}Uses:38Used by:47 188
Symbol 40 GraphicUsed by:41
Symbol 41 MovieClip {BeatenFlag}Uses:40Used by:47 188
Symbol 42 GraphicUsed by:47
Symbol 43 FontUsed by:44
Symbol 44 EditableTextUses:43Used by:47
Symbol 45 GraphicUsed by:46
Symbol 46 MovieClipUses:45Used by:47
Symbol 47 MovieClip {LevelMarker}Uses:39 41 42 44 46Used by:188
Symbol 48 GraphicUsed by:54
Symbol 49 GraphicUsed by:54
Symbol 50 GraphicUsed by:51
Symbol 51 MovieClip {Crown}Uses:50Used by:54 188
Symbol 52 GraphicUsed by:54
Symbol 53 GraphicUsed by:54
Symbol 54 MovieClip {EskimoClip}Uses:48 49 51 52 53Used by:171 188
Symbol 55 GraphicUsed by:61
Symbol 56 GraphicUsed by:57
Symbol 57 MovieClipUses:56Used by:61
Symbol 58 GraphicUsed by:59
Symbol 59 MovieClipUses:58Used by:61 69
Symbol 60 GraphicUsed by:61 69 89
Symbol 61 MovieClip {IceBlock}Uses:55 57 59 60Used by:188
Symbol 62 GraphicUsed by:63
Symbol 63 MovieClip {BlockHighlight}Uses:62Used by:188
Symbol 64 BitmapUsed by:65
Symbol 65 GraphicUses:64Used by:66
Symbol 66 MovieClip {TreeClip}Uses:65Used by:188
Symbol 67 ShapeTweeningUsed by:69
Symbol 68 GraphicUsed by:69
Symbol 69 MovieClip {IceBlockClip}Uses:59 60 67 68Used by:188
Symbol 70 ShapeTweeningUsed by:73
Symbol 71 GraphicUsed by:73
Symbol 72 GraphicUsed by:73
Symbol 73 MovieClip {TimeBar}Uses:70 71 72Used by:188
Symbol 74 ShapeTweeningUsed by:77
Symbol 75 GraphicUsed by:77
Symbol 76 GraphicUsed by:77
Symbol 77 MovieClip {HealthBar}Uses:74 75 76Used by:188
Symbol 78 GraphicUsed by:89
Symbol 79 GraphicUsed by:89
Symbol 80 GraphicUsed by:81
Symbol 81 MovieClipUses:80Used by:89
Symbol 82 FontUsed by:83
Symbol 83 EditableTextUses:82Used by:89
Symbol 84 ShapeTweeningUsed by:89
Symbol 85 ShapeTweeningUsed by:89
Symbol 86 ShapeTweeningUsed by:89
Symbol 87 ShapeTweeningUsed by:89
Symbol 88 GraphicUsed by:89
Symbol 89 MovieClip {BlocksLeft}Uses:78 79 81 60 83 84 85 86 87 88Used by:188
Symbol 90 GraphicUsed by:93
Symbol 91 GraphicUsed by:92
Symbol 92 MovieClipUses:91Used by:93
Symbol 93 MovieClip {SmallBoulder1}Uses:90 92Used by:188
Symbol 94 GraphicUsed by:121 171
Symbol 95 EditableTextUses:4 22Used by:121
Symbol 96 GraphicUsed by:101
Symbol 97 TextUses:22Used by:101
Symbol 98 GraphicUsed by:101
Symbol 99 TextUses:22Used by:101
Symbol 100 GraphicUsed by:101
Symbol 101 MovieClip {GraveClip}Uses:96 97 98 99 100Used by:121 188
Symbol 102 EditableTextUses:4 22Used by:121
Symbol 103 EditableTextUses:4 22Used by:121
Symbol 104 EditableTextUses:4 22Used by:121
Symbol 105 EditableTextUses:4 22Used by:121
Symbol 106 EditableTextUses:4 22Used by:121
Symbol 107 EditableTextUses:4 22Used by:121
Symbol 108 EditableTextUses:4 22Used by:121
Symbol 109 EditableTextUses:4 22Used by:121
Symbol 110 EditableTextUses:4 22Used by:121
Symbol 111 EditableTextUses:4 22Used by:121
Symbol 112 GraphicUsed by:116 170
Symbol 113 TextUses:22Used by:116
Symbol 114 GraphicUsed by:116 120 170
Symbol 115 TextUses:22Used by:116 170
Symbol 116 Button {TryAgainButton}Uses:112 113 114 115Used by:121 188
Symbol 117 GraphicUsed by:120
Symbol 118 TextUses:22Used by:120
Symbol 119 TextUses:22Used by:120
Symbol 120 Button {NewLevelButton}Uses:117 118 114 119Used by:121 188
Symbol 121 MovieClip {ScoreScreen}Uses:94 95 101 102 103 104 105 106 107 108 109 110 111 116 120Used by:188
Symbol 122 ShapeTweeningUsed by:124
Symbol 123 GraphicUsed by:124
Symbol 124 MovieClip {ScreenObscurer}Uses:122 123Used by:188
Symbol 125 GraphicUsed by:126
Symbol 126 MovieClip {TransitionScreen}Uses:125Used by:188
Symbol 127 GraphicUsed by:131
Symbol 128 TextUses:22Used by:131
Symbol 129 GraphicUsed by:131
Symbol 130 TextUses:22Used by:131
Symbol 131 MovieClip {MusicButton}Uses:127 128 129 130Used by:188
Symbol 132 GraphicUsed by:136
Symbol 133 TextUses:22Used by:136
Symbol 134 GraphicUsed by:136
Symbol 135 TextUses:22Used by:136
Symbol 136 MovieClip {FxButton}Uses:132 133 134 135Used by:188
Symbol 137 GraphicUsed by:139
Symbol 138 EditableTextUses:4 22Used by:139
Symbol 139 MovieClip {TutorialBox}Uses:137 138Used by:188
Symbol 140 GraphicUsed by:142
Symbol 141 TextUses:22Used by:142
Symbol 142 MovieClip {TriggerInstructions}Uses:140 141Used by:188
Symbol 143 ShapeTweeningUsed by:146
Symbol 144 ShapeTweeningUsed by:146
Symbol 145 GraphicUsed by:146
Symbol 146 MovieClip {EskimoHit}Uses:143 144 145Used by:188
Symbol 147 EditableTextUses:4 22Used by:148
Symbol 148 MovieClip {TitleScore}Uses:147Used by:188
Symbol 149 TextUses:22Used by:151
Symbol 150 TextUses:22Used by:151
Symbol 151 Button {SubmitScoreButton}Uses:149 150 6Used by:188
Symbol 152 GraphicUsed by:154
Symbol 153 TextUses:22Used by:154
Symbol 154 MovieClip {GoodSpotArrow}Uses:152 153Used by:188
Symbol 155 GraphicUsed by:156
Symbol 156 MovieClip {LogoIntroClip}Uses:155Used by:188
Symbol 157 ShapeTweeningUsed by:162
Symbol 158 FontUsed by:159
Symbol 159 TextUses:158Used by:162
Symbol 160 ShapeTweeningUsed by:162
Symbol 161 GraphicUsed by:162
Symbol 162 MovieClip {GoThereIntro}Uses:157 159 160 161Used by:188
Symbol 163 GraphicUsed by:165
Symbol 164 TextUses:4Used by:165
Symbol 165 MovieClip {StartHereClip}Uses:163 164Used by:188
Symbol 166 EditableTextUses:4 22Used by:171
Symbol 167 TextUses:22Used by:171
Symbol 168 TextUses:22Used by:170
Symbol 169 TextUses:22Used by:170
Symbol 170 Button {OkButtoncopy}Uses:112 168 114 169 115Used by:171
Symbol 171 MovieClip {CongratsScreen}Uses:94 166 54 167 170Used by:188
Symbol 172 Sound {AvalancheSound}Used by:188
Symbol 173 Sound {AvalancherMusic}Used by:188
Symbol 174 Sound {GoodSpotSound}Used by:188
Symbol 175 Sound {LostLevelSound}Used by:188
Symbol 176 Sound {WonLevelSound}Used by:188
Symbol 177 Sound {MovedEskimoSound}Used by:188
Symbol 178 Sound {PlacedBlockSound}Used by:188
Symbol 179 Sound {RemovedBlockSound}Used by:188
Symbol 180 Sound {EskimoDiedSound}Used by:188
Symbol 181 Sound {SSIntroSound}Used by:188
Symbol 182 Sound {ButtonClickedSound}Used by:188
Symbol 183 Sound {NoBlocksSound}Used by:188
Symbol 184 Sound {NopeSound}Used by:188
Symbol 185 Sound {Hurt1Sound}Used by:188
Symbol 186 Sound {Hurt2Sound}Used by:188
Symbol 187 Sound {Hurt3Sound}Used by:188
Symbol 188 MovieClip {EverythingHolder}Uses:6 7 16 19 37 47 54 61 63 66 69 39 41 73 77 89 93 121 116 120 101 124 126 131 136 139 142 146 29 148 151 154 156 162 165 171 51 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187Used by:Timeline
Symbol 189 GraphicUsed by:204
Symbol 190 GraphicUsed by:204
Symbol 191 GraphicUsed by:204
Symbol 192 SoundUsed by:204
Symbol 193 SoundUsed by:204
Symbol 194 GraphicUsed by:204
Symbol 195 GraphicUsed by:196
Symbol 196 MovieClipUses:195Used by:204
Symbol 197 SoundUsed by:204
Symbol 198 SoundUsed by:204
Symbol 199 SoundUsed by:204
Symbol 200 GraphicUsed by:201
Symbol 201 ButtonUses:200Used by:204
Symbol 202 SoundUsed by:204
Symbol 203 SoundUsed by:204
Symbol 204 MovieClip {Avalancher_ArmorGames_fla.ag_intro_mc_46}Uses:189 190 191 192 193 194 196 197 198 199 201 202 203Used by:Timeline
Symbol 205 TextUses:22Used by:207
Symbol 206 TextUses:22Used by:207
Symbol 207 Button {HostButton}Uses:205 206 6Used by:Timeline

Instance Names

"loadCounter"Frame 1Symbol 5 EditableText
"agTeaserClip"Frame 3Symbol 204 MovieClip {Avalancher_ArmorGames_fla.ag_intro_mc_46}
"hostButton"Frame 5Symbol 207 Button {HostButton}
"playMoreGamesButton"Symbol 37 MovieClip {AvalancherTitleScreen} Frame 1Symbol 26 Button {PlayMoreGamesButton}
"createdByButton"Symbol 37 MovieClip {AvalancherTitleScreen} Frame 1Symbol 29 Button {CreatedByButton}
"agButton"Symbol 37 MovieClip {AvalancherTitleScreen} Frame 1Symbol 33 Button {ArmorGamesButton}
"videoWalkthroughButton"Symbol 37 MovieClip {AvalancherTitleScreen} Frame 1Symbol 36 Button {VideoWalkthroughButton}
"markerHover"Symbol 47 MovieClip {LevelMarker} Frame 1Symbol 39 MovieClip {MarkerHover}
"beatenFlag"Symbol 47 MovieClip {LevelMarker} Frame 1Symbol 41 MovieClip {BeatenFlag}
"levelLabel"Symbol 47 MovieClip {LevelMarker} Frame 1Symbol 44 EditableText
"crownClip"Symbol 54 MovieClip {EskimoClip} Frame 1Symbol 51 MovieClip {Crown}
"blocksLeftText"Symbol 89 MovieClip {BlocksLeft} Frame 1Symbol 83 EditableText
"titleFail"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 95 EditableText
"failGrave"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 101 MovieClip {GraveClip}
"titleSuccess"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 102 EditableText
"bonusLabel"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 103 EditableText
"bonusAmounts"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 104 EditableText
"otherBonusText"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 105 EditableText
"otherBonusAmounts"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 106 EditableText
"finalAmount"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 107 EditableText
"otherBonusLabel"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 108 EditableText
"finalLabel"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 109 EditableText
"previousLabel"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 110 EditableText
"previousAmount"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 111 EditableText
"tryAgainButton"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 116 Button {TryAgainButton}
"newLevelButton"Symbol 121 MovieClip {ScoreScreen} Frame 1Symbol 120 Button {NewLevelButton}
"tutorialText"Symbol 139 MovieClip {TutorialBox} Frame 1Symbol 138 EditableText
"scoreText"Symbol 148 MovieClip {TitleScore} Frame 1Symbol 147 EditableText
"titleSuccess"Symbol 171 MovieClip {CongratsScreen} Frame 1Symbol 166 EditableText
"okButton"Symbol 171 MovieClip {CongratsScreen} Frame 1Symbol 170 Button {OkButtoncopy}

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata present, AS3.
SWFMetaData (77)Timeline Frame 1199 bytes "<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><rdf:Description rdf:about="" xmlns ..."

Labels

"XOOO"Symbol 16 MovieClip {ScrollArrow} Frame 1
"XXOO"Symbol 16 MovieClip {ScrollArrow} Frame 2
"OXOO"Symbol 16 MovieClip {ScrollArrow} Frame 3
"OXXO"Symbol 16 MovieClip {ScrollArrow} Frame 4
"OOXO"Symbol 16 MovieClip {ScrollArrow} Frame 5
"OOXX"Symbol 16 MovieClip {ScrollArrow} Frame 6
"OOOX"Symbol 16 MovieClip {ScrollArrow} Frame 7
"XOOX"Symbol 16 MovieClip {ScrollArrow} Frame 8
"available"Symbol 47 MovieClip {LevelMarker} Frame 1
"unavailable"Symbol 47 MovieClip {LevelMarker} Frame 2
"normal"Symbol 54 MovieClip {EskimoClip} Frame 1
"badSpot"Symbol 54 MovieClip {EskimoClip} Frame 2
"dead"Symbol 54 MovieClip {EskimoClip} Frame 3
"empty"Symbol 61 MovieClip {IceBlock} Frame 1
"OOOO"Symbol 61 MovieClip {IceBlock} Frame 2
"normal"Symbol 69 MovieClip {IceBlockClip} Frame 1
"blowUp"Symbol 69 MovieClip {IceBlockClip} Frame 2
"removeMe"Symbol 69 MovieClip {IceBlockClip} Frame 21
"normal"Symbol 89 MovieClip {BlocksLeft} Frame 1
"outOfBlocks"Symbol 89 MovieClip {BlocksLeft} Frame 2
"on"Symbol 131 MovieClip {MusicButton} Frame 1
"onOver"Symbol 131 MovieClip {MusicButton} Frame 2
"off"Symbol 131 MovieClip {MusicButton} Frame 3
"offOver"Symbol 131 MovieClip {MusicButton} Frame 4
"on"Symbol 136 MovieClip {FxButton} Frame 1
"onOver"Symbol 136 MovieClip {FxButton} Frame 2
"off"Symbol 136 MovieClip {FxButton} Frame 3
"offOver"Symbol 136 MovieClip {FxButton} Frame 4
"normal"Symbol 146 MovieClip {EskimoHit} Frame 1
"removeMe"Symbol 146 MovieClip {EskimoHit} Frame 19
"music"Symbol 188 MovieClip {EverythingHolder} Frame 4




https://swfchan.com/53/263288/info.shtml
Created: 22/3 -2026 04:18:00 Last modified: 22/3 -2026 04:18:00 Server time: 15/04 -2026 02:00:58