Section 1
//Amber3Geometry (lavalamp.Amber3Geometry)
package lavalamp {
import flash.geom.*;
public class Amber3Geometry {
public static const TOLERANCE:Number = 0.01;
public static function intersectLines(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point, _arg5:Boolean=true):Point{
var _local6:Point;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Boolean;
var _local12:Boolean;
var _local13:Boolean;
var _local14:Boolean;
_local6 = new Point();
_local11 = (Math.abs((_arg1.y - _arg2.y)) < TOLERANCE);
_local12 = (Math.abs((_arg3.y - _arg4.y)) < TOLERANCE);
_local13 = (Math.abs((_arg1.x - _arg2.x)) < TOLERANCE);
_local14 = (Math.abs((_arg3.x - _arg4.x)) < TOLERANCE);
_local7 = ((_arg2.y - _arg1.y) / (_arg2.x - _arg1.x));
_local9 = (_arg1.y - (_arg1.x * _local7));
_local8 = ((_arg4.y - _arg3.y) / (_arg4.x - _arg3.x));
_local10 = (_arg3.y - (_arg3.x * _local8));
switch (true){
case ((_local11) && (_local12)):
if (Math.abs((_arg3.y - _arg1.y)) < TOLERANCE){
_local6 = _arg1.clone();
};
return (null);
case ((_local11) && (_local14)):
_local6.x = _arg3.x;
_local6.y = _arg1.y;
break;
case ((_local13) && (_local12)):
_local6.x = _arg1.x;
_local6.y = _arg3.y;
break;
case ((_local13) && (_local14)):
if (Math.abs((_arg3.x - _arg1.x)) < TOLERANCE){
_local6 = _arg1.clone();
};
return (null);
case _local13:
_local6.x = _arg1.x;
_local6.y = ((_local8 * _local6.x) + _local10);
break;
case _local14:
_local6.x = _arg3.x;
_local6.y = ((_local7 * _local6.x) + _local9);
break;
case _local11:
_local6.y = _arg1.y;
_local6.x = (Number((_local6.y - _local10)) / _local8);
break;
case _local12:
_local6.y = _arg3.y;
_local6.x = (Number((_local6.y - _local9)) / _local7);
break;
default:
if ((((Math.abs((_local9 - _local10)) < TOLERANCE)) && ((Math.abs((_local7 - _local8)) < TOLERANCE)))){
return (null);
};
_local6.x = (Number((_local10 - _local9)) / Number((_local7 - _local8)));
_local6.y = ((_local6.x * _local7) + _local9);
};
if (_arg5){
if ((((_local6.x > Math.max(_arg1.x, _arg2.x))) || ((_local6.x < Math.min(_arg1.x, _arg2.x))))){
return (null);
};
if ((((_local6.y > Math.max(_arg1.y, _arg2.y))) || ((_local6.y < Math.min(_arg1.y, _arg2.y))))){
return (null);
};
if ((((_local6.x > Math.max(_arg3.x, _arg4.x))) || ((_local6.x < Math.min(_arg3.x, _arg4.x))))){
return (null);
};
if ((((_local6.y > Math.max(_arg3.y, _arg4.y))) || ((_local6.y < Math.min(_arg3.y, _arg4.y))))){
return (null);
};
};
return (_local6.clone());
}
private static function getLowestPositiveAngle(_arg1:Number):Number{
var _local2:Number;
_local2 = (_arg1 % (Math.PI * 2));
while (_local2 < 0) {
_local2 = (_local2 + (Math.PI * 2));
};
while (_local2 >= (Math.PI * 2)) {
_local2 = (_local2 - (Math.PI * 2));
};
return (_local2);
}
public static function pointUnderLine(_arg1:Point, _arg2:Point, _arg3:Point):Boolean{
var _local4:Number;
var _local5:Number;
_local4 = (Math.atan2((_arg3.y - _arg2.y), (_arg3.x - _arg2.x)) + (Math.PI * 0.5));
_local5 = Math.atan2((_arg1.y - _arg2.y), (_arg1.x - _arg2.x));
return ((angularDistance(_local5, _local4) >= TOLERANCE));
}
public static function line2triangle(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point, _arg5:Point):Boolean{
if (line2line(_arg1, _arg2, _arg3, _arg4)){
return (true);
};
if (line2line(_arg1, _arg2, _arg4, _arg5)){
return (true);
};
if (line2line(_arg1, _arg2, _arg5, _arg3)){
return (true);
};
if (point2triangle(_arg1, _arg3, _arg4, _arg5)){
return (true);
};
return (false);
}
public static function getOuterPoints(_arg1:Array):Array{
var _local2:Array;
var _local3:Point;
var _local4:int;
var _local5:Array;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Point;
var _local11:int;
var _local12:Number;
var _local13:Point;
var _local14:int;
var _local15:Number;
var _local16:Number;
_local2 = _arg1.concat();
_local3 = _local2[0];
_local4 = 1;
while (_local4 < _local2.length) {
if (_local2[_local4].y < _local3.y){
_local3 = _local2[_local4];
};
_local4++;
};
_local5 = [_local3];
_local6 = Infinity;
_local8 = 0;
_local9 = 0;
_local10 = _local5[0];
_local11 = _local2.length;
while (1) {
_local12 = (Math.PI * 2);
_local13 = null;
_local4 = 0;
while (_local4 < _local2.length) {
_local7 = Math.atan2((_local2[_local4].y - _local5[(_local5.length - 1)].y), (_local2[_local4].x - _local5[(_local5.length - 1)].x));
_local16 = getLowestPositiveAngle((_local7 - _local8));
if ((((_local16 <= _local12)) && (!((_local2[_local4] == _local5[(_local5.length - 1)]))))){
_local13 = _local2[_local4];
_local12 = _local16;
};
_local4++;
};
if ((((_local13 == null)) || ((((_local13 == _local5[0])) && ((_local5.length > 1)))))){
break;
};
_local15 = _local8;
_local8 = getLowestPositiveAngle(Math.atan2((_local13.y - _local5[(_local5.length - 1)].y), (_local13.x - _local5[(_local5.length - 1)].x)));
_local9 = (_local9 + getLowestPositiveAngle((_local8 - _local15)));
if (_local9 >= (Math.PI * 2)){
break;
};
_local5.push(_local13);
--_local11;
if (!_local11){
trace(("FAILURE: " + (_local9 - (Math.PI * 2))), "\n");
break;
};
};
if ((((_local5.length > 2)) && ((_local5[(_local5.length - 1)] == _local5[1])))){
_local5.pop();
};
return (_local5);
}
public static function polygon2polygon(_arg1:Array, _arg2:Array):Boolean{
var _local3:Point;
var _local4:Point;
var _local5:Point;
var _local6:Point;
var _local7:Point;
var _local8:Point;
var _local9:int;
var _local10:int;
if ((((_arg1.length < 3)) || ((_arg2.length < 3)))){
return (false);
};
_local3 = _arg1[0];
_local6 = _arg2[0];
_local9 = 1;
while (_local9 < (_arg1.length - 1)) {
_local4 = _arg1[_local9];
_local5 = _arg1[(_local9 + 1)];
_local10 = 1;
while (_local10 < (_arg2.length - 1)) {
_local7 = _arg2[_local10];
_local8 = _arg2[(_local10 + 1)];
if (triangle2triangle(_local3, _local4, _local5, _local6, _local7, _local8)){
return (true);
};
_local10++;
};
_local9++;
};
return (false);
}
public static function point2triangle(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point):Boolean{
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
_local5 = (Number((_arg3.y - _arg2.y)) / Number((_arg3.x - _arg2.x)));
_local6 = (Number((_arg4.y - _arg3.y)) / Number((_arg4.x - _arg3.x)));
_local7 = (Number((_arg2.y - _arg4.y)) / Number((_arg2.x - _arg4.x)));
_local8 = (_arg2.y - (_local5 * _arg2.x));
_local9 = (_arg3.y - (_local6 * _arg3.x));
_local10 = (_arg4.y - (_local7 * _arg4.x));
if (Math.abs((_arg3.x - _arg2.x)) < TOLERANCE){
if ((((Math.abs((_arg4.x - _arg2.x)) < TOLERANCE)) || (!((Boolean((_arg3.x < _arg1.x)) == Boolean((_arg3.x < _arg4.x))))))){
return (false);
};
};
if ((((((_arg4.y <= ((_local5 * _arg4.x) + _local8))) && ((_arg1.y > ((_local5 * _arg1.x) + _local8))))) || ((((_arg4.y >= ((_local5 * _arg4.x) + _local8))) && ((_arg1.y < ((_local5 * _arg1.x) + _local8))))))){
return (false);
};
if (Math.abs((_arg4.x - _arg3.x)) < TOLERANCE){
if ((((Math.abs((_arg2.x - _arg3.x)) < TOLERANCE)) || (!((Boolean((_arg4.x < _arg1.x)) == Boolean((_arg4.x < _arg2.x))))))){
return (false);
};
};
if ((((((_arg2.y <= ((_local6 * _arg2.x) + _local9))) && ((_arg1.y > ((_local6 * _arg1.x) + _local9))))) || ((((_arg2.y >= ((_local6 * _arg2.x) + _local9))) && ((_arg1.y < ((_local6 * _arg1.x) + _local9))))))){
return (false);
};
if (Math.abs((_arg2.x - _arg4.x)) < TOLERANCE){
if ((((Math.abs((_arg3.x - _arg4.x)) < TOLERANCE)) || (!((Boolean((_arg2.x < _arg1.x)) == Boolean((_arg2.x < _arg3.x))))))){
return (false);
};
};
if ((((((_arg3.y <= ((_local7 * _arg3.x) + _local10))) && ((_arg1.y > ((_local7 * _arg1.x) + _local10))))) || ((((_arg3.y >= ((_local7 * _arg3.x) + _local10))) && ((_arg1.y < ((_local7 * _arg1.x) + _local10))))))){
return (false);
};
return (true);
}
public static function closestPointOnLine(_arg1:Point, _arg2:Point, _arg3:Point):Point{
var _local4:Point;
var _local5:Point;
_local4 = _arg1.add(getNormal(_arg2, _arg3));
_local5 = intersectLines(_arg1, _local4, _arg2, _arg3, false);
if (_local5 == null){
throw (((((((("Unexpected error in Geometry::closestPointToLine. Perpendicular lines aren't intersecting!\nA1:" + _arg1) + " A2:") + _local4) + " B1:") + _arg2) + " B2:") + _arg3));
};
return (_local5);
}
public static function triangle2triangle(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point, _arg5:Point, _arg6:Point):Boolean{
if (line2triangle(_arg1, _arg2, _arg4, _arg5, _arg6)){
return (true);
};
if (line2triangle(_arg2, _arg3, _arg4, _arg5, _arg6)){
return (true);
};
if (line2triangle(_arg3, _arg1, _arg4, _arg5, _arg6)){
return (true);
};
if (point2triangle(_arg1, _arg4, _arg5, _arg6)){
return (true);
};
if (point2triangle(_arg4, _arg1, _arg2, _arg3)){
return (true);
};
return (false);
}
public static function movePoints(_arg1:Array, _arg2:Point):Array{
var _local3:Array;
var _local4:int;
_local3 = [];
_local4 = 0;
while (_local4 < _arg1.length) {
_local3[_local4] = _arg1[_local4].add(_arg2);
_local4++;
};
return (_local3);
}
public static function point2line(_arg1:Point, _arg2:Point, _arg3:Point):Boolean{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
if ((((_arg1.x < (Math.min(_arg2.x, _arg3.x) - TOLERANCE))) || ((_arg1.x > (Math.max(_arg2.x, _arg3.x) + TOLERANCE))))){
return (false);
};
if ((((_arg1.y < (Math.min(_arg2.y, _arg3.y) - TOLERANCE))) || ((_arg1.y > (Math.max(_arg2.y, _arg3.y) + TOLERANCE))))){
return (false);
};
_local4 = (_arg1.x - _arg2.x);
_local5 = (_arg1.y - _arg2.y);
_local6 = (_arg3.x - _arg2.x);
_local7 = (_arg3.y - _arg2.y);
if (Math.abs(_local6) < TOLERANCE){
if (Math.abs(_local7) < TOLERANCE){
return ((((Math.abs(_local4) < TOLERANCE)) && ((Math.abs(_local5) < TOLERANCE))));
};
if (Math.abs(_local4) < TOLERANCE){
return (true);
};
return (false);
};
if (Math.abs(((_local5 / _local4) - (_local7 / _local6))) > TOLERANCE){
return (false);
};
return (true);
}
public static function angularDistance(_arg1:Number, _arg2:Number):Number{
return (Math.cos((_arg1 - _arg2)));
}
public static function point2polygon(_arg1:Point, _arg2:Array):Boolean{
var _local3:Point;
var _local4:Point;
var _local5:Point;
var _local6:int;
if (_arg2.length < 3){
return (false);
};
_local3 = _arg2[0];
_local6 = 1;
while (_local6 < (_arg2.length - 1)) {
_local4 = _arg2[_local6];
_local5 = _arg2[(_local6 + 1)];
if (point2triangle(_arg1, _local3, _local4, _local5)){
return (true);
};
_local6++;
};
return (false);
}
public static function line2line(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point):Boolean{
return (!((intersectLines(_arg1, _arg2, _arg3, _arg4) == null)));
}
public static function rotate(_arg1:Point, _arg2:Number, _arg3:Point):Point{
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local4 = (_arg1.x - _arg3.x);
_local5 = (_arg1.y - _arg3.y);
_local6 = Math.cos(_arg2);
_local7 = Math.sin(_arg2);
return (new Point(((_arg3.x + (_local4 * _local6)) + (_local5 * _local7)), ((_arg3.y - (_local4 * _local7)) + (_local5 * _local6))));
}
public static function line2polygon(_arg1:Point, _arg2:Point, _arg3:Array):Boolean{
var _local4:Point;
var _local5:Point;
var _local6:Point;
var _local7:int;
if (_arg3.length < 3){
return (false);
};
_local4 = _arg3[0];
_local7 = 1;
while (_local7 < (_arg3.length - 1)) {
_local5 = _arg3[_local7];
_local6 = _arg3[(_local7 + 1)];
if (line2triangle(_arg1, _arg2, _local4, _local5, _local6)){
return (true);
};
_local7++;
};
return (false);
}
public static function getNormal(_arg1:Point, _arg2:Point):Point{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Point;
_local3 = (_arg2.x - _arg1.x);
_local4 = (_arg2.y - _arg1.y);
_local5 = Math.sqrt(((_local3 * _local3) + (_local4 * _local4)));
_local6 = new Point((-(_local4) / _local5), (_local3 / _local5));
return (_local6);
}
public static function collide(_arg1:Array, _arg2:Array){
if ((((((((_arg1 == null)) || (!(_arg1.length)))) || ((_arg2 == null)))) || (!(_arg2.length)))){
return (false);
};
if (_arg1.length > 2){
if (_arg2.length > 2){
return (polygon2polygon(_arg1, _arg2));
};
if (_arg2.length > 1){
return (line2polygon(_arg2[0], _arg2[1], _arg1));
};
return (point2polygon(_arg2[0], _arg1));
} else {
if (_arg1.length > 1){
if (_arg2.length > 2){
return (line2polygon(_arg1[0], _arg1[1], _arg2));
};
if (_arg2.length > 1){
return (line2line(_arg1[0], _arg1[1], _arg2[0], _arg2[1]));
};
} else {
if (_arg2.length > 2){
return (point2polygon(_arg1[0], _arg2));
};
};
};
return (false);
}
public static function cutComponents(_arg1:Point, _arg2:Array):Point{
var _local3:Number;
var _local4:Number;
var _local5:int;
var _local6:Number;
if (!_arg2.length){
return (_arg1.clone());
};
_local3 = 0;
_local4 = (Math.atan2(_arg1.y, _arg1.x) - Math.PI);
_local5 = 0;
while (_local5 < _arg2.length) {
_local3 = (_local3 + Math.atan2((_arg2[(_local5 + 1)].y - _arg2[_local5].y), (_arg2[(_local5 + 1)].x - _arg2[_local5].x)));
_local5 = (_local5 + 2);
};
_local3 = (_local3 / (_arg2.length >> 1));
_local3 = (_local3 - (Math.PI * 0.5));
_local6 = (1 - Math.max(Math.cos((_local4 - _local3)), 0));
return (new Point((_arg1.x * _local6), (_arg1.y * _local6)));
}
}
}//package lavalamp
Section 2
//Blob (lavalamp.Blob)
package lavalamp {
public class Blob {
protected var _x:Number;
protected var _vY:Number;
protected var _vX:Number;
protected var _transferred:Boolean;
protected var _other:Blob;
protected var _state:int;
protected var _heat:Number;
protected var _radius:Number;
protected var _y:Number;
public static const FUSING:int = -1;
public static const NORMAL:int = 0;
public static const SPLITTING:int = 1;
public function Blob(_arg1:uint){
_radius = _arg1;
_x = (_y = 0);
_vX = (_vY = 0);
_state = NORMAL;
_other = null;
_heat = (25 * area);
_transferred = false;
}
public function transfer(_arg1:Number, _arg2:Number){
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
if (((!(_other)) || (_transferred))){
return;
};
_local3 = area;
_local4 = _other.area;
if (_state == FUSING){
if (area < _arg1){
_arg1 = area;
};
area = (area - _arg1);
_other.area = (_other.area + _arg1);
} else {
if ((((_state == SPLITTING)) && ((_radius < _other._radius)))){
if (_other.area < _arg1){
_arg1 = _other.area;
};
_other.area = (_other.area - _arg1);
area = (area + _arg1);
};
};
_local5 = (_other.x - x);
_local6 = (_other.y - y);
_local7 = Math.sqrt(((_local5 * _local5) + (_local6 * _local6)));
if ((((_local7 > (_radius + _other._radius))) && (((((!((_state == SPLITTING))) || ((((_radius <= _other._radius)) && ((_radius >= _arg2)))))) || ((((_radius > _other._radius)) && ((_other._radius >= _arg2)))))))){
separate();
};
_transferred = true;
}
public function set vY(_arg1:Number){
_vY = _arg1;
}
public function set y(_arg1:Number){
_y = _arg1;
}
public function set vX(_arg1:Number){
_vX = _arg1;
}
public function set transferred(_arg1:Boolean){
_transferred = _arg1;
}
public function get area():Number{
return (((_radius * _radius) * Math.PI));
}
public function get other():Blob{
return (_other);
}
public function get state():int{
return (_state);
}
public function get radius():Number{
return (_radius);
}
public function set area(_arg1:Number){
_radius = Math.sqrt((_arg1 / Math.PI));
}
public function get vX():Number{
return (_vX);
}
public function set heat(_arg1:Number){
_heat = _arg1;
}
public function split():Blob{
var _local1:Blob;
var _local2:Number;
if (_state != NORMAL){
_local2 = (_radius + _other._radius);
if (((((_radius / _local2) < 0.25)) || (((_other._radius / _local2) < 0.5)))){
return (null);
};
separate();
};
_local1 = new Blob(0);
_local1._x = ((_x + (Math.random() * 2)) - 1);
_local1._y = ((_y + (Math.random() * 2)) - 1);
_local1._vX = ((_vX + (Math.random() * 2)) - 1);
_local1._vY = ((_vY + (Math.random() * 2)) - 1);
_local1.temperature = temperature;
_local1._state = SPLITTING;
_local1._other = this;
_state = SPLITTING;
_other = _local1;
_transferred = false;
return (_local1);
}
public function get vY():Number{
return (_vY);
}
public function set temperature(_arg1:Number){
_heat = (_arg1 * area);
}
public function separate(){
if (!_other){
return;
};
if (_state == SPLITTING){
_other._state = NORMAL;
_other._other = null;
};
_state = NORMAL;
_other = null;
}
public function set radius(_arg1:Number){
_radius = _arg1;
}
public function set x(_arg1:Number){
_x = _arg1;
}
public function get heat():Number{
return (_heat);
}
public function get x():Number{
return (_x);
}
public function get y():Number{
return (_y);
}
public function get temperature():Number{
if (!_radius){
return (0);
};
return ((_heat / area));
}
public function get transferred():Boolean{
return (_transferred);
}
public static function fuse(_arg1:Blob, _arg2:Blob){
if (_arg1.radius < _arg2.radius){
if (_arg1._state != NORMAL){
return;
};
_arg1._state = FUSING;
_arg1._other = _arg2;
} else {
if (_arg2._state != NORMAL){
return;
};
_arg2._other = _arg1;
_arg2._state = FUSING;
};
}
}
}//package lavalamp
Section 3
//Geometry (lavalamp.Geometry)
package lavalamp {
import flash.display.*;
import flash.geom.*;
public class Geometry {
public static const TOLERANCE:Number = 0.01;
public static function intersectLines(_arg1:Point, _arg2:Point, _arg3:Point, _arg4:Point, _arg5:Boolean=true):Point{
var _local6:Point;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Number;
var _local11:Boolean;
var _local12:Boolean;
var _local13:Boolean;
var _local14:Boolean;
_local6 = new Point();
_local11 = (Math.abs((_arg1.y - _arg2.y)) < TOLERANCE);
_local12 = (Math.abs((_arg3.y - _arg4.y)) < TOLERANCE);
_local13 = (Math.abs((_arg1.x - _arg2.x)) < TOLERANCE);
_local14 = (Math.abs((_arg3.x - _arg4.x)) < TOLERANCE);
_local7 = ((_arg2.y - _arg1.y) / (_arg2.x - _arg1.x));
_local9 = (_arg1.y - (_arg1.x * _local7));
_local8 = ((_arg4.y - _arg3.y) / (_arg4.x - _arg3.x));
_local10 = (_arg3.y - (_arg3.x * _local8));
switch (true){
case ((_local11) && (_local12)):
if (Math.abs((_arg3.y - _arg1.y)) < TOLERANCE){
_local6 = _arg1.clone();
};
return (null);
case ((_local11) && (_local14)):
_local6.x = _arg3.x;
_local6.y = _arg1.y;
break;
case ((_local13) && (_local12)):
_local6.x = _arg1.x;
_local6.y = _arg3.y;
break;
case ((_local13) && (_local14)):
if (Math.abs((_arg3.x - _arg1.x)) < TOLERANCE){
_local6 = _arg1.clone();
};
return (null);
case _local13:
_local6.x = _arg1.x;
_local6.y = ((_local8 * _local6.x) + _local10);
break;
case _local14:
_local6.x = _arg3.x;
_local6.y = ((_local7 * _local6.x) + _local9);
break;
case _local11:
_local6.y = _arg1.y;
_local6.x = (Number((_local6.y - _local10)) / _local8);
break;
case _local12:
_local6.y = _arg3.y;
_local6.x = (Number((_local6.y - _local9)) / _local7);
break;
default:
if ((((Math.abs((_local9 - _local10)) < TOLERANCE)) && ((Math.abs((_local7 - _local8)) < TOLERANCE)))){
return (null);
};
_local6.x = (Number((_local10 - _local9)) / Number((_local7 - _local8)));
_local6.y = ((_local6.x * _local7) + _local9);
};
if (_arg5){
if ((((_local6.x > Math.max(_arg1.x, _arg2.x))) || ((_local6.x < Math.min(_arg1.x, _arg2.x))))){
return (null);
};
if ((((_local6.y > Math.max(_arg1.y, _arg2.y))) || ((_local6.y < Math.min(_arg1.y, _arg2.y))))){
return (null);
};
if ((((_local6.x > Math.max(_arg3.x, _arg4.x))) || ((_local6.x < Math.min(_arg3.x, _arg4.x))))){
return (null);
};
if ((((_local6.y > Math.max(_arg3.y, _arg4.y))) || ((_local6.y < Math.min(_arg3.y, _arg4.y))))){
return (null);
};
};
return (_local6.clone());
}
public static function closestPointOnLine(_arg1:Point, _arg2:Point, _arg3:Point):Point{
var _local4:Point;
var _local5:Point;
_local4 = _arg1.add(getNormal(_arg2, _arg3));
_local5 = intersectLines(_arg1, _local4, _arg2, _arg3, false);
if (_local5 == null){
throw (((((((("Unexpected error in Geometry::closestPointToLine. Perpendicular lines aren't intersecting!\nA1:" + _arg1) + " A2:") + _local4) + " B1:") + _arg2) + " B2:") + _arg3));
};
return (_local5);
}
public static function intersectCircles(_arg1:Point, _arg2:Number, _arg3:Point, _arg4:Number):Array{
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:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
_local5 = (_arg3.x - _arg1.x);
_local6 = (_arg3.y - _arg1.y);
_local7 = Math.sqrt(((_local5 * _local5) + (_local6 * _local6)));
if ((((_local7 > (_arg2 + _arg4))) || ((((_local7 < _arg2)) && ((_local7 < _arg4)))))){
return ([]);
};
_local8 = Math.atan2((_arg3.y - _arg1.y), (_arg3.x - _arg1.x));
_local9 = (_arg2 / (_arg2 + _arg4));
_local10 = ((((_local7 * _local7) + (_arg2 * _arg2)) - (_arg4 * _arg4)) / (2 * _local7));
_local11 = Math.sqrt(((_arg2 * _arg2) - (_local10 * _local10)));
_local12 = Math.cos(_local8);
_local13 = Math.cos((_local8 - (Math.PI * 0.5)));
_local14 = Math.cos((_local8 + (Math.PI * 0.5)));
_local15 = Math.sin(_local8);
_local16 = Math.sin((_local8 - (Math.PI * 0.5)));
_local17 = Math.sin((_local8 + (Math.PI * 0.5)));
_local18 = ((_local12 * _local10) + (_local13 * _local11));
_local19 = ((_local15 * _local10) + (_local16 * _local11));
_local20 = ((_local12 * _local10) + (_local14 * _local11));
_local21 = ((_local15 * _local10) + (_local17 * _local11));
return ([new Point((_arg1.x + _local18), (_arg1.y + _local19)), new Point((_arg1.x + _local20), (_arg1.y + _local21))]);
}
public static function circle2line(_arg1:Point, _arg2:Number, _arg3:Point, _arg4:Point):Array{
var _local5:Point;
var _local6:Point;
_local5 = closestPointOnLine(_arg1, _arg3, _arg4);
if (!_local5){
return ([]);
};
_local6 = _local5.add(_local5.subtract(_arg1));
return (intersectCircles(_arg1, _arg2, _local6, _arg2));
}
public static function getOuterPoints(_arg1:Array):Array{
var _local2:Array;
var _local3:Point;
var _local4:int;
var _local5:Array;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:Point;
var _local11:int;
var _local12:Number;
var _local13:Point;
var _local14:int;
var _local15:Number;
var _local16:Number;
_local2 = _arg1.concat();
_local3 = _local2[0];
_local4 = 1;
while (_local4 < _local2.length) {
if (_local2[_local4].y < _local3.y){
_local3 = _local2[_local4];
};
_local4++;
};
_local5 = [_local3];
_local6 = Infinity;
_local8 = 0;
_local9 = 0;
_local10 = _local5[0];
_local11 = _local2.length;
while (1) {
_local12 = (Math.PI * 2);
_local13 = null;
_local4 = 0;
while (_local4 < _local2.length) {
_local7 = Math.atan2((_local2[_local4].y - _local5[(_local5.length - 1)].y), (_local2[_local4].x - _local5[(_local5.length - 1)].x));
_local16 = getLowestPositiveAngle((_local7 - _local8));
if ((((_local16 <= _local12)) && (!((_local2[_local4] == _local5[(_local5.length - 1)]))))){
_local13 = _local2[_local4];
_local12 = _local16;
};
_local4++;
};
if ((((_local13 == null)) || ((((_local13 == _local5[0])) && ((_local5.length > 1)))))){
break;
};
_local15 = _local8;
_local8 = getLowestPositiveAngle(Math.atan2((_local13.y - _local5[(_local5.length - 1)].y), (_local13.x - _local5[(_local5.length - 1)].x)));
_local9 = (_local9 + getLowestPositiveAngle((_local8 - _local15)));
if (_local9 >= (Math.PI * 2)){
break;
};
_local5.push(_local13);
--_local11;
if (!_local11){
trace(("FAILURE: " + (_local9 - (Math.PI * 2))), "\n");
break;
};
};
if ((((_local5.length > 2)) && ((_local5[(_local5.length - 1)] == _local5[1])))){
_local5.pop();
};
return (_local5);
}
private static function getLowestPositiveAngle(_arg1:Number):Number{
var _local2:Number;
_local2 = _arg1;
while (_local2 < 0) {
_local2 = (_local2 + (Math.PI * 2));
};
while (_local2 >= (Math.PI * 2)) {
_local2 = (_local2 - (Math.PI * 2));
};
return (_local2);
}
public static function rotate(_arg1:Point, _arg2:Number, _arg3:Point){
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local4 = (_arg1.x - _arg3.x);
_local5 = (_arg1.y - _arg3.y);
_local6 = Math.cos(_arg2);
_local7 = Math.sin(_arg2);
return (new Point(((_arg3.x + (_local4 * _local6)) + (_local5 * _local7)), ((_arg3.y + (-(_local4) * _local7)) + (_local5 * _local6))));
}
public static function getNormal(_arg1:Point, _arg2:Point):Point{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Point;
_local3 = (_arg2.x - _arg1.x);
_local4 = (_arg2.y - _arg1.y);
_local5 = Math.sqrt(((_local3 * _local3) + (_local4 * _local4)));
_local6 = new Point((-(_local4) / _local5), (_local3 / _local5));
return (_local6);
}
public static function drawClosedCurve(_arg1:Array, _arg2:Graphics):Array{
var _local3:Point;
var _local4:Point;
var _local5:Point;
var _local6:Point;
var _local7:Array;
var _local8:int;
var _local9:Point;
var _local10:Point;
var _local11:Point;
if (_arg1.length < 3){
return ([]);
};
_local7 = new Array();
_arg2.moveTo(_arg1[0].x, _arg1[0].y);
_local8 = 0;
while (_local8 < _arg1.length) {
_local3 = _arg1[_local8];
_local4 = _arg1[(int(((_arg1.length + _local8) - 1)) % _arg1.length)];
_local5 = _arg1[(int((_local8 + 1)) % _arg1.length)];
_local6 = _arg1[(int((_local8 + 2)) % _arg1.length)];
_local9 = Amber3Geometry.intersectLines(_local4, _local3, _local5, _local6, false);
if (_local9 == null){
_arg2.lineTo(_local5.x, _local5.y);
} else {
_local10 = Point.interpolate(_local3, _local5, 0.5);
_local11 = Point.interpolate(_local10, _local9, 0.7);
_local9 = _local11;
_local7.push(_local9);
_arg2.curveTo(_local9.x, _local9.y, _local5.x, _local5.y);
};
_local8++;
};
return (_local7);
}
}
}//package lavalamp
Section 4
//HeatSource (lavalamp.HeatSource)
package lavalamp {
public class HeatSource {
private var _y:int;
private var _radius:int;
private var _temp:int;
private var _x:int;
public function HeatSource(_arg1:int, _arg2:int){
_temp = _arg1;
_x = (_y = 0);
_radius = _arg2;
}
public function get y():int{
return (_y);
}
public function set radius(_arg1:int){
_radius = _arg1;
}
public function set temperature(_arg1:int){
_temp = _arg1;
}
public function set y(_arg1:int){
_y = _arg1;
}
public function set x(_arg1:int){
_x = _arg1;
}
public function get x():int{
return (_x);
}
public function get temperature():int{
return (_temp);
}
public function get radius():int{
return (_radius);
}
}
}//package lavalamp
Section 5
//Lava (lavalamp.Lava)
package lavalamp {
import flash.display.*;
public class Lava {
public var _height:Number;
public var _y:Number;
public var _width:Number;
private var _waveLengths:Array;
public var _intervals:uint;
private var _angles:Array;
private var _amplitudes:Array;
private var _phases:Array;
public var _x:Number;
private var _frequencies:Array;
public function Lava(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:uint){
_waveLengths = [];
_amplitudes = [];
_phases = [];
_frequencies = [];
_angles = [];
_intervals = 1;
_x = _arg1;
_y = _arg2;
_width = _arg3;
_height = _arg4;
_intervals = _arg5;
}
public function draw(_arg1:Graphics){
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:int;
var _local6:int;
_local2 = _intervals;
if (!_local2){
_local2 = 1;
};
_local5 = 0;
while (_local5 < Math.abs(_width)) {
if (_width < 0){
_local3 = (_x - _local5);
} else {
_local3 = (_x + _local5);
};
_local4 = _y;
_local6 = 0;
while (_local6 < _waveLengths.length) {
_local4 = (_local4 + ((Math.sin((_phases[_local6] + (((Math.PI * 2) * _local5) / _waveLengths[_local6]))) * _amplitudes[_local6]) * Math.cos(_angles[_local6])));
_local6++;
};
if (!_local5){
_arg1.moveTo(_local3, _local4);
} else {
_arg1.lineTo(_local3, _local4);
};
_local5 = (_local5 + _local2);
};
_local3 = (_x + _width);
_local4 = _y;
_local6 = 0;
while (_local6 < _waveLengths.length) {
_local4 = (_local4 + ((Math.sin((_phases[_local6] + (((Math.PI * 2) * Math.abs(_width)) / _waveLengths[_local6]))) * _amplitudes[_local6]) * Math.cos(_angles[_local6])));
_local6++;
};
if (!_local5){
_arg1.moveTo(_local3, _local4);
} else {
_arg1.lineTo(_local3, _local4);
};
_arg1.lineTo((_x + _width), (_y + _height));
_arg1.lineTo(_x, (_y + _height));
_local3 = _x;
_local4 = _y;
_local6 = 0;
while (_local6 < _waveLengths.length) {
_local4 = (_local4 + ((Math.sin((_phases[_local6] + (((Math.PI * 2) * _local3) / _waveLengths[_local6]))) * _amplitudes[_local6]) * Math.cos(_angles[_local6])));
_local6++;
};
_arg1.lineTo(_local3, _local4);
}
public function clearWaves(){
_waveLengths = [];
_amplitudes = [];
_phases = [];
_frequencies = [];
}
public function update(){
var _local1:int;
_local1 = 0;
while (_local1 < _waveLengths.length) {
_angles[_local1] = (_angles[_local1] + _frequencies[_local1]);
_local1++;
};
}
public function addWave(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number){
_waveLengths.push(_arg1);
_amplitudes.push(_arg2);
_phases.push(_arg3);
_frequencies.push(_arg4);
_angles.push(0);
}
}
}//package lavalamp
Section 6
//LavaLamp (lavalamp.LavaLamp)
package lavalamp {
import flash.display.*;
import flash.geom.*;
public class LavaLamp {
public var _surfaceTension:Number;
public var _pressurePerDegree:Number;
public var _heatLossRate:Number;
public var _fuseTemperature:Number;
public var _gravity:Number;
public var _maxRadius:Number;
public var _minConnectionDist:Number;
public var _fillColor:int;
public var _maxSpeed:Number;
private var _clips:Array;
public var _splitRadiusTolerance:Number;
private var _clip:MovieClip;
public var _splitTemperatureTolerance:Number;
public var _areaSpeed:Number;
public var _tempTransferRate:Number;
public var _maxSplitTemperature:Number;
public var _minFuseTemperature:Number;
public var _joinSpeed:Number;
private var _lava:Array;
public var _separateRadius:Number;
public var _lineColor:int;
public var _scale:Number;
public var _minRiseTemperature:Number;
public var _friction:Number;
public var _roomTemperature:Number;
public var _heatTransferRate:Number;
public var _effectRadius:Number;
public var _maxSplitRadius:Number;
public var _boundaryForce:Number;
private var _heatSources:Array;
private var _blobs:Array;
public var _lineThickness:int;
private var _boundaries:Array;
public function LavaLamp(_arg1:MovieClip){
_scale = 1;
_heatTransferRate = 0.1;
_tempTransferRate = 0.01;
_heatLossRate = 0.005;
_minRiseTemperature = 50;
_effectRadius = 1.5;
_maxSpeed = 4;
_joinSpeed = 0.001;
_surfaceTension = 0.5;
_boundaryForce = 0.05;
_roomTemperature = 25;
_pressurePerDegree = 0.01;
_areaSpeed = 500;
_fuseTemperature = 100;
_minFuseTemperature = 40;
_maxRadius = 200;
_maxSplitRadius = 130;
_splitRadiusTolerance = 30;
_maxSplitTemperature = 100;
_splitTemperatureTolerance = 60;
_minConnectionDist = 10;
_friction = 0.99;
_gravity = 0.1;
_separateRadius = 30;
_lava = [];
_blobs = [];
_heatSources = [];
_boundaries = [];
_clip = _arg1;
_clips = [];
_fillColor = 0xFF0000;
_lineColor = 0;
_lineThickness = 1;
}
public function removeLava(_arg1:Lava):Boolean{
var _local2:int;
_local2 = 0;
while (_local2 < _lava.length) {
if (_lava[_local2] == _arg1){
_lava.splice(_local2, 1);
return (true);
};
_local2++;
};
return (false);
}
function drawBlobConnected(_arg1:Graphics, _arg2:Blob, _arg3:Blob, _arg4:Array, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number){
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Number;
var _local28:Array;
_local9 = ((_arg3.radius + _arg2.radius) * (((_effectRadius - 1) * 0.5) + 1));
_local10 = (_arg3.radius - _arg2.radius);
_local11 = ((_arg5 - _local9) / (_local10 - _local9));
_local12 = (_arg2.radius / (_arg3.radius + _arg2.radius));
_local13 = Math.sin((_arg6 - _arg8));
_local14 = Math.cos(((Math.PI - _arg6) - _arg8));
_local15 = Math.cos((_arg6 - _arg8));
_local16 = (_arg2.radius * _local14);
_local17 = (_arg5 - (_arg3.radius * _local15));
if (_arg5 >= (_arg3.radius + _arg2.radius)){
_local18 = (_local12 * _arg5);
_local19 = _arg5;
} else {
_local18 = ((_local12 * _arg5) + (_local11 * ((_local16 + (_local12 * (_local17 - _local16))) - (_local12 * _arg5))));
_local19 = (_arg5 + ((_local16 + (_local12 * (_local17 - _local16))) - _arg5));
};
_local20 = (_arg3.radius * _local13);
_local21 = _minConnectionDist;
_local22 = (_local20 + (((1 - _local11) * (1 - _local11)) * (_local21 - _local20)));
_local23 = Math.atan2(((_arg3.radius * _local13) - (_arg2.radius * _local13)), (_local17 - _local16));
_local24 = (_local18 + ((1 - _local11) * (((_local16 + _local18) * 0.5) - _local18)));
_local25 = (_local18 + ((1 - _local11) * (((_local17 + _local18) * 0.5) - _local18)));
_local26 = (_local22 + (Math.sin((_local11 * _local23)) * (_local24 - _local18)));
_local27 = (_local22 + (Math.sin((_local11 * _local23)) * (_local25 - _local18)));
_local28 = [];
_local28[0] = new Point();
_local28[0].x = ((_arg2.x + (Math.cos(_arg7) * _local18)) + (Math.cos((_arg7 - (Math.PI * 0.5))) * _local22));
_local28[0].y = ((_arg2.y + (Math.sin(_arg7) * _local18)) + (Math.sin((_arg7 - (Math.PI * 0.5))) * _local22));
_local28[1] = new Point();
_local28[1].x = ((_arg2.x + (Math.cos(_arg7) * _local18)) + (Math.cos((_arg7 + (Math.PI * 0.5))) * _local22));
_local28[1].y = ((_arg2.y + (Math.sin(_arg7) * _local18)) + (Math.sin((_arg7 + (Math.PI * 0.5))) * _local22));
_local28[2] = new Point();
_local28[2].x = ((_arg2.x + (Math.cos(_arg7) * _local24)) + (Math.cos((_arg7 - (Math.PI * 0.5))) * _local26));
_local28[2].y = ((_arg2.y + (Math.sin(_arg7) * _local24)) + (Math.sin((_arg7 - (Math.PI * 0.5))) * _local26));
_local28[3] = new Point();
_local28[3].x = ((_arg2.x + (Math.cos(_arg7) * _local25)) + (Math.cos((_arg7 - (Math.PI * 0.5))) * _local27));
_local28[3].y = ((_arg2.y + (Math.sin(_arg7) * _local25)) + (Math.sin((_arg7 - (Math.PI * 0.5))) * _local27));
_local28[4] = new Point();
_local28[4].x = ((_arg2.x + (Math.cos(_arg7) * _local24)) + (Math.cos((_arg7 + (Math.PI * 0.5))) * _local26));
_local28[4].y = ((_arg2.y + (Math.sin(_arg7) * _local24)) + (Math.sin((_arg7 + (Math.PI * 0.5))) * _local26));
_local28[5] = new Point();
_local28[5].x = ((_arg2.x + (Math.cos(_arg7) * _local25)) + (Math.cos((_arg7 + (Math.PI * 0.5))) * _local27));
_local28[5].y = ((_arg2.y + (Math.sin(_arg7) * _local25)) + (Math.sin((_arg7 + (Math.PI * 0.5))) * _local27));
_arg1.moveTo(_arg4[0].x, _arg4[0].y);
_arg1.lineTo(_arg4[1].x, _arg4[1].y);
_arg1.curveTo(_local28[5].x, _local28[5].y, _local28[1].x, _local28[1].y);
_arg1.curveTo(_local28[4].x, _local28[4].y, _arg4[2].x, _arg4[2].y);
_arg1.lineTo(_arg4[3].x, _arg4[3].y);
_arg1.curveTo(_local28[2].x, _local28[2].y, _local28[0].x, _local28[0].y);
_arg1.curveTo(_local28[3].x, _local28[3].y, _arg4[0].x, _arg4[0].y);
}
public function addHeatSource(_arg1:HeatSource):Boolean{
if (!_arg1){
return (false);
};
removeHeatSource(_arg1);
_heatSources.push(_arg1);
return (true);
}
public function get heatSources():Array{
return (_heatSources);
}
public function addLava(_arg1:Lava):Boolean{
if (!_arg1){
return (false);
};
removeLava(_arg1);
_lava.push(_arg1);
return (true);
}
public function getBounds():Rectangle{
var _local1:Rectangle;
var _local2:Number;
var _local3:Number;
var _local4:int;
_local1 = new Rectangle();
_local2 = 0;
_local3 = 0;
if (_boundaries[0]){
_local2 = _boundaries[0].x;
_local1.x = _local2;
_local3 = _boundaries[0].y;
_local1.y = _local3;
};
_local4 = 1;
while (_local4 < _boundaries.length) {
_local1.x = Math.min(_local1.x, _boundaries[_local4].x);
_local1.y = Math.min(_local1.y, _boundaries[_local4].y);
_local2 = Math.max(_local2, _boundaries[_local4].x);
_local3 = Math.max(_local3, _boundaries[_local4].y);
_local4++;
};
_local1.width = (_local2 - _local1.x);
_local1.height = (_local3 - _local1.y);
return (_local1);
}
public function removeBlob(_arg1:Blob):Boolean{
var _local2:int;
_local2 = 0;
while (_local2 < _blobs.length) {
if (_blobs[_local2] == _arg1){
_blobs.splice(_local2, 1);
return (true);
};
_local2++;
};
return (false);
}
public function get boundaries():Array{
return (_boundaries);
}
function drawBlobHalf(_arg1:Graphics, _arg2:Blob, _arg3:Point, _arg4:Point, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number){
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Array;
var _local16:Number;
var _local17:Number;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
_local15 = [];
_local16 = (Math.cos((_arg7 - _arg9)) * _arg2.radius);
_local17 = (Math.sin((_arg7 - _arg9)) * _arg2.radius);
_local18 = _minConnectionDist;
_local19 = (_local16 * 0.5);
_local20 = (1 - ((_arg5 - (0.5 * _arg6)) / (_arg6 - (0.5 * _arg6))));
_local13 = (_arg2.radius + ((_local20 * _arg5) * 0.5));
_local10 = (_local13 * 1.1);
_local14 = (_local19 + (_local20 * (_local18 - _local19)));
_local11 = ((_local13 + (_arg2.radius * Math.cos((_arg7 - _arg9)))) * 0.5);
_local21 = _local17;
_local12 = (_local21 + (_local20 * (_local18 - _local21)));
_local15[0] = new Point();
_local15[0].x = ((_arg2.x + (Math.cos(_arg8) * _local13)) + (Math.cos((_arg8 - (Math.PI * 0.5))) * _local14));
_local15[0].y = ((_arg2.y + (Math.sin(_arg8) * _local13)) + (Math.sin((_arg8 - (Math.PI * 0.5))) * _local14));
_local15[1] = new Point();
_local15[1].x = ((_arg2.x + (Math.cos(_arg8) * _local13)) + (Math.cos((_arg8 + (Math.PI * 0.5))) * _local14));
_local15[1].y = ((_arg2.y + (Math.sin(_arg8) * _local13)) + (Math.sin((_arg8 + (Math.PI * 0.5))) * _local14));
_local15[2] = new Point();
_local15[2].x = ((_arg2.x + (Math.cos(_arg8) * _local11)) + (Math.cos((_arg8 - (Math.PI * 0.5))) * _local12));
_local15[2].y = ((_arg2.y + (Math.sin(_arg8) * _local11)) + (Math.sin((_arg8 - (Math.PI * 0.5))) * _local12));
_local15[3] = new Point();
_local15[3].x = ((_arg2.x + (Math.cos(_arg8) * _local11)) + (Math.cos((_arg8 + (Math.PI * 0.5))) * _local12));
_local15[3].y = ((_arg2.y + (Math.sin(_arg8) * _local11)) + (Math.sin((_arg8 + (Math.PI * 0.5))) * _local12));
_local15[5] = new Point();
_local15[5].x = (_arg2.x + (Math.cos(_arg8) * _local10));
_local15[5].y = (_arg2.y + (Math.sin(_arg8) * _local10));
_arg1.moveTo(_arg3.x, _arg3.y);
_arg1.lineTo(_arg4.x, _arg4.y);
_arg1.curveTo(_local15[2].x, _local15[2].y, _local15[0].x, _local15[0].y);
_arg1.curveTo(_local15[5].x, _local15[5].y, _local15[1].x, _local15[1].y);
_arg1.curveTo(_local15[3].x, _local15[3].y, _arg3.x, _arg3.y);
}
public function get clip():MovieClip{
return (_clip);
}
public function connectTwoCircles(_arg1:Graphics, _arg2:Blob, _arg3:Blob, _arg4:Boolean){
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:Array;
var _local16:Number;
var _local17:Point;
_local5 = (_arg2.x - _arg3.x);
_local6 = (_arg2.y - _arg3.y);
_local7 = Math.sqrt(((_local5 * _local5) + (_local6 * _local6)));
_local8 = (_arg2.radius - _arg3.radius);
if (_local7 <= _local8){
return;
};
_local9 = (_arg2.radius + _arg3.radius);
_local10 = (_local7 - _local9);
_local11 = Math.acos((_local8 / _local7));
_local12 = 0.5;
_local13 = (_local11 * _local12);
_local14 = Math.atan2((_arg2.y - _arg3.y), (_arg2.x - _arg3.x));
_local15 = [new Point(), new Point(), new Point(), new Point()];
_local15[0].x = (_arg2.x + (_arg2.radius * Math.cos((((-(Math.PI) + _local11) - _local13) + _local14))));
_local15[0].y = (_arg2.y + (_arg2.radius * Math.sin((((-(Math.PI) + _local11) - _local13) + _local14))));
_local15[1].x = (_arg2.x + (_arg2.radius * Math.cos((((Math.PI - _local11) + _local13) + _local14))));
_local15[1].y = (_arg2.y + (_arg2.radius * Math.sin((((Math.PI - _local11) + _local13) + _local14))));
_local15[2].x = (_arg3.x + (_arg3.radius * Math.cos((((Math.PI - _local11) - _local13) + _local14))));
_local15[2].y = (_arg3.y + (_arg3.radius * Math.sin((((Math.PI - _local11) - _local13) + _local14))));
_local15[3].x = (_arg3.x + (_arg3.radius * Math.cos((((-(Math.PI) + _local11) + _local13) + _local14))));
_local15[3].y = (_arg3.y + (_arg3.radius * Math.sin((((-(Math.PI) + _local11) + _local13) + _local14))));
_local16 = (_local9 * (_effectRadius - 1));
_local17 = new Point((_arg3.x + ((Math.cos(_local14) * _local7) * 0.5)), (_arg3.y + ((Math.sin(_local14) * _local7) * 0.5)));
if (_local10 < (0.5 * _local16)){
if (_arg4){
_arg1.beginFill(_fillColor);
};
drawBlobConnected(_arg1, _arg3, _arg2, _local15, _local7, _local11, _local14, _local13);
if (_arg4){
_arg1.endFill();
};
} else {
if (_arg4){
_arg1.beginFill(_fillColor);
};
drawBlobHalf(_arg1, _arg3, _local15[2], _local15[3], _local10, _local16, _local11, _local14, _local13);
if (_arg4){
_arg1.endFill();
_arg1.beginFill(_fillColor);
};
drawBlobHalf(_arg1, _arg2, _local15[0], _local15[1], _local10, _local16, _local11, (_local14 + Math.PI), _local13);
if (_arg4){
_arg1.endFill();
};
};
}
public function addBlob(_arg1:Blob):Boolean{
if (!_arg1){
return (false);
};
removeBlob(_arg1);
_blobs.push(_arg1);
return (true);
}
public function update(){
var _local1:int;
var _local2:int;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Blob;
var _local7:Blob;
var _local8:Point;
var _local9:Array;
var _local10:Array;
var _local11:Array;
var _local12:Array;
var _local13:int;
var _local14:Shape;
var _local15:Number;
var _local16:Number;
var _local17:Point;
var _local18:Number;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Number;
var _local26:Number;
var _local27:Blob;
_local8 = new Point();
_local1 = 0;
while (_local1 < _boundaries.length) {
_local8.x = (_local8.x + _boundaries[_local1].x);
_local8.y = (_local8.y + _boundaries[_local1].y);
_local1++;
};
if (_boundaries.length){
_local8.x = (_local8.x / _boundaries.length);
_local8.y = (_local8.y / _boundaries.length);
};
_local9 = [];
_local10 = [];
_local11 = [];
_local12 = [];
_local1 = 0;
while (_local1 < _blobs.length) {
if (!_local9[_local1]){
_local9[_local1] = 0;
};
if (!_local11[_local1]){
_local11[_local1] = 0;
};
if (!_local12[_local1]){
_local12[_local1] = 0;
};
_blobs[_local1].transferred = false;
_local15 = ((_blobs[_local1].radius * _blobs[_local1].radius) / (((_maxRadius * _maxRadius) * _scale) * _scale));
_local2 = 0;
while (_local2 < _heatSources.length) {
_local3 = (_blobs[_local1].x - _heatSources[_local2].x);
_local4 = (_blobs[_local1].y - _heatSources[_local2].y);
_local5 = Math.sqrt(((_local3 * _local3) + (_local4 * _local4)));
if (_local5 > (_blobs[_local1].radius + _heatSources[_local2].radius)){
} else {
_local16 = (1 - (_local5 / (_blobs[_local1].radius + _heatSources[_local2].radius)));
_local9[_local1] = (_local9[_local1] + ((((_heatSources[_local2].temperature - _blobs[_local1].temperature) * _heatTransferRate) * _local15) * _local16));
};
_local2++;
};
_local9[_local1] = (_local9[_local1] + (((_roomTemperature - _blobs[_local1].temperature) * _heatLossRate) * _local15));
_local12[_local1] = (_local12[_local1] + ((Math.min((_minRiseTemperature - _blobs[_local1].temperature), 0) * _pressurePerDegree) * _local15));
_local12[_local1] = (_local12[_local1] + (_gravity * _local15));
_local2 = 0;
while (_local2 < _boundaries.length) {
_local17 = new Point(_blobs[_local1].x, _blobs[_local1].y);
if (Geometry.circle2line(_local17, _blobs[_local1].radius, _boundaries[_local2], _boundaries[((_local2 + 1) % _boundaries.length)]).length){
_local18 = (Math.atan2((_boundaries[((_local2 + 1) % _boundaries.length)].y - _boundaries[_local2].y), (_boundaries[((_local2 + 1) % _boundaries.length)].x - _boundaries[_local2].x)) + (Math.PI * 0.5));
_local11[_local1] = (_local11[_local1] + ((Math.cos(_local18) * _surfaceTension) * _local15));
_local12[_local1] = (_local12[_local1] + ((Math.sin(_local18) * _surfaceTension) * _local15));
};
_local2++;
};
if (!Amber3Geometry.collide([new Point(_blobs[_local1].x, _blobs[_local1].y)], _boundaries)){
_local11[_local1] = (_local11[_local1] + ((_local8.x - _blobs[_local1].x) * _boundaryForce));
_local12[_local1] = (_local12[_local1] + ((_local8.y - _blobs[_local1].y) * _boundaryForce));
};
_local2 = (_local1 + 1);
while (_local2 < _blobs.length) {
_local3 = (_blobs[_local1].x - _blobs[_local2].x);
_local4 = (_blobs[_local1].y - _blobs[_local2].y);
_local5 = Math.sqrt(((_local3 * _local3) + (_local4 * _local4)));
if (_local5 > ((_blobs[_local1].radius + _blobs[_local2].radius) * _effectRadius)){
} else {
if (!_local9[_local2]){
_local9[_local2] = 0;
};
if (!_local11[_local2]){
_local11[_local2] = 0;
};
if (!_local12[_local2]){
_local12[_local2] = 0;
};
_local19 = (_blobs[_local2].radius / (_maxRadius * _scale));
_local20 = ((((_blobs[_local1].temperature + _local9[_local1]) + _blobs[_local2].temperature) + _local9[_local2]) * 0.5);
if (_local5 < (_blobs[_local1].radius + _blobs[_local2].radius)){
_local21 = (_blobs[_local1].radius / (_blobs[_local1].radius + _blobs[_local2].radius));
_local22 = (_blobs[_local2].radius / (_blobs[_local1].radius + _blobs[_local2].radius));
_local23 = (((_blobs[_local1].temperature + _local9[_local1]) * _local21) + ((_blobs[_local2].temperature + _local9[_local2]) * _local22));
_local9[_local1] = (_local9[_local1] + ((_local23 - (_blobs[_local1].temperature + _local9[_local1])) * 0.01));
_local9[_local2] = (_local9[_local2] + ((_local23 - (_blobs[_local2].temperature + _local9[_local2])) * 0.01));
};
if ((((((_local5 < (_blobs[_local1].radius + _blobs[_local2].radius))) && ((Math.abs((_blobs[_local1].temperature - _blobs[_local2].temperature)) < _fuseTemperature)))) && ((_local20 > _minFuseTemperature)))){
Blob.fuse(_blobs[_local1], _blobs[_local2]);
};
if ((((_local20 < _minFuseTemperature)) || ((Math.abs((_blobs[_local1].temperature - _blobs[_local2].temperature)) > _fuseTemperature)))){
if (_local5 < (_blobs[_local1].radius + _blobs[_local2].radius)){
_local11[_local1] = (_local11[_local1] - ((((_blobs[_local2].x - _blobs[_local1].x) * _local15) * _surfaceTension) / (_blobs[_local1].radius + _blobs[_local2].radius)));
_local12[_local1] = (_local12[_local1] - ((((_blobs[_local2].y - _blobs[_local1].y) * _local15) * _surfaceTension) / (_blobs[_local1].radius + _blobs[_local2].radius)));
_local11[_local2] = (_local11[_local2] - ((((_blobs[_local1].x - _blobs[_local2].x) * _local19) * _surfaceTension) / (_blobs[_local1].radius + _blobs[_local2].radius)));
_local12[_local2] = (_local12[_local2] - ((((_blobs[_local1].y - _blobs[_local2].y) * _local19) * _surfaceTension) / (_blobs[_local1].radius + _blobs[_local2].radius)));
};
} else {
if (_local5 < ((_blobs[_local1].radius + _blobs[_local2].radius) * _effectRadius)){
_local11[_local1] = (_local11[_local1] + ((((_blobs[_local2].x - _blobs[_local1].x) * _local15) * _joinSpeed) / (_blobs[_local1].radius + _blobs[_local2].radius)));
_local12[_local1] = (_local12[_local1] + ((((_blobs[_local2].y - _blobs[_local1].y) * _local15) * _joinSpeed) / (_blobs[_local1].radius + _blobs[_local2].radius)));
_local11[_local2] = (_local11[_local2] + ((((_blobs[_local1].x - _blobs[_local2].x) * _local19) * _joinSpeed) / (_blobs[_local1].radius + _blobs[_local2].radius)));
_local12[_local2] = (_local12[_local2] + ((((_blobs[_local1].y - _blobs[_local2].y) * _local19) * _joinSpeed) / (_blobs[_local1].radius + _blobs[_local2].radius)));
};
};
};
_local2++;
};
_local1++;
};
_local13 = _blobs.length;
_local1 = 0;
while (_local1 < _local13) {
_blobs[_local1].transfer((_areaSpeed * _scale), (_separateRadius * _scale));
if (_blobs[_local1].radius <= 0.1){
_blobs[_local1].separate();
removeBlob(_blobs[_local1]);
_local11.splice(_local1, 1);
_local12.splice(_local1, 1);
_local9.splice(_local1, 1);
_local1--;
_local13--;
} else {
_blobs[_local1].x = (_blobs[_local1].x + _blobs[_local1].vX);
_blobs[_local1].y = (_blobs[_local1].y + _blobs[_local1].vY);
_blobs[_local1].vX = (_blobs[_local1].vX + (_local11[_local1] * _scale));
_blobs[_local1].vY = (_blobs[_local1].vY + (_local12[_local1] * _scale));
_blobs[_local1].vX = (_blobs[_local1].vX * (_friction + ((1 - _friction) * (1 - _scale))));
_blobs[_local1].vY = (_blobs[_local1].vY * (_friction + ((1 - _friction) * (1 - _scale))));
if (_blobs[_local1].vX > (_maxSpeed * _scale)){
_blobs[_local1].vX = (_maxSpeed * _scale);
};
if (_blobs[_local1].vX < (-(_maxSpeed) * _scale)){
_blobs[_local1].vX = (-(_maxSpeed) * _scale);
};
if (_blobs[_local1].vY > (_maxSpeed * _scale)){
_blobs[_local1].vY = (_maxSpeed * _scale);
};
if (_blobs[_local1].vY < (-(_maxSpeed) * _scale)){
_blobs[_local1].vY = (-(_maxSpeed) * _scale);
};
_blobs[_local1].temperature = (_blobs[_local1].temperature + _local9[_local1]);
_local24 = Math.max((1 - Math.max((((_maxSplitRadius * _scale) - _blobs[_local1].radius) / (_splitRadiusTolerance * _scale)), 0)), 0);
_local25 = Math.max((1 - Math.max(((_maxSplitTemperature - _blobs[_local1].radius) / _splitTemperatureTolerance), 0)), 0);
_local26 = (Math.min(Math.max((_local24 * _local25), 0), 1) * 0.5);
if (Math.random() < _local26){
_local27 = _blobs[_local1].split();
if (_local27){
addBlob(_local27);
};
};
};
_local1++;
};
_local1 = 0;
while (_local1 < _clips.length) {
_clips[_local1].graphics.clear();
_clips[_local1].parent.removeChild(_clips[_local1]);
_local1++;
};
_clips = [];
_local1 = 0;
while (_local1 < _blobs.length) {
_local14 = new Shape();
_clips.push(_local14);
_clip.addChild(_local14);
_local14.graphics.lineStyle((_lineThickness * 2), _lineColor);
_local14.graphics.drawCircle(_blobs[_local1].x, _blobs[_local1].y, _blobs[_local1].radius);
_local2 = (_local1 + 1);
while (_local2 < _blobs.length) {
_local3 = (_blobs[_local1].x - _blobs[_local2].x);
_local4 = (_blobs[_local1].y - _blobs[_local2].y);
_local5 = Math.sqrt(((_local3 * _local3) + (_local4 * _local4)));
if (_local5 > ((_blobs[_local1].radius + _blobs[_local2].radius) * _effectRadius)){
} else {
if (Math.abs((_blobs[_local1].temperature - _blobs[_local2].temperature)) > _fuseTemperature){
} else {
if (_blobs[_local1].radius > _blobs[_local2].radius){
connectTwoCircles(_local14.graphics, _blobs[_local1], _blobs[_local2], false);
} else {
connectTwoCircles(_local14.graphics, _blobs[_local2], _blobs[_local1], false);
};
};
};
_local2++;
};
_local1++;
};
_local1 = 0;
while (_local1 < _lava.length) {
_local14 = new Shape();
_clips.push(_local14);
_clip.addChild(_local14);
_local14.graphics.lineStyle((_lineThickness * 2), _lineColor);
_lava[_local1].draw(_local14.graphics);
_local1++;
};
_local1 = 0;
while (_local1 < _blobs.length) {
_local14 = new Shape();
_clips.push(_local14);
_clip.addChild(_local14);
_local14.graphics.beginFill(_fillColor);
_local14.graphics.drawCircle(_blobs[_local1].x, _blobs[_local1].y, _blobs[_local1].radius);
_local14.graphics.endFill();
_local2 = (_local1 + 1);
while (_local2 < _blobs.length) {
_local3 = (_blobs[_local1].x - _blobs[_local2].x);
_local4 = (_blobs[_local1].y - _blobs[_local2].y);
_local5 = Math.sqrt(((_local3 * _local3) + (_local4 * _local4)));
if (_local5 > ((_blobs[_local1].radius + _blobs[_local2].radius) * _effectRadius)){
} else {
if (Math.abs((_blobs[_local1].temperature - _blobs[_local2].temperature)) > _fuseTemperature){
} else {
if (_blobs[_local1].radius > _blobs[_local2].radius){
connectTwoCircles(_local14.graphics, _blobs[_local1], _blobs[_local2], true);
} else {
connectTwoCircles(_local14.graphics, _blobs[_local2], _blobs[_local1], true);
};
};
};
_local2++;
};
_local1++;
};
_local1 = 0;
while (_local1 < _lava.length) {
_local14 = new Shape();
_clips.push(_local14);
_clip.addChild(_local14);
_local14.graphics.beginFill(_fillColor);
_lava[_local1].draw(_local14.graphics);
_local14.graphics.endFill();
_lava[_local1].update();
_local1++;
};
}
public function removeHeatSource(_arg1:HeatSource):Boolean{
var _local2:int;
_local2 = 0;
while (_local2 < _heatSources.length) {
if (_heatSources[_local2] == _arg1){
_heatSources.splice(_local2, 1);
return (true);
};
_local2++;
};
return (false);
}
public function get blobs():Array{
return (_blobs);
}
}
}//package lavalamp
Section 7
//_btn1_28 (lavaLampBelly_fla._btn1_28)
package lavaLampBelly_fla {
import flash.display.*;
import flash.text.*;
public dynamic class _btn1_28 extends MovieClip {
public var _txt:TextField;
}
}//package lavaLampBelly_fla
Section 8
//_btn2_29 (lavaLampBelly_fla._btn2_29)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class _btn2_29 extends MovieClip {
public function _btn2_29(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package lavaLampBelly_fla
Section 9
//_btn3_30 (lavaLampBelly_fla._btn3_30)
package lavaLampBelly_fla {
import flash.display.*;
import flash.text.*;
public dynamic class _btn3_30 extends MovieClip {
public var _txt:TextField;
}
}//package lavaLampBelly_fla
Section 10
//belly_21 (lavaLampBelly_fla.belly_21)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class belly_21 extends MovieClip {
public var circle3:MovieClip;
public var circle6:MovieClip;
public var circle2:MovieClip;
public var circle4:MovieClip;
public var circle1:MovieClip;
public var circle7:MovieClip;
public var circle8:MovieClip;
public var circle5:MovieClip;
public var circle0:MovieClip;
public var circle9:MovieClip;
public var circle10:MovieClip;
public var circle11:MovieClip;
}
}//package lavaLampBelly_fla
Section 11
//eye1_14 (lavaLampBelly_fla.eye1_14)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class eye1_14 extends MovieClip {
public var pupil:MovieClip;
public function eye1_14(){
addFrameScript(1, frame2, 3, frame4, 5, frame6, 7, frame8, 9, frame10, 15, frame16, 17, frame18, 19, frame20);
}
function frame10(){
this.stop();
}
function frame18(){
this.stop();
}
function frame6(){
this.stop();
}
function frame16(){
this.stop();
}
function frame8(){
this.stop();
}
function frame4(){
this.stop();
}
function frame20(){
this.stop();
}
function frame2(){
this.stop();
}
}
}//package lavaLampBelly_fla
Section 12
//eye2_16 (lavaLampBelly_fla.eye2_16)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class eye2_16 extends MovieClip {
public var pupil:MovieClip;
public function eye2_16(){
addFrameScript(1, frame2, 3, frame4, 5, frame6, 7, frame8, 9, frame10, 15, frame16, 17, frame18, 19, frame20);
}
function frame10(){
this.stop();
}
function frame18(){
this.stop();
}
function frame6(){
this.stop();
}
function frame16(){
this.stop();
}
function frame8(){
this.stop();
}
function frame4(){
this.stop();
}
function frame20(){
this.stop();
}
function frame2(){
this.stop();
}
}
}//package lavaLampBelly_fla
Section 13
//MainTimeline (lavaLampBelly_fla.MainTimeline)
package lavaLampBelly_fla {
import flash.display.*;
import flash.geom.*;
import lavalamp.*;
import flash.events.*;
import flash.text.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.net.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.utils.*;
import flash.xml.*;
public dynamic class MainTimeline extends MovieClip {
public var size:int;
public var oldMX:Number;
public var oldMY:Number;
public var states:Object;
public var SCREEN_INTERVALS:int;
public var initScale:Number;
public var LAMP_AREA_PROP:Number;
public var curState:Object;
public var coldSources:Array;
public var tF:TextFormat;
public var oldBlushMode:int;
public var stolen_tF:TextFormat;
public var cCount:int;
public var state:String;
public var screen:Object;
public var BOX_COLORS:Array;
public var p1X:Number;
public var p1Y:Number;
public var colors$:Array;
public var _info_txt:TextField;
public var cTrans$:ColorTransform;
public var blushMode:int;
public var SCREEN_TEMP_COLOR:int;
public var movingBlobs:int;
public var p2X:Number;
public var p2Y:Number;
public var LIGHT_COLORS:Array;
public var i$:int;
public var endY:Number;
public var b2Bounds:Rectangle;
public var SCREEN_LINE_COLOR:int;
public var BLUSH:int;
public var lamp_mask:MovieClip;
public var breastTimer:int;
public var blush:Number;
public var _panel:MovieClip;
public var blinking:Boolean;
public var totalLavaArea:Number;
public var breastPhases:Array;
public var condition:String;
public var count:int;
public var oldX:Number;
public var endX:Number;
public var NUM_LIGHTS:int;
public var oldY:Number;
public var undragables:Array;
public var breastPhase:int;
public var endScale:Number;
public var STAGE_WIDTH:int;
public var square:Object;
public var LAVA_AREA_PROP:Number;
public var SCREEN_SIZE_COLOR:int;
public var _lampRect:Rectangle;
public var timer:int;
public var initY:Number;
public var initX:Number;
public var stolen_txt:TextField;
public var whitefang:MovieClip;
public var lamp_mc:MovieClip;
public var NEW_BLOB_SIZE:int;
public var NUM_BREAST_PHASES:int;
public var canBlink:Boolean;
public var BLUSH_OFF:int;
public var MAX_LAMP_AREA:Number;
public var maxSize:int;
public var hCount:int;
public var BLUSH_ON:int;
public var b1Bounds:Rectangle;
public var STAGE_HEIGHT:int;
public var heatSources:Array;
public var bottomLava:Lava;
public var SCREEN_COLOR:int;
public var growth:int;
public var SCREEN_BUBBLES_COLOR:int;
public var topLava:Lava;
public var NUM_SOURCES:int;
public var lcd_stolen:String;
public var lamp:LavaLamp;
public function MainTimeline(){
addFrameScript(0, frame1);
}
public function hitBelly(_arg1:Event){
stage.addEventListener("enterFrame", hittingBelly);
stage.addEventListener("mouseUp", stopHittingBelly);
}
public function eFrame(_arg1:Event){
var _local2:int;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:ColorTransform;
var _local7:*;
var _local8:Array;
count++;
if (movingBlobs > 0){
movingBlobs--;
};
if (Math.random() < (0.1 + ((0.1 * size) / maxSize))){
updateBox(square, BOX_COLORS, (size / maxSize), 0.75, 0.05);
};
updateScreen(screen, SCREEN_LINE_COLOR, SCREEN_COLOR, SCREEN_SIZE_COLOR, SCREEN_TEMP_COLOR, SCREEN_BUBBLES_COLOR);
if (_panel._cam.currentFrame == 2){
_local3 = (initScale + (((endScale - initScale) * size) / maxSize));
_local4 = (initX + (((endX - initX) * size) / maxSize));
_local5 = (initY + (((endY - initY) * size) / maxSize));
whitefang.scaleX = (whitefang.scaleX + ((_local3 - whitefang.scaleX) * 0.5));
whitefang.scaleY = whitefang.scaleX;
whitefang.x = (whitefang.x + ((_local4 - whitefang.x) * 0.5));
whitefang.y = (whitefang.y + ((_local5 - whitefang.y) * 0.5));
adjustPosition();
};
if (((canBlink) && ((Math.random() > 0.99)))){
whitefang.eye1.gotoAndPlay("blink");
whitefang.eye2.gotoAndPlay("blink");
whitefang.eye1.pupil.x = (curState.p1X + p1X);
whitefang.eye1.pupil.y = (curState.p1Y + p1Y);
whitefang.eye2.pupil.x = (curState.p2X + p2X);
whitefang.eye2.pupil.y = (curState.p2Y + p2Y);
blinking = true;
};
if (((blinking) && ((whitefang.eye1.currentLabel == "endblink")))){
whitefang.eye1.gotoAndPlay(curState.eye1);
whitefang.eye2.gotoAndPlay(curState.eye2);
whitefang.eye1.pupil.x = (curState.p1X + p1X);
whitefang.eye1.pupil.y = (curState.p1Y + p1Y);
whitefang.eye2.pupil.x = (curState.p2X + p2X);
whitefang.eye2.pupil.y = (curState.p2Y + p2Y);
blinking = false;
};
_local2 = 0;
while (_local2 < NUM_LIGHTS) {
if (Math.random() < 0.97){
} else {
_local6 = new ColorTransform();
_local7 = Math.floor((Math.random() * (LIGHT_COLORS.length * 2)));
if (_local7 >= LIGHT_COLORS.length){
_local6.redOffset = -128;
_local6.greenOffset = -128;
_local6.blueOffset = -128;
} else {
_local8 = LIGHT_COLORS[_local7];
_local6.redMultiplier = _local8[0];
_local6.greenMultiplier = _local8[1];
_local6.blueMultiplier = _local8[2];
_local6.redOffset = 0;
_local6.greenOffset = 0;
_local6.blueOffset = 0;
};
whitefang[("_light" + _local2)].transform.colorTransform = _local6;
};
_local2++;
};
if (Math.random() > 0.99){
whitefang.tail.play();
};
if (movingBlobs > 0){
react("bellymotion", movingBlobs);
if (blushMode != BLUSH_ON){
oldBlushMode = blushMode;
blushMode = BLUSH_ON;
};
} else {
if (state == "bellymotion"){
condition = "";
blushMode = oldBlushMode;
setState(curState.state);
};
};
if (growth == 1){
if (size < maxSize){
size++;
setSize(size);
switch (true){
case (size < 1):
break;
case (size < 133):
setState("expand");
break;
case (size < 266):
setState("bigger");
break;
case (size < 400):
blushMode = BLUSH_ON;
setState("almost");
break;
case (size >= maxSize):
growth = 0;
blushMode = BLUSH;
setState("over");
break;
};
};
} else {
if (growth == -1){
if (size > 1){
size--;
setSize(size);
if (size > 1){
setState("revert");
} else {
size = 1;
setState("normal");
growth = 0;
};
};
};
};
}
public function zoomIn(_arg1:Event){
stage.addEventListener("enterFrame", zoomingIn);
}
public function timeout_fn(_arg1:Event=null){
if (timer <= 0){
stage.removeEventListener("enterFrame", timeout_fn);
condition = "";
setState(curState.state);
};
timer--;
}
public function worldDragable():Boolean{
var _local1:int;
_local1 = 0;
while (_local1 < undragables.length) {
if ((undragables[_local1] as MovieClip).hitTestPoint(stage.mouseX, stage.mouseY, true)){
return (false);
};
_local1++;
};
return (true);
}
public function updateBox(_arg1:Object, _arg2:Array, _arg3:Number, _arg4:Number=0.75, _arg5:Number=0.1){
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:Number;
var _local10:int;
var _local11:Array;
var _local12:Number;
var _local13:Number;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Graphics;
_local11 = [];
_local12 = 0;
_local13 = 0;
_local14 = 0;
_local15 = 1;
_local16 = (1 / _arg2.length);
_local6 = (_arg2.length - 1);
while (_local6 >= 0) {
if (_local6){
_local14 = (_arg4 * _local15);
_local15 = (_local15 * (1 - _arg4));
} else {
_local14 = _local15;
};
_arg5 = (_local16 + (_arg3 * (_local14 - _local16)));
_local11[_local6] = _arg5;
_local12 = (_local12 + _local11[_local6]);
_local6--;
};
_local6 = 0;
while (_local6 < _arg2.length) {
_local11[_local6] = (_local11[_local6] / _local12);
_local6++;
};
_local17 = _arg1.clip.graphics;
_local17.clear();
_local17.lineStyle(1, 0);
_local6 = 0;
while (_local6 < _arg1.width) {
_local7 = 0;
while (_local7 < _arg1.height) {
if ((((Math.random() <= _arg5)) || ((_arg1.lights[_local6][_local7] == -1)))){
_local9 = Math.random();
_local13 = 0;
_local8 = 0;
while (_local8 < _arg2.length) {
_local13 = (_local13 + _local11[_local8]);
if (_local9 <= _local13){
break;
};
_local8++;
};
_arg1.lights[_local6][_local7] = _local8;
};
_local10 = _arg2[_arg1.lights[_local6][_local7]];
_local17.beginFill(_local10);
_local17.drawRect((_arg1.x + (_local6 * _arg1.size)), (_arg1.y + (_local7 * _arg1.size)), _arg1.size, _arg1.size);
_local17.endFill();
_local7++;
};
_local6++;
};
}
public function stopHittingBelly(_arg1:Event=null){
stage.removeEventListener("enterFrame", hittingBelly);
stage.removeEventListener("mouseUp", stopHittingBelly);
}
public function zoomOut(_arg1:Event){
stage.addEventListener("enterFrame", zoomingOut);
}
function frame1(){
lcd_stolen = new LocalConnection().domain;
if (lcd_stolen.indexOf("deviantart") == -1){
stolen_txt = new TextField();
stolen_txt.width = 800;
stolen_txt.height = 600;
stage.addChild(stolen_txt);
stolen_txt.background = true;
stolen_txt.backgroundColor = 0xFFFFFF;
stolen_txt.selectable = false;
stolen_tF = new TextFormat();
stolen_tF.size = 32;
stolen_tF.color = 0xFF0000;
stolen_tF.font = "Arial";
stolen_tF.bold = true;
stolen_tF.align = "center";
stolen_txt.text = (("Warning: you are playing this file on\n" + lcd_stolen) + "\n\nBest go to\nhttp://doom-the-wolf.deviantart.com\n to see the original.\n\nClick to close.");
stolen_txt.setTextFormat(stolen_tF);
stolen_txt.addEventListener("mouseDown", clearStolen);
};
size = 1;
maxSize = whitefang.belly.totalFrames;
growth = 0;
count = 0;
state = "";
curState = {};
condition = "";
states = [];
blinking = false;
canBlink = true;
p1X = whitefang.eye1.pupil.x;
p1Y = whitefang.eye1.pupil.y;
p2X = whitefang.eye2.pupil.x;
p2Y = whitefang.eye2.pupil.y;
movingBlobs = 0;
_info_txt.text = "";
_info_txt.selectable = false;
tF = _info_txt.defaultTextFormat;
tF.bold = true;
_info_txt.defaultTextFormat = tF;
whitefang.tail.gotoAndStop(1);
states["normal"] = {mouth:"closed", eye1:"big", eye2:"big", p1X:0, p1Y:0, p2X:0, p2Y:0, canBlink:true};
states["expand"] = {mouth:"small", eye1:"open", eye2:"open", p1X:0, p1Y:1, p2X:0, p2Y:1, canBlink:true};
states["bigger"] = {mouth:"happy2", eye1:"sad", eye2:"sad", p1X:2, p1Y:4, p2X:-2, p2Y:4, canBlink:true};
states["almost"] = {mouth:"open", eye1:"closed", eye2:"closed", p1X:0, p1Y:0, p2X:0, p2Y:0, canBlink:false};
states["over"] = {mouth:"smile", eye1:"medium", eye2:"medium", p1X:0, p1Y:0, p2X:0, p2Y:0, canBlink:true};
states["revert"] = {mouth:"sad", eye1:"open", eye2:"open", p1X:0, p1Y:2, p2X:0, p2Y:2, canBlink:true};
states["wink"] = {mouth:"happy", eye1:"medium", eye2:"shut", p1X:0, p1Y:0, p2X:0, p2Y:0, canBlink:false};
states["breastmove"] = {mouth:"happy2", eye1:"sad", eye2:"sad", p1X:0, p1Y:-2, p2X:0, p2Y:-2, canBlink:false};
states["bellymotion"] = {mouth:"happy2", eye1:"open", eye2:"open", p1X:0, p1Y:4, p2X:0, p2Y:4, canBlink:true};
setState("normal");
LIGHT_COLORS = [[0, 0, 1], [0, 1, 1], [0, 1, 0], [1, 1, 0], [1, 0, 0], [1, 0, 1]];
NUM_LIGHTS = 12;
i$ = 0;
while (i$ < NUM_LIGHTS) {
cTrans$ = new ColorTransform();
colors$ = LIGHT_COLORS[Math.floor((Math.random() * LIGHT_COLORS.length))];
cTrans$.redOffset = -128;
cTrans$.greenOffset = -128;
cTrans$.blueOffset = -128;
whitefang[("_light" + i$)].transform.colorTransform = cTrans$;
i$++;
};
stage.addEventListener("enterFrame", eFrame);
timer = 0;
whitefang.bellyCover.addEventListener("mouseDown", hitBelly);
b1Bounds = whitefang.breast1.getBounds(whitefang);
b2Bounds = whitefang.breast2.getBounds(whitefang);
breastPhases = new Array();
breastTimer = 0;
breastPhase = 0;
NUM_BREAST_PHASES = 3;
breastPhases[0] = {scaleX:1, scaleY:1, skew:0, time:7};
breastPhases[1] = {scaleX:1.05, scaleY:(1 / 1.05), skew:0, time:3};
breastPhases[2] = {scaleX:1, scaleY:1, skew:0.1, time:5};
whitefang.blush.alpha = 0;
blushMode = 0;
oldBlushMode = blushMode;
blush = 0;
BLUSH_ON = 1;
BLUSH_OFF = 0;
BLUSH = 2;
whitefang.blush.addEventListener("enterFrame", blushing);
_panel.addEventListener("enterFrame", panelMove);
_panel._expand._txt.text = "Expand";
_panel._revert._txt.text = "Revert";
_panel._plus._txt.text = "+";
_panel._minus._txt.text = "-";
_panel._zero._txt.text = "0";
_panel._cont_txt.text = "Continuous";
_panel._cam_txt.text = "Autocam";
_panel._info.text = "Interactive Christina expansion\nDrawn, animated and programmed by Doom the wolf.\nhttp://doom-the-wolf.deviantart.com";
_panel._expand.buttonMode = true;
_panel._expand.mouseChildren = false;
_panel._revert.buttonMode = true;
_panel._revert.mouseChildren = false;
_panel._plus.buttonMode = true;
_panel._plus.mouseChildren = false;
_panel._minus.buttonMode = true;
_panel._minus.mouseChildren = false;
_panel._zero.buttonMode = true;
_panel._zero.mouseChildren = false;
_panel._cont.buttonMode = true;
_panel._cam.buttonMode = true;
_panel._cam.gotoAndStop(2);
_panel._expand.addEventListener("mouseDown", expand_fn);
_panel._revert.addEventListener("mouseDown", revert_fn);
_panel._cont.addEventListener("mouseDown", cont_fn);
_panel._cam.addEventListener("mouseDown", frameSwitch);
stage.addEventListener("mouseUp", stopExpansion);
_panel._plus.addEventListener("mouseDown", zoomIn);
_panel._minus.addEventListener("mouseDown", zoomOut);
_panel._zero.addEventListener("click", zoomReset);
stage.addEventListener("mouseUp", stopZoom);
STAGE_WIDTH = 800;
STAGE_HEIGHT = 600;
undragables = [];
undragables.push(whitefang.belly);
undragables.push(whitefang.front);
undragables.push(whitefang.breast1);
undragables.push(whitefang.breast2);
undragables.push(whitefang.leg1);
undragables.push(whitefang.leg2);
undragables.push(whitefang.head);
undragables.push(_panel);
stage.addEventListener("mouseDown", dragCharacter);
initX = whitefang.x;
initY = whitefang.y;
initScale = 1;
endX = whitefang.x;
endY = (whitefang.y - 150);
endScale = 0.7;
lamp_mc = new MovieClip();
lamp_mask = new MovieClip();
lamp_mc.x = (lamp_mask.x = whitefang.belly.x);
lamp_mc.y = (lamp_mask.y = whitefang.belly.y);
whitefang.addChildAt(lamp_mask, whitefang.getChildIndex(whitefang.bellyCover));
whitefang.addChildAt(lamp_mc, whitefang.getChildIndex(whitefang.bellyCover));
lamp_mc.mask = lamp_mask;
LAMP_AREA_PROP = (Math.PI * 0.25);
LAVA_AREA_PROP = (2 / 4);
MAX_LAMP_AREA = 0;
NUM_SOURCES = 4;
NEW_BLOB_SIZE = 500;
lamp = new LavaLamp(lamp_mc);
bottomLava = new Lava(0, 0, 0, 0, 5);
topLava = new Lava(0, 0, 0, 0, 5);
heatSources = new Array(NUM_SOURCES);
coldSources = new Array(NUM_SOURCES);
totalLavaArea = 0;
lamp.addLava(topLava);
lamp.addLava(bottomLava);
hCount = 0;
while (hCount < NUM_SOURCES) {
heatSources[hCount] = new HeatSource(110, 0);
coldSources[hCount] = new HeatSource(0, 0);
lamp.addHeatSource(heatSources[hCount]);
lamp.addHeatSource(coldSources[hCount]);
hCount++;
};
lamp_mask.graphics.beginFill(0);
lamp_mask.graphics.moveTo(whitefang.belly[("circle" + 0)].x, whitefang.belly[("circle" + 0)].y);
cCount = 0;
while (cCount <= 11) {
lamp.boundaries[cCount] = new Point(whitefang.belly[("circle" + cCount)].x, whitefang.belly[("circle" + cCount)].y);
lamp_mask.graphics.lineTo(lamp.boundaries[cCount].x, lamp.boundaries[cCount].y);
whitefang.belly[("circle" + cCount)].visible = false;
cCount++;
};
lamp_mask.graphics.lineTo(lamp.boundaries[0].x, lamp.boundaries[0].y);
lamp_mask.graphics.endFill();
whitefang.belly.gotoAndStop(400);
resizeLavaLamp(false);
_lampRect = lamp.getBounds();
MAX_LAMP_AREA = ((_lampRect.width * _lampRect.height) * LAMP_AREA_PROP);
whitefang.belly.gotoAndStop(1);
resizeLavaLamp(false);
totalLavaArea = 0;
whitefang.belly.gotoAndStop(1);
whitefang.bellyCover.gotoAndStop(1);
resizeLavaLamp();
stage.addEventListener("enterFrame", updateLavaLamp);
BOX_COLORS = [0xFF, 0xFFFF, 0xFF00, 0xFFFF00, 0xFF0000];
square = createBox(135, -450, 6, 10, 32, whitefang, 1);
updateBox(square, BOX_COLORS, (size / maxSize));
SCREEN_COLOR = 52479;
SCREEN_LINE_COLOR = 0xFFFFFF;
SCREEN_SIZE_COLOR = 0xFF00;
SCREEN_TEMP_COLOR = 0xFF0000;
SCREEN_BUBBLES_COLOR = 0xFF;
SCREEN_INTERVALS = 32;
screen = createScreen(-295, -420, 190, 120, SCREEN_INTERVALS, whitefang, 1);
updateScreen(screen, SCREEN_LINE_COLOR, SCREEN_COLOR, SCREEN_SIZE_COLOR, SCREEN_TEMP_COLOR, SCREEN_BUBBLES_COLOR);
setSize(size);
}
public function createScreen(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:DisplayObjectContainer, _arg7:int=-1):Object{
var _local8:Object;
var _local9:int;
_local8 = new Object();
_local8.x = _arg1;
_local8.y = _arg2;
_local8.width = _arg3;
_local8.height = _arg4;
_local8.clip = new MovieClip();
if ((((_arg7 > -1)) && ((_arg7 <= _arg6.numChildren)))){
_arg6.addChildAt(_local8.clip, _arg7);
} else {
_arg6.addChild(_local8.clip);
};
_local8.size = [];
_local8.temp = [];
_local8.bubbles = [];
_local9 = 0;
while (_local9 < _arg5) {
_local8.size[_local9] = 0;
_local8.temp[_local9] = 0;
_local8.bubbles[_local9] = 0;
_local9++;
};
return (_local8);
}
public function expand_fn(_arg1:Event){
growth = 1;
}
public function updateScreen(_arg1:Object, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int){
var _local7:int;
var _local8:Number;
var _local9:Number;
var _local10:Graphics;
var _local11:Number;
var _local12:Number;
var _local13:Number;
var _local14:int;
_local8 = (_arg1.y + _arg1.height);
_local9 = 0;
_arg1.size.shift();
_arg1.size.push((size / maxSize));
_arg1.temp.shift();
_local7 = 0;
while (_local7 < lamp.blobs.length) {
_local9 = (_local9 + lamp.blobs[_local7].temperature);
_local7++;
};
if (_local9){
_local9 = (_local9 / lamp.blobs.length);
};
_arg1.temp.push(_local9);
_arg1.bubbles.shift();
_arg1.bubbles.push(lamp.blobs.length);
_local10 = _arg1.clip.graphics;
_local10.clear();
_local10.lineStyle(1, _arg2);
_local10.beginFill(_arg3);
_local10.drawRect(_arg1.x, _arg1.y, _arg1.width, _arg1.height);
_local10.endFill();
_local10.moveTo(_arg1.x, (_arg1.y + (_arg1.height * 0.5)));
_local10.lineTo((_arg1.x + _arg1.width), (_arg1.y + (_arg1.height * 0.5)));
_local11 = (0 / (_arg1.size.length - 1));
_local12 = (-(_arg1.size[0]) * _arg1.height);
_local10.lineStyle(1, _arg4);
_local10.moveTo((_arg1.x + (_arg1.width * _local11)), (_local8 + _local12));
_local7 = 1;
while (_local7 < _arg1.size.length) {
_local11 = (_local7 / (_arg1.size.length - 1));
_local12 = (-(_arg1.size[_local7]) * _arg1.height);
_local10.lineTo((_arg1.x + (_arg1.width * _local11)), (_local8 + _local12));
_local7++;
};
_local13 = 2000;
_local11 = (0 / (_arg1.temp.length - 1));
_local12 = (_arg1.temp[0] / _local13);
if (_local12 > 1){
_local12 = 1;
} else {
if (_local12 < 0){
_local12 = 0;
};
};
_local12 = (_local12 * -(_arg1.height));
_local10.lineStyle(1, _arg5);
_local10.moveTo((_arg1.x + (_arg1.width * _local11)), (_local8 + _local12));
_local7 = 0;
while (_local7 < _arg1.temp.length) {
_local11 = (_local7 / (_arg1.temp.length - 1));
_local12 = (_arg1.temp[_local7] / _local13);
if (_local12 > 1){
_local12 = 1;
} else {
if (_local12 < 0){
_local12 = 0;
};
};
_local12 = (_local12 * -(_arg1.height));
_local10.lineTo((_arg1.x + (_arg1.width * _local11)), (_local8 + _local12));
_local7++;
};
_local14 = 24;
_local11 = (0 / (_arg1.bubbles.length - 1));
_local12 = ((-(_arg1.height) * _arg1.bubbles[0]) / _local14);
_local10.lineStyle(1, _arg6);
_local10.moveTo((_arg1.x + (_arg1.width * _local11)), (_local8 + _local12));
_local7 = 0;
while (_local7 < _arg1.size.length) {
_local11 = (_local7 / (_arg1.bubbles.length - 1));
_local12 = ((-(_arg1.height) * _arg1.bubbles[_local7]) / _local14);
_local10.lineTo((_arg1.x + (_arg1.width * _local11)), (_local8 + _local12));
_local7++;
};
}
public function draggingCharacter(_arg1:Event){
_panel._cam.gotoAndStop(1);
whitefang.x = ((oldX + stage.mouseX) - oldMX);
whitefang.y = ((oldY + stage.mouseY) - oldMY);
adjustPosition();
_info_txt.text = "";
if (((whitefang.breast1.hitTestPoint((STAGE_WIDTH * 0.5), (STAGE_HEIGHT * 0.5), true)) || (whitefang.breast2.hitTestPoint((STAGE_WIDTH * 0.5), (STAGE_HEIGHT * 0.5), true)))){
_info_txt.appendText("BREASTS\n");
};
if (whitefang.belly.hitTestPoint((STAGE_WIDTH * 0.5), (STAGE_HEIGHT * 0.5), true)){
_info_txt.appendText("BELLY\n");
};
if (inSight(whitefang.nose, 10)){
_info_txt.appendText("FACE\n");
};
}
public function dragCharacter(_arg1:Event){
if (!worldDragable()){
return;
};
oldMX = stage.mouseX;
oldMY = stage.mouseY;
oldX = whitefang.x;
oldY = whitefang.y;
stage.addEventListener("mouseMove", draggingCharacter);
stage.addEventListener("mouseUp", dropCharacter);
}
public function moveBreasts(){
if (breastPhase){
return;
};
breastPhase = 1;
breastTimer = 0;
blushMode = BLUSH_ON;
stage.addEventListener("enterFrame", movingBreasts);
}
public function zoomingIn(_arg1:Event){
if (whitefang.scaleX > 2.5){
return;
};
whitefang.scaleX = (whitefang.scaleX + 0.01);
whitefang.scaleY = whitefang.scaleX;
adjustPosition();
}
public function updateLavaLamp(_arg1:Event){
lamp.update();
}
public function stopExpansion(_arg1:Event){
if ((_panel._cont.currentFrame - 2)){
growth = 0;
};
}
public function blushing(_arg1:Event){
if (blushMode){
blush = (blush + 0.05);
if (blush >= 1){
blush = 1;
if (blushMode == BLUSH){
blushMode = BLUSH_OFF;
};
};
} else {
blush = (blush - 0.05);
if (blush <= 0){
blush = 0;
};
};
whitefang.blush.alpha = blush;
}
public function cont_fn(_arg1:Event){
(_arg1.currentTarget as MovieClip).gotoAndStop((3 - (_arg1.currentTarget as MovieClip).currentFrame));
growth = 0;
}
public function frameSwitch(_arg1:Event){
(_arg1.currentTarget as MovieClip).gotoAndStop((3 - (_arg1.currentTarget as MovieClip).currentFrame));
}
public function stopZoom(_arg1:Event){
stage.removeEventListener("enterFrame", zoomingIn);
stage.removeEventListener("enterFrame", zoomingOut);
}
public function dropCharacter(_arg1:Event){
stage.removeEventListener("mouseMove", draggingCharacter);
stage.removeEventListener("mouseUp", dropCharacter);
if (inSight(whitefang.nose, 10)){
react("wink", 30);
};
if (((whitefang.breast1.hitTestPoint((STAGE_WIDTH * 0.5), (STAGE_HEIGHT * 0.5), true)) || (whitefang.breast2.hitTestPoint((STAGE_WIDTH * 0.5), (STAGE_HEIGHT * 0.5), true)))){
react("breastmove", 30);
moveBreasts();
};
}
public function revert_fn(_arg1:Event){
growth = -1;
}
public function createBox(_arg1:int, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:DisplayObjectContainer, _arg7:int):Object{
var _local8:int;
var _local9:int;
var _local10:Object;
_local10 = {};
_local10.x = _arg1;
_local10.y = _arg2;
_local10.width = _arg3;
_local10.height = _arg4;
_local10.size = _arg5;
_local10.clip = new MovieClip();
if ((((_arg7 > -1)) && ((_arg7 <= _arg6.numChildren)))){
_arg6.addChildAt(_local10.clip, _arg7);
} else {
_arg6.addChild(_local10.clip);
};
_local10.lights = new Array();
_local8 = 0;
while (_local8 < _arg3) {
_local10.lights[_local8] = [];
_local9 = 0;
while (_local9 < _arg4) {
_local10.lights[_local8][_local9] = -1;
_local9++;
};
_local8++;
};
return (_local10);
}
public function zoomReset(_arg1:Event=null){
var _local2:Number;
var _local3:Number;
var _local4:Number;
_local2 = (initScale + (((endScale - initScale) * size) / maxSize));
_local3 = (initX + (((endX - initX) * size) / maxSize));
_local4 = (initY + (((endY - initY) * size) / maxSize));
whitefang.scaleX = _local2;
whitefang.scaleY = whitefang.scaleX;
whitefang.x = _local3;
whitefang.y = _local4;
adjustPosition();
}
public function setState(_arg1:String){
var _local2:String;
if ((((state == _arg1)) || (!((condition == ""))))){
return;
};
if (!states[_arg1]){
return;
};
for (_local2 in states[_arg1]) {
curState[_local2] = states[_arg1][_local2];
};
curState.state = (state = _arg1);
whitefang.mouth.gotoAndPlay(curState.mouth);
whitefang.eye1.gotoAndPlay(curState.eye1);
whitefang.eye2.gotoAndPlay(curState.eye2);
whitefang.eye1.pupil.x = (curState.p1X + p1X);
whitefang.eye1.pupil.y = (curState.p1Y + p1Y);
whitefang.eye2.pupil.x = (curState.p2X + p2X);
whitefang.eye2.pupil.y = (curState.p2Y + p2Y);
canBlink = whitefang.canBlink;
}
public function hittingBelly(_arg1:Event){
var _local2:int;
var _local3:Number;
var _local4:Number;
_local2 = 0;
while (_local2 < lamp.blobs.length) {
_local3 = (whitefang.mouseX - lamp.blobs[_local2].x);
_local4 = (whitefang.mouseY - lamp.blobs[_local2].y);
if (((_local3 * _local3) + (_local4 * _local4)) <= (lamp.blobs[_local2].radius * lamp.blobs[_local2].radius)){
lamp.blobs[_local2].x = (lamp.blobs[_local2].x + (_local3 * 0.1));
lamp.blobs[_local2].y = (lamp.blobs[_local2].y + (_local4 * 0.1));
lamp.blobs[_local2].temperature = (lamp.blobs[_local2].temperature + ((100 - lamp.blobs[_local2].temperature) * 0.05));
movingBlobs = 10;
};
_local2++;
};
}
public function inSight(_arg1:MovieClip, _arg2:Number):Boolean{
trace((_arg1.x + _arg1.parent.x), (_arg1.y + _arg1.parent.y));
if ((((((((((_arg1.x * _arg1.parent.scaleX) + _arg1.parent.x) > ((STAGE_WIDTH * 0.5) - _arg2))) && ((((_arg1.y * _arg1.parent.scaleY) + _arg1.parent.y) > ((STAGE_HEIGHT * 0.5) - _arg2))))) && ((((_arg1.x * _arg1.parent.scaleX) + _arg1.parent.x) < ((STAGE_WIDTH * 0.5) + _arg2))))) && ((((_arg1.y * _arg1.parent.scaleY) + _arg1.parent.y) < ((STAGE_HEIGHT * 0.5) + _arg2))))){
return (true);
};
return (false);
}
public function react(_arg1:String, _arg2:int=-1){
var _local3:String;
if (state == _arg1){
timer = _arg2;
if (_arg2 <= 0){
stage.removeEventListener("enterFrame", timeout_fn);
condition = "";
setState(curState.state);
};
return;
};
if (condition != ""){
return;
};
_local3 = curState.state;
condition = "";
setState(_arg1);
curState.state = _local3;
condition = "react";
timer = _arg2;
stage.addEventListener("enterFrame", timeout_fn);
}
public function setSize(_arg1:int){
var _local2:Number;
var _local3:ColorTransform;
var _local4:GlowFilter;
_arg1 = ((_arg1)<1) ? 1 : ((_arg1)>maxSize) ? maxSize : _arg1;
_local2 = (Number(_arg1) / maxSize);
whitefang.belly.gotoAndStop(_arg1);
whitefang.bellyCover.gotoAndStop(_arg1);
whitefang.breast1.gotoAndStop(_arg1);
whitefang.breast2.gotoAndStop(_arg1);
_local3 = new ColorTransform();
_local3.blueMultiplier = (1 - _local2);
_local3.greenMultiplier = (1 - ((_local2 * (0xFF - 204)) / 0xFF));
_local3.alphaMultiplier = (1 - (_local2 * 0.1));
_local4 = new GlowFilter(0xFFCC00, _local2, Math.floor((_local2 * 32)), Math.floor((_local2 * 32)));
whitefang.belly.transform.colorTransform = _local3;
whitefang.belly.filters = [_local4];
resizeLavaLamp();
}
public function movingBreasts(_arg1:Event){
var _local2:Object;
var _local3:Object;
var _local4:Object;
var _local5:Number;
var _local6:Number;
var _local7:Matrix;
var _local8:Matrix;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Rectangle;
var _local13:Rectangle;
var _local14:Number;
var _local15:Number;
var _local16:Number;
var _local17:Number;
_local2 = breastPhases[(breastPhase % NUM_BREAST_PHASES)];
_local3 = breastPhases[(((breastPhase + NUM_BREAST_PHASES) - 1) % NUM_BREAST_PHASES)];
_local4 = breastPhases[(Math.min((breastPhase + 1), 3) % NUM_BREAST_PHASES)];
_local5 = (breastTimer / _local2.time);
_local6 = (_local5 * 0.25);
_local7 = whitefang.breast1.transform.matrix;
_local8 = whitefang.breast2.transform.matrix;
_local9 = (_local3.scaleX + ((_local2.scaleX - _local3.scaleX) * _local5));
_local10 = (_local3.scaleY + ((_local2.scaleY - _local3.scaleY) * _local5));
_local11 = (_local3.skew + ((_local2.skew - _local3.skew) * _local5));
if (breastPhase == 3){
_local9 = (whitefang.breast1.scaleX + ((_local2.scaleX - whitefang.breast1.scaleX) * 0.2));
_local10 = (whitefang.breast1.scaleY + ((_local2.scaleY - whitefang.breast1.scaleY) * 0.2));
_local11 = (_local8.b + ((_local2.skew - _local8.b) * 0.2));
} else {
_local9 = (_local9 + ((_local4.scaleX - _local9) * _local6));
_local10 = (_local10 + ((_local4.scaleY - _local10) * _local6));
_local11 = (_local11 + ((_local4.skew - _local11) * _local6));
};
whitefang.breast1.scaleX = (whitefang.breast2.scaleX = _local9);
whitefang.breast1.scaleY = (whitefang.breast2.scaleY = _local10);
_local7 = whitefang.breast1.transform.matrix;
_local8 = whitefang.breast2.transform.matrix;
_local7.b = -(_local11);
_local8.b = _local11;
whitefang.breast1.transform.matrix = _local7;
whitefang.breast2.transform.matrix = _local8;
_local12 = whitefang.breast1.getBounds(whitefang);
_local13 = whitefang.breast2.getBounds(whitefang);
_local14 = ((_local12.x + _local12.width) - (b1Bounds.x + b1Bounds.width));
_local15 = (_local12.y - b1Bounds.y);
_local16 = (_local13.x - b2Bounds.x);
_local17 = (_local13.y - b2Bounds.y);
whitefang.breast1.x = (whitefang.breast1.x - _local14);
whitefang.breast1.y = (whitefang.breast1.y - _local15);
whitefang.breast2.x = (whitefang.breast2.x - _local16);
whitefang.breast2.y = (whitefang.breast2.y - _local17);
if (breastTimer >= _local2.time){
breastPhase++;
breastTimer = 2;
if (breastPhase == 4){
blushMode = BLUSH_OFF;
breastPhase = 0;
breastTimer = 0;
stage.removeEventListener("enterFrame", movingBreasts);
};
return;
};
breastTimer++;
}
public function zoomingOut(_arg1:Event){
whitefang.scaleX = (whitefang.scaleX - 0.01);
whitefang.scaleY = whitefang.scaleX;
if ((((whitefang.width <= STAGE_WIDTH)) || ((whitefang.height <= STAGE_HEIGHT)))){
whitefang.scaleX = (whitefang.scaleX + 0.01);
whitefang.scaleY = whitefang.scaleX;
};
adjustPosition();
}
public function resizeLavaLamp(_arg1:Boolean=true){
var _local2:int;
var _local3:Rectangle;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:int;
var _local8:Number;
var _local9:Blob;
var _local10:Number;
_local2 = 0;
while (_local2 <= 11) {
lamp.boundaries[_local2].x = whitefang.belly[("circle" + _local2)].x;
lamp.boundaries[_local2].y = whitefang.belly[("circle" + _local2)].y;
_local2++;
};
lamp_mask.graphics.clear();
lamp_mask.graphics.beginFill(0);
Geometry.drawClosedCurve(lamp.boundaries, lamp_mask.graphics);
lamp_mask.graphics.endFill();
_local3 = lamp.getBounds();
_local4 = ((_local3.width * _local3.height) * LAMP_AREA_PROP);
_local5 = (_local4 * LAVA_AREA_PROP);
_local6 = ((_local3.width * 0.5) / NUM_SOURCES);
_local7 = 0;
while (_local7 < NUM_SOURCES) {
heatSources[_local7].radius = _local6;
heatSources[_local7].x = (_local6 + ((2 * _local7) * _local6));
heatSources[_local7].y = (_local3.y + _local3.height);
coldSources[_local7].radius = _local6;
coldSources[_local7].x = (_local6 + ((2 * _local7) * _local6));
coldSources[_local7].y = _local3.y;
_local7++;
};
if (_arg1){
_local8 = (_local5 - totalLavaArea);
if ((((totalLavaArea < (_local5 - NEW_BLOB_SIZE))) || ((MAX_LAMP_AREA == _local4)))){
_local9 = new Blob(1);
_local9.area = _local8;
_local9.y = _local3.y;
_local9.x = (_local3.x + (_local3.width * 0.5));
_local9.temperature = heatSources[0].temperature;
lamp.addBlob(_local9);
totalLavaArea = _local5;
} else {
if (totalLavaArea > (_local5 + NEW_BLOB_SIZE)){
_local8 = -(_local8);
_local10 = 0;
while ((((_local8 > 0)) && ((lamp.blobs.length > 0)))) {
_local10 = Math.min(lamp.blobs[0].area, NEW_BLOB_SIZE);
lamp.blobs[0].area = (lamp.blobs[0].area - _local10);
_local8 = (_local8 - _local10);
if (!lamp.blobs[0].area){
lamp.removeBlob(lamp.blobs[0]);
};
};
totalLavaArea = _local5;
};
};
};
topLava._height = (-(_local3.height) / 6);
topLava._width = _local3.width;
topLava._x = _local3.x;
topLava._y = (_local3.y - topLava._height);
topLava.clearWaves();
topLava.addWave((_local3.width * 4), (_local3.height / 20), (Math.PI * 0.25), 0.073);
topLava.addWave((_local3.width * 0.75), (_local3.height / 20), (Math.PI * 0.72), 0.062);
topLava.addWave((_local3.width * 0.25), (_local3.height / 30), (Math.PI * 0.12), 0.016);
bottomLava._height = (_local3.height / 6);
bottomLava._width = _local3.width;
bottomLava._x = _local3.x;
bottomLava._y = ((_local3.y + _local3.height) - bottomLava._height);
bottomLava.clearWaves();
bottomLava.addWave((_local3.width * 3), (_local3.height / 20), (Math.PI * 0.18), 0.07);
bottomLava.addWave((_local3.width * 0.75), (_local3.height / 20), (Math.PI * 0.42), 0.059);
bottomLava.addWave((_local3.width * 0.25), (_local3.height / 30), (Math.PI * 0.66), 0.022);
if (_arg1){
lamp._scale = Math.sqrt((_local4 / MAX_LAMP_AREA));
};
}
public function clearStolen(_arg1:Event){
stolen_txt.removeEventListener("mouseDown", clearStolen);
stolen_txt.parent.removeChild(stolen_txt);
}
public function adjustPosition(){
var _local1:Rectangle;
_local1 = whitefang.getBounds(stage);
if (_local1.x > 0){
whitefang.x = (whitefang.x - _local1.x);
};
if ((_local1.x + _local1.width) < STAGE_WIDTH){
whitefang.x = (whitefang.x + ((STAGE_WIDTH - _local1.x) - _local1.width));
};
if (_local1.y > 0){
whitefang.y = (whitefang.y - _local1.y);
};
if ((_local1.y + _local1.height) < STAGE_HEIGHT){
whitefang.y = (whitefang.y + ((STAGE_HEIGHT - _local1.y) - _local1.height));
};
}
public function panelMove(_arg1:Event){
if (_panel.hitTestPoint(stage.mouseX, stage.mouseY, true)){
_panel.y = (_panel.y + ((500 - _panel.y) * 0.5));
} else {
_panel.y = (_panel.y + ((600 - _panel.y) * 0.5));
};
}
}
}//package lavaLampBelly_fla
Section 14
//mouth_18 (lavaLampBelly_fla.mouth_18)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class mouth_18 extends MovieClip {
public function mouth_18(){
addFrameScript(1, frame2, 3, frame4, 5, frame6, 7, frame8, 9, frame10, 11, frame12, 13, frame14, 15, frame16);
}
function frame10(){
this.stop();
}
function frame14(){
this.stop();
}
function frame12(){
this.stop();
}
function frame6(){
this.stop();
}
function frame16(){
this.stop();
}
function frame8(){
this.stop();
}
function frame4(){
this.stop();
}
function frame2(){
this.stop();
}
}
}//package lavaLampBelly_fla
Section 15
//panel_27 (lavaLampBelly_fla.panel_27)
package lavaLampBelly_fla {
import flash.display.*;
import flash.text.*;
public dynamic class panel_27 extends MovieClip {
public var _cam:MovieClip;
public var _revert:MovieClip;
public var _cont:MovieClip;
public var _minus:MovieClip;
public var _cont_txt:TextField;
public var _zero:MovieClip;
public var _plus:MovieClip;
public var _info:TextField;
public var _expand:MovieClip;
public var _cam_txt:TextField;
}
}//package lavaLampBelly_fla
Section 16
//tail_4 (lavaLampBelly_fla.tail_4)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class tail_4 extends MovieClip {
public function tail_4(){
addFrameScript(0, frame1);
}
function frame1(){
this.stop();
}
}
}//package lavaLampBelly_fla
Section 17
//whitefang_1 (lavaLampBelly_fla.whitefang_1)
package lavaLampBelly_fla {
import flash.display.*;
public dynamic class whitefang_1 extends MovieClip {
public var _light7:MovieClip;
public var _light1:MovieClip;
public var _light4:MovieClip;
public var _light5:MovieClip;
public var _light6:MovieClip;
public var _light3:MovieClip;
public var _light8:MovieClip;
public var front:MovieClip;
public var eye2:MovieClip;
public var _light9:MovieClip;
public var tail:MovieClip;
public var leg2:MovieClip;
public var arm2:MovieClip;
public var eye1:MovieClip;
public var arm1:MovieClip;
public var _light10:MovieClip;
public var _light11:MovieClip;
public var _light2:MovieClip;
public var breast1:MovieClip;
public var bellyCover:MovieClip;
public var hair3:MovieClip;
public var hair2:MovieClip;
public var breast2:MovieClip;
public var body:MovieClip;
public var ear1:MovieClip;
public var leg1:MovieClip;
public var blush:MovieClip;
public var ear2:MovieClip;
public var mouth:MovieClip;
public var nose:MovieClip;
public var hair1:MovieClip;
public var belly:MovieClip;
public var head:MovieClip;
public var _light0:MovieClip;
}
}//package lavaLampBelly_fla