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

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

armorgames fantastic-contraptio-4920.swf

This is the info page for
Flash #263486

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


Text
Game by Colin Northway
Music by James Mark
Art by Sarah Collins

Play!

Play!

Main Menu

Back

Want More?

To get more levels and features visit:
Where you can:

*Play More FREE levels
*Save/load your contraption designs
*View other players' designs
*Create and share your own levels
*Find tips and tricks from experts

FantasticContraption.com

New User

Save

Sign In

Cancel

Update

One last note:
Triangles,
Triangles,
Triangles

STOP

START

G

TEST

EDIT

<p align="center"><font face="Arial" size="12" color="#9d9d9d" letterSpacing="0.000000" kerning="1"><b>Un-Powered wheels: will roll if pushed, but not on their own</b></font></p>

BUY NOW

TM

Next Level

To Menu

Submit

This will make it go

Use this to play the game

Continue

Levels

Designs

Account

Support This Game

Skip Tutorial

Learn how to play

Play on
iPhone

TM

TM

Add Fantastic
Contraption to your
Webpage!

Add Fantastic
Contraption to your
Webpage!

Play More Games at

Continue

Play!

Now draw water from the middle of

one wheel to the middle of the other wheel

This rod definitely has to go

Delete it

I don't think this is going to work

Hit stop when you've seen enough

Select the water tool

OK, let's see if we can fix this

Select the delete tool

I'm sure it's going to work this time

Start the Contraption!

Maybe that fixed it

Hit start to give it a try

Select the water tool again

This water doesn't look right

Click on it to delete it

This looks like a promising design

Hit start to test it out

Select the delete tool again

If it doesn't work hit stop

I'm sure we can get this working

This is definitely going to work

Draw water between the middle

of these two wheels

You don't have to get it right the first time

Let's teach you how to refine a design

OK

Good Job

Now select the watery rods tool

We can use that to connect the two wheels

Welcome to Fantastic Contraption

Let's teach you how to play

This pink square is the goal
You win by getting the pink ball into it

Draw water from the middle of one wheel
to the middle of the other wheel

This blue square is your workshop

You will build Contraptions here

This pink wheel is important

You win by getting it to the goal

Excellent

Now start your contraption

You cannot change your contraption while it is running

Ok lets get started

First select the wheel tool

Now click your mouse
here to draw the wheel

Use the move tool to drag joints
or whole contraptions around

Water rods can flow right
past wheels and other rods

That's the end of the tutorial!
This level will be easy as pie,
but it gets harder as you go.
Have fun!

You can Save, too!  We'll give you a link
so you can share your crazy contraptions
with others.  Load and play your saved
designs from the My Designs page.

Wood rods will bump into wheels
and rods they aren't attached to

If a level is too hard, don't dispair!
Hit this back button and go try
a different one.

This wheel won't spin
unless you push it.

Zoom in or out

Use the delete tool to get
rid of parts you don't want

Okay, to recap:

These wheels will spin when you
attach a rod to their middle joint

Start to see your contraption run,
then Stop so you can edit again

Sign Out

ActionScript [AS3]

Section 1
//MultiCloud_103 (ArtAssets_fla.MultiCloud_103) package ArtAssets_fla { import flash.events.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class MultiCloud_103 extends MovieClip { public var randomStartingFrame:int; public function MultiCloud_103(){ addFrameScript(0, frame1); } function frame1(){ randomStartingFrame = (Math.round((Math.random() * (4 - 1))) + 1); gotoAndStop(randomStartingFrame); } } }//package ArtAssets_fla
Section 2
//b2BoxDef (Box2D.Collision.Shapes.b2BoxDef) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; public class b2BoxDef extends b2ShapeDef { public var extents:b2Vec2; public function b2BoxDef(){ type = b2Shape.e_boxShape; extents = new b2Vec2(1, 1); } } }//package Box2D.Collision.Shapes
Section 3
//b2CircleDef (Box2D.Collision.Shapes.b2CircleDef) package Box2D.Collision.Shapes { public class b2CircleDef extends b2ShapeDef { public var radius:Number; public function b2CircleDef(){ type = b2Shape.e_circleShape; radius = 1; } } }//package Box2D.Collision.Shapes
Section 4
//b2CircleShape (Box2D.Collision.Shapes.b2CircleShape) package Box2D.Collision.Shapes { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; public class b2CircleShape extends b2Shape { public var m_localPosition:b2Vec2; public var m_radius:Number; public function b2CircleShape(_arg1:b2ShapeDef, _arg2:b2Body, _arg3:b2Vec2){ var _local5:Number; var _local6:Number; m_localPosition = new b2Vec2(); super(_arg1, _arg2); var _local4:b2CircleDef = (_arg1 as b2CircleDef); m_localPosition.Set((_arg1.localPosition.x - _arg3.x), (_arg1.localPosition.y - _arg3.y)); m_type = b2Shape.e_circleShape; m_radius = _local4.radius; m_R.SetM(m_body.m_R); _local5 = ((m_R.col1.x * m_localPosition.x) + (m_R.col2.x * m_localPosition.y)); _local6 = ((m_R.col1.y * m_localPosition.x) + (m_R.col2.y * m_localPosition.y)); m_position.x = (m_body.m_position.x + _local5); m_position.y = (m_body.m_position.y + _local6); m_maxRadius = (Math.sqrt(((_local5 * _local5) + (_local6 * _local6))) + m_radius); var _local7:b2AABB = new b2AABB(); _local7.minVertex.Set((m_position.x - m_radius), (m_position.y - m_radius)); _local7.maxVertex.Set((m_position.x + m_radius), (m_position.y + m_radius)); var _local8:b2BroadPhase = m_body.m_world.m_broadPhase; if (_local8.InRange(_local7)){ m_proxyId = _local8.CreateProxy(_local7, this); } else { m_proxyId = b2Pair.b2_nullProxy; }; if (m_proxyId == b2Pair.b2_nullProxy){ m_body.Freeze(); }; } override public function Synchronize(_arg1:b2Vec2, _arg2:b2Mat22, _arg3:b2Vec2, _arg4:b2Mat22):void{ m_R.SetM(_arg4); m_position.x = (((_arg4.col1.x * m_localPosition.x) + (_arg4.col2.x * m_localPosition.y)) + _arg3.x); m_position.y = (((_arg4.col1.y * m_localPosition.x) + (_arg4.col2.y * m_localPosition.y)) + _arg3.y); if (m_proxyId == b2Pair.b2_nullProxy){ return; }; var _local5:Number = (_arg1.x + ((_arg2.col1.x * m_localPosition.x) + (_arg2.col2.x * m_localPosition.y))); var _local6:Number = (_arg1.y + ((_arg2.col1.y * m_localPosition.x) + (_arg2.col2.y * m_localPosition.y))); var _local7:Number = Math.min(_local5, m_position.x); var _local8:Number = Math.min(_local6, m_position.y); var _local9:Number = Math.max(_local5, m_position.x); var _local10:Number = Math.max(_local6, m_position.y); var _local11:b2AABB = new b2AABB(); _local11.minVertex.Set((_local7 - m_radius), (_local8 - m_radius)); _local11.maxVertex.Set((_local9 + m_radius), (_local10 + m_radius)); var _local12:b2BroadPhase = m_body.m_world.m_broadPhase; if (_local12.InRange(_local11)){ _local12.MoveProxy(m_proxyId, _local11); } else { m_body.Freeze(); }; } override public function Support(_arg1:Number, _arg2:Number, _arg3:b2Vec2):void{ var _local4:Number = Math.sqrt(((_arg1 * _arg1) + (_arg2 * _arg2))); _arg1 = (_arg1 / _local4); _arg2 = (_arg2 / _local4); _arg3.Set((m_position.x + (m_radius * _arg1)), (m_position.y + (m_radius * _arg2))); } override public function QuickSync(_arg1:b2Vec2, _arg2:b2Mat22):void{ m_R.SetM(_arg2); m_position.x = (((_arg2.col1.x * m_localPosition.x) + (_arg2.col2.x * m_localPosition.y)) + _arg1.x); m_position.y = (((_arg2.col1.y * m_localPosition.x) + (_arg2.col2.y * m_localPosition.y)) + _arg1.y); } override public function TestPoint(_arg1:b2Vec2):Boolean{ var _local2:b2Vec2 = new b2Vec2(); _local2.SetV(_arg1); _local2.Subtract(m_position); return ((b2Math.b2Dot(_local2, _local2) <= (m_radius * m_radius))); } override public function ResetProxy(_arg1:b2BroadPhase):void{ if (m_proxyId == b2Pair.b2_nullProxy){ return; }; var _local2:b2Proxy = _arg1.GetProxy(m_proxyId); _arg1.DestroyProxy(m_proxyId); _local2 = null; var _local3:b2AABB = new b2AABB(); _local3.minVertex.Set((m_position.x - m_radius), (m_position.y - m_radius)); _local3.maxVertex.Set((m_position.x + m_radius), (m_position.y + m_radius)); if (_arg1.InRange(_local3)){ m_proxyId = _arg1.CreateProxy(_local3, this); } else { m_proxyId = b2Pair.b2_nullProxy; }; if (m_proxyId == b2Pair.b2_nullProxy){ m_body.Freeze(); }; } } }//package Box2D.Collision.Shapes
Section 5
//b2MassData (Box2D.Collision.Shapes.b2MassData) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; public class b2MassData { public var mass:Number;// = 0 public var center:b2Vec2; public var I:Number;// = 0 public function b2MassData(){ center = new b2Vec2(0, 0); super(); } } }//package Box2D.Collision.Shapes
Section 6
//b2PolyDef (Box2D.Collision.Shapes.b2PolyDef) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PolyDef extends b2ShapeDef { public var vertices:Array; public var vertexCount:int; public function b2PolyDef(){ vertices = new Array(b2Settings.b2_maxPolyVertices); super(); type = b2Shape.e_polyShape; vertexCount = 0; var _local1:int; while (_local1 < b2Settings.b2_maxPolyVertices) { vertices[_local1] = new b2Vec2(); _local1++; }; } } }//package Box2D.Collision.Shapes
Section 7
//b2PolyShape (Box2D.Collision.Shapes.b2PolyShape) package Box2D.Collision.Shapes { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PolyShape extends b2Shape { public var m_vertexCount:int; private var syncMat:b2Mat22; public var m_vertices:Array; public var m_coreVertices:Array; public var m_localCentroid:b2Vec2; public var m_normals:Array; private var syncAABB:b2AABB; public var m_localOBB:b2OBB; private static var tempVec:b2Vec2 = new b2Vec2(); private static var tAbsR:b2Mat22 = new b2Mat22(); public function b2PolyShape(_arg1:b2ShapeDef, _arg2:b2Body, _arg3:b2Vec2){ var _local4:int; var _local5:Number; var _local6:Number; var _local7:b2Vec2; var _local8:b2AABB; var _local9:b2Mat22; var _local14:int; var _local15:int; var _local19:b2BoxDef; var _local20:Number; var _local21:Number; var _local22:b2PolyDef; var _local23:Number; var _local24:Number; var _local25:Number; var _local26:Number; var _local27:Number; var _local28:b2Vec2; syncAABB = new b2AABB(); syncMat = new b2Mat22(); m_localCentroid = new b2Vec2(); m_localOBB = new b2OBB(); super(_arg1, _arg2); _local8 = new b2AABB(); m_vertices = new Array(b2Settings.b2_maxPolyVertices); m_coreVertices = new Array(b2Settings.b2_maxPolyVertices); m_normals = new Array(b2Settings.b2_maxPolyVertices); m_type = b2Shape.e_polyShape; _local9 = new b2Mat22(_arg1.localRotation); if (_arg1.type == b2Shape.e_boxShape){ m_localCentroid.x = (_arg1.localPosition.x - _arg3.x); m_localCentroid.y = (_arg1.localPosition.y - _arg3.y); _local19 = (_arg1 as b2BoxDef); m_vertexCount = 4; _local5 = _local19.extents.x; _local6 = _local19.extents.y; _local20 = Math.max(0, (_local5 - (2 * b2Settings.b2_linearSlop))); _local21 = Math.max(0, (_local6 - (2 * b2Settings.b2_linearSlop))); _local7 = (m_vertices[0] = new b2Vec2()); _local7.x = ((_local9.col1.x * _local5) + (_local9.col2.x * _local6)); _local7.y = ((_local9.col1.y * _local5) + (_local9.col2.y * _local6)); _local7 = (m_vertices[1] = new b2Vec2()); _local7.x = ((_local9.col1.x * -(_local5)) + (_local9.col2.x * _local6)); _local7.y = ((_local9.col1.y * -(_local5)) + (_local9.col2.y * _local6)); _local7 = (m_vertices[2] = new b2Vec2()); _local7.x = ((_local9.col1.x * -(_local5)) + (_local9.col2.x * -(_local6))); _local7.y = ((_local9.col1.y * -(_local5)) + (_local9.col2.y * -(_local6))); _local7 = (m_vertices[3] = new b2Vec2()); _local7.x = ((_local9.col1.x * _local5) + (_local9.col2.x * -(_local6))); _local7.y = ((_local9.col1.y * _local5) + (_local9.col2.y * -(_local6))); _local7 = (m_coreVertices[0] = new b2Vec2()); _local7.x = ((_local9.col1.x * _local20) + (_local9.col2.x * _local21)); _local7.y = ((_local9.col1.y * _local20) + (_local9.col2.y * _local21)); _local7 = (m_coreVertices[1] = new b2Vec2()); _local7.x = ((_local9.col1.x * -(_local20)) + (_local9.col2.x * _local21)); _local7.y = ((_local9.col1.y * -(_local20)) + (_local9.col2.y * _local21)); _local7 = (m_coreVertices[2] = new b2Vec2()); _local7.x = ((_local9.col1.x * -(_local20)) + (_local9.col2.x * -(_local21))); _local7.y = ((_local9.col1.y * -(_local20)) + (_local9.col2.y * -(_local21))); _local7 = (m_coreVertices[3] = new b2Vec2()); _local7.x = ((_local9.col1.x * _local20) + (_local9.col2.x * -(_local21))); _local7.y = ((_local9.col1.y * _local20) + (_local9.col2.y * -(_local21))); } else { _local22 = (_arg1 as b2PolyDef); m_vertexCount = _local22.vertexCount; PolyCentroid(_local22.vertices, _local22.vertexCount, tempVec); _local23 = tempVec.x; _local24 = tempVec.y; m_localCentroid.x = ((_arg1.localPosition.x + ((_local9.col1.x * _local23) + (_local9.col2.x * _local24))) - _arg3.x); m_localCentroid.y = ((_arg1.localPosition.y + ((_local9.col1.y * _local23) + (_local9.col2.y * _local24))) - _arg3.y); _local4 = 0; while (_local4 < m_vertexCount) { m_vertices[_local4] = new b2Vec2(); m_coreVertices[_local4] = new b2Vec2(); _local5 = (_local22.vertices[_local4].x - _local23); _local6 = (_local22.vertices[_local4].y - _local24); m_vertices[_local4].x = ((_local9.col1.x * _local5) + (_local9.col2.x * _local6)); m_vertices[_local4].y = ((_local9.col1.y * _local5) + (_local9.col2.y * _local6)); _local25 = m_vertices[_local4].x; _local26 = m_vertices[_local4].y; _local27 = Math.sqrt(((_local25 * _local25) + (_local26 * _local26))); if (_local27 > Number.MIN_VALUE){ _local25 = (_local25 * (1 / _local27)); _local26 = (_local26 * (1 / _local27)); }; m_coreVertices[_local4].x = (m_vertices[_local4].x - ((2 * b2Settings.b2_linearSlop) * _local25)); m_coreVertices[_local4].y = (m_vertices[_local4].y - ((2 * b2Settings.b2_linearSlop) * _local26)); _local4++; }; }; var _local10:Number = Number.MAX_VALUE; var _local11:Number = Number.MAX_VALUE; var _local12:Number = -(Number.MAX_VALUE); var _local13:Number = -(Number.MAX_VALUE); m_maxRadius = 0; _local4 = 0; while (_local4 < m_vertexCount) { _local28 = m_vertices[_local4]; _local10 = Math.min(_local10, _local28.x); _local11 = Math.min(_local11, _local28.y); _local12 = Math.max(_local12, _local28.x); _local13 = Math.max(_local13, _local28.y); m_maxRadius = Math.max(m_maxRadius, _local28.Length()); _local4++; }; m_localOBB.R.SetIdentity(); m_localOBB.center.Set(((_local10 + _local12) * 0.5), ((_local11 + _local13) * 0.5)); m_localOBB.extents.Set(((_local12 - _local10) * 0.5), ((_local13 - _local11) * 0.5)); _local4 = 0; while (_local4 < m_vertexCount) { m_normals[_local4] = new b2Vec2(); _local14 = _local4; _local15 = (((_local4 + 1) < m_vertexCount)) ? (_local4 + 1) : 0; m_normals[_local4].x = (m_vertices[_local15].y - m_vertices[_local14].y); m_normals[_local4].y = -((m_vertices[_local15].x - m_vertices[_local14].x)); m_normals[_local4].Normalize(); _local4++; }; _local4 = 0; while (_local4 < m_vertexCount) { _local14 = _local4; _local15 = (((_local4 + 1) < m_vertexCount)) ? (_local4 + 1) : 0; _local4++; }; m_R.SetM(m_body.m_R); m_position.x = (m_body.m_position.x + ((m_R.col1.x * m_localCentroid.x) + (m_R.col2.x * m_localCentroid.y))); m_position.y = (m_body.m_position.y + ((m_R.col1.y * m_localCentroid.x) + (m_R.col2.y * m_localCentroid.y))); tAbsR.col1.x = ((m_R.col1.x * m_localOBB.R.col1.x) + (m_R.col2.x * m_localOBB.R.col1.y)); tAbsR.col1.y = ((m_R.col1.y * m_localOBB.R.col1.x) + (m_R.col2.y * m_localOBB.R.col1.y)); tAbsR.col2.x = ((m_R.col1.x * m_localOBB.R.col2.x) + (m_R.col2.x * m_localOBB.R.col2.y)); tAbsR.col2.y = ((m_R.col1.y * m_localOBB.R.col2.x) + (m_R.col2.y * m_localOBB.R.col2.y)); tAbsR.Abs(); _local5 = ((tAbsR.col1.x * m_localOBB.extents.x) + (tAbsR.col2.x * m_localOBB.extents.y)); _local6 = ((tAbsR.col1.y * m_localOBB.extents.x) + (tAbsR.col2.y * m_localOBB.extents.y)); var _local16:Number = (m_position.x + ((m_R.col1.x * m_localOBB.center.x) + (m_R.col2.x * m_localOBB.center.y))); var _local17:Number = (m_position.y + ((m_R.col1.y * m_localOBB.center.x) + (m_R.col2.y * m_localOBB.center.y))); _local8.minVertex.x = (_local16 - _local5); _local8.minVertex.y = (_local17 - _local6); _local8.maxVertex.x = (_local16 + _local5); _local8.maxVertex.y = (_local17 + _local6); var _local18:b2BroadPhase = m_body.m_world.m_broadPhase; if (_local18.InRange(_local8)){ m_proxyId = _local18.CreateProxy(_local8, this); } else { m_proxyId = b2Pair.b2_nullProxy; }; if (m_proxyId == b2Pair.b2_nullProxy){ m_body.Freeze(); }; } override public function QuickSync(_arg1:b2Vec2, _arg2:b2Mat22):void{ m_R.SetM(_arg2); m_position.x = (_arg1.x + ((_arg2.col1.x * m_localCentroid.x) + (_arg2.col2.x * m_localCentroid.y))); m_position.y = (_arg1.y + ((_arg2.col1.y * m_localCentroid.x) + (_arg2.col2.y * m_localCentroid.y))); } override public function Support(_arg1:Number, _arg2:Number, _arg3:b2Vec2):void{ var _local9:Number; var _local4:Number = ((_arg1 * m_R.col1.x) + (_arg2 * m_R.col1.y)); var _local5:Number = ((_arg1 * m_R.col2.x) + (_arg2 * m_R.col2.y)); var _local6:int; var _local7:Number = ((m_coreVertices[0].x * _local4) + (m_coreVertices[0].y * _local5)); var _local8 = 1; while (_local8 < m_vertexCount) { _local9 = ((m_coreVertices[_local8].x * _local4) + (m_coreVertices[_local8].y * _local5)); if (_local9 > _local7){ _local6 = _local8; _local7 = _local9; }; _local8++; }; _arg3.Set((m_position.x + ((m_R.col1.x * m_coreVertices[_local6].x) + (m_R.col2.x * m_coreVertices[_local6].y))), (m_position.y + ((m_R.col1.y * m_coreVertices[_local6].x) + (m_R.col2.y * m_coreVertices[_local6].y)))); } override public function Synchronize(_arg1:b2Vec2, _arg2:b2Mat22, _arg3:b2Vec2, _arg4:b2Mat22):void{ var _local5:Number; var _local6:Number; m_R.SetM(_arg4); m_position.x = (m_body.m_position.x + ((_arg4.col1.x * m_localCentroid.x) + (_arg4.col2.x * m_localCentroid.y))); m_position.y = (m_body.m_position.y + ((_arg4.col1.y * m_localCentroid.x) + (_arg4.col2.y * m_localCentroid.y))); if (m_proxyId == b2Pair.b2_nullProxy){ return; }; var _local7:b2Vec2 = _arg2.col1; var _local8:b2Vec2 = _arg2.col2; var _local9:b2Vec2 = m_localOBB.R.col1; var _local10:b2Vec2 = m_localOBB.R.col2; syncMat.col1.x = ((_local7.x * _local9.x) + (_local8.x * _local9.y)); syncMat.col1.y = ((_local7.y * _local9.x) + (_local8.y * _local9.y)); syncMat.col2.x = ((_local7.x * _local10.x) + (_local8.x * _local10.y)); syncMat.col2.y = ((_local7.y * _local10.x) + (_local8.y * _local10.y)); syncMat.Abs(); _local5 = (m_localCentroid.x + m_localOBB.center.x); _local6 = (m_localCentroid.y + m_localOBB.center.y); var _local11:Number = (_arg1.x + ((_arg2.col1.x * _local5) + (_arg2.col2.x * _local6))); var _local12:Number = (_arg1.y + ((_arg2.col1.y * _local5) + (_arg2.col2.y * _local6))); _local5 = ((syncMat.col1.x * m_localOBB.extents.x) + (syncMat.col2.x * m_localOBB.extents.y)); _local6 = ((syncMat.col1.y * m_localOBB.extents.x) + (syncMat.col2.y * m_localOBB.extents.y)); syncAABB.minVertex.x = (_local11 - _local5); syncAABB.minVertex.y = (_local12 - _local6); syncAABB.maxVertex.x = (_local11 + _local5); syncAABB.maxVertex.y = (_local12 + _local6); _local7 = _arg4.col1; _local8 = _arg4.col2; _local9 = m_localOBB.R.col1; _local10 = m_localOBB.R.col2; syncMat.col1.x = ((_local7.x * _local9.x) + (_local8.x * _local9.y)); syncMat.col1.y = ((_local7.y * _local9.x) + (_local8.y * _local9.y)); syncMat.col2.x = ((_local7.x * _local10.x) + (_local8.x * _local10.y)); syncMat.col2.y = ((_local7.y * _local10.x) + (_local8.y * _local10.y)); syncMat.Abs(); _local5 = (m_localCentroid.x + m_localOBB.center.x); _local6 = (m_localCentroid.y + m_localOBB.center.y); _local11 = (_arg3.x + ((_arg4.col1.x * _local5) + (_arg4.col2.x * _local6))); _local12 = (_arg3.y + ((_arg4.col1.y * _local5) + (_arg4.col2.y * _local6))); _local5 = ((syncMat.col1.x * m_localOBB.extents.x) + (syncMat.col2.x * m_localOBB.extents.y)); _local6 = ((syncMat.col1.y * m_localOBB.extents.x) + (syncMat.col2.y * m_localOBB.extents.y)); syncAABB.minVertex.x = Math.min(syncAABB.minVertex.x, (_local11 - _local5)); syncAABB.minVertex.y = Math.min(syncAABB.minVertex.y, (_local12 - _local6)); syncAABB.maxVertex.x = Math.max(syncAABB.maxVertex.x, (_local11 + _local5)); syncAABB.maxVertex.y = Math.max(syncAABB.maxVertex.y, (_local12 + _local6)); var _local13:b2BroadPhase = m_body.m_world.m_broadPhase; if (_local13.InRange(syncAABB)){ _local13.MoveProxy(m_proxyId, syncAABB); } else { m_body.Freeze(); }; } override public function TestPoint(_arg1:b2Vec2):Boolean{ var _local4:b2Vec2; var _local5:Number; var _local2:b2Vec2 = new b2Vec2(); _local2.SetV(_arg1); _local2.Subtract(m_position); _local2.MulTM(m_R); var _local3:int; while (_local3 < m_vertexCount) { _local4 = new b2Vec2(); _local4.SetV(_local2); _local4.Subtract(m_vertices[_local3]); _local5 = b2Math.b2Dot(m_normals[_local3], _local4); if (_local5 > 0){ return (false); }; _local3++; }; return (true); } override public function ResetProxy(_arg1:b2BroadPhase):void{ if (m_proxyId == b2Pair.b2_nullProxy){ return; }; var _local2:b2Proxy = _arg1.GetProxy(m_proxyId); _arg1.DestroyProxy(m_proxyId); _local2 = null; var _local3:b2Mat22 = b2Math.b2MulMM(m_R, m_localOBB.R); var _local4:b2Mat22 = b2Math.b2AbsM(_local3); var _local5:b2Vec2 = b2Math.b2MulMV(_local4, m_localOBB.extents); var _local6:b2Vec2 = b2Math.b2MulMV(m_R, m_localOBB.center); _local6.Add(m_position); var _local7:b2AABB = new b2AABB(); _local7.minVertex.SetV(_local6); _local7.minVertex.Subtract(_local5); _local7.maxVertex.SetV(_local6); _local7.maxVertex.Add(_local5); if (_arg1.InRange(_local7)){ m_proxyId = _arg1.CreateProxy(_local7, this); } else { m_proxyId = b2Pair.b2_nullProxy; }; if (m_proxyId == b2Pair.b2_nullProxy){ m_body.Freeze(); }; } } }//package Box2D.Collision.Shapes
Section 8
//b2Shape (Box2D.Collision.Shapes.b2Shape) package Box2D.Collision.Shapes { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2Shape { public var m_position:b2Vec2; public var m_maxRadius:Number; public var m_next:b2Shape; public var m_type:int; public var m_R:b2Mat22; public var m_friction:Number; public var m_proxyId:uint; public var m_maskBits:uint; public var m_groupIndex:int; public var m_userData;// = null public var m_body:b2Body; public var m_restitution:Number; public var m_categoryBits:uint; public static const e_boxShape:int = 1; public static const e_unknownShape:int = -1; public static const e_shapeTypeCount:int = 4; public static const e_circleShape:int = 0; public static const e_meshShape:int = 3; public static const e_polyShape:int = 2; public function b2Shape(_arg1:b2ShapeDef, _arg2:b2Body){ m_R = new b2Mat22(); m_position = new b2Vec2(); super(); m_userData = _arg1.userData; m_friction = _arg1.friction; m_restitution = _arg1.restitution; m_body = _arg2; m_proxyId = b2Pair.b2_nullProxy; m_maxRadius = 0; m_categoryBits = _arg1.categoryBits; m_maskBits = _arg1.maskBits; m_groupIndex = _arg1.groupIndex; } public function GetMaxRadius():Number{ return (m_maxRadius); } public function ResetProxy(_arg1:b2BroadPhase):void{ } public function QuickSync(_arg1:b2Vec2, _arg2:b2Mat22):void{ } public function GetNext():b2Shape{ return (m_next); } public function GetType():int{ return (m_type); } public function GetUserData(){ return (m_userData); } public function Support(_arg1:Number, _arg2:Number, _arg3:b2Vec2):void{ } public function Synchronize(_arg1:b2Vec2, _arg2:b2Mat22, _arg3:b2Vec2, _arg4:b2Mat22):void{ } public function GetRotationMatrix():b2Mat22{ return (m_R); } public function GetBody():b2Body{ return (m_body); } public function DestroyProxy():void{ if (m_proxyId != b2Pair.b2_nullProxy){ m_body.m_world.m_broadPhase.DestroyProxy(m_proxyId); m_proxyId = b2Pair.b2_nullProxy; }; } public function TestPoint(_arg1:b2Vec2):Boolean{ return (false); } public function GetPosition():b2Vec2{ return (m_position); } public static function Destroy(_arg1:b2Shape):void{ if (_arg1.m_proxyId != b2Pair.b2_nullProxy){ _arg1.m_body.m_world.m_broadPhase.DestroyProxy(_arg1.m_proxyId); }; } public static function PolyMass(_arg1:b2MassData, _arg2:Array, _arg3:int, _arg4:Number):void{ var _local11:b2Vec2; var _local12:b2Vec2; var _local13:b2Vec2; var _local14:b2Vec2; var _local15:b2Vec2; var _local16:Number; var _local17:Number; var _local18:b2Vec2; 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 _local5:b2Vec2 = new b2Vec2(); _local5.SetZero(); var _local6:Number = 0; var _local7:Number = 0; var _local8:b2Vec2 = new b2Vec2(0, 0); var _local9:Number = (1 / 3); var _local10:int; while (_local10 < _arg3) { _local11 = _local8; _local12 = _arg2[_local10]; _local13 = (((_local10 + 1) < _arg3)) ? _arg2[(_local10 + 1)] : _arg2[0]; _local14 = b2Math.SubtractVV(_local12, _local11); _local15 = b2Math.SubtractVV(_local13, _local11); _local16 = b2Math.b2CrossVV(_local14, _local15); _local17 = (0.5 * _local16); _local6 = (_local6 + _local17); _local18 = new b2Vec2(); _local18.SetV(_local11); _local18.Add(_local12); _local18.Add(_local13); _local18.Multiply((_local9 * _local17)); _local5.Add(_local18); _local19 = _local11.x; _local20 = _local11.y; _local21 = _local14.x; _local22 = _local14.y; _local23 = _local15.x; _local24 = _local15.y; _local25 = ((_local9 * ((0.25 * (((_local21 * _local21) + (_local23 * _local21)) + (_local23 * _local23))) + ((_local19 * _local21) + (_local19 * _local23)))) + ((0.5 * _local19) * _local19)); _local26 = ((_local9 * ((0.25 * (((_local22 * _local22) + (_local24 * _local22)) + (_local24 * _local24))) + ((_local20 * _local22) + (_local20 * _local24)))) + ((0.5 * _local20) * _local20)); _local7 = (_local7 + (_local16 * (_local25 + _local26))); _local10++; }; _arg1.mass = (_arg4 * _local6); _local5.Multiply((1 / _local6)); _arg1.center = _local5; _local7 = (_arg4 * (_local7 - (_local6 * b2Math.b2Dot(_local5, _local5)))); _arg1.I = _local7; } public static function PolyCentroid(_arg1:Array, _arg2:int, _arg3:b2Vec2):void{ 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 _local4:Number = 0; var _local5:Number = 0; var _local6:Number = 0; var _local7:Number = 0; var _local8:Number = 0; var _local9:Number = (1 / 3); var _local10:int; while (_local10 < _arg2) { _local11 = _local7; _local12 = _local8; _local13 = _arg1[_local10].x; _local14 = _arg1[_local10].y; _local15 = (((_local10 + 1) < _arg2)) ? _arg1[(_local10 + 1)].x : _arg1[0].x; _local16 = (((_local10 + 1) < _arg2)) ? _arg1[(_local10 + 1)].y : _arg1[0].y; _local17 = (_local13 - _local11); _local18 = (_local14 - _local12); _local19 = (_local15 - _local11); _local20 = (_local16 - _local12); _local21 = ((_local17 * _local20) - (_local18 * _local19)); _local22 = (0.5 * _local21); _local6 = (_local6 + _local22); _local4 = (_local4 + ((_local22 * _local9) * ((_local11 + _local13) + _local15))); _local5 = (_local5 + ((_local22 * _local9) * ((_local12 + _local14) + _local16))); _local10++; }; _local4 = (_local4 * (1 / _local6)); _local5 = (_local5 * (1 / _local6)); _arg3.Set(_local4, _local5); } public static function Create(_arg1:b2ShapeDef, _arg2:b2Body, _arg3:b2Vec2):b2Shape{ switch (_arg1.type){ case e_circleShape: return (new b2CircleShape(_arg1, _arg2, _arg3)); case e_boxShape: case e_polyShape: return (new b2PolyShape(_arg1, _arg2, _arg3)); }; return (null); } } }//package Box2D.Collision.Shapes
Section 9
//b2ShapeDef (Box2D.Collision.Shapes.b2ShapeDef) package Box2D.Collision.Shapes { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2ShapeDef { public var type:int; public var groupIndex:int; public var localPosition:b2Vec2; public var categoryBits:int; public var localRotation:Number; public var density:Number; public var restitution:Number; public var userData;// = null public var maskBits:int; public var friction:Number; public function b2ShapeDef(){ type = b2Shape.e_unknownShape; userData = null; localPosition = new b2Vec2(0, 0); localRotation = 0; friction = 0.2; restitution = 0; density = 0; categoryBits = 1; maskBits = 0xFFFF; groupIndex = 0; } public function ComputeMass(_arg1:b2MassData):void{ var _local2:b2CircleDef; var _local3:b2BoxDef; var _local4:b2PolyDef; _arg1.center = new b2Vec2(0, 0); if (density == 0){ _arg1.mass = 0; _arg1.center.Set(0, 0); _arg1.I = 0; }; switch (type){ case b2Shape.e_circleShape: _local2 = (this as b2CircleDef); _arg1.mass = (((density * b2Settings.b2_pi) * _local2.radius) * _local2.radius); _arg1.center.Set(0, 0); _arg1.I = (((0.5 * _arg1.mass) * _local2.radius) * _local2.radius); break; case b2Shape.e_boxShape: _local3 = (this as b2BoxDef); _arg1.mass = (((4 * density) * _local3.extents.x) * _local3.extents.y); _arg1.center.Set(0, 0); _arg1.I = ((_arg1.mass / 3) * b2Math.b2Dot(_local3.extents, _local3.extents)); break; case b2Shape.e_polyShape: _local4 = (this as b2PolyDef); b2Shape.PolyMass(_arg1, _local4.vertices, _local4.vertexCount, density); break; default: _arg1.mass = 0; _arg1.center.Set(0, 0); _arg1.I = 0; break; }; } } }//package Box2D.Collision.Shapes
Section 10
//b2AABB (Box2D.Collision.b2AABB) package Box2D.Collision { import Box2D.Common.Math.*; public class b2AABB { public var minVertex:b2Vec2; public var maxVertex:b2Vec2; public function b2AABB(){ minVertex = new b2Vec2(); maxVertex = new b2Vec2(); super(); } public function IsValid():Boolean{ var _local1:Number = maxVertex.x; var _local2:Number = maxVertex.y; _local1 = maxVertex.x; _local2 = maxVertex.y; _local1 = (_local1 - minVertex.x); _local2 = (_local2 - minVertex.y); var _local3:Boolean = (((_local1 >= 0)) && ((_local2 >= 0))); _local3 = ((((_local3) && (minVertex.IsValid()))) && (maxVertex.IsValid())); return (_local3); } } }//package Box2D.Collision
Section 11
//b2Bound (Box2D.Collision.b2Bound) package Box2D.Collision { public class b2Bound { public var value:uint; public var proxyId:uint; public var stabbingCount:uint; public function Swap(_arg1:b2Bound):void{ var _local2:uint = value; var _local3:uint = proxyId; var _local4:uint = stabbingCount; value = _arg1.value; proxyId = _arg1.proxyId; stabbingCount = _arg1.stabbingCount; _arg1.value = _local2; _arg1.proxyId = _local3; _arg1.stabbingCount = _local4; } public function IsLower():Boolean{ return (((value & 1) == 0)); } public function IsUpper():Boolean{ return (((value & 1) == 1)); } } }//package Box2D.Collision
Section 12
//b2BoundValues (Box2D.Collision.b2BoundValues) package Box2D.Collision { public class b2BoundValues { public var lowerValues:Array; public var upperValues:Array; public function b2BoundValues(){ lowerValues = [0, 0]; upperValues = [0, 0]; super(); } } }//package Box2D.Collision
Section 13
//b2BroadPhase (Box2D.Collision.b2BroadPhase) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2BroadPhase { public var m_bounds:Array; public var m_quantizationFactor:b2Vec2; public var m_worldAABB:b2AABB; public var m_freeProxy:uint; public var m_proxyCount:int; public var m_proxyPool:Array; public var m_queryResultCount:int; public var m_pairManager:b2PairManager; public var m_timeStamp:uint; public var m_queryResults:Array; public static const b2_nullEdge:uint = 0xFFFF; public static const b2_invalid:uint = 0xFFFF; public static var s_validate:Boolean = false; public function b2BroadPhase(_arg1:b2AABB, _arg2:b2PairCallback){ var _local3:int; var _local6:b2Proxy; var _local7:int; m_pairManager = new b2PairManager(); m_proxyPool = new Array(b2Settings.b2_maxPairs); m_bounds = new Array((2 * b2Settings.b2_maxProxies)); m_queryResults = new Array(b2Settings.b2_maxProxies); m_quantizationFactor = new b2Vec2(); super(); m_pairManager.Initialize(this, _arg2); m_worldAABB = _arg1; m_proxyCount = 0; _local3 = 0; while (_local3 < b2Settings.b2_maxProxies) { m_queryResults[_local3] = 0; _local3++; }; m_bounds = new Array(2); _local3 = 0; while (_local3 < 2) { m_bounds[_local3] = new Array((2 * b2Settings.b2_maxProxies)); _local7 = 0; while (_local7 < (2 * b2Settings.b2_maxProxies)) { m_bounds[_local3][_local7] = new b2Bound(); _local7++; }; _local3++; }; var _local4:Number = _arg1.maxVertex.x; var _local5:Number = _arg1.maxVertex.y; _local4 = (_local4 - _arg1.minVertex.x); _local5 = (_local5 - _arg1.minVertex.y); m_quantizationFactor.x = (b2Settings.USHRT_MAX / _local4); m_quantizationFactor.y = (b2Settings.USHRT_MAX / _local5); _local3 = 0; while (_local3 < (b2Settings.b2_maxProxies - 1)) { _local6 = new b2Proxy(); m_proxyPool[_local3] = _local6; _local6.SetNext((_local3 + 1)); _local6.timeStamp = 0; _local6.overlapCount = b2_invalid; _local6.userData = null; _local3++; }; _local6 = new b2Proxy(); m_proxyPool[(b2Settings.b2_maxProxies - 1)] = _local6; _local6.SetNext(b2Pair.b2_nullProxy); _local6.timeStamp = 0; _local6.overlapCount = b2_invalid; _local6.userData = null; m_freeProxy = 0; m_timeStamp = 1; m_queryResultCount = 0; } public function QueryAABB(_arg1:b2AABB, _arg2, _arg3:int):int{ var _local6:uint; var _local7:uint; var _local12:b2Proxy; var _local4:Array = new Array(); var _local5:Array = new Array(); ComputeBounds(_local4, _local5, _arg1); var _local8:Array = [_local6]; var _local9:Array = [_local7]; Query(_local8, _local9, _local4[0], _local5[0], m_bounds[0], (2 * m_proxyCount), 0); Query(_local8, _local9, _local4[1], _local5[1], m_bounds[1], (2 * m_proxyCount), 1); var _local10:int; var _local11:int; while ((((_local11 < m_queryResultCount)) && ((_local10 < _arg3)))) { _local12 = m_proxyPool[m_queryResults[_local11]]; _arg2[_local11] = _local12.userData; _local11++; _local10++; }; m_queryResultCount = 0; IncrementTimeStamp(); return (_local10); } public function Commit():void{ m_pairManager.Commit(); } public function GetProxy(_arg1:int):b2Proxy{ if ((((_arg1 == b2Pair.b2_nullProxy)) || ((m_proxyPool[_arg1].IsValid() == false)))){ return (null); }; return (m_proxyPool[_arg1]); } private function IncrementTimeStamp():void{ var _local1:uint; if (m_timeStamp == b2Settings.USHRT_MAX){ _local1 = 0; while (_local1 < b2Settings.b2_maxProxies) { m_proxyPool[_local1].timeStamp = 0; _local1++; }; m_timeStamp = 1; } else { m_timeStamp++; }; } private function Query(_arg1:Array, _arg2:Array, _arg3:uint, _arg4:uint, _arg5:Array, _arg6:uint, _arg7:int):void{ var _local11:int; var _local12:int; var _local13:b2Proxy; var _local8:uint = BinarySearch(_arg5, _arg6, _arg3); var _local9:uint = BinarySearch(_arg5, _arg6, _arg4); var _local10:uint = _local8; while (_local10 < _local9) { if (_arg5[_local10].IsLower()){ IncrementOverlapCount(_arg5[_local10].proxyId); }; _local10++; }; if (_local8 > 0){ _local11 = (_local8 - 1); _local12 = _arg5[_local11].stabbingCount; while (_local12) { if (_arg5[_local11].IsLower()){ _local13 = m_proxyPool[_arg5[_local11].proxyId]; if (_local8 <= _local13.upperBounds[_arg7]){ IncrementOverlapCount(_arg5[_local11].proxyId); _local12--; }; }; _local11--; }; }; _arg1[0] = _local8; _arg2[0] = _local9; } private function TestOverlapValidate(_arg1:b2Proxy, _arg2:b2Proxy):Boolean{ var _local4:Array; var _local3:int; while (_local3 < 2) { _local4 = m_bounds[_local3]; if (_local4[_arg1.lowerBounds[_local3]].value > _local4[_arg2.upperBounds[_local3]].value){ return (false); }; if (_local4[_arg1.upperBounds[_local3]].value < _local4[_arg2.lowerBounds[_local3]].value){ return (false); }; _local3++; }; return (true); } private function ComputeBounds(_arg1:Array, _arg2:Array, _arg3:b2AABB):void{ var _local4:Number = _arg3.minVertex.x; var _local5:Number = _arg3.minVertex.y; _local4 = b2Math.b2Min(_local4, m_worldAABB.maxVertex.x); _local5 = b2Math.b2Min(_local5, m_worldAABB.maxVertex.y); _local4 = b2Math.b2Max(_local4, m_worldAABB.minVertex.x); _local5 = b2Math.b2Max(_local5, m_worldAABB.minVertex.y); var _local6:Number = _arg3.maxVertex.x; var _local7:Number = _arg3.maxVertex.y; _local6 = b2Math.b2Min(_local6, m_worldAABB.maxVertex.x); _local7 = b2Math.b2Min(_local7, m_worldAABB.maxVertex.y); _local6 = b2Math.b2Max(_local6, m_worldAABB.minVertex.x); _local7 = b2Math.b2Max(_local7, m_worldAABB.minVertex.y); _arg1[0] = (uint((m_quantizationFactor.x * (_local4 - m_worldAABB.minVertex.x))) & (b2Settings.USHRT_MAX - 1)); _arg2[0] = ((uint((m_quantizationFactor.x * (_local6 - m_worldAABB.minVertex.x))) & 0xFFFF) | 1); _arg1[1] = (uint((m_quantizationFactor.y * (_local5 - m_worldAABB.minVertex.y))) & (b2Settings.USHRT_MAX - 1)); _arg2[1] = ((uint((m_quantizationFactor.y * (_local7 - m_worldAABB.minVertex.y))) & 0xFFFF) | 1); } public function CreateProxy(_arg1:b2AABB, _arg2):uint{ var _local3:uint; var _local4:b2Proxy; var _local11:Array; var _local12:uint; var _local13:uint; var _local14:Array; var _local15:Array; var _local16:Array; var _local17:int; var _local18:int; var _local19:b2Bound; var _local20:b2Bound; var _local21:int; var _local22:b2Proxy; var _local5:uint = m_freeProxy; _local4 = m_proxyPool[_local5]; m_freeProxy = _local4.GetNext(); _local4.overlapCount = 0; _local4.userData = _arg2; var _local6:uint = (2 * m_proxyCount); var _local7:Array = new Array(); var _local8:Array = new Array(); ComputeBounds(_local7, _local8, _arg1); var _local9:int; while (_local9 < 2) { _local11 = m_bounds[_local9]; _local14 = [_local12]; _local15 = [_local13]; Query(_local14, _local15, _local7[_local9], _local8[_local9], _local11, _local6, _local9); _local12 = _local14[0]; _local13 = _local15[0]; _local16 = new Array(); _local18 = (_local6 - _local13); _local17 = 0; while (_local17 < _local18) { _local16[_local17] = new b2Bound(); _local19 = _local16[_local17]; _local20 = _local11[(_local13 + _local17)]; _local19.value = _local20.value; _local19.proxyId = _local20.proxyId; _local19.stabbingCount = _local20.stabbingCount; _local17++; }; _local18 = _local16.length; _local21 = (_local13 + 2); _local17 = 0; while (_local17 < _local18) { _local20 = _local16[_local17]; _local19 = _local11[(_local21 + _local17)]; _local19.value = _local20.value; _local19.proxyId = _local20.proxyId; _local19.stabbingCount = _local20.stabbingCount; _local17++; }; _local16 = new Array(); _local18 = (_local13 - _local12); _local17 = 0; while (_local17 < _local18) { _local16[_local17] = new b2Bound(); _local19 = _local16[_local17]; _local20 = _local11[(_local12 + _local17)]; _local19.value = _local20.value; _local19.proxyId = _local20.proxyId; _local19.stabbingCount = _local20.stabbingCount; _local17++; }; _local18 = _local16.length; _local21 = (_local12 + 1); _local17 = 0; while (_local17 < _local18) { _local20 = _local16[_local17]; _local19 = _local11[(_local21 + _local17)]; _local19.value = _local20.value; _local19.proxyId = _local20.proxyId; _local19.stabbingCount = _local20.stabbingCount; _local17++; }; _local13++; _local11[_local12].value = _local7[_local9]; _local11[_local12].proxyId = _local5; _local11[_local13].value = _local8[_local9]; _local11[_local13].proxyId = _local5; _local11[_local12].stabbingCount = ((_local12 == 0)) ? 0 : _local11[(_local12 - 1)].stabbingCount; _local11[_local13].stabbingCount = _local11[(_local13 - 1)].stabbingCount; _local3 = _local12; while (_local3 < _local13) { _local11[_local3].stabbingCount++; _local3++; }; _local3 = _local12; while (_local3 < (_local6 + 2)) { _local22 = m_proxyPool[_local11[_local3].proxyId]; if (_local11[_local3].IsLower()){ _local22.lowerBounds[_local9] = _local3; } else { _local22.upperBounds[_local9] = _local3; }; _local3++; }; _local9++; }; m_proxyCount++; var _local10:int; while (_local10 < m_queryResultCount) { m_pairManager.AddBufferedPair(_local5, m_queryResults[_local10]); _local10++; }; m_pairManager.Commit(); m_queryResultCount = 0; IncrementTimeStamp(); return (_local5); } public function DestroyProxy(_arg1:uint):void{ var _local6:Array; var _local7:uint; var _local8:uint; var _local9:uint; var _local10:uint; var _local11:Array; var _local12:int; var _local13:int; var _local14:b2Bound; var _local15:b2Bound; var _local16:int; var _local17:uint; var _local18:int; var _local19:b2Proxy; var _local2:b2Proxy = m_proxyPool[_arg1]; var _local3:int = (2 * m_proxyCount); var _local4:int; while (_local4 < 2) { _local6 = m_bounds[_local4]; _local7 = _local2.lowerBounds[_local4]; _local8 = _local2.upperBounds[_local4]; _local9 = _local6[_local7].value; _local10 = _local6[_local8].value; _local11 = new Array(); _local13 = ((_local8 - _local7) - 1); _local12 = 0; while (_local12 < _local13) { _local11[_local12] = new b2Bound(); _local14 = _local11[_local12]; _local15 = _local6[((_local7 + 1) + _local12)]; _local14.value = _local15.value; _local14.proxyId = _local15.proxyId; _local14.stabbingCount = _local15.stabbingCount; _local12++; }; _local13 = _local11.length; _local16 = _local7; _local12 = 0; while (_local12 < _local13) { _local15 = _local11[_local12]; _local14 = _local6[(_local16 + _local12)]; _local14.value = _local15.value; _local14.proxyId = _local15.proxyId; _local14.stabbingCount = _local15.stabbingCount; _local12++; }; _local11 = new Array(); _local13 = ((_local3 - _local8) - 1); _local12 = 0; while (_local12 < _local13) { _local11[_local12] = new b2Bound(); _local14 = _local11[_local12]; _local15 = _local6[((_local8 + 1) + _local12)]; _local14.value = _local15.value; _local14.proxyId = _local15.proxyId; _local14.stabbingCount = _local15.stabbingCount; _local12++; }; _local13 = _local11.length; _local16 = (_local8 - 1); _local12 = 0; while (_local12 < _local13) { _local15 = _local11[_local12]; _local14 = _local6[(_local16 + _local12)]; _local14.value = _local15.value; _local14.proxyId = _local15.proxyId; _local14.stabbingCount = _local15.stabbingCount; _local12++; }; _local13 = (_local3 - 2); _local17 = _local7; while (_local17 < _local13) { _local19 = m_proxyPool[_local6[_local17].proxyId]; if (_local6[_local17].IsLower()){ _local19.lowerBounds[_local4] = _local17; } else { _local19.upperBounds[_local4] = _local17; }; _local17++; }; _local13 = (_local8 - 1); _local18 = _local7; while (_local18 < _local13) { _local6[_local18].stabbingCount--; _local18++; }; Query([0], [0], _local9, _local10, _local6, (_local3 - 2), _local4); _local4++; }; var _local5:int; while (_local5 < m_queryResultCount) { m_pairManager.RemoveBufferedPair(_arg1, m_queryResults[_local5]); _local5++; }; m_pairManager.Commit(); m_queryResultCount = 0; IncrementTimeStamp(); _local2.userData = null; _local2.overlapCount = b2_invalid; _local2.lowerBounds[0] = b2_invalid; _local2.lowerBounds[1] = b2_invalid; _local2.upperBounds[0] = b2_invalid; _local2.upperBounds[1] = b2_invalid; _local2.SetNext(m_freeProxy); m_freeProxy = _arg1; m_proxyCount--; } public function TestOverlap(_arg1:b2BoundValues, _arg2:b2Proxy):Boolean{ var _local4:Array; var _local3:int; while (_local3 < 2) { _local4 = m_bounds[_local3]; if (_arg1.lowerValues[_local3] > _local4[_arg2.upperBounds[_local3]].value){ return (false); }; if (_arg1.upperValues[_local3] < _local4[_arg2.lowerBounds[_local3]].value){ return (false); }; _local3++; }; return (true); } public function Validate():void{ var _local1:b2Pair; var _local2:b2Proxy; var _local3:b2Proxy; var _local4:Boolean; var _local6:b2Bound; var _local7:uint; var _local8:uint; var _local9:uint; var _local10:b2Bound; var _local5:int; while (_local5 < 2) { _local6 = m_bounds[_local5]; _local7 = (2 * m_proxyCount); _local8 = 0; _local9 = 0; while (_local9 < _local7) { _local10 = _local6[_local9]; if (_local10.IsLower() == true){ _local8++; } else { _local8--; }; _local9++; }; _local5++; }; } private function IncrementOverlapCount(_arg1:uint):void{ var _local2:b2Proxy = m_proxyPool[_arg1]; if (_local2.timeStamp < m_timeStamp){ _local2.timeStamp = m_timeStamp; _local2.overlapCount = 1; } else { _local2.overlapCount = 2; m_queryResults[m_queryResultCount] = _arg1; m_queryResultCount++; }; } public function InRange(_arg1:b2AABB):Boolean{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; _local2 = _arg1.minVertex.x; _local3 = _arg1.minVertex.y; _local2 = (_local2 - m_worldAABB.maxVertex.x); _local3 = (_local3 - m_worldAABB.maxVertex.y); _local4 = m_worldAABB.minVertex.x; _local5 = m_worldAABB.minVertex.y; _local4 = (_local4 - _arg1.maxVertex.x); _local5 = (_local5 - _arg1.maxVertex.y); _local2 = b2Math.b2Max(_local2, _local4); _local3 = b2Math.b2Max(_local3, _local5); return ((b2Math.b2Max(_local2, _local3) < 0)); } public function MoveProxy(_arg1:uint, _arg2:b2AABB):void{ var _local3:uint; var _local4:uint; var _local5:b2Bound; var _local6:b2Bound; var _local7:b2Bound; var _local8:uint; var _local9:b2Proxy; var _local14:Array; var _local15:uint; var _local16:uint; var _local17:uint; var _local18:uint; var _local19:int; var _local20:int; var _local21:uint; var _local22:b2Proxy; if ((((_arg1 == b2Pair.b2_nullProxy)) || ((b2Settings.b2_maxProxies <= _arg1)))){ return; }; if (_arg2.IsValid() == false){ return; }; var _local10:uint = (2 * m_proxyCount); var _local11:b2Proxy = m_proxyPool[_arg1]; var _local12:b2BoundValues = new b2BoundValues(); ComputeBounds(_local12.lowerValues, _local12.upperValues, _arg2); var _local13:b2BoundValues = new b2BoundValues(); _local3 = 0; while (_local3 < 2) { _local13.lowerValues[_local3] = m_bounds[_local3][_local11.lowerBounds[_local3]].value; _local13.upperValues[_local3] = m_bounds[_local3][_local11.upperBounds[_local3]].value; _local3++; }; _local3 = 0; while (_local3 < 2) { _local14 = m_bounds[_local3]; _local15 = _local11.lowerBounds[_local3]; _local16 = _local11.upperBounds[_local3]; _local17 = _local12.lowerValues[_local3]; _local18 = _local12.upperValues[_local3]; _local19 = (_local17 - _local14[_local15].value); _local20 = (_local18 - _local14[_local16].value); _local14[_local15].value = _local17; _local14[_local16].value = _local18; if (_local19 < 0){ _local4 = _local15; while ((((_local4 > 0)) && ((_local17 < _local14[(_local4 - 1)].value)))) { _local5 = _local14[_local4]; _local6 = _local14[(_local4 - 1)]; _local21 = _local6.proxyId; _local22 = m_proxyPool[_local6.proxyId]; _local6.stabbingCount++; if (_local6.IsUpper() == true){ if (TestOverlap(_local12, _local22)){ m_pairManager.AddBufferedPair(_arg1, _local21); }; var _local23 = _local22.upperBounds; var _local24 = _local3; var _local25 = (_local23[_local24] + 1); _local23[_local24] = _local25; _local5.stabbingCount++; } else { _local23 = _local22.lowerBounds; _local24 = _local3; _local25 = (_local23[_local24] + 1); _local23[_local24] = _local25; _local5.stabbingCount--; }; _local23 = _local11.lowerBounds; _local24 = _local3; _local25 = (_local23[_local24] - 1); _local23[_local24] = _local25; _local5.Swap(_local6); _local4--; }; }; if (_local20 > 0){ _local4 = _local16; while ((((_local4 < (_local10 - 1))) && ((_local14[(_local4 + 1)].value <= _local18)))) { _local5 = _local14[_local4]; _local7 = _local14[(_local4 + 1)]; _local8 = _local7.proxyId; _local9 = m_proxyPool[_local8]; _local7.stabbingCount++; if (_local7.IsLower() == true){ if (TestOverlap(_local12, _local9)){ m_pairManager.AddBufferedPair(_arg1, _local8); }; _local23 = _local9.lowerBounds; _local24 = _local3; _local25 = (_local23[_local24] - 1); _local23[_local24] = _local25; _local5.stabbingCount++; } else { _local23 = _local9.upperBounds; _local24 = _local3; _local25 = (_local23[_local24] - 1); _local23[_local24] = _local25; _local5.stabbingCount--; }; _local23 = _local11.upperBounds; _local24 = _local3; _local25 = (_local23[_local24] + 1); _local23[_local24] = _local25; _local5.Swap(_local7); _local4++; }; }; if (_local19 > 0){ _local4 = _local15; while ((((_local4 < (_local10 - 1))) && ((_local14[(_local4 + 1)].value <= _local17)))) { _local5 = _local14[_local4]; _local7 = _local14[(_local4 + 1)]; _local8 = _local7.proxyId; _local9 = m_proxyPool[_local8]; _local7.stabbingCount--; if (_local7.IsUpper()){ if (TestOverlap(_local13, _local9)){ m_pairManager.RemoveBufferedPair(_arg1, _local8); }; _local23 = _local9.upperBounds; _local24 = _local3; _local25 = (_local23[_local24] - 1); _local23[_local24] = _local25; _local5.stabbingCount--; } else { _local23 = _local9.lowerBounds; _local24 = _local3; _local25 = (_local23[_local24] - 1); _local23[_local24] = _local25; _local5.stabbingCount++; }; _local23 = _local11.lowerBounds; _local24 = _local3; _local25 = (_local23[_local24] + 1); _local23[_local24] = _local25; _local5.Swap(_local7); _local4++; }; }; if (_local20 < 0){ _local4 = _local16; while ((((_local4 > 0)) && ((_local18 < _local14[(_local4 - 1)].value)))) { _local5 = _local14[_local4]; _local6 = _local14[(_local4 - 1)]; _local21 = _local6.proxyId; _local22 = m_proxyPool[_local21]; _local6.stabbingCount--; if (_local6.IsLower() == true){ if (TestOverlap(_local13, _local22)){ m_pairManager.RemoveBufferedPair(_arg1, _local21); }; _local23 = _local22.lowerBounds; _local24 = _local3; _local25 = (_local23[_local24] + 1); _local23[_local24] = _local25; _local5.stabbingCount--; } else { _local23 = _local22.upperBounds; _local24 = _local3; _local25 = (_local23[_local24] + 1); _local23[_local24] = _local25; _local5.stabbingCount++; }; _local23 = _local11.upperBounds; _local24 = _local3; _local25 = (_local23[_local24] - 1); _local23[_local24] = _local25; _local5.Swap(_local6); _local4--; }; }; _local3++; }; } public static function BinarySearch(_arg1:Array, _arg2:int, _arg3:uint):uint{ var _local6:int; var _local4:int; var _local5:int = (_arg2 - 1); while (_local4 <= _local5) { _local6 = ((_local4 + _local5) / 2); if (_arg1[_local6].value > _arg3){ _local5 = (_local6 - 1); } else { if (_arg1[_local6].value < _arg3){ _local4 = (_local6 + 1); } else { return (uint(_local6)); }; }; }; return (uint(_local4)); } } }//package Box2D.Collision
Section 14
//b2BufferedPair (Box2D.Collision.b2BufferedPair) package Box2D.Collision { public class b2BufferedPair { public var proxyId1:uint; public var proxyId2:uint; } }//package Box2D.Collision
Section 15
//b2Collision (Box2D.Collision.b2Collision) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2Collision { public static const b2_nullFeature:uint = 0xFF; private static var b2CollidePolyTempVec:b2Vec2 = new b2Vec2(); public static function EdgeSeparation(_arg1:b2PolyShape, _arg2:int, _arg3:b2PolyShape):Number{ var _local21:b2Vec2; var _local22:Number; var _local4:Array = _arg1.m_vertices; var _local5:int = _arg3.m_vertexCount; var _local6:Array = _arg3.m_vertices; var _local7:Number = _arg1.m_normals[_arg2].x; var _local8:Number = _arg1.m_normals[_arg2].y; var _local9:Number = _local7; var _local10:b2Mat22 = _arg1.m_R; _local7 = ((_local10.col1.x * _local9) + (_local10.col2.x * _local8)); _local8 = ((_local10.col1.y * _local9) + (_local10.col2.y * _local8)); var _local11:Number = _local7; var _local12:Number = _local8; _local10 = _arg3.m_R; _local9 = ((_local11 * _local10.col1.x) + (_local12 * _local10.col1.y)); _local12 = ((_local11 * _local10.col2.x) + (_local12 * _local10.col2.y)); _local11 = _local9; var _local13:int; var _local14:Number = Number.MAX_VALUE; var _local15:int; while (_local15 < _local5) { _local21 = _local6[_local15]; _local22 = ((_local21.x * _local11) + (_local21.y * _local12)); if (_local22 < _local14){ _local14 = _local22; _local13 = _local15; }; _local15++; }; _local10 = _arg1.m_R; var _local16:Number = (_arg1.m_position.x + ((_local10.col1.x * _local4[_arg2].x) + (_local10.col2.x * _local4[_arg2].y))); var _local17:Number = (_arg1.m_position.y + ((_local10.col1.y * _local4[_arg2].x) + (_local10.col2.y * _local4[_arg2].y))); _local10 = _arg3.m_R; var _local18:Number = (_arg3.m_position.x + ((_local10.col1.x * _local6[_local13].x) + (_local10.col2.x * _local6[_local13].y))); var _local19:Number = (_arg3.m_position.y + ((_local10.col1.y * _local6[_local13].x) + (_local10.col2.y * _local6[_local13].y))); _local18 = (_local18 - _local16); _local19 = (_local19 - _local17); var _local20:Number = ((_local18 * _local7) + (_local19 * _local8)); return (_local20); } public static function b2TestOverlap(_arg1:b2AABB, _arg2:b2AABB):Boolean{ var _local3:b2Vec2 = _arg2.minVertex; var _local4:b2Vec2 = _arg1.maxVertex; var _local5:Number = (_local3.x - _local4.x); var _local6:Number = (_local3.y - _local4.y); _local3 = _arg1.minVertex; _local4 = _arg2.maxVertex; var _local7:Number = (_local3.x - _local4.x); var _local8:Number = (_local3.y - _local4.y); if ((((_local5 > 0)) || ((_local6 > 0)))){ return (false); }; if ((((_local7 > 0)) || ((_local8 > 0)))){ return (false); }; return (true); } public static function FindIncidentEdge(_arg1:Array, _arg2:b2PolyShape, _arg3:int, _arg4:b2PolyShape):void{ var _local21:int; var _local22:int; var _local25:ClipVertex; var _local26:int; var _local27:int; var _local28:Number; var _local29:Number; var _local30:Number; var _local5:int = _arg2.m_vertexCount; var _local6:Array = _arg2.m_vertices; var _local7:int = _arg4.m_vertexCount; var _local8:Array = _arg4.m_vertices; var _local9:int = _arg3; var _local10:int = (((_arg3 + 1) == _local5)) ? 0 : (_arg3 + 1); var _local11:b2Vec2 = _local6[_local10]; var _local12:Number = _local11.x; var _local13:Number = _local11.y; _local11 = _local6[_local9]; _local12 = (_local12 - _local11.x); _local13 = (_local13 - _local11.y); var _local14:Number = _local12; _local12 = _local13; _local13 = -(_local14); var _local15:Number = (1 / Math.sqrt(((_local12 * _local12) + (_local13 * _local13)))); _local12 = (_local12 * _local15); _local13 = (_local13 * _local15); var _local16:Number = _local12; var _local17:Number = _local13; _local14 = _local16; var _local18:b2Mat22 = _arg2.m_R; _local16 = ((_local18.col1.x * _local14) + (_local18.col2.x * _local17)); _local17 = ((_local18.col1.y * _local14) + (_local18.col2.y * _local17)); var _local19:Number = _local16; var _local20:Number = _local17; _local18 = _arg4.m_R; _local14 = ((_local19 * _local18.col1.x) + (_local20 * _local18.col1.y)); _local20 = ((_local19 * _local18.col2.x) + (_local20 * _local18.col2.y)); _local19 = _local14; var _local23:Number = Number.MAX_VALUE; var _local24:int; while (_local24 < _local7) { _local26 = _local24; _local27 = (((_local24 + 1) < _local7)) ? (_local24 + 1) : 0; _local11 = _local8[_local27]; _local28 = _local11.x; _local29 = _local11.y; _local11 = _local8[_local26]; _local28 = (_local28 - _local11.x); _local29 = (_local29 - _local11.y); _local14 = _local28; _local28 = _local29; _local29 = -(_local14); _local15 = (1 / Math.sqrt(((_local28 * _local28) + (_local29 * _local29)))); _local28 = (_local28 * _local15); _local29 = (_local29 * _local15); _local30 = ((_local28 * _local19) + (_local29 * _local20)); if (_local30 < _local23){ _local23 = _local30; _local21 = _local26; _local22 = _local27; }; _local24++; }; _local25 = _arg1[0]; _local11 = _local25.v; _local11.SetV(_local8[_local21]); _local11.MulM(_arg4.m_R); _local11.Add(_arg4.m_position); _local25.id.features.referenceFace = _arg3; _local25.id.features.incidentEdge = _local21; _local25.id.features.incidentVertex = _local21; _local25 = _arg1[1]; _local11 = _local25.v; _local11.SetV(_local8[_local22]); _local11.MulM(_arg4.m_R); _local11.Add(_arg4.m_position); _local25.id.features.referenceFace = _arg3; _local25.id.features.incidentEdge = _local21; _local25.id.features.incidentVertex = _local22; } public static function b2CollidePolyAndCircle(_arg1:b2Manifold, _arg2:b2PolyShape, _arg3:b2CircleShape, _arg4:Boolean):void{ var _local5:b2ContactPoint; var _local6:Number; var _local7:Number; var _local12:Number; var _local23:Number; var _local24:Number; var _local25:Number; var _local26:b2Vec2; _arg1.pointCount = 0; var _local8:Number = (_arg3.m_position.x - _arg2.m_position.x); var _local9:Number = (_arg3.m_position.y - _arg2.m_position.y); var _local10:b2Mat22 = _arg2.m_R; var _local11:Number = ((_local8 * _local10.col1.x) + (_local9 * _local10.col1.y)); _local9 = ((_local8 * _local10.col2.x) + (_local9 * _local10.col2.y)); _local8 = _local11; var _local13:int; var _local14:Number = -(Number.MAX_VALUE); var _local15:Number = _arg3.m_radius; var _local16:int; while (_local16 < _arg2.m_vertexCount) { _local25 = ((_arg2.m_normals[_local16].x * (_local8 - _arg2.m_vertices[_local16].x)) + (_arg2.m_normals[_local16].y * (_local9 - _arg2.m_vertices[_local16].y))); if (_local25 > _local15){ return; }; if (_local25 > _local14){ _local14 = _local25; _local13 = _local16; }; _local16++; }; if (_local14 < Number.MIN_VALUE){ _arg1.pointCount = 1; _local26 = _arg2.m_normals[_local13]; _arg1.normal.x = ((_local10.col1.x * _local26.x) + (_local10.col2.x * _local26.y)); _arg1.normal.y = ((_local10.col1.y * _local26.x) + (_local10.col2.y * _local26.y)); _local5 = _arg1.points[0]; _local5.id.features.incidentEdge = _local13; _local5.id.features.incidentVertex = b2_nullFeature; _local5.id.features.referenceFace = b2_nullFeature; _local5.id.features.flip = 0; _local5.position.x = (_arg3.m_position.x - (_local15 * _arg1.normal.x)); _local5.position.y = (_arg3.m_position.y - (_local15 * _arg1.normal.y)); _local5.separation = (_local14 - _local15); return; }; var _local17:int = _local13; var _local18:int = (((_local17 + 1) < _arg2.m_vertexCount)) ? (_local17 + 1) : 0; var _local19:Number = (_arg2.m_vertices[_local18].x - _arg2.m_vertices[_local17].x); var _local20:Number = (_arg2.m_vertices[_local18].y - _arg2.m_vertices[_local17].y); var _local21:Number = Math.sqrt(((_local19 * _local19) + (_local20 * _local20))); _local19 = (_local19 / _local21); _local20 = (_local20 / _local21); if (_local21 < Number.MIN_VALUE){ _local6 = (_local8 - _arg2.m_vertices[_local17].x); _local7 = (_local9 - _arg2.m_vertices[_local17].y); _local12 = Math.sqrt(((_local6 * _local6) + (_local7 * _local7))); _local6 = (_local6 / _local12); _local7 = (_local7 / _local12); if (_local12 > _local15){ return; }; _arg1.pointCount = 1; _arg1.normal.Set(((_local10.col1.x * _local6) + (_local10.col2.x * _local7)), ((_local10.col1.y * _local6) + (_local10.col2.y * _local7))); _local5 = _arg1.points[0]; _local5.id.features.incidentEdge = b2_nullFeature; _local5.id.features.incidentVertex = _local17; _local5.id.features.referenceFace = b2_nullFeature; _local5.id.features.flip = 0; _local5.position.x = (_arg3.m_position.x - (_local15 * _arg1.normal.x)); _local5.position.y = (_arg3.m_position.y - (_local15 * _arg1.normal.y)); _local5.separation = (_local12 - _local15); return; }; var _local22:Number = (((_local8 - _arg2.m_vertices[_local17].x) * _local19) + ((_local9 - _arg2.m_vertices[_local17].y) * _local20)); _local5 = _arg1.points[0]; _local5.id.features.incidentEdge = b2_nullFeature; _local5.id.features.incidentVertex = b2_nullFeature; _local5.id.features.referenceFace = b2_nullFeature; _local5.id.features.flip = 0; if (_local22 <= 0){ _local23 = _arg2.m_vertices[_local17].x; _local24 = _arg2.m_vertices[_local17].y; _local5.id.features.incidentVertex = _local17; } else { if (_local22 >= _local21){ _local23 = _arg2.m_vertices[_local18].x; _local24 = _arg2.m_vertices[_local18].y; _local5.id.features.incidentVertex = _local18; } else { _local23 = ((_local19 * _local22) + _arg2.m_vertices[_local17].x); _local24 = ((_local20 * _local22) + _arg2.m_vertices[_local17].y); _local5.id.features.incidentEdge = _local17; }; }; _local6 = (_local8 - _local23); _local7 = (_local9 - _local24); _local12 = Math.sqrt(((_local6 * _local6) + (_local7 * _local7))); _local6 = (_local6 / _local12); _local7 = (_local7 / _local12); if (_local12 > _local15){ return; }; _arg1.pointCount = 1; _arg1.normal.Set(((_local10.col1.x * _local6) + (_local10.col2.x * _local7)), ((_local10.col1.y * _local6) + (_local10.col2.y * _local7))); _local5.position.x = (_arg3.m_position.x - (_local15 * _arg1.normal.x)); _local5.position.y = (_arg3.m_position.y - (_local15 * _arg1.normal.y)); _local5.separation = (_local12 - _local15); } public static function FindMaxSeparation(_arg1:Array, _arg2:b2PolyShape, _arg3:b2PolyShape, _arg4:Boolean):Number{ var _local18:int; var _local19:Number; var _local20:int; var _local21:Number; var _local5:int = _arg2.m_vertexCount; var _local6:Number = (_arg3.m_position.x - _arg2.m_position.x); var _local7:Number = (_arg3.m_position.y - _arg2.m_position.y); var _local8:Number = ((_local6 * _arg2.m_R.col1.x) + (_local7 * _arg2.m_R.col1.y)); var _local9:Number = ((_local6 * _arg2.m_R.col2.x) + (_local7 * _arg2.m_R.col2.y)); var _local10:int; var _local11:Number = -(Number.MAX_VALUE); var _local12:int; while (_local12 < _local5) { _local21 = ((_arg2.m_normals[_local12].x * _local8) + (_arg2.m_normals[_local12].y * _local9)); if (_local21 > _local11){ _local11 = _local21; _local10 = _local12; }; _local12++; }; var _local13:Number = EdgeSeparation(_arg2, _local10, _arg3); if ((((_local13 > 0)) && ((_arg4 == false)))){ return (_local13); }; var _local14:int = (((_local10 - 1) >= 0)) ? (_local10 - 1) : (_local5 - 1); var _local15:Number = EdgeSeparation(_arg2, _local14, _arg3); if ((((_local15 > 0)) && ((_arg4 == false)))){ return (_local15); }; var _local16:int = (((_local10 + 1) < _local5)) ? (_local10 + 1) : 0; var _local17:Number = EdgeSeparation(_arg2, _local16, _arg3); if ((((_local17 > 0)) && ((_arg4 == false)))){ return (_local17); }; if ((((_local15 > _local13)) && ((_local15 > _local17)))){ _local20 = -1; _local18 = _local14; _local19 = _local15; } else { if (_local17 > _local13){ _local20 = 1; _local18 = _local16; _local19 = _local17; } else { _arg1[0] = _local10; return (_local13); }; }; while (true) { if (_local20 == -1){ _local10 = (((_local18 - 1) >= 0)) ? (_local18 - 1) : (_local5 - 1); } else { _local10 = (((_local18 + 1) < _local5)) ? (_local18 + 1) : 0; }; _local13 = EdgeSeparation(_arg2, _local10, _arg3); if ((((_local13 > 0)) && ((_arg4 == false)))){ return (_local13); }; if (_local13 > _local19){ _local18 = _local10; _local19 = _local13; } else { break; }; }; _arg1[0] = _local18; return (_local19); } public static function ClipSegmentToLine(_arg1:Array, _arg2:Array, _arg3:b2Vec2, _arg4:Number):int{ var _local7:b2Vec2; var _local8:Number; var _local10:Number; var _local11:b2Vec2; var _local5:int; var _local6:b2Vec2 = _arg2[0].v; _local7 = _arg2[1].v; _local8 = (b2Math.b2Dot(_arg3, _arg2[0].v) - _arg4); var _local9:Number = (b2Math.b2Dot(_arg3, _arg2[1].v) - _arg4); if (_local8 <= 0){ var _temp1 = _local5; _local5 = (_local5 + 1); var _local12 = _temp1; _arg1[_local12] = _arg2[0]; }; if (_local9 <= 0){ var _temp2 = _local5; _local5 = (_local5 + 1); _local12 = _temp2; _arg1[_local12] = _arg2[1]; }; if ((_local8 * _local9) < 0){ _local10 = (_local8 / (_local8 - _local9)); _local11 = _arg1[_local5].v; _local11.x = (_local6.x + (_local10 * (_local7.x - _local6.x))); _local11.y = (_local6.y + (_local10 * (_local7.y - _local6.y))); if (_local8 > 0){ _arg1[_local5].id = _arg2[0].id; } else { _arg1[_local5].id = _arg2[1].id; }; _local5++; }; return (_local5); } public static function b2CollidePoly(_arg1:b2Manifold, _arg2:b2PolyShape, _arg3:b2PolyShape, _arg4:Boolean):void{ var _local11:b2PolyShape; var _local12:b2PolyShape; var _local13:int; var _local14:int; var _local40:int; var _local43:b2Vec2; var _local44:Number; var _local45:b2ContactPoint; _arg1.pointCount = 0; var _local5:int; var _local6:Array = [_local5]; var _local7:Number = FindMaxSeparation(_local6, _arg2, _arg3, _arg4); _local5 = _local6[0]; if ((((_local7 > 0)) && ((_arg4 == false)))){ return; }; var _local8:int; var _local9:Array = [_local8]; var _local10:Number = FindMaxSeparation(_local9, _arg3, _arg2, _arg4); _local8 = _local9[0]; if ((((_local10 > 0)) && ((_arg4 == false)))){ return; }; var _local15:Number = 0.98; var _local16:Number = 0.001; if (_local10 > ((_local15 * _local7) + _local16)){ _local11 = _arg3; _local12 = _arg2; _local13 = _local8; _local14 = 1; } else { _local11 = _arg2; _local12 = _arg3; _local13 = _local5; _local14 = 0; }; var _local17:Array = [new ClipVertex(), new ClipVertex()]; FindIncidentEdge(_local17, _local11, _local13, _local12); var _local18:int = _local11.m_vertexCount; var _local19:Array = _local11.m_vertices; var _local20:b2Vec2 = _local19[_local13]; var _local21:b2Vec2 = (((_local13 + 1) < _local18)) ? _local19[(_local13 + 1)] : _local19[0]; var _local22:Number = (_local21.x - _local20.x); var _local23:Number = (_local21.y - _local20.y); var _local24:Number = (_local21.x - _local20.x); var _local25:Number = (_local21.y - _local20.y); var _local26:Number = _local24; var _local27:b2Mat22 = _local11.m_R; _local24 = ((_local27.col1.x * _local26) + (_local27.col2.x * _local25)); _local25 = ((_local27.col1.y * _local26) + (_local27.col2.y * _local25)); var _local28:Number = (1 / Math.sqrt(((_local24 * _local24) + (_local25 * _local25)))); _local24 = (_local24 * _local28); _local25 = (_local25 * _local28); var _local29:Number = _local24; var _local30:Number = _local25; _local26 = _local29; _local29 = _local30; _local30 = -(_local26); var _local31:Number = _local20.x; var _local32:Number = _local20.y; _local26 = _local31; _local27 = _local11.m_R; _local31 = ((_local27.col1.x * _local26) + (_local27.col2.x * _local32)); _local32 = ((_local27.col1.y * _local26) + (_local27.col2.y * _local32)); _local31 = (_local31 + _local11.m_position.x); _local32 = (_local32 + _local11.m_position.y); var _local33:Number = _local21.x; var _local34:Number = _local21.y; _local26 = _local33; _local27 = _local11.m_R; _local33 = ((_local27.col1.x * _local26) + (_local27.col2.x * _local34)); _local34 = ((_local27.col1.y * _local26) + (_local27.col2.y * _local34)); _local33 = (_local33 + _local11.m_position.x); _local34 = (_local34 + _local11.m_position.y); var _local35:Number = ((_local29 * _local31) + (_local30 * _local32)); var _local36:Number = -(((_local24 * _local31) + (_local25 * _local32))); var _local37:Number = ((_local24 * _local33) + (_local25 * _local34)); var _local38:Array = [new ClipVertex(), new ClipVertex()]; var _local39:Array = [new ClipVertex(), new ClipVertex()]; b2CollidePolyTempVec.Set(-(_local24), -(_local25)); _local40 = ClipSegmentToLine(_local38, _local17, b2CollidePolyTempVec, _local36); if (_local40 < 2){ return; }; b2CollidePolyTempVec.Set(_local24, _local25); _local40 = ClipSegmentToLine(_local39, _local38, b2CollidePolyTempVec, _local37); if (_local40 < 2){ return; }; if (_local14){ _arg1.normal.Set(-(_local29), -(_local30)); } else { _arg1.normal.Set(_local29, _local30); }; var _local41:int; var _local42:int; while (_local42 < b2Settings.b2_maxManifoldPoints) { _local43 = _local39[_local42].v; _local44 = (((_local29 * _local43.x) + (_local30 * _local43.y)) - _local35); if ((((_local44 <= 0)) || ((_arg4 == true)))){ _local45 = _arg1.points[_local41]; _local45.separation = _local44; _local45.position.SetV(_local39[_local42].v); _local45.id.Set(_local39[_local42].id); _local45.id.features.flip = _local14; _local41++; }; _local42++; }; _arg1.pointCount = _local41; } public static function b2CollideCircle(_arg1:b2Manifold, _arg2:b2CircleShape, _arg3:b2CircleShape, _arg4:Boolean):void{ var _local9:Number; var _local11:Number; var _local12:Number; _arg1.pointCount = 0; var _local5:Number = (_arg3.m_position.x - _arg2.m_position.x); var _local6:Number = (_arg3.m_position.y - _arg2.m_position.y); var _local7:Number = ((_local5 * _local5) + (_local6 * _local6)); var _local8:Number = (_arg2.m_radius + _arg3.m_radius); if ((((_local7 > (_local8 * _local8))) && ((_arg4 == false)))){ return; }; if (_local7 < Number.MIN_VALUE){ _local9 = -(_local8); _arg1.normal.Set(0, 1); } else { _local11 = Math.sqrt(_local7); _local9 = (_local11 - _local8); _local12 = (1 / _local11); _arg1.normal.x = (_local12 * _local5); _arg1.normal.y = (_local12 * _local6); }; _arg1.pointCount = 1; var _local10:b2ContactPoint = _arg1.points[0]; _local10.id.key = 0; _local10.separation = _local9; _local10.position.x = (_arg3.m_position.x - (_arg3.m_radius * _arg1.normal.x)); _local10.position.y = (_arg3.m_position.y - (_arg3.m_radius * _arg1.normal.y)); } } }//package Box2D.Collision
Section 16
//b2ContactID (Box2D.Collision.b2ContactID) package Box2D.Collision { public class b2ContactID { public var _key:uint; public var features:Features; public function b2ContactID(){ features = new Features(); super(); features._m_id = this; } public function Set(_arg1:b2ContactID):void{ key = _arg1._key; } public function Copy():b2ContactID{ var _local1:b2ContactID = new b2ContactID(); _local1.key = key; return (_local1); } public function set key(_arg1:uint):void{ _key = _arg1; features._referenceFace = (_key & 0xFF); features._incidentEdge = (((_key & 0xFF00) >> 8) & 0xFF); features._incidentVertex = (((_key & 0xFF0000) >> 16) & 0xFF); features._flip = (((_key & 4278190080) >> 24) & 0xFF); } public function get key():uint{ return (_key); } } }//package Box2D.Collision
Section 17
//b2ContactPoint (Box2D.Collision.b2ContactPoint) package Box2D.Collision { import Box2D.Common.Math.*; public class b2ContactPoint { public var tangentImpulse:Number; public var separation:Number; public var position:b2Vec2; public var id:b2ContactID; public var normalImpulse:Number; public function b2ContactPoint(){ position = new b2Vec2(); id = new b2ContactID(); super(); } } }//package Box2D.Collision
Section 18
//b2Manifold (Box2D.Collision.b2Manifold) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2Manifold { public var points:Array; public var normal:b2Vec2; public var pointCount:int; public function b2Manifold(){ points = new Array(b2Settings.b2_maxManifoldPoints); var _local1:int; while (_local1 < b2Settings.b2_maxManifoldPoints) { points[_local1] = new b2ContactPoint(); _local1++; }; normal = new b2Vec2(); } } }//package Box2D.Collision
Section 19
//b2OBB (Box2D.Collision.b2OBB) package Box2D.Collision { import Box2D.Common.Math.*; public class b2OBB { public var R:b2Mat22; public var center:b2Vec2; public var extents:b2Vec2; public function b2OBB(){ R = new b2Mat22(); center = new b2Vec2(); extents = new b2Vec2(); super(); } } }//package Box2D.Collision
Section 20
//b2Pair (Box2D.Collision.b2Pair) package Box2D.Collision { public class b2Pair { public var proxyId1:uint; public var userData;// = null public var proxyId2:uint; public var status:uint; public var next:uint; public static var e_pairFinal:uint = 4; public static var b2_tableMask:int = (b2_tableCapacity - 1); public static var e_pairRemoved:uint = 2; public static var b2_nullPair:uint = 0xFFFF; public static var e_pairBuffered:uint = 1; public static var b2_nullProxy:uint = 0xFFFF; public static var b2_tableCapacity:int = 8192; public function SetBuffered():void{ status = (status | e_pairBuffered); } public function IsBuffered():Boolean{ return (((status & e_pairBuffered) == e_pairBuffered)); } public function IsFinal():Boolean{ return (((status & e_pairFinal) == e_pairFinal)); } public function ClearRemoved():void{ status = (status & ~(e_pairRemoved)); } public function SetFinal():void{ status = (status | e_pairFinal); } public function IsRemoved():Boolean{ return (((status & e_pairRemoved) == e_pairRemoved)); } public function ClearBuffered():void{ status = (status & ~(e_pairBuffered)); } public function SetRemoved():void{ status = (status | e_pairRemoved); } } }//package Box2D.Collision
Section 21
//b2PairCallback (Box2D.Collision.b2PairCallback) package Box2D.Collision { public class b2PairCallback { public function PairRemoved(_arg1, _arg2, _arg3):void{ } public function PairAdded(_arg1, _arg2){ return (null); } } }//package Box2D.Collision
Section 22
//b2PairManager (Box2D.Collision.b2PairManager) package Box2D.Collision { import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PairManager { public var m_pairCount:int; public var m_pairBuffer:Array; public var m_hashTable:Array; public var m_callback:b2PairCallback; public var m_pairs:Array; public var m_pairBufferCount:int; public var m_broadPhase:b2BroadPhase; public var m_freePair:uint; public function b2PairManager(){ var _local1:uint; super(); m_hashTable = new Array(b2Pair.b2_tableCapacity); _local1 = 0; while (_local1 < b2Pair.b2_tableCapacity) { m_hashTable[_local1] = b2Pair.b2_nullPair; _local1++; }; m_pairs = new Array(b2Settings.b2_maxPairs); _local1 = 0; while (_local1 < b2Settings.b2_maxPairs) { m_pairs[_local1] = new b2Pair(); _local1++; }; m_pairBuffer = new Array(b2Settings.b2_maxPairs); _local1 = 0; while (_local1 < b2Settings.b2_maxPairs) { m_pairBuffer[_local1] = new b2BufferedPair(); _local1++; }; _local1 = 0; while (_local1 < b2Settings.b2_maxPairs) { m_pairs[_local1].proxyId1 = b2Pair.b2_nullProxy; m_pairs[_local1].proxyId2 = b2Pair.b2_nullProxy; m_pairs[_local1].userData = null; m_pairs[_local1].status = 0; m_pairs[_local1].next = (_local1 + 1); _local1++; }; m_pairs[(b2Settings.b2_maxPairs - 1)].next = b2Pair.b2_nullPair; m_pairCount = 0; } private function FindHash(_arg1:uint, _arg2:uint, _arg3:uint):b2Pair{ var _local4:uint = m_hashTable[_arg3]; while (((!((_local4 == b2Pair.b2_nullPair))) && ((Equals(m_pairs[_local4], _arg1, _arg2) == false)))) { _local4 = m_pairs[_local4].next; }; if (_local4 == b2Pair.b2_nullPair){ return (null); }; return (m_pairs[_local4]); } private function Find(_arg1:uint, _arg2:uint):b2Pair{ var _local4:uint; if (_arg1 > _arg2){ _local4 = _arg1; _arg1 = _arg2; _arg2 = _local4; }; var _local3:uint = (Hash(_arg1, _arg2) & b2Pair.b2_tableMask); return (FindHash(_arg1, _arg2, _local3)); } private function ValidateBuffer():void{ } public function Commit():void{ var _local1:int; var _local4:b2Pair; var _local5:b2Proxy; var _local6:b2Proxy; var _local2:int; var _local3:Array = m_broadPhase.m_proxyPool; _local1 = 0; while (_local1 < m_pairBufferCount) { _local4 = Find(m_pairBuffer[_local1].proxyId1, m_pairBuffer[_local1].proxyId2); _local4.ClearBuffered(); _local5 = _local3[_local4.proxyId1]; _local6 = _local3[_local4.proxyId2]; if (_local4.IsRemoved()){ if (_local4.IsFinal() == true){ m_callback.PairRemoved(_local5.userData, _local6.userData, _local4.userData); }; m_pairBuffer[_local2].proxyId1 = _local4.proxyId1; m_pairBuffer[_local2].proxyId2 = _local4.proxyId2; _local2++; } else { if (_local4.IsFinal() == false){ _local4.userData = m_callback.PairAdded(_local5.userData, _local6.userData); _local4.SetFinal(); }; }; _local1++; }; _local1 = 0; while (_local1 < _local2) { RemovePair(m_pairBuffer[_local1].proxyId1, m_pairBuffer[_local1].proxyId2); _local1++; }; m_pairBufferCount = 0; if (b2BroadPhase.s_validate){ ValidateTable(); }; } public function RemoveBufferedPair(_arg1:int, _arg2:int):void{ var _local3:b2Pair = Find(_arg1, _arg2); if (_local3 == null){ return; }; if (_local3.IsBuffered() == false){ _local3.SetBuffered(); m_pairBuffer[m_pairBufferCount].proxyId1 = _local3.proxyId1; m_pairBuffer[m_pairBufferCount].proxyId2 = _local3.proxyId2; m_pairBufferCount++; }; _local3.SetRemoved(); if (b2BroadPhase.s_validate){ ValidateBuffer(); }; } private function RemovePair(_arg1:uint, _arg2:uint){ var _local6:uint; var _local7:uint; var _local8:b2Pair; var _local9:*; if (_arg1 > _arg2){ _local6 = _arg1; _arg1 = _arg2; _arg2 = _local6; }; var _local3:uint = (Hash(_arg1, _arg2) & b2Pair.b2_tableMask); var _local4:uint = m_hashTable[_local3]; var _local5:b2Pair; while (_local4 != b2Pair.b2_nullPair) { if (Equals(m_pairs[_local4], _arg1, _arg2)){ _local7 = _local4; if (_local5){ _local5.next = m_pairs[_local4].next; } else { m_hashTable[_local3] = m_pairs[_local4].next; }; _local8 = m_pairs[_local7]; _local9 = _local8.userData; _local8.next = m_freePair; _local8.proxyId1 = b2Pair.b2_nullProxy; _local8.proxyId2 = b2Pair.b2_nullProxy; _local8.userData = null; _local8.status = 0; m_freePair = _local7; m_pairCount--; return (_local9); } else { _local5 = m_pairs[_local4]; _local4 = _local5.next; }; }; return (null); } public function Initialize(_arg1:b2BroadPhase, _arg2:b2PairCallback):void{ m_broadPhase = _arg1; m_callback = _arg2; } public function AddBufferedPair(_arg1:int, _arg2:int):void{ var _local3:b2Pair = AddPair(_arg1, _arg2); if (_local3.IsBuffered() == false){ _local3.SetBuffered(); m_pairBuffer[m_pairBufferCount].proxyId1 = _local3.proxyId1; m_pairBuffer[m_pairBufferCount].proxyId2 = _local3.proxyId2; m_pairBufferCount++; }; _local3.ClearRemoved(); if (b2BroadPhase.s_validate){ ValidateBuffer(); }; } private function AddPair(_arg1:uint, _arg2:uint):b2Pair{ var _local6:uint; if (_arg1 > _arg2){ _local6 = _arg1; _arg1 = _arg2; _arg2 = _local6; }; var _local3:uint = (Hash(_arg1, _arg2) & b2Pair.b2_tableMask); var _local4 = FindHash(_arg1, _arg2, _local3); if (_local4 != null){ return (_local4); }; var _local5:uint = m_freePair; _local4 = m_pairs[_local5]; m_freePair = _local4.next; _local4.proxyId1 = _arg1; _local4.proxyId2 = _arg2; _local4.status = 0; _local4.userData = null; _local4.next = m_hashTable[_local3]; m_hashTable[_local3] = _local5; m_pairCount++; return (_local4); } private function ValidateTable():void{ } public static function EqualsPair(_arg1:b2BufferedPair, _arg2:b2BufferedPair):Boolean{ return ((((_arg1.proxyId1 == _arg2.proxyId1)) && ((_arg1.proxyId2 == _arg2.proxyId2)))); } public static function Hash(_arg1:uint, _arg2:uint):uint{ var _local3:uint = (((_arg2 << 16) & 4294901760) | _arg1); _local3 = (~(_local3) + ((_local3 << 15) & 4294934528)); _local3 = (_local3 ^ ((_local3 >> 12) & 1048575)); _local3 = (_local3 + ((_local3 << 2) & 4294967292)); _local3 = (_local3 ^ ((_local3 >> 4) & 268435455)); _local3 = (_local3 * 2057); _local3 = (_local3 ^ ((_local3 >> 16) & 0xFFFF)); return (_local3); } public static function Equals(_arg1:b2Pair, _arg2:uint, _arg3:uint):Boolean{ return ((((_arg1.proxyId1 == _arg2)) && ((_arg1.proxyId2 == _arg3)))); } } }//package Box2D.Collision
Section 23
//b2Proxy (Box2D.Collision.b2Proxy) package Box2D.Collision { public class b2Proxy { public var overlapCount:uint; public var userData;// = null public var lowerBounds:Array; public var upperBounds:Array; public var timeStamp:uint; public function b2Proxy(){ lowerBounds = [uint(0), uint(0)]; upperBounds = [uint(0), uint(0)]; super(); } public function GetNext():uint{ return (lowerBounds[0]); } public function IsValid():Boolean{ return (!((overlapCount == b2BroadPhase.b2_invalid))); } public function SetNext(_arg1:uint):void{ lowerBounds[0] = (_arg1 & 0xFFFF); } } }//package Box2D.Collision
Section 24
//ClipVertex (Box2D.Collision.ClipVertex) package Box2D.Collision { import Box2D.Common.Math.*; public class ClipVertex { public var id:b2ContactID; public var v:b2Vec2; public function ClipVertex(){ v = new b2Vec2(); id = new b2ContactID(); super(); } } }//package Box2D.Collision
Section 25
//Features (Box2D.Collision.Features) package Box2D.Collision { public class Features { public var _referenceFace:int; public var _incidentEdge:int; public var _flip:int; public var _incidentVertex:int; public var _m_id:b2ContactID; public function get referenceFace():int{ return (_referenceFace); } public function set incidentVertex(_arg1:int):void{ _incidentVertex = _arg1; _m_id._key = ((_m_id._key & 4278255615) | ((_incidentVertex << 16) & 0xFF0000)); } public function get flip():int{ return (_flip); } public function get incidentEdge():int{ return (_incidentEdge); } public function set referenceFace(_arg1:int):void{ _referenceFace = _arg1; _m_id._key = ((_m_id._key & 4294967040) | (_referenceFace & 0xFF)); } public function get incidentVertex():int{ return (_incidentVertex); } public function set flip(_arg1:int):void{ _flip = _arg1; _m_id._key = ((_m_id._key & 0xFFFFFF) | ((_flip << 24) & 4278190080)); } public function set incidentEdge(_arg1:int):void{ _incidentEdge = _arg1; _m_id._key = ((_m_id._key & 4294902015) | ((_incidentEdge << 8) & 0xFF00)); } } }//package Box2D.Collision
Section 26
//b2Mat22 (Box2D.Common.Math.b2Mat22) package Box2D.Common.Math { public class b2Mat22 { public var col1:b2Vec2; public var col2:b2Vec2; public function b2Mat22(_arg1:Number=0, _arg2:b2Vec2=null, _arg3:b2Vec2=null){ var _local4:Number; var _local5:Number; col1 = new b2Vec2(); col2 = new b2Vec2(); super(); if (((!((_arg2 == null))) && (!((_arg3 == null))))){ col1.SetV(_arg2); col2.SetV(_arg3); } else { _local4 = Math.cos(_arg1); _local5 = Math.sin(_arg1); col1.x = _local4; col2.x = -(_local5); col1.y = _local5; col2.y = _local4; }; } public function SetIdentity():void{ col1.x = 1; col2.x = 0; col1.y = 0; col2.y = 1; } public function SetVV(_arg1:b2Vec2, _arg2:b2Vec2):void{ col1.SetV(_arg1); col2.SetV(_arg2); } public function Set(_arg1:Number):void{ var _local2:Number; _local2 = Math.cos(_arg1); var _local3:Number = Math.sin(_arg1); col1.x = _local2; col2.x = -(_local3); col1.y = _local3; col2.y = _local2; } public function SetZero():void{ col1.x = 0; col2.x = 0; col1.y = 0; col2.y = 0; } public function SetM(_arg1:b2Mat22):void{ col1.SetV(_arg1.col1); col2.SetV(_arg1.col2); } public function AddM(_arg1:b2Mat22):void{ col1.x = (col1.x + _arg1.col1.x); col1.y = (col1.y + _arg1.col1.y); col2.x = (col2.x + _arg1.col2.x); col2.y = (col2.y + _arg1.col2.y); } public function Abs():void{ col1.Abs(); col2.Abs(); } public function Copy():b2Mat22{ return (new b2Mat22(0, col1, col2)); } public function Invert(_arg1:b2Mat22):b2Mat22{ var _local2:Number; var _local4:Number; var _local6:Number; _local2 = col1.x; var _local3:Number = col2.x; _local4 = col1.y; var _local5:Number = col2.y; _local6 = ((_local2 * _local5) - (_local3 * _local4)); _local6 = (1 / _local6); _arg1.col1.x = (_local6 * _local5); _arg1.col2.x = (-(_local6) * _local3); _arg1.col1.y = (-(_local6) * _local4); _arg1.col2.y = (_local6 * _local2); return (_arg1); } public function Solve(_arg1:b2Vec2, _arg2:Number, _arg3:Number):b2Vec2{ var _local4:Number = col1.x; var _local5:Number = col2.x; var _local6:Number = col1.y; var _local7:Number = col2.y; var _local8:Number = ((_local4 * _local7) - (_local5 * _local6)); _local8 = (1 / _local8); _arg1.x = (_local8 * ((_local7 * _arg2) - (_local5 * _arg3))); _arg1.y = (_local8 * ((_local4 * _arg3) - (_local6 * _arg2))); return (_arg1); } } }//package Box2D.Common.Math
Section 27
//b2Math (Box2D.Common.Math.b2Math) package Box2D.Common.Math { public class b2Math { public static function b2CrossVF(_arg1:b2Vec2, _arg2:Number):b2Vec2{ var _local3:b2Vec2 = new b2Vec2((_arg2 * _arg1.y), (-(_arg2) * _arg1.x)); return (_local3); } public static function AddVV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2((_arg1.x + _arg2.x), (_arg1.y + _arg2.y)); return (_local3); } public static function b2IsValid(_arg1:Number):Boolean{ return (isFinite(_arg1)); } public static function b2Swap(_arg1:Array, _arg2:Array):void{ var _local3:* = _arg1[0]; _arg1[0] = _arg2[0]; _arg2[0] = _local3; } public static function b2Abs(_arg1:Number):Number{ return (((_arg1 > 0)) ? _arg1 : -(_arg1)); } public static function b2AbsM(_arg1:b2Mat22):b2Mat22{ var _local2:b2Mat22 = new b2Mat22(0, b2AbsV(_arg1.col1), b2AbsV(_arg1.col2)); return (_local2); } public static function SubtractVV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2((_arg1.x - _arg2.x), (_arg1.y - _arg2.y)); return (_local3); } public static function b2CrossVV(_arg1:b2Vec2, _arg2:b2Vec2):Number{ return (((_arg1.x * _arg2.y) - (_arg1.y * _arg2.x))); } public static function b2Clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{ return (b2Max(_arg2, b2Min(_arg1, _arg3))); } public static function b2AbsV(_arg1:b2Vec2):b2Vec2{ var _local2:b2Vec2 = new b2Vec2(b2Abs(_arg1.x), b2Abs(_arg1.y)); return (_local2); } public static function b2MinV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2(b2Min(_arg1.x, _arg2.x), b2Min(_arg1.y, _arg2.y)); return (_local3); } public static function b2Dot(_arg1:b2Vec2, _arg2:b2Vec2):Number{ return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y))); } public static function b2CrossFV(_arg1:Number, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2((-(_arg1) * _arg2.y), (_arg1 * _arg2.x)); return (_local3); } public static function AddMM(_arg1:b2Mat22, _arg2:b2Mat22):b2Mat22{ var _local3:b2Mat22 = new b2Mat22(0, AddVV(_arg1.col1, _arg2.col1), AddVV(_arg1.col2, _arg2.col2)); return (_local3); } public static function b2MulTMM(_arg1:b2Mat22, _arg2:b2Mat22):b2Mat22{ var _local3:b2Vec2 = new b2Vec2(b2Dot(_arg1.col1, _arg2.col1), b2Dot(_arg1.col2, _arg2.col1)); var _local4:b2Vec2 = new b2Vec2(b2Dot(_arg1.col1, _arg2.col2), b2Dot(_arg1.col2, _arg2.col2)); var _local5:b2Mat22 = new b2Mat22(0, _local3, _local4); return (_local5); } public static function b2MaxV(_arg1:b2Vec2, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2(b2Max(_arg1.x, _arg2.x), b2Max(_arg1.y, _arg2.y)); return (_local3); } public static function b2IsPowerOfTwo(_arg1:uint):Boolean{ var _local2:Boolean = (((_arg1 > 0)) && (((_arg1 & (_arg1 - 1)) == 0))); return (_local2); } public static function b2ClampV(_arg1:b2Vec2, _arg2:b2Vec2, _arg3:b2Vec2):b2Vec2{ return (b2MaxV(_arg2, b2MinV(_arg1, _arg3))); } public static function MulFV(_arg1:Number, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2((_arg1 * _arg2.x), (_arg1 * _arg2.y)); return (_local3); } public static function b2MulTMV(_arg1:b2Mat22, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2(b2Dot(_arg2, _arg1.col1), b2Dot(_arg2, _arg1.col2)); return (_local3); } public static function b2Min(_arg1:Number, _arg2:Number):Number{ return (((_arg1 < _arg2)) ? _arg1 : _arg2); } public static function b2Random():Number{ return (((Math.random() * 2) - 1)); } public static function b2MulMM(_arg1:b2Mat22, _arg2:b2Mat22):b2Mat22{ var _local3:b2Mat22 = new b2Mat22(0, b2MulMV(_arg1, _arg2.col1), b2MulMV(_arg1, _arg2.col2)); return (_local3); } public static function b2NextPowerOfTwo(_arg1:uint):uint{ _arg1 = (_arg1 | ((_arg1 >> 1) & 2147483647)); _arg1 = (_arg1 | ((_arg1 >> 2) & 1073741823)); _arg1 = (_arg1 | ((_arg1 >> 4) & 268435455)); _arg1 = (_arg1 | ((_arg1 >> 8) & 0xFFFFFF)); _arg1 = (_arg1 | ((_arg1 >> 16) & 0xFFFF)); return ((_arg1 + 1)); } public static function b2Max(_arg1:Number, _arg2:Number):Number{ return (((_arg1 > _arg2)) ? _arg1 : _arg2); } public static function b2MulMV(_arg1:b2Mat22, _arg2:b2Vec2):b2Vec2{ var _local3:b2Vec2 = new b2Vec2(((_arg1.col1.x * _arg2.x) + (_arg1.col2.x * _arg2.y)), ((_arg1.col1.y * _arg2.x) + (_arg1.col2.y * _arg2.y))); return (_local3); } } }//package Box2D.Common.Math
Section 28
//b2Vec2 (Box2D.Common.Math.b2Vec2) package Box2D.Common.Math { public class b2Vec2 { public var y:Number; public var x:Number; public function b2Vec2(_arg1:Number=0, _arg2:Number=0):void{ x = _arg1; y = _arg2; } public function Add(_arg1:b2Vec2):void{ x = (x + _arg1.x); y = (y + _arg1.y); } public function Set(_arg1:Number=0, _arg2:Number=0):void{ x = _arg1; y = _arg2; } public function Multiply(_arg1:Number):void{ x = (x * _arg1); y = (y * _arg1); } public function Length():Number{ return (Math.sqrt(((x * x) + (y * y)))); } public function MulM(_arg1:b2Mat22):void{ var _local2:Number = x; x = ((_arg1.col1.x * _local2) + (_arg1.col2.x * y)); y = ((_arg1.col1.y * _local2) + (_arg1.col2.y * y)); } public function SetZero():void{ x = 0; y = 0; } public function MinV(_arg1:b2Vec2):void{ x = ((x < _arg1.x)) ? x : _arg1.x; y = ((y < _arg1.y)) ? y : _arg1.y; } public function Normalize():Number{ var _local1:Number = Length(); if (_local1 < Number.MIN_VALUE){ return (0); }; var _local2:Number = (1 / _local1); x = (x * _local2); y = (y * _local2); return (_local1); } public function CrossVF(_arg1:Number):void{ var _local2:Number = x; x = (_arg1 * y); y = (-(_arg1) * _local2); } public function MaxV(_arg1:b2Vec2):void{ x = ((x > _arg1.x)) ? x : _arg1.x; y = ((y > _arg1.y)) ? y : _arg1.y; } public function SetV(_arg1:b2Vec2):void{ x = _arg1.x; y = _arg1.y; } public function Negative():b2Vec2{ return (new b2Vec2(-(x), -(y))); } public function CrossFV(_arg1:Number):void{ var _local2:Number = x; x = (-(_arg1) * y); y = (_arg1 * _local2); } public function Abs():void{ x = Math.abs(x); y = Math.abs(y); } public function Subtract(_arg1:b2Vec2):void{ x = (x - _arg1.x); y = (y - _arg1.y); } public function Copy():b2Vec2{ return (new b2Vec2(x, y)); } public function MulTM(_arg1:b2Mat22):void{ var _local2:Number = b2Math.b2Dot(this, _arg1.col1); y = b2Math.b2Dot(this, _arg1.col2); x = _local2; } public function IsValid():Boolean{ return (((b2Math.b2IsValid(x)) && (b2Math.b2IsValid(y)))); } public static function Make(_arg1:Number, _arg2:Number):b2Vec2{ return (new b2Vec2(_arg1, _arg2)); } } }//package Box2D.Common.Math
Section 29
//b2Settings (Box2D.Common.b2Settings) package Box2D.Common { import Box2D.Common.Math.*; public class b2Settings { public static const b2_lengthUnitsPerMeter:Number = 30; public static const b2_angularSleepTolerance:Number = 0.0111111111111111; public static const b2_linearSleepTolerance:Number = 0.3; public static const b2_angularSlop:Number = 0.0349065850398866; public static const b2_linearSlop:Number = 0.15; public static const b2_pi:Number = 3.14159265358979; public static const b2_maxShapesPerBody:int = 64; public static const b2_maxProxies:int = 0x0400; public static const b2_velocityThreshold:Number = 30; public static const b2_timeToSleep:Number = 0.5; public static const b2_contactBaumgarte:Number = 0.2; public static const b2_maxPairs:int = 8192; public static const b2_maxManifoldPoints:int = 2; public static const b2_massUnitsPerKilogram:Number = 1; public static const b2_maxAngularCorrection:Number = 0.139626340159546; public static const USHRT_MAX:int = 0xFFFF; public static const b2_maxLinearCorrection:Number = 6; public static const b2_maxPolyVertices:int = 8; public static const b2_timeUnitsPerSecond:Number = 1; public static function b2Assert(_arg1:Boolean):void{ var _local2:b2Vec2; if (!_arg1){ _local2.x++; }; } } }//package Box2D.Common
Section 30
//b2CircleContact (Box2D.Dynamics.Contacts.b2CircleContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2CircleContact extends b2Contact { public var m_manifold:Array; public function b2CircleContact(_arg1:b2Shape, _arg2:b2Shape){ m_manifold = [new b2Manifold()]; super(_arg1, _arg2); m_manifold[0].pointCount = 0; m_manifold[0].points[0].normalImpulse = 0; m_manifold[0].points[0].tangentImpulse = 0; } override public function Evaluate():void{ b2Collision.b2CollideCircle(m_manifold[0], (m_shape1 as b2CircleShape), (m_shape2 as b2CircleShape), false); if (m_manifold[0].pointCount > 0){ m_manifoldCount = 1; } else { m_manifoldCount = 0; }; } override public function GetManifolds():Array{ return (m_manifold); } public static function Destroy(_arg1:b2Contact, _arg2):void{ } public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{ return (new b2CircleContact(_arg1, _arg2)); } } }//package Box2D.Dynamics.Contacts
Section 31
//b2Contact (Box2D.Dynamics.Contacts.b2Contact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2Contact { public var m_shape1:b2Shape; public var m_shape2:b2Shape; public var m_next:b2Contact; public var m_prev:b2Contact; public var m_friction:Number; public var m_manifoldCount:int; public var m_node1:b2ContactNode; public var m_node2:b2ContactNode; public var m_restitution:Number; public var m_flags:uint; public static var s_registers:Array; public static var s_initialized:Boolean = false; public static var e_islandFlag:uint = 1; public static var e_destroyFlag:uint = 2; public function b2Contact(_arg1:b2Shape=null, _arg2:b2Shape=null){ m_node1 = new b2ContactNode(); m_node2 = new b2ContactNode(); super(); m_flags = 0; if (((!(_arg1)) || (!(_arg2)))){ m_shape1 = null; m_shape2 = null; return; }; m_shape1 = _arg1; m_shape2 = _arg2; m_manifoldCount = 0; m_friction = Math.sqrt((m_shape1.m_friction * m_shape2.m_friction)); m_restitution = b2Math.b2Max(m_shape1.m_restitution, m_shape2.m_restitution); m_prev = null; m_next = null; m_node1.contact = null; m_node1.prev = null; m_node1.next = null; m_node1.other = null; m_node2.contact = null; m_node2.prev = null; m_node2.next = null; m_node2.other = null; } public function GetShape1():b2Shape{ return (m_shape1); } public function GetShape2():b2Shape{ return (m_shape2); } public function GetManifoldCount():int{ return (m_manifoldCount); } public function GetNext():b2Contact{ return (m_next); } public function GetManifolds():Array{ return (null); } public function Evaluate():void{ } public static function InitializeRegisters():void{ var _local2:int; s_registers = new Array(b2Shape.e_shapeTypeCount); var _local1:int; while (_local1 < b2Shape.e_shapeTypeCount) { s_registers[_local1] = new Array(b2Shape.e_shapeTypeCount); _local2 = 0; while (_local2 < b2Shape.e_shapeTypeCount) { s_registers[_local1][_local2] = new b2ContactRegister(); _local2++; }; _local1++; }; AddType(b2CircleContact.Create, b2CircleContact.Destroy, b2Shape.e_circleShape, b2Shape.e_circleShape); AddType(b2PolyAndCircleContact.Create, b2PolyAndCircleContact.Destroy, b2Shape.e_polyShape, b2Shape.e_circleShape); AddType(b2PolyContact.Create, b2PolyContact.Destroy, b2Shape.e_polyShape, b2Shape.e_polyShape); } public static function Destroy(_arg1:b2Contact, _arg2):void{ if (_arg1.GetManifoldCount() > 0){ _arg1.m_shape1.m_body.WakeUp(); _arg1.m_shape2.m_body.WakeUp(); }; var _local3:int = _arg1.m_shape1.m_type; var _local4:int = _arg1.m_shape2.m_type; var _local5:* = s_registers[_local3][_local4].destroyFcn; _local5(_arg1, _arg2); } public static function AddType(_arg1, _arg2, _arg3:int, _arg4:int):void{ s_registers[_arg3][_arg4].createFcn = _arg1; s_registers[_arg3][_arg4].destroyFcn = _arg2; s_registers[_arg3][_arg4].primary = true; if (_arg3 != _arg4){ s_registers[_arg4][_arg3].createFcn = _arg1; s_registers[_arg4][_arg3].destroyFcn = _arg2; s_registers[_arg4][_arg3].primary = false; }; } public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{ var _local7:b2Contact; var _local8:int; var _local9:b2Manifold; if (s_initialized == false){ InitializeRegisters(); s_initialized = true; }; var _local4:int = _arg1.m_type; var _local5:int = _arg2.m_type; var _local6:* = s_registers[_local4][_local5].createFcn; if (_local6){ if (s_registers[_local4][_local5].primary){ return (_local6(_arg1, _arg2, _arg3)); }; _local7 = _local6(_arg2, _arg1, _arg3); _local8 = 0; while (_local8 < _local7.GetManifoldCount()) { _local9 = _local7.GetManifolds()[_local8]; _local7.GetManifolds()[_local8].normal = _local9.normal.Negative(); _local8++; }; return (_local7); //unresolved jump }; return (null); } } }//package Box2D.Dynamics.Contacts
Section 32
//b2ContactConstraint (Box2D.Dynamics.Contacts.b2ContactConstraint) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2ContactConstraint { public var points:Array; public var normal:b2Vec2; public var restitution:Number; public var body1:b2Body; public var manifold:b2Manifold; public var body2:b2Body; public var friction:Number; public var pointCount:int; public function b2ContactConstraint(){ normal = new b2Vec2(); super(); points = new Array(b2Settings.b2_maxManifoldPoints); var _local1:int; while (_local1 < b2Settings.b2_maxManifoldPoints) { points[_local1] = new b2ContactConstraintPoint(); _local1++; }; } } }//package Box2D.Dynamics.Contacts
Section 33
//b2ContactConstraintPoint (Box2D.Dynamics.Contacts.b2ContactConstraintPoint) package Box2D.Dynamics.Contacts { import Box2D.Common.Math.*; public class b2ContactConstraintPoint { public var separation:Number; public var positionImpulse:Number; public var normalImpulse:Number; public var tangentImpulse:Number; public var localAnchor1:b2Vec2; public var localAnchor2:b2Vec2; public var tangentMass:Number; public var normalMass:Number; public var velocityBias:Number; public function b2ContactConstraintPoint(){ localAnchor1 = new b2Vec2(); localAnchor2 = new b2Vec2(); super(); } } }//package Box2D.Dynamics.Contacts
Section 34
//b2ContactNode (Box2D.Dynamics.Contacts.b2ContactNode) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; public class b2ContactNode { public var other:b2Body; public var prev:b2ContactNode; public var contact:b2Contact; public var next:b2ContactNode; } }//package Box2D.Dynamics.Contacts
Section 35
//b2ContactRegister (Box2D.Dynamics.Contacts.b2ContactRegister) package Box2D.Dynamics.Contacts { public class b2ContactRegister { public var primary:Boolean; public var createFcn; public var destroyFcn; } }//package Box2D.Dynamics.Contacts
Section 36
//b2ContactSolver (Box2D.Dynamics.Contacts.b2ContactSolver) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2ContactSolver { public var m_constraintCount:int; public var m_constraints:Array; public var m_allocator; public function b2ContactSolver(_arg1:Array, _arg2:int, _arg3){ var _local4:int; var _local5:b2Vec2; var _local6:b2Mat22; var _local8:b2Contact; var _local9:b2Body; var _local10:b2Body; var _local11:int; var _local12:Array; 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:int; var _local22:b2Manifold; var _local23:Number; var _local24:Number; var _local25:b2ContactConstraint; var _local26:uint; var _local27:b2ContactPoint; var _local28:b2ContactConstraintPoint; var _local29:Number; var _local30:Number; var _local31:Number; var _local32:Number; var _local33:Number; var _local34:Number; var _local35:Number; var _local36:Number; var _local37:Number; var _local38:Number; var _local39:Number; var _local40:Number; var _local41:Number; var _local42:Number; var _local43:Number; var _local44:Number; var _local45:Number; m_constraints = new Array(); super(); m_allocator = _arg3; m_constraintCount = 0; _local4 = 0; while (_local4 < _arg2) { m_constraintCount = (m_constraintCount + _arg1[_local4].GetManifoldCount()); _local4++; }; _local4 = 0; while (_local4 < m_constraintCount) { m_constraints[_local4] = new b2ContactConstraint(); _local4++; }; var _local7:int; _local4 = 0; while (_local4 < _arg2) { _local8 = _arg1[_local4]; _local9 = _local8.m_shape1.m_body; _local10 = _local8.m_shape2.m_body; _local11 = _local8.GetManifoldCount(); _local12 = _local8.GetManifolds(); _local13 = _local8.m_friction; _local14 = _local8.m_restitution; _local15 = _local9.m_linearVelocity.x; _local16 = _local9.m_linearVelocity.y; _local17 = _local10.m_linearVelocity.x; _local18 = _local10.m_linearVelocity.y; _local19 = _local9.m_angularVelocity; _local20 = _local10.m_angularVelocity; _local21 = 0; while (_local21 < _local11) { _local22 = _local12[_local21]; _local23 = _local22.normal.x; _local24 = _local22.normal.y; _local25 = m_constraints[_local7]; _local25.body1 = _local9; _local25.body2 = _local10; _local25.manifold = _local22; _local25.normal.x = _local23; _local25.normal.y = _local24; _local25.pointCount = _local22.pointCount; _local25.friction = _local13; _local25.restitution = _local14; _local26 = 0; while (_local26 < _local25.pointCount) { _local27 = _local22.points[_local26]; _local28 = _local25.points[_local26]; _local28.normalImpulse = _local27.normalImpulse; _local28.tangentImpulse = _local27.tangentImpulse; _local28.separation = _local27.separation; _local29 = (_local27.position.x - _local9.m_position.x); _local30 = (_local27.position.y - _local9.m_position.y); _local31 = (_local27.position.x - _local10.m_position.x); _local32 = (_local27.position.y - _local10.m_position.y); _local5 = _local28.localAnchor1; _local6 = _local9.m_R; _local5.x = ((_local29 * _local6.col1.x) + (_local30 * _local6.col1.y)); _local5.y = ((_local29 * _local6.col2.x) + (_local30 * _local6.col2.y)); _local5 = _local28.localAnchor2; _local6 = _local10.m_R; _local5.x = ((_local31 * _local6.col1.x) + (_local32 * _local6.col1.y)); _local5.y = ((_local31 * _local6.col2.x) + (_local32 * _local6.col2.y)); _local33 = ((_local29 * _local29) + (_local30 * _local30)); _local34 = ((_local31 * _local31) + (_local32 * _local32)); _local35 = ((_local29 * _local23) + (_local30 * _local24)); _local36 = ((_local31 * _local23) + (_local32 * _local24)); _local37 = (_local9.m_invMass + _local10.m_invMass); _local37 = (_local37 + ((_local9.m_invI * (_local33 - (_local35 * _local35))) + (_local10.m_invI * (_local34 - (_local36 * _local36))))); _local28.normalMass = (1 / _local37); _local38 = _local24; _local39 = -(_local23); _local40 = ((_local29 * _local38) + (_local30 * _local39)); _local41 = ((_local31 * _local38) + (_local32 * _local39)); _local42 = (_local9.m_invMass + _local10.m_invMass); _local42 = (_local42 + ((_local9.m_invI * (_local33 - (_local40 * _local40))) + (_local10.m_invI * (_local34 - (_local41 * _local41))))); _local28.tangentMass = (1 / _local42); _local28.velocityBias = 0; if (_local28.separation > 0){ _local28.velocityBias = (-60 * _local28.separation); }; _local43 = (((_local17 + (-(_local20) * _local32)) - _local15) - (-(_local19) * _local30)); _local44 = (((_local18 + (_local20 * _local31)) - _local16) - (_local19 * _local29)); _local45 = ((_local25.normal.x * _local43) + (_local25.normal.y * _local44)); if (_local45 < -(b2Settings.b2_velocityThreshold)){ _local28.velocityBias = (_local28.velocityBias + (-(_local25.restitution) * _local45)); }; _local26++; }; _local7++; _local21++; }; _local4++; }; } public function SolveVelocityConstraints():void{ var _local1:int; var _local2:b2ContactConstraintPoint; 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:b2Mat22; var _local14:b2Vec2; var _local16:b2ContactConstraint; var _local17:b2Body; var _local18:b2Body; var _local19:Number; var _local20:b2Vec2; var _local21:Number; var _local22:b2Vec2; var _local23:Number; var _local24:Number; var _local25:Number; var _local26:Number; var _local27:Number; var _local28:Number; var _local29:Number; var _local30:Number; var _local31:int; var _local32:Number; var _local33:Number; var _local34:Number; var _local15:int; while (_local15 < m_constraintCount) { _local16 = m_constraints[_local15]; _local17 = _local16.body1; _local18 = _local16.body2; _local19 = _local17.m_angularVelocity; _local20 = _local17.m_linearVelocity; _local21 = _local18.m_angularVelocity; _local22 = _local18.m_linearVelocity; _local23 = _local17.m_invMass; _local24 = _local17.m_invI; _local25 = _local18.m_invMass; _local26 = _local18.m_invI; _local27 = _local16.normal.x; _local28 = _local16.normal.y; _local29 = _local28; _local30 = -(_local27); _local31 = _local16.pointCount; _local1 = 0; while (_local1 < _local31) { _local2 = _local16.points[_local1]; _local13 = _local17.m_R; _local14 = _local2.localAnchor1; _local3 = ((_local13.col1.x * _local14.x) + (_local13.col2.x * _local14.y)); _local4 = ((_local13.col1.y * _local14.x) + (_local13.col2.y * _local14.y)); _local13 = _local18.m_R; _local14 = _local2.localAnchor2; _local5 = ((_local13.col1.x * _local14.x) + (_local13.col2.x * _local14.y)); _local6 = ((_local13.col1.y * _local14.x) + (_local13.col2.y * _local14.y)); _local7 = (((_local22.x + (-(_local21) * _local6)) - _local20.x) - (-(_local19) * _local4)); _local8 = (((_local22.y + (_local21 * _local5)) - _local20.y) - (_local19 * _local3)); _local32 = ((_local7 * _local27) + (_local8 * _local28)); _local9 = (-(_local2.normalMass) * (_local32 - _local2.velocityBias)); _local10 = b2Math.b2Max((_local2.normalImpulse + _local9), 0); _local9 = (_local10 - _local2.normalImpulse); _local11 = (_local9 * _local27); _local12 = (_local9 * _local28); _local20.x = (_local20.x - (_local23 * _local11)); _local20.y = (_local20.y - (_local23 * _local12)); _local19 = (_local19 - (_local24 * ((_local3 * _local12) - (_local4 * _local11)))); _local22.x = (_local22.x + (_local25 * _local11)); _local22.y = (_local22.y + (_local25 * _local12)); _local21 = (_local21 + (_local26 * ((_local5 * _local12) - (_local6 * _local11)))); _local2.normalImpulse = _local10; _local7 = (((_local22.x + (-(_local21) * _local6)) - _local20.x) - (-(_local19) * _local4)); _local8 = (((_local22.y + (_local21 * _local5)) - _local20.y) - (_local19 * _local3)); _local33 = ((_local7 * _local29) + (_local8 * _local30)); _local9 = (_local2.tangentMass * -(_local33)); _local34 = (_local16.friction * _local2.normalImpulse); _local10 = b2Math.b2Clamp((_local2.tangentImpulse + _local9), -(_local34), _local34); _local9 = (_local10 - _local2.tangentImpulse); _local11 = (_local9 * _local29); _local12 = (_local9 * _local30); _local20.x = (_local20.x - (_local23 * _local11)); _local20.y = (_local20.y - (_local23 * _local12)); _local19 = (_local19 - (_local24 * ((_local3 * _local12) - (_local4 * _local11)))); _local22.x = (_local22.x + (_local25 * _local11)); _local22.y = (_local22.y + (_local25 * _local12)); _local21 = (_local21 + (_local26 * ((_local5 * _local12) - (_local6 * _local11)))); _local2.tangentImpulse = _local10; _local1++; }; _local17.m_angularVelocity = _local19; _local18.m_angularVelocity = _local21; _local15++; }; } public function PreSolve():void{ var _local1:b2Vec2; var _local2:b2Vec2; var _local3:b2Mat22; var _local5:b2ContactConstraint; var _local6:b2Body; var _local7:b2Body; 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:int; var _local17:int; var _local18:b2ContactConstraintPoint; var _local19:Number; var _local20:Number; var _local21:Number; var _local22:Number; var _local23:Number; var _local24:Number; var _local25:b2ContactConstraintPoint; var _local4:int; while (_local4 < m_constraintCount) { _local5 = m_constraints[_local4]; _local6 = _local5.body1; _local7 = _local5.body2; _local8 = _local6.m_invMass; _local9 = _local6.m_invI; _local10 = _local7.m_invMass; _local11 = _local7.m_invI; _local12 = _local5.normal.x; _local13 = _local5.normal.y; _local14 = _local13; _local15 = -(_local12); if (b2World.s_enableWarmStarting){ _local17 = _local5.pointCount; _local16 = 0; while (_local16 < _local17) { _local18 = _local5.points[_local16]; _local19 = ((_local18.normalImpulse * _local12) + (_local18.tangentImpulse * _local14)); _local20 = ((_local18.normalImpulse * _local13) + (_local18.tangentImpulse * _local15)); _local3 = _local6.m_R; _local1 = _local18.localAnchor1; _local21 = ((_local3.col1.x * _local1.x) + (_local3.col2.x * _local1.y)); _local22 = ((_local3.col1.y * _local1.x) + (_local3.col2.y * _local1.y)); _local3 = _local7.m_R; _local1 = _local18.localAnchor2; _local23 = ((_local3.col1.x * _local1.x) + (_local3.col2.x * _local1.y)); _local24 = ((_local3.col1.y * _local1.x) + (_local3.col2.y * _local1.y)); _local6.m_angularVelocity = (_local6.m_angularVelocity - (_local9 * ((_local21 * _local20) - (_local22 * _local19)))); _local6.m_linearVelocity.x = (_local6.m_linearVelocity.x - (_local8 * _local19)); _local6.m_linearVelocity.y = (_local6.m_linearVelocity.y - (_local8 * _local20)); _local7.m_angularVelocity = (_local7.m_angularVelocity + (_local11 * ((_local23 * _local20) - (_local24 * _local19)))); _local7.m_linearVelocity.x = (_local7.m_linearVelocity.x + (_local10 * _local19)); _local7.m_linearVelocity.y = (_local7.m_linearVelocity.y + (_local10 * _local20)); _local18.positionImpulse = 0; _local16++; }; } else { _local17 = _local5.pointCount; _local16 = 0; while (_local16 < _local17) { _local25 = _local5.points[_local16]; _local25.normalImpulse = 0; _local25.tangentImpulse = 0; _local25.positionImpulse = 0; _local16++; }; }; _local4++; }; } public function SolvePositionConstraints(_arg1:Number):Boolean{ var _local3:b2Mat22; var _local4:b2Vec2; var _local6:b2ContactConstraint; var _local7:b2Body; var _local8:b2Body; var _local9:b2Vec2; var _local10:Number; var _local11:b2Vec2; 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:int; var _local22:int; var _local23:b2ContactConstraintPoint; var _local24:Number; var _local25:Number; var _local26:Number; var _local27:Number; var _local28:Number; var _local29:Number; var _local30:Number; var _local31:Number; var _local32:Number; var _local33:Number; var _local34:Number; var _local35:Number; var _local36:Number; var _local37:Number; var _local38:Number; var _local39:Number; var _local2:Number = 0; var _local5:int; while (_local5 < m_constraintCount) { _local6 = m_constraints[_local5]; _local7 = _local6.body1; _local8 = _local6.body2; _local9 = _local7.m_position; _local10 = _local7.m_rotation; _local11 = _local8.m_position; _local12 = _local8.m_rotation; _local13 = _local7.m_invMass; _local14 = _local7.m_invI; _local15 = _local8.m_invMass; _local16 = _local8.m_invI; _local17 = _local6.normal.x; _local18 = _local6.normal.y; _local19 = _local18; _local20 = -(_local17); _local21 = _local6.pointCount; _local22 = 0; while (_local22 < _local21) { _local23 = _local6.points[_local22]; _local3 = _local7.m_R; _local4 = _local23.localAnchor1; _local24 = ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y)); _local25 = ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y)); _local3 = _local8.m_R; _local4 = _local23.localAnchor2; _local26 = ((_local3.col1.x * _local4.x) + (_local3.col2.x * _local4.y)); _local27 = ((_local3.col1.y * _local4.x) + (_local3.col2.y * _local4.y)); _local28 = (_local9.x + _local24); _local29 = (_local9.y + _local25); _local30 = (_local11.x + _local26); _local31 = (_local11.y + _local27); _local32 = (_local30 - _local28); _local33 = (_local31 - _local29); _local34 = (((_local32 * _local17) + (_local33 * _local18)) + _local23.separation); _local2 = b2Math.b2Min(_local2, _local34); _local35 = (_arg1 * b2Math.b2Clamp((_local34 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0)); _local36 = (-(_local23.normalMass) * _local35); _local37 = _local23.positionImpulse; _local23.positionImpulse = b2Math.b2Max((_local37 + _local36), 0); _local36 = (_local23.positionImpulse - _local37); _local38 = (_local36 * _local17); _local39 = (_local36 * _local18); _local9.x = (_local9.x - (_local13 * _local38)); _local9.y = (_local9.y - (_local13 * _local39)); _local10 = (_local10 - (_local14 * ((_local24 * _local39) - (_local25 * _local38)))); _local7.m_R.Set(_local10); _local11.x = (_local11.x + (_local15 * _local38)); _local11.y = (_local11.y + (_local15 * _local39)); _local12 = (_local12 + (_local16 * ((_local26 * _local39) - (_local27 * _local38)))); _local8.m_R.Set(_local12); _local22++; }; _local7.m_rotation = _local10; _local8.m_rotation = _local12; _local5++; }; return ((_local2 >= -(b2Settings.b2_linearSlop))); } public function PostSolve():void{ var _local2:b2ContactConstraint; var _local3:b2Manifold; var _local4:int; var _local5:b2ContactPoint; var _local6:b2ContactConstraintPoint; var _local1:int; while (_local1 < m_constraintCount) { _local2 = m_constraints[_local1]; _local3 = _local2.manifold; _local4 = 0; while (_local4 < _local2.pointCount) { _local5 = _local3.points[_local4]; _local6 = _local2.points[_local4]; _local5.normalImpulse = _local6.normalImpulse; _local5.tangentImpulse = _local6.tangentImpulse; _local4++; }; _local1++; }; } } }//package Box2D.Dynamics.Contacts
Section 37
//b2NullContact (Box2D.Dynamics.Contacts.b2NullContact) package Box2D.Dynamics.Contacts { public class b2NullContact extends b2Contact { public function b2NullContact():void{ } override public function Evaluate():void{ } override public function GetManifolds():Array{ return (null); } } }//package Box2D.Dynamics.Contacts
Section 38
//b2PolyAndCircleContact (Box2D.Dynamics.Contacts.b2PolyAndCircleContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2PolyAndCircleContact extends b2Contact { public var m_manifold:Array; public function b2PolyAndCircleContact(_arg1:b2Shape, _arg2:b2Shape){ m_manifold = [new b2Manifold()]; super(_arg1, _arg2); b2Settings.b2Assert((m_shape1.m_type == b2Shape.e_polyShape)); b2Settings.b2Assert((m_shape2.m_type == b2Shape.e_circleShape)); m_manifold[0].pointCount = 0; m_manifold[0].points[0].normalImpulse = 0; m_manifold[0].points[0].tangentImpulse = 0; } override public function Evaluate():void{ b2Collision.b2CollidePolyAndCircle(m_manifold[0], (m_shape1 as b2PolyShape), (m_shape2 as b2CircleShape), false); if (m_manifold[0].pointCount > 0){ m_manifoldCount = 1; } else { m_manifoldCount = 0; }; } override public function GetManifolds():Array{ return (m_manifold); } public static function Destroy(_arg1:b2Contact, _arg2):void{ } public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{ return (new b2PolyAndCircleContact(_arg1, _arg2)); } } }//package Box2D.Dynamics.Contacts
Section 39
//b2PolyContact (Box2D.Dynamics.Contacts.b2PolyContact) package Box2D.Dynamics.Contacts { import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2PolyContact extends b2Contact { public var m_manifold:Array; private var m0:b2Manifold; public function b2PolyContact(_arg1:b2Shape, _arg2:b2Shape):void{ m0 = new b2Manifold(); m_manifold = [new b2Manifold()]; super(_arg1, _arg2); m_manifold[0].pointCount = 0; } override public function Evaluate():void{ var _local4:b2ContactPoint; var _local5:b2ContactPoint; var _local6:Array; var _local7:int; var _local8:b2ContactPoint; var _local9:uint; var _local10:int; var _local11:b2ContactPoint; var _local12:b2ContactID; var _local1:b2Manifold = m_manifold[0]; var _local2:Array = m0.points; var _local3:int; while (_local3 < _local1.pointCount) { _local4 = _local2[_local3]; _local5 = _local1.points[_local3]; _local4.normalImpulse = _local5.normalImpulse; _local4.tangentImpulse = _local5.tangentImpulse; _local4.id = _local5.id.Copy(); _local3++; }; m0.pointCount = _local1.pointCount; b2Collision.b2CollidePoly(_local1, (m_shape1 as b2PolyShape), (m_shape2 as b2PolyShape), false); if (_local1.pointCount > 0){ _local6 = [false, false]; _local7 = 0; while (_local7 < _local1.pointCount) { _local8 = _local1.points[_local7]; _local8.normalImpulse = 0; _local8.tangentImpulse = 0; _local9 = _local8.id.key; _local10 = 0; while (_local10 < m0.pointCount) { if (_local6[_local10] == true){ } else { _local11 = m0.points[_local10]; _local12 = _local11.id; if (_local12.key == _local9){ _local6[_local10] = true; _local8.normalImpulse = _local11.normalImpulse; _local8.tangentImpulse = _local11.tangentImpulse; break; }; }; _local10++; }; _local7++; }; m_manifoldCount = 1; } else { m_manifoldCount = 0; }; } override public function GetManifolds():Array{ return (m_manifold); } public static function Destroy(_arg1:b2Contact, _arg2):void{ } public static function Create(_arg1:b2Shape, _arg2:b2Shape, _arg3):b2Contact{ return (new b2PolyContact(_arg1, _arg2)); } } }//package Box2D.Dynamics.Contacts
Section 40
//b2DistanceJoint (Box2D.Dynamics.Joints.b2DistanceJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2DistanceJoint extends b2Joint { public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_u:b2Vec2; public var m_impulse:Number; public var m_length:Number; public var m_mass:Number; public function b2DistanceJoint(_arg1:b2DistanceJointDef){ var _local2:b2Mat22; var _local3:Number; var _local4:Number; m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_u = new b2Vec2(); super(_arg1); _local2 = m_body1.m_R; _local3 = (_arg1.anchorPoint1.x - m_body1.m_position.x); _local4 = (_arg1.anchorPoint1.y - m_body1.m_position.y); m_localAnchor1.x = ((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)); m_localAnchor1.y = ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y)); _local2 = m_body2.m_R; _local3 = (_arg1.anchorPoint2.x - m_body2.m_position.x); _local4 = (_arg1.anchorPoint2.y - m_body2.m_position.y); m_localAnchor2.x = ((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)); m_localAnchor2.y = ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y)); _local3 = (_arg1.anchorPoint2.x - _arg1.anchorPoint1.x); _local4 = (_arg1.anchorPoint2.y - _arg1.anchorPoint1.y); m_length = Math.sqrt(((_local3 * _local3) + (_local4 * _local4))); m_impulse = 0; } override public function GetAnchor1():b2Vec2{ return (b2Math.AddVV(m_body1.m_position, b2Math.b2MulMV(m_body1.m_R, m_localAnchor1))); } override public function GetAnchor2():b2Vec2{ return (b2Math.AddVV(m_body2.m_position, b2Math.b2MulMV(m_body2.m_R, m_localAnchor2))); } override public function GetReactionTorque(_arg1:Number):Number{ return (0); } override public function GetReactionForce(_arg1:Number):b2Vec2{ var _local2:b2Vec2 = new b2Vec2(); _local2.SetV(m_u); _local2.Multiply((m_impulse * _arg1)); return (_local2); } override public function SolvePositionConstraints():Boolean{ var _local1:b2Mat22; _local1 = m_body1.m_R; var _local2:Number = ((_local1.col1.x * m_localAnchor1.x) + (_local1.col2.x * m_localAnchor1.y)); var _local3:Number = ((_local1.col1.y * m_localAnchor1.x) + (_local1.col2.y * m_localAnchor1.y)); _local1 = m_body2.m_R; var _local4:Number = ((_local1.col1.x * m_localAnchor2.x) + (_local1.col2.x * m_localAnchor2.y)); var _local5:Number = ((_local1.col1.y * m_localAnchor2.x) + (_local1.col2.y * m_localAnchor2.y)); var _local6:Number = (((m_body2.m_position.x + _local4) - m_body1.m_position.x) - _local2); var _local7:Number = (((m_body2.m_position.y + _local5) - m_body1.m_position.y) - _local3); var _local8:Number = Math.sqrt(((_local6 * _local6) + (_local7 * _local7))); _local6 = (_local6 / _local8); _local7 = (_local7 / _local8); var _local9:Number = (_local8 - m_length); _local9 = b2Math.b2Clamp(_local9, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); var _local10:Number = (-(m_mass) * _local9); m_u.Set(_local6, _local7); var _local11:Number = (_local10 * m_u.x); var _local12:Number = (_local10 * m_u.y); m_body1.m_position.x = (m_body1.m_position.x - (m_body1.m_invMass * _local11)); m_body1.m_position.y = (m_body1.m_position.y - (m_body1.m_invMass * _local12)); m_body1.m_rotation = (m_body1.m_rotation - (m_body1.m_invI * ((_local2 * _local12) - (_local3 * _local11)))); m_body2.m_position.x = (m_body2.m_position.x + (m_body2.m_invMass * _local11)); m_body2.m_position.y = (m_body2.m_position.y + (m_body2.m_invMass * _local12)); m_body2.m_rotation = (m_body2.m_rotation + (m_body2.m_invI * ((_local4 * _local12) - (_local5 * _local11)))); m_body1.m_R.Set(m_body1.m_rotation); m_body2.m_R.Set(m_body2.m_rotation); return ((b2Math.b2Abs(_local9) < b2Settings.b2_linearSlop)); } override public function PrepareVelocitySolver():void{ var _local1:b2Mat22; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local9:Number; var _local10:Number; _local1 = m_body1.m_R; _local2 = ((_local1.col1.x * m_localAnchor1.x) + (_local1.col2.x * m_localAnchor1.y)); _local3 = ((_local1.col1.y * m_localAnchor1.x) + (_local1.col2.y * m_localAnchor1.y)); _local1 = m_body2.m_R; _local4 = ((_local1.col1.x * m_localAnchor2.x) + (_local1.col2.x * m_localAnchor2.y)); _local5 = ((_local1.col1.y * m_localAnchor2.x) + (_local1.col2.y * m_localAnchor2.y)); m_u.x = (((m_body2.m_position.x + _local4) - m_body1.m_position.x) - _local2); m_u.y = (((m_body2.m_position.y + _local5) - m_body1.m_position.y) - _local3); var _local6:Number = Math.sqrt(((m_u.x * m_u.x) + (m_u.y * m_u.y))); if (_local6 > b2Settings.b2_linearSlop){ m_u.Multiply((1 / _local6)); } else { m_u.SetZero(); }; var _local7:Number = ((_local2 * m_u.y) - (_local3 * m_u.x)); var _local8:Number = ((_local4 * m_u.y) - (_local5 * m_u.x)); m_mass = (((m_body1.m_invMass + ((m_body1.m_invI * _local7) * _local7)) + m_body2.m_invMass) + ((m_body2.m_invI * _local8) * _local8)); m_mass = (1 / m_mass); if (b2World.s_enableWarmStarting){ _local9 = (m_impulse * m_u.x); _local10 = (m_impulse * m_u.y); m_body1.m_linearVelocity.x = (m_body1.m_linearVelocity.x - (m_body1.m_invMass * _local9)); m_body1.m_linearVelocity.y = (m_body1.m_linearVelocity.y - (m_body1.m_invMass * _local10)); m_body1.m_angularVelocity = (m_body1.m_angularVelocity - (m_body1.m_invI * ((_local2 * _local10) - (_local3 * _local9)))); m_body2.m_linearVelocity.x = (m_body2.m_linearVelocity.x + (m_body2.m_invMass * _local9)); m_body2.m_linearVelocity.y = (m_body2.m_linearVelocity.y + (m_body2.m_invMass * _local10)); m_body2.m_angularVelocity = (m_body2.m_angularVelocity + (m_body2.m_invI * ((_local4 * _local10) - (_local5 * _local9)))); } else { m_impulse = 0; }; } override public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ var _local2:b2Mat22; _local2 = m_body1.m_R; var _local3:Number = ((_local2.col1.x * m_localAnchor1.x) + (_local2.col2.x * m_localAnchor1.y)); var _local4:Number = ((_local2.col1.y * m_localAnchor1.x) + (_local2.col2.y * m_localAnchor1.y)); _local2 = m_body2.m_R; var _local5:Number = ((_local2.col1.x * m_localAnchor2.x) + (_local2.col2.x * m_localAnchor2.y)); var _local6:Number = ((_local2.col1.y * m_localAnchor2.x) + (_local2.col2.y * m_localAnchor2.y)); var _local7:Number = (m_body1.m_linearVelocity.x + (-(m_body1.m_angularVelocity) * _local4)); var _local8:Number = (m_body1.m_linearVelocity.y + (m_body1.m_angularVelocity * _local3)); var _local9:Number = (m_body2.m_linearVelocity.x + (-(m_body2.m_angularVelocity) * _local6)); var _local10:Number = (m_body2.m_linearVelocity.y + (m_body2.m_angularVelocity * _local5)); var _local11:Number = ((m_u.x * (_local9 - _local7)) + (m_u.y * (_local10 - _local8))); var _local12:Number = (-(m_mass) * _local11); m_impulse = (m_impulse + _local12); var _local13:Number = (_local12 * m_u.x); var _local14:Number = (_local12 * m_u.y); m_body1.m_linearVelocity.x = (m_body1.m_linearVelocity.x - (m_body1.m_invMass * _local13)); m_body1.m_linearVelocity.y = (m_body1.m_linearVelocity.y - (m_body1.m_invMass * _local14)); m_body1.m_angularVelocity = (m_body1.m_angularVelocity - (m_body1.m_invI * ((_local3 * _local14) - (_local4 * _local13)))); m_body2.m_linearVelocity.x = (m_body2.m_linearVelocity.x + (m_body2.m_invMass * _local13)); m_body2.m_linearVelocity.y = (m_body2.m_linearVelocity.y + (m_body2.m_invMass * _local14)); m_body2.m_angularVelocity = (m_body2.m_angularVelocity + (m_body2.m_invI * ((_local5 * _local14) - (_local6 * _local13)))); } } }//package Box2D.Dynamics.Joints
Section 41
//b2DistanceJointDef (Box2D.Dynamics.Joints.b2DistanceJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2DistanceJointDef extends b2JointDef { public var anchorPoint1:b2Vec2; public var anchorPoint2:b2Vec2; public function b2DistanceJointDef(){ anchorPoint1 = new b2Vec2(); anchorPoint2 = new b2Vec2(); super(); type = b2Joint.e_distanceJoint; } } }//package Box2D.Dynamics.Joints
Section 42
//b2GearJoint (Box2D.Dynamics.Joints.b2GearJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2GearJoint extends b2Joint { public var m_ground2:b2Body; public var m_groundAnchor1:b2Vec2; public var m_groundAnchor2:b2Vec2; public var m_revolute2:b2RevoluteJoint; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_ratio:Number; public var m_mass:Number; public var m_impulse:Number; public var m_prismatic2:b2PrismaticJoint; public var m_ground1:b2Body; public var m_revolute1:b2RevoluteJoint; public var m_prismatic1:b2PrismaticJoint; public var m_constant:Number; public var m_J:b2Jacobian; public function b2GearJoint(_arg1:b2GearJointDef){ var _local2:Number; var _local3:Number; m_groundAnchor1 = new b2Vec2(); m_groundAnchor2 = new b2Vec2(); m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_J = new b2Jacobian(); super(_arg1); m_revolute1 = null; m_prismatic1 = null; m_revolute2 = null; m_prismatic2 = null; m_ground1 = _arg1.joint1.m_body1; m_body1 = _arg1.joint1.m_body2; if (_arg1.joint1.m_type == b2Joint.e_revoluteJoint){ m_revolute1 = (_arg1.joint1 as b2RevoluteJoint); m_groundAnchor1.SetV(m_revolute1.m_localAnchor1); m_localAnchor1.SetV(m_revolute1.m_localAnchor2); _local2 = m_revolute1.GetJointAngle(); } else { m_prismatic1 = (_arg1.joint1 as b2PrismaticJoint); m_groundAnchor1.SetV(m_prismatic1.m_localAnchor1); m_localAnchor1.SetV(m_prismatic1.m_localAnchor2); _local2 = m_prismatic1.GetJointTranslation(); }; m_ground2 = _arg1.joint2.m_body1; m_body2 = _arg1.joint2.m_body2; if (_arg1.joint2.m_type == b2Joint.e_revoluteJoint){ m_revolute2 = (_arg1.joint2 as b2RevoluteJoint); m_groundAnchor2.SetV(m_revolute2.m_localAnchor1); m_localAnchor2.SetV(m_revolute2.m_localAnchor2); _local3 = m_revolute2.GetJointAngle(); } else { m_prismatic2 = (_arg1.joint2 as b2PrismaticJoint); m_groundAnchor2.SetV(m_prismatic2.m_localAnchor1); m_localAnchor2.SetV(m_prismatic2.m_localAnchor2); _local3 = m_prismatic2.GetJointTranslation(); }; m_ratio = _arg1.ratio; m_constant = (_local2 + (m_ratio * _local3)); m_impulse = 0; } override public function GetAnchor1():b2Vec2{ var _local1:b2Mat22 = m_body1.m_R; return (new b2Vec2((m_body1.m_position.x + ((_local1.col1.x * m_localAnchor1.x) + (_local1.col2.x * m_localAnchor1.y))), (m_body1.m_position.y + ((_local1.col1.y * m_localAnchor1.x) + (_local1.col2.y * m_localAnchor1.y))))); } override public function GetAnchor2():b2Vec2{ var _local1:b2Mat22 = m_body2.m_R; return (new b2Vec2((m_body2.m_position.x + ((_local1.col1.x * m_localAnchor2.x) + (_local1.col2.x * m_localAnchor2.y))), (m_body2.m_position.y + ((_local1.col1.y * m_localAnchor2.x) + (_local1.col2.y * m_localAnchor2.y))))); } override public function PrepareVelocitySolver():void{ var _local3:b2Body; var _local4:b2Body; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:b2Mat22; var _local10:b2Vec2; var _local11:Number; var _local1:b2Body = m_ground1; var _local2:b2Body = m_ground2; _local3 = m_body1; _local4 = m_body2; var _local12:Number = 0; m_J.SetZero(); if (m_revolute1){ m_J.angular1 = -1; _local12 = (_local12 + _local3.m_invI); } else { _local9 = _local1.m_R; _local10 = m_prismatic1.m_localXAxis1; _local5 = ((_local9.col1.x * _local10.x) + (_local9.col2.x * _local10.y)); _local6 = ((_local9.col1.y * _local10.x) + (_local9.col2.y * _local10.y)); _local9 = _local3.m_R; _local7 = ((_local9.col1.x * m_localAnchor1.x) + (_local9.col2.x * m_localAnchor1.y)); _local8 = ((_local9.col1.y * m_localAnchor1.x) + (_local9.col2.y * m_localAnchor1.y)); _local11 = ((_local7 * _local6) - (_local8 * _local5)); m_J.linear1.Set(-(_local5), -(_local6)); m_J.angular1 = -(_local11); _local12 = (_local12 + (_local3.m_invMass + ((_local3.m_invI * _local11) * _local11))); }; if (m_revolute2){ m_J.angular2 = -(m_ratio); _local12 = (_local12 + ((m_ratio * m_ratio) * _local4.m_invI)); } else { _local9 = _local2.m_R; _local10 = m_prismatic2.m_localXAxis1; _local5 = ((_local9.col1.x * _local10.x) + (_local9.col2.x * _local10.y)); _local6 = ((_local9.col1.y * _local10.x) + (_local9.col2.y * _local10.y)); _local9 = _local4.m_R; _local7 = ((_local9.col1.x * m_localAnchor2.x) + (_local9.col2.x * m_localAnchor2.y)); _local8 = ((_local9.col1.y * m_localAnchor2.x) + (_local9.col2.y * m_localAnchor2.y)); _local11 = ((_local7 * _local6) - (_local8 * _local5)); m_J.linear2.Set((-(m_ratio) * _local5), (-(m_ratio) * _local6)); m_J.angular2 = (-(m_ratio) * _local11); _local12 = (_local12 + ((m_ratio * m_ratio) * (_local4.m_invMass + ((_local4.m_invI * _local11) * _local11)))); }; m_mass = (1 / _local12); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + ((_local3.m_invMass * m_impulse) * m_J.linear1.x)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + ((_local3.m_invMass * m_impulse) * m_J.linear1.y)); _local3.m_angularVelocity = (_local3.m_angularVelocity + ((_local3.m_invI * m_impulse) * m_J.angular1)); _local4.m_linearVelocity.x = (_local4.m_linearVelocity.x + ((_local4.m_invMass * m_impulse) * m_J.linear2.x)); _local4.m_linearVelocity.y = (_local4.m_linearVelocity.y + ((_local4.m_invMass * m_impulse) * m_J.linear2.y)); _local4.m_angularVelocity = (_local4.m_angularVelocity + ((_local4.m_invI * m_impulse) * m_J.angular2)); } override public function GetReactionTorque(_arg1:Number):Number{ return (0); } override public function GetReactionForce(_arg1:Number):b2Vec2{ return (new b2Vec2()); } override public function SolvePositionConstraints():Boolean{ var _local4:Number; var _local5:Number; var _local1:Number = 0; var _local2:b2Body = m_body1; var _local3:b2Body = m_body2; if (m_revolute1){ _local4 = m_revolute1.GetJointAngle(); } else { _local4 = m_prismatic1.GetJointTranslation(); }; if (m_revolute2){ _local5 = m_revolute2.GetJointAngle(); } else { _local5 = m_prismatic2.GetJointTranslation(); }; var _local6:Number = (m_constant - (_local4 + (m_ratio * _local5))); var _local7:Number = (-(m_mass) * _local6); _local2.m_position.x = (_local2.m_position.x + ((_local2.m_invMass * _local7) * m_J.linear1.x)); _local2.m_position.y = (_local2.m_position.y + ((_local2.m_invMass * _local7) * m_J.linear1.y)); _local2.m_rotation = (_local2.m_rotation + ((_local2.m_invI * _local7) * m_J.angular1)); _local3.m_position.x = (_local3.m_position.x + ((_local3.m_invMass * _local7) * m_J.linear2.x)); _local3.m_position.y = (_local3.m_position.y + ((_local3.m_invMass * _local7) * m_J.linear2.y)); _local3.m_rotation = (_local3.m_rotation + ((_local3.m_invI * _local7) * m_J.angular2)); _local2.m_R.Set(_local2.m_rotation); _local3.m_R.Set(_local3.m_rotation); return ((_local1 < b2Settings.b2_linearSlop)); } public function GetRatio():Number{ return (m_ratio); } override public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ var _local2:b2Body = m_body1; var _local3:b2Body = m_body2; var _local4:Number = m_J.Compute(_local2.m_linearVelocity, _local2.m_angularVelocity, _local3.m_linearVelocity, _local3.m_angularVelocity); var _local5:Number = (-(m_mass) * _local4); m_impulse = (m_impulse + _local5); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + ((_local2.m_invMass * _local5) * m_J.linear1.x)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + ((_local2.m_invMass * _local5) * m_J.linear1.y)); _local2.m_angularVelocity = (_local2.m_angularVelocity + ((_local2.m_invI * _local5) * m_J.angular1)); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + ((_local3.m_invMass * _local5) * m_J.linear2.x)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + ((_local3.m_invMass * _local5) * m_J.linear2.y)); _local3.m_angularVelocity = (_local3.m_angularVelocity + ((_local3.m_invI * _local5) * m_J.angular2)); } } }//package Box2D.Dynamics.Joints
Section 43
//b2GearJointDef (Box2D.Dynamics.Joints.b2GearJointDef) package Box2D.Dynamics.Joints { public class b2GearJointDef extends b2JointDef { public var joint1:b2Joint; public var joint2:b2Joint; public var ratio:Number; public function b2GearJointDef(){ type = b2Joint.e_gearJoint; joint1 = null; joint2 = null; ratio = 1; } } }//package Box2D.Dynamics.Joints
Section 44
//b2Jacobian (Box2D.Dynamics.Joints.b2Jacobian) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2Jacobian { public var linear1:b2Vec2; public var linear2:b2Vec2; public var angular1:Number; public var angular2:Number; public function b2Jacobian(){ linear1 = new b2Vec2(); linear2 = new b2Vec2(); super(); } public function Set(_arg1:b2Vec2, _arg2:Number, _arg3:b2Vec2, _arg4:Number):void{ linear1.SetV(_arg1); angular1 = _arg2; linear2.SetV(_arg3); angular2 = _arg4; } public function SetZero():void{ linear1.SetZero(); angular1 = 0; linear2.SetZero(); angular2 = 0; } public function Compute(_arg1:b2Vec2, _arg2:Number, _arg3:b2Vec2, _arg4:Number):Number{ return ((((((linear1.x * _arg1.x) + (linear1.y * _arg1.y)) + (angular1 * _arg2)) + ((linear2.x * _arg3.x) + (linear2.y * _arg3.y))) + (angular2 * _arg4))); } } }//package Box2D.Dynamics.Joints
Section 45
//b2Joint (Box2D.Dynamics.Joints.b2Joint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; public class b2Joint { public var m_islandFlag:Boolean; public var m_collideConnected:Boolean; public var m_prev:b2Joint; public var m_next:b2Joint; public var m_type:int; public var m_node1:b2JointNode; public var m_node2:b2JointNode; public var m_userData; public var m_body1:b2Body; public var m_body2:b2Body; public static const e_unknownJoint:int = 0; public static const e_inactiveLimit:int = 0; public static const e_atUpperLimit:int = 2; public static const e_atLowerLimit:int = 1; public static const e_gearJoint:int = 6; public static const e_revoluteJoint:int = 1; public static const e_equalLimits:int = 3; public static const e_distanceJoint:int = 3; public static const e_pulleyJoint:int = 4; public static const e_prismaticJoint:int = 2; public static const e_mouseJoint:int = 5; public function b2Joint(_arg1:b2JointDef){ m_node1 = new b2JointNode(); m_node2 = new b2JointNode(); super(); m_type = _arg1.type; m_prev = null; m_next = null; m_body1 = _arg1.body1; m_body2 = _arg1.body2; m_collideConnected = _arg1.collideConnected; m_islandFlag = false; m_userData = _arg1.userData; } public function GetAnchor1():b2Vec2{ return (null); } public function GetAnchor2():b2Vec2{ return (null); } public function GetNext():b2Joint{ return (m_next); } public function GetType():int{ return (m_type); } public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ } public function PrepareVelocitySolver():void{ } public function PreparePositionSolver():void{ } public function GetReactionTorque(_arg1:Number):Number{ return (0); } public function GetUserData(){ return (m_userData); } public function GetReactionForce(_arg1:Number):b2Vec2{ return (null); } public function SolvePositionConstraints():Boolean{ return (false); } public function GetBody1():b2Body{ return (m_body1); } public function GetBody2():b2Body{ return (m_body2); } public static function Destroy(_arg1:b2Joint, _arg2):void{ } public static function Create(_arg1:b2JointDef, _arg2):b2Joint{ var _local3:b2Joint; switch (_arg1.type){ case e_distanceJoint: _local3 = new b2DistanceJoint((_arg1 as b2DistanceJointDef)); break; case e_mouseJoint: _local3 = new b2MouseJoint((_arg1 as b2MouseJointDef)); break; case e_prismaticJoint: _local3 = new b2PrismaticJoint((_arg1 as b2PrismaticJointDef)); break; case e_revoluteJoint: _local3 = new b2RevoluteJoint((_arg1 as b2RevoluteJointDef)); break; case e_pulleyJoint: _local3 = new b2PulleyJoint((_arg1 as b2PulleyJointDef)); break; case e_gearJoint: _local3 = new b2GearJoint((_arg1 as b2GearJointDef)); break; default: break; }; return (_local3); } } }//package Box2D.Dynamics.Joints
Section 46
//b2JointDef (Box2D.Dynamics.Joints.b2JointDef) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; public class b2JointDef { public var body2:b2Body; public var type:int; public var userData; public var collideConnected:Boolean; public var body1:b2Body; public function b2JointDef(){ type = b2Joint.e_unknownJoint; userData = null; body1 = null; body2 = null; collideConnected = false; } } }//package Box2D.Dynamics.Joints
Section 47
//b2JointNode (Box2D.Dynamics.Joints.b2JointNode) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; public class b2JointNode { public var other:b2Body; public var next:b2JointNode; public var prev:b2JointNode; public var joint:b2Joint; } }//package Box2D.Dynamics.Joints
Section 48
//b2MouseJoint (Box2D.Dynamics.Joints.b2MouseJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2MouseJoint extends b2Joint { private var K1:b2Mat22; public var m_beta:Number; private var K:b2Mat22; private var K2:b2Mat22; public var m_target:b2Vec2; public var m_gamma:Number; public var m_impulse:b2Vec2; public var m_ptpMass:b2Mat22; public var m_C:b2Vec2; public var m_maxForce:Number; public var m_localAnchor:b2Vec2; public function b2MouseJoint(_arg1:b2MouseJointDef){ var _local3:Number; K = new b2Mat22(); K1 = new b2Mat22(); K2 = new b2Mat22(); m_localAnchor = new b2Vec2(); m_target = new b2Vec2(); m_impulse = new b2Vec2(); m_ptpMass = new b2Mat22(); m_C = new b2Vec2(); super(_arg1); m_target.SetV(_arg1.target); var _local2:Number = (m_target.x - m_body2.m_position.x); _local3 = (m_target.y - m_body2.m_position.y); m_localAnchor.x = ((_local2 * m_body2.m_R.col1.x) + (_local3 * m_body2.m_R.col1.y)); m_localAnchor.y = ((_local2 * m_body2.m_R.col2.x) + (_local3 * m_body2.m_R.col2.y)); m_maxForce = _arg1.maxForce; m_impulse.SetZero(); var _local4:Number = m_body2.m_mass; var _local5:Number = ((2 * b2Settings.b2_pi) * _arg1.frequencyHz); var _local6:Number = (((2 * _local4) * _arg1.dampingRatio) * _local5); var _local7:Number = ((_local4 * _local5) * _local5); m_gamma = (1 / (_local6 + (_arg1.timeStep * _local7))); m_beta = ((_arg1.timeStep * _local7) / (_local6 + (_arg1.timeStep * _local7))); } public function SetTarget(_arg1:b2Vec2):void{ m_body2.WakeUp(); m_target = _arg1; } override public function GetAnchor2():b2Vec2{ var _local1:b2Vec2 = b2Math.b2MulMV(m_body2.m_R, m_localAnchor); _local1.Add(m_body2.m_position); return (_local1); } override public function GetAnchor1():b2Vec2{ return (m_target); } override public function PrepareVelocitySolver():void{ var _local1:b2Body; var _local2:b2Mat22; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; _local1 = m_body2; _local2 = _local1.m_R; _local3 = ((_local2.col1.x * m_localAnchor.x) + (_local2.col2.x * m_localAnchor.y)); _local4 = ((_local2.col1.y * m_localAnchor.x) + (_local2.col2.y * m_localAnchor.y)); _local5 = _local1.m_invMass; _local6 = _local1.m_invI; K1.col1.x = _local5; K1.col2.x = 0; K1.col1.y = 0; K1.col2.y = _local5; K2.col1.x = ((_local6 * _local4) * _local4); K2.col2.x = ((-(_local6) * _local3) * _local4); K2.col1.y = ((-(_local6) * _local3) * _local4); K2.col2.y = ((_local6 * _local3) * _local3); K.SetM(K1); K.AddM(K2); K.col1.x = (K.col1.x + m_gamma); K.col2.y = (K.col2.y + m_gamma); K.Invert(m_ptpMass); m_C.x = ((_local1.m_position.x + _local3) - m_target.x); m_C.y = ((_local1.m_position.y + _local4) - m_target.y); _local1.m_angularVelocity = (_local1.m_angularVelocity * 0.98); var _local7:Number = m_impulse.x; var _local8:Number = m_impulse.y; _local1.m_linearVelocity.x = (_local1.m_linearVelocity.x + (_local5 * _local7)); _local1.m_linearVelocity.y = (_local1.m_linearVelocity.y + (_local5 * _local8)); _local1.m_angularVelocity = (_local1.m_angularVelocity + (_local6 * ((_local3 * _local8) - (_local4 * _local7)))); } override public function GetReactionTorque(_arg1:Number):Number{ return (0); } override public function GetReactionForce(_arg1:Number):b2Vec2{ var _local2:b2Vec2 = new b2Vec2(); _local2.SetV(m_impulse); _local2.Multiply(_arg1); return (_local2); } override public function SolvePositionConstraints():Boolean{ return (true); } override public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ var _local3:b2Mat22; var _local2:b2Body = m_body2; _local3 = _local2.m_R; var _local4:Number = ((_local3.col1.x * m_localAnchor.x) + (_local3.col2.x * m_localAnchor.y)); var _local5:Number = ((_local3.col1.y * m_localAnchor.x) + (_local3.col2.y * m_localAnchor.y)); var _local6:Number = (_local2.m_linearVelocity.x + (-(_local2.m_angularVelocity) * _local5)); var _local7:Number = (_local2.m_linearVelocity.y + (_local2.m_angularVelocity * _local4)); _local3 = m_ptpMass; var _local8:Number = ((_local6 + ((m_beta * _arg1.inv_dt) * m_C.x)) + (m_gamma * m_impulse.x)); var _local9:Number = ((_local7 + ((m_beta * _arg1.inv_dt) * m_C.y)) + (m_gamma * m_impulse.y)); var _local10:Number = -(((_local3.col1.x * _local8) + (_local3.col2.x * _local9))); var _local11:Number = -(((_local3.col1.y * _local8) + (_local3.col2.y * _local9))); var _local12:Number = m_impulse.x; var _local13:Number = m_impulse.y; m_impulse.x = (m_impulse.x + _local10); m_impulse.y = (m_impulse.y + _local11); var _local14:Number = m_impulse.Length(); if (_local14 > (_arg1.dt * m_maxForce)){ m_impulse.Multiply(((_arg1.dt * m_maxForce) / _local14)); }; _local10 = (m_impulse.x - _local12); _local11 = (m_impulse.y - _local13); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local10)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local11)); _local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local4 * _local11) - (_local5 * _local10)))); } } }//package Box2D.Dynamics.Joints
Section 49
//b2MouseJointDef (Box2D.Dynamics.Joints.b2MouseJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2MouseJointDef extends b2JointDef { public var timeStep:Number; public var target:b2Vec2; public var maxForce:Number; public var dampingRatio:Number; public var frequencyHz:Number; public function b2MouseJointDef(){ target = new b2Vec2(); super(); type = b2Joint.e_mouseJoint; maxForce = 0; frequencyHz = 5; dampingRatio = 0.7; timeStep = (1 / 60); } } }//package Box2D.Dynamics.Joints
Section 50
//b2PrismaticJoint (Box2D.Dynamics.Joints.b2PrismaticJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PrismaticJoint extends b2Joint { public var m_initialAngle:Number; public var m_localXAxis1:b2Vec2; public var m_lowerTranslation:Number; public var m_angularMass:Number; public var m_enableLimit:Boolean; public var m_maxMotorForce:Number; public var m_limitState:int; public var m_localYAxis1:b2Vec2; public var m_motorMass:Number; public var m_linearImpulse:Number; public var m_upperTranslation:Number; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_angularImpulse:Number; public var m_linearMass:Number; public var m_motorImpulse:Number; public var m_limitImpulse:Number; public var m_motorJacobian:b2Jacobian; public var m_limitPositionImpulse:Number; public var m_motorSpeed:Number; public var m_enableMotor:Boolean; public var m_linearJacobian:b2Jacobian; public function b2PrismaticJoint(_arg1:b2PrismaticJointDef){ var _local2:b2Mat22; var _local3:Number; var _local4:Number; m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_localXAxis1 = new b2Vec2(); m_localYAxis1 = new b2Vec2(); m_linearJacobian = new b2Jacobian(); m_motorJacobian = new b2Jacobian(); super(_arg1); _local2 = m_body1.m_R; _local3 = (_arg1.anchorPoint.x - m_body1.m_position.x); _local4 = (_arg1.anchorPoint.y - m_body1.m_position.y); m_localAnchor1.Set(((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)), ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y))); _local2 = m_body2.m_R; _local3 = (_arg1.anchorPoint.x - m_body2.m_position.x); _local4 = (_arg1.anchorPoint.y - m_body2.m_position.y); m_localAnchor2.Set(((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)), ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y))); _local2 = m_body1.m_R; _local3 = _arg1.axis.x; _local4 = _arg1.axis.y; m_localXAxis1.Set(((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)), ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y))); m_localYAxis1.x = -(m_localXAxis1.y); m_localYAxis1.y = m_localXAxis1.x; m_initialAngle = (m_body2.m_rotation - m_body1.m_rotation); m_linearJacobian.SetZero(); m_linearMass = 0; m_linearImpulse = 0; m_angularMass = 0; m_angularImpulse = 0; m_motorJacobian.SetZero(); m_motorMass = 0; m_motorImpulse = 0; m_limitImpulse = 0; m_limitPositionImpulse = 0; m_lowerTranslation = _arg1.lowerTranslation; m_upperTranslation = _arg1.upperTranslation; m_maxMotorForce = _arg1.motorForce; m_motorSpeed = _arg1.motorSpeed; m_enableLimit = _arg1.enableLimit; m_enableMotor = _arg1.enableMotor; } override public function GetAnchor1():b2Vec2{ var _local1:b2Body = m_body1; var _local2:b2Vec2 = new b2Vec2(); _local2.SetV(m_localAnchor1); _local2.MulM(_local1.m_R); _local2.Add(_local1.m_position); return (_local2); } override public function GetAnchor2():b2Vec2{ var _local1:b2Body = m_body2; var _local2:b2Vec2 = new b2Vec2(); _local2.SetV(m_localAnchor2); _local2.MulM(_local1.m_R); _local2.Add(_local1.m_position); return (_local2); } override public function PrepareVelocitySolver():void{ var _local3:b2Mat22; 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 _local1:b2Body = m_body1; var _local2:b2Body = m_body2; _local3 = _local1.m_R; var _local4:Number = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); var _local5:Number = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local3 = _local2.m_R; var _local6:Number = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); var _local7:Number = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); var _local8:Number = _local1.m_invMass; var _local9:Number = _local2.m_invMass; var _local10:Number = _local1.m_invI; var _local11:Number = _local2.m_invI; _local3 = _local1.m_R; var _local12:Number = ((_local3.col1.x * m_localYAxis1.x) + (_local3.col2.x * m_localYAxis1.y)); var _local13:Number = ((_local3.col1.y * m_localYAxis1.x) + (_local3.col2.y * m_localYAxis1.y)); var _local14:Number = ((_local2.m_position.x + _local6) - _local1.m_position.x); var _local15:Number = ((_local2.m_position.y + _local7) - _local1.m_position.y); m_linearJacobian.linear1.x = -(_local12); m_linearJacobian.linear1.y = -(_local13); m_linearJacobian.linear2.x = _local12; m_linearJacobian.linear2.y = _local13; m_linearJacobian.angular1 = -(((_local14 * _local13) - (_local15 * _local12))); m_linearJacobian.angular2 = ((_local6 * _local13) - (_local7 * _local12)); m_linearMass = (((_local8 + ((_local10 * m_linearJacobian.angular1) * m_linearJacobian.angular1)) + _local9) + ((_local11 * m_linearJacobian.angular2) * m_linearJacobian.angular2)); m_linearMass = (1 / m_linearMass); m_angularMass = (1 / (_local10 + _local11)); if (((m_enableLimit) || (m_enableMotor))){ _local3 = _local1.m_R; _local16 = ((_local3.col1.x * m_localXAxis1.x) + (_local3.col2.x * m_localXAxis1.y)); _local17 = ((_local3.col1.y * m_localXAxis1.x) + (_local3.col2.y * m_localXAxis1.y)); m_motorJacobian.linear1.x = -(_local16); m_motorJacobian.linear1.y = -(_local17); m_motorJacobian.linear2.x = _local16; m_motorJacobian.linear2.y = _local17; m_motorJacobian.angular1 = -(((_local14 * _local17) - (_local15 * _local16))); m_motorJacobian.angular2 = ((_local6 * _local17) - (_local7 * _local16)); m_motorMass = (((_local8 + ((_local10 * m_motorJacobian.angular1) * m_motorJacobian.angular1)) + _local9) + ((_local11 * m_motorJacobian.angular2) * m_motorJacobian.angular2)); m_motorMass = (1 / m_motorMass); if (m_enableLimit){ _local18 = (_local14 - _local4); _local19 = (_local15 - _local5); _local20 = ((_local16 * _local18) + (_local17 * _local19)); if (b2Math.b2Abs((m_upperTranslation - m_lowerTranslation)) < (2 * b2Settings.b2_linearSlop)){ m_limitState = e_equalLimits; } else { if (_local20 <= m_lowerTranslation){ if (m_limitState != e_atLowerLimit){ m_limitImpulse = 0; }; m_limitState = e_atLowerLimit; } else { if (_local20 >= m_upperTranslation){ if (m_limitState != e_atUpperLimit){ m_limitImpulse = 0; }; m_limitState = e_atUpperLimit; } else { m_limitState = e_inactiveLimit; m_limitImpulse = 0; }; }; }; }; }; if (m_enableMotor == false){ m_motorImpulse = 0; }; if (m_enableLimit == false){ m_limitImpulse = 0; }; if (b2World.s_enableWarmStarting){ _local21 = ((m_linearImpulse * m_linearJacobian.linear1.x) + ((m_motorImpulse + m_limitImpulse) * m_motorJacobian.linear1.x)); _local22 = ((m_linearImpulse * m_linearJacobian.linear1.y) + ((m_motorImpulse + m_limitImpulse) * m_motorJacobian.linear1.y)); _local23 = ((m_linearImpulse * m_linearJacobian.linear2.x) + ((m_motorImpulse + m_limitImpulse) * m_motorJacobian.linear2.x)); _local24 = ((m_linearImpulse * m_linearJacobian.linear2.y) + ((m_motorImpulse + m_limitImpulse) * m_motorJacobian.linear2.y)); _local25 = (((m_linearImpulse * m_linearJacobian.angular1) - m_angularImpulse) + ((m_motorImpulse + m_limitImpulse) * m_motorJacobian.angular1)); _local26 = (((m_linearImpulse * m_linearJacobian.angular2) + m_angularImpulse) + ((m_motorImpulse + m_limitImpulse) * m_motorJacobian.angular2)); _local1.m_linearVelocity.x = (_local1.m_linearVelocity.x + (_local8 * _local21)); _local1.m_linearVelocity.y = (_local1.m_linearVelocity.y + (_local8 * _local22)); _local1.m_angularVelocity = (_local1.m_angularVelocity + (_local10 * _local25)); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local9 * _local23)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local9 * _local24)); _local2.m_angularVelocity = (_local2.m_angularVelocity + (_local11 * _local26)); } else { m_linearImpulse = 0; m_angularImpulse = 0; m_limitImpulse = 0; m_motorImpulse = 0; }; m_limitPositionImpulse = 0; } public function GetJointTranslation():Number{ var _local3:b2Mat22; var _local1:b2Body = m_body1; var _local2:b2Body = m_body2; _local3 = _local1.m_R; var _local4:Number = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); var _local5:Number = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local3 = _local2.m_R; var _local6:Number = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); var _local7:Number = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); var _local8:Number = (_local1.m_position.x + _local4); var _local9:Number = (_local1.m_position.y + _local5); var _local10:Number = (_local2.m_position.x + _local6); var _local11:Number = (_local2.m_position.y + _local7); var _local12:Number = (_local10 - _local8); var _local13:Number = (_local11 - _local9); _local3 = _local1.m_R; var _local14:Number = ((_local3.col1.x * m_localXAxis1.x) + (_local3.col2.x * m_localXAxis1.y)); var _local15:Number = ((_local3.col1.y * m_localXAxis1.x) + (_local3.col2.y * m_localXAxis1.y)); var _local16:Number = ((_local14 * _local12) + (_local15 * _local13)); return (_local16); } override public function GetReactionForce(_arg1:Number):b2Vec2{ var _local3:b2Mat22; var _local2:Number = (_arg1 * m_limitImpulse); _local3 = m_body1.m_R; var _local4:Number = (_local2 * ((_local3.col1.x * m_localXAxis1.x) + (_local3.col2.x * m_localXAxis1.y))); var _local5:Number = (_local2 * ((_local3.col1.y * m_localXAxis1.x) + (_local3.col2.y * m_localXAxis1.y))); var _local6:Number = (_local2 * ((_local3.col1.x * m_localYAxis1.x) + (_local3.col2.x * m_localYAxis1.y))); var _local7:Number = (_local2 * ((_local3.col1.y * m_localYAxis1.x) + (_local3.col2.y * m_localYAxis1.y))); return (new b2Vec2((_local4 + _local6), (_local5 + _local7))); } override public function SolvePositionConstraints():Boolean{ var _local1:Number; var _local2:Number; var _local9:b2Mat22; var _local28:Number; var _local29:Number; var _local30:Number; var _local31:Number; var _local3:b2Body = m_body1; var _local4:b2Body = m_body2; var _local5:Number = _local3.m_invMass; var _local6:Number = _local4.m_invMass; var _local7:Number = _local3.m_invI; var _local8:Number = _local4.m_invI; _local9 = _local3.m_R; var _local10:Number = ((_local9.col1.x * m_localAnchor1.x) + (_local9.col2.x * m_localAnchor1.y)); var _local11:Number = ((_local9.col1.y * m_localAnchor1.x) + (_local9.col2.y * m_localAnchor1.y)); _local9 = _local4.m_R; var _local12:Number = ((_local9.col1.x * m_localAnchor2.x) + (_local9.col2.x * m_localAnchor2.y)); var _local13:Number = ((_local9.col1.y * m_localAnchor2.x) + (_local9.col2.y * m_localAnchor2.y)); var _local14:Number = (_local3.m_position.x + _local10); var _local15:Number = (_local3.m_position.y + _local11); var _local16:Number = (_local4.m_position.x + _local12); var _local17:Number = (_local4.m_position.y + _local13); var _local18:Number = (_local16 - _local14); var _local19:Number = (_local17 - _local15); _local9 = _local3.m_R; var _local20:Number = ((_local9.col1.x * m_localYAxis1.x) + (_local9.col2.x * m_localYAxis1.y)); var _local21:Number = ((_local9.col1.y * m_localYAxis1.x) + (_local9.col2.y * m_localYAxis1.y)); var _local22:Number = ((_local20 * _local18) + (_local21 * _local19)); _local22 = b2Math.b2Clamp(_local22, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); var _local23:Number = (-(m_linearMass) * _local22); _local3.m_position.x = (_local3.m_position.x + ((_local5 * _local23) * m_linearJacobian.linear1.x)); _local3.m_position.y = (_local3.m_position.y + ((_local5 * _local23) * m_linearJacobian.linear1.y)); _local3.m_rotation = (_local3.m_rotation + ((_local7 * _local23) * m_linearJacobian.angular1)); _local4.m_position.x = (_local4.m_position.x + ((_local6 * _local23) * m_linearJacobian.linear2.x)); _local4.m_position.y = (_local4.m_position.y + ((_local6 * _local23) * m_linearJacobian.linear2.y)); _local4.m_rotation = (_local4.m_rotation + ((_local8 * _local23) * m_linearJacobian.angular2)); var _local24:Number = b2Math.b2Abs(_local22); var _local25:Number = ((_local4.m_rotation - _local3.m_rotation) - m_initialAngle); _local25 = b2Math.b2Clamp(_local25, -(b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection); var _local26:Number = (-(m_angularMass) * _local25); _local3.m_rotation = (_local3.m_rotation - (_local3.m_invI * _local26)); _local3.m_R.Set(_local3.m_rotation); _local4.m_rotation = (_local4.m_rotation + (_local4.m_invI * _local26)); _local4.m_R.Set(_local4.m_rotation); var _local27:Number = b2Math.b2Abs(_local25); if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ _local9 = _local3.m_R; _local10 = ((_local9.col1.x * m_localAnchor1.x) + (_local9.col2.x * m_localAnchor1.y)); _local11 = ((_local9.col1.y * m_localAnchor1.x) + (_local9.col2.y * m_localAnchor1.y)); _local9 = _local4.m_R; _local12 = ((_local9.col1.x * m_localAnchor2.x) + (_local9.col2.x * m_localAnchor2.y)); _local13 = ((_local9.col1.y * m_localAnchor2.x) + (_local9.col2.y * m_localAnchor2.y)); _local14 = (_local3.m_position.x + _local10); _local15 = (_local3.m_position.y + _local11); _local16 = (_local4.m_position.x + _local12); _local17 = (_local4.m_position.y + _local13); _local18 = (_local16 - _local14); _local19 = (_local17 - _local15); _local9 = _local3.m_R; _local28 = ((_local9.col1.x * m_localXAxis1.x) + (_local9.col2.x * m_localXAxis1.y)); _local29 = ((_local9.col1.y * m_localXAxis1.x) + (_local9.col2.y * m_localXAxis1.y)); _local30 = ((_local28 * _local18) + (_local29 * _local19)); _local31 = 0; if (m_limitState == e_equalLimits){ _local1 = b2Math.b2Clamp(_local30, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); _local31 = (-(m_motorMass) * _local1); _local24 = b2Math.b2Max(_local24, b2Math.b2Abs(_local25)); } else { if (m_limitState == e_atLowerLimit){ _local1 = (_local30 - m_lowerTranslation); _local24 = b2Math.b2Max(_local24, -(_local1)); _local1 = b2Math.b2Clamp((_local1 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); _local31 = (-(m_motorMass) * _local1); _local2 = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Max((m_limitPositionImpulse + _local31), 0); _local31 = (m_limitPositionImpulse - _local2); } else { if (m_limitState == e_atUpperLimit){ _local1 = (_local30 - m_upperTranslation); _local24 = b2Math.b2Max(_local24, _local1); _local1 = b2Math.b2Clamp((_local1 - b2Settings.b2_linearSlop), 0, b2Settings.b2_maxLinearCorrection); _local31 = (-(m_motorMass) * _local1); _local2 = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Min((m_limitPositionImpulse + _local31), 0); _local31 = (m_limitPositionImpulse - _local2); }; }; }; _local3.m_position.x = (_local3.m_position.x + ((_local5 * _local31) * m_motorJacobian.linear1.x)); _local3.m_position.y = (_local3.m_position.y + ((_local5 * _local31) * m_motorJacobian.linear1.y)); _local3.m_rotation = (_local3.m_rotation + ((_local7 * _local31) * m_motorJacobian.angular1)); _local3.m_R.Set(_local3.m_rotation); _local4.m_position.x = (_local4.m_position.x + ((_local6 * _local31) * m_motorJacobian.linear2.x)); _local4.m_position.y = (_local4.m_position.y + ((_local6 * _local31) * m_motorJacobian.linear2.y)); _local4.m_rotation = (_local4.m_rotation + ((_local8 * _local31) * m_motorJacobian.angular2)); _local4.m_R.Set(_local4.m_rotation); }; return ((((_local24 <= b2Settings.b2_linearSlop)) && ((_local27 <= b2Settings.b2_angularSlop)))); } public function SetMotorSpeed(_arg1:Number):void{ m_motorSpeed = _arg1; } public function GetJointSpeed():Number{ var _local3:b2Mat22; var _local1:b2Body = m_body1; var _local2:b2Body = m_body2; _local3 = _local1.m_R; var _local4:Number = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); var _local5:Number = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local3 = _local2.m_R; var _local6:Number = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); var _local7:Number = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); var _local8:Number = (_local1.m_position.x + _local4); var _local9:Number = (_local1.m_position.y + _local5); var _local10:Number = (_local2.m_position.x + _local6); var _local11:Number = (_local2.m_position.y + _local7); var _local12:Number = (_local10 - _local8); var _local13:Number = (_local11 - _local9); _local3 = _local1.m_R; var _local14:Number = ((_local3.col1.x * m_localXAxis1.x) + (_local3.col2.x * m_localXAxis1.y)); var _local15:Number = ((_local3.col1.y * m_localXAxis1.x) + (_local3.col2.y * m_localXAxis1.y)); var _local16:b2Vec2 = _local1.m_linearVelocity; var _local17:b2Vec2 = _local2.m_linearVelocity; var _local18:Number = _local1.m_angularVelocity; var _local19:Number = _local2.m_angularVelocity; var _local20:Number = (((_local12 * (-(_local18) * _local15)) + (_local13 * (_local18 * _local14))) + ((_local14 * (((_local17.x + (-(_local19) * _local7)) - _local16.x) - (-(_local18) * _local5))) + (_local15 * (((_local17.y + (_local19 * _local6)) - _local16.y) - (_local18 * _local4))))); return (_local20); } public function GetMotorForce(_arg1:Number):Number{ return ((_arg1 * m_motorImpulse)); } public function SetMotorForce(_arg1:Number):void{ m_maxMotorForce = _arg1; } override public function GetReactionTorque(_arg1:Number):Number{ return ((_arg1 * m_angularImpulse)); } override public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ var _local8:Number; var _local13:Number; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local2:b2Body = m_body1; var _local3:b2Body = m_body2; var _local4:Number = _local2.m_invMass; var _local5:Number = _local3.m_invMass; var _local6:Number = _local2.m_invI; var _local7:Number = _local3.m_invI; var _local9:Number = m_linearJacobian.Compute(_local2.m_linearVelocity, _local2.m_angularVelocity, _local3.m_linearVelocity, _local3.m_angularVelocity); var _local10:Number = (-(m_linearMass) * _local9); m_linearImpulse = (m_linearImpulse + _local10); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + ((_local4 * _local10) * m_linearJacobian.linear1.x)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + ((_local4 * _local10) * m_linearJacobian.linear1.y)); _local2.m_angularVelocity = (_local2.m_angularVelocity + ((_local6 * _local10) * m_linearJacobian.angular1)); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + ((_local5 * _local10) * m_linearJacobian.linear2.x)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + ((_local5 * _local10) * m_linearJacobian.linear2.y)); _local3.m_angularVelocity = (_local3.m_angularVelocity + ((_local7 * _local10) * m_linearJacobian.angular2)); var _local11:Number = (_local3.m_angularVelocity - _local2.m_angularVelocity); var _local12:Number = (-(m_angularMass) * _local11); m_angularImpulse = (m_angularImpulse + _local12); _local2.m_angularVelocity = (_local2.m_angularVelocity - (_local6 * _local12)); _local3.m_angularVelocity = (_local3.m_angularVelocity + (_local7 * _local12)); if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){ _local13 = (m_motorJacobian.Compute(_local2.m_linearVelocity, _local2.m_angularVelocity, _local3.m_linearVelocity, _local3.m_angularVelocity) - m_motorSpeed); _local14 = (-(m_motorMass) * _local13); _local15 = m_motorImpulse; m_motorImpulse = b2Math.b2Clamp((m_motorImpulse + _local14), (-(_arg1.dt) * m_maxMotorForce), (_arg1.dt * m_maxMotorForce)); _local14 = (m_motorImpulse - _local15); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + ((_local4 * _local14) * m_motorJacobian.linear1.x)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + ((_local4 * _local14) * m_motorJacobian.linear1.y)); _local2.m_angularVelocity = (_local2.m_angularVelocity + ((_local6 * _local14) * m_motorJacobian.angular1)); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + ((_local5 * _local14) * m_motorJacobian.linear2.x)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + ((_local5 * _local14) * m_motorJacobian.linear2.y)); _local3.m_angularVelocity = (_local3.m_angularVelocity + ((_local7 * _local14) * m_motorJacobian.angular2)); }; if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ _local16 = m_motorJacobian.Compute(_local2.m_linearVelocity, _local2.m_angularVelocity, _local3.m_linearVelocity, _local3.m_angularVelocity); _local17 = (-(m_motorMass) * _local16); if (m_limitState == e_equalLimits){ m_limitImpulse = (m_limitImpulse + _local17); } else { if (m_limitState == e_atLowerLimit){ _local8 = m_limitImpulse; m_limitImpulse = b2Math.b2Max((m_limitImpulse + _local17), 0); _local17 = (m_limitImpulse - _local8); } else { if (m_limitState == e_atUpperLimit){ _local8 = m_limitImpulse; m_limitImpulse = b2Math.b2Min((m_limitImpulse + _local17), 0); _local17 = (m_limitImpulse - _local8); }; }; }; _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + ((_local4 * _local17) * m_motorJacobian.linear1.x)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + ((_local4 * _local17) * m_motorJacobian.linear1.y)); _local2.m_angularVelocity = (_local2.m_angularVelocity + ((_local6 * _local17) * m_motorJacobian.angular1)); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + ((_local5 * _local17) * m_motorJacobian.linear2.x)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + ((_local5 * _local17) * m_motorJacobian.linear2.y)); _local3.m_angularVelocity = (_local3.m_angularVelocity + ((_local7 * _local17) * m_motorJacobian.angular2)); }; } } }//package Box2D.Dynamics.Joints
Section 51
//b2PrismaticJointDef (Box2D.Dynamics.Joints.b2PrismaticJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2PrismaticJointDef extends b2JointDef { public var axis:b2Vec2; public var upperTranslation:Number; public var lowerTranslation:Number; public var motorSpeed:Number; public var enableLimit:Boolean; public var enableMotor:Boolean; public var anchorPoint:b2Vec2; public var motorForce:Number; public function b2PrismaticJointDef(){ type = b2Joint.e_prismaticJoint; anchorPoint = new b2Vec2(0, 0); axis = new b2Vec2(0, 0); lowerTranslation = 0; upperTranslation = 0; motorForce = 0; motorSpeed = 0; enableLimit = false; enableMotor = false; } } }//package Box2D.Dynamics.Joints
Section 52
//b2PulleyJoint (Box2D.Dynamics.Joints.b2PulleyJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2PulleyJoint extends b2Joint { public var m_limitState1:int; public var m_limitState2:int; public var m_ground:b2Body; public var m_maxLength2:Number; public var m_maxLength1:Number; public var m_limitPositionImpulse1:Number; public var m_limitPositionImpulse2:Number; public var m_pulleyImpulse:Number; public var m_constant:Number; public var m_ratio:Number; public var m_groundAnchor1:b2Vec2; public var m_groundAnchor2:b2Vec2; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; public var m_limitMass1:Number; public var m_limitMass2:Number; public var m_limitImpulse1:Number; public var m_pulleyMass:Number; public var m_u1:b2Vec2; public var m_u2:b2Vec2; public var m_limitImpulse2:Number; public static var b2_minPulleyLength:Number = 30; public function b2PulleyJoint(_arg1:b2PulleyJointDef){ var _local2:b2Mat22; var _local3:Number; var _local4:Number; m_groundAnchor1 = new b2Vec2(); m_groundAnchor2 = new b2Vec2(); m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_u1 = new b2Vec2(); m_u2 = new b2Vec2(); super(_arg1); m_ground = m_body1.m_world.m_groundBody; m_groundAnchor1.x = (_arg1.groundPoint1.x - m_ground.m_position.x); m_groundAnchor1.y = (_arg1.groundPoint1.y - m_ground.m_position.y); m_groundAnchor2.x = (_arg1.groundPoint2.x - m_ground.m_position.x); m_groundAnchor2.y = (_arg1.groundPoint2.y - m_ground.m_position.y); _local2 = m_body1.m_R; _local3 = (_arg1.anchorPoint1.x - m_body1.m_position.x); _local4 = (_arg1.anchorPoint1.y - m_body1.m_position.y); m_localAnchor1.x = ((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)); m_localAnchor1.y = ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y)); _local2 = m_body2.m_R; _local3 = (_arg1.anchorPoint2.x - m_body2.m_position.x); _local4 = (_arg1.anchorPoint2.y - m_body2.m_position.y); m_localAnchor2.x = ((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)); m_localAnchor2.y = ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y)); m_ratio = _arg1.ratio; _local3 = (_arg1.groundPoint1.x - _arg1.anchorPoint1.x); _local4 = (_arg1.groundPoint1.y - _arg1.anchorPoint1.y); var _local5:Number = Math.sqrt(((_local3 * _local3) + (_local4 * _local4))); _local3 = (_arg1.groundPoint2.x - _arg1.anchorPoint2.x); _local4 = (_arg1.groundPoint2.y - _arg1.anchorPoint2.y); var _local6:Number = Math.sqrt(((_local3 * _local3) + (_local4 * _local4))); var _local7:Number = b2Math.b2Max((0.5 * b2_minPulleyLength), _local5); var _local8:Number = b2Math.b2Max((0.5 * b2_minPulleyLength), _local6); m_constant = (_local7 + (m_ratio * _local8)); m_maxLength1 = b2Math.b2Clamp(_arg1.maxLength1, _local7, (m_constant - (m_ratio * b2_minPulleyLength))); m_maxLength2 = b2Math.b2Clamp(_arg1.maxLength2, _local8, ((m_constant - b2_minPulleyLength) / m_ratio)); m_pulleyImpulse = 0; m_limitImpulse1 = 0; m_limitImpulse2 = 0; } public function GetLength1():Number{ var _local1:b2Mat22; _local1 = m_body1.m_R; var _local2:Number = (m_body1.m_position.x + ((_local1.col1.x * m_localAnchor1.x) + (_local1.col2.x * m_localAnchor1.y))); var _local3:Number = (m_body1.m_position.y + ((_local1.col1.y * m_localAnchor1.x) + (_local1.col2.y * m_localAnchor1.y))); var _local4:Number = (_local2 - (m_ground.m_position.x + m_groundAnchor1.x)); var _local5:Number = (_local3 - (m_ground.m_position.y + m_groundAnchor1.y)); return (Math.sqrt(((_local4 * _local4) + (_local5 * _local5)))); } override public function GetAnchor1():b2Vec2{ var _local1:b2Mat22 = m_body1.m_R; return (new b2Vec2((m_body1.m_position.x + ((_local1.col1.x * m_localAnchor1.x) + (_local1.col2.x * m_localAnchor1.y))), (m_body1.m_position.y + ((_local1.col1.y * m_localAnchor1.x) + (_local1.col2.y * m_localAnchor1.y))))); } override public function GetAnchor2():b2Vec2{ var _local1:b2Mat22 = m_body2.m_R; return (new b2Vec2((m_body2.m_position.x + ((_local1.col1.x * m_localAnchor2.x) + (_local1.col2.x * m_localAnchor2.y))), (m_body2.m_position.y + ((_local1.col1.y * m_localAnchor2.x) + (_local1.col2.y * m_localAnchor2.y))))); } override public function PrepareVelocitySolver():void{ var _local3:b2Mat22; var _local23:Number; var _local1:b2Body = m_body1; var _local2:b2Body = m_body2; _local3 = _local1.m_R; var _local4:Number = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); var _local5:Number = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local3 = _local2.m_R; var _local6:Number = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); var _local7:Number = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); var _local8:Number = (_local1.m_position.x + _local4); var _local9:Number = (_local1.m_position.y + _local5); var _local10:Number = (_local2.m_position.x + _local6); var _local11:Number = (_local2.m_position.y + _local7); var _local12:Number = (m_ground.m_position.x + m_groundAnchor1.x); var _local13:Number = (m_ground.m_position.y + m_groundAnchor1.y); var _local14:Number = (m_ground.m_position.x + m_groundAnchor2.x); var _local15:Number = (m_ground.m_position.y + m_groundAnchor2.y); m_u1.Set((_local8 - _local12), (_local9 - _local13)); m_u2.Set((_local10 - _local14), (_local11 - _local15)); var _local16:Number = m_u1.Length(); var _local17:Number = m_u2.Length(); if (_local16 > b2Settings.b2_linearSlop){ m_u1.Multiply((1 / _local16)); } else { m_u1.SetZero(); }; if (_local17 > b2Settings.b2_linearSlop){ m_u2.Multiply((1 / _local17)); } else { m_u2.SetZero(); }; if (_local16 < m_maxLength1){ m_limitState1 = e_inactiveLimit; m_limitImpulse1 = 0; } else { m_limitState1 = e_atUpperLimit; m_limitPositionImpulse1 = 0; }; if (_local17 < m_maxLength2){ m_limitState2 = e_inactiveLimit; m_limitImpulse2 = 0; } else { m_limitState2 = e_atUpperLimit; m_limitPositionImpulse2 = 0; }; var _local18:Number = ((_local4 * m_u1.y) - (_local5 * m_u1.x)); var _local19:Number = ((_local6 * m_u2.y) - (_local7 * m_u2.x)); m_limitMass1 = (_local1.m_invMass + ((_local1.m_invI * _local18) * _local18)); m_limitMass2 = (_local2.m_invMass + ((_local2.m_invI * _local19) * _local19)); m_pulleyMass = (m_limitMass1 + ((m_ratio * m_ratio) * m_limitMass2)); m_limitMass1 = (1 / m_limitMass1); m_limitMass2 = (1 / m_limitMass2); m_pulleyMass = (1 / m_pulleyMass); var _local20:Number = ((-(m_pulleyImpulse) - m_limitImpulse1) * m_u1.x); var _local21:Number = ((-(m_pulleyImpulse) - m_limitImpulse1) * m_u1.y); var _local22:Number = (((-(m_ratio) * m_pulleyImpulse) - m_limitImpulse2) * m_u2.x); _local23 = (((-(m_ratio) * m_pulleyImpulse) - m_limitImpulse2) * m_u2.y); _local1.m_linearVelocity.x = (_local1.m_linearVelocity.x + (_local1.m_invMass * _local20)); _local1.m_linearVelocity.y = (_local1.m_linearVelocity.y + (_local1.m_invMass * _local21)); _local1.m_angularVelocity = (_local1.m_angularVelocity + (_local1.m_invI * ((_local4 * _local21) - (_local5 * _local20)))); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local22)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local23)); _local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local6 * _local23) - (_local7 * _local22)))); } override public function GetReactionForce(_arg1:Number):b2Vec2{ return (new b2Vec2()); } override public function SolvePositionConstraints():Boolean{ var _local3:b2Mat22; 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 _local1:b2Body = m_body1; var _local2:b2Body = m_body2; var _local4:Number = (m_ground.m_position.x + m_groundAnchor1.x); var _local5:Number = (m_ground.m_position.y + m_groundAnchor1.y); var _local6:Number = (m_ground.m_position.x + m_groundAnchor2.x); var _local7:Number = (m_ground.m_position.y + m_groundAnchor2.y); var _local21:Number = 0; _local3 = _local1.m_R; _local8 = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); _local9 = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local3 = _local2.m_R; _local10 = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); _local11 = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); _local12 = (_local1.m_position.x + _local8); _local13 = (_local1.m_position.y + _local9); _local14 = (_local2.m_position.x + _local10); _local15 = (_local2.m_position.y + _local11); m_u1.Set((_local12 - _local4), (_local13 - _local5)); m_u2.Set((_local14 - _local6), (_local15 - _local7)); _local16 = m_u1.Length(); _local17 = m_u2.Length(); if (_local16 > b2Settings.b2_linearSlop){ m_u1.Multiply((1 / _local16)); } else { m_u1.SetZero(); }; if (_local17 > b2Settings.b2_linearSlop){ m_u2.Multiply((1 / _local17)); } else { m_u2.SetZero(); }; _local18 = ((m_constant - _local16) - (m_ratio * _local17)); _local21 = b2Math.b2Max(_local21, Math.abs(_local18)); _local18 = b2Math.b2Clamp(_local18, -(b2Settings.b2_maxLinearCorrection), b2Settings.b2_maxLinearCorrection); _local19 = (-(m_pulleyMass) * _local18); _local12 = (-(_local19) * m_u1.x); _local13 = (-(_local19) * m_u1.y); _local14 = ((-(m_ratio) * _local19) * m_u2.x); _local15 = ((-(m_ratio) * _local19) * m_u2.y); _local1.m_position.x = (_local1.m_position.x + (_local1.m_invMass * _local12)); _local1.m_position.y = (_local1.m_position.y + (_local1.m_invMass * _local13)); _local1.m_rotation = (_local1.m_rotation + (_local1.m_invI * ((_local8 * _local13) - (_local9 * _local12)))); _local2.m_position.x = (_local2.m_position.x + (_local2.m_invMass * _local14)); _local2.m_position.y = (_local2.m_position.y + (_local2.m_invMass * _local15)); _local2.m_rotation = (_local2.m_rotation + (_local2.m_invI * ((_local10 * _local15) - (_local11 * _local14)))); _local1.m_R.Set(_local1.m_rotation); _local2.m_R.Set(_local2.m_rotation); if (m_limitState1 == e_atUpperLimit){ _local3 = _local1.m_R; _local8 = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); _local9 = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local12 = (_local1.m_position.x + _local8); _local13 = (_local1.m_position.y + _local9); m_u1.Set((_local12 - _local4), (_local13 - _local5)); _local16 = m_u1.Length(); if (_local16 > b2Settings.b2_linearSlop){ m_u1.x = (m_u1.x * (1 / _local16)); m_u1.y = (m_u1.y * (1 / _local16)); } else { m_u1.SetZero(); }; _local18 = (m_maxLength1 - _local16); _local21 = b2Math.b2Max(_local21, -(_local18)); _local18 = b2Math.b2Clamp((_local18 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); _local19 = (-(m_limitMass1) * _local18); _local20 = m_limitPositionImpulse1; m_limitPositionImpulse1 = b2Math.b2Max(0, (m_limitPositionImpulse1 + _local19)); _local19 = (m_limitPositionImpulse1 - _local20); _local12 = (-(_local19) * m_u1.x); _local13 = (-(_local19) * m_u1.y); _local1.m_position.x = (_local1.m_position.x + (_local1.m_invMass * _local12)); _local1.m_position.y = (_local1.m_position.y + (_local1.m_invMass * _local13)); _local1.m_rotation = (_local1.m_rotation + (_local1.m_invI * ((_local8 * _local13) - (_local9 * _local12)))); _local1.m_R.Set(_local1.m_rotation); }; if (m_limitState2 == e_atUpperLimit){ _local3 = _local2.m_R; _local10 = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); _local11 = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); _local14 = (_local2.m_position.x + _local10); _local15 = (_local2.m_position.y + _local11); m_u2.Set((_local14 - _local6), (_local15 - _local7)); _local17 = m_u2.Length(); if (_local17 > b2Settings.b2_linearSlop){ m_u2.x = (m_u2.x * (1 / _local17)); m_u2.y = (m_u2.y * (1 / _local17)); } else { m_u2.SetZero(); }; _local18 = (m_maxLength2 - _local17); _local21 = b2Math.b2Max(_local21, -(_local18)); _local18 = b2Math.b2Clamp((_local18 + b2Settings.b2_linearSlop), -(b2Settings.b2_maxLinearCorrection), 0); _local19 = (-(m_limitMass2) * _local18); _local20 = m_limitPositionImpulse2; m_limitPositionImpulse2 = b2Math.b2Max(0, (m_limitPositionImpulse2 + _local19)); _local19 = (m_limitPositionImpulse2 - _local20); _local14 = (-(_local19) * m_u2.x); _local15 = (-(_local19) * m_u2.y); _local2.m_position.x = (_local2.m_position.x + (_local2.m_invMass * _local14)); _local2.m_position.y = (_local2.m_position.y + (_local2.m_invMass * _local15)); _local2.m_rotation = (_local2.m_rotation + (_local2.m_invI * ((_local10 * _local15) - (_local11 * _local14)))); _local2.m_R.Set(_local2.m_rotation); }; return ((_local21 < b2Settings.b2_linearSlop)); } public function GetGroundPoint2():b2Vec2{ return (new b2Vec2((m_ground.m_position.x + m_groundAnchor2.x), (m_ground.m_position.y + m_groundAnchor2.y))); } override public function GetReactionTorque(_arg1:Number):Number{ return (0); } public function GetGroundPoint1():b2Vec2{ return (new b2Vec2((m_ground.m_position.x + m_groundAnchor1.x), (m_ground.m_position.y + m_groundAnchor1.y))); } override public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ var _local4:b2Mat22; 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 _local2:b2Body = m_body1; var _local3:b2Body = m_body2; _local4 = _local2.m_R; var _local5:Number = ((_local4.col1.x * m_localAnchor1.x) + (_local4.col2.x * m_localAnchor1.y)); var _local6:Number = ((_local4.col1.y * m_localAnchor1.x) + (_local4.col2.y * m_localAnchor1.y)); _local4 = _local3.m_R; var _local7:Number = ((_local4.col1.x * m_localAnchor2.x) + (_local4.col2.x * m_localAnchor2.y)); var _local8:Number = ((_local4.col1.y * m_localAnchor2.x) + (_local4.col2.y * m_localAnchor2.y)); _local9 = (_local2.m_linearVelocity.x + (-(_local2.m_angularVelocity) * _local6)); _local10 = (_local2.m_linearVelocity.y + (_local2.m_angularVelocity * _local5)); _local11 = (_local3.m_linearVelocity.x + (-(_local3.m_angularVelocity) * _local8)); _local12 = (_local3.m_linearVelocity.y + (_local3.m_angularVelocity * _local7)); _local17 = (-(((m_u1.x * _local9) + (m_u1.y * _local10))) - (m_ratio * ((m_u2.x * _local11) + (m_u2.y * _local12)))); _local18 = (-(m_pulleyMass) * _local17); m_pulleyImpulse = (m_pulleyImpulse + _local18); _local13 = (-(_local18) * m_u1.x); _local14 = (-(_local18) * m_u1.y); _local15 = ((-(m_ratio) * _local18) * m_u2.x); _local16 = ((-(m_ratio) * _local18) * m_u2.y); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local13)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local14)); _local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local5 * _local14) - (_local6 * _local13)))); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local3.m_invMass * _local15)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local3.m_invMass * _local16)); _local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * ((_local7 * _local16) - (_local8 * _local15)))); if (m_limitState1 == e_atUpperLimit){ _local9 = (_local2.m_linearVelocity.x + (-(_local2.m_angularVelocity) * _local6)); _local10 = (_local2.m_linearVelocity.y + (_local2.m_angularVelocity * _local5)); _local17 = -(((m_u1.x * _local9) + (m_u1.y * _local10))); _local18 = (-(m_limitMass1) * _local17); _local19 = m_limitImpulse1; m_limitImpulse1 = b2Math.b2Max(0, (m_limitImpulse1 + _local18)); _local18 = (m_limitImpulse1 - _local19); _local13 = (-(_local18) * m_u1.x); _local14 = (-(_local18) * m_u1.y); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local2.m_invMass * _local13)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local2.m_invMass * _local14)); _local2.m_angularVelocity = (_local2.m_angularVelocity + (_local2.m_invI * ((_local5 * _local14) - (_local6 * _local13)))); }; if (m_limitState2 == e_atUpperLimit){ _local11 = (_local3.m_linearVelocity.x + (-(_local3.m_angularVelocity) * _local8)); _local12 = (_local3.m_linearVelocity.y + (_local3.m_angularVelocity * _local7)); _local17 = -(((m_u2.x * _local11) + (m_u2.y * _local12))); _local18 = (-(m_limitMass2) * _local17); _local19 = m_limitImpulse2; m_limitImpulse2 = b2Math.b2Max(0, (m_limitImpulse2 + _local18)); _local18 = (m_limitImpulse2 - _local19); _local15 = (-(_local18) * m_u2.x); _local16 = (-(_local18) * m_u2.y); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local3.m_invMass * _local15)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local3.m_invMass * _local16)); _local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * ((_local7 * _local16) - (_local8 * _local15)))); }; } public function GetRatio():Number{ return (m_ratio); } public function GetLength2():Number{ var _local1:b2Mat22; _local1 = m_body2.m_R; var _local2:Number = (m_body2.m_position.x + ((_local1.col1.x * m_localAnchor2.x) + (_local1.col2.x * m_localAnchor2.y))); var _local3:Number = (m_body2.m_position.y + ((_local1.col1.y * m_localAnchor2.x) + (_local1.col2.y * m_localAnchor2.y))); var _local4:Number = (_local2 - (m_ground.m_position.x + m_groundAnchor2.x)); var _local5:Number = (_local3 - (m_ground.m_position.y + m_groundAnchor2.y)); return (Math.sqrt(((_local4 * _local4) + (_local5 * _local5)))); } } }//package Box2D.Dynamics.Joints
Section 53
//b2PulleyJointDef (Box2D.Dynamics.Joints.b2PulleyJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2PulleyJointDef extends b2JointDef { public var maxLength1:Number; public var groundPoint1:b2Vec2; public var groundPoint2:b2Vec2; public var ratio:Number; public var maxLength2:Number; public var anchorPoint1:b2Vec2; public var anchorPoint2:b2Vec2; public function b2PulleyJointDef(){ groundPoint1 = new b2Vec2(); groundPoint2 = new b2Vec2(); anchorPoint1 = new b2Vec2(); anchorPoint2 = new b2Vec2(); super(); type = b2Joint.e_pulleyJoint; groundPoint1.Set(-1, 1); groundPoint2.Set(1, 1); anchorPoint1.Set(-1, 0); anchorPoint2.Set(1, 0); maxLength1 = (0.5 * b2PulleyJoint.b2_minPulleyLength); maxLength2 = (0.5 * b2PulleyJoint.b2_minPulleyLength); ratio = 1; collideConnected = true; } } }//package Box2D.Dynamics.Joints
Section 54
//b2RevoluteJoint (Box2D.Dynamics.Joints.b2RevoluteJoint) package Box2D.Dynamics.Joints { import Box2D.Dynamics.*; import Box2D.Common.Math.*; import Box2D.Common.*; public class b2RevoluteJoint extends b2Joint { public var m_enableLimit:Boolean; public var m_limitState:int; public var m_ptpMass:b2Mat22; public var m_motorMass:Number; public var m_localAnchor1:b2Vec2; public var m_localAnchor2:b2Vec2; private var K1:b2Mat22; private var K2:b2Mat22; private var K:b2Mat22; public var m_limitImpulse:Number; private var K3:b2Mat22; public var m_motorImpulse:Number; public var m_enableMotor:Boolean; public var m_limitPositionImpulse:Number; public var m_motorSpeed:Number; public var m_upperAngle:Number; public var m_lowerAngle:Number; public var m_maxMotorTorque:Number; public var m_ptpImpulse:b2Vec2; public var m_intialAngle:Number; public static var tImpulse:b2Vec2 = new b2Vec2(); public function b2RevoluteJoint(_arg1:b2RevoluteJointDef){ var _local2:b2Mat22; var _local3:Number; var _local4:Number; K = new b2Mat22(); K1 = new b2Mat22(); K2 = new b2Mat22(); K3 = new b2Mat22(); m_localAnchor1 = new b2Vec2(); m_localAnchor2 = new b2Vec2(); m_ptpImpulse = new b2Vec2(); m_ptpMass = new b2Mat22(); super(_arg1); _local2 = m_body1.m_R; _local3 = (_arg1.anchorPoint.x - m_body1.m_position.x); _local4 = (_arg1.anchorPoint.y - m_body1.m_position.y); m_localAnchor1.x = ((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)); m_localAnchor1.y = ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y)); _local2 = m_body2.m_R; _local3 = (_arg1.anchorPoint.x - m_body2.m_position.x); _local4 = (_arg1.anchorPoint.y - m_body2.m_position.y); m_localAnchor2.x = ((_local3 * _local2.col1.x) + (_local4 * _local2.col1.y)); m_localAnchor2.y = ((_local3 * _local2.col2.x) + (_local4 * _local2.col2.y)); m_intialAngle = (m_body2.m_rotation - m_body1.m_rotation); m_ptpImpulse.Set(0, 0); m_motorImpulse = 0; m_limitImpulse = 0; m_limitPositionImpulse = 0; m_lowerAngle = _arg1.lowerAngle; m_upperAngle = _arg1.upperAngle; m_maxMotorTorque = _arg1.motorTorque; m_motorSpeed = _arg1.motorSpeed; m_enableLimit = _arg1.enableLimit; m_enableMotor = _arg1.enableMotor; } override public function GetAnchor1():b2Vec2{ var _local1:b2Mat22 = m_body1.m_R; return (new b2Vec2((m_body1.m_position.x + ((_local1.col1.x * m_localAnchor1.x) + (_local1.col2.x * m_localAnchor1.y))), (m_body1.m_position.y + ((_local1.col1.y * m_localAnchor1.x) + (_local1.col2.y * m_localAnchor1.y))))); } override public function GetAnchor2():b2Vec2{ var _local1:b2Mat22 = m_body2.m_R; return (new b2Vec2((m_body2.m_position.x + ((_local1.col1.x * m_localAnchor2.x) + (_local1.col2.x * m_localAnchor2.y))), (m_body2.m_position.y + ((_local1.col1.y * m_localAnchor2.x) + (_local1.col2.y * m_localAnchor2.y))))); } override public function PrepareVelocitySolver():void{ var _local1:b2Body; var _local2:b2Body; var _local3:b2Mat22; var _local12:Number; _local1 = m_body1; _local2 = m_body2; _local3 = _local1.m_R; var _local4:Number = ((_local3.col1.x * m_localAnchor1.x) + (_local3.col2.x * m_localAnchor1.y)); var _local5:Number = ((_local3.col1.y * m_localAnchor1.x) + (_local3.col2.y * m_localAnchor1.y)); _local3 = _local2.m_R; var _local6:Number = ((_local3.col1.x * m_localAnchor2.x) + (_local3.col2.x * m_localAnchor2.y)); var _local7:Number = ((_local3.col1.y * m_localAnchor2.x) + (_local3.col2.y * m_localAnchor2.y)); var _local8:Number = _local1.m_invMass; var _local9:Number = _local2.m_invMass; var _local10:Number = _local1.m_invI; var _local11:Number = _local2.m_invI; K1.col1.x = (_local8 + _local9); K1.col2.x = 0; K1.col1.y = 0; K1.col2.y = (_local8 + _local9); K2.col1.x = ((_local10 * _local5) * _local5); K2.col2.x = ((-(_local10) * _local4) * _local5); K2.col1.y = ((-(_local10) * _local4) * _local5); K2.col2.y = ((_local10 * _local4) * _local4); K3.col1.x = ((_local11 * _local7) * _local7); K3.col2.x = ((-(_local11) * _local6) * _local7); K3.col1.y = ((-(_local11) * _local6) * _local7); K3.col2.y = ((_local11 * _local6) * _local6); K.SetM(K1); K.AddM(K2); K.AddM(K3); K.Invert(m_ptpMass); m_motorMass = (1 / (_local10 + _local11)); if (m_enableMotor == false){ m_motorImpulse = 0; }; if (m_enableLimit){ _local12 = ((_local2.m_rotation - _local1.m_rotation) - m_intialAngle); if (b2Math.b2Abs((m_upperAngle - m_lowerAngle)) < (2 * b2Settings.b2_angularSlop)){ m_limitState = e_equalLimits; } else { if (_local12 <= m_lowerAngle){ if (m_limitState != e_atLowerLimit){ m_limitImpulse = 0; }; m_limitState = e_atLowerLimit; } else { if (_local12 >= m_upperAngle){ if (m_limitState != e_atUpperLimit){ m_limitImpulse = 0; }; m_limitState = e_atUpperLimit; } else { m_limitState = e_inactiveLimit; m_limitImpulse = 0; }; }; }; } else { m_limitImpulse = 0; }; if (b2World.s_enableWarmStarting){ _local1.m_linearVelocity.x = (_local1.m_linearVelocity.x - (_local8 * m_ptpImpulse.x)); _local1.m_linearVelocity.y = (_local1.m_linearVelocity.y - (_local8 * m_ptpImpulse.y)); _local1.m_angularVelocity = (_local1.m_angularVelocity - (_local10 * ((((_local4 * m_ptpImpulse.y) - (_local5 * m_ptpImpulse.x)) + m_motorImpulse) + m_limitImpulse))); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x + (_local9 * m_ptpImpulse.x)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y + (_local9 * m_ptpImpulse.y)); _local2.m_angularVelocity = (_local2.m_angularVelocity + (_local11 * ((((_local6 * m_ptpImpulse.y) - (_local7 * m_ptpImpulse.x)) + m_motorImpulse) + m_limitImpulse))); } else { m_ptpImpulse.SetZero(); m_motorImpulse = 0; m_limitImpulse = 0; }; m_limitPositionImpulse = 0; } override public function GetReactionForce(_arg1:Number):b2Vec2{ var _local2:b2Vec2 = m_ptpImpulse.Copy(); _local2.Multiply(_arg1); return (_local2); } override public function SolvePositionConstraints():Boolean{ var _local1:Number; var _local2:Number; var _local6:b2Mat22; var _local24:Number; var _local25:Number; var _local3:b2Body = m_body1; var _local4:b2Body = m_body2; var _local5:Number = 0; _local6 = _local3.m_R; var _local7:Number = ((_local6.col1.x * m_localAnchor1.x) + (_local6.col2.x * m_localAnchor1.y)); var _local8:Number = ((_local6.col1.y * m_localAnchor1.x) + (_local6.col2.y * m_localAnchor1.y)); _local6 = _local4.m_R; var _local9:Number = ((_local6.col1.x * m_localAnchor2.x) + (_local6.col2.x * m_localAnchor2.y)); var _local10:Number = ((_local6.col1.y * m_localAnchor2.x) + (_local6.col2.y * m_localAnchor2.y)); var _local11:Number = (_local3.m_position.x + _local7); var _local12:Number = (_local3.m_position.y + _local8); var _local13:Number = (_local4.m_position.x + _local9); var _local14:Number = (_local4.m_position.y + _local10); var _local15:Number = (_local13 - _local11); var _local16:Number = (_local14 - _local12); _local5 = Math.sqrt(((_local15 * _local15) + (_local16 * _local16))); var _local17:Number = _local3.m_invMass; var _local18:Number = _local4.m_invMass; var _local19:Number = _local3.m_invI; var _local20:Number = _local4.m_invI; K1.col1.x = (_local17 + _local18); K1.col2.x = 0; K1.col1.y = 0; K1.col2.y = (_local17 + _local18); K2.col1.x = ((_local19 * _local8) * _local8); K2.col2.x = ((-(_local19) * _local7) * _local8); K2.col1.y = ((-(_local19) * _local7) * _local8); K2.col2.y = ((_local19 * _local7) * _local7); K3.col1.x = ((_local20 * _local10) * _local10); K3.col2.x = ((-(_local20) * _local9) * _local10); K3.col1.y = ((-(_local20) * _local9) * _local10); K3.col2.y = ((_local20 * _local9) * _local9); K.SetM(K1); K.AddM(K2); K.AddM(K3); K.Solve(tImpulse, -(_local15), -(_local16)); var _local21:Number = tImpulse.x; var _local22:Number = tImpulse.y; _local3.m_position.x = (_local3.m_position.x - (_local3.m_invMass * _local21)); _local3.m_position.y = (_local3.m_position.y - (_local3.m_invMass * _local22)); _local3.m_rotation = (_local3.m_rotation - (_local3.m_invI * ((_local7 * _local22) - (_local8 * _local21)))); _local3.m_R.Set(_local3.m_rotation); _local4.m_position.x = (_local4.m_position.x + (_local4.m_invMass * _local21)); _local4.m_position.y = (_local4.m_position.y + (_local4.m_invMass * _local22)); _local4.m_rotation = (_local4.m_rotation + (_local4.m_invI * ((_local9 * _local22) - (_local10 * _local21)))); _local4.m_R.Set(_local4.m_rotation); var _local23:Number = 0; if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ _local24 = ((_local4.m_rotation - _local3.m_rotation) - m_intialAngle); _local25 = 0; if (m_limitState == e_equalLimits){ _local2 = b2Math.b2Clamp(_local24, -(b2Settings.b2_maxAngularCorrection), b2Settings.b2_maxAngularCorrection); _local25 = (-(m_motorMass) * _local2); _local23 = b2Math.b2Abs(_local2); } else { if (m_limitState == e_atLowerLimit){ _local2 = (_local24 - m_lowerAngle); _local23 = b2Math.b2Max(0, -(_local2)); _local2 = b2Math.b2Clamp((_local2 + b2Settings.b2_angularSlop), -(b2Settings.b2_maxAngularCorrection), 0); _local25 = (-(m_motorMass) * _local2); _local1 = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Max((m_limitPositionImpulse + _local25), 0); _local25 = (m_limitPositionImpulse - _local1); } else { if (m_limitState == e_atUpperLimit){ _local2 = (_local24 - m_upperAngle); _local23 = b2Math.b2Max(0, _local2); _local2 = b2Math.b2Clamp((_local2 - b2Settings.b2_angularSlop), 0, b2Settings.b2_maxAngularCorrection); _local25 = (-(m_motorMass) * _local2); _local1 = m_limitPositionImpulse; m_limitPositionImpulse = b2Math.b2Min((m_limitPositionImpulse + _local25), 0); _local25 = (m_limitPositionImpulse - _local1); }; }; }; _local3.m_rotation = (_local3.m_rotation - (_local3.m_invI * _local25)); _local3.m_R.Set(_local3.m_rotation); _local4.m_rotation = (_local4.m_rotation + (_local4.m_invI * _local25)); _local4.m_R.Set(_local4.m_rotation); }; return ((((_local5 <= b2Settings.b2_linearSlop)) && ((_local23 <= b2Settings.b2_angularSlop)))); } public function SetMotorSpeed(_arg1:Number):void{ m_motorSpeed = _arg1; } public function GetJointSpeed():Number{ return ((m_body2.m_angularVelocity - m_body1.m_angularVelocity)); } public function SetMotorTorque(_arg1:Number):void{ m_maxMotorTorque = _arg1; } public function GetJointAngle():Number{ return ((m_body2.m_rotation - m_body1.m_rotation)); } public function GetMotorTorque(_arg1:Number):Number{ return ((_arg1 * m_motorImpulse)); } override public function GetReactionTorque(_arg1:Number):Number{ return ((_arg1 * m_limitImpulse)); } override public function SolveVelocityConstraints(_arg1:b2TimeStep):void{ var _local4:b2Mat22; var _local9:Number; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:Number; var _local2:b2Body = m_body1; var _local3:b2Body = m_body2; _local4 = _local2.m_R; var _local5:Number = ((_local4.col1.x * m_localAnchor1.x) + (_local4.col2.x * m_localAnchor1.y)); var _local6:Number = ((_local4.col1.y * m_localAnchor1.x) + (_local4.col2.y * m_localAnchor1.y)); _local4 = _local3.m_R; var _local7:Number = ((_local4.col1.x * m_localAnchor2.x) + (_local4.col2.x * m_localAnchor2.y)); var _local8:Number = ((_local4.col1.y * m_localAnchor2.x) + (_local4.col2.y * m_localAnchor2.y)); var _local10:Number = (((_local3.m_linearVelocity.x + (-(_local3.m_angularVelocity) * _local8)) - _local2.m_linearVelocity.x) - (-(_local2.m_angularVelocity) * _local6)); var _local11:Number = (((_local3.m_linearVelocity.y + (_local3.m_angularVelocity * _local7)) - _local2.m_linearVelocity.y) - (_local2.m_angularVelocity * _local5)); var _local12:Number = -(((m_ptpMass.col1.x * _local10) + (m_ptpMass.col2.x * _local11))); var _local13:Number = -(((m_ptpMass.col1.y * _local10) + (m_ptpMass.col2.y * _local11))); m_ptpImpulse.x = (m_ptpImpulse.x + _local12); m_ptpImpulse.y = (m_ptpImpulse.y + _local13); _local2.m_linearVelocity.x = (_local2.m_linearVelocity.x - (_local2.m_invMass * _local12)); _local2.m_linearVelocity.y = (_local2.m_linearVelocity.y - (_local2.m_invMass * _local13)); _local2.m_angularVelocity = (_local2.m_angularVelocity - (_local2.m_invI * ((_local5 * _local13) - (_local6 * _local12)))); _local3.m_linearVelocity.x = (_local3.m_linearVelocity.x + (_local3.m_invMass * _local12)); _local3.m_linearVelocity.y = (_local3.m_linearVelocity.y + (_local3.m_invMass * _local13)); _local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * ((_local7 * _local13) - (_local8 * _local12)))); if (((m_enableMotor) && (!((m_limitState == e_equalLimits))))){ _local14 = ((_local3.m_angularVelocity - _local2.m_angularVelocity) - m_motorSpeed); _local15 = (-(m_motorMass) * _local14); _local16 = m_motorImpulse; m_motorImpulse = b2Math.b2Clamp((m_motorImpulse + _local15), (-(_arg1.dt) * m_maxMotorTorque), (_arg1.dt * m_maxMotorTorque)); _local15 = (m_motorImpulse - _local16); _local2.m_angularVelocity = (_local2.m_angularVelocity - (_local2.m_invI * _local15)); _local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * _local15)); }; if (((m_enableLimit) && (!((m_limitState == e_inactiveLimit))))){ _local17 = (_local3.m_angularVelocity - _local2.m_angularVelocity); _local18 = (-(m_motorMass) * _local17); if (m_limitState == e_equalLimits){ m_limitImpulse = (m_limitImpulse + _local18); } else { if (m_limitState == e_atLowerLimit){ _local9 = m_limitImpulse; m_limitImpulse = b2Math.b2Max((m_limitImpulse + _local18), 0); _local18 = (m_limitImpulse - _local9); } else { if (m_limitState == e_atUpperLimit){ _local9 = m_limitImpulse; m_limitImpulse = b2Math.b2Min((m_limitImpulse + _local18), 0); _local18 = (m_limitImpulse - _local9); }; }; }; _local2.m_angularVelocity = (_local2.m_angularVelocity - (_local2.m_invI * _local18)); _local3.m_angularVelocity = (_local3.m_angularVelocity + (_local3.m_invI * _local18)); }; } } }//package Box2D.Dynamics.Joints
Section 55
//b2RevoluteJointDef (Box2D.Dynamics.Joints.b2RevoluteJointDef) package Box2D.Dynamics.Joints { import Box2D.Common.Math.*; public class b2RevoluteJointDef extends b2JointDef { public var enableMotor:Boolean; public var upperAngle:Number; public var lowerAngle:Number; public var enableLimit:Boolean; public var motorSpeed:Number; public var anchorPoint:b2Vec2; public var motorTorque:Number; public function b2RevoluteJointDef(){ type = b2Joint.e_revoluteJoint; anchorPoint = new b2Vec2(0, 0); lowerAngle = 0; upperAngle = 0; motorTorque = 0; motorSpeed = 0; enableLimit = false; enableMotor = false; } } }//package Box2D.Dynamics.Joints
Section 56
//b2Body (Box2D.Dynamics.b2Body) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2Body { public var m_next:b2Body; public var m_R:b2Mat22; public var m_contactList:b2ContactNode; public var m_angularVelocity:Number; public var m_rotation:Number; public var m_shapeList:b2Shape; public var m_force:b2Vec2; public var m_torque:Number; public var m_mass:Number; public var m_rotation0:Number; public var m_invI:Number; public var m_shapeCount:int; public var m_userData; public var m_linearVelocity:b2Vec2; public var m_flags:uint; public var m_invMass:Number; public var m_position:b2Vec2; public var m_linearDamping:Number; public var m_prev:b2Body; public var m_world:b2World; public var m_angularDamping:Number; public var m_position0:b2Vec2; private var sMat0:b2Mat22; public var m_center:b2Vec2; public var m_sleepTime:Number; public var m_I:Number; public var m_jointList:b2JointNode; public static var e_frozenFlag:uint = 2; public static var e_sleepFlag:uint = 8; public static var e_islandFlag:uint = 4; public static var e_destroyFlag:uint = 32; public static var e_allowSleepFlag:uint = 16; public static var e_staticFlag:uint = 1; public function b2Body(_arg1:b2BodyDef, _arg2:b2World){ var _local3:int; var _local4:b2ShapeDef; var _local5:b2MassData; var _local7:b2Vec2; var _local8:b2Shape; sMat0 = new b2Mat22(); m_position = new b2Vec2(); m_R = new b2Mat22(0); m_position0 = new b2Vec2(); super(); m_flags = 0; m_position.SetV(_arg1.position); m_rotation = _arg1.rotation; m_R.Set(m_rotation); m_position0.SetV(m_position); m_rotation0 = m_rotation; m_world = _arg2; m_linearDamping = b2Math.b2Clamp((1 - _arg1.linearDamping), 0, 1); m_angularDamping = b2Math.b2Clamp((1 - _arg1.angularDamping), 0, 1); m_force = new b2Vec2(0, 0); m_torque = 0; m_mass = 0; var _local6:Array = new Array(b2Settings.b2_maxShapesPerBody); _local3 = 0; while (_local3 < b2Settings.b2_maxShapesPerBody) { _local6[_local3] = new b2MassData(); _local3++; }; m_shapeCount = 0; m_center = new b2Vec2(0, 0); _local3 = 0; while (_local3 < b2Settings.b2_maxShapesPerBody) { _local4 = _arg1.shapes[_local3]; if (_local4 == null){ break; }; _local5 = _local6[_local3]; _local4.ComputeMass(_local5); m_mass = (m_mass + _local5.mass); m_center.x = (m_center.x + (_local5.mass * (_local4.localPosition.x + _local5.center.x))); m_center.y = (m_center.y + (_local5.mass * (_local4.localPosition.y + _local5.center.y))); m_shapeCount++; _local3++; }; if (m_mass > 0){ m_center.Multiply((1 / m_mass)); m_position.Add(b2Math.b2MulMV(m_R, m_center)); } else { m_flags = (m_flags | e_staticFlag); }; m_I = 0; _local3 = 0; while (_local3 < m_shapeCount) { _local4 = _arg1.shapes[_local3]; _local5 = _local6[_local3]; m_I = (m_I + _local5.I); _local7 = b2Math.SubtractVV(b2Math.AddVV(_local4.localPosition, _local5.center), m_center); m_I = (m_I + (_local5.mass * b2Math.b2Dot(_local7, _local7))); _local3++; }; if (m_mass > 0){ m_invMass = (1 / m_mass); } else { m_invMass = 0; }; if ((((m_I > 0)) && ((_arg1.preventRotation == false)))){ m_invI = (1 / m_I); } else { m_I = 0; m_invI = 0; }; m_linearVelocity = b2Math.AddVV(_arg1.linearVelocity, b2Math.b2CrossFV(_arg1.angularVelocity, m_center)); m_angularVelocity = _arg1.angularVelocity; m_jointList = null; m_contactList = null; m_prev = null; m_next = null; m_shapeList = null; _local3 = 0; while (_local3 < m_shapeCount) { _local4 = _arg1.shapes[_local3]; _local8 = b2Shape.Create(_local4, this, m_center); _local8.m_next = m_shapeList; m_shapeList = _local8; _local3++; }; m_sleepTime = 0; if (_arg1.allowSleep){ m_flags = (m_flags | e_allowSleepFlag); }; if (_arg1.isSleeping){ m_flags = (m_flags | e_sleepFlag); }; if ((((m_flags & e_sleepFlag)) || ((m_invMass == 0)))){ m_linearVelocity.Set(0, 0); m_angularVelocity = 0; }; m_userData = _arg1.userData; } public function SetCenterPosition(_arg1:b2Vec2, _arg2:Number):void{ if (IsFrozen()){ return; }; m_rotation = _arg2; m_R.Set(m_rotation); m_position.SetV(_arg1); m_position0.SetV(m_position); m_rotation0 = m_rotation; var _local3:b2Shape = m_shapeList; while (_local3 != null) { _local3.Synchronize(m_position, m_R, m_position, m_R); _local3 = _local3.m_next; }; m_world.m_broadPhase.Commit(); } public function GetWorldPoint(_arg1:b2Vec2):b2Vec2{ return (b2Math.AddVV(m_position, b2Math.b2MulMV(m_R, _arg1))); } public function SetLinearVelocity(_arg1:b2Vec2):void{ m_linearVelocity.SetV(_arg1); } public function WakeUp():void{ m_flags = (m_flags & ~(e_sleepFlag)); m_sleepTime = 0; } public function IsFrozen():Boolean{ return (((m_flags & e_frozenFlag) == e_frozenFlag)); } public function IsSleeping():Boolean{ return (((m_flags & e_sleepFlag) == e_sleepFlag)); } public function GetLocalVector(_arg1:b2Vec2):b2Vec2{ return (b2Math.b2MulTMV(m_R, _arg1)); } public function QuickSyncShapes():void{ var _local1:b2Shape = m_shapeList; while (_local1 != null) { _local1.QuickSync(m_position, m_R); _local1 = _local1.m_next; }; } public function GetInertia():Number{ return (m_I); } public function GetJointList():b2JointNode{ return (m_jointList); } public function Freeze():void{ m_flags = (m_flags | e_frozenFlag); m_linearVelocity.SetZero(); m_angularVelocity = 0; var _local1:b2Shape = m_shapeList; while (_local1 != null) { _local1.DestroyProxy(); _local1 = _local1.m_next; }; } public function GetRotationMatrix():b2Mat22{ return (m_R); } public function SetAngularVelocity(_arg1:Number):void{ m_angularVelocity = _arg1; } public function SynchronizeShapes():void{ sMat0.Set(m_rotation0); var _local1:b2Shape = m_shapeList; while (_local1 != null) { _local1.Synchronize(m_position0, sMat0, m_position, m_R); _local1 = _local1.m_next; }; } public function ApplyForce(_arg1:b2Vec2, _arg2:b2Vec2):void{ if (IsSleeping() == false){ m_force.Add(_arg1); m_torque = (m_torque + b2Math.b2CrossVV(b2Math.SubtractVV(_arg2, m_position), _arg1)); }; } public function GetOriginPosition():b2Vec2{ return (b2Math.SubtractVV(m_position, b2Math.b2MulMV(m_R, m_center))); } public function ApplyImpulse(_arg1:b2Vec2, _arg2:b2Vec2):void{ if (IsSleeping() == false){ m_linearVelocity.Add(b2Math.MulFV(m_invMass, _arg1)); m_angularVelocity = (m_angularVelocity + (m_invI * b2Math.b2CrossVV(b2Math.SubtractVV(_arg2, m_position), _arg1))); }; } public function GetContactList():b2ContactNode{ return (m_contactList); } public function GetShapeList():b2Shape{ return (m_shapeList); } public function GetMass():Number{ return (m_mass); } public function GetAngularVelocity():Number{ return (m_angularVelocity); } public function SetOriginPosition(_arg1:b2Vec2, _arg2:Number):void{ if (IsFrozen()){ return; }; m_rotation = _arg2; m_R.Set(m_rotation); m_position = b2Math.AddVV(_arg1, b2Math.b2MulMV(m_R, m_center)); m_position0.SetV(m_position); m_rotation0 = m_rotation; var _local3:b2Shape = m_shapeList; while (_local3 != null) { _local3.Synchronize(m_position, m_R, m_position, m_R); _local3 = _local3.m_next; }; m_world.m_broadPhase.Commit(); } public function GetLocalPoint(_arg1:b2Vec2):b2Vec2{ return (b2Math.b2MulTMV(m_R, b2Math.SubtractVV(_arg1, m_position))); } public function GetRotation():Number{ return (m_rotation); } public function IsStatic():Boolean{ return (((m_flags & e_staticFlag) == e_staticFlag)); } public function Destroy():void{ var _local2:b2Shape; var _local1:b2Shape = m_shapeList; while (_local1) { _local2 = _local1; _local1 = _local1.m_next; b2Shape.Destroy(_local2); }; } public function GetWorldVector(_arg1:b2Vec2):b2Vec2{ return (b2Math.b2MulMV(m_R, _arg1)); } public function GetNext():b2Body{ return (m_next); } public function IsConnected(_arg1:b2Body):Boolean{ var _local2:b2JointNode = m_jointList; while (_local2 != null) { if (_local2.other == _arg1){ return ((_local2.joint.m_collideConnected == false)); }; _local2 = _local2.next; }; return (false); } public function GetUserData(){ return (m_userData); } public function AllowSleeping(_arg1:Boolean):void{ if (_arg1){ m_flags = (m_flags | e_allowSleepFlag); } else { m_flags = (m_flags & ~(e_allowSleepFlag)); WakeUp(); }; } public function ApplyTorque(_arg1:Number):void{ if (IsSleeping() == false){ m_torque = (m_torque + _arg1); }; } public function GetCenterPosition():b2Vec2{ return (m_position); } public function GetLinearVelocity():b2Vec2{ return (m_linearVelocity); } } }//package Box2D.Dynamics
Section 57
//b2BodyDef (Box2D.Dynamics.b2BodyDef) package Box2D.Dynamics { import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2BodyDef { public var angularDamping:Number; public var linearVelocity:b2Vec2; public var position:b2Vec2; public var isSleeping:Boolean; public var allowSleep:Boolean; public var userData; public var preventRotation:Boolean; public var shapes:Array; public var linearDamping:Number; public var rotation:Number; public var angularVelocity:Number; public function b2BodyDef(){ shapes = new Array(); super(); userData = null; var _local1:int; while (_local1 < b2Settings.b2_maxShapesPerBody) { shapes[_local1] = null; _local1++; }; position = new b2Vec2(0, 0); rotation = 0; linearVelocity = new b2Vec2(0, 0); angularVelocity = 0; linearDamping = 0; angularDamping = 0; allowSleep = true; isSleeping = false; preventRotation = false; } public function AddShape(_arg1:b2ShapeDef):void{ var _local2:int; while (_local2 < b2Settings.b2_maxShapesPerBody) { if (shapes[_local2] == null){ shapes[_local2] = _arg1; break; }; _local2++; }; } } }//package Box2D.Dynamics
Section 58
//b2CollisionFilter (Box2D.Dynamics.b2CollisionFilter) package Box2D.Dynamics { import Box2D.Collision.Shapes.*; public class b2CollisionFilter { public static var b2_defaultFilter:b2CollisionFilter = new (b2CollisionFilter); ; public function ShouldCollide(_arg1:b2Shape, _arg2:b2Shape):Boolean{ if ((((_arg1.m_groupIndex == _arg2.m_groupIndex)) && (!((_arg1.m_groupIndex == 0))))){ return ((_arg1.m_groupIndex > 0)); }; var _local3:Boolean = ((!(((_arg1.m_maskBits & _arg2.m_categoryBits) == 0))) && (!(((_arg1.m_categoryBits & _arg2.m_maskBits) == 0)))); return (_local3); } } }//package Box2D.Dynamics
Section 59
//b2ContactManager (Box2D.Dynamics.b2ContactManager) package Box2D.Dynamics { import Box2D.Collision.*; import Box2D.Dynamics.Contacts.*; import Box2D.Collision.Shapes.*; public class b2ContactManager extends b2PairCallback { public var m_world:b2World; public var m_destroyImmediate:Boolean; public var m_nullContact:b2NullContact; public function b2ContactManager(){ m_nullContact = new b2NullContact(); super(); m_world = null; m_destroyImmediate = false; } public function Collide(_arg1:b2Body=null):void{ var _local2:b2Body; var _local3:b2Body; var _local4:b2ContactNode; var _local5:b2ContactNode; var _local7:int; var _local8:int; var _local6:b2Contact = m_world.m_contactList; while (_local6 != null) { if (((((!((_arg1 == null))) && (!((_local6.m_shape1.m_body == _arg1))))) && (!((_local6.m_shape2.m_body == _arg1))))){ } else { if (((_local6.m_shape1.m_body.IsSleeping()) && (_local6.m_shape2.m_body.IsSleeping()))){ } else { _local7 = _local6.GetManifoldCount(); _local6.Evaluate(); _local8 = _local6.GetManifoldCount(); if ((((_local7 == 0)) && ((_local8 > 0)))){ _local2 = _local6.m_shape1.m_body; _local3 = _local6.m_shape2.m_body; _local4 = _local6.m_node1; _local5 = _local6.m_node2; _local4.contact = _local6; _local4.other = _local3; _local4.prev = null; _local4.next = _local2.m_contactList; if (_local4.next != null){ _local4.next.prev = _local6.m_node1; }; _local2.m_contactList = _local6.m_node1; _local5.contact = _local6; _local5.other = _local2; _local5.prev = null; _local5.next = _local3.m_contactList; if (_local5.next != null){ _local5.next.prev = _local5; }; _local3.m_contactList = _local5; } else { if ((((_local7 > 0)) && ((_local8 == 0)))){ _local2 = _local6.m_shape1.m_body; _local3 = _local6.m_shape2.m_body; _local4 = _local6.m_node1; _local5 = _local6.m_node2; if (_local4.prev){ _local4.prev.next = _local4.next; }; if (_local4.next){ _local4.next.prev = _local4.prev; }; if (_local4 == _local2.m_contactList){ _local2.m_contactList = _local4.next; }; _local4.prev = null; _local4.next = null; if (_local5.prev){ _local5.prev.next = _local5.next; }; if (_local5.next){ _local5.next.prev = _local5.prev; }; if (_local5 == _local3.m_contactList){ _local3.m_contactList = _local5.next; }; _local5.prev = null; _local5.next = null; }; }; }; }; _local6 = _local6.m_next; }; } public function CleanContactList():void{ var _local2:b2Contact; var _local1:b2Contact = m_world.m_contactList; while (_local1 != null) { _local2 = _local1; _local1 = _local1.m_next; if ((_local2.m_flags & b2Contact.e_destroyFlag)){ DestroyContact(_local2); _local2 = null; }; }; } public function DestroyContact(_arg1:b2Contact):void{ var _local2:b2Body; var _local3:b2Body; var _local4:b2ContactNode; var _local5:b2ContactNode; if (_arg1.m_prev){ _arg1.m_prev.m_next = _arg1.m_next; }; if (_arg1.m_next){ _arg1.m_next.m_prev = _arg1.m_prev; }; if (_arg1 == m_world.m_contactList){ m_world.m_contactList = _arg1.m_next; }; if (_arg1.GetManifoldCount() > 0){ _local2 = _arg1.m_shape1.m_body; _local3 = _arg1.m_shape2.m_body; _local4 = _arg1.m_node1; _local5 = _arg1.m_node2; _local2.WakeUp(); _local3.WakeUp(); if (_local4.prev){ _local4.prev.next = _local4.next; }; if (_local4.next){ _local4.next.prev = _local4.prev; }; if (_local4 == _local2.m_contactList){ _local2.m_contactList = _local4.next; }; _local4.prev = null; _local4.next = null; if (_local5.prev){ _local5.prev.next = _local5.next; }; if (_local5.next){ _local5.next.prev = _local5.prev; }; if (_local5 == _local3.m_contactList){ _local3.m_contactList = _local5.next; }; _local5.prev = null; _local5.next = null; }; b2Contact.Destroy(_arg1, m_world.m_blockAllocator); m_world.m_contactCount--; } override public function PairRemoved(_arg1, _arg2, _arg3):void{ if (_arg3 == null){ return; }; var _local4:b2Contact = (_arg3 as b2Contact); if (_local4 != m_nullContact){ if (m_destroyImmediate == true){ DestroyContact(_local4); _local4 = null; } else { _local4.m_flags = (_local4.m_flags | b2Contact.e_destroyFlag); }; }; } override public function PairAdded(_arg1, _arg2){ var _local8:b2Shape; var _local9:b2Body; var _local3:b2Shape = (_arg1 as b2Shape); var _local4:b2Shape = (_arg2 as b2Shape); var _local5:b2Body = _local3.m_body; var _local6:b2Body = _local4.m_body; if (((_local5.IsStatic()) && (_local6.IsStatic()))){ return (m_nullContact); }; if (_local3.m_body == _local4.m_body){ return (m_nullContact); }; if (_local6.IsConnected(_local5)){ return (m_nullContact); }; if (((!((m_world.m_filter == null))) && ((m_world.m_filter.ShouldCollide(_local3, _local4) == false)))){ return (m_nullContact); }; if (_local6.m_invMass == 0){ _local8 = _local3; _local3 = _local4; _local4 = _local8; _local9 = _local5; _local5 = _local6; _local6 = _local9; }; var _local7:b2Contact = b2Contact.Create(_local3, _local4, m_world.m_blockAllocator); if (_local7 == null){ return (m_nullContact); }; _local7.m_prev = null; _local7.m_next = m_world.m_contactList; if (m_world.m_contactList != null){ m_world.m_contactList.m_prev = _local7; }; m_world.m_contactList = _local7; m_world.m_contactCount++; return (_local7); } } }//package Box2D.Dynamics
Section 60
//b2Island (Box2D.Dynamics.b2Island) package Box2D.Dynamics { import Box2D.Common.Math.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Common.*; public class b2Island { public var m_positionError:Number; public var m_bodyCapacity:int; public var m_bodies:Array; public var m_joints:Array; public var m_jointCapacity:int; public var m_contactCount:int; public var m_contacts:Array; public var m_contactCapacity:int; public var m_jointCount:int; public var m_allocator; public var m_bodyCount:int; public static var m_positionIterationCount:uint; public function b2Island(_arg1:int, _arg2:int, _arg3:int, _arg4):void{ var _local5:int; super(); m_bodyCapacity = _arg1; m_contactCapacity = _arg2; m_jointCapacity = _arg3; m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; m_bodies = new Array(_arg1); _local5 = 0; while (_local5 < _arg1) { m_bodies[_local5] = null; _local5++; }; m_contacts = new Array(_arg2); _local5 = 0; while (_local5 < _arg2) { m_contacts[_local5] = null; _local5++; }; m_joints = new Array(_arg3); _local5 = 0; while (_local5 < _arg3) { m_joints[_local5] = null; _local5++; }; m_allocator = _arg4; } public function AddBody(_arg1:b2Body):void{ var _local2 = m_bodyCount++; m_bodies[_local2] = _arg1; } public function AddJoint(_arg1:b2Joint):void{ var _local2 = m_jointCount++; m_joints[_local2] = _arg1; } public function AddContact(_arg1:b2Contact):void{ var _local2 = m_contactCount++; m_contacts[_local2] = _arg1; } public function Solve(_arg1:b2TimeStep, _arg2:b2Vec2):void{ var _local3:int; var _local4:b2Body; var _local6:int; var _local7:Boolean; var _local8:Boolean; var _local9:Boolean; _local3 = 0; while (_local3 < m_bodyCount) { _local4 = m_bodies[_local3]; if (_local4.m_invMass == 0){ } else { _local4.m_linearVelocity.Add(b2Math.MulFV(_arg1.dt, b2Math.AddVV(_arg2, b2Math.MulFV(_local4.m_invMass, _local4.m_force)))); _local4.m_angularVelocity = (_local4.m_angularVelocity + ((_arg1.dt * _local4.m_invI) * _local4.m_torque)); _local4.m_linearVelocity.Multiply(_local4.m_linearDamping); _local4.m_angularVelocity = (_local4.m_angularVelocity * _local4.m_angularDamping); _local4.m_position0.SetV(_local4.m_position); _local4.m_rotation0 = _local4.m_rotation; }; _local3++; }; var _local5:b2ContactSolver = new b2ContactSolver(m_contacts, m_contactCount, m_allocator); _local5.PreSolve(); _local3 = 0; while (_local3 < m_jointCount) { m_joints[_local3].PrepareVelocitySolver(); _local3++; }; _local3 = 0; while (_local3 < _arg1.iterations) { _local5.SolveVelocityConstraints(); _local6 = 0; while (_local6 < m_jointCount) { m_joints[_local6].SolveVelocityConstraints(_arg1); _local6++; }; _local3++; }; _local3 = 0; while (_local3 < m_bodyCount) { _local4 = m_bodies[_local3]; if (_local4.m_invMass == 0){ } else { _local4.m_position.x = (_local4.m_position.x + (_arg1.dt * _local4.m_linearVelocity.x)); _local4.m_position.y = (_local4.m_position.y + (_arg1.dt * _local4.m_linearVelocity.y)); _local4.m_rotation = (_local4.m_rotation + (_arg1.dt * _local4.m_angularVelocity)); _local4.m_R.Set(_local4.m_rotation); }; _local3++; }; _local3 = 0; while (_local3 < m_jointCount) { m_joints[_local3].PreparePositionSolver(); _local3++; }; if (b2World.s_enablePositionCorrection){ m_positionIterationCount = 0; while (m_positionIterationCount < _arg1.iterations) { _local7 = _local5.SolvePositionConstraints(b2Settings.b2_contactBaumgarte); _local8 = true; _local3 = 0; while (_local3 < m_jointCount) { _local9 = m_joints[_local3].SolvePositionConstraints(); _local8 = ((_local8) && (_local9)); _local3++; }; if (((_local7) && (_local8))){ break; }; m_positionIterationCount++; }; }; _local5.PostSolve(); _local3 = 0; while (_local3 < m_bodyCount) { _local4 = m_bodies[_local3]; if (_local4.m_invMass == 0){ } else { _local4.m_R.Set(_local4.m_rotation); _local4.SynchronizeShapes(); _local4.m_force.Set(0, 0); _local4.m_torque = 0; }; _local3++; }; } public function Clear():void{ m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; } public function UpdateSleep(_arg1:Number):void{ var _local2:int; var _local3:b2Body; var _local4:Number = Number.MAX_VALUE; var _local5:Number = (b2Settings.b2_linearSleepTolerance * b2Settings.b2_linearSleepTolerance); var _local6:Number = (b2Settings.b2_angularSleepTolerance * b2Settings.b2_angularSleepTolerance); _local2 = 0; while (_local2 < m_bodyCount) { _local3 = m_bodies[_local2]; if (_local3.m_invMass == 0){ } else { if ((_local3.m_flags & b2Body.e_allowSleepFlag) == 0){ _local3.m_sleepTime = 0; _local4 = 0; }; if (((((((_local3.m_flags & b2Body.e_allowSleepFlag) == 0)) || (((_local3.m_angularVelocity * _local3.m_angularVelocity) > _local6)))) || ((b2Math.b2Dot(_local3.m_linearVelocity, _local3.m_linearVelocity) > _local5)))){ _local3.m_sleepTime = 0; _local4 = 0; } else { _local3.m_sleepTime = (_local3.m_sleepTime + _arg1); _local4 = b2Math.b2Min(_local4, _local3.m_sleepTime); }; }; _local2++; }; if (_local4 >= b2Settings.b2_timeToSleep){ _local2 = 0; while (_local2 < m_bodyCount) { _local3 = m_bodies[_local2]; _local3.m_flags = (_local3.m_flags | b2Body.e_sleepFlag); _local2++; }; }; } } }//package Box2D.Dynamics
Section 61
//b2TimeStep (Box2D.Dynamics.b2TimeStep) package Box2D.Dynamics { public class b2TimeStep { public var dt:Number; public var iterations:int; public var inv_dt:Number; } }//package Box2D.Dynamics
Section 62
//b2World (Box2D.Dynamics.b2World) package Box2D.Dynamics { import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; public class b2World { public var m_bodyCount:int; public var m_gravity:b2Vec2; public var m_listener:b2WorldListener; public var m_filter:b2CollisionFilter; private var step:b2TimeStep; public var m_positionIterationCount:int; public var m_contactList:b2Contact; public var m_blockAllocator; public var m_groundBody:b2Body; public var m_contactCount:int; public var m_broadPhase:b2BroadPhase; public var m_allowSleep:Boolean; public var m_stackAllocator; public var m_jointCount:int; public var m_bodyList:b2Body; public var m_bodyDestroyList:b2Body; public var m_jointList:b2Joint; public var m_contactManager:b2ContactManager; public static var s_enableWarmStarting:int = 1; public static var s_enablePositionCorrection:int = 1; public function b2World(_arg1:b2AABB, _arg2:b2Vec2, _arg3:Boolean){ step = new b2TimeStep(); m_contactManager = new b2ContactManager(); super(); m_listener = null; m_filter = b2CollisionFilter.b2_defaultFilter; m_bodyList = null; m_contactList = null; m_jointList = null; m_bodyCount = 0; m_contactCount = 0; m_jointCount = 0; m_bodyDestroyList = null; m_allowSleep = _arg3; m_gravity = _arg2; m_contactManager.m_world = this; m_broadPhase = new b2BroadPhase(_arg1, m_contactManager); var _local4:b2BodyDef = new b2BodyDef(); m_groundBody = CreateBody(_local4); } public function GetContactList():b2Contact{ return (m_contactList); } public function CreateJoint(_arg1:b2JointDef):b2Joint{ var _local3:b2Body; var _local4:b2Shape; var _local2:b2Joint = b2Joint.Create(_arg1, m_blockAllocator); _local2.m_prev = null; _local2.m_next = m_jointList; if (m_jointList){ m_jointList.m_prev = _local2; }; m_jointList = _local2; m_jointCount++; _local2.m_node1.joint = _local2; _local2.m_node1.other = _local2.m_body2; _local2.m_node1.prev = null; _local2.m_node1.next = _local2.m_body1.m_jointList; if (_local2.m_body1.m_jointList){ _local2.m_body1.m_jointList.prev = _local2.m_node1; }; _local2.m_body1.m_jointList = _local2.m_node1; _local2.m_node2.joint = _local2; _local2.m_node2.other = _local2.m_body1; _local2.m_node2.prev = null; _local2.m_node2.next = _local2.m_body2.m_jointList; if (_local2.m_body2.m_jointList){ _local2.m_body2.m_jointList.prev = _local2.m_node2; }; _local2.m_body2.m_jointList = _local2.m_node2; if (_arg1.collideConnected == false){ _local3 = ((_arg1.body1.m_shapeCount < _arg1.body2.m_shapeCount)) ? _arg1.body1 : _arg1.body2; _local4 = _local3.m_shapeList; while (_local4) { _local4.ResetProxy(m_broadPhase); _local4 = _local4.m_next; }; }; return (_local2); } public function DestroyJoint(_arg1:b2Joint):void{ var _local5:b2Body; var _local6:b2Shape; var _local2:Boolean = _arg1.m_collideConnected; if (_arg1.m_prev){ _arg1.m_prev.m_next = _arg1.m_next; }; if (_arg1.m_next){ _arg1.m_next.m_prev = _arg1.m_prev; }; if (_arg1 == m_jointList){ m_jointList = _arg1.m_next; }; var _local3:b2Body = _arg1.m_body1; var _local4:b2Body = _arg1.m_body2; _local3.WakeUp(); _local4.WakeUp(); if (_arg1.m_node1.prev){ _arg1.m_node1.prev.next = _arg1.m_node1.next; }; if (_arg1.m_node1.next){ _arg1.m_node1.next.prev = _arg1.m_node1.prev; }; if (_arg1.m_node1 == _local3.m_jointList){ _local3.m_jointList = _arg1.m_node1.next; }; _arg1.m_node1.prev = null; _arg1.m_node1.next = null; if (_arg1.m_node2.prev){ _arg1.m_node2.prev.next = _arg1.m_node2.next; }; if (_arg1.m_node2.next){ _arg1.m_node2.next.prev = _arg1.m_node2.prev; }; if (_arg1.m_node2 == _local4.m_jointList){ _local4.m_jointList = _arg1.m_node2.next; }; _arg1.m_node2.prev = null; _arg1.m_node2.next = null; b2Joint.Destroy(_arg1, m_blockAllocator); m_jointCount--; if (_local2 == false){ _local5 = ((_local3.m_shapeCount < _local4.m_shapeCount)) ? _local3 : _local4; _local6 = _local5.m_shapeList; while (_local6) { _local6.ResetProxy(m_broadPhase); _local6 = _local6.m_next; }; }; } public function SetFilter(_arg1:b2CollisionFilter):void{ m_filter = _arg1; } public function DestroyBody(_arg1:b2Body):void{ if ((_arg1.m_flags & b2Body.e_destroyFlag)){ return; }; if (_arg1.m_prev){ _arg1.m_prev.m_next = _arg1.m_next; }; if (_arg1.m_next){ _arg1.m_next.m_prev = _arg1.m_prev; }; if (_arg1 == m_bodyList){ m_bodyList = _arg1.m_next; }; _arg1.m_flags = (_arg1.m_flags | b2Body.e_destroyFlag); m_bodyCount--; _arg1.m_prev = null; _arg1.m_next = m_bodyDestroyList; m_bodyDestroyList = _arg1; } public function SetListener(_arg1:b2WorldListener):void{ m_listener = _arg1; } public function CreateBody(_arg1:b2BodyDef):b2Body{ var _local2:b2Body = new b2Body(_arg1, this); _local2.m_prev = null; _local2.m_next = m_bodyList; if (m_bodyList){ m_bodyList.m_prev = _local2; }; m_bodyList = _local2; m_bodyCount++; return (_local2); } public function GetGroundBody():b2Body{ return (m_groundBody); } public function Query(_arg1:b2AABB, _arg2:Array, _arg3:int):int{ var _local4:Array = new Array(); var _local5:int = m_broadPhase.QueryAABB(_arg1, _local4, _arg3); var _local6:int; while (_local6 < _local5) { _arg2[_local6] = (_local4[_local6] as b2Shape); _local6++; }; return (_local5); } public function CleanBodyList():void{ var _local2:b2Body; var _local3:b2JointNode; var _local4:b2JointNode; m_contactManager.m_destroyImmediate = true; var _local1:b2Body = m_bodyDestroyList; while (_local1) { _local2 = _local1; _local1 = _local1.m_next; _local3 = _local2.m_jointList; while (_local3) { _local4 = _local3; _local3 = _local3.next; if (m_listener){ m_listener.NotifyJointDestroyed(_local4.joint); }; DestroyJoint(_local4.joint); }; _local2.Destroy(); }; m_bodyDestroyList = null; m_contactManager.m_destroyImmediate = false; } public function Step(_arg1:Number, _arg2:int):void{ var _local3:b2Body; var _local4:b2Body; var _local12:int; var _local13:int; var _local14:b2ContactNode; var _local15:b2JointNode; var _local16:uint; step.dt = _arg1; step.iterations = _arg2; if (_arg1 > 0){ step.inv_dt = (1 / _arg1); } else { step.inv_dt = 0; }; m_positionIterationCount = 0; m_contactManager.CleanContactList(); CleanBodyList(); m_contactManager.Collide(); var _local5:b2Island = new b2Island(m_bodyCount, m_contactCount, m_jointCount, m_stackAllocator); _local3 = m_bodyList; while (_local3 != null) { _local3.m_flags = (_local3.m_flags & ~(b2Body.e_islandFlag)); _local3 = _local3.m_next; }; var _local6:b2Contact = m_contactList; while (_local6 != null) { _local6.m_flags = (_local6.m_flags & ~(b2Contact.e_islandFlag)); _local6 = _local6.m_next; }; var _local7:b2Joint = m_jointList; while (_local7 != null) { _local7.m_islandFlag = false; _local7 = _local7.m_next; }; var _local8:int = m_bodyCount; var _local9:Array = new Array(m_bodyCount); var _local10:int; while (_local10 < m_bodyCount) { _local9[_local10] = null; _local10++; }; var _local11:b2Body = m_bodyList; while (_local11 != null) { if ((_local11.m_flags & (((b2Body.e_staticFlag | b2Body.e_islandFlag) | b2Body.e_sleepFlag) | b2Body.e_frozenFlag))){ } else { _local5.Clear(); _local12 = 0; var _temp1 = _local12; _local12 = (_local12 + 1); var _local17 = _temp1; _local9[_local17] = _local11; _local11.m_flags = (_local11.m_flags | b2Body.e_islandFlag); while (_local12 > 0) { --_local12; _local3 = _local9[_local12]; _local5.AddBody(_local3); _local3.m_flags = (_local3.m_flags & ~(b2Body.e_sleepFlag)); if ((_local3.m_flags & b2Body.e_staticFlag)){ } else { _local14 = _local3.m_contactList; while (_local14 != null) { if ((_local14.contact.m_flags & b2Contact.e_islandFlag)){ } else { _local5.AddContact(_local14.contact); _local14.contact.m_flags = (_local14.contact.m_flags | b2Contact.e_islandFlag); _local4 = _local14.other; if ((_local4.m_flags & b2Body.e_islandFlag)){ } else { var _temp2 = _local12; _local12 = (_local12 + 1); var _local18 = _temp2; _local9[_local18] = _local4; _local4.m_flags = (_local4.m_flags | b2Body.e_islandFlag); }; }; _local14 = _local14.next; }; _local15 = _local3.m_jointList; while (_local15 != null) { if (_local15.joint.m_islandFlag == true){ } else { _local5.AddJoint(_local15.joint); _local15.joint.m_islandFlag = true; _local4 = _local15.other; if ((_local4.m_flags & b2Body.e_islandFlag)){ } else { var _temp3 = _local12; _local12 = (_local12 + 1); _local18 = _temp3; _local9[_local18] = _local4; _local4.m_flags = (_local4.m_flags | b2Body.e_islandFlag); }; }; _local15 = _local15.next; }; }; }; _local5.Solve(step, m_gravity); m_positionIterationCount = b2Math.b2Max(m_positionIterationCount, b2Island.m_positionIterationCount); if (m_allowSleep){ _local5.UpdateSleep(_arg1); }; _local13 = 0; while (_local13 < _local5.m_bodyCount) { _local3 = _local5.m_bodies[_local13]; if ((_local3.m_flags & b2Body.e_staticFlag)){ _local3.m_flags = (_local3.m_flags & ~(b2Body.e_islandFlag)); }; if (((_local3.IsFrozen()) && (m_listener))){ _local16 = m_listener.NotifyBoundaryViolated(_local3); if (_local16 == b2WorldListener.b2_destroyBody){ DestroyBody(_local3); _local3 = null; _local5.m_bodies[_local13] = null; }; }; _local13++; }; }; _local11 = _local11.m_next; }; m_broadPhase.Commit(); } public function GetJointList():b2Joint{ return (m_jointList); } public function GetBodyList():b2Body{ return (m_bodyList); } } }//package Box2D.Dynamics
Section 63
//b2WorldListener (Box2D.Dynamics.b2WorldListener) package Box2D.Dynamics { import Box2D.Dynamics.Joints.*; public class b2WorldListener { public static var b2_freezeBody:uint = 0; public static var b2_destroyBody:uint = 1; public function NotifyJointDestroyed(_arg1:b2Joint):void{ } public function NotifyBoundaryViolated(_arg1:b2Body):uint{ return (b2_freezeBody); } } }//package Box2D.Dynamics
Section 64
//BeginEditingEvent (contraption.blocks.BeginEditingEvent) package contraption.blocks { import flash.events.*; public class BeginEditingEvent extends Event { public var block:EditableBlock; public static const BEGIN_EDITING:String = "beginEditing"; public function BeginEditingEvent(_arg1:EditableBlock){ super(BEGIN_EDITING); this.block = _arg1; } override public function clone():Event{ return (new BeginEditingEvent(block)); } } }//package contraption.blocks
Section 65
//Block (contraption.blocks.Block) package contraption.blocks { import flash.display.*; import contraption.*; import de.polygonal.ds.*; import flash.geom.*; import Box2D.Dynamics.*; import flash.utils.*; import flash.errors.*; public class Block extends ActionContainerImpl { protected var physicsBody:b2Body; public var jointedBlocks:Dictionary; protected var blockHeight:Number;// = 50 protected var blockBackground:Sprite; protected var blockForegroundCanvas:ActionContainerImpl; protected var blockRotation:Number;// = 0 protected var blockForeground:Sprite; protected var joints:SLinkedList; protected var blockWidth:Number;// = 50 public var isGoalBlock:Boolean; protected var physicsBodyDef:b2BodyDef; public var saveIndex:Number; protected var blockPosition:Point; protected var blockBackgroundCanvas:ActionContainerImpl; public static const CLOCKWISE:int = 0; public static const COUNTER_CLOCKWISE:int = -1; public function Block(_arg1:Boolean=false){ blockPosition = new Point(100, 100); blockForeground = new Sprite(); addChild(blockForeground); blockBackground = new Sprite(); this.isGoalBlock = _arg1; joints = new SLinkedList(); super(); } public function setRotation(_arg1:Number):void{ blockRotation = _arg1; rotation = (_arg1 * (180 / Math.PI)); if (blockBackground != null){ blockBackground.rotation = rotation; }; updatePhysicsBody(); } public function isJointedTo(_arg1:Block):Boolean{ var _local3:Iterator; var _local4:JointCollection; var _local2:SListIterator = joints.getListIterator(); while (_local2.hasNext()) { _local4 = (_local2.next() as JointCollection); if (_local4.isJointedTo(_arg1)){ return (true); }; }; return (false); } protected function setBlockCanvas():void{ reDrawBlock(); x = getPosition().x; y = getPosition().y; rotation = (getRotation() * (180 / Math.PI)); blockBackground.x = getPosition().x; blockBackground.y = getPosition().y; blockBackground.rotation = (getRotation() * (180 / Math.PI)); } public function setWidth(_arg1:Number):void{ blockWidth = _arg1; } public function updatePhysicsBody():void{ var _local1:b2World; if (physicsBody != null){ _local1 = physicsBody.m_world; _local1.DestroyBody(physicsBody); _local1.CleanBodyList(); generatePhysicsBody(_local1); }; } override protected function initAllowableActions():void{ allowableActions = new Actions(); allowableActions.move = true; allowableActions.delete_ = true; allowableActions.build = true; } public function collidesWithJointedBlocks():Boolean{ return (true); } public function getWidth():Number{ return (blockWidth); } protected function generatePhysicsBodyDef():b2BodyDef{ throw (new IllegalOperationError("You must extend Block and implement \"generatePhysicsBodyDef\"")); } public function moveWithJoint(_arg1:JointCollection, _arg2:Point):void{ setPosition(getPosition().add(_arg2)); setBlockCanvas(); } public function drawAnchor(_arg1:Point, _arg2:Sprite=null):void{ drawTypedAnchor(_arg1, JointType.PIN, _arg2); } public function getHeight():Number{ return (blockHeight); } public function getPosition():Point{ return (blockPosition); } public function setCollisionMaskBits(_arg1:int):void{ physicsBodyDef.shapes[0].maskBits = _arg1; } protected function getJointXml():XML{ var _local3:JointCollection; var _local4:Block; var _local1:XML = <joints/> ; var _local2:Iterator = joints.getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as JointCollection); _local4 = _local3.getBlockJointedBeneath(this); if (_local4 != null){ _local1.appendChild((("<jointedTo>" + _local4.saveIndex) + "</jointedTo>")); }; }; return (_local1); } public function getClosestJointCollection(_arg1:Point):JointCollection{ var _local3:Iterator; var _local4:JointCollection; var _local7:Number; var _local2:Iterator = joints.getIterator(); var _local5:JointCollection; var _local6:Number = 1000000; while (_local2.hasNext()) { _local4 = (_local2.next() as JointCollection); _local7 = Point.distance(_local4.getPosition(), _arg1); if (_local7 < _local6){ _local6 = _local7; _local5 = _local4; }; }; return (_local5); } public function setHeight(_arg1:Number):void{ blockHeight = _arg1; } public function setPosition(_arg1:Point):void{ blockPosition = _arg1; x = _arg1.x; y = _arg1.y; if (blockBackground != null){ blockBackground.x = _arg1.x; blockBackground.y = _arg1.y; }; updatePhysicsBody(); } public function drawMotorAnchor(_arg1:Point, _arg2:Sprite=null):void{ drawTypedAnchor(_arg1, JointType.MOTOR_CLOCKWISE, _arg2); } public function getCollisionMaskBits():int{ return (physicsBodyDef.shapes[0].maskBits); } protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ throw (new IllegalOperationError("You must extend Block and implement \"drawBlock\"")); } public function addJoints(_arg1:Dictionary):void{ var _local3:Iterator; var _local4:JointCollection; var _local2:SListIterator = joints.getListIterator(); while (_local2.hasNext()) { _local4 = (_local2.next() as JointCollection); _arg1[_local4] = _local4; }; } public function setCollisionCategoryBits(_arg1:int):void{ physicsBodyDef.shapes[0].categoryBits = _arg1; } public function getJointType():JointType{ return (JointType.PIN); } public function reDrawBlock():void{ if (blockForegroundCanvas != null){ blockForeground.removeChild(blockForegroundCanvas); }; if (blockBackgroundCanvas != null){ blockBackground.removeChild(blockBackgroundCanvas); }; blockForegroundCanvas = new ActionContainerImpl(); blockForegroundCanvas.setAllowableActions(getAllowableActions()); blockForeground.addChild(blockForegroundCanvas); blockBackgroundCanvas = new ActionContainerImpl(); blockBackgroundCanvas.setAllowableActions(getAllowableActions()); blockBackground.addChild(blockBackgroundCanvas); drawBlock(blockForegroundCanvas, blockBackgroundCanvas); } public function startJoints(_arg1:b2World):void{ var _local3:JointCollection; var _local2:Iterator = joints.getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as JointCollection); _local3.startJoints(_arg1); }; } public function getClosestJointDistance(_arg1:Point):Number{ var _local3:Iterator; var _local4:JointCollection; var _local6:Number; var _local2:Iterator = joints.getIterator(); var _local5:Number = NaN; while (_local2.hasNext()) { _local4 = (_local2.next() as JointCollection); _local6 = Point.distance(_local4.getPosition(), _arg1); if ((((_local6 < _local5)) || (isNaN(_local5)))){ _local5 = _local6; }; }; return (_local5); } public function getCollisionCategoryBits():int{ return (physicsBodyDef.shapes[0].categoryBits); } public function destroyBlock(_arg1:b2World):void{ unjointBlock(); if (physicsBody != null){ _arg1.DestroyBody(physicsBody); }; physicsBody = null; } public function stopJoints(_arg1:b2World):void{ var _local3:Iterator; var _local4:JointCollection; var _local2:Iterator = joints.getIterator(); while (_local2.hasNext()) { _local4 = (_local2.next() as JointCollection); _local3 = _local4.getIterator(); while (_local3.hasNext()) { (_local3.next() as Joint).destroyPhysicsJoint(_arg1); }; }; } public function setJointedBlocks():void{ jointedBlocks = new Dictionary(); addJointedBlocks(jointedBlocks); } public function getPhysicsBody():b2Body{ return (physicsBody); } public function generatePhysicsBody(_arg1:b2World):b2Body{ var _local2:b2BodyDef = generatePhysicsBodyDef(); physicsBody = _arg1.CreateBody(_local2); return (physicsBody); } public function drawTypedAnchor(_arg1:Point, _arg2:JointType, _arg3:Sprite=null):void{ if (_arg3 == null){ _arg3 = blockForegroundCanvas; }; var _local4 = 12381585; var _local5 = 0x838383; if (_arg2 != JointType.PIN){ _local4 = 16724787; _local5 = 0xFFFFFF; }; _arg3.graphics.endFill(); _arg3.graphics.lineStyle(2, _local5); _arg3.graphics.drawCircle(_arg1.x, _arg1.y, 3); _arg3.graphics.lineStyle(0, 0, 0); } public function getXml():XML{ var _local1:XML = new XML(getXmlRoot()); if (!isNaN(saveIndex)){ _local1.@id = saveIndex; }; _local1.appendChild((("<rotation>" + getRotation()) + "</rotation>")); var _local2:XML = new XML(<position></position> ); _local2.appendChild((("<x>" + getPosition().x) + "</x>")); _local2.appendChild((("<y>" + getPosition().y) + "</y>")); _local1.appendChild(_local2); _local1.appendChild((("<width>" + getWidth()) + "</width>")); _local1.appendChild((("<height>" + getHeight()) + "</height>")); _local1.appendChild((("<goalBlock>" + isGoalBlock) + "</goalBlock>")); _local1.appendChild(getJointXml()); return (_local1); } protected function getXmlRoot():XML{ throw (new IllegalOperationError("You must extend EditableBlock and implement \"getXmlRoot\"")); } public function getBlockBackground():Sprite{ return (blockBackground); } protected function addJoint(_arg1:JointCollection):void{ joints.append(_arg1); } public function getDistance(_arg1:Point):Number{ throw (new IllegalOperationError("You must extend Block and implement \"getDistance\"")); } public function setFromXML(_arg1:XML):void{ setRotation(new Number(_arg1.rotation)); setWidth(new Number(_arg1.width)); setHeight(new Number(_arg1.height)); var _local2:Point = new Point(); _local2.x = new Number(_arg1.position.x); _local2.y = new Number(_arg1.position.y); setPosition(_local2); setBlockCanvas(); } public function addJointedBlocks(_arg1:Dictionary):void{ var _local3:JointCollection; var _local2:SListIterator = joints.getListIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as JointCollection); _local3.addJointedBlocks(_arg1); }; } public function getRotation():Number{ return (blockRotation); } public function updateFromPhysicsBody():void{ x = physicsBody.m_position.x; y = physicsBody.m_position.y; rotation = (physicsBody.m_rotation * (180 / Math.PI)); blockBackground.x = physicsBody.m_position.x; blockBackground.y = physicsBody.m_position.y; blockBackground.rotation = rotation; } public function getBlockForeground():MovieClip{ return (this); } public function replaceJointCollection(_arg1:JointCollection, _arg2:JointCollection):void{ var _local4:Iterator; var _local5:JointCollection; var _local3:SListIterator = joints.getListIterator(); while (_local3.hasNext()) { _local5 = (_local3.next() as JointCollection); if (_local5 == _arg1){ joints.insertAfter(_local3, _arg2); joints.remove(joints.nodeOf(_local5)); return; }; }; } protected function unjointBlock():void{ var _local2:JointCollection; var _local1:Iterator = joints.getIterator(); while (_local1.hasNext()) { _local2 = (_local1.next() as JointCollection); _local2.unjointBlock(this); }; } public function resetBlock(_arg1:b2World):void{ _arg1.DestroyBody(physicsBody); physicsBody = null; setBlockCanvas(); } } }//package contraption.blocks
Section 66
//BlockCollection (contraption.blocks.BlockCollection) package contraption.blocks { import de.polygonal.ds.*; import flash.geom.*; import Box2D.Dynamics.*; public class BlockCollection extends SLinkedList { public function deleteBlock(_arg1:b2World, _arg2:Block):void{ _arg2.destroyBlock(_arg1); remove(nodeOf(_arg2)); } protected function joinToJointCollection(_arg1:JointCollection, _arg2:Block):Joint{ var _local3:Joint; var _local4:JointType = _arg2.getJointType(); if ((((((((_arg1.getTopBlock() as Wheel)) && ((_arg1.getTopBlock() == _arg1.getBottomBlock())))) && ((_arg1.getTopBlock().getPosition().x == _arg1.position.x)))) && ((_arg1.getTopBlock().getPosition().y == _arg1.position.y)))){ _local4 = _arg1.getTopBlock().getJointType(); }; if ((((_arg2 as Wheel)) && (((!((_arg2.getPosition().x == _arg1.position.x))) || (!((_arg2.getPosition().y == _arg1.position.y))))))){ _local4 = JointType.PIN; }; if (((!((_local4 == JointType.PIN))) && ((_arg2 as Wheel)))){ if (_local4 == JointType.MOTOR_CLOCKWISE){ _local4 = JointType.MOTOR_COUNTER_CLOCKWISE; } else { if (_local4 == JointType.MOTOR_COUNTER_CLOCKWISE){ _local4 = JointType.MOTOR_CLOCKWISE; }; }; _local3 = new Joint(_arg1.getTopBlock(), _arg2, _arg1.position, _local4); _arg1.append(_local3); } else { _local3 = new Joint(_arg1.getTopBlock(), _arg2, _arg1.position, _local4); _arg1.append(_local3); }; _arg2.replaceJointCollection(_arg2.getClosestJointCollection(_arg1.position), _arg1); return (_local3); } public function getClosestJointCollection(_arg1:Point, _arg2:XML=null):JointCollection{ var _local3:Block; var _local7:Boolean; var _local8:Number; var _local9:int; var _local4:JointCollection; var _local5:Number = 10000000; var _local6:Iterator = getIterator(); while (_local6.hasNext()) { _local3 = (_local6.next() as Block); _local8 = _local3.getClosestJointDistance(_arg1); if (_local8 < _local5){ if (_arg2 != null){ _local7 = false; _local9 = 0; while (_local9 < _arg2.jointedTo.length()) { if (_arg2.jointedTo[_local9] == _local3.saveIndex){ _local7 = true; break; }; _local9++; }; } else { _local7 = true; }; if (_local7){ _local5 = _local8; _local4 = _local3.getClosestJointCollection(_arg1); }; }; }; return (_local4); } public function createWheel(_arg1:Point, _arg2:Number, _arg3:int, _arg4:Number=0, _arg5:Number=NaN, _arg6:Boolean=false, _arg7:Boolean=false, _arg8:XML=null):Wheel{ var _local11:Number; var _local9:Boolean; var _local10:JointCollection; _local10 = getClosestJointCollection(_arg1, _arg8); if (_local10 != null){ _local11 = Point.distance(_arg1, _local10.position); }; if (((((!((_local10 == null))) && (((_local11 * _arg2) < 10)))) && (!(_local10.containsWheel())))){ _local9 = true; }; if (_local9){ _arg1.x = _local10.position.x; _arg1.y = _local10.position.y; }; var _local12:Wheel = new Wheel(_arg1, _arg3, _arg4, _arg5, _arg6, _arg7); if (_local9){ joinToJointCollection(_local10, _local12); }; append(_local12); return (_local12); } public function getClosestBlock(_arg1:Point, _arg2:Boolean=true):Block{ var _local6:Block; var _local7:Number; var _local3:Number = 1000000; var _local4:Block; var _local5:Iterator = getIterator(); while (_local5.hasNext()) { _local6 = (_local5.next() as Block); _local7 = _local6.getDistance(_arg1); if ((((_local7 < _local3)) && (((_arg2) || (!(_local6.isGoalBlock)))))){ _local3 = _local7; _local4 = _local6; }; }; return (_local4); } public function createRod(_arg1:Point, _arg2:Point, _arg3:Number, _arg4:Function, _arg5:XML=null, _arg6:Boolean=false):Rod{ var _local10:Number; var _local12:Number; var _local7:Boolean; var _local8:Boolean; var _local9:JointCollection; var _local11:JointCollection; var _local13:Number = Math.atan2((_arg2.y - _arg1.y), (_arg2.x - _arg1.x)); var _local14:Number = Point.distance(_arg1, _arg2); if ((((_local14 < 20)) && (_arg6))){ _local14 = 20; _arg2.x = (_arg1.x + (Math.cos(_local13) * _local14)); _arg2.y = (_arg1.y + (Math.sin(_local13) * _local14)); }; _local9 = getClosestJointCollection(_arg1, _arg5); _local11 = getClosestJointCollection(_arg2, _arg5); if (_local9 != null){ _local10 = Point.distance(_arg1, _local9.position); }; if (_local11 != null){ _local12 = Point.distance(_arg2, _local11.position); }; if (((!((_local9 == null))) && (((_local10 * _arg3) < 10)))){ _local7 = true; }; if (((((!((_local11 == null))) && (((_local12 * _arg3) < 10)))) && (((!(_local7)) || (!((_local11 == _local9))))))){ _local8 = true; }; if (((((_local7) && (_local8))) && (_local11.sharesBlockWith(_local9)))){ _local8 = false; }; if (_local7){ _arg1.x = _local9.position.x; _arg1.y = _local9.position.y; }; if (_local8){ _arg2.x = _local11.position.x; _arg2.y = _local11.position.y; }; var _local15:Rod = _arg4(_arg1, _arg2); if (_local7){ joinToJointCollection(_local9, _local15); }; if (_local8){ joinToJointCollection(_local11, _local15); }; append(_local15); return (_local15); } protected function newSolidRod(_arg1:Point, _arg2:Point):Rod{ return (new SolidRod(_arg1, _arg2)); } protected function newHollowRod(_arg1:Point, _arg2:Point):Rod{ return (new Rod(_arg1, _arg2)); } public function createHollowRod(_arg1:Point, _arg2:Point, _arg3:Number, _arg4:XML=null, _arg5:Boolean=false):Rod{ return (createRod(_arg1, _arg2, _arg3, newHollowRod, _arg4, _arg5)); } public function createPlayerBlockFromXml(_arg1:XML, _arg2:Boolean):Block{ var _local3:Block; var _local7:Number; var _local8:Number; var _local4:Point = new Point(); var _local5:Point = new Point(); var _local6:Point = new Point(); var _local9:Boolean; _local6.x = new Number(_arg1.position.x); _local6.y = new Number(_arg1.position.y); _local8 = new Number(_arg1.rotation); _local7 = new Number(_arg1.width); _local9 = false; if (((!((_arg1.goalBlock == null))) && ((_arg1.goalBlock == "true")))){ _local9 = true; }; _local4.x = (_local6.x - ((Math.cos(_local8) * _local7) / 2)); _local4.y = (_local6.y - ((Math.sin(_local8) * _local7) / 2)); _local5.x = (_local6.x + ((Math.cos(_local8) * _local7) / 2)); _local5.y = (_local6.y + ((Math.sin(_local8) * _local7) / 2)); switch (_arg1.localName()){ case "HollowRod": _local3 = createHollowRod(_local4, _local5, 1, _arg1.joints[0]); break; case "SolidRod": _local3 = createSolidRod(_local4, _local5, 1, _arg1.joints[0]); break; case "ClockwiseWheel": _local3 = createWheel(_local6, 1, Wheel.CLOCKWISE, _local8, (_local7 / 2), _arg2, _local9, _arg1.joints[0]); break; case "CounterClockwiseWheel": _local3 = createWheel(_local6, 1, Wheel.COUNTER_CLOCKWISE, _local8, (_local7 / 2), _arg2, _local9, _arg1.joints[0]); break; case "NoSpinWheel": _local3 = createWheel(_local6, 1, Wheel.NO_SPIN, _local8, (_local7 / 2), _arg2, _local9, _arg1.joints[0]); break; case "JointedDynamicRectangle": _local3 = new JointedDynamicRectangle(_arg2, true); _local3.setFromXML(_arg1); append(_local3); break; default: throw (new ArgumentError("xml contains an unrecognized player block type")); }; _local3.saveIndex = _arg1.@id; return (_local3); } public function createSolidRod(_arg1:Point, _arg2:Point, _arg3:Number, _arg4:XML=null, _arg5:Boolean=false):Rod{ return (createRod(_arg1, _arg2, _arg3, newSolidRod, _arg4, _arg5)); } public static function createLevelBlockFromXml(_arg1:XML, _arg2:b2World, _arg3:Boolean):EditableBlock{ var _local4:EditableBlock; switch (_arg1.localName()){ case "DynamicRectangle": _local4 = new DynamicRectangle(_arg3); break; case "DynamicCircle": _local4 = new DynamicCircle(_arg3); break; case "StaticRectangle": _local4 = new StaticRectangle(_arg3); break; case "StaticCircle": _local4 = new StaticCircle(_arg3); break; default: throw (new ArgumentError("xml contains an unrecognized level block type")); }; _local4.setFromXML(_arg1); return (_local4); } } }//package contraption.blocks
Section 67
//BlockType (contraption.blocks.BlockType) package contraption.blocks { public class BlockType { public static const STATIC_CIRCLE:BlockType = new (BlockType); ; public static const WHEEL_NO_SPIN:BlockType = new (BlockType); ; public static const ROD_HOLLOW:BlockType = new (BlockType); ; public static const WHEEL_COUNTER_CLOCKWISE:BlockType = new (BlockType); ; public static const WHEEL_CLOCKWISE:BlockType = new (BlockType); ; public static const DYNAMIC_RECTANGLE:BlockType = new (BlockType); ; public static const DYNAMIC_CIRCLE:BlockType = new (BlockType); ; public static const ROD_SOLID:BlockType = new (BlockType); ; public static const STATIC_RECTANGLE:BlockType = new (BlockType); ; } }//package contraption.blocks
Section 68
//DeleteBlockEvent (contraption.blocks.DeleteBlockEvent) package contraption.blocks { import flash.events.*; public class DeleteBlockEvent extends Event { public var block:EditableBlock; public static const DELETE_BLOCK:String = "deleteBlock"; public function DeleteBlockEvent(_arg1:EditableBlock){ super(DELETE_BLOCK); this.block = _arg1; } override public function clone():Event{ return (new DeleteBlockEvent(block)); } } }//package contraption.blocks
Section 69
//DynamicCircle (contraption.blocks.DynamicCircle) package contraption.blocks { import flash.display.*; import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class DynamicCircle extends EditableBlock { public function DynamicCircle(_arg1:Boolean, _arg2:Point=null){ super(_arg1, false, _arg2); generatePhysicsBodyDef(); } override protected function generatePhysicsBodyDef():b2BodyDef{ var _local1:b2BodyDef; var _local2:b2CircleDef; var _local3:b2Body; _local1 = new b2BodyDef(); _local2 = new b2CircleDef(); _local2.radius = getWidth(); _local2.density = 1; _local2.friction = 0.7; _local2.restitution = 0.2; _local2.categoryBits = ~(0); _local2.maskBits = ~(0); _local1.AddShape(_local2); _local1.position.x = getPosition().x; _local1.position.y = getPosition().y; _local1.userData = this; return (_local1); } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ _arg1.graphics.beginFill(16353583); _arg1.graphics.drawCircle(0, 0, (getWidth() - 4)); _arg1.graphics.endFill(); _arg2.graphics.lineStyle(6, 12998156, 100); _arg2.graphics.drawCircle(0, 0, (getWidth() - 3)); } override protected function getXmlRoot():XML{ return (<DynamicCircle/> ); } override public function getHeight():Number{ return (getWidth()); } } }//package contraption.blocks
Section 70
//DynamicRectangle (contraption.blocks.DynamicRectangle) package contraption.blocks { import flash.display.*; import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class DynamicRectangle extends UnstretchableBlock { public function DynamicRectangle(_arg1:Boolean, _arg2:Boolean=false, _arg3:Point=null){ super(_arg1, _arg2, _arg3); generatePhysicsBodyDef(); } override protected function generatePhysicsBodyDef():b2BodyDef{ var _local1:b2BoxDef; var _local2:b2BodyDef; var _local3:b2Body; _local1 = new b2BoxDef(); _local2 = new b2BodyDef(); _local1.extents.Set((getWidth() / 2), (getHeight() / 2)); _local1.density = 1; _local1.friction = 0.7; _local1.restitution = 0.2; _local1.categoryBits = getCategoryBits(); _local1.maskBits = getMaskBits(); _local1.userData = this; _local2.AddShape(_local1); _local2.userData = this; _local2.position.x = getPosition().x; _local2.position.y = getPosition().y; _local2.rotation = getRotation(); return (_local2); } protected function getCategoryBits():int{ return (~(0)); } override protected function getXmlRoot():XML{ return (<DynamicRectangle/> ); } protected function getMaskBits():int{ return (~(0)); } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ _arg1.graphics.beginFill(16374319); if (isGoalBlock){ _arg1.graphics.beginFill(16737894); }; _arg1.graphics.drawRect(((-(getWidth()) / 2) + 4), ((-(getHeight()) / 2) + 4), (getWidth() - 8), (getHeight() - 8)); _arg1.graphics.endFill(); _arg2.graphics.lineStyle(6, 12998156, 100); _arg2.graphics.drawRect(((-(getWidth()) / 2) + 3), ((-(getHeight()) / 2) + 3), (getWidth() - 6), (getHeight() - 6)); } override public function getDistance(_arg1:Point):Number{ return (Point.distance(getPosition(), _arg1)); } } }//package contraption.blocks
Section 71
//EditableBlock (contraption.blocks.EditableBlock) package contraption.blocks { import flash.events.*; import flash.display.*; import contraption.*; import flash.geom.*; public class EditableBlock extends Block { protected var my0:Number; protected var moving:Boolean;// = false protected var rotateCorner:MovieClip; protected var rotating:Boolean;// = false protected var editing:Boolean; protected var deleteCorner:MovieClip; protected var mx0:Number; protected var resizing:Boolean;// = false protected var resizeCorner:MovieClip; public static var MIN_BLOCK_WIDTH:Number = 12; public function EditableBlock(_arg1:Boolean, _arg2:Boolean=false, _arg3:Point=null){ super(_arg2); if (_arg3 != null){ setPosition(_arg3); }; this.editing = _arg1; if (_arg1){ addEventListener(MouseEvent.MOUSE_DOWN, mouseDownM); }; setBlockCanvas(); } override protected function setBlockCanvas():void{ super.setBlockCanvas(); if (editing){ resizeCorner = newResizeCorner(); blockForegroundCanvas.addChild(resizeCorner); resizeCorner.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownR); resizeCorner.x = (getWidth() / 2); resizeCorner.y = (getHeight() / 2); rotateCorner = newRotateCorner(); blockForegroundCanvas.addChild(rotateCorner); rotateCorner.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownO); rotateCorner.x = (getWidth() / 2); rotateCorner.y = (-(getHeight()) / 2); deleteCorner = newDeleteCorner(); blockForegroundCanvas.addChild(deleteCorner); deleteCorner.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownD); deleteCorner.x = (-(getWidth()) / 2); deleteCorner.y = (getHeight() / 2); }; } protected function mouseDownM(_arg1:MouseEvent):void{ stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveM, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpM, false, 0, true); _arg1.stopPropagation(); mx0 = (parent.mouseX - getPosition().x); my0 = (parent.mouseY - getPosition().y); moving = true; this.dispatchEvent(new BeginEditingEvent(this)); } protected function mouseDownO(_arg1:MouseEvent):void{ stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveO, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpO, false, 0, true); _arg1.stopPropagation(); rotating = true; this.dispatchEvent(new BeginEditingEvent(this)); var _local2:ModeEvent = new ModeEvent(ModeEvent.START_ACTION, true, true); _local2.actionType = ModeEvent.ACTION_BUTTON; dispatchEvent(_local2); } protected function mouseDownR(_arg1:MouseEvent):void{ stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveR, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpR, false, 0, true); _arg1.stopPropagation(); resizing = true; this.dispatchEvent(new BeginEditingEvent(this)); var _local2:ModeEvent = new ModeEvent(ModeEvent.START_ACTION, true, true); _local2.actionType = ModeEvent.ACTION_BUTTON; dispatchEvent(_local2); } override protected function initAllowableActions():void{ allowableActions = new Actions(); if (editing){ allowableActions.move = true; } else { allowableActions.alwaysDrag = true; }; } protected function newRotateCorner():MovieClip{ var _local1:MovieClip = newCornerButton(); _local1.graphics.lineStyle(2, 0xFFFF); _local1.graphics.beginFill(0xFFFF, 0.5); _local1.graphics.drawRect(-6, -6, 12, 12); return (_local1); } protected function newDeleteCorner():MovieClip{ var _local1:MovieClip = newCornerButton(); _local1.graphics.lineStyle(2, 16733525); _local1.graphics.beginFill(0xFFFF, 0.5); _local1.graphics.drawRect(-6, -6, 12, 12); return (_local1); } protected function newResizeCorner():MovieClip{ var _local1:MovieClip = newCornerButton(); _local1.graphics.lineStyle(2, 0xFFFF00); _local1.graphics.beginFill(0xFFFF, 0.5); _local1.graphics.drawRect(-6, -6, 12, 12); return (_local1); } protected function mouseUpM(_arg1:MouseEvent):void{ moving = false; } protected function newCornerButton():ActionContainerImpl{ var _local1:ActionContainerImpl = new ActionContainerImpl(); var _local2:Actions = new Actions(); _local2.button = true; _local1.setAllowableActions(_local2); return (_local1); } protected function mouseUpR(_arg1:MouseEvent):void{ resizing = false; } protected function mouseUpO(_arg1:MouseEvent):void{ rotating = false; } protected function mouseMoveO(_arg1:MouseEvent):void{ if (!rotating){ return; }; var _local2:Number = Math.atan2((-1 * getHeight()), getWidth()); setRotation((Math.atan2((parent.mouseY - this.y), (parent.mouseX - this.x)) - _local2)); } protected function mouseMoveR(_arg1:MouseEvent):void{ if (!resizing){ return; }; var _local2:Number = (blockForeground.mouseX * 2); var _local3:Number = (blockForeground.mouseY * 2); if (_local2 < MIN_BLOCK_WIDTH){ _local2 = MIN_BLOCK_WIDTH; }; if (_local3 < MIN_BLOCK_WIDTH){ _local3 = MIN_BLOCK_WIDTH; }; setWidth(_local2); setHeight(_local3); setBlockCanvas(); } protected function mouseDownD(_arg1:MouseEvent):void{ _arg1.stopPropagation(); this.dispatchEvent(new DeleteBlockEvent(this)); } protected function mouseMoveM(_arg1:MouseEvent):void{ if (!moving){ return; }; setPosition(new Point((parent.mouseX - mx0), (parent.mouseY - my0))); } } }//package contraption.blocks
Section 72
//Joint (contraption.blocks.Joint) package contraption.blocks { import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Dynamics.Joints.*; public class Joint { protected var physicsJoint:b2Joint;// = null public var jointType:JointType; public var block2:Block; public var position:Point; public var block1:Block; public function Joint(_arg1:Block, _arg2:Block, _arg3:Point, _arg4:JointType){ this.block1 = _arg1; this.block2 = _arg2; this.position = _arg3; this.jointType = _arg4; } public function connectsWheelMiddle():Boolean{ if ((((((block1 as Wheel)) && ((block1.getPosition().x == position.x)))) && ((block1.getPosition().y == position.y)))){ return (true); }; if ((((((block2 as Wheel)) && ((block2.getPosition().x == position.x)))) && ((block2.getPosition().y == position.y)))){ return (true); }; return (false); } protected function generatePhysicsJointDef():b2JointDef{ var _local1:b2RevoluteJointDef = new b2RevoluteJointDef(); _local1.body1 = block1.getPhysicsBody(); _local1.body2 = block2.getPhysicsBody(); _local1.anchorPoint.Set(position.x, position.y); _local1.collideConnected = true; if (jointType == JointType.MOTOR_CLOCKWISE){ _local1.motorTorque = 50000000; _local1.motorSpeed = -5; _local1.enableMotor = true; }; if (jointType == JointType.MOTOR_COUNTER_CLOCKWISE){ _local1.motorTorque = 50000000; _local1.motorSpeed = 5; _local1.enableMotor = true; }; if (jointType == JointType.WELD){ _local1.motorTorque = 50000000; _local1.motorSpeed = 0; _local1.enableMotor = true; }; return (_local1); } public function generatePhysicsJoint(_arg1:b2World):b2Joint{ if (physicsJoint == null){ physicsJoint = _arg1.CreateJoint(generatePhysicsJointDef()); }; return (physicsJoint); } public function setPosition(_arg1:Point):void{ position = _arg1; } public function destroyPhysicsJoint(_arg1:b2World):void{ if (physicsJoint != null){ _arg1.DestroyJoint(physicsJoint); physicsJoint = null; }; } public function getPosition():Point{ return (position); } } }//package contraption.blocks
Section 73
//JointCollection (contraption.blocks.JointCollection) package contraption.blocks { import de.polygonal.ds.*; import flash.geom.*; import Box2D.Dynamics.*; import flash.utils.*; public class JointCollection extends SLinkedList { protected var collisionMaskBitIndex:int;// = 0 public var position:Point; protected var collisionMaskBit:int;// = 1 protected var hasMoved:Boolean;// = false protected var firstBlock:Block; public function JointCollection(_arg1:Block, _arg2:Point){ this.firstBlock = _arg1; this.position = _arg2; } public function moveJoint(_arg1:Point):void{ var _local3:Joint; if (hasMoved){ return; }; hasMoved = true; getTopBlock().moveWithJoint(this, _arg1); var _local2:Iterator = getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as Joint); _local3.block1.moveWithJoint(this, _arg1); }; setPosition(getPosition().add(_arg1)); hasMoved = false; } public function isJointedTo(_arg1:Block):Boolean{ var _local3:Joint; if (_arg1 == getTopBlock()){ return (true); }; var _local2:Iterator = getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as Joint); if (_local3.block1 == _arg1){ return (true); }; if (_local3.block2 == _arg1){ return (true); }; }; return (false); } public function setPosition(_arg1:Point):void{ position = _arg1; var _local2:Iterator = getIterator(); while (_local2.hasNext()) { (_local2.next() as Joint).setPosition(position); }; } public function getBottomBlock():Block{ if (isEmpty()){ return (firstBlock); }; return ((head.data.block1 as Block)); } public function startJoints(_arg1:b2World):void{ var _local4:Joint; var _local2:Boolean; var _local3:Iterator = getIterator(); while (_local3.hasNext()) { _local4 = (_local3.next() as Joint); if ((((_local4.block2 as Wheel)) && (!((_local4.jointType == JointType.PIN))))){ _local2 = true; }; }; _local3 = getIterator(); while (_local3.hasNext()) { _local4 = (_local3.next() as Joint); _local4.generatePhysicsJoint(_arg1); }; } public function getTopBlock():Block{ if (isEmpty()){ return (firstBlock); }; return ((tail.data.block2 as Block)); } public function getBlockJointedBeneath(_arg1:Block):Block{ var _local3:Joint; var _local2:Iterator = getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as Joint); if (_local3.block2 == _arg1){ return (_local3.block1); }; }; return (null); } public function containsWheel():Boolean{ var _local2:Joint; var _local1:Iterator = getIterator(); if ((getTopBlock() as Wheel)){ return (true); }; while (_local1.hasNext()) { _local2 = (_local1.next() as Joint); if ((_local2.block1 as Wheel)){ return (true); }; }; return (false); } public function addJointedBlocks(_arg1:Dictionary):void{ var _local3:Joint; var _local2:Iterator = getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as Joint); _arg1[_local3.block1] = _local3.block1; _arg1[_local3.block2] = _local3.block2; }; } public function sharesBlockWith(_arg1:JointCollection):Boolean{ var _local3:Joint; if (_arg1.isJointedTo(getTopBlock())){ return (true); }; var _local2:Iterator = getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as Joint); if (_arg1.isJointedTo(_local3.block1)){ return (true); }; if (_arg1.isJointedTo(_local3.block2)){ return (true); }; }; return (false); } public function unjointBlock(_arg1:Block):void{ var _local5:Joint; var _local2:Joint; var _local3:Joint; var _local4:Iterator = getIterator(); while (_local4.hasNext()) { _local5 = (_local4.next() as Joint); if (_local5.block1 == _arg1){ _local2 = _local5; }; if (_local5.block2 == _arg1){ _local3 = _local5; }; }; if ((((_local2 == null)) && ((_local3 == null)))){ return; }; if (((!((_local2 == null))) && ((_local3 == null)))){ firstBlock = _local2.block2; remove(nodeOf(_local2)); if ((((((_local2.jointType == JointType.MOTOR_CLOCKWISE)) && ((_local2.block2 as Wheel)))) && (!((tail == null))))){ (tail.data as Joint).jointType = JointType.MOTOR_COUNTER_CLOCKWISE; } else { if ((((((_local2.jointType == JointType.MOTOR_COUNTER_CLOCKWISE)) && ((_local2.block2 as Wheel)))) && (!((tail == null))))){ (tail.data as Joint).jointType = JointType.MOTOR_CLOCKWISE; }; }; return; }; if (((!((_local3 == null))) && ((_local2 == null)))){ firstBlock = _local3.block1; remove(nodeOf(_local3)); return; }; _local3.block2 = _local2.block2; remove(nodeOf(_local2)); if ((_arg1 as Wheel)){ _local3.jointType = JointType.PIN; } else { if (_local2.jointType != JointType.PIN){ _local3.jointType = _local2.jointType; }; }; } public function getPosition():Point{ return (position); } } }//package contraption.blocks
Section 74
//JointedDynamicRectangle (contraption.blocks.JointedDynamicRectangle) package contraption.blocks { import flash.display.*; import contraption.*; import flash.geom.*; public class JointedDynamicRectangle extends DynamicRectangle { public function JointedDynamicRectangle(_arg1:Boolean, _arg2:Boolean=false, _arg3:Point=null){ super(_arg1, _arg2, _arg3); } override protected function initAllowableActions():void{ if (editing){ return (super.initAllowableActions()); }; allowableActions = new Actions(); allowableActions.move = true; allowableActions.build = true; } override public function getDistance(_arg1:Point):Number{ var _local2:Point = getPosition(); var _local3:Number = getWidth(); var _local4:Number = getHeight(); var _local5:Point = parent.localToGlobal(_arg1); _local5 = globalToLocal(_local5); var _local6:Number = Point.distance(_local2, _local5); if ((((((((_local5.x > (-(_local3) / 2))) && ((_local5.x < (_local3 / 2))))) && ((_local5.y > (-(_local4) / 2))))) && ((_local5.y < (_local4 / 2))))){ if (_local6 > 7){ return (7); }; }; return (_local6); } override public function collidesWithJointedBlocks():Boolean{ return (false); } override protected function getXmlRoot():XML{ return (<JointedDynamicRectangle/> ); } override protected function getMaskBits():int{ return (~(16)); } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ var _local3:Point; super.drawBlock(_arg1, _arg2); drawAnchor(new Point(0, 0)); drawAnchor(new Point((getWidth() / 2), (getHeight() / 2))); drawAnchor(new Point((-(getWidth()) / 2), (getHeight() / 2))); drawAnchor(new Point((getWidth() / 2), (-(getHeight()) / 2))); drawAnchor(new Point((-(getWidth()) / 2), (-(getHeight()) / 2))); } override protected function getCategoryBits():int{ return (1); } override public function setFromXML(_arg1:XML):void{ var _local5:Point; super.setFromXML(_arg1); var _local2:Point = getPosition(); var _local3:Number = getWidth(); var _local4:Number = getHeight(); var _local6:Number = getRotation(); var _local7:Point = new Point(); var _local8:Point = new Point(); _local7.x = ((Math.cos(_local6) * _local3) / 2); _local7.y = ((Math.sin(_local6) * _local3) / 2); _local8.x = ((Math.sin(_local6) * _local4) / 2); _local8.y = ((-(Math.cos(_local6)) * _local4) / 2); _local5 = new Point(_local2.x, _local2.y); addJoint(new JointCollection(this, _local5)); _local5 = _local2.add(_local7).add(_local8); addJoint(new JointCollection(this, _local5)); _local5 = _local2.subtract(_local7).add(_local8); addJoint(new JointCollection(this, _local5)); _local5 = _local2.add(_local7).subtract(_local8); addJoint(new JointCollection(this, _local5)); _local5 = _local2.subtract(_local7).subtract(_local8); addJoint(new JointCollection(this, _local5)); } } }//package contraption.blocks
Section 75
//JointType (contraption.blocks.JointType) package contraption.blocks { public class JointType { public static const MOTOR_COUNTER_CLOCKWISE:JointType = new (JointType); ; public static const PIN:JointType = new (JointType); ; public static const WELD:JointType = new (JointType); ; public static const MOTOR_CLOCKWISE:JointType = new (JointType); ; } }//package contraption.blocks
Section 76
//Rod (contraption.blocks.Rod) package contraption.blocks { import flash.display.*; import contraption.*; import de.polygonal.ds.*; import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class Rod extends Block { protected var rodCanvas:Sprite; public var point1:Point; public var point2:Point; public function Rod(_arg1:Point, _arg2:Point){ this.point1 = _arg1; this.point2 = _arg2; setPositionFromPoints(); this.point1 = new Point(); this.point2 = new Point(); var _local3:Number = getRotation(); var _local4:Point = getPosition(); var _local5:Number = getWidth(); this.point1.x = (_local4.x - ((Math.cos(_local3) * _local5) / 2)); this.point1.y = (_local4.y - ((Math.sin(_local3) * _local5) / 2)); this.point2.x = (_local4.x + ((Math.cos(_local3) * _local5) / 2)); this.point2.y = (_local4.y + ((Math.sin(_local3) * _local5) / 2)); addJoint(new JointCollection(this, _arg1)); addJoint(new JointCollection(this, _arg2)); setBlockCanvas(); } override public function setRotation(_arg1:Number):void{ super.setRotation(_arg1); setPointsFromPosition(); } protected function setPositionFromPointsy():void{ super.setRotation(Math.atan2((point2.y - point1.y), (point2.x - point1.x))); var _local1:Number = Point.distance(point1, point2); if (_local1 < 1){ _local1 = 1; }; super.setWidth(_local1); super.setHeight(getHeight()); super.setPosition(new Point((point1.x + ((point2.x - point1.x) / 2)), (point1.y + ((point2.y - point1.y) / 2)))); } public function getMaskBits():int{ return (~(17)); } override public function setWidth(_arg1:Number):void{ super.setWidth(_arg1); setPointsFromPosition(); } public function doesJoinWheelMiddles():Boolean{ var _local2:Iterator; var _local3:JointCollection; var _local4:Boolean; var _local5:Joint; var _local1:Iterator = joints.getIterator(); while (_local1.hasNext()) { _local3 = (_local1.next() as JointCollection); _local2 = _local3.getIterator(); _local4 = false; while (_local2.hasNext()) { _local5 = (_local2.next() as Joint); if (_local5.connectsWheelMiddle()){ _local4 = true; }; }; if (!_local4){ return (false); }; }; return (true); } override protected function generatePhysicsBodyDef():b2BodyDef{ var _local3:b2Body; var _local1:b2BoxDef = new b2BoxDef(); var _local2:b2BodyDef = new b2BodyDef(); _local1.extents.Set((getWidth() / 2), (getHeight() / 2)); _local1.density = 1; _local1.friction = 0.7; _local1.restitution = 0.2; _local1.categoryBits = getCategoryBits(); _local1.maskBits = getMaskBits(); _local1.userData = this; _local2.AddShape(_local1); _local2.userData = this; _local2.position.x = getPosition().x; _local2.position.y = getPosition().y; _local2.rotation = getRotation(); _local2.linearDamping = 0.009; _local2.angularDamping = 0.2; return (_local2); } override public function moveWithJoint(_arg1:JointCollection, _arg2:Point):void{ if (Point.distance(_arg1.getPosition(), point1) < Point.distance(_arg1.getPosition(), point2)){ point1 = point1.add(_arg2); } else { point2 = point2.add(_arg2); }; setPositionFromPointsy(); setBlockCanvas(); } protected function getSimpleColour():int{ return (0xFF); } protected function drawSimpleBlock(_arg1:Sprite, _arg2:Sprite):void{ var _local3:Number = (getWidth() - 4); var _local4:Number = 8; _arg1.graphics.beginFill(getSimpleColour()); _arg1.graphics.drawRect((((-1 * _local3) / 2) + 2), ((-(_local4) / 2) + 2), (_local3 - 4), (_local4 - 4)); _arg1.graphics.endFill(); _arg2.graphics.lineStyle(4, getSimpleBackgroundColour()); _arg2.graphics.drawRect((((-1 * _local3) / 2) + 1), ((-(_local4) / 2) + 1), (_local3 - 2), (_local4 - 2)); drawAnchor(new Point(((-1 * getWidth()) / 2), 0)); drawAnchor(new Point((getWidth() / 2), 0)); } public function getCategoryBits():int{ return (16); } override public function getHeight():Number{ return (4); } override protected function getXmlRoot():XML{ return (<HollowRod/> ); } protected function getTile():Sprite{ return (new HollowRodGraphic()); } protected function drawFancyBlock(_arg1:Sprite, _arg2:Sprite):void{ var _local10:Sprite; var _local3:Number = (getWidth() - 4); var _local4:Number = getHeight(); _arg1.graphics.beginFill(0xFFFFFF, 0); _arg1.graphics.drawRect(((-(_local3) / 2) - 7), (-10 / 2), (_local3 + 14), 10); var _local5 = 100; var _local6:int = Math.ceil((_local3 / _local5)); rodCanvas = new Sprite(); _arg1.addChild(rodCanvas); var _local7:int; while (_local7 < _local6) { _local10 = getTile(); _local10.x = ((-(_local3) / 2) + (_local7 * _local5)); rodCanvas.addChild(_local10); _local10 = getTileBackground(); _local10.x = ((-(_local3) / 2) + (_local7 * _local5)); _arg2.addChild(_local10); _local7++; }; var _local8:Sprite = new Sprite(); _local8.graphics.beginFill(0xFF0000); _local8.graphics.drawRect(((-1 * _local3) / 2), -25, _local3, 50); rodCanvas.addChild(_local8); rodCanvas.mask = _local8; _local8 = new Sprite(); _local8.graphics.beginFill(0xFF0000); _local8.graphics.drawRect(((-1 * _local3) / 2), -25, _local3, 50); _arg2.addChild(_local8); _arg2.mask = _local8; var _local9:Sprite = new Sprite(); _arg1.addChild(_local9); drawAnchor(new Point(((-1 * getWidth()) / 2), 0), _local9); drawAnchor(new Point((getWidth() / 2), 0), _local9); } protected function getSimpleBackgroundColour():int{ return (0xFFFFFF); } override public function setPosition(_arg1:Point):void{ super.setPosition(_arg1); setPointsFromPosition(); } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ if (Configuration.getInstance().isInSimpleGraphicsMode()){ drawSimpleBlock(_arg1, _arg2); } else { drawFancyBlock(_arg1, _arg2); }; } protected function getTileBackground():Sprite{ return (new HollowRodGraphicBG()); } override public function collidesWithJointedBlocks():Boolean{ return (false); } protected function setPointsFromPosition():void{ if (getPosition() == null){ return; }; if (point1 == null){ point1 = new Point(); }; if (point2 == null){ point2 = new Point(); }; var _local1:Number = getWidth(); point1.x = (getPosition().x - ((Math.cos(getRotation()) * _local1) / 2)); point1.y = (getPosition().y - ((Math.sin(getRotation()) * _local1) / 2)); point2.x = (getPosition().x + ((Math.cos(getRotation()) * _local1) / 2)); point2.y = (getPosition().y + ((Math.sin(getRotation()) * _local1) / 2)); } override public function getDistance(_arg1:Point):Number{ var _local9:Number; var _local12:Number; var _local13:Number; var _local2:Number = (((_arg1.x - point1.x) * (point2.x - point1.x)) + ((_arg1.y - point1.y) * (point2.y - point1.y))); var _local3:Number = (((point2.x - point1.x) * (point2.x - point1.x)) + ((point2.y - point1.y) * (point2.y - point1.y))); var _local4:Number = (_local2 / _local3); var _local5:Number = (point1.x + (_local4 * (point2.x - point1.x))); var _local6:Number = (point1.y + (_local4 * (point2.y - point1.y))); var _local7:Number = ((((point1.y - _arg1.y) * (point2.x - point1.x)) - ((point1.x - _arg1.x) * (point2.y - point1.y))) / _local3); var _local8:Number = (Math.abs(_local7) * Math.sqrt(_local3)); var _local10:Number = _local5; var _local11:Number = _local6; if ((((_local4 >= 0)) && ((_local4 <= 1)))){ _local9 = _local8; } else { _local12 = (((_arg1.x - point1.x) * (_arg1.x - point1.x)) + ((_arg1.y - point1.y) * (_arg1.y - point1.y))); _local13 = (((_arg1.x - point2.x) * (_arg1.x - point2.x)) + ((_arg1.y - point2.y) * (_arg1.y - point2.y))); if (_local12 < _local13){ _local10 = point1.x; _local11 = point1.y; _local9 = Math.sqrt(_local12); } else { _local10 = point2.x; _local11 = point2.y; _local9 = Math.sqrt(_local13); }; }; return (_local9); } protected function setPositionFromPoints():void{ super.setRotation(Math.atan2((point2.y - point1.y), (point2.x - point1.x))); super.setWidth(Point.distance(point1, point2)); super.setHeight(getHeight()); super.setPosition(new Point((point1.x + ((point2.x - point1.x) / 2)), (point1.y + ((point2.y - point1.y) / 2)))); } } }//package contraption.blocks
Section 77
//SolidRod (contraption.blocks.SolidRod) package contraption.blocks { import flash.display.*; import flash.geom.*; public class SolidRod extends Rod { public function SolidRod(_arg1:Point, _arg2:Point){ super(_arg1, _arg2); } override protected function getSimpleBackgroundColour():int{ return (0xB55900); } override protected function getTile():Sprite{ return (new SolidRodGraphic()); } override protected function getXmlRoot():XML{ return (<SolidRod/> ); } override public function getMaskBits():int{ return (~(16)); } override protected function getTileBackground():Sprite{ return (new SolidRodGraphicBG()); } override public function getCategoryBits():int{ return (0x0100); } override protected function getSimpleColour():int{ return (0x6B3400); } override public function getHeight():Number{ return (8); } } }//package contraption.blocks
Section 78
//StaticCircle (contraption.blocks.StaticCircle) package contraption.blocks { import flash.display.*; import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class StaticCircle extends EditableBlock { public function StaticCircle(_arg1:Boolean, _arg2:Point=null){ super(_arg1, false, _arg2); generatePhysicsBodyDef(); } override protected function generatePhysicsBodyDef():b2BodyDef{ var _local1:b2BodyDef; var _local2:b2CircleDef; var _local3:b2Body; _local1 = new b2BodyDef(); _local2 = new b2CircleDef(); _local2.radius = getWidth(); _local2.friction = 0.7; _local2.categoryBits = ~(0); _local2.maskBits = ~(0); _local1.AddShape(_local2); _local1.position.x = getPosition().x; _local1.position.y = getPosition().y; _local1.userData = this; return (_local1); } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ _arg1.graphics.beginFill(48641); _arg1.graphics.drawCircle(0, 0, (getWidth() - 4)); _arg1.graphics.endFill(); _arg2.graphics.lineStyle(6, 32777, 100); _arg2.graphics.drawCircle(0, 0, (getWidth() - 3)); } override protected function getXmlRoot():XML{ return (<StaticCircle/> ); } override public function getHeight():Number{ return (getWidth()); } } }//package contraption.blocks
Section 79
//StaticRectangle (contraption.blocks.StaticRectangle) package contraption.blocks { import flash.display.*; import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class StaticRectangle extends EditableBlock { public function StaticRectangle(_arg1:Boolean, _arg2:Point=null){ super(_arg1, false, _arg2); generatePhysicsBodyDef(); } override protected function generatePhysicsBodyDef():b2BodyDef{ var _local2:b2BodyDef; var _local3:b2Body; var _local1:b2BoxDef = new b2BoxDef(); _local2 = new b2BodyDef(); _local1.extents.Set((getWidth() / 2), (getHeight() / 2)); _local1.friction = 0.7; _local1.categoryBits = ~(0); _local1.maskBits = ~(0); _local2.AddShape(_local1); _local2.userData = this; _local2.position.x = getPosition().x; _local2.position.y = getPosition().y; _local2.rotation = getRotation(); return (_local2); } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ _arg1.graphics.beginFill(48641); _arg1.graphics.drawRect(((-(getWidth()) / 2) + 4), ((-(getHeight()) / 2) + 4), (getWidth() - 8), (getHeight() - 8)); _arg1.graphics.endFill(); _arg2.graphics.lineStyle(6, 32777, 100); _arg2.graphics.drawRect(((-(getWidth()) / 2) + 3), ((-(getHeight()) / 2) + 3), (getWidth() - 5), (getHeight() - 5)); } override protected function getXmlRoot():XML{ return (<StaticRectangle/> ); } } }//package contraption.blocks
Section 80
//UnstretchableBlock (contraption.blocks.UnstretchableBlock) package contraption.blocks { import de.polygonal.ds.*; import flash.geom.*; public class UnstretchableBlock extends EditableBlock { protected var hasMoved:Boolean;// = false public function UnstretchableBlock(_arg1:Boolean, _arg2:Boolean=false, _arg3:Point=null){ super(_arg1, _arg2, _arg3); } override public function moveWithJoint(_arg1:JointCollection, _arg2:Point):void{ var _local4:JointCollection; if (hasMoved){ return; }; hasMoved = true; super.moveWithJoint(_arg1, _arg2); var _local3:SListIterator = joints.getListIterator(); while (_local3.hasNext()) { _local4 = (_local3.next() as JointCollection); _local4.moveJoint(_arg2); }; hasMoved = false; } } }//package contraption.blocks
Section 81
//Wheel (contraption.blocks.Wheel) package contraption.blocks { import flash.display.*; import contraption.*; import flash.geom.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class Wheel extends UnstretchableBlock { public var spinDirection:int; public var radius:Number;// = 20 public static const DEFAULT_RADIUS:int = 20; public static const CLOCKWISE:int = 0; public static const NO_SPIN:int = 1; public static const COUNTER_CLOCKWISE:int = -1; public function Wheel(_arg1:Point, _arg2:int, _arg3:Number=0, _arg4:Number=NaN, _arg5:Boolean=false, _arg6:Boolean=false){ super(_arg5, _arg6); if (((!(isNaN(_arg4))) && (_arg6))){ setRadius(_arg4); } else { _arg4 = getRadius(); }; setRotation(_arg3); setPosition(_arg1); this.spinDirection = _arg2; addJoint(new JointCollection(this, new Point(_arg1.x, _arg1.y))); addJoint(new JointCollection(this, getAnchorPoint(0))); addJoint(new JointCollection(this, getAnchorPoint((Math.PI / 2)))); addJoint(new JointCollection(this, getAnchorPoint(Math.PI))); addJoint(new JointCollection(this, getAnchorPoint(((Math.PI / 2) * 3)))); setBlockCanvas(); } override public function getDistance(_arg1:Point):Number{ var _local2:Number = Point.distance(getPosition(), _arg1); if (_local2 < getRadius()){ if (_local2 > 7){ _local2 = 7; } else { _local2 = (_local2 - getRadius()); }; }; return (_local2); } override public function setWidth(_arg1:Number):void{ radius = (_arg1 / 2); } protected function getAnchorPoint(_arg1:Number):Point{ return (getPosition().add(new Point((Math.cos((getRotation() + _arg1)) * getRadius()), (Math.sin((getRotation() + _arg1)) * getRadius())))); } public function getRadius():Number{ return (radius); } override public function setHeight(_arg1:Number):void{ radius = (_arg1 / 2); } override protected function getXmlRoot():XML{ if (spinDirection == CLOCKWISE){ return (<ClockwiseWheel/> ); }; if (spinDirection == COUNTER_CLOCKWISE){ return (<CounterClockwiseWheel/> ); }; return (<NoSpinWheel/> ); } override public function getJointType():JointType{ if (spinDirection == CLOCKWISE){ return (JointType.MOTOR_CLOCKWISE); }; if (spinDirection == COUNTER_CLOCKWISE){ return (JointType.MOTOR_COUNTER_CLOCKWISE); }; return (JointType.PIN); } override public function getWidth():Number{ return ((radius * 2)); } override protected function generatePhysicsBodyDef():b2BodyDef{ var _local3:b2Body; var _local1:b2BodyDef = new b2BodyDef(); var _local2:b2CircleDef = new b2CircleDef(); _local2.radius = getRadius(); _local2.density = 1; _local2.friction = 0.7; _local2.restitution = 0.2; _local2.categoryBits = 1; _local2.maskBits = ~(16); _local2.userData = this; _local1.AddShape(_local2); _local1.rotation = getRotation(); _local1.position.x = getPosition().x; _local1.position.y = getPosition().y; _local1.userData = this; return (_local1); } public function setRadius(_arg1:Number):void{ radius = _arg1; } override protected function drawBlock(_arg1:Sprite, _arg2:Sprite):void{ var _local5:int; var _local7:Point; var _local8:Sprite; var _local3:Number = getPosition().x; var _local4:Number = getPosition().y; if (isGoalBlock){ _arg1.graphics.beginFill(16737894); _arg1.graphics.drawCircle(0, 0, (getRadius() - 4)); _local5 = 12281446; } else { if (spinDirection == CLOCKWISE){ _local8 = new ClockwiseWheelGraphic(); _local5 = 16547843; } else { if (spinDirection == COUNTER_CLOCKWISE){ _local8 = new CounterClockwiseWheelGraphic(); _local5 = 13715365; } else { _local8 = new NonPoweredWheelGraphic(); _local5 = 682493; }; }; _arg1.addChild(_local8); _arg1.graphics.beginFill(0xFFFFFF, 0); _arg1.graphics.drawCircle(0, 0, getRadius()); }; _arg2.graphics.lineStyle(6, _local5, 100); _arg2.graphics.drawCircle(0, 0, (getRadius() - 3)); var _local6:Sprite = new Sprite(); _arg1.addChild(_local6); drawAnchor(new Point(getRadius(), 0), _local6); drawAnchor(new Point(0, getRadius()), _local6); drawAnchor(new Point((-1 * getRadius()), 0), _local6); drawAnchor(new Point(0, (-1 * getRadius())), _local6); drawMotorAnchor(new Point(0, 0), _local6); } override protected function initAllowableActions():void{ if (editing){ return (super.initAllowableActions()); }; allowableActions = new Actions(); allowableActions.move = true; allowableActions.build = true; if (!isGoalBlock){ allowableActions.delete_ = true; }; } override public function collidesWithJointedBlocks():Boolean{ return (false); } override public function getHeight():Number{ return ((radius * 2)); } } }//package contraption.blocks
Section 82
//OfficialLevels (contraption.data.OfficialLevels) package contraption.data { public class OfficialLevels { public static function getOfficialLevels():XML{ return (<officialLevels> <level1> <retrieveLevel> <levelId>91</levelId> <levelNumber>1</levelNumber> <name>Rolling Away</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>-155</x> <y>190</y> </position> <width>162</width> <height>162</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>85</x> <y>135</y> </position> <width>348</width> <height>80</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>123</x> <y>296</y> </position> <width>192</width> <height>192</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-463.49999999999994</x> <y>-333.34999999999997</y> </position> <width>136</width> <height>136</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-254.64999999999998</x> <y>-432</y> </position> <width>173</width> <height>173</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-284.25</x> <y>-287.24999999999994</y> </position> <width>287.1</width> <height>94.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>402.1</x> <y>-64.99999999999999</y> </position> <width>141.6</width> <height>141.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>288.05000000000007</x> <y>-301.05</y> </position> <width>188.8</width> <height>188.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.38529804259629785</rotation> <position> <x>242.75</x> <y>-118.10000000000001</y> </position> <width>277.6</width> <height>87.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-229</x> <y>-31</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-154</x> <y>15</y> </position> <width>256</width> <height>188</height> </start> <end> <position> <x>153</x> <y>25</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level1> <level2> <retrieveLevel> <levelId>55</levelId> <levelNumber>2</levelNumber> <name>Reach Up</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>317</x> <y>277</y> </position> <width>622</width> <height>62</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>180</x> <y>-37.20000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-67.15</x> <y>27.15</y> </position> <width>122.8</width> <height>120</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>555.75</x> <y>408.6</y> </position> <width>137.20000000000002</width> <height>125.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-27.149999999999984</x> <y>350</y> </position> <width>134.3</width> <height>122.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>758.5500000000001</x> <y>-21.4</y> </position> <width>128.6</width> <height>111.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>884.3000000000001</x> <y>257.1</y> </position> <width>205.7</width> <height>168.60000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>629.45</x> <y>277.2</y> </position> <width>32</width> <height>32</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>268.25</x> <y>100.5</y> </position> <width>28</width> <height>30</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>38.900000000000006</x> <y>225.10000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="2"> <rotation>0</rotation> <position> <x>134.05</x> <y>225.10000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </NoSpinWheel> <SolidRod id="3"> <rotation>0</rotation> <position> <x>86.47500000000001</x> <y>225.10000000000002</y> </position> <width>95.15</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>1</jointedTo> <jointedTo>2</jointedTo> </joints> </SolidRod> <SolidRod id="4"> <rotation>-2.2225965468532523</rotation> <position> <x>111.025</x> <y>194.925</y> </position> <width>75.91261423505321</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>3</jointedTo> </joints> </SolidRod> <SolidRod id="5"> <rotation>2.2537675358563143</rotation> <position> <x>63.45</x> <y>194.925</y> </position> <width>77.80059447073656</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>4</jointedTo> <jointedTo>3</jointedTo> </joints> </SolidRod> </playerBlocks> <start> <position> <x>201.75</x> <y>160.9</y> </position> <width>379.5</width> <height>197.1</height> </start> <end> <position> <x>554.25</x> <y>73.5</y> </position> <width>148</width> <height>142</height> </end> </level> </retrieveLevel> </level2> <level3> <retrieveLevel> <levelId>16</levelId> <levelNumber>3</levelNumber> <name>Mind The Gap</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>94.75</x> <y>228.35</y> </position> <width>412</width> <height>92</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>528.8</x> <y>229.4</y> </position> <width>254</width> <height>90</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-101.3</x> <y>231.75</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>662.1</x> <y>279.1</y> </position> <width>93.4</width> <height>93.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>27.75</x> <y>27.749999999999996</y> </position> <width>61.3</width> <height>61.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>2.050224006112992</rotation> <position> <x>640.1500000000001</x> <y>35.8</y> </position> <width>42.3</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>444.1</x> <y>268.8</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>158.4</x> <y>316.8</y> </position> <width>96.4</width> <height>96.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>521.45</x> <y>305.5500000000001</y> </position> <width>71.5</width> <height>71.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>171</x> <y>106</y> </position> <width>26</width> <height>26</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>90</x> <y>109</y> </position> <width>404</width> <height>166</height> </start> <end> <position> <x>562.8000000000001</x> <y>123.4</y> </position> <width>159.10000000000002</width> <height>135.70000000000002</height> </end> </level> </retrieveLevel> </level3> <level4> <retrieveLevel> <levelId>102</levelId> <levelNumber>4</levelNumber> <name>Junkyard</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>243</x> <y>280</y> </position> <width>778</width> <height>68</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>254.99999999999997</x> <y>117.24999999999999</y> </position> <width>25</width> <height>58.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.032246882435253865</rotation> <position> <x>284.54999999999995</x> <y>216</y> </position> <width>39.3</width> <height>40.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>321.15</x> <y>178.65</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>364</x> <y>217</y> </position> <width>48</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>202.25</x> <y>178.45</y> </position> <width>21.700000000000003</width> <height>36.7</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>431.25</x> <y>208.75</y> </position> <width>29.700000000000003</width> <height>42</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>404</x> <y>110</y> </position> <width>23.400000000000002</width> <height>56.7</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>339.45000000000005</x> <y>110.25</y> </position> <width>20</width> <height>20.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>240.35000000000002</x> <y>168.35000000000002</y> </position> <width>39.6</width> <height>29.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>367.1</x> <y>158.70000000000002</y> </position> <width>26.700000000000003</width> <height>41.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>404.35</x> <y>164.00000000000003</y> </position> <width>17.3</width> <height>17.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>161.10000000000002</x> <y>220.45000000000002</y> </position> <width>51.800000000000004</width> <height>18.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>466.65000000000003</x> <y>162.3</y> </position> <width>52</width> <height>29.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>492.65000000000003</x> <y>213</y> </position> <width>59.300000000000004</width> <height>37.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>472.35</x> <y>102.65</y> </position> <width>58.400000000000006</width> <height>25.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>240.35</x> <y>219.45000000000002</y> </position> <width>41.7</width> <height>28.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-203.85000000000005</x> <y>280.49999999999994</y> </position> <width>240.20000000000002</width> <height>67.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-180.75000000000003</x> <y>222.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-235.35000000000002</x> <y>207.5</y> </position> <width>29.1</width> <height>78.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-190.75000000000003</x> <y>166.50000000000003</y> </position> <width>31</width> <height>31</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-289.95</x> <y>230.25000000000003</y> </position> <width>61.900000000000006</width> <height>32.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-291.8</x> <y>195.70000000000002</y> </position> <width>18.2</width> <height>18.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>-0.20477186860842284</rotation> <position> <x>-276.35</x> <y>157.45000000000005</y> </position> <width>85.5</width> <height>32.7</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.017512709110314773</rotation> <position> <x>-212.55</x> <y>109.14999999999999</y> </position> <width>69.2</width> <height>51</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-14.200000000000045</x> <y>420.4000000000001</y> </position> <width>660.7</width> <height>60</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-189.9</x> <y>365.84999999999997</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-36.99999999999999</x> <y>374.95</y> </position> <width>29.1</width> <height>30.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-37.90000000000002</x> <y>344.05</y> </position> <width>60.1</width> <height>30.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-110.70000000000005</x> <y>356.75000000000006</y> </position> <width>54.6</width> <height>67.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>32.199999999999996</x> <y>378.55</y> </position> <width>60</width> <height>23.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.39204627244228374</rotation> <position> <x>91.25000000000001</x> <y>358.6</y> </position> <width>74.7</width> <height>38.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>25.800000000000004</x> <y>353.05000000000007</y> </position> <width>25.5</width> <height>27.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>-0.5044164118269181</rotation> <position> <x>145.94999999999996</x> <y>362.20000000000005</y> </position> <width>18.2</width> <height>56.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>240.55</x> <y>356.7</y> </position> <width>76.4</width> <height>67.4</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-150.75</x> <y>378.55</y> </position> <width>18.2</width> <height>23.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>184.15</x> <y>372.1500000000001</y> </position> <width>18.2</width> <height>18.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-153.45000000000002</x> <y>356.70000000000005</y> </position> <width>10.9</width> <height>10.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>7</x> <y>173</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-4</x> <y>160</y> </position> <width>280</width> <height>190</height> </start> <end> <position> <x>572</x> <y>152</y> </position> <width>100</width> <height>208</height> </end> </level> </retrieveLevel> </level4> <level5> <retrieveLevel> <levelId>31</levelId> <levelNumber>5</levelNumber> <name>The Wall</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>110.2</x> <y>287.6</y> </position> <width>467.1</width> <height>87.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>740.8</x> <y>273.70000000000005</y> </position> <width>480.3</width> <height>61.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>490.25</x> <y>337.9000000000001</y> </position> <width>1129.9</width> <height>90.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>291.25</x> <y>159.1</y> </position> <width>29.200000000000003</width> <height>32.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>252.54999999999995</x> <y>162.8</y> </position> <width>35.1</width> <height>40.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>289.05</x> <y>193.4</y> </position> <width>27.8</width> <height>35</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>251.75</x> <y>202.2</y> </position> <width>24.8</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>290.55</x> <y>227</y> </position> <width>30.6</width> <height>32.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>253.30000000000004</x> <y>232.9</y> </position> <width>32.1</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>294.20000000000005</x> <y>100</y> </position> <width>33.6</width> <height>30.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>255.44999999999993</x> <y>101.45</y> </position> <width>26.200000000000003</width> <height>27.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>273.74999999999994</x> <y>129.95</y> </position> <width>71.5</width> <height>23.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>328.50000000000006</x> <y>111.7</y> </position> <width>32.1</width> <height>30.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>325.55</x> <y>148.15</y> </position> <width>30.700000000000003</width> <height>36.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>325.55000000000007</x> <y>183.95</y> </position> <width>30.6</width> <height>33.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>324.75000000000006</x> <y>223.35</y> </position> <width>23.3</width> <height>40.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-72.25000000000001</x> <y>330.65</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>989.05</x> <y>310.2</y> </position> <width>67.10000000000001</width> <height>67.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-111.70000000000002</x> <y>12.399999999999991</y> </position> <width>77.9</width> <height>77.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>135.25</x> <y>-28.95000000000001</y> </position> <width>31.6</width> <height>31.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>93.9</x> <y>-49.650000000000006</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-13.149999999999997</x> <y>-71.55</y> </position> <width>70.60000000000001</width> <height>70.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-101.95000000000002</x> <y>-97.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>61.09999999999998</x> <y>-110.45000000000002</y> </position> <width>36.5</width> <height>36.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.5742878193317579</rotation> <position> <x>795.9000000000002</x> <y>-7.100000000000001</y> </position> <width>80.30000000000001</width> <height>82.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.4531278240870904</rotation> <position> <x>548.9</x> <y>-20.450000000000006</y> </position> <width>70.4</width> <height>55.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.005127687802247816</rotation> <position> <x>603.65</x> <y>-42.349999999999994</y> </position> <width>77.80000000000001</width> <height>70.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.38987614128793013</rotation> <position> <x>663.25</x> <y>-35.099999999999994</y> </position> <width>82.80000000000001</width> <height>75.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.42419355299901373</rotation> <position> <x>726.5</x> <y>-38.7</y> </position> <width>92.5</width> <height>75.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>29</x> <y>158</y> </position> <width>28</width> <height>30</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>14</x> <y>153</y> </position> <width>274</width> <height>194</height> </start> <end> <position> <x>611.7</x> <y>151.85</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level5> <level6> <retrieveLevel> <levelId>89</levelId> <levelNumber>6</levelNumber> <name>On a Roll</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-290</x> <y>230</y> </position> <width>816</width> <height>58</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-338</x> <y>119</y> </position> <width>82</width> <height>82</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>-0.4911863378316689</rotation> <position> <x>-586.1499999999997</x> <y>68.69999999999997</y> </position> <width>64.9</width> <height>31</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.790117623877445</rotation> <position> <x>-618.65</x> <y>40.45</y> </position> <width>87.5</width> <height>33.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-661.0500000000002</x> <y>37.650000000000006</y> </position> <width>84.7</width> <height>25.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8298537316689694</rotation> <position> <x>-685.0500000000001</x> <y>60.300000000000004</y> </position> <width>60.800000000000004</width> <height>27.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-394.2</x> <y>-137.45000000000005</y> </position> <width>22.6</width> <height>56.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.40323852203169236</rotation> <position> <x>-418.2</x> <y>-151.60000000000002</y> </position> <width>59.300000000000004</width> <height>28.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.31018911492659573</rotation> <position> <x>-416.75000000000006</x> <y>-172.70000000000002</y> </position> <width>22.6</width> <height>56.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.16229887623745093</rotation> <position> <x>-439.29999999999995</x> <y>-184.04999999999998</y> </position> <width>62.2</width> <height>19.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.45018601367763234</rotation> <position> <x>-18.550000000000015</x> <y>-110.64999999999999</y> </position> <width>84.80000000000001</width> <height>28.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5698629937964668</rotation> <position> <x>-62.35</x> <y>-121.94999999999999</y> </position> <width>84.7</width> <height>22.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.1560780599440067</rotation> <position> <x>-107.60000000000002</x> <y>-117.75000000000004</y> </position> <width>87.5</width> <height>22.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.45234394718667875</rotation> <position> <x>22.349999999999966</x> <y>-100.75</y> </position> <width>70.60000000000001</width> <height>22.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.41422262451345127</rotation> <position> <x>118.40000000000002</x> <y>248.00000000000003</y> </position> <width>25.400000000000002</width> <height>73.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8628470922264423</rotation> <position> <x>149.45</x> <y>232.50000000000003</y> </position> <width>74.5</width> <height>25.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.10371808350983186</rotation> <position> <x>180.25000000000003</x> <y>237.90000000000006</y> </position> <width>69.9</width> <height>16.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5447021293342041</rotation> <position> <x>-260</x> <y>262.15000000000003</y> </position> <width>84.5</width> <height>25</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.7553069146140182</rotation> <position> <x>-276.95000000000005</x> <y>280.49999999999994</y> </position> <width>24.1</width> <height>66.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.7440872017124346</rotation> <position> <x>-268.45</x> <y>311</y> </position> <width>58.6</width> <height>18.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-271.2</x> <y>333.95000000000005</y> </position> <width>12.9</width> <height>56.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.8495910970201173</rotation> <position> <x>-701</x> <y>231.3</y> </position> <width>93.5</width> <height>42.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5620757484096769</rotation> <position> <x>-703.75</x> <y>284.5</y> </position> <width>94.30000000000001</width> <height>36.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.6863295277912818</rotation> <position> <x>-701.0500000000001</x> <y>319.35</y> </position> <width>23.8</width> <height>55</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.8317160080084676</rotation> <position> <x>-685.5000000000001</x> <y>331.30000000000007</y> </position> <width>16</width> <height>59</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-248.70000000000002</x> <y>-20.25</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-385.5</x> <y>19.75</y> </position> <width>386.90000000000003</width> <height>189.3</height> </start> <end> <position> <x>10.100000000000001</x> <y>22.900000000000002</y> </position> <width>155.8</width> <height>194.3</height> </end> </level> </retrieveLevel> </level6> <level7> <retrieveLevel> <levelId>88</levelId> <levelNumber>7</levelNumber> <name>Full-up</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-268</x> <y>202</y> </position> <width>636</width> <height>116</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>380</x> <y>195</y> </position> <width>310</width> <height>94</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-116</x> <y>-110</y> </position> <width>86</width> <height>86</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-118</x> <y>-4</y> </position> <width>28</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>245.29999999999998</x> <y>306.6</y> </position> <width>56</width> <height>56</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>140</x> <y>626</y> </position> <width>520</width> <height>134</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-335.65</x> <y>435.05000000000007</y> </position> <width>500</width> <height>515.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>416.6500000000001</x> <y>438.75</y> </position> <width>236.20000000000002</width> <height>507.90000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>125.20000000000003</x> <y>394.05000000000007</y> </position> <width>94.9</width> <height>94.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>153.3</x> <y>540.3500000000001</y> </position> <width>18.1</width> <height>18.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>239.15</x> <y>499.9</y> </position> <width>64.60000000000001</width> <height>64.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-14.200000000000001</x> <y>485.8000000000001</y> </position> <width>72.7</width> <height>72.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>89.75</x> <y>521.1500000000001</y> </position> <width>38.400000000000006</width> <height>38.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>3.9499999999999957</x> <y>387.90000000000003</y> </position> <width>26.200000000000003</width> <height>26.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>259.34999999999997</x> <y>399.00000000000006</y> </position> <width>40.400000000000006</width> <height>40.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-469</x> <y>98</y> </position> <width>82</width> <height>20</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-319</x> <y>53</y> </position> <width>490</width> <height>216</height> </start> <end> <position> <x>375</x> <y>70</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level7> <level8> <retrieveLevel> <levelId>86</levelId> <levelNumber>8</levelNumber> <name>Higher</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>-266</x> <y>316</y> </position> <width>102</width> <height>102</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-126</x> <y>353</y> </position> <width>120</width> <height>120</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-35</x> <y>293</y> </position> <width>64</width> <height>64</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>136</x> <y>305</y> </position> <width>140</width> <height>140</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>348</x> <y>218</y> </position> <width>164</width> <height>164</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>547</x> <y>194</y> </position> <width>96</width> <height>96</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>633</x> <y>248</y> </position> <width>46</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-358</x> <y>384</y> </position> <width>66</width> <height>66</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-435</x> <y>388</y> </position> <width>36</width> <height>36</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-290</x> <y>-181</y> </position> <width>62</width> <height>62</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>215</x> <y>-170</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-401</x> <y>-163</y> </position> <width>16</width> <height>16</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-358</x> <y>-190</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>174</x> <y>-194</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-81</x> <y>-238</y> </position> <width>114</width> <height>114</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-199</x> <y>-225</y> </position> <width>74</width> <height>74</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>84</x> <y>-263</y> </position> <width>104</width> <height>104</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>17</x> <y>-180</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-217</x> <y>68</y> </position> <width>34</width> <height>36</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-39</x> <y>141</y> </position> <width>454</width> <height>222</height> </start> <end> <position> <x>-39</x> <y>-23</y> </position> <width>454</width> <height>100</height> </end> </level> </retrieveLevel> </level8> <level9> <retrieveLevel> <levelId>100</levelId> <levelNumber>9</levelNumber> <name>Around the Bend</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-191.90000000000003</x> <y>33.85</y> </position> <width>482.5</width> <height>101.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-184.85000000000002</x> <y>299.1500000000001</y> </position> <width>869.1</width> <height>84.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>290.6</x> <y>176.35000000000002</y> </position> <width>101.5</width> <height>330.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-647.6000000000001</x> <y>413.3499999999999</y> </position> <width>110</width> <height>313.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-384.05000000000007</x> <y>74.65</y> </position> <width>98.2</width> <height>141.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>328.3999999999999</x> <y>60.84999999999999</y> </position> <width>160.9</width> <height>98.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-696.15</x> <y>518.25</y> </position> <width>164.9</width> <height>102.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-344.45000000000005</x> <y>-279.90000000000003</y> </position> <width>969.6</width> <height>137.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>59.94999999999996</x> <y>-442.35</y> </position> <width>161</width> <height>255.10000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-746.8</x> <y>-93.00000000000003</y> </position> <width>164.8</width> <height>365.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>307.3</x> <y>-16.85</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-744.7500000000001</x> <y>436.5</y> </position> <width>31.400000000000002</width> <height>31.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-365.95</x> <y>-44.4</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-65.6000000000001</x> <y>-376.15000000000003</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>99.30000000000008</x> <y>-601.3000000000001</y> </position> <width>31.400000000000002</width> <height>31.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-638.8000000000001</x> <y>-379.55</y> </position> <width>31.400000000000002</width> <height>31.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-436.7</x> <y>228.95000000000002</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-174.65000000000003</x> <y>-64.10000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-191.9</x> <y>-126.95</y> </position> <width>434.6</width> <height>279.40000000000003</height> </start> <end> <position> <x>-187.65</x> <y>180.60000000000002</y> </position> <width>460</width> <height>220.10000000000002</height> </end> </level> </retrieveLevel> </level9> <level10> <retrieveLevel> <levelId>17</levelId> <levelNumber>10</levelNumber> <name>Up The Hump</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>318.45</x> <y>278.6</y> </position> <width>873.8000000000001</width> <height>133.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>351.55000000000007</x> <y>213.95</y> </position> <width>102.2</width> <height>102.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.364926276337564</rotation> <position> <x>-11.900000000000007</x> <y>347.40000000000003</y> </position> <width>139.5</width> <height>61.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.16829401120136167</rotation> <position> <x>185.15</x> <y>353.90000000000003</y> </position> <width>113.6</width> <height>73</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4720399232666762</rotation> <position> <x>718.0500000000001</x> <y>349</y> </position> <width>112.4</width> <height>63</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.056705940703367985</rotation> <position> <x>546</x> <y>359.50000000000006</y> </position> <width>123.3</width> <height>56.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.4676269911188695</rotation> <position> <x>362.75</x> <y>362</y> </position> <width>66.5</width> <height>95.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.24992450923689735</rotation> <position> <x>-126.95000000000002</x> <y>270.65</y> </position> <width>45</width> <height>60.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>664.45</x> <y>22.94999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>81.2</x> <y>14.300000000000011</y> </position> <width>37.4</width> <height>37.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-7</x> <y>92</y> </position> <width>84</width> <height>70</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>11</x> <y>129</y> </position> <width>258</width> <height>176</height> </start> <end> <position> <x>619</x> <y>132</y> </position> <width>244</width> <height>184</height> </end> </level> </retrieveLevel> </level10> <level11> <retrieveLevel> <levelId>62</levelId> <levelNumber>11</levelNumber> <name>Mission to Mars</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>152.15</x> <y>155.5</y> </position> <width>33.5</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>454.55000000000007</x> <y>152.15</y> </position> <width>34.800000000000004</width> <height>34.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>152.85</x> <y>97.3</y> </position> <width>17.400000000000002</width> <height>17.400000000000002</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>150</x> <y>150</y> </position> <width>200</width> <height>200</height> </start> <end> <position> <x>450</x> <y>150</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level11> <level12> <retrieveLevel> <levelId>19</levelId> <levelNumber>12</levelNumber> <name>Up The Stairs</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>80.35</x> <y>320.4</y> </position> <width>322.6</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>281</x> <y>302.25000000000006</y> </position> <width>113.9</width> <height>80.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>351.75</x> <y>281.80000000000007</y> </position> <width>131.4</width> <height>87.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>403.65</x> <y>248.2</y> </position> <width>111</width> <height>70.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>462.1</x> <y>217.50000000000003</y> </position> <width>106.6</width> <height>65.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>543.1000000000001</x> <y>189.1</y> </position> <width>140.20000000000002</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>593.35</x> <y>156.2</y> </position> <width>112.4</width> <height>61.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>647.1999999999999</x> <y>180.85</y> </position> <width>56.400000000000006</width> <height>56.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>525</x> <y>312.65000000000003</y> </position> <width>134.3</width> <height>134.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>270.8</x> <y>377.35</y> </position> <width>67.2</width> <height>67.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>364.50000000000006</x> <y>352.00000000000006</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-84.55000000000001</x> <y>387.85</y> </position> <width>102.2</width> <height>102.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>98.95</x> <y>382.55</y> </position> <width>62.6</width> <height>62.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>184.50000000000003</x> <y>359.35</y> </position> <width>41.400000000000006</width> <height>41.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>36.4</x> <y>351.3</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.13210546652388205</rotation> <position> <x>85.79999999999997</x> <y>62.25</y> </position> <width>96.3</width> <height>56.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>89.35</x> <y>38.64999999999999</y> </position> <width>48.400000000000006</width> <height>48.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.4308491039314226</rotation> <position> <x>266.90000000000003</x> <y>24.9</y> </position> <width>44.8</width> <height>22.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>261.6</x> <y>14.500000000000004</y> </position> <width>22.9</width> <height>22.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>546</x> <y>100</y> </position> <width>20</width> <height>20</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>480</x> <y>-117</y> </position> <width>8</width> <height>8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>241</x> <y>-29</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticCircle> <rotation>0</rotation> <position> <x>513</x> <y>-48</y> </position> <width>30</width> <height>30</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>533</x> <y>-8</y> </position> <width>10</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>451</x> <y>-179</y> </position> <width>10</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>306</x> <y>-8</y> </position> <width>8</width> <height>8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>-0.714090698612158</rotation> <position> <x>295</x> <y>-43</y> </position> <width>10</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>-2.066529346548105</rotation> <position> <x>527.3000000000001</x> <y>-56.15</y> </position> <width>58.900000000000006</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>63</x> <y>221</y> </position> <width>24</width> <height>24</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>56.95</x> <y>192.75</y> </position> <width>275.90000000000003</width> <height>191.2</height> </start> <end> <position> <x>605.1</x> <y>62.800000000000004</y> </position> <width>131.4</width> <height>146</height> </end> </level> </retrieveLevel> </level12> <level13> <retrieveLevel> <levelId>23</levelId> <levelNumber>13</levelNumber> <name>Big Ball</name> <level> <levelBlocks> <StaticRectangle> <rotation>0.08609323420781712</rotation> <position> <x>636.2999999999998</x> <y>281.25000000000006</y> </position> <width>194.5</width> <height>45.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>744.5500000000001</x> <y>192.54999999999998</y> </position> <width>48</width> <height>240</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>412.3000000000002</x> <y>-43.09999999999998</y> </position> <width>70.10000000000001</width> <height>70.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0.39331112360490583</rotation> <position> <x>413.8500000000001</x> <y>52.44999999999999</y> </position> <width>159.5</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.00000806919550522256</rotation> <position> <x>224.0999999999999</x> <y>273.75000000000006</y> </position> <width>658.4000000000001</width> <height>45.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-25</x> <y>19</y> </position> <width>232</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-88</x> <y>-61</y> </position> <width>66</width> <height>66</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>745</x> <y>0</y> </position> <width>70</width> <height>70</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>393</x> <y>379</y> </position> <width>70</width> <height>70</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>316</x> <y>468</y> </position> <width>236</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>207</x> <y>170</y> </position> <width>58</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>86.2</x> <y>157.65</y> </position> <width>346</width> <height>204.4</height> </start> <end> <position> <x>682.5</x> <y>229.9</y> </position> <width>100.7</width> <height>115.3</height> </end> </level> </retrieveLevel> </level13> <level14> <retrieveLevel> <levelId>20</levelId> <levelNumber>14</levelNumber> <name>Four Balls</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>212.45</x> <y>266.40000000000003</y> </position> <width>401.4</width> <height>62.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.2374387084494178</rotation> <position> <x>-21.85</x> <y>154.00000000000003</y> </position> <width>184.5</width> <height>17.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>389.05</x> <y>234.3</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>405.85</x> <y>175.15</y> </position> <width>54</width> <height>54</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>602.2</x> <y>188.75000000000003</y> </position> <width>68.4</width> <height>68.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>492.3</x> <y>243.05</y> </position> <width>68.60000000000001</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-117</x> <y>174</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-274</x> <y>45</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-196</x> <y>76</y> </position> <width>30</width> <height>30</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-137</x> <y>97</y> </position> <width>20</width> <height>20</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-53</x> <y>215</y> </position> <width>72</width> <height>72</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-4</x> <y>189</y> </position> <width>34</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.507098504392337</rotation> <position> <x>2.0999999999999996</x> <y>255.19999999999993</y> </position> <width>70</width> <height>62.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.36397895650964407</rotation> <position> <x>423</x> <y>266</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>565.95</x> <y>249.5</y> </position> <width>35.300000000000004</width> <height>35.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.3085500010704924</rotation> <position> <x>-80.85000000000001</x> <y>163.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>45</x> <y>144</y> </position> <width>26</width> <height>26</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>1</x> <y>132</y> </position> <width>26</width> <height>26</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="2"> <rotation>0</rotation> <position> <x>-39</x> <y>121</y> </position> <width>24</width> <height>24</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="3"> <rotation>0</rotation> <position> <x>-85</x> <y>110</y> </position> <width>24</width> <height>24</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>196.10000000000002</x> <y>144.55</y> </position> <width>358.70000000000005</width> <height>183.3</height> </start> <end> <position> <x>508</x> <y>167.85000000000002</y> </position> <width>159.20000000000002</width> <height>83.30000000000001</height> </end> </level> </retrieveLevel> </level14> <level15> <retrieveLevel> <levelId>24</levelId> <levelNumber>15</levelNumber> <name>Down Under</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>339.45000000000005</x> <y>86.15</y> </position> <width>324.1</width> <height>84.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>348.2</x> <y>313.90000000000003</y> </position> <width>159.10000000000002</width> <height>59.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>349</x> <y>373</y> </position> <width>86</width> <height>86</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>347</x> <y>464</y> </position> <width>10</width> <height>140</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>345</x> <y>539</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>284</x> <y>404</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>418</x> <y>342</y> </position> <width>28</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>275</x> <y>95</y> </position> <width>46</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>330</x> <y>114</y> </position> <width>36</width> <height>36</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>492</x> <y>100</y> </position> <width>14</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>342</x> <y>-55</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>341.6</x> <y>-24.85</y> </position> <width>251.1</width> <height>172.3</height> </start> <end> <position> <x>348.15000000000003</x> <y>244.55</y> </position> <width>129.9</width> <height>115.3</height> </end> </level> </retrieveLevel> </level15> <level16> <retrieveLevel> <levelId>28</levelId> <levelNumber>16</levelNumber> <name>Awash</name> <level> <levelBlocks> <StaticRectangle> <rotation>-0.34706526203385135</rotation> <position> <x>392.00000000000006</x> <y>278.80000000000007</y> </position> <width>417.7000000000001</width> <height>65</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>548.85</x> <y>124.79999999999998</y> </position> <width>19</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>494.8500000000001</x> <y>84.69999999999999</y> </position> <width>21.9</width> <height>21.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>490.5</x> <y>148.9</y> </position> <width>19</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>402.2000000000001</x> <y>67.85000000000001</y> </position> <width>19</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>548.9000000000001</x> <y>67.9</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>529.9499999999999</x> <y>170.8</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>473.00000000000006</x> <y>189.05</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>327</x> <y>219</y> </position> <width>23.4</width> <height>23.4</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>359.85</x> <y>56.249999999999986</y> </position> <width>10.2</width> <height>10.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>366.4</x> <y>105.1</y> </position> <width>24.8</width> <height>24.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>365.7</x> <y>168.60000000000002</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>375.2000000000001</x> <y>224.8</y> </position> <width>16.1</width> <height>16.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>59.849999999999994</x> <y>344.55000000000007</y> </position> <width>296.40000000000003</width> <height>54</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>713.1500000000001</x> <y>204.4</y> </position> <width>285.6</width> <height>49.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>274.6</x> <y>189.75</y> </position> <width>22</width> <height>22</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>311.15</x> <y>91.65</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>312.40000000000003</x> <y>146.7</y> </position> <width>27.8</width> <height>27.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>489.05000000000007</x> <y>24.09999999999999</y> </position> <width>24.8</width> <height>24.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>430.65</x> <y>133.5</y> </position> <width>35.1</width> <height>35.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>443.05</x> <y>66.4</y> </position> <width>14.6</width> <height>14.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>270.90000000000003</x> <y>150.65</y> </position> <width>13.2</width> <height>13.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>310.95</x> <y>34.3</y> </position> <width>29.200000000000003</width> <height>29.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>427.75</x> <y>10.949999999999998</y> </position> <width>33.6</width> <height>33.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>418.2</x> <y>194.95</y> </position> <width>24.9</width> <height>24.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0.26313751420353326</rotation> <position> <x>594.1</x> <y>241.5</y> </position> <width>121.2</width> <height>78.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>2.2640688357474295</rotation> <position> <x>194.00000000000003</x> <y>376.4500000000001</y> </position> <width>87.60000000000001</width> <height>56.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3192953406522806</rotation> <position> <x>-106.14999999999999</x> <y>353.75</y> </position> <width>72.3</width> <height>54.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4360672976842675</rotation> <position> <x>877.5000000000001</x> <y>220.75000000000003</y> </position> <width>87.60000000000001</width> <height>53.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.36918610597890567</rotation> <position> <x>-40.5</x> <y>19.69999999999999</y> </position> <width>131.3</width> <height>50.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4487233440107211</rotation> <position> <x>23.899999999999988</x> <y>7.499999999999999</y> </position> <width>59.7</width> <height>48.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>434.85</x> <y>286.15</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>380.15</x> <y>326.2</y> </position> <width>62.1</width> <height>62.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>315.35</x> <y>333.55</y> </position> <width>32.800000000000004</width> <height>32.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>582.6500000000001</x> <y>267.8500000000001</y> </position> <width>63.900000000000006</width> <height>63.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>508.75</x> <y>278.90000000000003</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>544.35</x> <y>316.25</y> </position> <width>18.2</width> <height>18.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>225</x> <y>269</y> </position> <width>32</width> <height>32</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>179</x> <y>107</y> </position> <width>46</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>201</x> <y>165</y> </position> <width>14</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>219</x> <y>207</y> </position> <width>30</width> <height>30</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>304</x> <y>255</y> </position> <width>14</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>273</x> <y>236</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>241</x> <y>137</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>250</x> <y>74</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>35</x> <y>293</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>41</x> <y>249</y> </position> <width>298</width> <height>154</height> </start> <end> <position> <x>704.75</x> <y>99.4</y> </position> <width>253</width> <height>198.9</height> </end> </level> </retrieveLevel> </level16> <level17> <retrieveLevel> <levelId>69</levelId> <levelNumber>17</levelNumber> <name>Handling</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>122</x> <y>176.99999999999997</y> </position> <width>1166.1000000000001</width> <height>46.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>265</x> <y>-187.4</y> </position> <width>96.30000000000001</width> <height>489.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.1782558204336252</rotation> <position> <x>226.89999999999998</x> <y>-439.8</y> </position> <width>954.6</width> <height>53.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.41144162737828727</rotation> <position> <x>-343.3</x> <y>-43.00000000000001</y> </position> <width>39.300000000000004</width> <height>185.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-314.75</x> <y>-112.75</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>228.7</x> <y>-400.55</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>309.1</x> <y>-382.65</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-280.70000000000005</x> <y>-531.05</y> </position> <width>21.400000000000002</width> <height>21.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-384.45</x> <y>46.349999999999994</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-307.54999999999995</x> <y>-205.7</y> </position> <width>32.2</width> <height>32.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-327.20000000000005</x> <y>-282.6</y> </position> <width>21.5</width> <height>21.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-362.95</x> <y>-329</y> </position> <width>14.3</width> <height>14.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.5364578174643075</rotation> <position> <x>-334.40000000000015</x> <y>-541.7499999999999</y> </position> <width>25.3</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>-1.578258831084456</rotation> <position> <x>1.0999999999999432</x> <y>67.50000000000001</y> </position> <width>114.4</width> <height>20</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>1.3</x> <y>-11</y> </position> <width>517</width> <height>338.3</height> </start> <end> <position> <x>400.40000000000003</x> <y>93.65</y> </position> <width>37.2</width> <height>124.4</height> </end> </level> </retrieveLevel> </level17> <level18> <retrieveLevel> <levelId>76</levelId> <levelNumber>18</levelNumber> <name>Tube</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>25.449999999999932</x> <y>156.20000000000007</y> </position> <width>50.2</width> <height>859.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>192.40000000000003</x> <y>164.95000000000005</y> </position> <width>50.3</width> <height>875.9000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>231.65000000000006</x> <y>-93.90000000000003</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-17.749999999999936</x> <y>219.45000000000005</y> </position> <width>27.200000000000003</width> <height>27.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>212.05000000000013</x> <y>584.3999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>1.0000000000000906</x> <y>586.0999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>0.29999999999999716</x> <y>-181.85000000000005</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>219.15000000000006</x> <y>-145.3</y> </position> <width>22.200000000000003</width> <height>22.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>109.80000000000003</x> <y>404.3</y> </position> <width>17</width> <height>17</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>108.85000000000001</x> <y>413.40000000000003</y> </position> <width>180.8</width> <height>306.2</height> </start> <end> <position> <x>111.95</x> <y>-192.55</y> </position> <width>167.3</width> <height>156.20000000000002</height> </end> </level> </retrieveLevel> </level18> <level19> <retrieveLevel> <levelId>60</levelId> <levelNumber>19</levelNumber> <name>Back and Forth</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>94.40000000000003</x> <y>268.75</y> </position> <width>504.1</width> <height>52.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>281.95</x> <y>317.40000000000003</y> </position> <width>105.5</width> <height>105.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.15533789293086786</rotation> <position> <x>637.4499999999999</x> <y>341.75</y> </position> <width>332.70000000000005</width> <height>95.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-157.95</x> <y>333.79999999999995</y> </position> <width>92</width> <height>92</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.09327589932936298</rotation> <position> <x>57.79999999999998</x> <y>369.8500000000001</y> </position> <width>448.3</width> <height>65.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>52.099999999999994</x> <y>316.54999999999995</y> </position> <width>454.6</width> <height>100.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>493.75</x> <y>453.3</y> </position> <width>28.700000000000003</width> <height>149.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>630.35</x> <y>494.9</y> </position> <width>31.6</width> <height>241.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>666.3500000000003</x> <y>404.3500000000001</y> </position> <width>10</width> <height>60.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>565.6500000000001</x> <y>417.25</y> </position> <width>31.700000000000003</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>738.25</x> <y>410.1</y> </position> <width>25.9</width> <height>164</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>790.05</x> <y>473.4</y> </position> <width>34.6</width> <height>241.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-330.6</x> <y>46.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-254.35</x> <y>-76.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.6264402302885688</rotation> <position> <x>-287.45000000000005</x> <y>-21.6</y> </position> <width>152.5</width> <height>28.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>886.45</x> <y>-66.15</y> </position> <width>31.700000000000003</width> <height>31.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>841.8</x> <y>5.749999999999997</y> </position> <width>31.700000000000003</width> <height>31.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.6105716305576829</rotation> <position> <x>869.1500000000001</x> <y>-34.45</y> </position> <width>87.4</width> <height>25.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-118.05</x> <y>213.2</y> </position> <width>56.900000000000006</width> <height>56.900000000000006</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>150</x> <y>155.55</y> </position> <width>309.70000000000005</width> <height>195.9</height> </start> <end> <position> <x>688.9000000000001</x> <y>241.70000000000002</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level19> <level20> <retrieveLevel> <levelId>54</levelId> <levelNumber>20</levelNumber> <name>Unpossible</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>327</x> <y>145</y> </position> <width>86</width> <height>232</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>219</x> <y>271</y> </position> <width>702</width> <height>54</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>432.9</x> <y>40</y> </position> <width>300</width> <height>42</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>547.2</x> <y>393.70000000000005</y> </position> <width>46.5</width> <height>272.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.42337293418504707</rotation> <position> <x>428.7</x> <y>327.05</y> </position> <width>263.6</width> <height>43.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>130.65</x> <y>367.29999999999995</y> </position> <width>42.2</width> <height>194.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2837730021668529</rotation> <position> <x>223.7</x> <y>395.80000000000007</y> </position> <width>209.4</width> <height>31.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>263.8</x> <y>337.70000000000005</y> </position> <width>38</width> <height>101.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.341047829634894</rotation> <position> <x>-100.74999999999999</x> <y>337.74999999999994</y> </position> <width>27.5</width> <height>114.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-78.64999999999998</x> <y>362.00000000000006</y> </position> <width>35.9</width> <height>160.70000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.6387545653136661</rotation> <position> <x>19.650000000000006</x> <y>399.04999999999995</y> </position> <width>27.5</width> <height>152.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>58.80000000000001</x> <y>304.95000000000005</y> </position> <width>29.6</width> <height>95.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-22.6</x> <y>383.15</y> </position> <width>27.5</width> <height>219.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-186.45000000000002</x> <y>25.900000000000013</y> </position> <width>139.6</width> <height>38.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4679534168639694</rotation> <position> <x>-196.99999999999997</x> <y>86.15000000000003</y> </position> <width>33.800000000000004</width> <height>158.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.4865762139617804</rotation> <position> <x>-245.60000000000002</x> <y>-14.299999999999983</y> </position> <width>23.200000000000003</width> <height>112.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-220.25000000000003</x> <y>81.95000000000002</y> </position> <width>21.1</width> <height>95.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-235.05000000000004</x> <y>-59.749999999999986</y> </position> <width>61.300000000000004</width> <height>10.600000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>100</x> <y>100</y> </position> <width>20.4</width> <height>20.4</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>75</x> <y>162</y> </position> <width>330</width> <height>176</height> </start> <end> <position> <x>450</x> <y>150</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level20> <level21> <retrieveLevel> <levelId>4575</levelId> <levelNumber>21</levelNumber> <name>U-Turn</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-60.900000000000006</x> <y>-91.30000000000001</y> </position> <width>869.2</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-61.10000000000002</x> <y>167.60000000000002</y> </position> <width>869.2</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-61.35000000000002</x> <y>424.8</y> </position> <width>869.2</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>365.90000000000003</x> <y>167.65000000000003</y> </position> <width>37.5</width> <height>37.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-498.45</x> <y>-91.25</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-498.35000000000014</x> <y>167.50000000000003</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-492.65000000000003</x> <y>424.8</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.057433946420220594</rotation> <position> <x>377.75000000000006</x> <y>413.29999999999995</y> </position> <width>50.1</width> <height>54.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2188890647345736</rotation> <position> <x>412.3</x> <y>407.6000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3727196492481757</rotation> <position> <x>443.84999999999997</x> <y>396.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.5501214374048453</rotation> <position> <x>476.85</x> <y>379.59999999999997</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.6900361164950406</rotation> <position> <x>507.0000000000001</x> <y>357.6</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8042638494191203</rotation> <position> <x>530.3499999999999</x> <y>336.8</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.9492195254248363</rotation> <position> <x>552.6999999999999</x> <y>310.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4676001575875561</rotation> <position> <x>569.9</x> <y>281.4500000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3585090955969665</rotation> <position> <x>582.0500000000001</x> <y>255.85</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.22619580274782458</rotation> <position> <x>592.5</x> <y>220.1</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.12264364424939811</rotation> <position> <x>597.1000000000001</x> <y>193.70000000000002</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>598.2</x> <y>162.3</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.05887294616330241</rotation> <position> <x>596.5000000000001</x> <y>132</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.14586641283292168</rotation> <position> <x>593.5</x> <y>119.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.27362909316359363</rotation> <position> <x>586.2500000000002</x> <y>90.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.35917800222360374</rotation> <position> <x>578.4</x> <y>68.19999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.487147555620417</rotation> <position> <x>567.1500000000001</x> <y>47.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.6550203157012948</rotation> <position> <x>546.9500000000002</x> <y>17.100000000000005</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.795643706526244</rotation> <position> <x>522.75</x> <y>-11.5</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.644438315641658</rotation> <position> <x>497.00000000000006</x> <y>-33.400000000000006</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-1.0681021101544852</rotation> <position> <x>466.70000000000005</x> <y>-51.949999999999996</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3781423153226016</rotation> <position> <x>441.9500000000001</x> <y>-65.35000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.2381962321567037</rotation> <position> <x>417.80000000000007</x> <y>-73.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.20163119104657812</rotation> <position> <x>395.95000000000005</x> <y>-77.80000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>375.70000000000005</x> <y>-80.00000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>372.2</x> <y>447.2</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>374.80000000000007</x> <y>-110.10000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>431.1000000000001</x> <y>-91.95</y> </position> <width>40.7</width> <height>40.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>423.40000000000003</x> <y>-137.65</y> </position> <width>16.900000000000002</width> <height>16.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>466.70000000000016</x> <y>-74.6</y> </position> <width>28.900000000000002</width> <height>28.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>414.4000000000001</x> <y>445.65000000000003</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>474.5000000000001</x> <y>420.1</y> </position> <width>35.6</width> <height>35.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>546.7500000000001</x> <y>354.55</y> </position> <width>15.5</width> <height>15.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>595.6499999999999</x> <y>66.60000000000001</y> </position> <width>28.900000000000002</width> <height>28.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.8079149353758508</rotation> <position> <x>575.2</x> <y>384.50000000000006</y> </position> <width>12</width> <height>80.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>604.3000000000001</x> <y>413.19999999999993</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.29077191014988335</rotation> <position> <x>385.3500000000001</x> <y>-177.10000000000002</y> </position> <width>12</width> <height>104.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>371.40000000000003</x> <y>-223.9</y> </position> <width>23.400000000000002</width> <height>23.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-753.0500000000001</x> <y>-28.400000000000002</y> </position> <width>82.9</width> <height>82.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-800.6500000000001</x> <y>-87.39999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-687.45</x> <y>7.599999999999994</y> </position> <width>23.900000000000002</width> <height>23.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-751.3500000000001</x> <y>-99.25000000000004</y> </position> <width>34</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-680.4000000000002</x> <y>-58.20000000000002</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.5874199932276543</rotation> <position> <x>-862.2</x> <y>-122.25000000000003</y> </position> <width>12</width> <height>111.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-900.15</x> <y>-179.10000000000002</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.7114652320242791</rotation> <position> <x>-832.95</x> <y>-160.65</y> </position> <width>12</width> <height>96.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-802.8500000000001</x> <y>-193.5</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-743.8000000000001</x> <y>367.15000000000003</y> </position> <width>27.6</width> <height>27.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-762.9500000000002</x> <y>355.4</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.23395050645486792</rotation> <position> <x>-736.35</x> <y>391.55</y> </position> <width>12</width> <height>42.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-728.85</x> <y>417</y> </position> <width>17</width> <height>17</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>10.850000000000044</x> <y>535.0999999999999</y> </position> <width>33.5</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-19.549999999999997</x> <y>529</y> </position> <width>16</width> <height>16</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-231.65000000000003</x> <y>-240.44999999999996</y> </position> <width>50.1</width> <height>50.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0.008042722022367443</rotation> <position> <x>-170.35000000000002</x> <y>-252.90000000000003</y> </position> <width>25</width> <height>25</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-185.95</x> <y>-265.35</y> </position> <width>18.8</width> <height>18.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.06856778645581586</rotation> <position> <x>-107.89999999999999</x> <y>-259.6</y> </position> <width>107.30000000000001</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-61.099999999999994</x> <y>-252.20000000000005</y> </position> <width>20.3</width> <height>20.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-47.55000000000002</x> <y>-245.45000000000005</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-274.5</x> <y>293.1</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-285.35</x> <y>303.05</y> </position> <width>417.70000000000005</width> <height>233.9</height> </start> <end> <position> <x>-285.85</x> <y>34.95</y> </position> <width>415.8</width> <height>211.9</height> </end> </level> </retrieveLevel> </level21> </officialLevels> ); } public static function getLeveListXML():XML{ return (<levelList> <levelCount>21</levelCount> <level> <levelName>Rolling Away</levelName> <description>level 3!</description> <levelId>91</levelId> <levelNumber>1</levelNumber> </level> <level> <levelName>Reach Up</levelName> <description></description> <levelId>55</levelId> <levelNumber>2</levelNumber> </level> <level> <levelName>Mind The Gap</levelName> <description></description> <levelId>16</levelId> <levelNumber>3</levelNumber> </level> <level> <levelName>Junkyard</levelName> <description>j2</description> <levelId>102</levelId> <levelNumber>4</levelNumber> </level> <level> <levelName>The Wall</levelName> <description></description> <levelId>31</levelId> <levelNumber>5</levelNumber> </level> <level> <levelName>On a Roll</levelName> <description>medium</description> <levelId>89</levelId> <levelNumber>6</levelNumber> </level> <level> <levelName>Full-up</levelName> <description>easyish</description> <levelId>88</levelId> <levelNumber>7</levelNumber> </level> <level> <levelName>Higher</levelName> <description>6ish</description> <levelId>86</levelId> <levelNumber>8</levelNumber> </level> <level> <levelName>Around the Bend</levelName> <description></description> <levelId>100</levelId> <levelNumber>9</levelNumber> </level> <level> <levelName>Up The Hump</levelName> <description></description> <levelId>17</levelId> <levelNumber>10</levelNumber> </level> <level> <levelName>Mission to Mars</levelName> <description></description> <levelId>62</levelId> <levelNumber>11</levelNumber> </level> <level> <levelName>Up The Stairs</levelName> <description></description> <levelId>19</levelId> <levelNumber>12</levelNumber> </level> <level> <levelName>Big Ball</levelName> <description></description> <levelId>23</levelId> <levelNumber>13</levelNumber> </level> <level> <levelName>Four Balls</levelName> <description></description> <levelId>20</levelId> <levelNumber>14</levelNumber> </level> <level> <levelName>Down Under</levelName> <description></description> <levelId>24</levelId> <levelNumber>15</levelNumber> </level> <level> <levelName>Awash</levelName> <description></description> <levelId>28</levelId> <levelNumber>16</levelNumber> </level> <level> <levelName>Handling</levelName> <description></description> <levelId>69</levelId> <levelNumber>17</levelNumber> </level> <level> <levelName>Tube</levelName> <description></description> <levelId>76</levelId> <levelNumber>18</levelNumber> </level> <level> <levelName>Back and Forth</levelName> <description></description> <levelId>60</levelId> <levelNumber>19</levelNumber> </level> <level> <levelName>Unpossible</levelName> <description></description> <levelId>54</levelId> <levelNumber>20</levelNumber> </level> <level> <levelName>U-Turn</levelName> <description></description> <levelId>4575</levelId> <levelNumber>21</levelNumber> </level> </levelList> ); } } }//package contraption.data
Section 83
//OfficialLevelsExp (contraption.data.OfficialLevelsExp) package contraption.data { public class OfficialLevelsExp { public static function getOfficialLevels():XML{ return (<officialLevelsExp> <level1> <retrieveLevel> <levelId>91</levelId> <levelNumber>1</levelNumber> <name>Rolling Away</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>-155</x> <y>190</y> </position> <width>162</width> <height>162</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>85</x> <y>135</y> </position> <width>348</width> <height>80</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>123</x> <y>296</y> </position> <width>192</width> <height>192</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-463.49999999999994</x> <y>-333.34999999999997</y> </position> <width>136</width> <height>136</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-254.64999999999998</x> <y>-432</y> </position> <width>173</width> <height>173</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-284.25</x> <y>-287.24999999999994</y> </position> <width>287.1</width> <height>94.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>402.1</x> <y>-64.99999999999999</y> </position> <width>141.6</width> <height>141.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>288.05000000000007</x> <y>-301.05</y> </position> <width>188.8</width> <height>188.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.38529804259629785</rotation> <position> <x>242.75</x> <y>-118.10000000000001</y> </position> <width>277.6</width> <height>87.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-229</x> <y>-31</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-154</x> <y>15</y> </position> <width>256</width> <height>188</height> </start> <end> <position> <x>153</x> <y>25</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level1> <level2> <retrieveLevel> <levelId>55</levelId> <levelNumber>2</levelNumber> <name>Reach Up</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>317</x> <y>277</y> </position> <width>622</width> <height>62</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>180</x> <y>-37.20000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-67.15</x> <y>27.15</y> </position> <width>122.8</width> <height>120</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>555.75</x> <y>408.6</y> </position> <width>137.20000000000002</width> <height>125.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-27.149999999999984</x> <y>350</y> </position> <width>134.3</width> <height>122.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>758.5500000000001</x> <y>-21.4</y> </position> <width>128.6</width> <height>111.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>884.3000000000001</x> <y>257.1</y> </position> <width>205.7</width> <height>168.60000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>629.45</x> <y>277.2</y> </position> <width>32</width> <height>32</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>268.25</x> <y>100.5</y> </position> <width>28</width> <height>30</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>38.900000000000006</x> <y>225.10000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="2"> <rotation>0</rotation> <position> <x>134.05</x> <y>225.10000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </NoSpinWheel> <SolidRod id="3"> <rotation>0</rotation> <position> <x>86.47500000000001</x> <y>225.10000000000002</y> </position> <width>95.15</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>1</jointedTo> <jointedTo>2</jointedTo> </joints> </SolidRod> <SolidRod id="4"> <rotation>-2.2225965468532523</rotation> <position> <x>111.025</x> <y>194.925</y> </position> <width>75.91261423505321</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>3</jointedTo> </joints> </SolidRod> <SolidRod id="5"> <rotation>2.2537675358563143</rotation> <position> <x>63.45</x> <y>194.925</y> </position> <width>77.80059447073656</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>4</jointedTo> <jointedTo>3</jointedTo> </joints> </SolidRod> </playerBlocks> <start> <position> <x>201.75</x> <y>160.9</y> </position> <width>379.5</width> <height>197.1</height> </start> <end> <position> <x>554.25</x> <y>73.5</y> </position> <width>148</width> <height>142</height> </end> </level> </retrieveLevel> </level2> <level3> <retrieveLevel> <levelId>16</levelId> <levelNumber>3</levelNumber> <name>Mind The Gap</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>94.75</x> <y>228.35</y> </position> <width>412</width> <height>92</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>528.8</x> <y>229.4</y> </position> <width>254</width> <height>90</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-101.3</x> <y>231.75</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>662.1</x> <y>279.1</y> </position> <width>93.4</width> <height>93.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>27.75</x> <y>27.749999999999996</y> </position> <width>61.3</width> <height>61.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>2.050224006112992</rotation> <position> <x>640.1500000000001</x> <y>35.8</y> </position> <width>42.3</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>444.1</x> <y>268.8</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>158.4</x> <y>316.8</y> </position> <width>96.4</width> <height>96.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>521.45</x> <y>305.5500000000001</y> </position> <width>71.5</width> <height>71.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>171</x> <y>106</y> </position> <width>26</width> <height>26</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>90</x> <y>109</y> </position> <width>404</width> <height>166</height> </start> <end> <position> <x>562.8000000000001</x> <y>123.4</y> </position> <width>159.10000000000002</width> <height>135.70000000000002</height> </end> </level> </retrieveLevel> </level3> <level4> <retrieveLevel> <levelId>102</levelId> <levelNumber>4</levelNumber> <name>Junkyard</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>243</x> <y>280</y> </position> <width>778</width> <height>68</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>254.99999999999997</x> <y>117.24999999999999</y> </position> <width>25</width> <height>58.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.032246882435253865</rotation> <position> <x>284.54999999999995</x> <y>216</y> </position> <width>39.3</width> <height>40.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>321.15</x> <y>178.65</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>364</x> <y>217</y> </position> <width>48</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>202.25</x> <y>178.45</y> </position> <width>21.700000000000003</width> <height>36.7</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>431.25</x> <y>208.75</y> </position> <width>29.700000000000003</width> <height>42</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>404</x> <y>110</y> </position> <width>23.400000000000002</width> <height>56.7</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>339.45000000000005</x> <y>110.25</y> </position> <width>20</width> <height>20.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>240.35000000000002</x> <y>168.35000000000002</y> </position> <width>39.6</width> <height>29.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>367.1</x> <y>158.70000000000002</y> </position> <width>26.700000000000003</width> <height>41.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>404.35</x> <y>164.00000000000003</y> </position> <width>17.3</width> <height>17.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>161.10000000000002</x> <y>220.45000000000002</y> </position> <width>51.800000000000004</width> <height>18.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>466.65000000000003</x> <y>162.3</y> </position> <width>52</width> <height>29.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>492.65000000000003</x> <y>213</y> </position> <width>59.300000000000004</width> <height>37.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>472.35</x> <y>102.65</y> </position> <width>58.400000000000006</width> <height>25.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>240.35</x> <y>219.45000000000002</y> </position> <width>41.7</width> <height>28.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-203.85000000000005</x> <y>280.49999999999994</y> </position> <width>240.20000000000002</width> <height>67.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-180.75000000000003</x> <y>222.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-235.35000000000002</x> <y>207.5</y> </position> <width>29.1</width> <height>78.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-190.75000000000003</x> <y>166.50000000000003</y> </position> <width>31</width> <height>31</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-289.95</x> <y>230.25000000000003</y> </position> <width>61.900000000000006</width> <height>32.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-291.8</x> <y>195.70000000000002</y> </position> <width>18.2</width> <height>18.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>-0.20477186860842284</rotation> <position> <x>-276.35</x> <y>157.45000000000005</y> </position> <width>85.5</width> <height>32.7</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.017512709110314773</rotation> <position> <x>-212.55</x> <y>109.14999999999999</y> </position> <width>69.2</width> <height>51</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-14.200000000000045</x> <y>420.4000000000001</y> </position> <width>660.7</width> <height>60</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-189.9</x> <y>365.84999999999997</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-36.99999999999999</x> <y>374.95</y> </position> <width>29.1</width> <height>30.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-37.90000000000002</x> <y>344.05</y> </position> <width>60.1</width> <height>30.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-110.70000000000005</x> <y>356.75000000000006</y> </position> <width>54.6</width> <height>67.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>32.199999999999996</x> <y>378.55</y> </position> <width>60</width> <height>23.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.39204627244228374</rotation> <position> <x>91.25000000000001</x> <y>358.6</y> </position> <width>74.7</width> <height>38.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>25.800000000000004</x> <y>353.05000000000007</y> </position> <width>25.5</width> <height>27.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>-0.5044164118269181</rotation> <position> <x>145.94999999999996</x> <y>362.20000000000005</y> </position> <width>18.2</width> <height>56.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>240.55</x> <y>356.7</y> </position> <width>76.4</width> <height>67.4</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-150.75</x> <y>378.55</y> </position> <width>18.2</width> <height>23.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>184.15</x> <y>372.1500000000001</y> </position> <width>18.2</width> <height>18.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-153.45000000000002</x> <y>356.70000000000005</y> </position> <width>10.9</width> <height>10.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>7</x> <y>173</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-4</x> <y>160</y> </position> <width>280</width> <height>190</height> </start> <end> <position> <x>572</x> <y>152</y> </position> <width>100</width> <height>208</height> </end> </level> </retrieveLevel> </level4> <level5> <retrieveLevel> <levelId>31</levelId> <levelNumber>5</levelNumber> <name>The Wall</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>110.2</x> <y>287.6</y> </position> <width>467.1</width> <height>87.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>740.8</x> <y>273.70000000000005</y> </position> <width>480.3</width> <height>61.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>490.25</x> <y>337.9000000000001</y> </position> <width>1129.9</width> <height>90.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>291.25</x> <y>159.1</y> </position> <width>29.200000000000003</width> <height>32.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>252.54999999999995</x> <y>162.8</y> </position> <width>35.1</width> <height>40.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>289.05</x> <y>193.4</y> </position> <width>27.8</width> <height>35</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>251.75</x> <y>202.2</y> </position> <width>24.8</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>290.55</x> <y>227</y> </position> <width>30.6</width> <height>32.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>253.30000000000004</x> <y>232.9</y> </position> <width>32.1</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>294.20000000000005</x> <y>100</y> </position> <width>33.6</width> <height>30.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>255.44999999999993</x> <y>101.45</y> </position> <width>26.200000000000003</width> <height>27.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>273.74999999999994</x> <y>129.95</y> </position> <width>71.5</width> <height>23.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>328.50000000000006</x> <y>111.7</y> </position> <width>32.1</width> <height>30.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>325.55</x> <y>148.15</y> </position> <width>30.700000000000003</width> <height>36.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>325.55000000000007</x> <y>183.95</y> </position> <width>30.6</width> <height>33.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>324.75000000000006</x> <y>223.35</y> </position> <width>23.3</width> <height>40.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-72.25000000000001</x> <y>330.65</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>989.05</x> <y>310.2</y> </position> <width>67.10000000000001</width> <height>67.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-111.70000000000002</x> <y>12.399999999999991</y> </position> <width>77.9</width> <height>77.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>135.25</x> <y>-28.95000000000001</y> </position> <width>31.6</width> <height>31.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>93.9</x> <y>-49.650000000000006</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-13.149999999999997</x> <y>-71.55</y> </position> <width>70.60000000000001</width> <height>70.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-101.95000000000002</x> <y>-97.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>61.09999999999998</x> <y>-110.45000000000002</y> </position> <width>36.5</width> <height>36.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.5742878193317579</rotation> <position> <x>795.9000000000002</x> <y>-7.100000000000001</y> </position> <width>80.30000000000001</width> <height>82.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.4531278240870904</rotation> <position> <x>548.9</x> <y>-20.450000000000006</y> </position> <width>70.4</width> <height>55.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.005127687802247816</rotation> <position> <x>603.65</x> <y>-42.349999999999994</y> </position> <width>77.80000000000001</width> <height>70.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.38987614128793013</rotation> <position> <x>663.25</x> <y>-35.099999999999994</y> </position> <width>82.80000000000001</width> <height>75.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.42419355299901373</rotation> <position> <x>726.5</x> <y>-38.7</y> </position> <width>92.5</width> <height>75.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>29</x> <y>158</y> </position> <width>28</width> <height>30</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>14</x> <y>153</y> </position> <width>274</width> <height>194</height> </start> <end> <position> <x>611.7</x> <y>151.85</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level5> <level6> <retrieveLevel> <levelId>89</levelId> <levelNumber>6</levelNumber> <name>On a Roll</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-290</x> <y>230</y> </position> <width>816</width> <height>58</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-338</x> <y>119</y> </position> <width>82</width> <height>82</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>-0.4911863378316689</rotation> <position> <x>-586.1499999999997</x> <y>68.69999999999997</y> </position> <width>64.9</width> <height>31</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.790117623877445</rotation> <position> <x>-618.65</x> <y>40.45</y> </position> <width>87.5</width> <height>33.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-661.0500000000002</x> <y>37.650000000000006</y> </position> <width>84.7</width> <height>25.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8298537316689694</rotation> <position> <x>-685.0500000000001</x> <y>60.300000000000004</y> </position> <width>60.800000000000004</width> <height>27.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-394.2</x> <y>-137.45000000000005</y> </position> <width>22.6</width> <height>56.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.40323852203169236</rotation> <position> <x>-418.2</x> <y>-151.60000000000002</y> </position> <width>59.300000000000004</width> <height>28.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.31018911492659573</rotation> <position> <x>-416.75000000000006</x> <y>-172.70000000000002</y> </position> <width>22.6</width> <height>56.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.16229887623745093</rotation> <position> <x>-439.29999999999995</x> <y>-184.04999999999998</y> </position> <width>62.2</width> <height>19.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.45018601367763234</rotation> <position> <x>-18.550000000000015</x> <y>-110.64999999999999</y> </position> <width>84.80000000000001</width> <height>28.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5698629937964668</rotation> <position> <x>-62.35</x> <y>-121.94999999999999</y> </position> <width>84.7</width> <height>22.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.1560780599440067</rotation> <position> <x>-107.60000000000002</x> <y>-117.75000000000004</y> </position> <width>87.5</width> <height>22.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.45234394718667875</rotation> <position> <x>22.349999999999966</x> <y>-100.75</y> </position> <width>70.60000000000001</width> <height>22.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.41422262451345127</rotation> <position> <x>118.40000000000002</x> <y>248.00000000000003</y> </position> <width>25.400000000000002</width> <height>73.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8628470922264423</rotation> <position> <x>149.45</x> <y>232.50000000000003</y> </position> <width>74.5</width> <height>25.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.10371808350983186</rotation> <position> <x>180.25000000000003</x> <y>237.90000000000006</y> </position> <width>69.9</width> <height>16.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5447021293342041</rotation> <position> <x>-260</x> <y>262.15000000000003</y> </position> <width>84.5</width> <height>25</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.7553069146140182</rotation> <position> <x>-276.95000000000005</x> <y>280.49999999999994</y> </position> <width>24.1</width> <height>66.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.7440872017124346</rotation> <position> <x>-268.45</x> <y>311</y> </position> <width>58.6</width> <height>18.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-271.2</x> <y>333.95000000000005</y> </position> <width>12.9</width> <height>56.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.8495910970201173</rotation> <position> <x>-701</x> <y>231.3</y> </position> <width>93.5</width> <height>42.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5620757484096769</rotation> <position> <x>-703.75</x> <y>284.5</y> </position> <width>94.30000000000001</width> <height>36.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.6863295277912818</rotation> <position> <x>-701.0500000000001</x> <y>319.35</y> </position> <width>23.8</width> <height>55</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.8317160080084676</rotation> <position> <x>-685.5000000000001</x> <y>331.30000000000007</y> </position> <width>16</width> <height>59</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-248.70000000000002</x> <y>-20.25</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-385.5</x> <y>19.75</y> </position> <width>386.90000000000003</width> <height>189.3</height> </start> <end> <position> <x>10.100000000000001</x> <y>22.900000000000002</y> </position> <width>155.8</width> <height>194.3</height> </end> </level> </retrieveLevel> </level6> <level7> <retrieveLevel> <levelId>88</levelId> <levelNumber>7</levelNumber> <name>Full-up</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-268</x> <y>202</y> </position> <width>636</width> <height>116</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>380</x> <y>195</y> </position> <width>310</width> <height>94</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-116</x> <y>-110</y> </position> <width>86</width> <height>86</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-118</x> <y>-4</y> </position> <width>28</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>245.29999999999998</x> <y>306.6</y> </position> <width>56</width> <height>56</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>140</x> <y>626</y> </position> <width>520</width> <height>134</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-335.65</x> <y>435.05000000000007</y> </position> <width>500</width> <height>515.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>416.6500000000001</x> <y>438.75</y> </position> <width>236.20000000000002</width> <height>507.90000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>125.20000000000003</x> <y>394.05000000000007</y> </position> <width>94.9</width> <height>94.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>153.3</x> <y>540.3500000000001</y> </position> <width>18.1</width> <height>18.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>239.15</x> <y>499.9</y> </position> <width>64.60000000000001</width> <height>64.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-14.200000000000001</x> <y>485.8000000000001</y> </position> <width>72.7</width> <height>72.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>89.75</x> <y>521.1500000000001</y> </position> <width>38.400000000000006</width> <height>38.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>3.9499999999999957</x> <y>387.90000000000003</y> </position> <width>26.200000000000003</width> <height>26.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>259.34999999999997</x> <y>399.00000000000006</y> </position> <width>40.400000000000006</width> <height>40.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-469</x> <y>98</y> </position> <width>82</width> <height>20</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-319</x> <y>53</y> </position> <width>490</width> <height>216</height> </start> <end> <position> <x>375</x> <y>70</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level7> <level8> <retrieveLevel> <levelId>86</levelId> <levelNumber>8</levelNumber> <name>Higher</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>-266</x> <y>316</y> </position> <width>102</width> <height>102</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-126</x> <y>353</y> </position> <width>120</width> <height>120</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-35</x> <y>293</y> </position> <width>64</width> <height>64</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>136</x> <y>305</y> </position> <width>140</width> <height>140</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>348</x> <y>218</y> </position> <width>164</width> <height>164</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>547</x> <y>194</y> </position> <width>96</width> <height>96</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>633</x> <y>248</y> </position> <width>46</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-358</x> <y>384</y> </position> <width>66</width> <height>66</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-435</x> <y>388</y> </position> <width>36</width> <height>36</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-290</x> <y>-181</y> </position> <width>62</width> <height>62</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>215</x> <y>-170</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-401</x> <y>-163</y> </position> <width>16</width> <height>16</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-358</x> <y>-190</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>174</x> <y>-194</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-81</x> <y>-238</y> </position> <width>114</width> <height>114</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-199</x> <y>-225</y> </position> <width>74</width> <height>74</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>84</x> <y>-263</y> </position> <width>104</width> <height>104</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>17</x> <y>-180</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-217</x> <y>68</y> </position> <width>34</width> <height>36</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-39</x> <y>141</y> </position> <width>454</width> <height>222</height> </start> <end> <position> <x>-39</x> <y>-23</y> </position> <width>454</width> <height>100</height> </end> </level> </retrieveLevel> </level8> <level9> <retrieveLevel> <levelId>100</levelId> <levelNumber>9</levelNumber> <name>Around the Bend</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-191.90000000000003</x> <y>33.85</y> </position> <width>482.5</width> <height>101.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-184.85000000000002</x> <y>299.1500000000001</y> </position> <width>869.1</width> <height>84.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>290.6</x> <y>176.35000000000002</y> </position> <width>101.5</width> <height>330.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-647.6000000000001</x> <y>413.3499999999999</y> </position> <width>110</width> <height>313.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-384.05000000000007</x> <y>74.65</y> </position> <width>98.2</width> <height>141.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>328.3999999999999</x> <y>60.84999999999999</y> </position> <width>160.9</width> <height>98.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-696.15</x> <y>518.25</y> </position> <width>164.9</width> <height>102.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-344.45000000000005</x> <y>-279.90000000000003</y> </position> <width>969.6</width> <height>137.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>59.94999999999996</x> <y>-442.35</y> </position> <width>161</width> <height>255.10000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-746.8</x> <y>-93.00000000000003</y> </position> <width>164.8</width> <height>365.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>307.3</x> <y>-16.85</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-744.7500000000001</x> <y>436.5</y> </position> <width>31.400000000000002</width> <height>31.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-365.95</x> <y>-44.4</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-65.6000000000001</x> <y>-376.15000000000003</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>99.30000000000008</x> <y>-601.3000000000001</y> </position> <width>31.400000000000002</width> <height>31.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-638.8000000000001</x> <y>-379.55</y> </position> <width>31.400000000000002</width> <height>31.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-436.7</x> <y>228.95000000000002</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-174.65000000000003</x> <y>-64.10000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-191.9</x> <y>-126.95</y> </position> <width>434.6</width> <height>279.40000000000003</height> </start> <end> <position> <x>-187.65</x> <y>180.60000000000002</y> </position> <width>460</width> <height>220.10000000000002</height> </end> </level> </retrieveLevel> </level9> <level10> <retrieveLevel> <levelId>17</levelId> <levelNumber>10</levelNumber> <name>Up The Hump</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>318.45</x> <y>278.6</y> </position> <width>873.8000000000001</width> <height>133.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>351.55000000000007</x> <y>213.95</y> </position> <width>102.2</width> <height>102.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.364926276337564</rotation> <position> <x>-11.900000000000007</x> <y>347.40000000000003</y> </position> <width>139.5</width> <height>61.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.16829401120136167</rotation> <position> <x>185.15</x> <y>353.90000000000003</y> </position> <width>113.6</width> <height>73</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4720399232666762</rotation> <position> <x>718.0500000000001</x> <y>349</y> </position> <width>112.4</width> <height>63</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.056705940703367985</rotation> <position> <x>546</x> <y>359.50000000000006</y> </position> <width>123.3</width> <height>56.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.4676269911188695</rotation> <position> <x>362.75</x> <y>362</y> </position> <width>66.5</width> <height>95.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.24992450923689735</rotation> <position> <x>-126.95000000000002</x> <y>270.65</y> </position> <width>45</width> <height>60.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>664.45</x> <y>22.94999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>81.2</x> <y>14.300000000000011</y> </position> <width>37.4</width> <height>37.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-7</x> <y>92</y> </position> <width>84</width> <height>70</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>11</x> <y>129</y> </position> <width>258</width> <height>176</height> </start> <end> <position> <x>619</x> <y>132</y> </position> <width>244</width> <height>184</height> </end> </level> </retrieveLevel> </level10> <level11> <retrieveLevel> <levelId>62</levelId> <levelNumber>11</levelNumber> <name>Mission to Mars</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>152.15</x> <y>155.5</y> </position> <width>33.5</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>454.55000000000007</x> <y>152.15</y> </position> <width>34.800000000000004</width> <height>34.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>152.85</x> <y>97.3</y> </position> <width>17.400000000000002</width> <height>17.400000000000002</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>150</x> <y>150</y> </position> <width>200</width> <height>200</height> </start> <end> <position> <x>450</x> <y>150</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level11> <level12> <retrieveLevel> <levelId>19</levelId> <levelNumber>12</levelNumber> <name>Up The Stairs</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>80.35</x> <y>320.4</y> </position> <width>322.6</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>281</x> <y>302.25000000000006</y> </position> <width>113.9</width> <height>80.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>351.75</x> <y>281.80000000000007</y> </position> <width>131.4</width> <height>87.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>403.65</x> <y>248.2</y> </position> <width>111</width> <height>70.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>462.1</x> <y>217.50000000000003</y> </position> <width>106.6</width> <height>65.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>543.1000000000001</x> <y>189.1</y> </position> <width>140.20000000000002</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>593.35</x> <y>156.2</y> </position> <width>112.4</width> <height>61.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>647.1999999999999</x> <y>180.85</y> </position> <width>56.400000000000006</width> <height>56.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>525</x> <y>312.65000000000003</y> </position> <width>134.3</width> <height>134.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>270.8</x> <y>377.35</y> </position> <width>67.2</width> <height>67.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>364.50000000000006</x> <y>352.00000000000006</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-84.55000000000001</x> <y>387.85</y> </position> <width>102.2</width> <height>102.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>98.95</x> <y>382.55</y> </position> <width>62.6</width> <height>62.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>184.50000000000003</x> <y>359.35</y> </position> <width>41.400000000000006</width> <height>41.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>36.4</x> <y>351.3</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.13210546652388205</rotation> <position> <x>85.79999999999997</x> <y>62.25</y> </position> <width>96.3</width> <height>56.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>89.35</x> <y>38.64999999999999</y> </position> <width>48.400000000000006</width> <height>48.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.4308491039314226</rotation> <position> <x>266.90000000000003</x> <y>24.9</y> </position> <width>44.8</width> <height>22.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>261.6</x> <y>14.500000000000004</y> </position> <width>22.9</width> <height>22.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>546</x> <y>100</y> </position> <width>20</width> <height>20</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>480</x> <y>-117</y> </position> <width>8</width> <height>8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>241</x> <y>-29</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticCircle> <rotation>0</rotation> <position> <x>513</x> <y>-48</y> </position> <width>30</width> <height>30</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>533</x> <y>-8</y> </position> <width>10</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>451</x> <y>-179</y> </position> <width>10</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>306</x> <y>-8</y> </position> <width>8</width> <height>8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>-0.714090698612158</rotation> <position> <x>295</x> <y>-43</y> </position> <width>10</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>-2.066529346548105</rotation> <position> <x>527.3000000000001</x> <y>-56.15</y> </position> <width>58.900000000000006</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>63</x> <y>221</y> </position> <width>24</width> <height>24</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>56.95</x> <y>192.75</y> </position> <width>275.90000000000003</width> <height>191.2</height> </start> <end> <position> <x>605.1</x> <y>62.800000000000004</y> </position> <width>131.4</width> <height>146</height> </end> </level> </retrieveLevel> </level12> <level13> <retrieveLevel> <levelId>23</levelId> <levelNumber>13</levelNumber> <name>Big Ball</name> <level> <levelBlocks> <StaticRectangle> <rotation>0.08609323420781712</rotation> <position> <x>636.2999999999998</x> <y>281.25000000000006</y> </position> <width>194.5</width> <height>45.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>744.5500000000001</x> <y>192.54999999999998</y> </position> <width>48</width> <height>240</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>412.3000000000002</x> <y>-43.09999999999998</y> </position> <width>70.10000000000001</width> <height>70.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0.39331112360490583</rotation> <position> <x>413.8500000000001</x> <y>52.44999999999999</y> </position> <width>159.5</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.00000806919550522256</rotation> <position> <x>224.0999999999999</x> <y>273.75000000000006</y> </position> <width>658.4000000000001</width> <height>45.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-25</x> <y>19</y> </position> <width>232</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-88</x> <y>-61</y> </position> <width>66</width> <height>66</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>745</x> <y>0</y> </position> <width>70</width> <height>70</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>393</x> <y>379</y> </position> <width>70</width> <height>70</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>316</x> <y>468</y> </position> <width>236</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>207</x> <y>170</y> </position> <width>58</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>86.2</x> <y>157.65</y> </position> <width>346</width> <height>204.4</height> </start> <end> <position> <x>682.5</x> <y>229.9</y> </position> <width>100.7</width> <height>115.3</height> </end> </level> </retrieveLevel> </level13> <level14> <retrieveLevel> <levelId>20</levelId> <levelNumber>14</levelNumber> <name>Four Balls</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>212.45</x> <y>266.40000000000003</y> </position> <width>401.4</width> <height>62.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.2374387084494178</rotation> <position> <x>-21.85</x> <y>154.00000000000003</y> </position> <width>184.5</width> <height>17.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>389.05</x> <y>234.3</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>405.85</x> <y>175.15</y> </position> <width>54</width> <height>54</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>602.2</x> <y>188.75000000000003</y> </position> <width>68.4</width> <height>68.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>492.3</x> <y>243.05</y> </position> <width>68.60000000000001</width> <height>68.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-117</x> <y>174</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-274</x> <y>45</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-196</x> <y>76</y> </position> <width>30</width> <height>30</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-137</x> <y>97</y> </position> <width>20</width> <height>20</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-53</x> <y>215</y> </position> <width>72</width> <height>72</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-4</x> <y>189</y> </position> <width>34</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.507098504392337</rotation> <position> <x>2.0999999999999996</x> <y>255.19999999999993</y> </position> <width>70</width> <height>62.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.36397895650964407</rotation> <position> <x>423</x> <y>266</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>565.95</x> <y>249.5</y> </position> <width>35.300000000000004</width> <height>35.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.3085500010704924</rotation> <position> <x>-80.85000000000001</x> <y>163.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>45</x> <y>144</y> </position> <width>26</width> <height>26</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>1</x> <y>132</y> </position> <width>26</width> <height>26</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="2"> <rotation>0</rotation> <position> <x>-39</x> <y>121</y> </position> <width>24</width> <height>24</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="3"> <rotation>0</rotation> <position> <x>-85</x> <y>110</y> </position> <width>24</width> <height>24</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>196.10000000000002</x> <y>144.55</y> </position> <width>358.70000000000005</width> <height>183.3</height> </start> <end> <position> <x>508</x> <y>167.85000000000002</y> </position> <width>159.20000000000002</width> <height>83.30000000000001</height> </end> </level> </retrieveLevel> </level14> <level15> <retrieveLevel> <levelId>24</levelId> <levelNumber>15</levelNumber> <name>Down Under</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>339.45000000000005</x> <y>86.15</y> </position> <width>324.1</width> <height>84.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>348.2</x> <y>313.90000000000003</y> </position> <width>159.10000000000002</width> <height>59.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>349</x> <y>373</y> </position> <width>86</width> <height>86</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>347</x> <y>464</y> </position> <width>10</width> <height>140</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>345</x> <y>539</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>284</x> <y>404</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>418</x> <y>342</y> </position> <width>28</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>275</x> <y>95</y> </position> <width>46</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>330</x> <y>114</y> </position> <width>36</width> <height>36</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>492</x> <y>100</y> </position> <width>14</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>342</x> <y>-55</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>341.6</x> <y>-24.85</y> </position> <width>251.1</width> <height>172.3</height> </start> <end> <position> <x>348.15000000000003</x> <y>244.55</y> </position> <width>129.9</width> <height>115.3</height> </end> </level> </retrieveLevel> </level15> <level16> <retrieveLevel> <levelId>28</levelId> <levelNumber>16</levelNumber> <name>Awash</name> <level> <levelBlocks> <StaticRectangle> <rotation>-0.34706526203385135</rotation> <position> <x>392.00000000000006</x> <y>278.80000000000007</y> </position> <width>417.7000000000001</width> <height>65</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>548.85</x> <y>124.79999999999998</y> </position> <width>19</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>494.8500000000001</x> <y>84.69999999999999</y> </position> <width>21.9</width> <height>21.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>490.5</x> <y>148.9</y> </position> <width>19</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>402.2000000000001</x> <y>67.85000000000001</y> </position> <width>19</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>548.9000000000001</x> <y>67.9</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>529.9499999999999</x> <y>170.8</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>473.00000000000006</x> <y>189.05</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>327</x> <y>219</y> </position> <width>23.4</width> <height>23.4</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>359.85</x> <y>56.249999999999986</y> </position> <width>10.2</width> <height>10.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>366.4</x> <y>105.1</y> </position> <width>24.8</width> <height>24.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>365.7</x> <y>168.60000000000002</y> </position> <width>17.5</width> <height>17.5</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>375.2000000000001</x> <y>224.8</y> </position> <width>16.1</width> <height>16.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>59.849999999999994</x> <y>344.55000000000007</y> </position> <width>296.40000000000003</width> <height>54</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>713.1500000000001</x> <y>204.4</y> </position> <width>285.6</width> <height>49.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>274.6</x> <y>189.75</y> </position> <width>22</width> <height>22</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>311.15</x> <y>91.65</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>312.40000000000003</x> <y>146.7</y> </position> <width>27.8</width> <height>27.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>489.05000000000007</x> <y>24.09999999999999</y> </position> <width>24.8</width> <height>24.8</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>430.65</x> <y>133.5</y> </position> <width>35.1</width> <height>35.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>443.05</x> <y>66.4</y> </position> <width>14.6</width> <height>14.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>270.90000000000003</x> <y>150.65</y> </position> <width>13.2</width> <height>13.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>310.95</x> <y>34.3</y> </position> <width>29.200000000000003</width> <height>29.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>427.75</x> <y>10.949999999999998</y> </position> <width>33.6</width> <height>33.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>418.2</x> <y>194.95</y> </position> <width>24.9</width> <height>24.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0.26313751420353326</rotation> <position> <x>594.1</x> <y>241.5</y> </position> <width>121.2</width> <height>78.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>2.2640688357474295</rotation> <position> <x>194.00000000000003</x> <y>376.4500000000001</y> </position> <width>87.60000000000001</width> <height>56.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3192953406522806</rotation> <position> <x>-106.14999999999999</x> <y>353.75</y> </position> <width>72.3</width> <height>54.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4360672976842675</rotation> <position> <x>877.5000000000001</x> <y>220.75000000000003</y> </position> <width>87.60000000000001</width> <height>53.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.36918610597890567</rotation> <position> <x>-40.5</x> <y>19.69999999999999</y> </position> <width>131.3</width> <height>50.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4487233440107211</rotation> <position> <x>23.899999999999988</x> <y>7.499999999999999</y> </position> <width>59.7</width> <height>48.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>434.85</x> <y>286.15</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>380.15</x> <y>326.2</y> </position> <width>62.1</width> <height>62.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>315.35</x> <y>333.55</y> </position> <width>32.800000000000004</width> <height>32.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>582.6500000000001</x> <y>267.8500000000001</y> </position> <width>63.900000000000006</width> <height>63.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>508.75</x> <y>278.90000000000003</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>544.35</x> <y>316.25</y> </position> <width>18.2</width> <height>18.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>225</x> <y>269</y> </position> <width>32</width> <height>32</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>179</x> <y>107</y> </position> <width>46</width> <height>46</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>201</x> <y>165</y> </position> <width>14</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>219</x> <y>207</y> </position> <width>30</width> <height>30</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>304</x> <y>255</y> </position> <width>14</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>273</x> <y>236</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>241</x> <y>137</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>250</x> <y>74</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>35</x> <y>293</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>41</x> <y>249</y> </position> <width>298</width> <height>154</height> </start> <end> <position> <x>704.75</x> <y>99.4</y> </position> <width>253</width> <height>198.9</height> </end> </level> </retrieveLevel> </level16> <level17> <retrieveLevel> <levelId>69</levelId> <levelNumber>17</levelNumber> <name>Handling</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>122</x> <y>176.99999999999997</y> </position> <width>1166.1000000000001</width> <height>46.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>265</x> <y>-187.4</y> </position> <width>96.30000000000001</width> <height>489.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.1782558204336252</rotation> <position> <x>226.89999999999998</x> <y>-439.8</y> </position> <width>954.6</width> <height>53.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.41144162737828727</rotation> <position> <x>-343.3</x> <y>-43.00000000000001</y> </position> <width>39.300000000000004</width> <height>185.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-314.75</x> <y>-112.75</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>228.7</x> <y>-400.55</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>309.1</x> <y>-382.65</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-280.70000000000005</x> <y>-531.05</y> </position> <width>21.400000000000002</width> <height>21.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-384.45</x> <y>46.349999999999994</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-307.54999999999995</x> <y>-205.7</y> </position> <width>32.2</width> <height>32.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-327.20000000000005</x> <y>-282.6</y> </position> <width>21.5</width> <height>21.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-362.95</x> <y>-329</y> </position> <width>14.3</width> <height>14.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.5364578174643075</rotation> <position> <x>-334.40000000000015</x> <y>-541.7499999999999</y> </position> <width>25.3</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>-1.578258831084456</rotation> <position> <x>1.0999999999999432</x> <y>67.50000000000001</y> </position> <width>114.4</width> <height>20</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>1.3</x> <y>-11</y> </position> <width>517</width> <height>338.3</height> </start> <end> <position> <x>400.40000000000003</x> <y>93.65</y> </position> <width>37.2</width> <height>124.4</height> </end> </level> </retrieveLevel> </level17> <level18> <retrieveLevel> <levelId>76</levelId> <levelNumber>18</levelNumber> <name>Tube</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>25.449999999999932</x> <y>156.20000000000007</y> </position> <width>50.2</width> <height>859.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>192.40000000000003</x> <y>164.95000000000005</y> </position> <width>50.3</width> <height>875.9000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>231.65000000000006</x> <y>-93.90000000000003</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-17.749999999999936</x> <y>219.45000000000005</y> </position> <width>27.200000000000003</width> <height>27.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>212.05000000000013</x> <y>584.3999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>1.0000000000000906</x> <y>586.0999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>0.29999999999999716</x> <y>-181.85000000000005</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>219.15000000000006</x> <y>-145.3</y> </position> <width>22.200000000000003</width> <height>22.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>109.80000000000003</x> <y>404.3</y> </position> <width>17</width> <height>17</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>108.85000000000001</x> <y>413.40000000000003</y> </position> <width>180.8</width> <height>306.2</height> </start> <end> <position> <x>111.95</x> <y>-192.55</y> </position> <width>167.3</width> <height>156.20000000000002</height> </end> </level> </retrieveLevel> </level18> <level19> <retrieveLevel> <levelId>60</levelId> <levelNumber>19</levelNumber> <name>Back and Forth</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>94.40000000000003</x> <y>268.75</y> </position> <width>504.1</width> <height>52.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>281.95</x> <y>317.40000000000003</y> </position> <width>105.5</width> <height>105.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.15533789293086786</rotation> <position> <x>637.4499999999999</x> <y>341.75</y> </position> <width>332.70000000000005</width> <height>95.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-157.95</x> <y>333.79999999999995</y> </position> <width>92</width> <height>92</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.09327589932936298</rotation> <position> <x>57.79999999999998</x> <y>369.8500000000001</y> </position> <width>448.3</width> <height>65.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>52.099999999999994</x> <y>316.54999999999995</y> </position> <width>454.6</width> <height>100.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>493.75</x> <y>453.3</y> </position> <width>28.700000000000003</width> <height>149.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>630.35</x> <y>494.9</y> </position> <width>31.6</width> <height>241.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>666.3500000000003</x> <y>404.3500000000001</y> </position> <width>10</width> <height>60.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>565.6500000000001</x> <y>417.25</y> </position> <width>31.700000000000003</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>738.25</x> <y>410.1</y> </position> <width>25.9</width> <height>164</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>790.05</x> <y>473.4</y> </position> <width>34.6</width> <height>241.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-330.6</x> <y>46.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-254.35</x> <y>-76.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.6264402302885688</rotation> <position> <x>-287.45000000000005</x> <y>-21.6</y> </position> <width>152.5</width> <height>28.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>886.45</x> <y>-66.15</y> </position> <width>31.700000000000003</width> <height>31.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>841.8</x> <y>5.749999999999997</y> </position> <width>31.700000000000003</width> <height>31.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.6105716305576829</rotation> <position> <x>869.1500000000001</x> <y>-34.45</y> </position> <width>87.4</width> <height>25.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-118.05</x> <y>213.2</y> </position> <width>56.900000000000006</width> <height>56.900000000000006</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>150</x> <y>155.55</y> </position> <width>309.70000000000005</width> <height>195.9</height> </start> <end> <position> <x>688.9000000000001</x> <y>241.70000000000002</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level19> <level20> <retrieveLevel> <levelId>54</levelId> <levelNumber>20</levelNumber> <name>Unpossible</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>327</x> <y>145</y> </position> <width>86</width> <height>232</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>219</x> <y>271</y> </position> <width>702</width> <height>54</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>432.9</x> <y>40</y> </position> <width>300</width> <height>42</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>547.2</x> <y>393.70000000000005</y> </position> <width>46.5</width> <height>272.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.42337293418504707</rotation> <position> <x>428.7</x> <y>327.05</y> </position> <width>263.6</width> <height>43.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>130.65</x> <y>367.29999999999995</y> </position> <width>42.2</width> <height>194.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2837730021668529</rotation> <position> <x>223.7</x> <y>395.80000000000007</y> </position> <width>209.4</width> <height>31.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>263.8</x> <y>337.70000000000005</y> </position> <width>38</width> <height>101.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.341047829634894</rotation> <position> <x>-100.74999999999999</x> <y>337.74999999999994</y> </position> <width>27.5</width> <height>114.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-78.64999999999998</x> <y>362.00000000000006</y> </position> <width>35.9</width> <height>160.70000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.6387545653136661</rotation> <position> <x>19.650000000000006</x> <y>399.04999999999995</y> </position> <width>27.5</width> <height>152.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>58.80000000000001</x> <y>304.95000000000005</y> </position> <width>29.6</width> <height>95.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-22.6</x> <y>383.15</y> </position> <width>27.5</width> <height>219.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-186.45000000000002</x> <y>25.900000000000013</y> </position> <width>139.6</width> <height>38.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4679534168639694</rotation> <position> <x>-196.99999999999997</x> <y>86.15000000000003</y> </position> <width>33.800000000000004</width> <height>158.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.4865762139617804</rotation> <position> <x>-245.60000000000002</x> <y>-14.299999999999983</y> </position> <width>23.200000000000003</width> <height>112.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-220.25000000000003</x> <y>81.95000000000002</y> </position> <width>21.1</width> <height>95.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-235.05000000000004</x> <y>-59.749999999999986</y> </position> <width>61.300000000000004</width> <height>10.600000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>100</x> <y>100</y> </position> <width>20.4</width> <height>20.4</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>75</x> <y>162</y> </position> <width>330</width> <height>176</height> </start> <end> <position> <x>450</x> <y>150</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level20> <level21> <retrieveLevel> <levelId>4575</levelId> <levelNumber>21</levelNumber> <name>U-Turn</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-60.900000000000006</x> <y>-91.30000000000001</y> </position> <width>869.2</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-61.10000000000002</x> <y>167.60000000000002</y> </position> <width>869.2</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-61.35000000000002</x> <y>424.8</y> </position> <width>869.2</width> <height>74.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>365.90000000000003</x> <y>167.65000000000003</y> </position> <width>37.5</width> <height>37.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-498.45</x> <y>-91.25</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-498.35000000000014</x> <y>167.50000000000003</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-492.65000000000003</x> <y>424.8</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.057433946420220594</rotation> <position> <x>377.75000000000006</x> <y>413.29999999999995</y> </position> <width>50.1</width> <height>54.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2188890647345736</rotation> <position> <x>412.3</x> <y>407.6000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3727196492481757</rotation> <position> <x>443.84999999999997</x> <y>396.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.5501214374048453</rotation> <position> <x>476.85</x> <y>379.59999999999997</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.6900361164950406</rotation> <position> <x>507.0000000000001</x> <y>357.6</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8042638494191203</rotation> <position> <x>530.3499999999999</x> <y>336.8</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.9492195254248363</rotation> <position> <x>552.6999999999999</x> <y>310.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4676001575875561</rotation> <position> <x>569.9</x> <y>281.4500000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3585090955969665</rotation> <position> <x>582.0500000000001</x> <y>255.85</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.22619580274782458</rotation> <position> <x>592.5</x> <y>220.1</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.12264364424939811</rotation> <position> <x>597.1000000000001</x> <y>193.70000000000002</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>598.2</x> <y>162.3</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.05887294616330241</rotation> <position> <x>596.5000000000001</x> <y>132</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.14586641283292168</rotation> <position> <x>593.5</x> <y>119.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.27362909316359363</rotation> <position> <x>586.2500000000002</x> <y>90.05</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.35917800222360374</rotation> <position> <x>578.4</x> <y>68.19999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.487147555620417</rotation> <position> <x>567.1500000000001</x> <y>47.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.6550203157012948</rotation> <position> <x>546.9500000000002</x> <y>17.100000000000005</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.795643706526244</rotation> <position> <x>522.75</x> <y>-11.5</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.644438315641658</rotation> <position> <x>497.00000000000006</x> <y>-33.400000000000006</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-1.0681021101544852</rotation> <position> <x>466.70000000000005</x> <y>-51.949999999999996</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3781423153226016</rotation> <position> <x>441.9500000000001</x> <y>-65.35000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.2381962321567037</rotation> <position> <x>417.80000000000007</x> <y>-73.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.20163119104657812</rotation> <position> <x>395.95000000000005</x> <y>-77.80000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>375.70000000000005</x> <y>-80.00000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>372.2</x> <y>447.2</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>374.80000000000007</x> <y>-110.10000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>431.1000000000001</x> <y>-91.95</y> </position> <width>40.7</width> <height>40.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>423.40000000000003</x> <y>-137.65</y> </position> <width>16.900000000000002</width> <height>16.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>466.70000000000016</x> <y>-74.6</y> </position> <width>28.900000000000002</width> <height>28.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>414.4000000000001</x> <y>445.65000000000003</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>474.5000000000001</x> <y>420.1</y> </position> <width>35.6</width> <height>35.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>546.7500000000001</x> <y>354.55</y> </position> <width>15.5</width> <height>15.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>595.6499999999999</x> <y>66.60000000000001</y> </position> <width>28.900000000000002</width> <height>28.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.8079149353758508</rotation> <position> <x>575.2</x> <y>384.50000000000006</y> </position> <width>12</width> <height>80.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>604.3000000000001</x> <y>413.19999999999993</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.29077191014988335</rotation> <position> <x>385.3500000000001</x> <y>-177.10000000000002</y> </position> <width>12</width> <height>104.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>371.40000000000003</x> <y>-223.9</y> </position> <width>23.400000000000002</width> <height>23.400000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-753.0500000000001</x> <y>-28.400000000000002</y> </position> <width>82.9</width> <height>82.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-800.6500000000001</x> <y>-87.39999999999999</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-687.45</x> <y>7.599999999999994</y> </position> <width>23.900000000000002</width> <height>23.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-751.3500000000001</x> <y>-99.25000000000004</y> </position> <width>34</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-680.4000000000002</x> <y>-58.20000000000002</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.5874199932276543</rotation> <position> <x>-862.2</x> <y>-122.25000000000003</y> </position> <width>12</width> <height>111.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-900.15</x> <y>-179.10000000000002</y> </position> <width>38</width> <height>38</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.7114652320242791</rotation> <position> <x>-832.95</x> <y>-160.65</y> </position> <width>12</width> <height>96.80000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-802.8500000000001</x> <y>-193.5</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-743.8000000000001</x> <y>367.15000000000003</y> </position> <width>27.6</width> <height>27.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-762.9500000000002</x> <y>355.4</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.23395050645486792</rotation> <position> <x>-736.35</x> <y>391.55</y> </position> <width>12</width> <height>42.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-728.85</x> <y>417</y> </position> <width>17</width> <height>17</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>10.850000000000044</x> <y>535.0999999999999</y> </position> <width>33.5</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-19.549999999999997</x> <y>529</y> </position> <width>16</width> <height>16</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-231.65000000000003</x> <y>-240.44999999999996</y> </position> <width>50.1</width> <height>50.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0.008042722022367443</rotation> <position> <x>-170.35000000000002</x> <y>-252.90000000000003</y> </position> <width>25</width> <height>25</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-185.95</x> <y>-265.35</y> </position> <width>18.8</width> <height>18.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.06856778645581586</rotation> <position> <x>-107.89999999999999</x> <y>-259.6</y> </position> <width>107.30000000000001</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-61.099999999999994</x> <y>-252.20000000000005</y> </position> <width>20.3</width> <height>20.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-47.55000000000002</x> <y>-245.45000000000005</y> </position> <width>12</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-274.5</x> <y>293.1</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-285.35</x> <y>303.05</y> </position> <width>417.70000000000005</width> <height>233.9</height> </start> <end> <position> <x>-285.85</x> <y>34.95</y> </position> <width>415.8</width> <height>211.9</height> </end> </level> </retrieveLevel> </level21> <level22> <retrieveLevel> <levelId>868</levelId> <levelNumber>22</levelNumber> <name>Pit & Pendulum</name> <level> <levelBlocks> <StaticRectangle> <rotation>0.5565742760105719</rotation> <position> <x>-906.4</x> <y>-13.90000000000002</y> </position> <width>727.3</width> <height>210.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-574.55</x> <y>139.70000000000002</y> </position> <width>405.9</width> <height>122.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2529635126586314</rotation> <position> <x>-404.94999999999993</x> <y>131.4</y> </position> <width>211.3</width> <height>100.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.38615431632138203</rotation> <position> <x>334.65000000000003</x> <y>159.14999999999998</y> </position> <width>232</width> <height>98.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>412.4500000000001</x> <y>209.25</y> </position> <width>228</width> <height>166.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4931366537449091</rotation> <position> <x>743.4</x> <y>381.65</y> </position> <width>637.7</width> <height>244.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.05417105997412064</rotation> <position> <x>-744.1500000000002</x> <y>570.6999999999999</y> </position> <width>856.4</width> <height>900.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-963.8499999999999</x> <y>103.54999999999998</y> </position> <width>328.1</width> <height>172.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.030670138878387432</rotation> <position> <x>-1030.55</x> <y>1062.8</y> </position> <width>1484.8</width> <height>1479.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.04199257697046632</rotation> <position> <x>693.3</x> <y>654.15</y> </position> <width>978.7</width> <height>506</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.061421059756234575</rotation> <position> <x>380.09999999999997</x> <y>309.3</y> </position> <width>319.6</width> <height>331.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-35.15</x> <y>-227.25000000000003</y> </position> <width>16.7</width> <height>16.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-991.65</x> <y>-307.95000000000005</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>150.1</x> <y>-225.25</y> </position> <width>495</width> <height>127.9</height> </start> <end> <position> <x>450.45</x> <y>66.75</y> </position> <width>150.2</width> <height>133.4</height> </end> </level> </retrieveLevel> </level22> <level23> <retrieveLevel> <levelId>80432</levelId> <levelNumber>23</levelNumber> <name>Chimichangas</name> <level> <levelBlocks> <StaticRectangle> <rotation>-1.509796292802691</rotation> <position> <x>-559.25</x> <y>-344.1500000000001</y> </position> <width>14.1</width> <height>735.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.8100406755762687</rotation> <position> <x>-318.55000000000007</x> <y>-79.25000000000003</y> </position> <width>12</width> <height>547.8000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.778563347360475</rotation> <position> <x>-159.34999999999997</x> <y>-59.70000000000002</y> </position> <width>12</width> <height>569.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.7810878452636342</rotation> <position> <x>4.95000000000001</x> <y>-29.700000000000017</y> </position> <width>12</width> <height>581.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>405.50000000000006</x> <y>-240.6</y> </position> <width>12</width> <height>389.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.8922362280869369</rotation> <position> <x>265.2</x> <y>63.40000000000002</y> </position> <width>12</width> <height>356.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>-0.08755116384329364</rotation> <position> <x>-857.4000000000001</x> <y>-443.9500000000001</y> </position> <width>55.7</width> <height>55.7</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-209.65</x> <y>22.3</y> </position> <width>478.5</width> <height>233.7</height> </start> <end> <position> <x>-203.85000000000002</x> <y>374.20000000000005</y> </position> <width>530.6</width> <height>100</height> </end> </level> </retrieveLevel> </level23> <level24> <retrieveLevel> <levelId>61704</levelId> <levelNumber>24</levelNumber> <name>Ack and Forth</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-24</x> <y>-174.375</y> </position> <width>52.8</width> <height>504.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-1.72611317693</rotation> <position> <x>-96.973</x> <y>368.676</y> </position> <width>332.7</width> <height>95.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-1.47756083815</rotation> <position> <x>-125.104</x> <y>-210.983</y> </position> <width>448.3</width> <height>65.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-71.8</x> <y>-216.675</y> </position> <width>100.7</width> <height>454.601</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-208.549</x> <y>224.974</y> </position> <width>149.6</width> <height>28.699</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-250.15</x> <y>361.574</y> </position> <width>241.7</width> <height>31.601</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-159.599</x> <y>397.574</y> </position> <width>60.399</width> <height>10</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-172.499</x> <y>296.874</y> </position> <width>74.801</width> <height>31.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-165.35</x> <y>469.474</y> </position> <width>164</width> <height>25.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-228.65</x> <y>521.275</y> </position> <width>241.6</width> <height>34.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-2.1972822618</rotation> <position> <x>266.336</x> <y>-556.201</y> </position> <width>152.5</width> <height>28.799</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-2.18132995244</rotation> <position> <x>279.204</x> <y>600.417</y> </position> <width>87.401</width> <height>25.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-72.65</x> <y>13.175</y> </position> <width>105.5</width> <height>105.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-89.049</x> <y>-426.726</y> </position> <width>92</width> <height>92</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>198.701</x> <y>-599.375</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>321</x> <y>-523.125</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>310.9</x> <y>617.675</y> </position> <width>31.7</width> <height>31.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>239</x> <y>573.024</y> </position> <width>31.7</width> <height>31.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel> <rotation>0</rotation> <position> <x>31.55</x> <y>-386.825</y> </position> <width>56.9</width> <height>56.9</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>89.2</x> <y>-118.775</y> </position> <width>195.899</width> <height>309.7</height> </start> <end> <position> <x>3.05</x> <y>420.125</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level24> <level25> <retrieveLevel> <levelId>55555</levelId> <levelNumber>25</levelNumber> <name>Tote 'em Pole</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-114.29999999999998</x> <y>133.10000000000002</y> </position> <width>486.1</width> <height>69.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-205.65000000000006</x> <y>-154.60000000000005</y> </position> <width>31.9</width> <height>376.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-206.5</x> <y>-357.7</y> </position> <width>62.1</width> <height>30.3</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-98</x> <y>17</y> </position> <width>396</width> <height>192</height> </start> <end> <position> <x>46.55</x> <y>-369.8</y> </position> <width>100</width> <height>100</height> </end> </level> </retrieveLevel> </level25> <level26> <retrieveLevel> <levelId>81679</levelId> <levelNumber>26</levelNumber> <name>Canyon</name> <level> <levelBlocks> <StaticRectangle> <rotation>0.2802010385982985</rotation> <position> <x>564.8500000000001</x> <y>-82.45000000000002</y> </position> <width>58</width> <height>351.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2599916544165059</rotation> <position> <x>460.65000000000003</x> <y>60.15</y> </position> <width>105.9</width> <height>51</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.7989224215209647</rotation> <position> <x>497.95</x> <y>30.700000000000014</y> </position> <width>121.60000000000001</width> <height>43.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>84.1</x> <y>62.2</y> </position> <width>294.2</width> <height>35.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>203.75</x> <y>158.25</y> </position> <width>54.900000000000006</width> <height>204</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>429.25</x> <y>160.20000000000005</y> </position> <width>54.900000000000006</width> <height>219.70000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-55.150000000000006</x> <y>148.35000000000002</y> </position> <width>47.1</width> <height>208</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-249.35</x> <y>183.70000000000005</y> </position> <width>58.900000000000006</width> <height>380.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.9176021018690403</rotation> <position> <x>-192.45</x> <y>371.99999999999994</y> </position> <width>63.7</width> <height>135.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.2125971867695706</rotation> <position> <x>-218.00000000000003</x> <y>311.15000000000003</y> </position> <width>136.70000000000002</width> <height>47.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>729.4499999999998</x> <y>411.2999999999999</y> </position> <width>1074.8</width> <height>54.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-168.89999999999998</x> <y>413.20000000000005</y> </position> <width>251</width> <height>62.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>317.4500000000001</x> <y>262.09999999999997</y> </position> <width>282.40000000000003</width> <height>35.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>804.5</x> <y>254.10000000000005</y> </position> <width>757.1</width> <height>51</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>15.399999999999977</x> <y>756.3</y> </position> <width>1294.6000000000001</width> <height>317.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-94.45000000000006</x> <y>589.7</y> </position> <width>102</width> <height>392.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>672.5</x> <y>634.8000000000001</y> </position> <width>961.1</width> <height>478.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-748.8999999999999</x> <y>234.64999999999995</y> </position> <width>1059.2</width> <height>1400.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.1813795344022609</rotation> <position> <x>-926.1000000000001</x> <y>-573.8</y> </position> <width>1137.7</width> <height>486.40000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-190.5</x> <y>520.6</y> </position> <width>168.70000000000002</width> <height>180.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>892.15</x> <y>-311.1000000000001</y> </position> <width>615.9000000000001</width> <height>1133.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>545.0500000000001</x> <y>148.4</y> </position> <width>215.70000000000002</width> <height>192.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>582.3</x> <y>9.100000000000003</y> </position> <width>94.10000000000001</width> <height>156.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>560.9000000000002</x> <y>-257.79999999999995</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>202</x> <y>149.1</y> </position> <width>486.5</width> <height>145.1</height> </start> <end> <position> <x>1049</x> <y>325.95000000000005</y> </position> <width>866.9000000000001</width> <height>211.8</height> </end> </level> </retrieveLevel> </level26> <level27> <retrieveLevel> <levelId>74376</levelId> <levelNumber>27</levelNumber> <name>Default</name> <level> <levelBlocks/> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-102</x> <y>-3</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-150</x> <y>50</y> </position> <width>200</width> <height>200</height> </start> <end> <position> <x>150</x> <y>50</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level27> <level28> <retrieveLevel> <levelId>5109</levelId> <levelNumber>28</levelNumber> <name>Brick Layer</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-258.05</x> <y>235</y> </position> <width>420.6</width> <height>131.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>171.05</x> <y>256.85000000000014</y> </position> <width>675.3</width> <height>88</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>495.3</x> <y>219.65000000000003</y> </position> <width>26.4</width> <height>85.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>116.55</x> <y>-188.1</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>139.75</x> <y>-168.85000000000002</y> </position> <width>50.8</width> <height>59.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0.6147450585432935</rotation> <position> <x>-357.5</x> <y>-267.75</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-382.25</x> <y>-292.29999999999995</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>1.1036919414393886</rotation> <position> <x>340.75</x> <y>423.19999999999993</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>319.29999999999995</x> <y>446.00000000000006</y> </position> <width>57</width> <height>52.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-381.25000000000006</x> <y>45.75000000000003</y> </position> <width>92.4</width> <height>26.4</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <JointedDynamicRectangle id="1"> <rotation>0</rotation> <position> <x>-380.15</x> <y>128.60000000000005</y> </position> <width>96.8</width> <height>26.4</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <JointedDynamicRectangle id="2"> <rotation>0</rotation> <position> <x>-381.15000000000003</x> <y>101.44999999999999</y> </position> <width>94.6</width> <height>26.4</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <JointedDynamicRectangle id="3"> <rotation>0</rotation> <position> <x>-380.09999999999985</x> <y>73.44999999999993</y> </position> <width>92.4</width> <height>26.4</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <JointedDynamicRectangle id="4"> <rotation>0</rotation> <position> <x>-380.19999999999976</x> <y>156.25000000000003</y> </position> <width>99</width> <height>26.4</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-277.2</x> <y>31.9</y> </position> <width>310.2</width> <height>279.4</height> </start> <end> <position> <x>169.4</x> <y>227.7</y> </position> <width>666.5</width> <height>100</height> </end> </level> </retrieveLevel> </level28> <level29> <retrieveLevel> <levelId>72627</levelId> <levelNumber>29</levelNumber> <name>Stuck</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>80.5</x> <y>248.00000000000003</y> </position> <width>969.1</width> <height>59.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3209836240517654</rotation> <position> <x>-341.6000000000001</x> <y>-44.4</y> </position> <width>139.1</width> <height>343.90000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3171774989916758</rotation> <position> <x>532.3</x> <y>-46.05000000000004</y> </position> <width>144.3</width> <height>347.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4690498526999152</rotation> <position> <x>-325.25000000000006</x> <y>147.85000000000002</y> </position> <width>137.70000000000002</width> <height>192.10000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.47968047972806416</rotation> <position> <x>519.05</x> <y>147.89999999999998</y> </position> <width>150.4</width> <height>196.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>554.7</x> <y>234.85000000000005</y> </position> <width>147.8</width> <height>85.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-381.5</x> <y>236.70000000000005</y> </position> <width>94.9</width> <height>82</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>100.80000000000001</x> <y>197.65</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>93.60000000000001</x> <y>-111.65</y> </position> <width>847.5</width> <height>203.70000000000002</height> </start> <end> <position> <x>75.5</x> <y>44.400000000000006</y> </position> <width>795</width> <height>100</height> </end> </level> </retrieveLevel> </level29> <level30> <retrieveLevel> <levelId>75888</levelId> <levelNumber>30</levelNumber> <name>Crown Jewels</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-150</x> <y>51</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>151</x> <y>52</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0.7853981633974483</rotation> <position> <x>-151</x> <y>-11</y> </position> <width>50</width> <height>50</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <JointedDynamicRectangle id="1"> <rotation>0.7853981633974483</rotation> <position> <x>149</x> <y>-9</y> </position> <width>50</width> <height>50</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-150</x> <y>50</y> </position> <width>200</width> <height>200</height> </start> <end> <position> <x>150</x> <y>45</y> </position> <width>184</width> <height>186</height> </end> </level> </retrieveLevel> </level30> <level31> <retrieveLevel> <levelId>55555</levelId> <levelNumber>31</levelNumber> <name>Projected</name> levelId: 55511 <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-364.45000000000005</x> <y>-22.400000000000002</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-554.95</x> <y>191.25</y> </position> <width>45.300000000000004</width> <height>158.70000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-597.4500000000002</x> <y>228.3</y> </position> <width>57.7</width> <height>111.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-465.8</x> <y>124.44999999999999</y> </position> <width>64.2</width> <height>50.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-209.15000000000003</x> <y>86.94999999999999</y> </position> <width>47.400000000000006</width> <height>175.10000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-364.05000000000007</x> <y>34.00000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-309.79999999999995</x> <y>44.599999999999994</y> </position> <width>43.2</width> <height>126</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-260.1500000000001</x> <y>-227.65</y> </position> <width>31.400000000000002</width> <height>51.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-304.8</x> <y>169.55</y> </position> <width>238.3</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.17194919081630078</rotation> <position> <x>-504.55</x> <y>-187.75</y> </position> <width>257.8</width> <height>16.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-434.29999999999995</x> <y>293.35</y> </position> <width>1437.2</width> <height>89.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-119.45</x> <y>123.05000000000003</y> </position> <width>34.2</width> <height>277.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-427.40000000000003</x> <y>243.70000000000002</y> </position> <width>505.5</width> <height>61.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-379.15</x> <y>138</y> </position> <width>182</width> <height>76.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-638.0500000000002</x> <y>166.30000000000004</y> </position> <width>102.7</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-497.75000000000006</x> <y>216.8</y> </position> <width>110.10000000000001</width> <height>150.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2820246636701127</rotation> <position> <x>-25.75</x> <y>167.35000000000002</y> </position> <width>92.4</width> <height>17.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>47.00000000000001</x> <y>115.20000000000002</y> </position> <width>56.2</width> <height>325</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>12.700000000000005</x> <y>35.05</y> </position> <width>131.8</width> <height>42.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-119.75000000000001</x> <y>-34.300000000000004</y> </position> <width>35.2</width> <height>137</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>155.75000000000003</x> <y>71.3</y> </position> <width>12</width> <height>391.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>128.7</x> <y>-185.45000000000005</y> </position> <width>175.4</width> <height>125.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>48.4</x> <y>-100.95000000000002</y> </position> <width>58.400000000000006</width> <height>311</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.2994355982190906</rotation> <position> <x>201.8</x> <y>231.75</y> </position> <width>116.4</width> <height>52.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.6698889302964977</rotation> <position> <x>230.30000000000004</x> <y>262.24999999999994</y> </position> <width>53.900000000000006</width> <height>183.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>379.75000000000006</x> <y>288.95</y> </position> <width>216.8</width> <height>68.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>635.15</x> <y>229.45</y> </position> <width>189.70000000000002</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.29504166743795235</rotation> <position> <x>769.6</x> <y>222.20000000000002</y> </position> <width>303.7</width> <height>26.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8161119878817885</rotation> <position> <x>849.7000000000002</x> <y>269.9000000000001</y> </position> <width>555.5</width> <height>84.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.26432973879228183</rotation> <position> <x>919.7500000000001</x> <y>273.3</y> </position> <width>12</width> <height>1183.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.23423889967665124</rotation> <position> <x>568.6</x> <y>234.90000000000003</y> </position> <width>124.30000000000001</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.2113973769956824</rotation> <position> <x>269.25000000000006</x> <y>264.9</y> </position> <width>263.2</width> <height>74</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.5096997015819713</rotation> <position> <x>830.3</x> <y>233.90000000000003</y> </position> <width>376.20000000000005</width> <height>73.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.9835398424208726</rotation> <position> <x>946.25</x> <y>163.25000000000003</y> </position> <width>264</width> <height>75.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.1234671473593531</rotation> <position> <x>719.1000000000001</x> <y>250.90000000000003</y> </position> <width>190.4</width> <height>72.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.5509904895084676</rotation> <position> <x>336.35</x> <y>196.2</y> </position> <width>69.5</width> <height>12</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-456.84999999999997</x> <y>-135.3</y> </position> <width>18.3</width> <height>18.3</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>-619.7500000000001</x> <y>-237.85000000000002</y> </position> <width>29.400000000000002</width> <height>29.400000000000002</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="2"> <rotation>0</rotation> <position> <x>-166.25</x> <y>-171.8</y> </position> <width>14.4</width> <height>14.4</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="3"> <rotation>0</rotation> <position> <x>-164.05000000000004</x> <y>-194.25</y> </position> <width>12</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="4"> <rotation>0</rotation> <position> <x>-168.35000000000002</x> <y>-210</y> </position> <width>12</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="5"> <rotation>0</rotation> <position> <x>-167.95000000000002</x> <y>-228.85000000000002</y> </position> <width>12</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="6"> <rotation>0</rotation> <position> <x>-166.35000000000002</x> <y>-258.95</y> </position> <width>12</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <JointedDynamicRectangle id="7"> <rotation>0</rotation> <position> <x>-599.95</x> <y>141.95</y> </position> <width>37.2</width> <height>38.300000000000004</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <NoSpinWheel id="8"> <rotation>0</rotation> <position> <x>4.300000000000004</x> <y>90.30000000000001</y> </position> <width>22.700000000000003</width> <height>22.700000000000003</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <JointedDynamicRectangle id="9"> <rotation>0</rotation> <position> <x>99.05000000000001</x> <y>-102.79999999999998</y> </position> <width>39.6</width> <height>37.5</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <NoSpinWheel id="10"> <rotation>0</rotation> <position> <x>1049.0500000000002</x> <y>-339.90000000000003</y> </position> <width>20.900000000000002</width> <height>20.900000000000002</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-116.85000000000001</x> <y>5.3500000000000005</y> </position> <width>661.9000000000001</width> <height>100</height> </start> <end> <position> <x>-200.75</x> <y>167.95000000000002</y> </position> <width>842.7</width> <height>100</height> </end> </level> </retrieveLevel> </level31> <level32> <retrieveLevel> <levelId>72743</levelId> <levelNumber>32</levelNumber> <name>Be a Champ</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-229.95000000000002</x> <y>150.39999999999998</y> </position> <width>416.90000000000003</width> <height>65.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.09850200844897491</rotation> <position> <x>11.399999999999977</x> <y>-189.5</y> </position> <width>381.6</width> <height>27.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.14873551517456748</rotation> <position> <x>-351.25000000000006</x> <y>-180.55000000000004</y> </position> <width>372.90000000000003</width> <height>28.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-1.2801699808938487</rotation> <position> <x>-588.6500000000001</x> <y>104.14999999999999</y> </position> <width>66</width> <height>346.20000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.3536038879628585</rotation> <position> <x>-584.5999999999999</x> <y>186.25000000000006</y> </position> <width>65.9</width> <height>345</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.4904954413610285</rotation> <position> <x>-328.69999999999993</x> <y>-292.49999999999994</y> </position> <width>368.6</width> <height>26.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.35032680816718687</rotation> <position> <x>-202.65</x> <y>370.65000000000003</y> </position> <width>118.10000000000001</width> <height>19.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.27008127451373576</rotation> <position> <x>-208.54999999999998</x> <y>406.15000000000003</y> </position> <width>109.5</width> <height>17.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-118</x> <y>390.35</y> </position> <width>94.5</width> <height>19.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>-88.4</x> <y>50.54999999999999</y> </position> <width>43</width> <height>40.5</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>-160.45000000000002</x> <y>-232.39999999999998</y> </position> <width>25.200000000000003</width> <height>25.200000000000003</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-231.20000000000002</x> <y>27.8</y> </position> <width>384.1</width> <height>187</height> </start> <end> <position> <x>269.15000000000003</x> <y>34.15</y> </position> <width>176.8</width> <height>106.10000000000001</height> </end> </level> </retrieveLevel> </level32> <level33> <retrieveLevel> <levelId>74274</levelId> <levelNumber>33</levelNumber> <name>Sunset</name> <level> <levelBlocks> <DynamicCircle> <rotation>0</rotation> <position> <x>-53</x> <y>-51</y> </position> <width>118</width> <height>118</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-66</x> <y>123</y> </position> <width>610</width> <height>52</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-312.2</x> <y>338.99999999999994</y> </position> <width>112.9</width> <height>112.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-122.89999999999998</x> <y>341.90000000000003</y> </position> <width>121.4</width> <height>121.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-365.8500000000001</x> <y>142.7</y> </position> <width>45.2</width> <height>45.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-242.9</x> <y>158.25</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-163.90000000000003</x> <y>156.85000000000002</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-76.24999999999997</x> <y>154</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>9.900000000000016</x> <y>148.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>87.55000000000003</x> <y>169.55</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>158.2</x> <y>159.65000000000003</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>237.25000000000003</x> <y>146.95</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-303.65</x> <y>155.4</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>32.50000000000002</x> <y>367.25</y> </position> <width>129.9</width> <height>129.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>224.60000000000005</x> <y>353.2</y> </position> <width>115.8</width> <height>115.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-450.5499999999999</x> <y>298.45</y> </position> <width>101.7</width> <height>101.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>382.7000000000001</x> <y>304.05000000000007</y> </position> <width>113</width> <height>113</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-676.25</x> <y>691.6000000000001</y> </position> <width>262.40000000000003</width> <height>262.40000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-265.90000000000003</x> <y>758.5500000000001</y> </position> <width>234.4</width> <height>234.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>102.45000000000002</x> <y>764.1500000000001</y> </position> <width>228.9</width> <height>228.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>646.6000000000001</x> <y>663.65</y> </position> <width>251.2</width> <height>251.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>384.35000000000014</x> <y>761.3500000000001</y> </position> <width>223.3</width> <height>223.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-346.84999999999997</x> <y>-257.29999999999995</y> </position> <width>94.9</width> <height>94.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-285.20000000000005</x> <y>-230.35</y> </position> <width>62</width> <height>62</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-189.84999999999988</x> <y>-201.3</y> </position> <width>28</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-428.25</x> <y>-210.45</y> </position> <width>48.5</width> <height>48.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-225.05</x> <y>-202.59999999999997</y> </position> <width>37.7</width> <height>37.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0.001573115877719522</rotation> <position> <x>-51</x> <y>-178</y> </position> <width>95.8</width> <height>18.9</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-56.5</x> <y>31.1</y> </position> <width>720</width> <height>148</height> </start> <end> <position> <x>-53.2</x> <y>114.35000000000001</y> </position> <width>214.3</width> <height>100</height> </end> </level> </retrieveLevel> </level33> <level34> <retrieveLevel> <levelId>79565</levelId> <levelNumber>34</levelNumber> <name>Displacement</name> <level> <levelBlocks> <StaticRectangle> <rotation>0.011831537722138546</rotation> <position> <x>-33</x> <y>149</y> </position> <width>604.5</width> <height>50.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>241</x> <y>56</y> </position> <width>54</width> <height>212</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>120</x> <y>-64.2</y> </position> <width>295.8</width> <height>49.300000000000004</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>20</x> <y>74</y> </position> <width>16</width> <height>16</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>32</x> <y>107</y> </position> <width>20</width> <height>20</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>74</x> <y>108</y> </position> <width>22</width> <height>22</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>118</x> <y>111</y> </position> <width>20</width> <height>20</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>190.5</x> <y>42.65000000000001</y> </position> <width>24</width> <height>24</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>132.14999999999998</x> <y>69.55</y> </position> <width>22</width> <height>22</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>139.49999999999997</x> <y>20.949999999999992</y> </position> <width>22</width> <height>22</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>183.95</x> <y>96.1</y> </position> <width>28</width> <height>28</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>81.94999999999999</x> <y>58.7</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>94</x> <y>-2</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>189</x> <y>-8</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-7</x> <y>104</y> </position> <width>22</width> <height>22</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>30</x> <y>42</y> </position> <width>18</width> <height>18</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>37</x> <y>-8</y> </position> <width>26</width> <height>26</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticCircle> <rotation>0</rotation> <position> <x>248.14999999999995</x> <y>155.19999999999996</y> </position> <width>32.9</width> <height>32.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>247.84999999999997</x> <y>-68.35</y> </position> <width>33.4</width> <height>33.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-327.7</x> <y>146.65</y> </position> <width>25.700000000000003</width> <height>25.700000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>38.84999999999998</x> <y>245.05</y> </position> <width>251</width> <height>45.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>230.75</x> <y>-201.45000000000002</y> </position> <width>158</width> <height>32.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-78.05000000000001</x> <y>245.40000000000003</y> </position> <width>23.5</width> <height>23.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>160.05</x> <y>245.35</y> </position> <width>23.6</width> <height>23.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>308.05</x> <y>-201.00000000000003</y> </position> <width>16.1</width> <height>16.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-152.64999999999998</x> <y>245.4</y> </position> <width>23.5</width> <height>23.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-250.60000000000002</x> <y>242.95000000000002</y> </position> <width>27.5</width> <height>27.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-364.7</x> <y>240.50000000000003</y> </position> <width>34</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-268</x> <y>-183</y> </position> <width>90</width> <height>90</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-173</x> <y>-51</y> </position> <width>316</width> <height>412</height> </start> <end> <position> <x>126.15</x> <y>45.800000000000004</y> </position> <width>179</width> <height>173.10000000000002</height> </end> </level> </retrieveLevel> </level34> <level35> <retrieveLevel> <levelId>180614</levelId> <levelNumber>35</levelNumber> <name>Gate Keeper</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-174.2</x> <y>232.85</y> </position> <width>349.5</width> <height>112.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>203.35000000000005</x> <y>232.84999999999997</y> </position> <width>352.4</width> <height>112.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-53.44999999999999</x> <y>321.54999999999995</y> </position> <width>40.4</width> <height>152.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>82.75000000000001</x> <y>337.55</y> </position> <width>40.3</width> <height>122.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>14.6</x> <y>403.8999999999999</y> </position> <width>176.4</width> <height>37</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-335.55</x> <y>118.65</y> </position> <width>27.5</width> <height>172.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>365.55000000000007</x> <y>113.7</y> </position> <width>27.5</width> <height>160.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>367.2000000000001</x> <y>12.7</y> </position> <width>19.6</width> <height>19.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0.4453010438876858</rotation> <position> <x>-335.05</x> <y>13.6</y> </position> <width>19.6</width> <height>19.6</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>1.5736103812761604</rotation> <position> <x>15.800000000000022</x> <y>163.55</y> </position> <width>25.4</width> <height>84.6</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>15.55</x> <y>17.6</y> </position> <width>698.2</width> <height>244.3</height> </start> <end> <position> <x>14.3</x> <y>338.65</y> </position> <width>100</width> <height>100</height> </end> </level> </retrieveLevel> </level35> <level36> <retrieveLevel> <levelId>44106</levelId> <levelNumber>36</levelNumber> <name>Fix Big Ben</name> <level> <levelBlocks> <StaticRectangle> <rotation>-0.5044934872067843</rotation> <position> <x>-431.79999999999995</x> <y>-348.85</y> </position> <width>36.4</width> <height>163.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.47477439222855</rotation> <position> <x>-527.2499999999999</x> <y>-350.5500000000001</y> </position> <width>37.7</width> <height>167.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-480.7</x> <y>-435.4500000000001</y> </position> <width>32.2</width> <height>32.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-479.00000000000006</x> <y>-476.9</y> </position> <width>12</width> <height>100</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-479.00000000000006</x> <y>-327.1</y> </position> <width>52.6</width> <height>174.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.9985362244848351</rotation> <position> <x>-451.90000000000003</x> <y>-305.1</y> </position> <width>119.30000000000001</width> <height>81</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3868757177310273</rotation> <position> <x>-515.4</x> <y>-322</y> </position> <width>67.3</width> <height>130.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-479.3500000000001</x> <y>-81.29999999999998</y> </position> <width>365.90000000000003</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-479.05</x> <y>-226.15000000000003</y> </position> <width>205.5</width> <height>137</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.7759866765789607</rotation> <position> <x>-581.8000000000001</x> <y>-144.95000000000002</y> </position> <width>28.5</width> <height>176.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.7614385526121312</rotation> <position> <x>-367.75000000000006</x> <y>-135.14999999999998</y> </position> <width>29.8</width> <height>150.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-481.6500000000001</x> <y>-134.75</y> </position> <width>196.4</width> <height>96.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.746723382426592</rotation> <position> <x>-585.8</x> <y>-111</y> </position> <width>48.800000000000004</width> <height>75</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.7468072934247967</rotation> <position> <x>-376.65</x> <y>-106.80000000000001</y> </position> <width>54.400000000000006</width> <height>73.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicRectangle> <rotation>0</rotation> <position> <x>-652.1</x> <y>63.550000000000004</y> </position> <width>25.6</width> <height>234</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-479.0000000000001</x> <y>53.250000000000014</y> </position> <width>102.2</width> <height>102.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-618.3000000000001</x> <y>53.400000000000006</y> </position> <width>38.900000000000006</width> <height>255.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-339.7</x> <y>49.80000000000002</y> </position> <width>41.400000000000006</width> <height>292</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-482.2</x> <y>188.4</y> </position> <width>311.3</width> <height>45.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-478.45000000000016</x> <y>214.7</y> </position> <width>383</width> <height>67.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-476.55000000000007</x> <y>194</y> </position> <width>33.9</width> <height>77.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-478.84999999999997</x> <y>427.8</y> </position> <width>351.1</width> <height>396.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>269.4</x> <y>490.5</y> </position> <width>823.8000000000001</width> <height>83.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-133.20000000000002</x> <y>513.7</y> </position> <width>65.10000000000001</width> <height>65.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>669.4000000000001</x> <y>456.05</y> </position> <width>78</width> <height>78</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.48133567044418424</rotation> <position> <x>-263.3</x> <y>566.65</y> </position> <width>210.70000000000002</width> <height>75.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-354.4</x> <y>601.35</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>526.3500000000001</x> <y>331.15000000000003</y> </position> <width>26.400000000000002</width> <height>232</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>240.05</x> <y>265.05</y> </position> <width>680.3000000000001</width> <height>396.5</height> </start> <end> <position> <x>-478.35</x> <y>57.400000000000006</y> </position> <width>389.8</width> <height>293.8</height> </end> </level> </retrieveLevel> </level36> <level37> <retrieveLevel> <levelId>10130</levelId> <levelNumber>37</levelNumber> <name>Close the Door</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>258.05000000000007</x> <y>137.15</y> </position> <width>251</width> <height>78.30000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>269.15000000000003</x> <y>274.65000000000003</y> </position> <width>273.3</width> <height>73.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>132.95</x> <y>139.25000000000003</y> </position> <width>27.1</width> <height>27.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>80.94999999999999</x> <y>393.40000000000003</y> </position> <width>725.7</width> <height>218.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>131.64999999999998</x> <y>278.9000000000001</y> </position> <width>25.6</width> <height>25.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>408.1</x> <y>209.00000000000009</y> </position> <width>70.4</width> <height>222.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>41.55000000000003</x> <y>204</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <JointedDynamicRectangle id="1"> <rotation>0</rotation> <position> <x>95.75</x> <y>190.89999999999995</y> </position> <width>18.1</width> <height>176.3</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-100.30000000000001</x> <y>172.8</y> </position> <width>353.8</width> <height>359.3</height> </start> <end> <position> <x>218.20000000000002</x> <y>195.85000000000002</y> </position> <width>272.1</width> <height>191.8</height> </end> </level> </retrieveLevel> </level37> <level38> <retrieveLevel> <levelId>82409</levelId> <levelNumber>38</levelNumber> <name>Skyscaper</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>48.6</x> <y>-357</y> </position> <width>86.2</width> <height>13.600000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-72</x> <y>-357</y> </position> <width>94</width> <height>14</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>551.25</x> <y>456.09999999999997</y> </position> <width>1095.8</width> <height>50.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-5.6000000000000085</x> <y>785.3499999999999</y> </position> <width>283.7</width> <height>383.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-557.75</x> <y>469.25</y> </position> <width>1006.8000000000001</width> <height>77.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-143.39999999999995</x> <y>628.3499999999999</y> </position> <width>178</width> <height>350.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-358.2</x> <y>630.5500000000002</y> </position> <width>133.5</width> <height>361.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-299.09999999999997</x> <y>811.35</y> </position> <width>294.8</width> <height>233.70000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-644.8</x> <y>555.0999999999999</y> </position> <width>461.70000000000005</width> <height>144.70000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-632.85</x> <y>741.75</y> </position> <width>456.20000000000005</width> <height>100.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-897.1</x> <y>661.05</y> </position> <width>417.20000000000005</width> <height>356</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>68.99999999999997</x> <y>540.8</y> </position> <width>131</width> <height>204.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>296.95000000000005</x> <y>573.1</y> </position> <width>346</width> <height>83.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>462.09999999999997</x> <y>528.5500000000001</y> </position> <width>157.3</width> <height>172.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>234.09999999999997</x> <y>725.1</y> </position> <width>73.3</width> <height>235.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>386.1499999999999</x> <y>662.2</y> </position> <width>309.3</width> <height>141.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>855.3</x> <y>604.45</y> </position> <width>513.7</width> <height>345.90000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>572.9</x> <y>767.0500000000001</y> </position> <width>152</width> <height>188.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-533.3</x> <y>-672.6</y> </position> <width>157.3</width> <height>466.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>528.15</x> <y>-562.5</y> </position> <width>157.3</width> <height>513.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>266.1</x> <y>-625.3000000000001</y> </position> <width>162.5</width> <height>361.70000000000005</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-958.0000000000001</x> <y>-523.2</y> </position> <width>188.70000000000002</width> <height>602.8000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-9</x> <y>-369</y> </position> <width>32</width> <height>32</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>0</x> <y>443</y> </position> <width>1410.2</width> <height>597.6</height> </start> <end> <position> <x>-11.350000000000001</x> <y>-627.0500000000001</y> </position> <width>143.1</width> <height>534.9</height> </end> </level> </retrieveLevel> </level38> <level39> <retrieveLevel> <levelId>3024</levelId> <levelNumber>39</levelNumber> <name>On the Edge</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-171.70000000000002</x> <y>305.40000000000003</y> </position> <width>155.8</width> <height>48.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>252.04999999999998</x> <y>305.34999999999997</y> </position> <width>155.8</width> <height>51.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-661.3499999999999</x> <y>202.00000000000003</y> </position> <width>973.1</width> <height>255.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>661.2500000000001</x> <y>201.70000000000002</y> </position> <width>801.8000000000001</width> <height>256.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-152.9</x> <y>130.89999999999998</y> </position> <width>119.30000000000001</width> <height>112</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>227.40000000000003</x> <y>129.95</y> </position> <width>111.60000000000001</width> <height>111.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-546.6</x> <y>85.05000000000001</y> </position> <width>907.5</width> <height>25.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>674.25</x> <y>88.3</y> </position> <width>1005</width> <height>33.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-913.3</x> <y>40.40000000000001</y> </position> <width>217.9</width> <height>335.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>39.60000000000004</x> <y>-244.75000000000006</y> </position> <width>257</width> <height>48.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-811.25</x> <y>-238.1</y> </position> <width>111.2</width> <height>111.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>269.80000000000007</x> <y>667.6000000000001</y> </position> <width>189</width> <height>728.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-188.35</x> <y>669.4000000000001</y> </position> <width>189</width> <height>728.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>182.64999999999998</x> <y>58.000000000000014</y> </position> <width>13.200000000000001</width> <height>13.200000000000001</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-134.25</x> <y>-10.899999999999995</y> </position> <width>82.9</width> <height>82.9</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicRectangle> <rotation>0</rotation> <position> <x>495.5</x> <y>52.95</y> </position> <width>158.4</width> <height>37.800000000000004</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.7440129383911611</rotation> <position> <x>398.19999999999993</x> <y>14.900000000000013</y> </position> <width>55.900000000000006</width> <height>106.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> <DynamicRectangle> <rotation>0.534830484068921</rotation> <position> <x>442.0000000000001</x> <y>-39.84999999999998</y> </position> <width>249.5</width> <height>26.900000000000002</height> <goalBlock>false</goalBlock> <joints/> </DynamicRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>37.44999999999997</x> <y>-292.45000000000005</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <JointedDynamicRectangle id="1"> <rotation>-0.002468929162811398</rotation> <position> <x>174.65</x> <y>273.20000000000005</y> </position> <width>166.20000000000002</width> <height>12.700000000000001</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>-603.1</x> <y>-114</y> </position> <width>722.8000000000001</width> <height>394.70000000000005</height> </start> <end> <position> <x>-135.1</x> <y>233.55</y> </position> <width>944.6</width> <height>100.30000000000001</height> </end> </level> </retrieveLevel> </level39> <level40> <retrieveLevel> <levelId>21</levelId> <levelNumber>40</levelNumber> <name>Sisyphea</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-187.84999999999997</x> <y>298.2499999999999</y> </position> <width>357.8</width> <height>37.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.8318488380415413</rotation> <position> <x>127.74999999999996</x> <y>131.35</y> </position> <width>461.2000000000001</width> <height>43.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.0003437691070120319</rotation> <position> <x>406.6</x> <y>53.999999999999986</y> </position> <width>285.7</width> <height>214.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>93.6</x> <y>291.3</y> </position> <width>223.5</width> <height>51.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>106.45</x> <y>229</y> </position> <width>63.8</width> <height>63.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>50.5</x> <y>264.15000000000003</y> </position> <width>38.400000000000006</width> <height>38.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>358.6</x> <y>125.3</y> </position> <width>92.6</width> <height>146.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-324.6000000000001</x> <y>326.4000000000001</y> </position> <width>44.7</width> <height>44.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-257.6</x> <y>331.20000000000005</y> </position> <width>41.5</width> <height>41.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-196.85</x> <y>328</y> </position> <width>38.3</width> <height>38.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-141</x> <y>329.6</y> </position> <width>38.3</width> <height>38.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-83.5</x> <y>331.20000000000005</y> </position> <width>38.3</width> <height>38.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-29.250000000000018</x> <y>331.25</y> </position> <width>38.3</width> <height>38.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>21.85</x> <y>329.6</y> </position> <width>38.400000000000006</width> <height>38.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>183.05</x> <y>327.99999999999994</y> </position> <width>38.3</width> <height>38.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>130.35</x> <y>332.8</y> </position> <width>35.2</width> <height>35.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>79.3</x> <y>329.65</y> </position> <width>38.3</width> <height>38.3</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>363.75000000000006</x> <y>218.15</y> </position> <width>255.5</width> <height>255.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.834060107844887</rotation> <position> <x>845.8499999999999</x> <y>359.90000000000003</y> </position> <width>1018.9000000000001</width> <height>112.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>640</x> <y>295.75000000000006</y> </position> <width>88</width> <height>88</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>746.8499999999999</x> <y>495.45</y> </position> <width>78.60000000000001</width> <height>78.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>921.35</x> <y>627.55</y> </position> <width>75.5</width> <height>75.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>624.2</x> <y>196.70000000000002</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-133.35000000000002</x> <y>238.85</y> </position> <width>77.80000000000001</width> <height>77.80000000000001</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-177.25</x> <y>210.85000000000002</y> </position> <width>351.1</width> <height>188.9</height> </start> <end> <position> <x>405.3</x> <y>-119.55000000000001</y> </position> <width>168.9</width> <height>151.1</height> </end> </level> </retrieveLevel> </level40> <level41> <retrieveLevel> <levelId>30</levelId> <levelNumber>41</levelNumber> <name>Under Over</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>27.049999999999955</x> <y>290.5</y> </position> <width>332.90000000000003</width> <height>112.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>603.55</x> <y>271.1</y> </position> <width>344.5</width> <height>99.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>310.95000000000005</x> <y>131.95000000000002</y> </position> <width>37.6</width> <height>209.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>90.64999999999996</x> <y>12.950000000000005</y> </position> <width>479.3</width> <height>46.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-136.00000000000003</x> <y>298.3</y> </position> <width>65.7</width> <height>65.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>73.25</x> <y>355.45</y> </position> <width>121.7</width> <height>121.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-94.64999999999998</x> <y>395.6</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-59.40000000000001</x> <y>342.1</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-41.10000000000001</x> <y>-0.9500000000000028</y> </position> <width>34</width> <height>34</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>19.699999999999992</x> <y>-1.0000000000000029</y> </position> <width>31.6</width> <height>31.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>82.95</x> <y>-7.1000000000000005</y> </position> <width>34.1</width> <height>34.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>147.45</x> <y>-4.6499999999999995</y> </position> <width>36.5</width> <height>36.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>207.05</x> <y>-5.850000000000006</y> </position> <width>26.8</width> <height>26.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>267.90000000000003</x> <y>-0.9500000000000092</y> </position> <width>34.1</width> <height>34.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>319</x> <y>-0.9500000000000092</y> </position> <width>29.200000000000003</width> <height>29.200000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.7239579039273718</rotation> <position> <x>776.3499999999999</x> <y>270.7</y> </position> <width>59.400000000000006</width> <height>79.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.27582304109951566</rotation> <position> <x>681.7000000000002</x> <y>295.2</y> </position> <width>148.4</width> <height>68.10000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2903124806845081</rotation> <position> <x>764.2</x> <y>314.05</y> </position> <width>34.1</width> <height>85.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3813390163870549</rotation> <position> <x>716.7500000000001</x> <y>347</y> </position> <width>14.1</width> <height>54.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.32669057708462856</rotation> <position> <x>609.75</x> <y>312.9</y> </position> <width>65.60000000000001</width> <height>87.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>1.799909020837338</rotation> <position> <x>505.1500000000001</x> <y>331.1500000000001</y> </position> <width>110.5</width> <height>52.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>247.8</x> <y>-210.2</y> </position> <width>73</width> <height>73</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>171.2</x> <y>-217.55</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> </levelBlocks> <playerBlocks> <JointedDynamicRectangle id="0"> <rotation>0</rotation> <position> <x>244</x> <y>184</y> </position> <width>50</width> <height>12</height> <goalBlock>true</goalBlock> <joints/> </JointedDynamicRectangle> </playerBlocks> <start> <position> <x>76.7</x> <y>133.8</y> </position> <width>442.7000000000001</width> <height>219</height> </start> <end> <position> <x>549.65</x> <y>145.95000000000002</y> </position> <width>200</width> <height>200</height> </end> </level> </retrieveLevel> </level41> <level42> <retrieveLevel> <levelId>71621</levelId> <levelNumber>42</levelNumber> <name>More Balls</name> <level> <levelBlocks> <DynamicCircle> <rotation>0</rotation> <position> <x>-141.45</x> <y>-139.05</y> </position> <width>39.2</width> <height>39.2</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-139.95000000000002</x> <y>-47.400000000000006</y> </position> <width>31.3</width> <height>31.3</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <DynamicCircle> <rotation>0</rotation> <position> <x>-141.69999999999996</x> <y>14.899999999999997</y> </position> <width>20.1</width> <height>20.1</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticRectangle> <rotation>-0.11920692927676169</rotation> <position> <x>-227.9</x> <y>-39.349999999999994</y> </position> <width>53.2</width> <height>236.5</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.08306398730417808</rotation> <position> <x>-57.34999999999998</x> <y>-38.70000000000002</y> </position> <width>52.5</width> <height>238</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.02073291968115082</rotation> <position> <x>-351.6</x> <y>146.04999999999998</y> </position> <width>390.6</width> <height>43.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.06114326175171261</rotation> <position> <x>-111.40000000000002</x> <y>147.15</y> </position> <width>164.8</width> <height>44.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <DynamicCircle> <rotation>0</rotation> <position> <x>-140.60000000000002</x> <y>83.64999999999999</y> </position> <width>17</width> <height>17</height> <goalBlock>false</goalBlock> <joints/> </DynamicCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-239.90000000000003</x> <y>-83.6</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-39.450000000000045</x> <y>-85.10000000000001</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-237.6</x> <y>-0.7500000000000089</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-41.750000000000036</x> <y>-3.049999999999997</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-233.80000000000004</x> <y>-154.40000000000003</y> </position> <width>44.900000000000006</width> <height>83.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-52.000000000000036</x> <y>-166.15000000000003</y> </position> <width>44.900000000000006</width> <height>61.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.0931627216259383</rotation> <position> <x>-215.05000000000007</x> <y>77.39999999999999</y> </position> <width>66.5</width> <height>29.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.1013369450708228</rotation> <position> <x>-70.74999999999999</x> <y>69.79999999999998</y> </position> <width>65.4</width> <height>29.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-208.39999999999995</x> <y>54.9</y> </position> <width>31</width> <height>31</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-80.30000000000003</x> <y>54.3</y> </position> <width>24.8</width> <height>24.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.8402251912807288</rotation> <position> <x>4.100000000000012</x> <y>208.4</y> </position> <width>181.4</width> <height>63.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.002372610624896132</rotation> <position> <x>80.59999999999997</x> <y>216.65000000000003</y> </position> <width>196.3</width> <height>57.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>2.340866990433879</rotation> <position> <x>176.4</x> <y>192.05</y> </position> <width>125.9</width> <height>67</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>68.6</x> <y>-161.2</y> </position> <width>116.6</width> <height>116.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.3103378504096006</rotation> <position> <x>31.099999999999987</x> <y>16.099999999999994</y> </position> <width>184.6</width> <height>81.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>95.55000000000004</x> <y>-58.85000000000002</y> </position> <width>92.8</width> <height>92.8</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>-3.700000000000001</x> <y>-43.400000000000006</y> </position> <width>59.3</width> <height>101.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-397.4</x> <y>-184.4500000000001</y> </position> <width>164.20000000000002</width> <height>164.20000000000002</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0.24362877978321656</rotation> <position> <x>-324.65</x> <y>31.75</y> </position> <width>188.1</width> <height>74.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-238.85</x> <y>50.85</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>-402.4500000000001</x> <y>-0.1500000000000039</y> </position> <width>50.7</width> <height>50.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-315.9000000000001</x> <y>-41.999999999999986</y> </position> <width>80.60000000000001</width> <height>80.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>272</x> <y>301.54999999999995</y> </position> <width>195.2</width> <height>195.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-450.25000000000006</x> <y>325.25</y> </position> <width>200</width> <height>200</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-541.3</x> <y>150.60000000000002</y> </position> <width>29.9</width> <height>29.9</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>-297.95</x> <y>232.7</y> </position> <width>95.5</width> <height>95.5</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>79.65000000000002</x> <y>280.4</y> </position> <width>86.60000000000001</width> <height>86.60000000000001</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>1.1333826759106085</rotation> <position> <x>-8.64999999999999</x> <y>242.35000000000005</y> </position> <width>157.3</width> <height>44.400000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0.3687643619549</rotation> <position> <x>-213.79999999999995</x> <y>213.75</y> </position> <width>44.3</width> <height>95.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-141.80000000000004</x> <y>167.60000000000005</y> </position> <width>206.7</width> <height>47.2</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-497.55000000000007</x> <y>106.95</y> </position> <width>27.9</width> <height>27.9</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="1"> <rotation>0</rotation> <position> <x>-350.25</x> <y>110.14999999999998</y> </position> <width>26.3</width> <height>26.3</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="2"> <rotation>0</rotation> <position> <x>-290.9</x> <y>110.85000000000002</y> </position> <width>26.3</width> <height>26.3</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <NoSpinWheel id="3"> <rotation>0</rotation> <position> <x>-418.85</x> <y>108.5</y> </position> <width>27.8</width> <height>27.8</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-137.20000000000002</x> <y>-105.9</y> </position> <width>190.4</width> <height>492.3</height> </start> <end> <position> <x>81.30000000000001</x> <y>141.25</y> </position> <width>247.7</width> <height>120</height> </end> </level> </retrieveLevel> </level42> </officialLevelsExp> ); } public static function getLeveListXML():XML{ return (<levelList> <levelCount>42</levelCount> <level> <levelName>Rolling Away</levelName> <description>level 3!</description> <levelId>91</levelId> <levelNumber>1</levelNumber> </level> <level> <levelName>Reach Up</levelName> <description></description> <levelId>55</levelId> <levelNumber>2</levelNumber> </level> <level> <levelName>Mind The Gap</levelName> <description></description> <levelId>16</levelId> <levelNumber>3</levelNumber> </level> <level> <levelName>Junkyard</levelName> <description>j2</description> <levelId>102</levelId> <levelNumber>4</levelNumber> </level> <level> <levelName>The Wall</levelName> <description></description> <levelId>31</levelId> <levelNumber>5</levelNumber> </level> <level> <levelName>On a Roll</levelName> <description>medium</description> <levelId>89</levelId> <levelNumber>6</levelNumber> </level> <level> <levelName>Full-up</levelName> <description>easyish</description> <levelId>88</levelId> <levelNumber>7</levelNumber> </level> <level> <levelName>Higher</levelName> <description>6ish</description> <levelId>86</levelId> <levelNumber>8</levelNumber> </level> <level> <levelName>Around the Bend</levelName> <description></description> <levelId>100</levelId> <levelNumber>9</levelNumber> </level> <level> <levelName>Up The Hump</levelName> <description></description> <levelId>17</levelId> <levelNumber>10</levelNumber> </level> <level> <levelName>Mission to Mars</levelName> <description></description> <levelId>62</levelId> <levelNumber>11</levelNumber> </level> <level> <levelName>Up The Stairs</levelName> <description></description> <levelId>19</levelId> <levelNumber>12</levelNumber> </level> <level> <levelName>Big Ball</levelName> <description></description> <levelId>23</levelId> <levelNumber>13</levelNumber> </level> <level> <levelName>Four Balls</levelName> <description></description> <levelId>20</levelId> <levelNumber>14</levelNumber> </level> <level> <levelName>Down Under</levelName> <description></description> <levelId>24</levelId> <levelNumber>15</levelNumber> </level> <level> <levelName>Awash</levelName> <description></description> <levelId>28</levelId> <levelNumber>16</levelNumber> </level> <level> <levelName>Handling</levelName> <description></description> <levelId>69</levelId> <levelNumber>17</levelNumber> </level> <level> <levelName>Tube</levelName> <description></description> <levelId>76</levelId> <levelNumber>18</levelNumber> </level> <level> <levelName>Back and Forth</levelName> <description></description> <levelId>60</levelId> <levelNumber>19</levelNumber> </level> <level> <levelName>Unpossible</levelName> <description></description> <levelId>54</levelId> <levelNumber>20</levelNumber> </level> <level> <levelName>U-Turn</levelName> <description></description> <levelId>4575</levelId> <levelNumber>21</levelNumber> </level> <level> <levelName>Pit & Pendulum</levelName> <description></description> <levelId>868</levelId> <levelNumber>22</levelNumber> </level> <level> <levelName>Chimichangas</levelName> <description></description> <levelId>80432</levelId> <levelNumber>23</levelNumber> </level> <level> <levelName>Ack and Forth</levelName> <description></description> <levelId>61704</levelId> <levelNumber>24</levelNumber> </level> <level> <levelName>Tote 'em Pole</levelName> <description></description> <levelId>55555</levelId> <levelNumber>25</levelNumber> </level> <level> <levelName>Canyon</levelName> <description></description> <levelId>81679</levelId> <levelNumber>26</levelNumber> </level> <level> <levelName>Default</levelName> <description></description> <levelId>74376</levelId> <levelNumber>27</levelNumber> </level> <level> <levelName>Brick Layer</levelName> <description></description> <levelId>5109</levelId> <levelNumber>28</levelNumber> </level> <level> <levelName>Stuck</levelName> <description></description> <levelId>72627</levelId> <levelNumber>29</levelNumber> </level> <level> <levelName>Crown Jewels</levelName> <description></description> <levelId>75888</levelId> <levelNumber>30</levelNumber> </level> <level> <levelName>Projected</levelName> <description></description> <levelId>55555</levelId> <levelNumber>31</levelNumber> </level> <level> <levelName>Be a Champ</levelName> <description></description> <levelId>72743</levelId> <levelNumber>32</levelNumber> </level> <level> <levelName>Sunset</levelName> <description></description> <levelId>74274</levelId> <levelNumber>33</levelNumber> </level> <level> <levelName>Displacement</levelName> <description></description> <levelId>79565</levelId> <levelNumber>34</levelNumber> </level> <level> <levelName>Gate Keeper</levelName> <description></description> <levelId>180614</levelId> <levelNumber>35</levelNumber> </level> <level> <levelName>Fix Big Ben</levelName> <description></description> <levelId>44106</levelId> <levelNumber>36</levelNumber> </level> <level> <levelName>Close the Door</levelName> <description></description> <levelId>10130</levelId> <levelNumber>37</levelNumber> </level> <level> <levelName>Skyscaper</levelName> <description></description> <levelId>82409</levelId> <levelNumber>38</levelNumber> </level> <level> <levelName>On the Edge</levelName> <description></description> <levelId>3024</levelId> <levelNumber>39</levelNumber> </level> <level> <levelName>Sisyphea</levelName> <description></description> <levelId>21</levelId> <levelNumber>40</levelNumber> </level> <level> <levelName>Under Over</levelName> <description></description> <levelId>30</levelId> <levelNumber>41</levelNumber> </level> <level> <levelName>More Balls</levelName> <description></description> <levelId>71621</levelId> <levelNumber>42</levelNumber> </level> </levelList> ); } } }//package contraption.data
Section 84
//TutorialLevels (contraption.data.TutorialLevels) package contraption.data { public class TutorialLevels { public static function getTutorialLevels():XML{ return (<tutorialLevels> <level1> <retrieveLevel> <levelId>264</levelId> <tutorialNumber>1</tutorialNumber> <name>How to Create</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>-98</x> <y>237</y> </position> <width>1128</width> <height>180</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-101</x> <y>106</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> </playerBlocks> <start> <position> <x>-151</x> <y>51</y> </position> <width>258</width> <height>208</height> </start> <end> <position> <x>217</x> <y>66</y> </position> <width>170</width> <height>198</height> </end> </level> </retrieveLevel> </level1> <level2> <retrieveLevel> <levelId>266</levelId> <tutorialNumber>2</tutorialNumber> <name>How to Edit</name> <level> <levelBlocks> <StaticRectangle> <rotation>0</rotation> <position> <x>176.89999999999998</x> <y>360.2999999999999</y> </position> <width>1279.8000000000002</width> <height>392.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-44.35000000000002</x> <y>-81.35</y> </position> <width>240.8</width> <height>277.40000000000003</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>271.84999999999997</x> <y>112.05</y> </position> <width>159</width> <height>238.4</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-566</x> <y>-4.250000000000014</y> </position> <width>270.1</width> <height>673.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>-239.64999999999992</x> <y>-251.45</y> </position> <width>630.8000000000001</width> <height>437.1</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>-209.35000000000008</x> <y>120.30000000000004</y> </position> <width>41.900000000000006</width> <height>41.900000000000006</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <ClockwiseWheel id="1"> <rotation>0</rotation> <position> <x>-346.45000000000005</x> <y>127.15000000000002</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </ClockwiseWheel> <ClockwiseWheel id="2"> <rotation>0</rotation> <position> <x>-371.65</x> <y>38.349999999999994</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </ClockwiseWheel> <HollowRod id="3"> <rotation>0.4675831439645074</rotation> <position> <x>-290.5</x> <y>79.32500000000002</y> </position> <width>181.81609527211825</width> <height>4</height> <goalBlock>false</goalBlock> <joints> <jointedTo>2</jointedTo> <jointedTo>0</jointedTo> </joints> </HollowRod> <HollowRod id="4"> <rotation>-2.0474725145327923</rotation> <position> <x>-359.05</x> <y>82.75</y> </position> <width>54.92249083936378</width> <height>4</height> <goalBlock>false</goalBlock> <joints> <jointedTo>1</jointedTo> <jointedTo>2</jointedTo> </joints> </HollowRod> <HollowRod id="5"> <rotation>-0.07112268338379367</rotation> <position> <x>-278.37500000000006</x> <y>123.72500000000002</y> </position> <width>96.39369792678355</width> <height>4</height> <goalBlock>false</goalBlock> <joints> <jointedTo>1</jointedTo> <jointedTo>0</jointedTo> </joints> </HollowRod> </playerBlocks> <start> <position> <x>-301</x> <y>41.85</y> </position> <width>274.8</width> <height>280.1</height> </start> <end> <position> <x>146.55</x> <y>-52.300000000000004</y> </position> <width>164.9</width> <height>183.2</height> </end> </level> </retrieveLevel> </level2> <level3> <retrieveLevel> <levelId>14</levelId> <tutorialNumber>3</tutorialNumber> <name>Easy As Pie</name> <level> <levelBlocks> <StaticCircle> <rotation>0</rotation> <position> <x>83.94999999999997</x> <y>278.80000000000007</y> </position> <width>108.1</width> <height>108.1</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>0</rotation> <position> <x>395.65</x> <y>180.3</y> </position> <width>630.7</width> <height>19</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3069971628664862</rotation> <position> <x>402.2000000000001</x> <y>282.5</y> </position> <width>644.5</width> <height>16.7</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.30900981675940253</rotation> <position> <x>259.8499999999999</x> <y>277.4</y> </position> <width>362</width> <height>100.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>314.3</x> <y>214.6</y> </position> <width>438.3</width> <height>68.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.30957547603700286</rotation> <position> <x>459.85</x> <y>248.85000000000005</y> </position> <width>453.2000000000001</width> <height>16.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.13568348287377818</rotation> <position> <x>661.6999999999998</x> <y>190.3</y> </position> <width>75.2</width> <height>23</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>544.2</x> <y>202.2</y> </position> <width>133.6</width> <height>45.900000000000006</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.2940495524427015</rotation> <position> <x>506.3</x> <y>230.60000000000008</y> </position> <width>298.5</width> <height>37.6</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>193.15000000000003</x> <y>250.45</y> </position> <width>50</width> <height>50</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>663.8000000000001</x> <y>296.3</y> </position> <width>62.6</width> <height>62.6</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.4269466595720473</rotation> <position> <x>548.9499999999999</x> <y>296.90000000000003</y> </position> <width>243.5</width> <height>29.8</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>0</rotation> <position> <x>557.9999999999998</x> <y>343.65000000000003</y> </position> <width>235.8</width> <height>31.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticRectangle> <rotation>-0.3742209110809005</rotation> <position> <x>605.35</x> <y>303.95000000000005</y> </position> <width>89.2</width> <height>81.9</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> <StaticCircle> <rotation>0</rotation> <position> <x>547.25</x> <y>323.1000000000001</y> </position> <width>33.4</width> <height>33.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>510.4500000000001</x> <y>326.55000000000007</y> </position> <width>16.7</width> <height>16.7</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>442.45</x> <y>344.45</y> </position> <width>15.2</width> <height>15.2</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticCircle> <rotation>0</rotation> <position> <x>706.5500000000001</x> <y>182.35</y> </position> <width>12.4</width> <height>12.4</height> <goalBlock>false</goalBlock> <joints/> </StaticCircle> <StaticRectangle> <rotation>-0.0015385844126063195</rotation> <position> <x>342.45000000000016</x> <y>-39.8</y> </position> <width>473.8</width> <height>27.3</height> <goalBlock>false</goalBlock> <joints/> </StaticRectangle> </levelBlocks> <playerBlocks> <NoSpinWheel id="0"> <rotation>0</rotation> <position> <x>200</x> <y>144</y> </position> <width>40</width> <height>40</height> <goalBlock>true</goalBlock> <joints/> </NoSpinWheel> <ClockwiseWheel id="1"> <rotation>0</rotation> <position> <x>115</x> <y>145</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </ClockwiseWheel> <ClockwiseWheel id="2"> <rotation>0</rotation> <position> <x>145.04999999999998</x> <y>-79.55</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </ClockwiseWheel> <NoSpinWheel id="3"> <rotation>0</rotation> <position> <x>227.55</x> <y>-80.55</y> </position> <width>40</width> <height>40</height> <goalBlock>false</goalBlock> <joints/> </NoSpinWheel> <SolidRod id="4"> <rotation>3.129472035047703</rotation> <position> <x>186.3</x> <y>-80.05</y> </position> <width>82.5060603834652</width> <height>8</height> <goalBlock>false</goalBlock> <joints> <jointedTo>3</jointedTo> <jointedTo>2</jointedTo> </joints> </SolidRod> </playerBlocks> <start> <position> <x>151.3</x> <y>52.2</y> </position> <width>248.4</width> <height>321.5</height> </start> <end> <position> <x>597.8000000000001</x> <y>118.25</y> </position> <width>119.7</width> <height>115.3</height> </end> </level> </retrieveLevel> </level3> </tutorialLevels> ); } public static function getTutorialListXML():XML{ return (<tutorialLevelList> <levelCount>3</levelCount> <level> <levelName>How to Create</levelName> <description></description> <levelId>264</levelId> <tutorialNumber>1</tutorialNumber> </level> <level> <levelName>How to Edit</levelName> <description></description> <levelId>266</levelId> <tutorialNumber>2</tutorialNumber> </level> <level> <levelName>Easy As Pie</levelName> <description></description> <levelId>14</levelId> <tutorialNumber>3</tutorialNumber> </level> </tutorialLevelList> ); } } }//package contraption.data
Section 85
//Button (contraption.menu.Button) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.geom.*; import flash.text.*; public class Button extends MovieClip implements ActionContainer { protected var buttonHeight:int; public var userId:int;// = 0 public var tutorialNumber:int;// = 0 protected var isInitialized:Boolean;// = false protected var downEvent:String; protected var toolTip:String; protected var overrideDownEvent:String; public var levelNumber:int;// = 0 protected var buttonWidth:int; public var userName:String; protected var isEnabled:Boolean;// = true public var designId:int;// = 0 protected var text:TextField; public var levelId:int;// = 0 public function Button(_arg1:String=""){ gotoAndPlay(1); addEventListener(MouseEvent.MOUSE_DOWN, buttonPress); addEventListener(MouseEvent.ROLL_OVER, mouseOver); addEventListener(MouseEvent.ROLL_OUT, mouseOut); if (buttonWidth != 0){ initialize(); }; } public function setToolTip(_arg1:String):void{ this.toolTip = _arg1; } protected function initialize():void{ if (isInitialized){ return; }; graphics.beginFill(0, 0); graphics.drawRect(0, 0, buttonWidth, buttonHeight); isInitialized = true; } public function enable():void{ isEnabled = true; transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0); } public function setDownEvent(_arg1:String):void{ overrideDownEvent = _arg1; } public function getAllowableActions():Actions{ var _local1:Actions = new Actions(); if (isEnabled){ _local1.button = true; }; return (_local1); } protected function mouseOver(_arg1:MouseEvent):void{ var _local2:TooltipEvent; initialize(); if (toolTip){ _local2 = new TooltipEvent(TooltipEvent.ADD_TOOLTIP, true, true); _local2.toolTip = toolTip; dispatchEvent(_local2); }; } public function setAllowableActions(_arg1:Actions):void{ } protected function mouseOut(_arg1:MouseEvent):void{ if (toolTip){ dispatchEvent(new TooltipEvent(TooltipEvent.REMOVE_TOOLTIP, true, true)); }; } public function disable():void{ isEnabled = false; var _local1:ColorTransform = new ColorTransform(0.8, 0.8, 0.8, 1, 0, 0, 0, 0); transform.colorTransform = _local1; } protected function buttonPress(_arg1:MouseEvent):void{ var _local2:MenuEvent; if (!isEnabled){ return; }; if (overrideDownEvent != null){ downEvent = overrideDownEvent; }; if (downEvent != null){ _local2 = new MenuEvent(downEvent, true, true); _local2.levelId = levelId; _local2.levelNumber = levelNumber; _local2.tutorialNumber = tutorialNumber; _local2.designId = designId; _local2.userId = userId; _local2.userName = userName; dispatchEvent(_local2); }; } } }//package contraption.menu
Section 86
//BuyGameMenu (contraption.menu.BuyGameMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; public class BuyGameMenu extends ModalMenu { protected var canvas:Sprite; public function BuyGameMenu():void{ super("", false); var _local1:MovieClip = new BuyMenuBackground(); _local1.x = 100; _local1.y = 50; addChild(_local1); canvas = new Sprite(); addChild(canvas); setMenu(); } protected function setMenu():void{ var _local1:User; var _local2:TextArea; var _local3:TextArea; var _local4:TextArea; var _local5:Button; var _local6:Button; var _local7:Button; removeChild(canvas); canvas = new Sprite(); addChild(canvas); _local1 = User.getInstance(); _local2 = new TextArea("", 14); _local2.bold(); _local2.setHtmlText((((((("Thank you for playing Fantastic Contraption!\n" + "When you buy the full version for only $10 you:\n\n") + "<ul><li>Make your own levels</li>\n") + "<li>Share your levels with other people</li>\n") + "<li>Play levels other people have made</li>\n") + "<li>Support independent game deveopment</li>\n") + "<li>Get the really excelent full music</li></ul>")); _local2.x = 160; _local2.y = 125; canvas.addChild(_local2); if (_local1.isLoggedIn()){ _local2 = new TextArea("Now Registering:", 14); _local2.bold(); _local2.x = 160; _local2.y = 250; canvas.addChild(_local2); _local2 = new TextArea("User Name:", 14); _local2.bold(); _local2.x = 170; _local2.y = 270; canvas.addChild(_local2); _local2 = new TextArea("Email:", 14); _local2.bold(); _local2.x = 170; _local2.y = 290; canvas.addChild(_local2); _local3 = new TextArea(_local1.getUserName(), 14); _local3.bold(); _local3.x = 260; _local3.y = 270; canvas.addChild(_local3); _local4 = new TextArea(_local1.getEmail(), 14); _local4.bold(); _local4.x = 260; _local4.y = 290; canvas.addChild(_local4); _local5 = new BuyGameButton(); _local5.x = 280; _local5.y = 310; canvas.addChild(_local5); _local5.addEventListener(MenuEvent.BUY_GAME, buyGame); _local6 = new UpdateUserInfoButton(); _local6.x = 215; _local6.y = 375; canvas.addChild(_local6); _local7 = new SmallCancelButton(); _local7.x = 355; _local7.y = 375; canvas.addChild(_local7); } else { _local2 = new TextArea("First you have to sign in or register (only takes a second)", 14); _local2.bold(); _local2.x = 160; _local2.y = 270; canvas.addChild(_local2); _local7 = new SmallCancelButton(); _local7.x = 355; _local7.y = 375; canvas.addChild(_local7); }; } override public function refresh():void{ setMenu(); } protected function buyGame(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:URLLoader = new URLLoader(); var _local3:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/buy.php")); var _local4:URLVariables = new URLVariables(); _local4.versionName = Contraption.VERSION_NAME; _local4.versionNumber = Contraption.VERSION_NUMBER; _local3.data = _local4; _local3.method = URLRequestMethod.GET; _local2.load(_local3); var _local5:User = User.getInstance(); _local3 = new URLRequest("https://www.paypal.com/cgi-bin/webscr"); _local4 = new URLVariables(); _local4.cmd = "_xclick"; _local4.business = "AR@inxile.net"; _local4.item_name = "Fantastic Contraption"; _local4.amount = "10.00"; _local4.shipping = "0.00"; _local4.no_shipping = "1"; _local4.no_note = "1"; _local4.currency_code = "USD"; _local4.tax = "0.00"; _local4.lc = "US"; _local4.bn = "PP-BuyNowBF"; _local4.on0 = "userID"; _local4.os0 = _local5.getUserId(); _local3.data = _local4; _local3.method = URLRequestMethod.POST; navigateToURL(_local3); } } }//package contraption.menu
Section 87
//CompletedLevelMenu (contraption.menu.CompletedLevelMenu) package contraption.menu { import flash.events.*; import contraption.*; public class CompletedLevelMenu extends ModalMenu { protected var levelNumber:int; protected var levelId:int; public function CompletedLevelMenu(_arg1:int, _arg2:int):void{ var _local3:Button; var _local4:Button; var _local5:Button; var _local6:Button; super("Victory!"); this.levelNumber = _arg1; this.levelId = _arg2; if (_arg2 != 0){ if (((((!(User.getInstance().isRegistered())) && ((_arg1 >= 1000)))) && ((_arg1 <= 1010)))){ } else { if (_arg1 != 0){ _local6 = new NextLevelButton(); _local6.x = 230; _local6.y = 210; addChild(_local6); _local6.addEventListener(MenuEvent.LOAD_LEVEL, loadLevel); }; }; _local4 = new BackToMenuButton(); _local4.x = 370; _local4.y = 270; addChild(_local4); _local4.addEventListener(MenuEvent.MENU_BACK, backToMenu); _local5 = new SmallSaveButton(); _local5.x = 370; _local5.y = 210; addChild(_local5); _local5.addEventListener(MouseEvent.MOUSE_DOWN, save); }; _local3 = new SmallBackButton(); _local3.x = 230; _local3.y = 270; addChild(_local3); } protected function backToMenu(_arg1:Event):void{ _arg1.stopPropagation(); dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); } protected function save(_arg1:Event):void{ dispatchEvent(new SaveEvent(MenuEvent.SAVE_CONTRAPTION, true, true)); } protected function loadLevel(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_OFFICIAL_LEVEL, true, true); _local2.levelNumber = (levelNumber + 1); dispatchEvent(_local2); } } }//package contraption.menu
Section 88
//CompletedTutorialLevelMenu (contraption.menu.CompletedTutorialLevelMenu) package contraption.menu { import flash.events.*; public class CompletedTutorialLevelMenu extends ModalMenu { protected var tutorialNumber:int; public function CompletedTutorialLevelMenu(_arg1:int):void{ var _local3:Button; var _local4:TextArea; super("Victory!"); this.tutorialNumber = _arg1; var _local2:Button = new ContinueTutorialButton(); _local2.x = 220; _local2.y = 300; addChild(_local2); if (_arg1 < 3){ _local2.addEventListener(MouseEvent.MOUSE_DOWN, loadTutorial); _local4 = new TextArea(); _local4.setText(("You have finished this tutorial level.\n" + "Let's move on to the next one.")); _local4.x = 0xFF; _local4.y = 200; addChild(_local4); } else { _local2.addEventListener(MouseEvent.MOUSE_DOWN, startLevels); _local4 = new TextArea(); _local4.setText((("Congratulations!\nYou've finished the tutorials.\n" + "From here on you're on your own.\n") + "Good luck and have fun!")); _local4.x = 0xFF; _local4.y = 190; addChild(_local4); }; _local3 = new BackToMenuButton(); _local3.x = 370; _local3.y = 300; addChild(_local3); _local3.addEventListener(MenuEvent.MENU_BACK, backToMenu); } protected function startLevels(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_OFFICIAL_LEVEL, true, true); _local2.levelNumber = 1; dispatchEvent(_local2); } protected function backToMenu(_arg1:Event):void{ _arg1.stopPropagation(); dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); } protected function loadTutorial(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_TUTORIAL_LEVEL, true, true); _local2.tutorialNumber = (tutorialNumber + 1); dispatchEvent(_local2); } } }//package contraption.menu
Section 89
//Dashboard (contraption.menu.Dashboard) package contraption.menu { import flash.events.*; import flash.display.*; import flash.text.*; public class Dashboard extends MovieClip { public var dynamicCircleButton:DashboardButton; public var tooltip:TextField; public var zoomOutButton:DashboardButton; public var dynamicSquareButton:DashboardButton; public var saveButton:DashboardButton; protected var mode:String; public var staticCircleButton:DashboardButton; public var zoomInButton:DashboardButton; public var hollowRodButton:DashboardButton; public var goButton:DashboardButton; public var staticSquareButton:DashboardButton; protected var fatInitFunction:Function; public var npWheelButton:DashboardButton; public var stopButton:DashboardButton; public var goalCircleButton:DashboardButton; public var ccwWheelButton:DashboardButton; public var cwWheelButton:DashboardButton; public var deleteButton:DashboardButton; public var goalSquareButton:DashboardButton; public var testLevelButton:DashboardButton; public var stopButtonPing:MovieClip; public var moveButton:DashboardButton; protected var hilightedButton:DashboardButton; public var solidRodButton:DashboardButton; public var backButton:DashboardButton; public static const MODE_TEST_LEVEL:String = "testLevel"; public static const MODE_EDIT_LEVEL:String = "editLevel"; public static const MODE_EDIT_CONTRPATION:String = "editContraption"; public function Dashboard(_arg1:String="editContraption"){ this.mode = _arg1; addEventListener(MouseEvent.MOUSE_DOWN, buttonPress); } protected function init():void{ zoomInButton.init(DashboardEvent.ZOOM_IN, "Zoom In", this); zoomOutButton.init(DashboardEvent.ZOOM_OUT, "Zoom Out", this); if (mode == MODE_EDIT_LEVEL){ testLevelButton.init(DashboardEvent.TEST_LEVEL, "Make a test contraption to test your level", this); goalCircleButton.init(DashboardEvent.GOAL_CIRCLE, "Goal Circle: these must be moved to the end area to win the level", this); goalSquareButton.init(DashboardEvent.GOAL_SQUARE, "Goal Square: these must be moved to the end area to win the level", this); staticCircleButton.init(DashboardEvent.STATIC_CIRCLE, "Static Circle: these form unmovable terrain", this); staticSquareButton.init(DashboardEvent.STATIC_SQUARE, "Static Square: these form unmovable terrain", this); dynamicCircleButton.init(DashboardEvent.DYNAMIC_CIRCLE, "Dynamic Circle: these form movable objects affected by gravity", this); dynamicSquareButton.init(DashboardEvent.DYNAMIC_SQUARE, "Dynamic Square: these form movable objects affected by gravity", this); } else { goButton.init(DashboardEvent.GO, "Start contraption (Space)", this); stopButton.init(DashboardEvent.STOP, "Stop and build contraption (Space)", this); cwWheelButton.init(DashboardEvent.CW_WHEEL, "Clockwise wheels (W): will turn if a rod is connected to the center joint", this); ccwWheelButton.init(DashboardEvent.CCW_WHEEL, "Counter-Clockwise wheels (C): will turn if a rod is connected to the center joint", this); npWheelButton.init(DashboardEvent.NP_WHEEL, "Un-Powered wheels (U): will roll if pushed, but not on their own", this); hollowRodButton.init(DashboardEvent.HOLLOW_ROD, "Water rod (R): can pass through other rods but not through the environment", this); solidRodButton.init(DashboardEvent.SOLID_ROD, "Solid wood rods (S): will collide with other solid wood rods", this); moveButton.init(DashboardEvent.MOVE, "Move stuff (Shift-click): click and drag to move", this); deleteButton.init(DashboardEvent.DELETE, "Delete stuff (Ctrl-click): click near items to remove", this); hilightButton(solidRodButton); }; if (mode != MODE_TEST_LEVEL){ saveButton.init(DashboardEvent.SAVE, "Save your contraption online", this); backButton.init(DashboardEvent.BACK, "Return to main menu: unsaved contraption will be lost!", this); } else { backButton.init(DashboardEvent.BACK, "Go back to editing level: this contraption can't be saved", this); }; backButton.addEventListener(MouseEvent.MOUSE_DOWN, backButtonPress); } public function setMode(_arg1:String):void{ this.mode = _arg1; } protected function buttonPress(_arg1:MouseEvent):void{ _arg1.stopPropagation(); } public function hilightButton(_arg1:DashboardButton):void{ if (hilightedButton == _arg1){ return; }; if (hilightedButton != null){ hilightedButton.state = DashboardButton.UP; }; _arg1.state = DashboardButton.DOWN; hilightedButton = _arg1; setTooltip(hilightedButton.tooltip); } public function setTooltip(_arg1:String):void{ if (_arg1 == null){ if (hilightedButton != null){ tooltip.text = hilightedButton.tooltip; } else { tooltip.text = ""; }; } else { tooltip.text = _arg1; }; } protected function backButtonPress(_arg1:MouseEvent):void{ var _local2:MenuEvent = new MenuEvent(MenuEvent.MENU_BACK, true, true); dispatchEvent(_local2); } public function initFat():void{ fatInitFunction(mode); } public function pingStopButton():void{ stopButtonPing.gotoAndPlay(1); } } }//package contraption.menu
Section 90
//DashboardButton (contraption.menu.DashboardButton) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; public class DashboardButton extends SimpleButton implements ActionContainer { protected var currentState:String;// = "up" protected var dashboard:Dashboard; public var eventType:String;// = null protected var origUpState:DisplayObject; public var tooltip:String; public static const DOWN:String = "down"; public static const OVER:String = "over"; public static const UP:String = "up"; public function DashboardButton(){ tabEnabled = false; addEventListener(MouseEvent.MOUSE_DOWN, buttonPress); } public function set state(_arg1:String):void{ if (currentState == _arg1){ return; }; currentState = _arg1; if (origUpState == null){ origUpState = upState; }; if (_arg1 == "up"){ upState = origUpState; } else { if (_arg1 == "over"){ upState = overState; } else { if (_arg1 == "down"){ upState = downState; }; }; }; } protected function removeTooltip(_arg1:Event):void{ dashboard.setTooltip(null); } protected function addTooltip(_arg1:Event):void{ dashboard.setTooltip(tooltip); } public function init(_arg1:String, _arg2:String, _arg3:Dashboard):void{ this.eventType = _arg1; this.tooltip = _arg2; this.dashboard = _arg3; overState.addEventListener(Event.ADDED_TO_STAGE, addTooltip); downState.addEventListener(Event.ADDED_TO_STAGE, addTooltip); upState.addEventListener(Event.ADDED_TO_STAGE, removeTooltip); } public function get state():String{ return (currentState); } public function getAllowableActions():Actions{ throw ("sad"); } protected function buttonPress(_arg1:MouseEvent):void{ var _local2:DashboardEvent = new DashboardEvent(eventType, true, true); dispatchEvent(_local2); } public function setAllowableActions(_arg1:Actions):void{ } } }//package contraption.menu
Section 91
//DashboardEvent (contraption.menu.DashboardEvent) package contraption.menu { import flash.events.*; public class DashboardEvent extends Event { public static const STATIC_CIRCLE:String = "staticCircle"; public static const STOP:String = "stop"; public static const GOAL_CIRCLE:String = "goalCircle"; public static const ZOOM_OUT:String = "zoomOut"; public static const SAVE:String = "save"; public static const STATIC_SQUARE:String = "staticSquare"; public static const ZOOM_IN:String = "zoomIn"; public static const HOLLOW_ROD:String = "hollowRod"; public static const MOVE:String = "move"; public static const GOAL_SQUARE:String = "goalSquare"; public static const GO:String = "go"; public static const DELETE:String = "delete"; public static const CW_WHEEL:String = "cwWheel"; public static const SOLID_ROD:String = "solidRod"; public static const BACK:String = "back"; public static const TEST_LEVEL:String = "testLevel"; public static const CCW_WHEEL:String = "ccwWheel"; public static const DYNAMIC_SQUARE:String = "dynamicSquare"; public static const NP_WHEEL:String = "npWheel"; public static const DYNAMIC_CIRCLE:String = "dynamicCircle"; public function DashboardEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } override public function clone():Event{ return (new DashboardEvent(type)); } } }//package contraption.menu
Section 92
//DesignLinkMenu (contraption.menu.DesignLinkMenu) package contraption.menu { import flash.events.*; import flash.net.*; public class DesignLinkMenu extends ModalMenu { private var designLink:String; public function DesignLinkMenu(_arg1:int):void{ super("Link"); designLink = ""; var _local2:TextArea = new TextArea(); _local2.setText(((("Anyone who uses this link will \n" + "get to see your Fantastic Contraption.\n\n") + "You can copy and paste it to your friends,\n") + "post it on your blog, a forum, or whatever!")); _local2.x = 230; _local2.y = 190; addChild(_local2); _local2 = new TextArea(((Contraption.SERVER_LOCATION + "/?designId=") + _arg1), 12); _local2.mouseEnabled = true; _local2.bold(); _local2.x = 230; _local2.y = 290; designLink = _local2.text; var _local3:LinkButton = new LinkButton(_local2.text); _local3.x = 190; _local3.y = 290; addChild(_local3); _local3.addEventListener(MouseEvent.MOUSE_DOWN, linkToDesign); var _local4:Button = new SmallBackButton(); _local4.x = 0xFF; _local4.y = 320; addChild(_local4); } private function linkToDesign(_arg1:Event):void{ var _local2:URLRequest = new URLRequest(designLink); navigateToURL(_local2); } } }//package contraption.menu
Section 93
//LevelLinkMenu (contraption.menu.LevelLinkMenu) package contraption.menu { import flash.events.*; import flash.net.*; public class LevelLinkMenu extends ModalMenu { private var designLink:String; public function LevelLinkMenu(_arg1:int):void{ var _local4:Button; super("Link"); var _local2:TextArea = new TextArea(); _local2.setText(((("Anyone who uses this link will be \n" + "transported to this saved level.\n\n") + "You can copy and paste it to your friends,\n") + "post it on your blog, a forum, or whatever!")); _local2.x = 230; _local2.y = 190; addChild(_local2); _local2 = new TextArea(("http://FantasticContraption.com/?levelId=" + _arg1), 12); _local2.mouseEnabled = true; _local2.bold(); _local2.x = 230; _local2.y = 290; designLink = _local2.text; var _local3:LinkButton = new LinkButton(_local2.text); _local3.x = 210; _local3.y = 290; addChild(_local3); _local3.addEventListener(MouseEvent.MOUSE_DOWN, linkToDesign); _local4 = new SmallBackButton(); _local4.x = 0xFF; _local4.y = 320; addChild(_local4); } private function linkToDesign(_arg1:Event):void{ var _local2:URLRequest = new URLRequest(designLink); navigateToURL(_local2); } } }//package contraption.menu
Section 94
//LinkButton (contraption.menu.LinkButton) package contraption.menu { import flash.events.*; import contraption.*; import flash.text.*; public class LinkButton extends TextField implements ActionContainer { protected var enabled:Boolean;// = true protected var format:TextFormat; protected var downEvent:String; public var levelId:int; public function LinkButton(_arg1:String, _arg2:int=13, _arg3:String="arial", _arg4:Boolean=false):void{ this.text = _arg1; textColor = 0xFF; format = new TextFormat(); format.font = _arg3; format.bold = true; format.size = _arg2; setTextFormat(format); autoSize = "left"; selectable = false; if (!_arg4){ addEventListener(MouseEvent.ROLL_OVER, mouseOver); addEventListener(MouseEvent.ROLL_OUT, mouseOut); }; addEventListener(MouseEvent.MOUSE_DOWN, buttonPress); } public function enable():void{ textColor = 0xFF; enabled = true; } public function disable():void{ textColor = 0xDDDDDD; enabled = false; } protected function mouseOut(_arg1:MouseEvent):void{ removeUnderline(); } public function addUnderline():void{ format.underline = true; setTextFormat(format); } public function removeUnderline():void{ format.underline = false; setTextFormat(format); } protected function buttonPress(_arg1:MouseEvent):void{ var _local2:MenuEvent; if (downEvent != null){ _local2 = new MenuEvent(downEvent, true, true); _local2.levelId = levelId; dispatchEvent(_local2); }; } public function getAllowableActions():Actions{ var _local1:Actions = new Actions(); if (enabled){ _local1.button = true; }; return (_local1); } public function setDownEvent(_arg1:String):void{ downEvent = _arg1; } protected function mouseOver(_arg1:MouseEvent):void{ addUnderline(); } public function setAllowableActions(_arg1:Actions):void{ } } }//package contraption.menu
Section 95
//LinkedIntoBadLevelMenu (contraption.menu.LinkedIntoBadLevelMenu) package contraption.menu { import flash.display.*; public class LinkedIntoBadLevelMenu extends ModalMenu { protected var canvas:Sprite; public function LinkedIntoBadLevelMenu():void{ var _local3:Button; super("Restricted"); var _local1:TextArea = new TextArea(); _local1.setText(((("Sorry! You need to buy the full version of the \n" + "game to see solutions to this player-made level.\n\n") + "But you can still play the game!\n") + "Or you can register for $10 and have\nfull access to The Fantastic Contraption.")); _local1.x = 230; _local1.y = 190; addChild(_local1); var _local2:Button = new PlayGameButton(); _local2.x = 230; _local2.y = 310; addChild(_local2); _local3 = new BuyGameButton(); _local3.x = 360; _local3.y = 310; addChild(_local3); } } }//package contraption.menu
Section 96
//LinkInMenu (contraption.menu.LinkInMenu) package contraption.menu { import flash.events.*; import flash.display.*; public class LinkInMenu extends ModalMenu { protected var canvas:Sprite; public function LinkInMenu():void{ var _local2:Button; super("Welcome"); addChild(new LinkedInOverlay()); var _local1:TextArea = new TextArea((((("Welcome to Fantastic Contraption!\n\n" + "Someone built this machine and thought you'd \nlike it. ") + "Press continue and then the start button \nto watch it go. ") + "To play the game and make your \nown contraptions, ") + "press the red back arrow.")); _local1.x = 230; _local1.y = 190; _local1.width = 430; _local1.height = 400; addChild(_local1); _local2 = new ContinueButton(); _local2.x = 270; _local2.y = 310; addChild(_local2); _local2.addEventListener(MenuEvent.MENU_BACK, closeMenu); } public function closeMenu(_arg1:Event):void{ _arg1.stopPropagation(); parent.removeChild(this); } } }//package contraption.menu
Section 97
//LogInMenu (contraption.menu.LogInMenu) package contraption.menu { import flash.events.*; import contraption.*; public class LogInMenu extends ModalMenu { protected var passwordField:TextBox; protected var validationError:TextArea; protected var nameField:TextBox; public function LogInMenu():void{ var _local1:TextArea; var _local4:LinkButton; super("Sign In"); validationError = new TextArea(""); validationError.x = 250; validationError.y = 0xFF; validationError.textColor = 16720418; validationError.width = 250; addChild(validationError); _local1 = new TextArea("User Name:"); _local1.x = 250; _local1.y = 190; addChild(_local1); _local1 = new TextArea("Password:"); _local1.x = 250; _local1.y = 220; addChild(_local1); nameField = new TextBox(100, 20, 15); nameField.x = 330; nameField.y = 190; addChild(nameField); passwordField = new TextBox(100, 20, 15, true); passwordField.x = 330; passwordField.y = 220; addChild(passwordField); var _local2:Button = new LogInButton(); _local2.x = 230; _local2.y = 280; addChild(_local2); _local2.addEventListener(MenuEvent.LOG_IN, login); var _local3:Button = new SmallCancelButton(); _local3.x = 360; _local3.y = 280; addChild(_local3); _local4 = new LinkButton("forgot your password?"); _local4.width = 200; _local4.x = 295; _local4.y = 335; addChild(_local4); _local4.addEventListener(MouseEvent.MOUSE_DOWN, resetPassword); } override public function disposeMenu():void{ var _local1:User = User.getInstance(); _local1.removeEventListener(MenuEvent.LOGGED_IN, loginComplete); _local1.removeEventListener(MenuEvent.LOG_IN_FAILED, loginFailed); _local1.removeEventListener(MenuEvent.ADD_SPINNER, addSpinner); _local1.removeEventListener(MenuEvent.REMOVE_SPINNER, removeSpinner); } protected function loginComplete(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); dispatchEvent(new MenuEvent(MenuEvent.LOGGED_IN, true, true)); } protected function loginFailed(_arg1:Event):void{ validationError.text = "Oops, Wrong user name or password"; } protected function login(_arg1:MenuEvent):void{ _arg1.stopPropagation(); validationError.text = ""; var _local2:User = User.getInstance(); _local2.addEventListener(MenuEvent.LOGGED_IN, loginComplete, false, 0, true); _local2.addEventListener(MenuEvent.LOG_IN_FAILED, loginFailed, false, 0, true); _local2.addEventListener(MenuEvent.ADD_SPINNER, addSpinner, false, 0, true); _local2.addEventListener(MenuEvent.REMOVE_SPINNER, removeSpinner, false, 0, true); _local2.logIn(nameField.getText(), passwordField.getText()); } protected function resetPassword(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.RESET_PASSWORD)); } } }//package contraption.menu
Section 98
//LoginPanel (contraption.menu.LoginPanel) package contraption.menu { import flash.display.*; import contraption.*; public class LoginPanel extends Sprite { protected var userNameField:TextArea; protected var loggedOutPanel:Sprite; protected var loggedInPanel:Sprite; public function LoginPanel(){ var _local1:Button; super(); loggedInPanel = new Sprite(); addChild(loggedInPanel); loggedOutPanel = new Sprite(); addChild(loggedOutPanel); userNameField = new TextArea("", 12); userNameField.x = 15; userNameField.y = 10; userNameField.textColor = 0x663300; userNameField.bold(); loggedInPanel.addChild(userNameField); _local1 = new LogOutButton(); _local1.x = 10; _local1.y = 180; loggedInPanel.addChild(_local1); setPanel(); } protected function setPanel():void{ var _local1:User = User.getInstance(); loggedInPanel.visible = false; loggedOutPanel.visible = false; if (_local1.isLoggedIn()){ loggedInPanel.visible = true; userNameField.setText(_local1.getUserName()); } else { loggedOutPanel.visible = true; }; } public function refresh():void{ setPanel(); } } }//package contraption.menu
Section 99
//LostPasswordMenu (contraption.menu.LostPasswordMenu) package contraption.menu { import flash.events.*; import contraption.*; public class LostPasswordMenu extends ModalMenu { protected var validationError:TextArea; protected var emailField:TextBox; protected var nameField:TextBox; public function LostPasswordMenu():void{ var _local1:TextArea; super("Lost Pass"); validationError = new TextArea(""); validationError.x = 230; validationError.y = 190; validationError.textColor = 16720418; validationError.width = 250; addChild(validationError); _local1 = new TextArea("User Name:"); _local1.x = 270; _local1.y = 220; addChild(_local1); _local1 = new TextArea("Email Address:"); _local1.x = 250; _local1.y = 250; addChild(_local1); nameField = new TextBox(100, 20, 15); nameField.x = 350; nameField.y = 220; addChild(nameField); emailField = new TextBox(150, 20, 100); emailField.x = 350; emailField.y = 250; addChild(emailField); var _local2:Button = new ResetPasswordButton(); _local2.x = 230; _local2.y = 300; addChild(_local2); _local2.addEventListener(MenuEvent.RESET_PASSWORD, resetPassword); var _local3:Button = new SmallCancelButton(); _local3.x = 360; _local3.y = 300; addChild(_local3); } protected function resetComplete(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); } protected function resetPassword(_arg1:MenuEvent):void{ _arg1.stopPropagation(); validationError.text = ""; var _local2:User = User.getInstance(); _local2.addEventListener(MenuEvent.RESET_PASSWORD, resetComplete, false, 0, true); _local2.addEventListener(MenuEvent.RESET_PASSWORD_FAILED, resetFailed, false, 0, true); _local2.resetPassword(nameField.getText(), emailField.getText()); } protected function resetFailed(_arg1:Event):void{ validationError.text = "The User Name and Email Address do not match"; } } }//package contraption.menu
Section 100
//MainMenu (contraption.menu.MainMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; import contraption.data.*; public class MainMenu extends MenuWindow { protected var savedDesignsButton:Button; protected var learnToPlayButton:Button; public var pagingData:PagingData; protected var pageCount:TextArea; protected var loginPanel:LoginPanel; protected var regButton:SimpleButton; protected var levelsCanvas:Sprite; protected var savedLevelsButton:Button; protected var viewingSolutions:Boolean;// = false public function MainMenu():void{ var _local1:Button; var _local4:SimpleButton; loginPanel = new LoginPanel(); super(false); addChild(new MenuBackground()); loginPanel = new LoginPanel(); addChild(loginPanel); learnToPlayButton = new LearnToPlayButton(); learnToPlayButton.x = 427; learnToPlayButton.y = 165; addChild(learnToPlayButton); learnToPlayButton.addEventListener(MouseEvent.MOUSE_DOWN, previousPage, false, 0, true); pageCount = new TextArea(); pageCount.x = 390; pageCount.y = 155; pageCount.bold(); pageCount.textColor = 0x663300; addChild(pageCount); _local1 = new PreviousPageButton(); _local1.x = 340; _local1.y = 150; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, previousPage, false, 0, true); _local1 = new NextPageButton(); _local1.x = 480; _local1.y = 150; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, nextPage, false, 0, true); addEventListener(MenuEvent.LOGGED_OUT, setLoginPanel, false, 0, true); addEventListener(MenuEvent.LOG_OUT, logOut, false, 0, true); setRegButton(); pagingData = new PagingData(12, 1); levelsCanvas = new Sprite(); addChild(levelsCanvas); listLevels(); var _local2:SimpleButton = new linkto(); _local2.y = -30; addChild(_local2); _local2.addEventListener(MouseEvent.MOUSE_DOWN, linkToPortal); var _local3:SimpleButton = new SW_Button(); _local3.x = 7; _local3.y = 135; addChild(_local3); _local3.addEventListener(MouseEvent.MOUSE_DOWN, linkToSparkworkz); _local4 = new playOnIPhone(); _local4.x = 70; _local4.y = 45; addChild(_local4); _local4.addEventListener(MouseEvent.MOUSE_DOWN, linkToITunes); var _local5:SimpleButton = new Play_more_games(); _local5.x = 5; _local5.y = 105; addChild(_local5); var _local6:SimpleButton = new FC_Logo_Button(); _local6.x = 175; _local6.y = -12; addChild(_local6); _local6.addEventListener(MouseEvent.MOUSE_DOWN, linkToSite); } public function linkToSparkworkz(_arg1:Event):void{ var _local2:URLRequest = new URLRequest(Contraption.SPARKWORKZ_LOCATION); navigateToURL(_local2); } protected function loadEditor(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.LOAD_EDITOR)); } protected function renderButtons(_arg1:XML):void{ var _local6:int; var _local7:XML; var _local8:Boolean; var _local9:Button; var _local10:Button; var _local11:StartHere; pagingData.numResults = _arg1.levelCount; pageCount.setText(((("Page " + (pagingData.currentPage + 1)) + " of ") + pagingData.getNumPages())); learnToPlayButton.visible = false; removeChild(levelsCanvas); levelsCanvas = new Sprite(); addChild(levelsCanvas); var _local2:SharedObject = SharedObject.getLocal("user"); if (pagingData.currentPage == 0){ _local6 = 1; } else { _local6 = 0; }; var _local3:int = pagingData.getOffset(); if (pagingData.currentPage != 0){ _local3--; }; var _local4:int = (_local3 + pagingData.resultsPerPage); if (pagingData.currentPage == 0){ _local4--; }; var _local5:int = _local3; while ((((_local5 < _local4)) && ((_local5 < _arg1.levelCount)))) { _local7 = _arg1.level[_local5]; _local8 = (_local2.data[("level" + _local7.levelId)] == "true"); if (_local5 == 1){ _local10 = new OfficialLevelButton(0, 0, "", (_local2.data["level14"] == "true")); _local10.setDownEvent(MenuEvent.LOAD_TUTORIALS); _local10.x = 250; _local10.y = 200; levelsCanvas.addChild(_local10); _local11 = new StartHere(); _local10.addChild(_local11); _local11.x = 40; _local11.y = 5; }; _local9 = new OfficialLevelButton(_local7.levelId, _local7.levelNumber, _local7.levelName, _local8); _local9.x = (250 + ((_local6 % 2) * 220)); _local9.y = (200 + (Math.floor((_local6 / 2)) * 47)); levelsCanvas.addChild(_local9); if (_local8){ }; _local6++; _local5++; }; finishedLoading(); } protected function loadSolutions(_arg1:MenuEvent):void{ dispatchEvent(_arg1); } protected function loadUserGenLevels(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.LOAD_USER_GENERATED_LEVELS)); } protected function loadSavedLevels(_arg1:Event):void{ var _local2:User = User.getInstance(); var _local3:MenuEvent = new MenuEvent(MenuEvent.LOAD_SAVED_LEVELS); _local3.userId = _local2.getUserId(); _local3.userName = _local2.getUserName(); dispatchEvent(_local3); } protected function setLoginPanel(_arg1:Event):void{ loginPanel.refresh(); } public function linkToITunes(_arg1:Event):void{ var _local2:URLRequest = new URLRequest("http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=302309578&mt=8"); navigateToURL(_local2); } public function linkToPortal(_arg1:Event):void{ var _local2:URLRequest = new URLRequest("http://www.sparkworkz.com/portals"); navigateToURL(_local2); } override public function refresh():void{ User.getInstance().refreshRegistered(); loginPanel.refresh(); setRegButton(); listLevels(); } protected function setRegButton():void{ if (!Contraption.INCLUDE_PAYPAL_LINKS){ return; }; if (((!(User.getInstance().isRegistered())) && ((regButton == null)))){ }; if (((User.getInstance().isRegistered()) && (!((regButton == null))))){ removeChild(regButton); regButton = null; }; } protected function nextPage(_arg1:Event):void{ if (pagingData.currentPage < (pagingData.getNumPages() - 1)){ pagingData.currentPage++; }; listLevels(); } protected function logOut(_arg1:Event):void{ User.getInstance().logOut(); dispatchEvent(new MenuEvent(MenuEvent.LOGGED_OUT, true, true)); } protected function listLevels():void{ if (User.getInstance().isRegistered()){ renderButtons(OfficialLevelsExp.getLeveListXML()); } else { renderButtons(OfficialLevels.getLeveListXML()); }; } protected function registerMenu(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.BUY_GAME)); } protected function loadSavedDesigns(_arg1:Event):void{ var _local2:User = User.getInstance(); var _local3:MenuEvent = new MenuEvent(MenuEvent.LOAD_SAVED_DESIGNS); _local3.userId = _local2.getUserId(); _local3.userName = _local2.getUserName(); dispatchEvent(_local3); } protected function previousPage(_arg1:Event):void{ if (pagingData.currentPage > 0){ pagingData.currentPage--; }; listLevels(); } public function linkToSite(_arg1:Event):void{ var _local2:URLRequest = new URLRequest(Contraption.SERVER_LOCATION); navigateToURL(_local2); } protected function loadLevel(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_LEVEL); _local2.levelId = _arg1.target.levelId; dispatchEvent(_local2); } } }//package contraption.menu
Section 101
//MenuEvent (contraption.menu.MenuEvent) package contraption.menu { import flash.events.*; public class MenuEvent extends Event { public var userId:int; public var tutorialNumber:int; public var levelNumber:int; public var userName:String; public var designId:int; public var levelId:int; public static const LOAD_SAVED_LEVELS:String = "loadSavedLevels"; public static const CURTAIN_OPEN_COMPLETE:String = "curtainOpenComplete"; public static const LOGGED_IN:String = "loggedIn"; public static const LOAD_LEVEL_SOLUTIONS:String = "loadLevelSolutions"; public static const LOAD_OFFICIAL_LEVEL:String = "loadOfficialLevel"; public static const RETURN_TO_MAIN_MENU:String = "returnToMainMenu"; public static const LOG_OUT:String = "logOut"; public static const LOAD_LEVEL_LINK_MENU:String = "loadLevelLinkMenu"; public static const LOAD_USER_GENERATED_LEVELS:String = "loadUserGeneratedLevels"; public static const LOAD_LINKED_IN_MENU:String = "loadLinkedInMenu"; public static const LOAD_TUTORIALS:String = "loadTutorials"; public static const LOG_IN:String = "logIn"; public static const CHANGE_GRAPHICS_OPTION:String = "changeGraphicsOption"; public static const NEW_USER:String = "newUser"; public static const RESET_PASSWORD:String = "resetPassword"; public static const UPDATE_USER_INFO:String = "updateUserInfo"; public static const BUY_GAME:String = "buyGame"; public static const TUTORIAL_LEVEL_COMPLETE:String = "tutorialLevelComplete"; public static const LOAD_DESIGN:String = "loadDesign"; public static const LOAD_USER_MENU:String = "loadUserMenu"; public static const LEVEL_COMPLETE:String = "levelComplete"; public static const LOG_IN_FAILED:String = "loginFailed"; public static const REMOVE_SPINNER:String = "removeSpinner"; public static const TRY_LEVEL:String = "tryLevel"; public static const LOAD_TUTORIAL_LEVEL:String = "loadTutorialLevel"; public static const ADD_SPINNER:String = "addSpinner"; public static const LOAD_LEVEL:String = "loadLevel"; public static const MENU_BACK:String = "menuBack"; public static const FINISHED_LOADING:String = "finishLoading"; public static const DELETE_LEVEL:String = "deleteLevel"; public static const RESET_PASSWORD_FAILED:String = "resetPasswordFailed"; public static const DELETE_DESIGN:String = "deleteDesign"; public static const SAVE_CONTRAPTION:String = "saveDesign"; public static const LOAD_SAVED_DESIGNS:String = "loadSavedDesigns"; public static const LOAD_EDITOR:String = "loadEditor"; public static const EDIT_LEVEL:String = "editLevel"; public static const LOGGED_OUT:String = "loggedOut"; public static const LOAD_DESIGN_LINK_MENU:String = "loadDesignLinkMenu"; public static const OPEN_CURTAIN:String = "openCurtain"; public function MenuEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } override public function clone():Event{ var _local1:MenuEvent = new MenuEvent(type, bubbles, cancelable); _local1.levelId = levelId; _local1.levelNumber = levelNumber; _local1.tutorialNumber = tutorialNumber; _local1.designId = designId; _local1.userId = userId; _local1.userName = userName; return (_local1); } } }//package contraption.menu
Section 102
//MenuWindow (contraption.menu.MenuWindow) package contraption.menu { import flash.events.*; import contraption.*; public class MenuWindow extends ActionContainerImpl { public function MenuWindow(_arg1:Boolean=true){ if (_arg1){ addChild(new MenuBackground()); addChild(new MenuTopButtons()); }; } protected function returnToMainMenu(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.RETURN_TO_MAIN_MENU)); } public function removeSpinner(_arg1:Event=null):void{ dispatchEvent(new MenuEvent(MenuEvent.REMOVE_SPINNER, true, true)); } protected function menuBack(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK)); } public function addSpinner(_arg1:Event=null):void{ dispatchEvent(new MenuEvent(MenuEvent.ADD_SPINNER, true, true)); } public function finishedLoading():void{ dispatchEvent(new MenuEvent(MenuEvent.FINISHED_LOADING)); } public function refresh():void{ } public function disposeMenu():void{ } } }//package contraption.menu
Section 103
//ModalMenu (contraption.menu.ModalMenu) package contraption.menu { import flash.events.*; import flash.display.*; public class ModalMenu extends MenuWindow { public function ModalMenu(_arg1:String, _arg2:Boolean=true){ var _local3:MovieClip; var _local4:TextArea; super(false); graphics.beginFill(0xFFFFFF, 0.4); graphics.drawRect(0, 0, 700, 500); if (_arg2){ _local3 = new ModalMenuCloud(); _local3.x = 100; _local3.y = 50; addChild(_local3); _local4 = new TextArea(_arg1, 30, "contraptionFont", "center"); _local4.embedFonts = true; _local4.bold(); _local4.width = 200; _local4.x = 250; _local4.y = 130; addChild(_local4); } else { _local3 = new ModalMenuCloudMore(); _local3.x = 100; _local3.y = 50; addChild(_local3); }; addEventListener(MouseEvent.MOUSE_DOWN, stopEvent); } protected function stopEvent(_arg1:Event):void{ _arg1.stopPropagation(); } } }//package contraption.menu
Section 104
//MouseBlockingBackground (contraption.menu.MouseBlockingBackground) package contraption.menu { import contraption.*; public class MouseBlockingBackground extends ActionContainerImpl { override public function getAllowableActions():Actions{ var _local1:Actions = new Actions(); return (_local1); } } }//package contraption.menu
Section 105
//MuteButton (contraption.menu.MuteButton) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; public class MuteButton extends Button { protected var buttonGraphics:SimpleButton; public function MuteButton(){ buttonWidth = 25; buttonHeight = 25; buttonGraphics = new SoundOnButton(); addChild(buttonGraphics); setButton(); } override protected function buttonPress(_arg1:MouseEvent):void{ var _local2:Configuration = Configuration.getInstance(); _local2.setMute(!(_local2.isMuted())); setButton(); } protected function setButton():void{ removeChild(buttonGraphics); var _local1:Boolean = Configuration.getInstance().isMuted(); Music.getInstance().setMute(_local1); if (_local1){ buttonGraphics = new SoundOffButton(); } else { buttonGraphics = new SoundOnButton(); }; addChild(buttonGraphics); } } }//package contraption.menu
Section 106
//NewUserMenu (contraption.menu.NewUserMenu) package contraption.menu { import flash.events.*; import contraption.*; public class NewUserMenu extends ModalMenu { protected var passwordField:TextBox; protected var nameField:TextBox; protected var emailField:TextBox; protected var validationError:TextArea; protected var confirmPasswordField:TextBox; public function NewUserMenu():void{ var _local1:TextArea; var _local2:Button; super("New User"); validationError = new TextArea(""); validationError.x = 275; validationError.y = 170; validationError.textColor = 16720418; validationError.width = 250; validationError.height = 50; addChild(validationError); _local1 = new TextArea("User Name:"); _local1.x = 270; _local1.y = 200; addChild(_local1); _local1 = new TextArea("Email Address:"); _local1.x = 250; _local1.y = 230; addChild(_local1); _local1 = new TextArea("Password:"); _local1.x = 275; _local1.y = 260; addChild(_local1); _local1 = new TextArea("Confirm Password:"); _local1.x = 230; _local1.y = 290; addChild(_local1); nameField = new TextBox(100, 20, 15); nameField.x = 350; nameField.y = 200; addChild(nameField); emailField = new TextBox(150, 20, 100); emailField.x = 350; emailField.y = 230; addChild(emailField); passwordField = new TextBox(100, 20, 15, true); passwordField.x = 350; passwordField.y = 260; addChild(passwordField); confirmPasswordField = new TextBox(100, 20, 15, true); confirmPasswordField.x = 350; confirmPasswordField.y = 290; addChild(confirmPasswordField); _local2 = new NewUserButton(); _local2.x = 230; _local2.y = 320; addChild(_local2); _local2.addEventListener(MenuEvent.NEW_USER, newUser); var _local3:Button = new SmallCancelButton(); _local3.x = 360; _local3.y = 320; addChild(_local3); } protected function loginComplete(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); dispatchEvent(new MenuEvent(MenuEvent.LOGGED_IN)); } protected function newUserFailed(_arg1:Event):void{ validationError.text = "Aw, that user name is taken"; } protected function isValidEmail(_arg1:String):Boolean{ var _local2:RegExp = /^[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i; return (_local2.test(_arg1)); } protected function newUser(_arg1:MenuEvent):void{ _arg1.stopPropagation(); if (!validate()){ return; }; var _local2:User = User.getInstance(); _local2.addEventListener(MenuEvent.LOGGED_IN, loginComplete); _local2.addEventListener(MenuEvent.LOG_IN_FAILED, newUserFailed); _local2.newUser(nameField.getText(), emailField.getText(), passwordField.getText()); } protected function validate():Boolean{ validationError.text = ""; if (!isValidEmail(emailField.getText())){ validationError.appendText("Invalid email address\n"); }; if (passwordField.getText() != confirmPasswordField.getText()){ validationError.appendText("Password fields do not match\n"); }; if (nameField.getText() == ""){ validationError.appendText("Please enter a user name\n"); }; return ((validationError.text == "")); } } }//package contraption.menu
Section 107
//NoTabButton (contraption.menu.NoTabButton) package contraption.menu { import flash.display.*; public class NoTabButton extends SimpleButton { public function NoTabButton(){ tabEnabled = false; } } }//package contraption.menu
Section 108
//OfficialLevelButton (contraption.menu.OfficialLevelButton) package contraption.menu { import flash.events.*; import flash.display.*; import flash.text.*; public class OfficialLevelButton extends Button { protected var circle:SimpleButton; protected var origCircleUpState:DisplayObject; protected var nameLink:LinkButton; protected var levelName:String; public function OfficialLevelButton(_arg1:int, _arg2:int, _arg3:String, _arg4:Boolean){ buttonWidth = 200; buttonHeight = 40; this.levelId = _arg1; this.levelNumber = _arg2; this.levelName = _arg3; this.downEvent = MenuEvent.LOAD_OFFICIAL_LEVEL; if (_arg2 > 12){ circle = new LevelCircleRestricted(); } else { if (_arg4){ circle = new LevelCircleChecked(); } else { circle = new LevelCircle(); }; }; circle.x = 20; circle.y = 20; origCircleUpState = circle.upState; addChild(circle); var _local5:TextArea = new TextArea(_arg2.toString(), 18, "contraptionFont", TextFormatAlign.CENTER); _local5.embedFonts = true; _local5.width = 30; _local5.x = 5; _local5.y = 8; addChild(_local5); nameLink = new LinkButton(_arg3, 18, "contraptionFont", true); nameLink.embedFonts = true; nameLink.textColor = 0; nameLink.x = 45; nameLink.y = 5; addChild(nameLink); super(); } override protected function mouseOut(_arg1:MouseEvent):void{ circle.upState = origCircleUpState; nameLink.removeUnderline(); } override protected function mouseOver(_arg1:MouseEvent):void{ circle.upState = circle.overState; nameLink.addUnderline(); } } }//package contraption.menu
Section 109
//PagingData (contraption.menu.PagingData) package contraption.menu { public class PagingData { public var numResults:int; public var resultsPerPage:int; public var currentPage:int; public var additionalResults:int; public function PagingData(_arg1:int, _arg2:int=0):void{ this.numResults = 0; this.resultsPerPage = _arg1; this.currentPage = 0; this.additionalResults = _arg2; } public function getNumPages():int{ return (Math.ceil(((numResults + additionalResults) / resultsPerPage))); } public function getOffset():int{ return ((currentPage * resultsPerPage)); } } }//package contraption.menu
Section 110
//PleaseRegisterMenu (contraption.menu.PleaseRegisterMenu) package contraption.menu { import flash.events.*; import flash.display.*; import flash.net.*; public class PleaseRegisterMenu extends ModalMenu { protected var canvas:Sprite; public function PleaseRegisterMenu():void{ var _local1:Button; var _local3:TextArea; var _local4:SimpleButton; super("", false); if (Contraption.INCLUDE_PAYPAL_LINKS){ _local3 = new TextArea(((("Sorry, you need to buy the full version first!\n\n" + "For $10 you can make your own levels, \nplay other player's new levels, ") + "and watch \nsolutions to player-made levels. \n\nYou'll also be ") + "helping to support independant \ngame development.\n\n")); _local3.x = 250; _local3.y = 175; addChild(_local3); } else { _local4 = new FanCon_Link(); _local4.x = 247; _local4.y = 218; _local4.addEventListener(MouseEvent.MOUSE_DOWN, fcLinkBack); addChild(_local4); }; _local1 = new SmallBackButton(); _local1.x = 220; _local1.y = 355; addChild(_local1); var _local2:Button = new BuyGameButton(); _local2.x = 360; _local2.y = 320; if (Contraption.INCLUDE_PAYPAL_LINKS){ addChild(_local2); }; } public function linkToSite(_arg1:Event):void{ var _local2:URLRequest = new URLRequest(Contraption.SERVER_LOCATION); navigateToURL(_local2); } public function fcLinkBack(_arg1:Event):void{ var _local2:URLRequest = new URLRequest(Contraption.SERVER_LOCATION); navigateToURL(_local2); } } }//package contraption.menu
Section 111
//PublishButton (contraption.menu.PublishButton) package contraption.menu { import flash.events.*; import contraption.*; import flash.net.*; import flash.text.*; public class PublishButton extends Button { public var updateMode:int; protected var textField:TextField; public var publish:Boolean; protected var buttonGraphic:Button; public var id:int; public static var DESIGN_MODE:int = 1; public static var LEVEL_MODE:int = 0; public function PublishButton(_arg1:int, _arg2:Boolean, _arg3:int){ this.updateMode = _arg3; this.publish = _arg2; this.id = _arg1; if (this.publish){ buttonGraphic = new UnPublishButton(); } else { buttonGraphic = new DoPublishButton(); }; determineToolTip(); addChild(buttonGraphic); buttonGraphic.addEventListener(MouseEvent.MOUSE_DOWN, setPublish, false, 0, true); } protected function confirmPublish(_arg1:Event):void{ removeChild(buttonGraphic); if (publish){ buttonGraphic = new UnPublishButton(); } else { buttonGraphic = new DoPublishButton(); }; determineToolTip(); addChild(buttonGraphic); buttonGraphic.addEventListener(MouseEvent.MOUSE_DOWN, setPublish, false, 0, true); } protected function determineToolTip():void{ var _local1:String; if (publish){ _local1 = "Un-Publish: stop sharing this "; } else { _local1 = "Publish: share this "; }; if (updateMode == LEVEL_MODE){ _local1 = (_local1 + "level "); } else { _local1 = (_local1 + "contraption "); }; _local1 = (_local1 + "\nwith other users online"); buttonGraphic.setToolTip(_local1); } protected function setPublish(_arg1:Event):void{ var _local2:String; publish = !(publish); if (publish){ _local2 = "1"; } else { _local2 = "0"; }; var _local3:XML = <setPublish/> ; if (updateMode == LEVEL_MODE){ _local3.appendChild((("<levelId>" + id) + "</levelId>")); } else { _local3.appendChild((("<designId>" + id) + "</designId>")); }; _local3.appendChild((("<publish>" + _local2) + "</publish>")); var _local4:URLLoader = new URLLoader(); _local4.addEventListener(Event.COMPLETE, confirmPublish); var _local5:URLRequest = new URLRequest("http://FantasticContraption.com/setPublish.php"); var _local6:URLVariables = new URLVariables(); _local6.xml = _local3; _local6.userId = User.getInstance().getUserId(); _local6.password = User.getInstance().getPassword(); _local5.data = _local6; _local5.method = URLRequestMethod.POST; _local4.load(_local5); } } }//package contraption.menu
Section 112
//SaveContraptionMenu (contraption.menu.SaveContraptionMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; import flash.text.*; public class SaveContraptionMenu extends ModalMenu { protected var isSolution:Boolean; protected var nameField:TextBox; protected var loginMenu:Sprite; protected var saveMenu:Sprite; protected var currentLevelId:int; protected var validationError:TextField; protected var descriptionField:TextBox; protected var xml:XML; public function SaveContraptionMenu(_arg1:XML, _arg2:Boolean, _arg3:int):void{ var _local7:Button; super("Save Design"); this.xml = _arg1; this.isSolution = _arg2; this.currentLevelId = _arg3; saveMenu = new Sprite(); addChild(saveMenu); validationError = new TextArea(""); validationError.x = 270; validationError.y = 190; validationError.textColor = 16720418; validationError.width = 250; saveMenu.addChild(validationError); var _local4:TextArea = new TextArea("Name:"); _local4.x = 270; _local4.y = 220; saveMenu.addChild(_local4); _local4 = new TextArea("Description:"); _local4.x = 240; _local4.y = 250; saveMenu.addChild(_local4); nameField = new TextBox(100, 20, 15); nameField.x = 320; nameField.y = 220; saveMenu.addChild(nameField); descriptionField = new TextBox(200, 40, 50); descriptionField.x = 320; descriptionField.y = 250; saveMenu.addChild(descriptionField); var _local5:Button = new SmallSaveButton(); _local5.x = 230; _local5.y = 310; saveMenu.addChild(_local5); _local5.addEventListener(MouseEvent.MOUSE_DOWN, save); var _local6:Button = new SmallCancelButton(); _local6.x = 360; _local6.y = 310; saveMenu.addChild(_local6); loginMenu = new Sprite(); addChild(loginMenu); _local4 = new TextArea(); _local4.setText("Before you save you need to sign in\nor create an account."); _local4.x = 240; _local4.y = 190; loginMenu.addChild(_local4); _local7 = new LogInButton(); _local7.x = 230; _local7.y = 310; loginMenu.addChild(_local7); var _local8:Button = new NewUserButton(); _local8.x = 290; _local8.y = 250; loginMenu.addChild(_local8); _local6 = new SmallCancelButton(); _local6.x = 360; _local6.y = 310; loginMenu.addChild(_local6); setMenu(); } protected function setMenu():void{ saveMenu.visible = false; loginMenu.visible = false; if (User.getInstance().isLoggedIn()){ saveMenu.visible = true; } else { loginMenu.visible = true; }; } protected function save(_arg1:Event):void{ if (!validate()){ return; }; var _local2:XML = <saveDesign/> ; _local2.appendChild((("<name>" + nameField.getText()) + "</name>")); _local2.appendChild((("<description>" + descriptionField.getText()) + "</description>")); _local2.appendChild((("<userId>" + User.getInstance().getUserId()) + "</userId>")); _local2.appendChild((("<levelId>" + currentLevelId) + "</levelId>")); if (isSolution){ _local2.appendChild("<isSolution>1</isSolution>"); } else { _local2.appendChild("<isSolution>0</isSolution>"); }; _local2.appendChild(xml); var _local3:URLLoader = new ContraptionUrlLoader(); _local3.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local3.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local3.addEventListener(Event.COMPLETE, saveComplete); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/saveDesign.php")); var _local5:URLVariables = new URLVariables(); _local5.xml = _local2; _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } protected function saveComplete(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_DESIGN_LINK_MENU, true, true); _local2.designId = _arg1.target.data; dispatchEvent(_local2); } public function bubble(_arg1:Event):void{ dispatchEvent(_arg1); } override public function refresh():void{ setMenu(); } protected function validate():Boolean{ validationError.text = ""; if (nameField.getText() == ""){ validationError.text = "Please provide a name"; return (false); }; return (true); } } }//package contraption.menu
Section 113
//SavedContraptionRow (contraption.menu.SavedContraptionRow) package contraption.menu { import flash.events.*; import flash.display.*; import flash.text.*; public class SavedContraptionRow extends MovieClip { protected var userName:String; protected var userId:int; public function SavedContraptionRow(_arg1:Boolean, _arg2:int, _arg3:String, _arg4:String, _arg5:Boolean, _arg6:String, _arg7:int, _arg8:Number){ var _local11:TextArea; var _local12:Button; var _local13:Button; var _local14:PublishButton; var _local15:Button; var _local16:LinkButton; var _local17:StarBar; super(); this.userId = _arg7; this.userName = _arg6; var _local9:MovieClip = new SavedLevelBackground(); addChild(_local9); var _local10:TextFormat = new TextFormat(); _local10.size = 20; _local10.bold = true; _local11 = new TextArea(_arg3, 19, "contraptionFont"); _local11.embedFonts = true; _local11.x = 10; _local11.y = 10; _local9.addChild(_local11); _local11 = new TextArea(_arg4); _local11.wordWrap = true; _local11.height = 40; _local11.width = 280; _local11.x = 10; _local11.y = 50; _local9.addChild(_local11); if (_arg1){ _local12 = new PlayDesignSmallButton(); _local12.designId = _arg2; _local12.x = 260; _local12.y = 10; _local9.addChild(_local12); _local13 = new LinkDesignButton(); _local13.designId = _arg2; _local13.x = 300; _local13.y = 10; _local9.addChild(_local13); _local14 = new PublishButton(_arg2, _arg5, PublishButton.DESIGN_MODE); _local14.x = 340; _local14.y = 10; _local9.addChild(_local14); _local15 = new DeleteDesignButton(); _local15.designId = _arg2; _local15.x = 340; _local15.y = 55; _local9.addChild(_local15); } else { _local11 = new TextArea("By:"); _local11.x = 150; _local11.y = 15; _local9.addChild(_local11); _local16 = new LinkButton(_arg6); _local16.x = 170; _local16.y = 15; _local9.addChild(_local16); _local16.addEventListener(MouseEvent.MOUSE_DOWN, loadUserMenu); _local17 = new StarBar(_arg8, _arg2, StarBar.QUALITY, StarBar.DESIGN); _local17.x = 270; _local17.y = 20; _local9.addChild(_local17); _local12 = new PlayDesignSmallButton(); _local12.designId = _arg2; _local12.x = 340; _local12.y = 10; _local9.addChild(_local12); _local13 = new LinkDesignButton(); _local13.designId = _arg2; _local13.x = 340; _local13.y = 55; _local9.addChild(_local13); }; } protected function loadUserMenu(_arg1:MouseEvent):void{ var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_USER_MENU, true, true); _local2.userId = userId; _local2.userName = userName; dispatchEvent(_local2); } } }//package contraption.menu
Section 114
//SaveDesignWindow (contraption.menu.SaveDesignWindow) package contraption.menu { import flash.events.*; import contraption.*; import flash.net.*; public class SaveDesignWindow extends SaveWindow { public var levelId:int;// = 0 override protected function save(_arg1:MouseEvent):void{ var _local2:XML = <saveDesign/> ; _local2.appendChild((("<name>" + nameField.text) + "</name>")); _local2.appendChild((("<description>" + descriptionField.text) + "</description>")); _local2.appendChild((("<userId>" + User.getInstance().getUserId()) + "</userId>")); _local2.appendChild((("<levelId>" + levelId) + "</levelId>")); _local2.appendChild(levelXml); var _local3:URLLoader = new URLLoader(); _local3.addEventListener(Event.COMPLETE, completeHandler); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/saveDesign.php")); var _local5:URLVariables = new URLVariables(); _local5.xml = _local2; _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } } }//package contraption.menu
Section 115
//SavedLevelBackgroundBase (contraption.menu.SavedLevelBackgroundBase) package contraption.menu { import flash.events.*; import flash.display.*; public class SavedLevelBackgroundBase extends MovieClip { protected var theMask:SavedLevelBackgroundMask; public function SavedLevelBackgroundBase(){ theMask = new SavedLevelBackgroundMask(); super(); addChild(theMask); this.mask = theMask; theMask.gotoAndPlay("default"); gotoAndPlay("default"); this.addEventListener(MouseEvent.ROLL_OVER, mouseOver); this.addEventListener(MouseEvent.ROLL_OUT, mouseOut); } protected function mouseOut(_arg1:MouseEvent):void{ if (_arg1.eventPhase != EventPhase.AT_TARGET){ return; }; if (currentLabel == "open"){ theMask.gotoAndPlay("up"); gotoAndPlay("up"); } else { theMask.gotoAndPlay("default"); gotoAndPlay("default"); }; } protected function mouseOver(_arg1:MouseEvent):void{ if (_arg1.eventPhase != EventPhase.AT_TARGET){ return; }; theMask.gotoAndPlay("over"); gotoAndPlay("over"); } } }//package contraption.menu
Section 116
//SavedLevelRow (contraption.menu.SavedLevelRow) package contraption.menu { import flash.display.*; import flash.text.*; public class SavedLevelRow extends MovieClip { public function SavedLevelRow(_arg1:int, _arg2:String, _arg3:String, _arg4:Boolean, _arg5:Boolean){ var _local6:MovieClip; var _local8:TextArea; var _local13:PublishButton; var _local14:Button; super(); _local6 = new SavedLevelBackground(); addChild(_local6); var _local7:TextFormat = new TextFormat(); _local7.size = 20; _local7.bold = true; _local8 = new TextArea(_arg2, 19, "contraptionFont"); _local8.embedFonts = true; _local8.x = 10; _local8.y = 10; _local6.addChild(_local8); var _local9:Button = new PlayLevelSmallButton(); _local9.levelId = _arg1; _local9.x = 220; _local9.y = 10; _local6.addChild(_local9); var _local10:Button = new LinkLevelButton(); _local10.levelId = _arg1; _local10.x = 260; _local10.y = 10; _local6.addChild(_local10); var _local11:Button = new SolutionsButton(); _local11.levelId = _arg1; _local11.x = 300; _local11.y = 10; _local6.addChild(_local11); if (_arg5){ _local13 = new PublishButton(_arg1, _arg4, PublishButton.LEVEL_MODE); _local13.x = 340; _local13.y = 10; _local6.addChild(_local13); }; _local8 = new TextArea(_arg3); _local8.wordWrap = true; _local8.height = 40; _local8.width = 280; _local8.x = 10; _local8.y = 50; _local6.addChild(_local8); if (_arg5){ _local14 = new DeleteLevelButton(); _local14.levelId = _arg1; _local14.x = 300; _local14.y = 55; _local6.addChild(_local14); }; var _local12:Button = new EditLevelButton(); _local12.levelId = _arg1; _local12.x = 340; _local12.y = 55; _local6.addChild(_local12); } } }//package contraption.menu
Section 117
//SaveEvent (contraption.menu.SaveEvent) package contraption.menu { import flash.events.*; public class SaveEvent extends Event { public var isSolution:Boolean;// = false public var currentLevelId:int; public var xml:XML; public static const SAVE_CONTRAPTION:String = "saveContraption"; public static const SAVE_LEVEL:String = "saveLevel"; public function SaveEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } override public function clone():Event{ var _local1:SaveEvent = new SaveEvent(type, bubbles, cancelable); _local1.xml = xml; _local1.isSolution = isSolution; _local1.currentLevelId = currentLevelId; return (_local1); } } }//package contraption.menu
Section 118
//SaveLevelMenu (contraption.menu.SaveLevelMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; public class SaveLevelMenu extends ModalMenu { protected var loginMenu:Sprite; protected var descriptionField:TextBox; protected var validationError:TextArea; protected var nameField:TextBox; protected var xml:XML; protected var saveMenu:Sprite; public function SaveLevelMenu(_arg1:XML):void{ var _local2:TextArea; var _local4:Button; super("Save Level"); this.xml = _arg1; saveMenu = new Sprite(); addChild(saveMenu); validationError = new TextArea(""); validationError.x = 270; validationError.y = 180; validationError.textColor = 16720418; validationError.width = 250; saveMenu.addChild(validationError); _local2 = new TextArea("Name:"); _local2.x = 270; _local2.y = 210; saveMenu.addChild(_local2); _local2 = new TextArea("Description:"); _local2.x = 240; _local2.y = 240; saveMenu.addChild(_local2); nameField = new TextBox(100, 20, 15); nameField.x = 320; nameField.y = 210; saveMenu.addChild(nameField); descriptionField = new TextBox(200, 40, 50); descriptionField.x = 320; descriptionField.y = 240; saveMenu.addChild(descriptionField); var _local3:Button = new SmallSaveButton(); _local3.x = 230; _local3.y = 310; saveMenu.addChild(_local3); _local3.addEventListener(MouseEvent.MOUSE_DOWN, save); _local4 = new SmallCancelButton(); _local4.x = 360; _local4.y = 310; saveMenu.addChild(_local4); loginMenu = new Sprite(); addChild(loginMenu); _local2 = new TextArea(("In order to save you must log in or create an account.\n\n" + "(it will only take a second, I promise)")); _local2.x = 250; _local2.y = 190; _local2.width = 400; _local2.height = 100; loginMenu.addChild(_local2); _local4 = new SmallCancelButton(); _local4.x = 360; _local4.y = 320; loginMenu.addChild(_local4); setMenu(); } protected function setMenu():void{ saveMenu.visible = false; loginMenu.visible = false; if (User.getInstance().isLoggedIn()){ saveMenu.visible = true; } else { loginMenu.visible = true; }; } protected function save(_arg1:Event):void{ if (!validate()){ return; }; var _local2:XML = <saveLevel/> ; _local2.appendChild((("<name>" + nameField.getText()) + "</name>")); _local2.appendChild((("<description>" + descriptionField.getText()) + "</description>")); _local2.appendChild((("<userId>" + User.getInstance().getUserId()) + "</userId>")); _local2.appendChild(xml); var _local3:URLLoader = new ContraptionUrlLoader(); _local3.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local3.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local3.addEventListener(Event.COMPLETE, saveComplete); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/saveLevel2.php")); var _local5:URLVariables = new URLVariables(); _local5.xml = _local2; _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } protected function saveComplete(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_LEVEL_LINK_MENU, true, true); _local2.levelId = _arg1.target.data; dispatchEvent(_local2); } public function bubble(_arg1:Event):void{ dispatchEvent(_arg1); } override public function refresh():void{ setMenu(); } protected function validate():Boolean{ validationError.text = ""; if (nameField.getText() == ""){ validationError.text = "Please provide a name"; return (false); }; return (true); } } }//package contraption.menu
Section 119
//SaveLevelWindow (contraption.menu.SaveLevelWindow) package contraption.menu { import flash.events.*; import contraption.*; import flash.net.*; public class SaveLevelWindow extends SaveWindow { override protected function save(_arg1:MouseEvent):void{ var _local2:XML = <saveLevel/> ; _local2.appendChild((("<name>" + nameField.text) + "</name>")); _local2.appendChild((("<description>" + descriptionField.text) + "</description>")); _local2.appendChild((("<userId>" + User.getInstance().getUserId()) + "</userId>")); _local2.appendChild(levelXml); var _local3:URLLoader = new URLLoader(); _local3.addEventListener(Event.COMPLETE, completeHandler); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/saveLevel.php")); var _local5:URLVariables = new URLVariables(); _local5.xml = _local2; _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } } }//package contraption.menu
Section 120
//SaveWindow (contraption.menu.SaveWindow) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.text.*; import flash.errors.*; public class SaveWindow extends MenuWindow { public var savedLink:TextField; protected var controlPanel:Sprite; protected var loginMenu:LogInMenu; public var nameField:TextField; public var levelXml:XML; protected var saveButton:Button; public var descriptionField:TextField; public function SaveWindow():void{ super(false); controlPanel = new Sprite(); addChild(controlPanel); controlPanel.visible = false; var _local1:Button = new Button("Close"); _local1.x = 10; _local1.y = 10; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, close); saveButton = new Button("Save"); saveButton.x = 90; saveButton.y = 10; addChild(saveButton); saveButton.addEventListener(MouseEvent.MOUSE_DOWN, save); savedLink = new TextField(); savedLink.x = 10; savedLink.y = 120; savedLink.width = 350; controlPanel.addChild(savedLink); var _local2:TextField = new TextField(); _local2.x = 10; _local2.y = 60; _local2.height = 20; _local2.text = "Name:"; controlPanel.addChild(_local2); nameField = new TextField(); nameField.type = TextFieldType.INPUT; nameField.x = 80; nameField.y = 60; nameField.background = true; nameField.backgroundColor = 0xFFFFFF; nameField.height = 20; controlPanel.addChild(nameField); nameField.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); _local2 = new TextField(); _local2.x = 10; _local2.y = 90; _local2.height = 20; _local2.text = "Description:"; controlPanel.addChild(_local2); descriptionField = new TextField(); descriptionField.type = TextFieldType.INPUT; descriptionField.x = 80; descriptionField.y = 90; descriptionField.background = true; descriptionField.backgroundColor = 0xFFFFFF; descriptionField.height = 20; controlPanel.addChild(descriptionField); descriptionField.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); loginMenu = new LogInMenu(); loginMenu.x = 10; loginMenu.y = 120; addChild(loginMenu); loginMenu.visible = false; loginMenu.addEventListener(MenuEvent.LOGGED_IN, loggedIn); addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); opaqueBackground = 0xEEEEEE; visible = false; } protected function loggedIn(_arg1:Event):void{ controlPanel.visible = true; loginMenu.visible = false; saveButton.visible = true; } public function open(_arg1:XML):void{ this.levelXml = _arg1; savedLink.text = ""; visible = true; if (User.getInstance().isLoggedIn()){ controlPanel.visible = true; } else { loginMenu.visible = true; saveButton.visible = false; }; } protected function completeHandler(_arg1:Event):void{ savedLink.text = _arg1.target.data; } public function close(_arg1:MouseEvent):void{ visible = false; } protected function keyDown(_arg1:KeyboardEvent):void{ if (((!(parent)) || ((visible == false)))){ return; }; _arg1.stopPropagation(); } protected function save(_arg1:MouseEvent):void{ throw (new IllegalOperationError("You must extend SaveMenu and implement \"save\"")); } protected function mouseDown(_arg1:Event):void{ _arg1.stopPropagation(); } } }//package contraption.menu
Section 121
//SceneChange (contraption.menu.SceneChange) package contraption.menu { import flash.display.*; public class SceneChange extends MovieClip { public var lockClosed:Boolean;// = false public var doOpen:Boolean;// = false public function SceneChange(){ stop(); } public function open():void{ if (lockClosed){ return; }; if (currentLabel == "open"){ gotoAndPlay("open"); dispatchEvent(new MenuEvent(MenuEvent.OPEN_CURTAIN)); } else { doOpen = true; }; } public function jumpToClosed():void{ gotoAndStop("open"); } public function close():void{ if (!lockClosed){ gotoAndPlay("close"); doOpen = false; }; } } }//package contraption.menu
Section 122
//SelectDifficultyButton (contraption.menu.SelectDifficultyButton) package contraption.menu { import flash.geom.*; public class SelectDifficultyButton extends Button { public function SelectDifficultyButton(_arg1:int){ addChild(new Star(1, new Point(5, 5), true, 6750054)); if (_arg1 > 1){ addChild(new Star(2, new Point(17, 5), true, 6750054)); }; if (_arg1 > 2){ addChild(new Star(3, new Point(29, 5), true, 6750054)); }; if (_arg1 > 3){ addChild(new Star(4, new Point(41, 5), true, 6750054)); }; if (_arg1 > 4){ addChild(new Star(5, new Point(53, 5), true, 6750054)); }; } } }//package contraption.menu
Section 123
//SortedPagingData (contraption.menu.SortedPagingData) package contraption.menu { public class SortedPagingData extends PagingData { public var sortValue:String; public static const SORT_BY_QUALITY:String = "quality"; public static const SORT_BY_DATE:String = "date"; public function SortedPagingData(_arg1:int):void{ super(_arg1); sortValue = SORT_BY_QUALITY; } } }//package contraption.menu
Section 124
//Spinner (contraption.menu.Spinner) package contraption.menu { import flash.events.*; import flash.display.*; import flash.text.*; public class Spinner extends MovieClip { public function Spinner(){ graphics.beginFill(0xFFFFFF, 0); graphics.drawRect(0, 0, 700, 500); var _local1:TextFormat = new TextFormat(); _local1.size = 28; _local1.bold = true; var _local2:TextField = new TextField(); _local2.text = "Working..."; _local2.height = 40; _local2.width = 200; _local2.mouseEnabled = false; _local2.x = 400; _local2.y = 50; _local2.setTextFormat(_local1); addChild(_local2); addEventListener(MouseEvent.MOUSE_DOWN, stopEvent); addEventListener(KeyboardEvent.KEY_DOWN, stopEvent); } protected function stopEvent(_arg1:Event):void{ _arg1.stopPropagation(); } } }//package contraption.menu
Section 125
//Star (contraption.menu.Star) package contraption.menu { import contraption.*; import flash.geom.*; public class Star extends ActionContainerImpl { protected var rating:int; public function Star(_arg1:int, _arg2:Point, _arg3:Boolean, _arg4:int){ this.rating = _arg1; drawStar(_arg3, _arg4); this.x = _arg2.x; this.y = _arg2.y; } override public function getAllowableActions():Actions{ var _local1:Actions = new Actions(); _local1.button = true; return (_local1); } public function getRating():int{ return (rating); } protected function drawStar(_arg1:Boolean, _arg2:int):void{ graphics.lineStyle(2, 16777062); if (_arg1){ graphics.beginFill(_arg2); } else { graphics.beginFill(16777062); }; graphics.drawCircle(0, 0, 7); } } }//package contraption.menu
Section 126
//StarBar (contraption.menu.StarBar) package contraption.menu { import flash.events.*; import contraption.*; import flash.net.*; import flash.geom.*; public class StarBar extends ActionContainerImpl { protected var stars:Array; protected var barType:int; protected var table:int; protected var id:int; protected var rating:Number; protected var starColour:int; public static const LEVEL:int = 0; public static const DESIGN:int = 1; public static const DIFFICULTY:int = 1; public static const QUALITY:int = 0; public function StarBar(_arg1:Number, _arg2:int, _arg3:int, _arg4:int):void{ this.id = _arg2; this.barType = _arg3; this.table = _arg4; if (_arg3 == QUALITY){ starColour = 16737894; } else { starColour = 6750054; }; setRating(_arg1); addEventListener(MouseEvent.ROLL_OVER, mouseOver); addEventListener(MouseEvent.ROLL_OUT, mouseOut); } protected function drawStarBar():void{ var _local1:int; if (stars != null){ _local1 = 0; while (_local1 < stars.length) { removeChild(stars[_local1]); _local1++; }; }; stars = new Array(); addStar(1, new Point(5, 5), true); addStar(2, new Point(17, 5), (rating > 1.5)); addStar(3, new Point(29, 5), (rating > 2.5)); addStar(4, new Point(41, 5), (rating > 3.5)); addStar(5, new Point(53, 5), (rating >= 4.5)); } protected function addRating(_arg1:Event):void{ var _local2:User = User.getInstance(); if (!_local2.isLoggedIn()){ return; }; var _local3:int = _arg1.target.getRating(); var _local4:XML = <setRating/> ; if (table == LEVEL){ _local4.appendChild((("<levelId>" + id) + "</levelId>")); } else { _local4.appendChild((("<designId>" + id) + "</designId>")); }; if (barType == QUALITY){ _local4.appendChild((("<qualityRating>" + _local3) + "</qualityRating>")); } else { _local4.appendChild((("<difficultyRating>" + _local3) + "</difficultyRating>")); }; _local4.appendChild((("<userId>" + _local2.getUserId()) + "</userId>")); var _local5:URLLoader = new URLLoader(); _local5.addEventListener(Event.COMPLETE, addRatingResponse); var _local6:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/setRating.php")); var _local7:URLVariables = new URLVariables(); _local7.xml = _local4; _local6.data = _local7; _local6.method = URLRequestMethod.POST; _local5.load(_local6); } protected function addRatingResponse(_arg1:Event):void{ setRating(_arg1.target.data); } protected function addStar(_arg1:int, _arg2:Point, _arg3:Boolean):Star{ var _local4:Star = new Star(_arg1, _arg2, _arg3, starColour); _local4.addEventListener(MouseEvent.MOUSE_DOWN, addRating, false, 0, true); addChild(_local4); stars.push(_local4); return (_local4); } protected function mouseOut(_arg1:MouseEvent):void{ dispatchEvent(new TooltipEvent(TooltipEvent.REMOVE_TOOLTIP, true, true)); } protected function mouseOver(_arg1:MouseEvent):void{ var _local2:TooltipEvent = new TooltipEvent(TooltipEvent.ADD_TOOLTIP, true, true); if (table == LEVEL){ _local2.toolTip = "Level "; } else { _local2.toolTip = "Contraption "; }; if (barType == QUALITY){ _local2.toolTip = "Quality Rating"; } else { _local2.toolTip = (_local2.toolTip + "Difficulty"); }; dispatchEvent(_local2); } public function setRating(_arg1:Number):void{ this.rating = _arg1; drawStarBar(); } } }//package contraption.menu
Section 127
//TextArea (contraption.menu.TextArea) package contraption.menu { import flash.text.*; public class TextArea extends TextField { protected var format:TextFormat; public function TextArea(_arg1:String="", _arg2:int=13, _arg3:String="arial", _arg4:String="left"):void{ format = new TextFormat(); format.font = _arg3; format.size = _arg2; if (_arg4 == TextFormatAlign.LEFT){ this.autoSize = "left"; } else { format.align = _arg4; }; defaultTextFormat = format; this.text = _arg1; mouseEnabled = false; } public function setAlign(_arg1:String):void{ format.align = _arg1; defaultTextFormat = format; } public function bold():void{ format.bold = true; defaultTextFormat = format; } public function setHtmlText(_arg1:String):void{ this.htmlText = _arg1; } public function setText(_arg1:String):void{ this.text = _arg1; } } }//package contraption.menu
Section 128
//TextBox (contraption.menu.TextBox) package contraption.menu { import flash.events.*; import contraption.*; import flash.text.*; public class TextBox extends ActionContainerImpl { protected var textField:TextField; public function TextBox(_arg1:int=80, _arg2:int=20, _arg3:int=0, _arg4:Boolean=false):void{ textField = new TextField(); textField.border = true; textField.type = TextFieldType.INPUT; textField.background = true; textField.backgroundColor = 0xFFFFFF; textField.width = _arg1; textField.height = _arg2; textField.maxChars = _arg3; textField.displayAsPassword = _arg4; if (_arg2 > 20){ textField.wordWrap = true; }; addChild(textField); textField.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); var _local5:TextFormat = new TextFormat(); _local5.font = "arial"; _local5.size = 12; textField.defaultTextFormat = _local5; graphics.beginFill(0); graphics.drawRect(0, 0, _arg1, _arg2); } override public function getAllowableActions():Actions{ var _local1:Actions = new Actions(); _local1.inputText = true; return (_local1); } protected function keyDown(_arg1:KeyboardEvent):void{ _arg1.stopPropagation(); } public function getText():String{ return (textField.text); } public function setText(_arg1:String):void{ textField.text = _arg1; } } }//package contraption.menu
Section 129
//TickCounter (contraption.menu.TickCounter) package contraption.menu { import flash.text.*; public class TickCounter extends TextField { protected var paused:Boolean;// = false protected var count:int; public function TickCounter(){ count = 0; text = (count + ""); } public function reset():void{ paused = false; count = 0; text = (count + ""); } public function pause():void{ paused = true; } public function increment():void{ if (!paused){ count++; }; text = (count + ""); } } }//package contraption.menu
Section 130
//ToggleGraphicsButton (contraption.menu.ToggleGraphicsButton) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; public class ToggleGraphicsButton extends Button { protected var buttonGraphics:SimpleButton; public function ToggleGraphicsButton(){ buttonWidth = 25; buttonHeight = 25; buttonGraphics = new GraphicsOnButton(); addChild(buttonGraphics); setButton(); } override protected function buttonPress(_arg1:MouseEvent):void{ var _local2:Configuration = Configuration.getInstance(); _local2.setSimpleGraphicsMode(!(_local2.isInSimpleGraphicsMode())); setButton(); dispatchEvent(new MenuEvent(MenuEvent.CHANGE_GRAPHICS_OPTION, true, true)); } public function setButton():void{ removeChild(buttonGraphics); if (Configuration.getInstance().isInSimpleGraphicsMode()){ buttonGraphics = new GraphicsOffButton(); setToolTip("Turn simple graphics off"); } else { buttonGraphics = new GraphicsOnButton(); setToolTip("Use simple graphics\n(if things are running slow)"); }; addChild(buttonGraphics); } } }//package contraption.menu
Section 131
//TooltipEvent (contraption.menu.TooltipEvent) package contraption.menu { import flash.events.*; public class TooltipEvent extends Event { public var toolTip:String; public static const REMOVE_TOOLTIP:String = "removeTooltip"; public static const ADD_TOOLTIP:String = "addTooltip"; public function TooltipEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } override public function clone():Event{ var _local1:TooltipEvent = new TooltipEvent(type, bubbles, cancelable); _local1.toolTip = toolTip; return (_local1); } } }//package contraption.menu
Section 132
//TutorialButton (contraption.menu.TutorialButton) package contraption.menu { import flash.events.*; import contraption.tutorials.*; public class TutorialButton extends Button { override protected function buttonPress(_arg1:MouseEvent):void{ if (!isEnabled){ return; }; var _local2:TutorialEvent = new TutorialEvent(downEvent, true, true); dispatchEvent(_local2); } } }//package contraption.menu
Section 133
//UpdateUserInfoMenu (contraption.menu.UpdateUserInfoMenu) package contraption.menu { import flash.events.*; import contraption.*; import flash.text.*; public class UpdateUserInfoMenu extends ModalMenu { protected var passwordField:TextBox; protected var validationError:TextArea; protected var emailField:TextBox; protected var confirmPasswordField:TextBox; public function UpdateUserInfoMenu():void{ var _local2:TextField; super("Account"); var _local1:User = User.getInstance(); validationError = new TextArea(""); validationError.x = 270; validationError.y = 175; validationError.textColor = 16720418; validationError.width = 250; validationError.height = 50; addChild(validationError); _local2 = new TextArea("User Name:"); _local2.x = 270; _local2.y = 200; addChild(_local2); _local2 = new TextArea("Email Address:"); _local2.x = 250; _local2.y = 230; addChild(_local2); _local2 = new TextArea("New Password:"); _local2.x = 248; _local2.y = 260; addChild(_local2); _local2 = new TextArea("Confirm New Password:"); _local2.x = 200; _local2.y = 290; _local2.width = 200; addChild(_local2); _local2 = new TextArea(_local1.getUserName()); _local2.x = 350; _local2.y = 200; addChild(_local2); emailField = new TextBox(150, 20, 100); emailField.setText(_local1.getEmail()); emailField.x = 350; emailField.y = 230; addChild(emailField); passwordField = new TextBox(100, 20, 15, true); passwordField.x = 350; passwordField.y = 260; addChild(passwordField); confirmPasswordField = new TextBox(100, 20, 15, true); confirmPasswordField.x = 350; confirmPasswordField.y = 290; addChild(confirmPasswordField); var _local3:Button = new UpdateUserInfoSubmitButton(); _local3.x = 230; _local3.y = 320; addChild(_local3); _local3.addEventListener(MenuEvent.UPDATE_USER_INFO, updateInfo); var _local4:Button = new SmallCancelButton(); _local4.x = 360; _local4.y = 320; addChild(_local4); } protected function updateComplete(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK, true, true)); } protected function isValidEmail(_arg1:String):Boolean{ var _local2:RegExp = /^[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i; return (_local2.test(_arg1)); } protected function validate():Boolean{ validationError.text = ""; if (!isValidEmail(emailField.getText())){ validationError.appendText("Invalid email address\n"); }; if (passwordField.getText() != confirmPasswordField.getText()){ validationError.appendText("Password fields do not match\n"); }; return ((validationError.text == "")); } protected function updateInfo(_arg1:MenuEvent):void{ _arg1.stopPropagation(); if (!validate()){ return; }; var _local2:User = User.getInstance(); _local2.addEventListener(MenuEvent.UPDATE_USER_INFO, updateComplete, false, 0, true); _local2.updateInfo(emailField.getText(), passwordField.getText()); } } }//package contraption.menu
Section 134
//UserDesignsMenu (contraption.menu.UserDesignsMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; import flash.text.*; public class UserDesignsMenu extends MenuWindow { protected var pageCount:TextArea; protected var contraptionCanvas:Sprite; protected var editable:Boolean; protected var displayMode:int; protected var id:int; protected var pagingData:PagingData; public static var LEVEL_MODE:int = 1; public static var USER_MODE:int = 0; public function UserDesignsMenu(_arg1:int, _arg2:int):void{ var _local3:Button; super(); this.id = _arg1; this.displayMode = _arg2; editable = (((User.getInstance().getUserId() == _arg1)) && ((_arg2 == USER_MODE))); pageCount = new TextArea(); pageCount.x = 430; pageCount.y = 155; pageCount.bold(); pageCount.setAlign(TextFormatAlign.CENTER); pageCount.autoSize = TextFieldAutoSize.CENTER; pageCount.textColor = 0x663300; addChild(pageCount); _local3 = new PreviousPageButton(); _local3.x = 300; _local3.y = 150; addChild(_local3); _local3.addEventListener(MouseEvent.MOUSE_DOWN, previousPage, false, 0, true); _local3 = new NextPageButton(); _local3.x = 520; _local3.y = 150; addChild(_local3); _local3.addEventListener(MouseEvent.MOUSE_DOWN, nextPage, false, 0, true); pagingData = new PagingData(4); contraptionCanvas = new Sprite(); addChild(contraptionCanvas); listDesigns(); } protected function previousPage(_arg1:Event):void{ if (pagingData.currentPage > 0){ pagingData.currentPage--; }; listDesigns(); } protected function deleteDesign(_arg1:Event):void{ var _local2:URLLoader = new URLLoader(); _local2.addEventListener(Event.COMPLETE, confirmDelete); var _local3:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/deleteDesign.php")); var _local4:URLVariables = new URLVariables(); _local4.designId = _arg1.target.designId; _local4.userId = User.getInstance().getUserId(); _local4.password = User.getInstance().getPassword(); _local3.data = _local4; _local3.method = URLRequestMethod.POST; _local2.load(_local3); } protected function renderButtons(_arg1:Event):void{ var _local2:XML; var _local3:XML; var _local5:MovieClip; var _local6:Boolean; var _local7:TextArea; var _local8:String; _local2 = new XML(_arg1.target.data); pagingData.numResults = _local2.designCount; pageCount.setText(((("Page " + (pagingData.currentPage + 1)) + " of ") + pagingData.getNumPages())); removeChild(contraptionCanvas); contraptionCanvas = new Sprite(); addChild(contraptionCanvas); var _local4:int; for each (_local3 in _local2.design) { if (_local3.publish == "1"){ _local6 = true; } else { _local6 = false; }; _local5 = new SavedContraptionRow(editable, _local3.designId, _local3.name, _local3.description, _local6, _local3.userName, _local3.userId, _local3.quality); _local5.x = 225; _local5.y = (200 + (_local4 * 65)); contraptionCanvas.addChildAt(_local5, 0); _local5.addEventListener(MenuEvent.DELETE_DESIGN, deleteDesign, false, 0, true); _local4++; }; if (_local4 == 0){ if (editable){ _local8 = "You haven't saved any\ndesigns yet"; } else { _local8 = "There are not yet any\nsaved designs here"; }; _local7 = new TextArea(_local8, 18); _local7.x = 320; _local7.y = 300; _local7.bold(); _local7.textColor = 0x663300; addChild(_local7); }; finishedLoading(); } protected function loadUserMenu(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_USER_MENU); _local2.userId = _arg1.target.userId; _local2.userName = _arg1.target.userName; dispatchEvent(_local2); } protected function nextPage(_arg1:Event):void{ if (pagingData.currentPage < (pagingData.getNumPages() - 1)){ pagingData.currentPage++; }; listDesigns(); } protected function confirmDelete(_arg1:Event):void{ listDesigns(); } override public function refresh():void{ listDesigns(); } protected function listDesigns():void{ var _local1:URLLoader = new URLLoader(); _local1.addEventListener(Event.COMPLETE, renderButtons); var _local2:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/getUserDesigns.php")); var _local3:URLVariables = new URLVariables(); if (displayMode == USER_MODE){ if (!editable){ _local3.onlyPublished = "1"; }; _local3.userId = id; } else { _local3.levelId = id; _local3.onlyPublished = "1"; }; _local3.limitOffset = pagingData.getOffset(); _local3.limitCount = pagingData.resultsPerPage; _local2.data = _local3; _local2.method = URLRequestMethod.POST; _local1.load(_local2); } protected function loadDesign(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_DESIGN); _local2.designId = _arg1.target.designId; dispatchEvent(_local2); } } }//package contraption.menu
Section 135
//UserGenLevelRow (contraption.menu.UserGenLevelRow) package contraption.menu { import flash.events.*; import flash.display.*; import flash.text.*; public class UserGenLevelRow extends MovieClip { protected var userName:String; protected var userId:int; public function UserGenLevelRow(_arg1:int, _arg2:String, _arg3:String, _arg4:String, _arg5:int, _arg6:int, _arg7:int){ var _local8:MovieClip; var _local10:TextField; super(); this.userId = _arg5; this.userName = _arg4; _local8 = new SavedLevelBackground(); addChild(_local8); var _local9:TextArea = new TextArea(_arg2, 16, "contraptionFont"); _local9.embedFonts = true; _local9.x = 10; _local9.y = 5; _local8.addChild(_local9); _local10 = new TextField(); _local10.text = "By:"; _local10.mouseEnabled = false; _local10.x = 20; _local10.y = 25; _local8.addChild(_local10); var _local11:LinkButton = new LinkButton(_arg4); _local11.x = 40; _local11.y = 25; _local8.addChild(_local11); _local11.addEventListener(MouseEvent.MOUSE_DOWN, loadUserMenu); var _local12:StarBar = new StarBar(_arg6, _arg1, StarBar.DIFFICULTY, StarBar.LEVEL); _local12.x = 220; _local12.y = 10; _local8.addChild(_local12); _local12 = new StarBar(_arg7, _arg1, StarBar.QUALITY, StarBar.LEVEL); _local12.x = 220; _local12.y = 30; _local8.addChild(_local12); var _local13:Button = new PlayLevelSmallButton(); _local13.levelId = _arg1; _local13.x = 300; _local13.y = 10; _local8.addChild(_local13); var _local14:Button = new LinkLevelButton(); _local14.levelId = _arg1; _local14.x = 340; _local14.y = 10; _local8.addChild(_local14); _local10 = new TextField(); _local10.wordWrap = true; _local10.text = _arg3; _local10.height = 40; _local10.width = 280; _local10.mouseEnabled = false; _local10.x = 10; _local10.y = 50; _local8.addChild(_local10); var _local15:Button = new SolutionsButton(); _local15.levelId = _arg1; _local15.x = 340; _local15.y = 55; _local8.addChild(_local15); } protected function loadUserMenu(_arg1:MouseEvent):void{ var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_USER_MENU, true, true); _local2.userId = userId; _local2.userName = userName; dispatchEvent(_local2); } } }//package contraption.menu
Section 136
//UserGenLevelsMenu (contraption.menu.UserGenLevelsMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; import flash.text.*; public class UserGenLevelsMenu extends MenuWindow { protected var pageCount:TextArea; protected var threeDifficultyButton:Button; protected var qualitySortButton:LinkButton; protected var oneDifficultyButton:Button; protected var allDifficultyButton:LinkButton; protected var fourDifficultyButton:Button; protected var pagingData:SortedPagingData; protected var fiveDifficultyButton:Button; protected var levelsCanvas:Sprite; protected var pleaseRegisterMenu:PleaseRegisterMenu; protected var selectedDifficulty:int;// = 0 protected var twoDifficultyButton:Button; protected var dateSortButton:LinkButton; public function UserGenLevelsMenu():void{ var _local1:Button; super(); pageCount = new TextArea(); pageCount.x = 430; pageCount.y = 145; pageCount.setAlign(TextFormatAlign.CENTER); pageCount.autoSize = TextFieldAutoSize.CENTER; pageCount.bold(); pageCount.textColor = 0x663300; addChild(pageCount); _local1 = new PreviousPageButton(); _local1.x = 300; _local1.y = 140; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, previousPage, false, 0, true); _local1 = new NextPageButton(); _local1.x = 520; _local1.y = 140; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, nextPage, false, 0, true); dateSortButton = new LinkButton("Sort by Date"); dateSortButton.x = 315; dateSortButton.y = 175; addChild(dateSortButton); dateSortButton.addEventListener(MouseEvent.MOUSE_DOWN, dateSort, false, 0, true); qualitySortButton = new LinkButton("Sort by Rating"); qualitySortButton.x = 475; qualitySortButton.y = 175; qualitySortButton.disable(); addChild(qualitySortButton); qualitySortButton.addEventListener(MouseEvent.MOUSE_DOWN, qualitySort, false, 0, true); pagingData = new SortedPagingData(4); levelsCanvas = new Sprite(); addChild(levelsCanvas); addDifficultySelectors(); listLevels(); pleaseRegisterMenu = new PleaseRegisterMenu(); if (!User.getInstance().isRegistered()){ addChild(pleaseRegisterMenu); }; } protected function dateSort(_arg1:Event):void{ qualitySortButton.enable(); dateSortButton.disable(); pagingData.currentPage = 0; pagingData.sortValue = SortedPagingData.SORT_BY_DATE; listLevels(); } protected function enabledButtons():void{ allDifficultyButton.enable(); oneDifficultyButton.enable(); twoDifficultyButton.enable(); threeDifficultyButton.enable(); fourDifficultyButton.enable(); fiveDifficultyButton.enable(); } protected function selectDifficultyAll(_arg1:Event):void{ selectedDifficulty = 0; listLevels(); enabledButtons(); allDifficultyButton.disable(); } protected function loadLevel(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_LEVEL); _local2.levelId = _arg1.target.levelId; dispatchEvent(_local2); } protected function loadUserMenu(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_USER_MENU); _local2.userId = _arg1.target.userId; _local2.userName = _arg1.target.userName; dispatchEvent(_local2); } protected function renderButtons(_arg1:Event):void{ var _local2:XML; var _local3:XML; var _local5:MovieClip; _local2 = new XML(_arg1.target.data); pagingData.numResults = _local2.levelCount; pageCount.setText(((("Page " + (pagingData.currentPage + 1)) + " of ") + pagingData.getNumPages())); removeChild(levelsCanvas); levelsCanvas = new Sprite(); addChild(levelsCanvas); var _local4:int; for each (_local3 in _local2.level) { _local5 = new UserGenLevelRow(_local3.levelId, _local3.levelName, _local3.description, _local3.userName, _local3.userId, _local3.difficulty, _local3.quality); _local5.x = 225; _local5.y = (200 + (_local4 * 70)); levelsCanvas.addChildAt(_local5, 0); _local4++; }; finishedLoading(); if (!User.getInstance().isRegistered()){ addChild(pleaseRegisterMenu); }; } protected function loadSolutions(_arg1:MenuEvent):void{ dispatchEvent(_arg1); } protected function selectDifficultyTwo(_arg1:Event):void{ selectedDifficulty = 2; listLevels(); enabledButtons(); twoDifficultyButton.disable(); } override public function refresh():void{ listLevels(); } protected function nextPage(_arg1:Event):void{ if (pagingData.currentPage < (pagingData.getNumPages() - 1)){ pagingData.currentPage++; }; listLevels(); } protected function selectDifficultyFour(_arg1:Event):void{ selectedDifficulty = 4; listLevels(); enabledButtons(); fourDifficultyButton.disable(); } protected function selectDifficultyThree(_arg1:Event):void{ selectedDifficulty = 3; listLevels(); enabledButtons(); threeDifficultyButton.disable(); } protected function addDifficultySelectors():void{ var _local1:TextFormat = new TextFormat(); _local1.bold = true; _local1.size = 15; var _local2:TextField = new TextField(); _local2.text = "Filter by\nDifficulty:"; _local2.autoSize = "left"; _local2.x = 10; _local2.y = 85; _local2.setTextFormat(_local1); _local2.mouseEnabled = false; addChild(_local2); allDifficultyButton = new LinkButton("Show all levels"); allDifficultyButton.x = 10; allDifficultyButton.y = 225; addChild(allDifficultyButton); allDifficultyButton.disable(); allDifficultyButton.addEventListener(MouseEvent.MOUSE_DOWN, selectDifficultyAll, false, 0, true); oneDifficultyButton = new SelectDifficultyButton(1); oneDifficultyButton.x = 15; oneDifficultyButton.y = 130; addChild(oneDifficultyButton); oneDifficultyButton.addEventListener(MouseEvent.MOUSE_DOWN, selectDifficultyOne, false, 0, true); twoDifficultyButton = new SelectDifficultyButton(2); twoDifficultyButton.x = 15; twoDifficultyButton.y = 150; addChild(twoDifficultyButton); twoDifficultyButton.addEventListener(MouseEvent.MOUSE_DOWN, selectDifficultyTwo, false, 0, true); threeDifficultyButton = new SelectDifficultyButton(3); threeDifficultyButton.x = 15; threeDifficultyButton.y = 170; addChild(threeDifficultyButton); threeDifficultyButton.addEventListener(MouseEvent.MOUSE_DOWN, selectDifficultyThree, false, 0, true); fourDifficultyButton = new SelectDifficultyButton(4); fourDifficultyButton.x = 15; fourDifficultyButton.y = 190; addChild(fourDifficultyButton); fourDifficultyButton.addEventListener(MouseEvent.MOUSE_DOWN, selectDifficultyFour, false, 0, true); fiveDifficultyButton = new SelectDifficultyButton(5); fiveDifficultyButton.x = 15; fiveDifficultyButton.y = 210; addChild(fiveDifficultyButton); fiveDifficultyButton.addEventListener(MouseEvent.MOUSE_DOWN, selectDifficultyFive, false, 0, true); } protected function selectDifficultyOne(_arg1:Event):void{ selectedDifficulty = 1; listLevels(); enabledButtons(); oneDifficultyButton.disable(); } protected function listLevels():void{ var _local1:URLLoader = new URLLoader(); _local1.addEventListener(Event.COMPLETE, renderButtons, false, 0, true); var _local2:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/getUserGenLevels.php")); var _local3:URLVariables = new URLVariables(); _local3.limitOffset = pagingData.getOffset(); _local3.limitCount = pagingData.resultsPerPage; if (selectedDifficulty != 0){ _local3.difficultyRating = selectedDifficulty; }; _local3.orderBy = pagingData.sortValue; _local2.data = _local3; _local2.method = URLRequestMethod.POST; _local1.load(_local2); } protected function previousPage(_arg1:Event):void{ if (pagingData.currentPage > 0){ pagingData.currentPage--; }; listLevels(); } protected function selectDifficultyFive(_arg1:Event):void{ selectedDifficulty = 5; listLevels(); enabledButtons(); fiveDifficultyButton.disable(); } protected function qualitySort(_arg1:Event):void{ qualitySortButton.disable(); dateSortButton.enable(); pagingData.currentPage = 0; pagingData.sortValue = SortedPagingData.SORT_BY_QUALITY; listLevels(); } } }//package contraption.menu
Section 137
//UserLevelsMenu (contraption.menu.UserLevelsMenu) package contraption.menu { import flash.events.*; import flash.display.*; import contraption.*; import flash.net.*; import flash.text.*; public class UserLevelsMenu extends MenuWindow { protected var pageCount:TextArea; protected var editable:Boolean; protected var userId:int; protected var levelsCanvas:Sprite; protected var pleaseRegisterMenu:PleaseRegisterMenu; protected var pagingData:PagingData; public function UserLevelsMenu(_arg1:int):void{ var _local2:Button; super(); this.userId = _arg1; editable = (User.getInstance().getUserId() == _arg1); pageCount = new TextArea(); pageCount.x = 430; pageCount.y = 155; pageCount.setAlign(TextFormatAlign.CENTER); pageCount.autoSize = TextFieldAutoSize.CENTER; pageCount.bold(); pageCount.textColor = 0x663300; addChild(pageCount); _local2 = new PreviousPageButton(); _local2.x = 300; _local2.y = 150; addChild(_local2); _local2.addEventListener(MouseEvent.MOUSE_DOWN, previousPage, false, 0, true); _local2 = new NextPageButton(); _local2.x = 520; _local2.y = 150; addChild(_local2); _local2.addEventListener(MouseEvent.MOUSE_DOWN, nextPage, false, 0, true); pagingData = new PagingData(4); levelsCanvas = new Sprite(); addChild(levelsCanvas); listLevels(); pleaseRegisterMenu = new PleaseRegisterMenu(); if (!User.getInstance().isRegistered()){ addChild(pleaseRegisterMenu); }; } override public function refresh():void{ listLevels(); } protected function nextPage(_arg1:Event):void{ if (pagingData.currentPage < (pagingData.getNumPages() - 1)){ pagingData.currentPage++; }; listLevels(); } protected function renderButtons(_arg1:Event):void{ var _local2:XML; var _local3:XML; var _local5:MovieClip; var _local6:Boolean; var _local7:TextArea; var _local8:String; _local2 = new XML(_arg1.target.data); pagingData.numResults = _local2.levelCount; pageCount.setText(((("Page " + (pagingData.currentPage + 1)) + " of ") + pagingData.getNumPages())); removeChild(levelsCanvas); levelsCanvas = new Sprite(); addChild(levelsCanvas); var _local4:int; for each (_local3 in _local2.level) { if (_local3.publish == "1"){ _local6 = true; } else { _local6 = false; }; _local5 = new SavedLevelRow(_local3.levelId, _local3.levelName, _local3.description, _local6, editable); _local5.x = 225; _local5.y = (200 + (_local4 * 70)); levelsCanvas.addChildAt(_local5, 0); _local5.addEventListener(MenuEvent.DELETE_LEVEL, deleteLevel, false, 0, true); _local4++; }; if (_local4 == 0){ if (editable){ _local8 = "You haven't saved any\nlevels yet"; } else { _local8 = "There are not yet any\nsaved levels here"; }; _local7 = new TextArea(_local8, 18); _local7.x = 320; _local7.y = 300; _local7.bold(); _local7.textColor = 0x663300; addChild(_local7); }; finishedLoading(); if (!User.getInstance().isRegistered()){ addChild(pleaseRegisterMenu); }; } protected function listLevels():void{ var _local1:URLLoader = new URLLoader(); _local1.addEventListener(Event.COMPLETE, renderButtons, false, 0, true); var _local2:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/getUserLevels.php")); var _local3:URLVariables = new URLVariables(); _local3.userId = userId; if (!editable){ _local3.onlyPublished = "1"; }; _local3.limitOffset = pagingData.getOffset(); _local3.limitCount = pagingData.resultsPerPage; _local2.data = _local3; _local2.method = URLRequestMethod.POST; _local1.load(_local2); } protected function confirmDelete(_arg1:Event):void{ listLevels(); } protected function loadSolutions(_arg1:MenuEvent):void{ dispatchEvent(_arg1); } protected function previousPage(_arg1:Event):void{ if (pagingData.currentPage > 0){ pagingData.currentPage--; }; listLevels(); } protected function deleteLevel(_arg1:Event):void{ var _local2:URLLoader = new URLLoader(); _local2.addEventListener(Event.COMPLETE, confirmDelete); var _local3:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/deleteLevel.php")); var _local4:URLVariables = new URLVariables(); _local4.levelId = _arg1.target.levelId; _local3.data = _local4; _local3.method = URLRequestMethod.POST; _local2.load(_local3); } protected function loadLevel(_arg1:Event):void{ _arg1.stopPropagation(); var _local2:MenuEvent = new MenuEvent(MenuEvent.LOAD_LEVEL); _local2.levelId = _arg1.target.levelId; dispatchEvent(_local2); } } }//package contraption.menu
Section 138
//UserMenu (contraption.menu.UserMenu) package contraption.menu { import flash.text.*; public class UserMenu extends MenuWindow { protected var userId:int; protected var userName:String; public function UserMenu(_arg1:int, _arg2:String){ this.userName = _arg2; this.userId = _arg1; var _local3:ModalMenuCloud = new ModalMenuCloud(); _local3.x = 100; _local3.y = 80; addChild(_local3); var _local4:TextFormat = new TextFormat(); _local4.size = 22; _local4.bold = true; var _local5:TextArea = new TextArea((_arg2 + "'s Stuff"), 22, "arial", TextFieldAutoSize.CENTER); _local5.bold(); _local5.width = 250; _local5.x = 250; _local5.y = 200; addChild(_local5); var _local6:Button = new SavedLevelsButton(); _local6.userId = _arg1; _local6.x = 300; _local6.y = 320; addChild(_local6); _local6 = new SavedContraptionsButton(); _local6.userId = _arg1; _local6.x = 300; _local6.y = 250; addChild(_local6); } } }//package contraption.menu
Section 139
//XmlWindow (contraption.menu.XmlWindow) package contraption.menu { import flash.events.*; import flash.text.*; public class XmlWindow extends MenuWindow { public var loadButton:Button; public var xmlField:TextField; public function XmlWindow():void{ loadButton = new Button("Load"); super(false); var _local1:Button = new Button("Close"); _local1.x = 10; _local1.y = 10; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, closeXmlWindow); loadButton.x = 80; loadButton.y = 10; addChild(loadButton); xmlField = new TextField(); xmlField.width = 200; xmlField.height = 300; xmlField.type = TextFieldType.INPUT; xmlField.background = true; xmlField.backgroundColor = 0xFFFFFF; xmlField.multiline = true; xmlField.x = 10; xmlField.y = 60; addChild(xmlField); visible = false; } protected function closeXmlWindow(_arg1:MouseEvent):void{ visible = false; } } }//package contraption.menu
Section 140
//AddedBlockBetweenWheelsOverlay (contraption.tutorials.AddedBlockBetweenWheelsOverlay) package contraption.tutorials { import contraption.*; import contraption.blocks.*; public class AddedBlockBetweenWheelsOverlay extends TutorialOverlay { protected var player:Player; override public function init(_arg1:Player):void{ this.player = _arg1; _arg1.addEventListener(TutorialEvent.ADDED_BLOCK, checkBlock, false, 0, true); } public function checkBlock(_arg1:TutorialEvent):void{ if ((_arg1.block as Rod).doesJoinWheelMiddles()){ overlayFinished(); } else { player.deleteBlock(_arg1.block); }; } override public function dispose(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.ADDED_BLOCK, checkBlock); } } }//package contraption.tutorials
Section 141
//AddedBlockOverlay (contraption.tutorials.AddedBlockOverlay) package contraption.tutorials { import contraption.*; public class AddedBlockOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.ADDED_BLOCK, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.ADDED_BLOCK, overlayFinished); } } }//package contraption.tutorials
Section 142
//DeleteBlockOverlay (contraption.tutorials.DeleteBlockOverlay) package contraption.tutorials { import contraption.*; public class DeleteBlockOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.REMOVED_BLOCK, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.REMOVED_BLOCK, overlayFinished); } } }//package contraption.tutorials
Section 143
//DeleteSelectedOverlay (contraption.tutorials.DeleteSelectedOverlay) package contraption.tutorials { import contraption.*; public class DeleteSelectedOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.SELECTED_DELETE, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.SELECTED_DELETE, overlayFinished); } } }//package contraption.tutorials
Section 144
//HollowSelectedOverlay (contraption.tutorials.HollowSelectedOverlay) package contraption.tutorials { import contraption.*; public class HollowSelectedOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.SELECTED_HOLLOW, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.SELECTED_HOLLOW, overlayFinished); } } }//package contraption.tutorials
Section 145
//PressStartOverlay (contraption.tutorials.PressStartOverlay) package contraption.tutorials { import contraption.*; public class PressStartOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.SELECTED_START, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.SELECTED_START, overlayFinished); } } }//package contraption.tutorials
Section 146
//PressStopOverlay (contraption.tutorials.PressStopOverlay) package contraption.tutorials { import contraption.*; public class PressStopOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.SELECTED_STOP, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.SELECTED_STOP, overlayFinished); } } }//package contraption.tutorials
Section 147
//TutorialEvent (contraption.tutorials.TutorialEvent) package contraption.tutorials { import flash.events.*; import contraption.blocks.*; public class TutorialEvent extends Event { public var block:Block; public static const FINISHED_OVERLAY:String = "finishedOverlay"; public static const SELECTED_CLOCKWISE_WHEEL:String = "selectedClockwiseWheel"; public static const SELECTED_STOP:String = "selectedStop"; public static const ADDED_BLOCK:String = "addedBlock"; public static const SELECTED_DELETE:String = "selectedDelete"; public static const SELECTED_HOLLOW:String = "selectedWater"; public static const SKIP_TUTORIAL:String = "skipTutorial"; public static const REMOVED_BLOCK:String = "removedBlock"; public static const SELECTED_START:String = "selectedStart"; public function TutorialEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } override public function clone():Event{ var _local1:TutorialEvent = new TutorialEvent(type, bubbles, cancelable); _local1.block = block; return (_local1); } } }//package contraption.tutorials
Section 148
//TutorialLevel1Overlays (contraption.tutorials.TutorialLevel1Overlays) package contraption.tutorials { import de.polygonal.ds.*; public class TutorialLevel1Overlays extends TutorialOverlays { public function TutorialLevel1Overlays():void{ overlays = new SLinkedList(); overlays.append(new tut1Welcome()); overlays.append(new tut1PinkBall()); overlays.append(new tut1Goal()); overlays.append(new tut1Workshop()); overlays.append(new tut1SelectWheel()); overlays.append(new tut1DrawWheel()); overlays.append(new tut1SelectWater()); overlays.append(new tut1DrawWater()); overlays.append(new tut1PressStart()); overlays.append(new tutLocked()); super(); } } }//package contraption.tutorials
Section 149
//TutorialLevel2Overlays (contraption.tutorials.TutorialLevel2Overlays) package contraption.tutorials { import de.polygonal.ds.*; public class TutorialLevel2Overlays extends TutorialOverlays { public function TutorialLevel2Overlays():void{ overlays = new SLinkedList(); overlays.append(new tut2Welcome()); overlays.append(new tut2FirstTry()); overlays.append(new tut2FirstStop()); overlays.append(new tut2FirstSelectDelete()); overlays.append(new tut2DeleteFirstRod()); overlays.append(new tut2FirstSelectWater()); overlays.append(new tut2FirstDrawWater()); overlays.append(new tut2SecondTry()); overlays.append(new tut2SecondStop()); overlays.append(new tut2SecondSelectDelete()); overlays.append(new tut2DeleteSecondRod()); overlays.append(new tut2SecondSelectWater()); overlays.append(new tut2SecondDrawWater()); overlays.append(new tut2ThirdTry()); overlays.append(new tut2ThirdTry()); overlays.append(new tutLocked()); super(); } } }//package contraption.tutorials
Section 150
//TutorialLevel3Overlays (contraption.tutorials.TutorialLevel3Overlays) package contraption.tutorials { import de.polygonal.ds.*; public class TutorialLevel3Overlays extends TutorialOverlays { public function TutorialLevel3Overlays():void{ overlays = new SLinkedList(); overlays.append(new tut3Wheels()); overlays.append(new tut3NonPowerWheel()); overlays.append(new tut3Water()); overlays.append(new tut3Wood()); overlays.append(new tut3Move()); overlays.append(new tut3Delete()); overlays.append(new tut3Start()); overlays.append(new tut3Zoom()); overlays.append(new tut3Save()); overlays.append(new tut3Back()); overlays.append(new tut3Goodbye()); super(); } } }//package contraption.tutorials
Section 151
//TutorialOverlay (contraption.tutorials.TutorialOverlay) package contraption.tutorials { import flash.events.*; import flash.display.*; import contraption.*; public class TutorialOverlay extends MovieClip { public function TutorialOverlay():void{ addEventListener(MouseEvent.MOUSE_DOWN, stopEvent); } protected function stopEvent(_arg1:Event):void{ _arg1.stopPropagation(); } protected function overlayFinished(_arg1:Event=null):void{ dispatchEvent(new TutorialEvent(TutorialEvent.FINISHED_OVERLAY, true, true)); } public function dispose(_arg1:Player):void{ } public function init(_arg1:Player):void{ } } }//package contraption.tutorials
Section 152
//TutorialOverlays (contraption.tutorials.TutorialOverlays) package contraption.tutorials { import de.polygonal.ds.*; public class TutorialOverlays { protected var currentOverlay:SListNode; protected var overlays:SLinkedList; public function TutorialOverlays():void{ currentOverlay = overlays.head; } public function firstOverlay():TutorialOverlay{ return ((overlays.head.data as TutorialOverlay)); } public function getNext():TutorialOverlay{ if (currentOverlay.next == null){ return (null); }; currentOverlay = currentOverlay.next; return ((currentOverlay.data as TutorialOverlay)); } } }//package contraption.tutorials
Section 153
//TutorialPlayer (contraption.tutorials.TutorialPlayer) package contraption.tutorials { import flash.events.*; import contraption.menu.*; import flash.display.*; import contraption.*; import contraption.blocks.*; import contraption.data.*; public class TutorialPlayer extends Player { protected var tutorialNumber:int; protected var tutorialCanvas:Sprite; protected var currentOverlay:TutorialOverlay; protected var overlays:TutorialOverlays; public function TutorialPlayer(_arg1:Stage, _arg2:Contraption){ super(_arg1, _arg2); tutorialCanvas = new Sprite(); addChild(tutorialCanvas); var _local3:SkipTutorialButton = new SkipTutorialButton(); _local3.x = 570; _local3.y = 430; _local3.addEventListener(TutorialEvent.SKIP_TUTORIAL, skipTutorial, false, 0, true); addChild(_local3); } public function loadTutorialLevel(_arg1:int):void{ var _local2:XML = TutorialLevels.getTutorialLevels()[("level" + _arg1)].retrieveLevel[0]; loadRetrievedLevelFromXML(_local2); this.tutorialNumber = _local2.tutorialNumber; switch (_arg1){ case 1: overlays = new TutorialLevel1Overlays(); break; case 2: overlays = new TutorialLevel2Overlays(); break; case 3: overlays = new TutorialLevel3Overlays(); break; default: throw (new Error("Invalid Tutorial")); }; loadOverlay(overlays.firstOverlay()); } override protected function startSimulation(_arg1:Event):void{ super.startSimulation(_arg1); dispatchEvent(new TutorialEvent(TutorialEvent.SELECTED_START, true, true)); } protected function loadOverlay(_arg1:TutorialOverlay):void{ if (currentOverlay != null){ currentOverlay.dispose(this); tutorialCanvas.removeChild(currentOverlay); }; if (_arg1 != null){ currentOverlay = _arg1; currentOverlay.init(this); currentOverlay.addEventListener(TutorialEvent.FINISHED_OVERLAY, incrementOverlay, false, 0, true); tutorialCanvas.addChild(currentOverlay); }; } override protected function loadNextLevel():void{ var _local1:MenuEvent = new MenuEvent(MenuEvent.TUTORIAL_LEVEL_COMPLETE, true, true); _local1.tutorialNumber = tutorialNumber; dispatchEvent(_local1); } override protected function clockwiseWheelMode(_arg1:Event):void{ super.clockwiseWheelMode(_arg1); dispatchEvent(new TutorialEvent(TutorialEvent.SELECTED_CLOCKWISE_WHEEL, true, true)); } override protected function updateMoveScreen(_arg1:MouseEvent=null):void{ } override protected function zoomIn(_arg1:Event=null):void{ } override protected function hollowRodMode(_arg1:Event):void{ super.hollowRodMode(_arg1); dispatchEvent(new TutorialEvent(TutorialEvent.SELECTED_HOLLOW, true, true)); } protected function incrementOverlay(_arg1:TutorialEvent):void{ var _local2:TutorialOverlay = overlays.getNext(); loadOverlay(_local2); } override public function deleteBlock(_arg1:Block):void{ super.deleteBlock(_arg1); var _local2:TutorialEvent = new TutorialEvent(TutorialEvent.REMOVED_BLOCK, true, true); _local2.block = _arg1; dispatchEvent(_local2); } override protected function enterDeleteMode(_arg1:Event):void{ super.enterDeleteMode(_arg1); dispatchEvent(new TutorialEvent(TutorialEvent.SELECTED_DELETE, true, true)); } override protected function keyDown(_arg1:KeyboardEvent):void{ } override protected function stopSimulation(_arg1:Event):void{ super.stopSimulation(_arg1); dispatchEvent(new TutorialEvent(TutorialEvent.SELECTED_STOP, true, true)); } override protected function addedBlock(_arg1:Block):void{ super.addedBlock(_arg1); var _local2:TutorialEvent = new TutorialEvent(TutorialEvent.ADDED_BLOCK, true, true); _local2.block = _arg1; dispatchEvent(_local2); } override protected function mouseWheel(_arg1:MouseEvent):void{ } override public function addTitle(_arg1:String):void{ } override protected function hasPermissionToPlay():Boolean{ return (true); } override protected function zoomOut(_arg1:Event=null):void{ } protected function skipTutorial(_arg1:Event):void{ loadNextLevel(); } } }//package contraption.tutorials
Section 154
//WheelSelectedOverlay (contraption.tutorials.WheelSelectedOverlay) package contraption.tutorials { import contraption.*; public class WheelSelectedOverlay extends TutorialOverlay { override public function init(_arg1:Player):void{ _arg1.addEventListener(TutorialEvent.SELECTED_CLOCKWISE_WHEEL, overlayFinished, false, 0, true); } override public function dispose(_arg1:Player):void{ _arg1.removeEventListener(TutorialEvent.SELECTED_CLOCKWISE_WHEEL, overlayFinished); } } }//package contraption.tutorials
Section 155
//ActionContainer (contraption.ActionContainer) package contraption { public interface ActionContainer { function getAllowableActions():Actions; function setAllowableActions(_arg1:Actions):void; } }//package contraption
Section 156
//ActionContainerImpl (contraption.ActionContainerImpl) package contraption { import flash.display.*; public class ActionContainerImpl extends MovieClip implements ActionContainer { protected var allowableActions:Actions; public function ActionContainerImpl():void{ initAllowableActions(); } public function getAllowableActions():Actions{ return (allowableActions); } protected function initAllowableActions():void{ allowableActions = new Actions(); } public function setAllowableActions(_arg1:Actions):void{ this.allowableActions = _arg1; } } }//package contraption
Section 157
//Actions (contraption.Actions) package contraption { public class Actions { public var alwaysDrag:Boolean; public var build:Boolean; public var move:Boolean; public var button:Boolean; public var drag:Boolean; public var inputText:Boolean; public var delete_:Boolean; } }//package contraption
Section 158
//Arena (contraption.Arena) package contraption { import flash.events.*; import contraption.menu.*; import flash.display.*; import de.polygonal.ds.*; import flash.net.*; import contraption.blocks.*; import flash.geom.*; import Box2D.Dynamics.*; import flash.text.*; import contraption.data.*; import flash.ui.*; import flash.errors.*; public class Arena extends MenuWindow { protected var goalBlocks:SLinkedList; protected var movingScreen:Boolean;// = false protected var physicsWorld:b2World; protected var saveButton:Button; protected var dashboard:Dashboard; protected var editing:Boolean; protected var screenMoveX:Number; protected var screenMoveY:Number; protected var arenaForegroundCanvas:Sprite; protected var permissionToPlayLevel:Boolean;// = true protected var endZone:EndZone; protected var startZone:StartZone; protected var targetScale:Number;// = 1 protected var levelId:int;// = 0 protected var parentContraption:Contraption; public var arenaCanvas:Sprite; protected var scaleVelocity:Number;// = 0 protected var arenaBackgroundCanvas:Sprite; protected var playerBlocks:BlockCollection; protected var saveWindow:SaveWindow; protected var arenaBlocks:SLinkedList; protected var xmlWindow:XmlWindow; protected var menuButton:Button; protected var ta:TextField; protected var levelNumber:int;// = 0 public static var ARENA_WIDTH:Number = 2000; public static var MAXIMUM_SCALE:Number = 2.5; public static var ARENA_HEIGHT:Number = 1450; public function Arena(_arg1:Stage, _arg2:Contraption, _arg3:Boolean):void{ arenaCanvas = new Sprite(); arenaForegroundCanvas = new Sprite(); arenaBackgroundCanvas = new Sprite(); xmlWindow = new XmlWindow(); super(false); graphics.beginFill(0xFFFFFF, 0); graphics.drawRect(0, 0, 700, 500); this.parentContraption = _arg2; this.editing = _arg3; addChild(arenaCanvas); arenaCanvas.addChild(arenaBackgroundCanvas); arenaCanvas.addChild(arenaForegroundCanvas); var _local4:Clouds = new Clouds(); _local4.x = -1000; _local4.y = -1000; arenaBackgroundCanvas.addChild(_local4); ta = new TextField(); ta.width = 200; addChild(ta); ta.mouseEnabled = false; playerBlocks = new BlockCollection(); goalBlocks = new SLinkedList(); arenaBlocks = new SLinkedList(); startZone = new StartZone(_arg3); startZone.setPosition(new Point(-150, 50)); arenaBackgroundCanvas.addChild(startZone); endZone = new EndZone(_arg3); endZone.setPosition(new Point(150, 50)); arenaBackgroundCanvas.addChild(endZone); arenaCanvas.x = 350; arenaCanvas.y = 250; dashboard = new DashboardImpl(); dashboard.gotoAndPlay(1); addChild(dashboard); dashboard.addEventListener(DashboardEvent.ZOOM_IN, zoomIn); dashboard.addEventListener(DashboardEvent.ZOOM_OUT, zoomOut); menuButton = new Button("Back to\nMenu"); menuButton.x = 600; menuButton.y = 340; addChild(menuButton); menuButton.addEventListener(MouseEvent.MOUSE_DOWN, returnToMenu); xmlWindow = new XmlWindow(); addChild(xmlWindow); addEventListener(Event.ENTER_FRAME, update, false, 0, true); var _local5:GlobalListener = GlobalListener.getInstance(); _local5.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel, false, 0, true); _local5.addEventListener(KeyboardEvent.KEY_DOWN, keyDown, false, 0, true); _arg2.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown, false, 0, true); _arg2.addEventListener(MouseEvent.MOUSE_MOVE, updateMoveScreen, false, 0, true); _arg2.addEventListener(MouseEvent.MOUSE_UP, stopMoveScreen, false, 0, true); } public function loadBlocks(_arg1:int, _arg2:Boolean, _arg3:Boolean=false):void{ var _local4:URLLoader = new URLLoader(); _local4.addEventListener(Event.COMPLETE, loadLevelHandler); var _local5:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/retrieveLevel.php")); var _local6:URLVariables = new URLVariables(); if (_arg2){ _local6.loadDesign = 1; }; if (_arg3){ _local6.useOfficialLevelNumber = 1; }; _local6.id = _arg1; _local5.data = _local6; _local5.method = URLRequestMethod.POST; _local4.load(_local5); } protected function newSaveWindow():SaveWindow{ throw (new IllegalOperationError("You must extend Arena and implement \"newSaveWindow\"")); } protected function checkPlayerBlocksAreWithinStart():void{ var _local2:Object; var _local3:Rod; var _local1:Iterator = arenaBlocks.getIterator(); _local1 = playerBlocks.getIterator(); while (_local1.hasNext()) { _local2 = _local1.next(); if ((_local2 as Wheel)){ }; if ((_local2 as Rod)){ _local3 = (_local2 as Rod); if (((!(startZone.isInside(_local3.point1))) || (!(startZone.isInside(_local3.point2))))){ deleteBlock(_local3); }; }; }; } public function loadOfficialLevel(_arg1:int):void{ if (User.getInstance().isRegistered()){ loadRetrievedLevelFromXML(OfficialLevelsExp.getOfficialLevels()[("level" + _arg1)].retrieveLevel[0]); } else { loadRetrievedLevelFromXML(OfficialLevels.getOfficialLevels()[("level" + _arg1)].retrieveLevel[0]); }; } protected function addGoalBlock(_arg1:EditableBlock):void{ addEditableBlock(_arg1); goalBlocks.append(_arg1); playerBlocks.append(_arg1); } override public function disposeMenu():void{ super.disposeMenu(); GlobalListener.getInstance().removeEventListener(KeyboardEvent.KEY_DOWN, keyDown); } public function deleteBlock(_arg1:Block):void{ removeChildBlock(_arg1); playerBlocks.deleteBlock(physicsWorld, _arg1); } protected function getToppestLeftest(_arg1:Point, _arg2:Point):Point{ var _local3:Point = new Point(_arg1.x, _arg1.y); if (_arg1.x > _arg2.x){ _local3.x = _arg2.x; }; if (_arg1.y > _arg2.y){ _local3.y = _arg2.y; }; return (_local3); } protected function hasPermissionToPlay():Boolean{ return (((!((levelNumber == 0))) || (User.getInstance().isRegistered()))); } protected function loadLevelHandler(_arg1:Event):void{ loadRetrievedLevelFromXML(new XML(_arg1.target.data)); } protected function beginMoveScreen(_arg1:Number, _arg2:Number):void{ movingScreen = true; this.screenMoveX = _arg1; this.screenMoveY = _arg2; } protected function limitZoom():void{ if (targetScale > MAXIMUM_SCALE){ targetScale = MAXIMUM_SCALE; } else { if ((targetScale * ARENA_WIDTH) < 700){ targetScale = (700 / ARENA_WIDTH); } else { if ((targetScale * ARENA_HEIGHT) < 500){ targetScale = (500 / ARENA_HEIGHT); }; }; }; } protected function addTutorialOverlay(_arg1:int):void{ if (_arg1 == 2){ arenaBackgroundCanvas.addChild(new Level4Overlay()); }; } protected function mouseWheel(_arg1:MouseEvent):void{ if (!hasFocus()){ return; }; targetScale = (targetScale + (_arg1.delta / 50)); limitZoom(); } public function addTitle(_arg1:String):void{ var _local2:TextArea = new TextArea(_arg1, 26, "contraptionFont", "right"); _local2.embedFonts = true; _local2.height = 50; _local2.width = 400; _local2.x = 240; _local2.y = 430; addChild(_local2); } protected function clearPlayerBlocks():void{ var _local2:Block; var _local1:Iterator = playerBlocks.getIterator(); while (_local1.hasNext()) { _local2 = (_local1.next() as Block); _local2.destroyBlock(physicsWorld); removeChildBlock(_local2); }; playerBlocks.clear(); } public function loadLevel(_arg1:int):void{ loadBlocks(_arg1, false); } public function initZoomAndScroll():void{ var _local4:Block; var _local1:Point = new Point(100000, 100000); var _local2:Point = new Point(-100000, -100000); _local1 = getToppestLeftest(_local1, startZone.getPosition().subtract(new Point((startZone.getWidth() / 2), (startZone.getHeight() / 2)))); _local1 = getToppestLeftest(_local1, endZone.getPosition().subtract(new Point((endZone.getWidth() / 2), (endZone.getHeight() / 2)))); _local2 = getBottomestRightest(_local2, startZone.getPosition().add(new Point((endZone.getWidth() / 2), (endZone.getHeight() / 2)))); _local2 = getBottomestRightest(_local2, endZone.getPosition().add(new Point((endZone.getWidth() / 2), (endZone.getHeight() / 2)))); var _local3:Iterator = goalBlocks.getIterator(); while (_local3.hasNext()) { _local4 = (_local3.next() as Block); _local1 = getToppestLeftest(_local1, _local4.getPosition()); _local2 = getBottomestRightest(_local2, _local4.getPosition()); }; arenaCanvas.x = -((((_local1.x + _local2.x) / 2) - (700 / 2))); arenaCanvas.y = (-((((_local1.y + _local2.y) / 2) - (500 / 2))) / (4 / 5)); var _local5:Number = (_local2.x - _local1.x); var _local6:Number = (_local2.y - _local1.y); if (_local5 > _local6){ targetScale = (700 / (_local5 + 100)); } else { targetScale = ((500 / (_local6 + 100)) / (4 / 5)); }; scaleTo(targetScale); } protected function limitCanvasMovement():void{ var _local1:Point = arenaCanvas.globalToLocal(parentContraption.localToGlobal(new Point(0, 0))); var _local2:Point = arenaCanvas.globalToLocal(parentContraption.localToGlobal(new Point(700, 500))); if (_local1.x < (-(ARENA_WIDTH) / 2)){ arenaCanvas.x = ((ARENA_WIDTH / 2) * arenaCanvas.scaleX); } else { if (_local2.x > (ARENA_WIDTH / 2)){ arenaCanvas.x = -((((ARENA_WIDTH / 2) * arenaCanvas.scaleX) - 700)); }; }; if (_local1.y < (-(ARENA_HEIGHT) / 2)){ arenaCanvas.y = ((ARENA_HEIGHT / 2) * arenaCanvas.scaleX); } else { if (_local2.y > (ARENA_HEIGHT / 2)){ arenaCanvas.y = -((((ARENA_HEIGHT / 2) * arenaCanvas.scaleX) - 500)); }; }; } protected function keyDown(_arg1:KeyboardEvent):void{ if (!hasFocus()){ return; }; if (_arg1.keyCode == Keyboard.LEFT){ arenaCanvas.x = (arenaCanvas.x + 20); }; if (_arg1.keyCode == Keyboard.RIGHT){ arenaCanvas.x = (arenaCanvas.x - 20); }; if (_arg1.keyCode == Keyboard.UP){ arenaCanvas.y = (arenaCanvas.y + 20); }; if (_arg1.keyCode == Keyboard.DOWN){ arenaCanvas.y = (arenaCanvas.y - 20); }; limitCanvasMovement(); if (_arg1.keyCode == 73){ zoomIn(); }; if (_arg1.keyCode == 79){ zoomOut(); }; if (targetScale > MAXIMUM_SCALE){ targetScale = MAXIMUM_SCALE; } else { if ((targetScale * ARENA_WIDTH) < 700){ targetScale = (700 / ARENA_WIDTH); }; }; if (_arg1.keyCode == 88){ }; } public function update(_arg1:Event):void{ if (arenaCanvas.scaleX > (targetScale + 0.01)){ scaleTo((arenaCanvas.scaleX - scaleVelocity)); scaleVelocity = (scaleVelocity + 0.01); if (scaleVelocity > ((arenaCanvas.scaleX - targetScale) / 5)){ scaleVelocity = ((arenaCanvas.scaleX - targetScale) / 5); }; } else { if (arenaCanvas.scaleX < (targetScale - 0.01)){ scaleTo((arenaCanvas.scaleX - scaleVelocity)); scaleVelocity = (scaleVelocity - 0.01); if (scaleVelocity < ((arenaCanvas.scaleX - targetScale) / 5)){ scaleVelocity = ((arenaCanvas.scaleX - targetScale) / 5); }; }; }; } protected function returnToMenu(_arg1:MouseEvent):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK)); } public function loadDesign(_arg1:int):void{ loadBlocks(_arg1, true); } protected function getBottomestRightest(_arg1:Point, _arg2:Point):Point{ var _local3:Point = new Point(_arg1.x, _arg1.y); if (_arg1.x < _arg2.x){ _local3.x = _arg2.x; }; if (_arg1.y < _arg2.y){ _local3.y = _arg2.y; }; return (_local3); } protected function onBeginEditing(_arg1:BeginEditingEvent):void{ addChildBlock(_arg1.block); } protected function addChildBlock(_arg1:Block):void{ _arg1.addEventListener(BeginEditingEvent.BEGIN_EDITING, onBeginEditing); _arg1.addEventListener(DeleteBlockEvent.DELETE_BLOCK, onDelete); arenaForegroundCanvas.addChild(_arg1); arenaBackgroundCanvas.addChild(_arg1.getBlockBackground()); } public function loadFromXml(_arg1:XML):void{ var _local3:EditableBlock; var _local4:XML; var _local5:Block; var _local2:Iterator = arenaBlocks.getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as EditableBlock); _local3.destroyBlock(physicsWorld); removeChildBlock(_local3); }; arenaBlocks.clear(); clearPlayerBlocks(); playerBlocks = new BlockCollection(); goalBlocks = new SLinkedList(); arenaBlocks = new SLinkedList(); startZone.setFromXML(_arg1.start[0]); endZone.setFromXML(_arg1.end[0]); for each (_local4 in _arg1.levelBlocks.*) { _local3 = BlockCollection.createLevelBlockFromXml(_local4, physicsWorld, editing); addArenaBlock(_local3); }; for each (_local4 in _arg1.playerBlocks.*) { _local5 = playerBlocks.createPlayerBlockFromXml(_local4, editing); if (_local5.isGoalBlock){ goalBlocks.append(_local5); }; addChildBlock(_local5); }; checkPlayerBlocksAreWithinStart(); finishedLoading(); if (!hasPermissionToPlay()){ addChild(new LinkedIntoBadLevelMenu()); permissionToPlayLevel = false; }; } protected function stopMoveScreen(_arg1:MouseEvent=null):void{ movingScreen = false; } protected function zoomIn(_arg1:Event=null):void{ targetScale = (targetScale + 0.1); limitZoom(); } protected function loadFromxmlWindow(_arg1:MouseEvent):void{ loadFromXml(new XML(xmlWindow.xmlField.text)); } protected function updateMoveScreen(_arg1:MouseEvent=null):void{ if (movingScreen){ arenaCanvas.x = (arenaCanvas.x + (mouseX - screenMoveX)); arenaCanvas.y = (arenaCanvas.y + (mouseY - screenMoveY)); screenMoveX = mouseX; screenMoveY = mouseY; limitCanvasMovement(); }; } protected function addArenaBlock(_arg1:EditableBlock):void{ addEditableBlock(_arg1); arenaBlocks.append(_arg1); } protected function scaleTo(_arg1:Number):void{ if ((((stage == null)) || ((arenaCanvas == null)))){ return; }; var _local2:Point = arenaCanvas.globalToLocal(parentContraption.localToGlobal(new Point((700 / 2), (500 / 2)))); var _local3:Number = (_arg1 - arenaCanvas.scaleX); arenaCanvas.scaleX = _arg1; arenaCanvas.scaleY = _arg1; arenaCanvas.x = (arenaCanvas.x - (_local2.x * _local3)); arenaCanvas.y = (arenaCanvas.y - (_local2.y * _local3)); limitCanvasMovement(); } protected function mouseDown(_arg1:MouseEvent):void{ if (((!(parent)) || ((visible == false)))){ return; }; _arg1.stopPropagation(); beginMoveScreen(mouseX, mouseY); } protected function addEditableBlock(_arg1:EditableBlock):void{ addChildBlock(_arg1); } protected function onDelete(_arg1:DeleteBlockEvent):void{ var _local2:EditableBlock = _arg1.block; _local2.destroyBlock(physicsWorld); removeChildBlock(_local2); if (arenaBlocks.nodeOf(_local2) != null){ arenaBlocks.remove(arenaBlocks.nodeOf(_local2)); }; if (goalBlocks.nodeOf(_local2) != null){ goalBlocks.remove(goalBlocks.nodeOf(_local2)); }; if (playerBlocks.nodeOf(_local2) != null){ playerBlocks.remove(playerBlocks.nodeOf(_local2)); }; } protected function loadRetrievedLevelFromXML(_arg1:XML):void{ levelId = _arg1.levelId; levelNumber = _arg1.levelNumber; loadFromXml(_arg1.level[0]); addTitle(_arg1.name); addTutorialOverlay(levelNumber); initZoomAndScroll(); } public function getLevelXml():XML{ var _local5:Block; var _local7:XML; var _local1:XML = <level/> ; var _local2:XML = <levelBlocks/> ; var _local3:XML = <playerBlocks/> ; _local1.appendChild(_local2); _local1.appendChild(_local3); _local1.appendChild(startZone.getXml()); _local1.appendChild(endZone.getXml()); var _local4:Iterator = arenaBlocks.getIterator(); while (_local4.hasNext()) { _local5 = (_local4.next() as EditableBlock); _local2.appendChild(_local5.getXml()); }; _local4 = playerBlocks.getIterator(); while (_local4.hasNext()) { _local5 = (_local4.next() as Block); _local5.saveIndex = undefined; }; _local4 = playerBlocks.getIterator(); var _local6:int; while (_local4.hasNext()) { _local5 = (_local4.next() as Block); _local5.saveIndex = _local6; _local6++; }; _local4 = playerBlocks.getIterator(); while (_local4.hasNext()) { _local5 = (_local4.next() as Block); _local7 = _local5.getXml(); _local3.appendChild(_local7); }; return (_local1); } protected function removeChildBlock(_arg1:Block):void{ arenaForegroundCanvas.removeChild(_arg1); arenaBackgroundCanvas.removeChild(_arg1.getBlockBackground()); } public function hasFocus():Boolean{ return (((((((parent) && ((visible == true)))) && (parentContraption.isCurrentMenu(this)))) && (permissionToPlayLevel))); } protected function zoomOut(_arg1:Event=null):void{ targetScale = (targetScale - 0.1); limitZoom(); } public function isInStartZone(_arg1:Point):Boolean{ return (startZone.isInside(arenaCanvas.globalToLocal(parentContraption.localToGlobal(_arg1)))); } } }//package contraption
Section 159
//BuildingPointer (contraption.BuildingPointer) package contraption { import flash.display.*; public class BuildingPointer extends MousePointer { public function BuildingPointer(_arg1:Boolean):void{ super(_arg1); } override protected function getActingPointer():MovieClip{ return (new BuildingMousePointer()); } override protected function getPointer():MovieClip{ return (new BuildingMousePointer()); } } }//package contraption
Section 160
//ButtonPointer (contraption.ButtonPointer) package contraption { import flash.display.*; public class ButtonPointer extends MousePointer { public function ButtonPointer(_arg1:Boolean):void{ super(_arg1); } override protected function getActingPointer():MovieClip{ return (new ButtonMousePointer()); } override protected function getPointer():MovieClip{ return (new ButtonMousePointer()); } } }//package contraption
Section 161
//Configuration (contraption.Configuration) package contraption { import flash.net.*; public class Configuration { protected var simpleGraphicsMode:Boolean; protected var userCookie:SharedObject; protected var mute:Boolean; private static var allowInstantiation:Boolean; private static var instance:Configuration; public function Configuration():void{ if (!allowInstantiation){ throw (new Error("Error: Instantiation failed: Use Configuration.getInstance() instead of new.")); }; userCookie = SharedObject.getLocal("configuration"); if (userCookie.data.simpleGraphicsMode != null){ simpleGraphicsMode = (userCookie.data.simpleGraphicsMode as Boolean); mute = (userCookie.data.mute as Boolean); } else { simpleGraphicsMode = false; mute = true; }; } public function isMuted():Boolean{ return (mute); } public function setSimpleGraphicsMode(_arg1:Boolean):void{ this.simpleGraphicsMode = _arg1; userCookie.data.simpleGraphicsMode = _arg1; } public function setMute(_arg1:Boolean):void{ this.mute = _arg1; userCookie.data.mute = _arg1; } public function isInSimpleGraphicsMode():Boolean{ return (simpleGraphicsMode); } public static function getInstance():Configuration{ if (instance == null){ allowInstantiation = true; instance = new (Configuration); allowInstantiation = false; }; return (instance); } } }//package contraption
Section 162
//ContraptionUrlLoader (contraption.ContraptionUrlLoader) package contraption { import flash.events.*; import contraption.menu.*; import flash.net.*; public class ContraptionUrlLoader extends URLLoader { protected var addSpinner:Boolean; public function ContraptionUrlLoader(_arg1:Boolean=true, _arg2:URLRequest=null){ super(_arg2); this.addSpinner = _arg1; addEventListener(Event.COMPLETE, loadComplete); } protected function loadComplete(_arg1:Event):void{ if (addSpinner){ dispatchEvent(new MenuEvent(MenuEvent.REMOVE_SPINNER, true, true)); }; } override public function load(_arg1:URLRequest):void{ if (addSpinner){ dispatchEvent(new MenuEvent(MenuEvent.ADD_SPINNER, true, true)); }; super.load(_arg1); } } }//package contraption
Section 163
//DeletePointer (contraption.DeletePointer) package contraption { import flash.display.*; public class DeletePointer extends MousePointer { public function DeletePointer(_arg1:Boolean):void{ super(_arg1); } override protected function getActingPointer():MovieClip{ return (new DeleteMousePointer()); } override protected function getPointer():MovieClip{ return (new DeleteMousePointer()); } } }//package contraption
Section 164
//DragPointer (contraption.DragPointer) package contraption { import flash.display.*; public class DragPointer extends MousePointer { public function DragPointer(_arg1:Boolean):void{ super(_arg1); } override protected function getActingPointer():MovieClip{ return (new DragActingMousePointer()); } override protected function getPointer():MovieClip{ return (new DragMousePointer()); } } }//package contraption
Section 165
//Editor (contraption.Editor) package contraption { import flash.events.*; import contraption.menu.*; import flash.display.*; import contraption.blocks.*; import flash.geom.*; public class Editor extends Arena { protected var pleaseRegisterMenu:PleaseRegisterMenu; public function Editor(_arg1:Stage, _arg2:Contraption){ super(_arg1, _arg2, true); graphics.beginFill(16703853, 1); graphics.drawRect(0, 0, 700, 500); dashboard.setMode(Dashboard.MODE_EDIT_LEVEL); dashboard.addEventListener(DashboardEvent.SAVE, saveLevel); dashboard.addEventListener(DashboardEvent.GOAL_CIRCLE, addGoalCircle); dashboard.addEventListener(DashboardEvent.GOAL_SQUARE, addGoalRectangle); dashboard.addEventListener(DashboardEvent.STATIC_CIRCLE, addStaticCircle); dashboard.addEventListener(DashboardEvent.STATIC_SQUARE, addStaticRectangle); dashboard.addEventListener(DashboardEvent.DYNAMIC_CIRCLE, addDynamicCircle); dashboard.addEventListener(DashboardEvent.DYNAMIC_SQUARE, addDynamicRectangle); dashboard.addEventListener(DashboardEvent.TEST_LEVEL, tryLevel); pleaseRegisterMenu = new PleaseRegisterMenu(); if (!User.getInstance().isRegistered()){ addChild(pleaseRegisterMenu); }; } protected function addStaticRectangle(_arg1:Event):void{ if (isOverMaxBlocks()){ return; }; var _local2:EditableBlock = new StaticRectangle(true, arenaCanvas.globalToLocal(new Point(200, 200))); addArenaBlock(_local2); } protected function addGoalCircle(_arg1:Event):void{ if (isOverMaxBlocks()){ return; }; var _local2:EditableBlock = new Wheel(arenaCanvas.globalToLocal(new Point(200, 200)), Wheel.NO_SPIN, 0, NaN, true, true); addGoalBlock(_local2); } protected function saveLevel(_arg1:Event):void{ if (_arg1.target == this){ return; }; _arg1.stopPropagation(); var _local2:SaveEvent = new SaveEvent(SaveEvent.SAVE_LEVEL, true, true); _local2.xml = getLevelXml(); dispatchEvent(_local2); } protected function tryLevel(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.TRY_LEVEL)); } protected function isOverMaxBlocks():Boolean{ return (false); } override protected function newSaveWindow():SaveWindow{ return (new SaveLevelWindow()); } protected function addDynamicRectangle(_arg1:Event):void{ if (isOverMaxBlocks()){ return; }; var _local2:EditableBlock = new DynamicRectangle(true, false, arenaCanvas.globalToLocal(new Point(200, 200))); addArenaBlock(_local2); } protected function addDynamicCircle(_arg1:Event):void{ if (isOverMaxBlocks()){ return; }; var _local2:EditableBlock = new DynamicCircle(true, arenaCanvas.globalToLocal(new Point(200, 200))); addArenaBlock(_local2); } protected function addGoalRectangle(_arg1:Event):void{ if (isOverMaxBlocks()){ return; }; var _local2:EditableBlock = new JointedDynamicRectangle(true, true, arenaCanvas.globalToLocal(new Point(200, 200))); addGoalBlock(_local2); } protected function addStaticCircle(_arg1:Event):void{ if (isOverMaxBlocks()){ return; }; var _local2:EditableBlock = new StaticCircle(true, arenaCanvas.globalToLocal(new Point(200, 200))); addArenaBlock(_local2); } } }//package contraption
Section 166
//EndZone (contraption.EndZone) package contraption { import contraption.menu.*; public class EndZone extends StartZone { public function EndZone(_arg1:Boolean):void{ super(_arg1); } override protected function drawZone():void{ var _local1:TextArea; if (!editing){ _local1 = new TextArea("Goal", 18); _local1.bold(); _local1.textColor = 15496308; _local1.x = -22; _local1.y = -15; addChild(_local1); }; super.drawZone(); } override protected function initAllowableActions():void{ allowableActions = new Actions(); allowableActions.alwaysDrag = true; } override protected function getColour():int{ return (15831441); } override protected function getXmlRoot():XML{ return (<end/> ); } override protected function getBorderColour():int{ return (12281446); } } }//package contraption
Section 167
//GlobalListener (contraption.GlobalListener) package contraption { import flash.display.*; public class GlobalListener { protected var whirledConnected:Boolean;// = false protected var stage:Stage; private static var allowInstantiation:Boolean; private static var instance:GlobalListener; public function GlobalListener():void{ if (!allowInstantiation){ throw (new Error("Error: Instantiation failed: Use Configuration.getInstance() instead of new.")); }; } public function init(_arg1:Stage, _arg2:DisplayObject):void{ this.stage = _arg1; } public function removeEventListener(_arg1:String, _arg2:Function, _arg3:Boolean=false):void{ stage.removeEventListener(_arg1, _arg2, _arg3); } public function addEventListener(_arg1:String, _arg2:Function, _arg3:Boolean=false, _arg4:int=0, _arg5:Boolean=false):void{ stage.addEventListener(_arg1, _arg2, _arg3, _arg4, _arg5); } public static function getInstance():GlobalListener{ if (instance == null){ allowInstantiation = true; instance = new (GlobalListener); allowInstantiation = false; }; return (instance); } } }//package contraption
Section 168
//ModeEvent (contraption.ModeEvent) package contraption { import flash.events.*; public class ModeEvent extends Event { public var actionType:int; public static const ACTION_UNKNOWN:int = 0; public static const ACTION_BUILD:int = 2; public static const DEFAULT_MODE:String = "defaultMode"; public static const MOVE_MODE:String = "moveMode"; public static const END_ACTION:String = "endAction"; public static const START_ACTION:String = "startAction"; public static const DELETE_MODE:String = "deleteMode"; public static const ACTION_MOVE:int = 1; public static const ACTION_BUTTON:int = 3; public function ModeEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); actionType = ACTION_UNKNOWN; } override public function clone():Event{ var _local1:ModeEvent = new ModeEvent(type, bubbles, cancelable); _local1.actionType = actionType; return (_local1); } } }//package contraption
Section 169
//MousePointer (contraption.MousePointer) package contraption { import flash.display.*; public class MousePointer extends Sprite { protected var acting:Boolean; public static var NORMAL_DOWN:Number = 1; public static var BUILDING_UP:Number = 2; public static var DRAG_UP:Number = 8; public static var MOVE_UP:Number = 6; public static var BUILDING_DOWN:Number = 3; public static var DELETE_UP:Number = 4; public static var MOVE_DOWN:Number = 7; public static var BUTTON_DOWN:Number = 11; public static var NORMAL_UP:Number = 0; public static var DELETE_DOWN:Number = 5; public static var BUTTON_UP:Number = 10; public static var DRAG_DOWN:Number = 9; public function MousePointer(_arg1:Boolean):void{ mouseEnabled = false; if (_arg1){ drawActingPointer(); } else { drawPointer(); }; } public function getActing():Boolean{ return (acting); } protected function getPointer():MovieClip{ return (new DefaultMousePointer()); } protected function drawActingPointer():void{ var _local1:MovieClip = getActingPointer(); _local1.mouseEnabled = false; addChild(_local1); } protected function drawPointer():void{ var _local1:MovieClip = getPointer(); _local1.mouseEnabled = false; addChild(_local1); } protected function getActingPointer():MovieClip{ return (new DefaultMousePointer()); } } }//package contraption
Section 170
//MovePointer (contraption.MovePointer) package contraption { import flash.display.*; public class MovePointer extends MousePointer { public function MovePointer(_arg1:Boolean):void{ super(_arg1); } override protected function getActingPointer():MovieClip{ return (new MoveMousePointer()); } override protected function getPointer():MovieClip{ return (new MoveMousePointer()); } } }//package contraption
Section 171
//Music (contraption.Music) package contraption { import flash.net.*; import flash.media.*; public class Music { protected var mute:Boolean;// = false protected var arenaSound:Sound; protected var menuSound:Sound; protected var menuSoundChannel:SoundChannel; protected var playRegisteredSound:Boolean;// = false protected var arenaSoundChannel:SoundChannel; protected var playArenaSound:Boolean;// = false private static var allowInstantiation:Boolean; private static var instance:Music; public function Music():void{ var _local2:URLRequest; super(); if (!allowInstantiation){ throw (new Error("Error: Instantiation failed: Use Music.getInstance() instead of new.")); }; playRegisteredSound = User.getInstance().isRegistered(); mute = Configuration.getInstance().isMuted(); menuSound = new Sound(); if (playRegisteredSound){ _local2 = new URLRequest((Contraption.SERVER_LOCATION + "/game/arenaLoop.mp3")); } else { _local2 = new URLRequest((Contraption.SERVER_LOCATION + "/game/menuLoop.mp3")); }; var _local1:SoundLoaderContext = new SoundLoaderContext(4000, true); menuSound.load(_local2, _local1); arenaSound = menuSound; } public function playMenu():void{ return (playArena()); } protected function checkRegistered():void{ var _local1:URLRequest; var _local2:SoundLoaderContext; if (((User.getInstance().isRegistered()) && (!(playRegisteredSound)))){ playRegisteredSound = true; setMute(true); Configuration.getInstance().setMute(false); menuSound = new Sound(); _local1 = new URLRequest("http://fc.pegproductions.com/arenaLoop.mp3"); _local2 = new SoundLoaderContext(4000, true); menuSound.load(_local1, _local2); arenaSound = menuSound; mute = false; }; } public function playArena():void{ checkRegistered(); playArenaSound = true; if (mute){ return; }; if (menuSoundChannel != null){ menuSoundChannel.stop(); menuSoundChannel = null; }; if (arenaSoundChannel == null){ arenaSoundChannel = arenaSound.play(0, 10000000); }; } public function stopSound():void{ setMute(true); } public function setMute(_arg1:Boolean):void{ this.mute = _arg1; if (_arg1){ if (menuSoundChannel != null){ menuSoundChannel.stop(); menuSoundChannel = null; }; if (arenaSoundChannel != null){ arenaSoundChannel.stop(); arenaSoundChannel = null; }; } else { if (playArenaSound){ playArena(); } else { playMenu(); }; }; } public static function getInstance():Music{ if (instance == null){ allowInstantiation = true; try { instance = new (Music); } catch(e:Error) { }; allowInstantiation = false; }; return (instance); } } }//package contraption
Section 172
//NoJointedCollisionsFilter (contraption.NoJointedCollisionsFilter) package contraption { import contraption.blocks.*; import Box2D.Dynamics.*; import Box2D.Collision.Shapes.*; public class NoJointedCollisionsFilter extends b2CollisionFilter { public static var b2_defaultFilter:b2CollisionFilter = new b2CollisionFilter(); override public function ShouldCollide(_arg1:b2Shape, _arg2:b2Shape):Boolean{ if (!super.ShouldCollide(_arg1, _arg2)){ return (false); }; var _local3:Block = (_arg1.GetUserData() as Block); var _local4:Block = (_arg2.GetUserData() as Block); if ((((_local3 == null)) || ((_local4 == null)))){ return (true); }; if (((_local3.collidesWithJointedBlocks()) && (_local4.collidesWithJointedBlocks()))){ return (true); }; if (((!((_local3.jointedBlocks == null))) && (!((_local3.jointedBlocks[_local4] == null))))){ return (false); }; return (true); } } }//package contraption
Section 173
//Player (contraption.Player) package contraption { import flash.events.*; import contraption.menu.*; import flash.display.*; import de.polygonal.ds.*; import flash.net.*; import contraption.blocks.*; import flash.geom.*; import Box2D.Dynamics.*; import flash.utils.*; import Box2D.Collision.*; import Box2D.Common.Math.*; import Box2D.Dynamics.Joints.*; import Box2D.Dynamics.Contacts.*; import Box2D.Collision.Shapes.*; import flash.text.*; import flash.ui.*; public class Player extends Arena { public var currentLevelId:int;// = 0 public var currentLevelXml:XML; public var moveMode:Boolean;// = false protected var movingJoints:Dictionary; protected var buildingBlockType:BlockType; public var linkedIn:Boolean; protected var movingJOriginal:Point; protected var tickCounter:TickCounter; protected var buildingBlock:Block; public var building:Boolean;// = false protected var movingJ:Boolean;// = false protected var movingBlocksOriginalPosition:SLinkedList; public var hasFinishedLevel:Boolean;// = false public var running:Boolean;// = false public var m_iterations:int;// = 10 public var m_timeStep:Number;// = 0.0333333333333333 protected var moving:Boolean;// = false protected var movingIllegal:Boolean; protected var movingJointsOriginalPosition:Dictionary; protected var movingIllegalNotification:Sprite; protected var isCurrentDesignSolution:Boolean;// = false private var ox:Number; private var oy:Number; protected var movingJoint:JointCollection; public var deleteMode:Boolean;// = false protected var te:TextField; protected var movingBlocks:SLinkedList; protected var movingNumCollisions:int; public function Player(_arg1:Stage, _arg2:Contraption, _arg3:Boolean=false, _arg4:Boolean=false){ buildingBlockType = BlockType.ROD_HOLLOW; super(_arg1, _arg2, false); this.linkedIn = _arg3; if (!_arg4){ dashboard.setMode(Dashboard.MODE_EDIT_CONTRPATION); } else { dashboard.setMode(Dashboard.MODE_TEST_LEVEL); }; dashboard.addEventListener(DashboardEvent.GO, startSimulation); dashboard.addEventListener(DashboardEvent.STOP, stopSimulation); dashboard.addEventListener(DashboardEvent.CW_WHEEL, clockwiseWheelMode); dashboard.addEventListener(DashboardEvent.CCW_WHEEL, counterClockwiseWheelMode); dashboard.addEventListener(DashboardEvent.NP_WHEEL, noSpinWheelMode); dashboard.addEventListener(DashboardEvent.HOLLOW_ROD, hollowRodMode); dashboard.addEventListener(DashboardEvent.SOLID_ROD, solidRodMode); dashboard.addEventListener(DashboardEvent.MOVE, enterMoveMode); dashboard.addEventListener(DashboardEvent.DELETE, enterDeleteMode); dashboard.addEventListener(DashboardEvent.SAVE, saveDesign); solidRodMode(); var _local5:GlobalListener = GlobalListener.getInstance(); _local5.addEventListener(KeyboardEvent.KEY_UP, keyUp, false, 0, true); _arg2.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); _arg2.addEventListener(MouseEvent.MOUSE_UP, mouseUp, false, 0, true); resetPhysicsWorld(); _arg2.addEventListener(MouseEvent.MOUSE_MOVE, updateMoving, false, 0, true); _arg2.addEventListener(MouseEvent.MOUSE_MOVE, drawBuilding, false, 0, true); _arg2.addEventListener(MenuEvent.SAVE_CONTRAPTION, saveDesign, false, 0, true); _arg2.addEventListener(MenuEvent.CHANGE_GRAPHICS_OPTION, updateBlockGraphics, false, 0, true); te = new TextField(); te.mouseEnabled = false; addChild(te); tickCounter = new TickCounter(); tickCounter.x = 650; tickCounter.y = 470; tickCounter.visible = false; addChild(tickCounter); var _local6:Button = new ToggleGraphicsButton(); _local6.x = 10; _local6.y = 425; addChild(_local6); } protected function endTryLevel(_arg1:Event):void{ dispatchEvent(new MenuEvent(MenuEvent.MENU_BACK)); } protected function startSimulation(_arg1:Event):void{ if (running){ return; }; mouseUp(); running = true; currentLevelXml = null; currentLevelXml = getLevelXml(); loadFromXml(currentLevelXml); resetPhysicsWorld(); initPlayerBlocks(); initJoints(); initArenaBlocks(); var _local2:Sprite = (dashboard.stopButton.parent as Sprite); if (_local2 == null){ _local2 = (dashboard.goButton.parent as Sprite); }; _local2.addChild(dashboard.stopButton); _local2.removeChild(dashboard.goButton); tickCounter.reset(); } override protected function initAllowableActions():void{ allowableActions = new Actions(); allowableActions.alwaysDrag = true; } protected function loadNextLevel():void{ var _local1:MenuEvent = new MenuEvent(MenuEvent.LEVEL_COMPLETE, true, true); _local1.levelNumber = levelNumber; _local1.levelId = levelId; dispatchEvent(_local1); } override protected function newSaveWindow():SaveWindow{ return (new SaveDesignWindow()); } protected function initPlayerBlocks():void{ var _local2:Block; var _local1:Iterator = playerBlocks.getIterator(); while (_local1.hasNext()) { _local2 = (_local1.next() as Block); _local2.generatePhysicsBody(physicsWorld); _local2.setJointedBlocks(); }; } protected function getIllegalNotification(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Sprite{ var _local5 = 60; var _local6:Number = Math.abs((_arg1 - _arg3)); if (Math.abs((_arg2 - _arg4)) > _local6){ _local6 = Math.abs((_arg2 - _arg4)); }; if (_local6 < _local5){ _local6 = _local5; }; var _local7:Sprite = new Sprite(); _local7.graphics.lineStyle(3, 16720418); _local7.graphics.moveTo((_local6 / 4), (_local6 / 4)); _local7.graphics.lineTo((-(_local6) / 4), (-(_local6) / 4)); _local7.graphics.moveTo((_local6 / 4), (-(_local6) / 4)); _local7.graphics.lineTo((-(_local6) / 4), (_local6 / 4)); _local7.x = (_arg1 + ((_arg3 - _arg1) / 2)); _local7.y = (_arg2 + ((_arg4 - _arg2) / 2)); return (_local7); } protected function resetMode():void{ moveMode = false; deleteMode = false; } protected function doWhirledAwards():void{ if (Contraption.VERSION_NAME != "whirled.com"){ return; }; var _local1:Array = new Array(21); var _local2:Array = new Array(21); _local1[0] = 91; _local1[1] = 55; _local1[2] = 16; _local1[3] = 102; _local1[4] = 31; _local1[5] = 89; _local1[6] = 88; _local1[7] = 86; _local1[8] = 100; _local1[9] = 17; _local1[10] = 62; _local1[11] = 19; _local1[12] = 23; _local1[13] = 20; _local1[14] = 24; _local1[15] = 28; _local1[16] = 69; _local1[17] = 76; _local1[18] = 60; _local1[19] = 54; _local1[20] = 4575; var _local3:SharedObject = SharedObject.getLocal("user"); var _local4:int; while (_local4 < _local1.length) { _local2[_local4] = (_local3.data[("level" + _local1[_local4])] == "true"); _local4++; }; if (((((((_local2[0]) && (_local2[1]))) && (_local2[2]))) && (_local2[3]))){ parentContraption.whirledGameControl.player.awardTrophy("Contraption1to4"); }; if (((((((((_local2[4]) && (_local2[5]))) && (_local2[6]))) && (_local2[7]))) && (_local2[8]))){ parentContraption.whirledGameControl.player.awardTrophy("Contraption5to9"); }; if (((((((((_local2[9]) && (_local2[10]))) && (_local2[11]))) && (_local2[12]))) && (_local2[13]))){ parentContraption.whirledGameControl.player.awardTrophy("Contraption10to14"); }; if (((((((((((_local2[14]) && (_local2[15]))) && (_local2[16]))) && (_local2[17]))) && (_local2[18]))) && (_local2[19]))){ parentContraption.whirledGameControl.player.awardTrophy("Contraption15to20"); }; var _local5:Boolean; _local4 = 0; while (_local4 < _local1.length) { if (!_local2[_local4]){ _local5 = false; }; _local4++; }; if (_local5){ parentContraption.whirledGameControl.player.awardTrophy("ContraptionFin"); }; var _local6:int = parentContraption.whirledGameControl.game.getMyId(); parentContraption.whirledGameControl.game.endGameWithScores([_local6], [1], 3); parentContraption.whirledGameControl.game.playerReady(); } protected function updateMoving(_arg1:Event):void{ var _local5:Block; var _local6:Point; var _local7:JointCollection; if (movingJ){ updateMovingJ(); }; if (!moving){ return; }; var _local2:Number = (arenaCanvas.mouseX - ox); var _local3:Number = (arenaCanvas.mouseY - oy); var _local4:Iterator = movingBlocks.getIterator(); while (_local4.hasNext()) { _local5 = (_local4.next() as Block); _local6 = _local5.getPosition(); _local5.setPosition(new Point((_local6.x + _local2), (_local6.y + _local3))); }; for each (_local7 in movingJoints) { _local6 = _local7.getPosition(); _local7.setPosition(new Point((_local6.x + _local2), (_local6.y + _local3))); }; movingIllegalNotification.x = (movingIllegalNotification.x + _local2); movingIllegalNotification.y = (movingIllegalNotification.y + _local3); if (countCollisions() > movingNumCollisions){ movingIllegal = true; movingIllegalNotification.visible = true; } else { movingIllegal = false; movingIllegalNotification.visible = false; }; ox = arenaCanvas.mouseX; oy = arenaCanvas.mouseY; } protected function saveDesign(_arg1:Event):void{ if (_arg1.target == this){ return; }; _arg1.stopPropagation(); var _local2:SaveEvent = new SaveEvent(SaveEvent.SAVE_CONTRAPTION, true, true); _local2.xml = getLevelXml(); _local2.currentLevelId = levelId; _local2.isSolution = isCurrentDesignSolution; dispatchEvent(_local2); } protected function mouseUp(_arg1:MouseEvent=null):void{ var _local8:Block; if (((!((movingIllegalNotification == null))) && (arenaCanvas.contains(movingIllegalNotification)))){ arenaCanvas.removeChild(movingIllegalNotification); movingIllegalNotification = null; }; if (movingJ){ movingJ = false; if (movingIllegal){ movingJoint.moveJoint(movingJOriginal.subtract(movingJoint.getPosition())); }; }; if (movingScreen){ movingScreen = false; }; if (moving){ stopMoving(); }; if (((running) || (!(building)))){ return; }; if (building){ building = false; removeChildBlock(buildingBlock); playerBlocks.deleteBlock(physicsWorld, buildingBlock); buildingBlock = null; }; var _local2:Number = arenaCanvas.mouseX; var _local3:Number = arenaCanvas.mouseY; var _local4:Number = startZone.getPosition().x; var _local5:Number = startZone.getPosition().y; var _local6:Number = startZone.getWidth(); var _local7:Number = startZone.getHeight(); if ((((Math.abs((ox - _local4)) > (_local6 / 2))) || ((Math.abs((_local2 - _local4)) > (_local6 / 2))))){ return; }; if ((((Math.abs((oy - _local5)) > (_local7 / 2))) || ((Math.abs((_local3 - _local5)) > (_local7 / 2))))){ return; }; if (buildingBlockType == BlockType.ROD_HOLLOW){ _local8 = playerBlocks.createHollowRod(new Point(ox, oy), new Point(_local2, _local3), arenaCanvas.scaleX, null, true); } else { if (buildingBlockType == BlockType.ROD_SOLID){ _local8 = playerBlocks.createSolidRod(new Point(ox, oy), new Point(_local2, _local3), arenaCanvas.scaleX, null, true); } else { if (buildingBlockType == BlockType.WHEEL_NO_SPIN){ _local8 = playerBlocks.createWheel(new Point(_local2, _local3), arenaCanvas.scaleX, Wheel.NO_SPIN); } else { if (buildingBlockType == BlockType.WHEEL_CLOCKWISE){ _local8 = playerBlocks.createWheel(new Point(_local2, _local3), arenaCanvas.scaleX, Wheel.CLOCKWISE); } else { if (buildingBlockType == BlockType.WHEEL_COUNTER_CLOCKWISE){ _local8 = playerBlocks.createWheel(new Point(_local2, _local3), arenaCanvas.scaleX, Wheel.COUNTER_CLOCKWISE); }; }; }; }; }; addChildBlock(_local8); _local8.generatePhysicsBody(physicsWorld); if (checkCollisions(_local8)){ playerBlocks.deleteBlock(physicsWorld, _local8); removeChildBlock(_local8); } else { addedBlock(_local8); }; } override protected function keyDown(_arg1:KeyboardEvent):void{ super.keyDown(_arg1); if (!hasFocus()){ return; }; if (_arg1.keyCode == Keyboard.SPACE){ if (running){ stopSimulation(null); } else { startSimulation(null); }; }; if (_arg1.keyCode == Keyboard.SHIFT){ dispatchEvent(new ModeEvent(ModeEvent.MOVE_MODE)); }; if (_arg1.keyCode == Keyboard.CONTROL){ dispatchEvent(new ModeEvent(ModeEvent.DELETE_MODE)); }; if (_arg1.keyCode == 84){ tickCounter.visible = !(tickCounter.visible); }; if (running){ return; }; if (_arg1.keyCode == 82){ hollowRodMode(null); }; if (_arg1.keyCode == 83){ solidRodMode(null); }; if (_arg1.keyCode == 85){ noSpinWheelMode(null); }; if (_arg1.keyCode == 87){ clockwiseWheelMode(null); }; if (_arg1.keyCode == 67){ counterClockwiseWheelMode(null); }; } protected function hasWon():Boolean{ var _local2:Block; var _local3:Point; var _local4:Number; var _local5:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; if (goalBlocks.isEmpty()){ return (false); }; var _local1:Iterator = goalBlocks.getIterator(); var _local6:Number = (endZone.getPosition().x - (endZone.getWidth() / 2)); var _local7:Number = (endZone.getPosition().x + (endZone.getWidth() / 2)); var _local8:Number = (endZone.getPosition().y - (endZone.getHeight() / 2)); var _local9:Number = (endZone.getPosition().y + (endZone.getHeight() / 2)); while (_local1.hasNext()) { _local2 = (_local1.next() as Block); if ((_local2 as Wheel)){ _local10 = (_local2.x - (_local2.getWidth() / 2)); _local11 = (_local2.x + (_local2.getWidth() / 2)); _local12 = (_local2.y - (_local2.getWidth() / 2)); _local13 = (_local2.y + (_local2.getWidth() / 2)); } else { _local10 = (_local2.x - ((_local2.width - 4) / 2)); _local11 = (_local2.x + ((_local2.width - 4) / 2)); _local12 = (_local2.y - ((_local2.height - 4) / 2)); _local13 = (_local2.y + ((_local2.height - 4) / 2)); }; if ((((((((_local10 < _local6)) || ((_local11 > _local7)))) || ((_local12 < _local8)))) || ((_local13 > _local9)))){ return (false); }; }; return (true); } protected function clockwiseWheelMode(_arg1:Event):void{ resetMode(); buildingBlockType = BlockType.WHEEL_CLOCKWISE; dashboard.hilightButton(dashboard.cwWheelButton); dispatchEvent(new ModeEvent(ModeEvent.DEFAULT_MODE)); } override public function disposeMenu():void{ super.disposeMenu(); stopSimulation(null); parentContraption.removeEventListener(MenuEvent.SAVE_CONTRAPTION, saveDesign); } protected function drawBuilding(_arg1:Event):void{ var _local4:Block; if (!building){ return; }; if (buildingBlock != null){ removeChildBlock(buildingBlock); playerBlocks.deleteBlock(physicsWorld, buildingBlock); }; var _local2:Number = arenaCanvas.mouseX; var _local3:Number = arenaCanvas.mouseY; if (buildingBlockType == BlockType.ROD_HOLLOW){ _local4 = playerBlocks.createHollowRod(new Point(ox, oy), new Point(_local2, _local3), arenaCanvas.scaleX, null, true); } else { if (buildingBlockType == BlockType.ROD_SOLID){ _local4 = playerBlocks.createSolidRod(new Point(ox, oy), new Point(_local2, _local3), arenaCanvas.scaleX, null, true); } else { if (buildingBlockType == BlockType.WHEEL_NO_SPIN){ _local4 = playerBlocks.createWheel(new Point(_local2, _local3), arenaCanvas.scaleX, Wheel.NO_SPIN); } else { if (buildingBlockType == BlockType.WHEEL_CLOCKWISE){ _local4 = playerBlocks.createWheel(new Point(_local2, _local3), arenaCanvas.scaleX, Wheel.CLOCKWISE); } else { if (buildingBlockType == BlockType.WHEEL_COUNTER_CLOCKWISE){ _local4 = playerBlocks.createWheel(new Point(_local2, _local3), arenaCanvas.scaleX, Wheel.COUNTER_CLOCKWISE); }; }; }; }; }; if ((_local4 as Wheel)){ ox = _local2; oy = _local3; }; buildingBlock = _local4; addChildBlock(buildingBlock); buildingBlock.generatePhysicsBody(physicsWorld); if (movingIllegalNotification != null){ arenaCanvas.removeChild(movingIllegalNotification); movingIllegalNotification = null; }; if (checkCollisions(buildingBlock)){ movingIllegalNotification = getIllegalNotification(ox, oy, _local2, _local3); arenaCanvas.addChild(movingIllegalNotification); }; } protected function checkCollisions(_arg1:Block):Boolean{ var _local3:Block; var _local4:Block; physicsWorld.CleanBodyList(); physicsWorld.m_contactManager.CleanContactList(); physicsWorld.m_contactManager.Collide(_arg1.getPhysicsBody()); var _local2:b2Contact = physicsWorld.GetContactList(); while (_local2 != null) { _local3 = (_local2.GetShape1().GetBody().GetUserData() as Block); _local4 = (_local2.GetShape2().GetBody().GetUserData() as Block); if ((((((_local2.GetManifoldCount() > 0)) && ((((_local3 == _arg1)) || ((_local4 == _arg1)))))) && (!(_local3.isJointedTo(_local4))))){ return (true); }; _local2 = _local2.m_next; }; return (false); } protected function hollowRodMode(_arg1:Event):void{ resetMode(); buildingBlockType = BlockType.ROD_HOLLOW; dashboard.hilightButton(dashboard.hollowRodButton); dispatchEvent(new ModeEvent(ModeEvent.DEFAULT_MODE)); } override protected function loadLevelHandler(_arg1:Event):void{ super.loadLevelHandler(_arg1); if (((linkedIn) && (hasPermissionToPlay()))){ addChild(new LinkInMenu()); }; } override public function getLevelXml():XML{ if (currentLevelXml != null){ return (currentLevelXml); }; return (super.getLevelXml()); } protected function stopSimulation(_arg1:Event):void{ if (!running){ return; }; running = false; hasFinishedLevel = false; var _local2:Iterator = playerBlocks.getIterator(); while (_local2.hasNext()) { (_local2.next() as Block).stopJoints(physicsWorld); }; _local2 = playerBlocks.getIterator(); while (_local2.hasNext()) { (_local2.next() as Block).resetBlock(physicsWorld); }; _local2 = arenaBlocks.getIterator(); while (_local2.hasNext()) { (_local2.next() as Block).resetBlock(physicsWorld); }; resetPhysicsWorld(); initPlayerBlocks(); initArenaBlocks(); initBuildingBoundries(); var _local3:Sprite = (dashboard.stopButton.parent as Sprite); if (_local3 == null){ _local3 = (dashboard.goButton.parent as Sprite); }; _local3.addChild(dashboard.goButton); _local3.removeChild(dashboard.stopButton); tickCounter.pause(); } public function isRunning():Boolean{ return (running); } public function updateMovingJ():void{ var _local1:Number = (arenaCanvas.mouseX - ox); var _local2:Number = (arenaCanvas.mouseY - oy); movingJoint.moveJoint(new Point(_local1, _local2)); movingIllegalNotification.x = (movingIllegalNotification.x + _local1); movingIllegalNotification.y = (movingIllegalNotification.y + _local2); if (countCollisions() > movingNumCollisions){ movingIllegal = true; movingIllegalNotification.visible = true; } else { movingIllegal = false; movingIllegalNotification.visible = false; }; ox = arenaCanvas.mouseX; oy = arenaCanvas.mouseY; } protected function counterClockwiseWheelMode(_arg1:Event):void{ resetMode(); buildingBlockType = BlockType.WHEEL_COUNTER_CLOCKWISE; dashboard.hilightButton(dashboard.ccwWheelButton); dispatchEvent(new ModeEvent(ModeEvent.DEFAULT_MODE)); } protected function initBuildingBoundries():void{ startZone.x; var _local1:b2BoxDef = new b2BoxDef(); var _local2:b2BodyDef = new b2BodyDef(); _local1.extents.Set((ARENA_WIDTH / 2), (ARENA_HEIGHT / 2)); _local1.categoryBits = 0xFFFFFF; _local2.AddShape(_local1); _local2.position.x = ((startZone.getPosition().x + (startZone.width / 2)) + (ARENA_WIDTH / 2)); _local2.position.y = startZone.getPosition().y; _local2.userData = new Block(); physicsWorld.CreateBody(_local2); _local2.position.x = ((startZone.getPosition().x - (startZone.width / 2)) - (ARENA_WIDTH / 2)); _local2.position.y = startZone.getPosition().y; _local2.userData = new Block(); physicsWorld.CreateBody(_local2); _local2.position.x = startZone.getPosition().x; _local2.position.y = ((startZone.getPosition().y + (startZone.height / 2)) + (ARENA_HEIGHT / 2)); _local2.userData = new Block(); physicsWorld.CreateBody(_local2); _local2.position.x = startZone.getPosition().x; _local2.position.y = ((startZone.getPosition().y - (startZone.height / 2)) - (ARENA_HEIGHT / 2)); _local2.userData = new Block(); physicsWorld.CreateBody(_local2); } protected function noSpinWheelMode(_arg1:Event):void{ resetMode(); buildingBlockType = BlockType.WHEEL_NO_SPIN; dashboard.hilightButton(dashboard.npWheelButton); dispatchEvent(new ModeEvent(ModeEvent.DEFAULT_MODE)); } protected function initArenaBlocks():void{ var _local1:Iterator = arenaBlocks.getIterator(); while (_local1.hasNext()) { (_local1.next() as Block).generatePhysicsBody(physicsWorld); }; } protected function enterMoveMode(_arg1:Event):void{ resetMode(); dashboard.hilightButton(dashboard.moveButton); moveMode = true; dispatchEvent(new ModeEvent(ModeEvent.MOVE_MODE)); } override public function loadFromXml(_arg1:XML):void{ super.loadFromXml(_arg1); initArenaBlocks(); initPlayerBlocks(); initBuildingBoundries(); } override public function update(_arg1:Event):void{ var _local2:b2Body; var _local3:b2Joint; var _local4:b2RevoluteJoint; var _local5:b2Vec2; var _local6:SharedObject; if (((running) && (!((physicsWorld == null))))){ tickCounter.increment(); physicsWorld.Step(m_timeStep, m_iterations); _local2 = physicsWorld.m_bodyList; while (_local2) { if ((_local2.m_userData is Block)){ (_local2.m_userData as Block).updateFromPhysicsBody(); }; _local2 = _local2.m_next; }; _local3 = physicsWorld.GetJointList(); while (_local3) { _local4 = (_local3 as b2RevoluteJoint); _local5 = new b2Vec2(_local4.GetAnchor1().x, _local4.GetAnchor1().y); _local5.Subtract(_local4.GetAnchor2()); if ((Math.abs(_local5.x) + Math.abs(_local5.y)) > 50){ physicsWorld.DestroyJoint(_local3); }; _local3 = _local3.m_next; }; if (((!(hasFinishedLevel)) && (hasWon()))){ hasFinishedLevel = true; isCurrentDesignSolution = true; _local6 = SharedObject.getLocal("user"); _local6.data[("level" + levelId)] = "true"; _local6.flush(); doWhirledAwards(); loadNextLevel(); tickCounter.pause(); }; }; super.update(_arg1); } protected function beginMoving():void{ var _local1:JointCollection; var _local2:Block; var _local8:Point; var _local10:JointCollection; var _local11:ModeEvent; var _local12:Block; ox = arenaCanvas.mouseX; oy = arenaCanvas.mouseY; movingIllegal = false; movingNumCollisions = countCollisions(); if (movingIllegalNotification){ arenaCanvas.removeChild(movingIllegalNotification); }; movingIllegalNotification = new Sprite(); arenaCanvas.addChild(movingIllegalNotification); _local1 = playerBlocks.getClosestJointCollection(new Point(ox, oy)); if (((!((_local1 == null))) && (((Point.distance(_local1.getPosition(), new Point(ox, oy)) * scaleX) < 8)))){ movingJ = true; this.movingJoint = _local1; movingJOriginal = _local1.getPosition(); movingIllegalNotification.x = ox; movingIllegalNotification.y = oy; movingIllegalNotification.graphics.lineStyle(3, 16720418); movingIllegalNotification.graphics.moveTo(20, 20); movingIllegalNotification.graphics.lineTo(-20, -20); movingIllegalNotification.graphics.moveTo(20, -20); movingIllegalNotification.graphics.lineTo(-20, 20); movingIllegalNotification.visible = false; arenaCanvas.addChild(movingIllegalNotification); _local11 = new ModeEvent(ModeEvent.START_ACTION, true); _local11.actionType = ModeEvent.ACTION_MOVE; dispatchEvent(_local11); currentLevelXml = null; isCurrentDesignSolution = false; return; }; _local2 = playerBlocks.getClosestBlock(new Point(arenaCanvas.mouseX, arenaCanvas.mouseY)); if ((((_local2 == null)) || (((_local2.getDistance(new Point(arenaCanvas.mouseX, arenaCanvas.mouseY)) * scaleX) > 20)))){ beginMoveScreen(mouseX, mouseY); return; }; moving = true; movingBlocks = new SLinkedList(); movingBlocksOriginalPosition = new SLinkedList(); movingJoints = new Dictionary(); movingJointsOriginalPosition = new Dictionary(); var _local3:Number = -1000000; var _local4:Number = -1000000; var _local5:Number = 1000000; var _local6:Number = 1000000; var _local7:Dictionary = new Dictionary(); _local7[_local2] = _local2; var _local9:Boolean; while (!(_local9)) { _local9 = true; for each (_local12 in _local7) { if (movingBlocks.nodeOf(_local12) == null){ _local9 = false; _local12.addJointedBlocks(_local7); _local12.addJoints(movingJoints); movingBlocks.append(_local12); _local8 = _local12.getPosition(); movingBlocksOriginalPosition.append(_local8); delete _local7[_local12]; _local12.alpha = 0.5; if ((_local8.x + 20) > _local3){ _local3 = (_local8.x + 20); }; if ((_local8.y + 20) > _local4){ _local4 = (_local8.y + 20); }; if ((_local8.x - 20) < _local5){ _local5 = (_local8.x - 20); }; if ((_local8.y - 20) < _local6){ _local6 = (_local8.y - 20); }; } else { delete _local7[_local12]; }; }; }; for each (_local10 in movingJoints) { movingJointsOriginalPosition[_local10] = _local10.getPosition(); }; movingIllegalNotification.graphics.lineStyle(3, 16720418); movingIllegalNotification.graphics.moveTo(_local3, _local4); movingIllegalNotification.graphics.lineTo(_local5, _local6); movingIllegalNotification.graphics.moveTo(_local3, _local6); movingIllegalNotification.graphics.lineTo(_local5, _local4); movingIllegalNotification.visible = false; arenaCanvas.addChild(movingIllegalNotification); _local11 = new ModeEvent(ModeEvent.START_ACTION, true); _local11.actionType = ModeEvent.ACTION_MOVE; dispatchEvent(_local11); currentLevelXml = null; isCurrentDesignSolution = false; } protected function initJoints():void{ var _local1:Iterator = playerBlocks.getIterator(); while (_local1.hasNext()) { (_local1.next() as Block).startJoints(physicsWorld); }; } protected function keyUp(_arg1:KeyboardEvent):void{ if ((((_arg1.keyCode == Keyboard.SHIFT)) || ((_arg1.keyCode == Keyboard.CONTROL)))){ dispatchEvent(new ModeEvent(ModeEvent.DEFAULT_MODE)); }; } protected function checkPlayerBlocksLegality():void{ var _local2:Block; var _local3:Rod; var _local1:Iterator = arenaBlocks.getIterator(); _local1 = playerBlocks.getIterator(); while (_local1.hasNext()) { _local2 = (_local1.next() as Block); if ((_local2 as Wheel)){ }; if ((_local2 as Rod)){ _local3 = (_local2 as Rod); if (((!(startZone.isInside(_local3.point1))) || (!(startZone.isInside(_local3.point2))))){ deleteBlock(_local3); }; }; if (checkCollisions(_local2)){ deleteBlock(_local2); }; }; } protected function solidRodMode(_arg1:Event=null):void{ resetMode(); buildingBlockType = BlockType.ROD_SOLID; dashboard.hilightButton(dashboard.solidRodButton); dispatchEvent(new ModeEvent(ModeEvent.DEFAULT_MODE)); } override protected function mouseDown(_arg1:MouseEvent):void{ var _local2:Block; var _local3:ModeEvent; if ((((((((visible == false)) || (building))) || (moving))) || (movingJ))){ return; }; if (((running) || (!(startZone.isInside(new Point(arenaCanvas.mouseX, arenaCanvas.mouseY)))))){ if (((running) && (startZone.isInside(new Point(arenaCanvas.mouseX, arenaCanvas.mouseY))))){ dashboard.pingStopButton(); }; beginMoveScreen(mouseX, mouseY); return; }; if (((_arg1.shiftKey) || (moveMode))){ beginMoving(); } else { if (((_arg1.ctrlKey) || (deleteMode))){ _local2 = playerBlocks.getClosestBlock(new Point(arenaCanvas.mouseX, arenaCanvas.mouseY), false); if (((!((_local2 == null))) && (((_local2.getDistance(new Point(arenaCanvas.mouseX, arenaCanvas.mouseY)) * scaleX) < 20)))){ deleteBlock(_local2); currentLevelXml = null; isCurrentDesignSolution = false; }; } else { if (playerBlocks.size < 120){ ox = arenaCanvas.mouseX; oy = arenaCanvas.mouseY; building = true; drawBuilding(null); _local3 = new ModeEvent(ModeEvent.START_ACTION, true); _local3.actionType = ModeEvent.ACTION_BUILD; dispatchEvent(_local3); currentLevelXml = null; isCurrentDesignSolution = false; }; }; }; } protected function addedBlock(_arg1:Block):void{ } public function addEndTryButton():void{ var _local1:Button; removeChild(menuButton); removeChild(saveButton); _local1 = new Button("Back To Editor"); _local1.x = 600; _local1.y = 340; addChild(_local1); _local1.addEventListener(MouseEvent.MOUSE_DOWN, endTryLevel); } protected function enterDeleteMode(_arg1:Event):void{ resetMode(); dashboard.hilightButton(dashboard.deleteButton); deleteMode = true; dispatchEvent(new ModeEvent(ModeEvent.DELETE_MODE)); } protected function updateBlockGraphics(_arg1:Event=null):void{ var _local3:Block; var _local2:Iterator = playerBlocks.getIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as Block); _local3.reDrawBlock(); }; } protected function countCollisions():int{ var _local1:int; physicsWorld.CleanBodyList(); physicsWorld.m_contactManager.CleanContactList(); physicsWorld.m_contactManager.Collide(); var _local2:b2Contact = physicsWorld.GetContactList(); while (_local2 != null) { _local1 = (_local1 + _local2.GetManifoldCount()); _local2 = _local2.m_next; }; return (_local1); } protected function resetPhysicsWorld():void{ var _local1:b2AABB = new b2AABB(); _local1.minVertex.Set(-(ARENA_WIDTH), -(ARENA_HEIGHT)); _local1.maxVertex.Set(ARENA_WIDTH, ARENA_HEIGHT); var _local2:b2Vec2 = new b2Vec2(0, 300); var _local3:Boolean; physicsWorld = new b2World(_local1, _local2, _local3); physicsWorld.SetFilter(new NoJointedCollisionsFilter()); } protected function stopMoving():void{ var _local3:Block; var _local4:Point; var _local5:JointCollection; moving = false; var _local1:Iterator = movingBlocksOriginalPosition.getIterator(); var _local2:Iterator = movingBlocks.getIterator(); while (((_local2.hasNext()) && (_local1.hasNext()))) { _local3 = (_local2.next() as Block); _local4 = (_local1.next() as Point); if (movingIllegal){ _local3.setPosition(_local4); }; _local3.alpha = 1; }; if (movingIllegal){ for each (_local5 in movingJoints) { _local5.setPosition(movingJointsOriginalPosition[_local5]); }; }; movingBlocks = null; movingBlocksOriginalPosition = null; } } }//package contraption
Section 174
//StartZone (contraption.StartZone) package contraption { import flash.events.*; import flash.display.*; import flash.geom.*; public class StartZone extends ActionContainerImpl { protected var zoneWidth:Number; protected var my0:Number; protected var moving:Boolean;// = false protected var editing:Boolean; protected var mx0:Number; protected var resizeCorner:Sprite; protected var resizing:Boolean;// = false protected var zoneHeight:Number; protected static const MIN_ZONE_WIDTH:int = 100; public function StartZone(_arg1:Boolean):void{ setWidth(200); setHeight(200); setPosition(new Point(10, 10)); this.editing = _arg1; if (_arg1){ resizeCorner = newResizeCorner(); addChild(resizeCorner); resizeCorner.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownR); addEventListener(MouseEvent.MOUSE_DOWN, mouseDownM); }; drawZone(); super(); } protected function getColour():int{ return (12377081); } public function setWidth(_arg1:Number):void{ zoneWidth = _arg1; } public function isInside(_arg1:Point):Boolean{ var _local2:Number = (getPosition().x - (getWidth() / 2)); var _local3:Number = (getPosition().x + (getWidth() / 2)); var _local4:Number = (getPosition().y - (getHeight() / 2)); var _local5:Number = (getPosition().y + (getHeight() / 2)); if ((((((((_arg1.x > (_local2 - 4))) && ((_arg1.x < (_local3 + 4))))) && ((_arg1.y > (_local4 - 4))))) && ((_arg1.y < (_local5 + 4))))){ return (true); }; return (false); } protected function mouseDownR(_arg1:MouseEvent):void{ stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveR, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpR, false, 0, true); _arg1.stopPropagation(); resizing = true; var _local2:ModeEvent = new ModeEvent(ModeEvent.START_ACTION, true, true); _local2.actionType = ModeEvent.ACTION_BUTTON; dispatchEvent(_local2); } protected function mouseDownM(_arg1:MouseEvent):void{ stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveM, false, 0, true); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpM, false, 0, true); _arg1.stopPropagation(); mx0 = this.mouseX; my0 = this.mouseY; moving = true; } protected function getBorderColour():int{ return (7829486); } protected function drawZone():void{ graphics.clear(); graphics.lineStyle(4, getBorderColour()); graphics.beginFill(getColour()); graphics.drawRect((-(getWidth()) / 2), (-(getHeight()) / 2), getWidth(), getHeight()); if (resizeCorner != null){ resizeCorner.x = (getWidth() / 2); resizeCorner.y = (getHeight() / 2); }; } override protected function initAllowableActions():void{ allowableActions = new Actions(); allowableActions.alwaysDrag = true; if (!editing){ allowableActions.build = true; allowableActions.drag = true; }; } public function getWidth():Number{ return (zoneWidth); } public function setFromXML(_arg1:XML):void{ setWidth(new Number(_arg1.width)); setHeight(new Number(_arg1.height)); var _local2:Point = new Point(); _local2.x = new Number(_arg1.position.x); _local2.y = new Number(_arg1.position.y); setPosition(_local2); drawZone(); } public function getHeight():Number{ return (zoneHeight); } public function getPosition():Point{ return (new Point(x, y)); } public function getXml():XML{ var _local1:XML = new XML(getXmlRoot()); var _local2:XML = new XML(<position></position> ); _local2.appendChild((("<x>" + getPosition().x) + "</x>")); _local2.appendChild((("<y>" + getPosition().y) + "</y>")); _local1.appendChild(_local2); _local1.appendChild((("<width>" + getWidth()) + "</width>")); _local1.appendChild((("<height>" + getHeight()) + "</height>")); return (_local1); } protected function getXmlRoot():XML{ return (<start/> ); } public function setPosition(_arg1:Point):void{ x = _arg1.x; y = _arg1.y; } protected function mouseUpM(_arg1:MouseEvent):void{ moving = false; } public function setHeight(_arg1:Number):void{ zoneHeight = _arg1; } protected function mouseUpR(_arg1:MouseEvent):void{ resizing = false; } protected function newResizeCorner():Sprite{ var _local1:ActionContainerImpl = new ActionContainerImpl(); var _local2:Actions = new Actions(); _local2.button = true; _local1.setAllowableActions(_local2); _local1.graphics.lineStyle(4, 0xFFFF00); _local1.graphics.beginFill(0xFFFF, 0.5); _local1.graphics.drawRect(-6, -6, 12, 12); return (_local1); } protected function mouseMoveR(_arg1:MouseEvent):void{ if (!resizing){ return; }; var _local2:Number = (mouseX * 2); var _local3:Number = (mouseY * 2); if (_local2 < MIN_ZONE_WIDTH){ _local2 = MIN_ZONE_WIDTH; }; if (_local3 < MIN_ZONE_WIDTH){ _local3 = MIN_ZONE_WIDTH; }; setWidth(_local2); setHeight(_local3); drawZone(); } protected function mouseMoveM(_arg1:MouseEvent):void{ if (!moving){ return; }; setPosition(new Point((parent.mouseX - mx0), (parent.mouseY - my0))); } } }//package contraption
Section 175
//User (contraption.User) package contraption { import flash.events.*; import contraption.menu.*; import flash.net.*; import flash.external.*; public class User extends EventDispatcher { protected var registered:Boolean; protected var userId:int; protected var loggedIn:Boolean; protected var password:String; protected var email:String; protected var userName:String; private static var allowInstantiation:Boolean; private static var instance:User; public function User():void{ if (!allowInstantiation){ throw (new Error("Error: Instantiation failed: Use User.getInstance() instead of new.")); }; registered = false; var _local1:SharedObject = SharedObject.getLocal("user"); if (_local1.data.userId != null){ loggedIn = true; userId = _local1.data.userId; userName = _local1.data.userName; email = _local1.data.email; password = _local1.data.password; registered = _local1.data.registered; } else { loggedIn = false; }; } public function logIn(_arg1:String, _arg2:String):void{ this.userName = _arg1; var _local3:URLLoader = new ContraptionUrlLoader(); _local3.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local3.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local3.addEventListener(Event.COMPLETE, logInComplete); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/logIn_fc.php")); var _local5:URLVariables = new URLVariables(); _local5.userName = _arg1; _local5.password = _arg2; _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } public function resetPassword(_arg1:String, _arg2:String):void{ var _local3:URLLoader = new ContraptionUrlLoader(); _local3.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local3.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local3.addEventListener(Event.COMPLETE, resetPasswordComplete); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/resetPassword.php")); var _local5:URLVariables = new URLVariables(); _local5.userName = _arg1; _local5.email = _arg2; _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } public function newUser(_arg1:String, _arg2:String, _arg3:String):void{ this.userName = _arg1; var _local4:URLLoader = new ContraptionUrlLoader(); _local4.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local4.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local4.addEventListener(Event.COMPLETE, logInComplete); var _local5:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/newUser.php")); var _local6:URLVariables = new URLVariables(); _local6.userName = _arg1; _local6.email = _arg2; _local6.password = _arg3; _local5.data = _local6; _local5.method = URLRequestMethod.POST; _local4.load(_local5); if (Contraption.VERSION_NAME == "fantasticcontraption.com"){ ExternalInterface.call("pageTracker._trackPageview", "/newUser"); }; } public function getPassword():String{ return (password); } public function isRegistered():Boolean{ return (registered); } public function refreshRegistered():void{ if (!isLoggedIn()){ return; }; var _local1:URLLoader = new ContraptionUrlLoader(); _local1.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local1.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local1.addEventListener(Event.COMPLETE, refreshRegisteredComplete); var _local2:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/getRegistered.php")); var _local3:URLVariables = new URLVariables(); _local3.userId = userId; _local2.data = _local3; _local2.method = URLRequestMethod.POST; _local1.load(_local2); } public function refreshRegisteredComplete(_arg1:Event):void{ registered = (_arg1.target.data == "1"); var _local2:SharedObject = SharedObject.getLocal("user"); _local2.data.registered = registered; _local2.flush(); if (((registered) && ((Contraption.VERSION_NAME == "fantasticcontraption.com")))){ ExternalInterface.call("setRegistered"); }; } public function updateInfo(_arg1:String, _arg2:String):void{ var _local3:URLLoader = new ContraptionUrlLoader(); _local3.addEventListener(MenuEvent.ADD_SPINNER, bubble); _local3.addEventListener(MenuEvent.REMOVE_SPINNER, bubble); _local3.addEventListener(Event.COMPLETE, updateInfoComplete); var _local4:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/updateUserInfo.php")); var _local5:URLVariables = new URLVariables(); _local5.userId = getUserId(); _local5.email = _arg1; _local5.newPassword = _arg2; _local5.originalPassword = getPassword(); _local4.data = _local5; _local4.method = URLRequestMethod.POST; _local3.load(_local4); } public function isLoggedIn():Boolean{ return (loggedIn); } public function logInComplete(_arg1:Event):void{ var _local2:XML; _local2 = new XML(_arg1.target.data); if (_local2.userId.toString() == ""){ dispatchEvent(new MenuEvent(MenuEvent.LOG_IN_FAILED)); return; }; userId = _local2.userId; userName = _local2.userName; email = _local2.email; password = _local2.password; registered = (_local2.isRegistered == 1); loggedIn = true; var _local3:SharedObject = SharedObject.getLocal("user"); _local3.data.userId = userId; _local3.data.userName = userName; _local3.data.email = email; _local3.data.password = password; _local3.data.registered = registered; _local3.flush(); dispatchEvent(new MenuEvent(MenuEvent.LOGGED_IN, true, true)); } public function resetPasswordComplete(_arg1:Event):void{ throw (_arg1.target.data); } public function bubble(_arg1:Event):void{ dispatchEvent(_arg1); } public function getEmail():String{ return (email); } public function logOut():void{ loggedIn = false; userId = 0; userName = null; email = null; password = null; registered = false; var _local1:SharedObject = SharedObject.getLocal("user"); _local1.data.userId = null; _local1.data.userName = null; _local1.data.email = null; _local1.data.password = null; _local1.data.registered = null; _local1.flush(); } public function getUserName():String{ return (userName); } public function updateInfoComplete(_arg1:Event):void{ var _local2:XML; _local2 = new XML(_arg1.target.data); if (_local2.email.toString() == ""){ throw (new Error(("whoa! badness in the user update server call:" + _arg1.target.data))); }; email = _local2.email; password = _local2.password; var _local3:SharedObject = SharedObject.getLocal("user"); _local3.data.email = email; _local3.data.password = password; _local3.flush(); dispatchEvent(new MenuEvent(MenuEvent.UPDATE_USER_INFO)); } public function getUserId():int{ return (userId); } public static function getInstance():User{ if (instance == null){ allowInstantiation = true; instance = new (User); allowInstantiation = false; }; return (instance); } } }//package contraption
Section 176
//Stream_14 (contraption_objects_fla.Stream_14) package contraption_objects_fla { import flash.display.*; public dynamic class Stream_14 extends MovieClip { public var dropBouncing:MovieClip; } }//package contraption_objects_fla
Section 177
//StreamBG_9 (contraption_objects_fla.StreamBG_9) package contraption_objects_fla { import flash.display.*; public dynamic class StreamBG_9 extends MovieClip { public var dropBouncing:MovieClip; } }//package contraption_objects_fla
Section 178
//Buttons_3 (Dashboard_fla.Buttons_3) package Dashboard_fla { import flash.display.*; import flash.text.*; public dynamic class Buttons_3 extends MovieClip { public var tooltip:TextField; public var saveButton:SaveButton; public var zoomButtons:MovieClip; public var levelButtons:MovieClip; public var contraptionButtons:MovieClip; public var backTestButton:BackTestButton; public var backButton:BackButton; public function Buttons_3(){ addFrameScript(0, frame1); } function frame1(){ } } }//package Dashboard_fla
Section 179
//ContraptionButtons_9 (Dashboard_fla.ContraptionButtons_9) package Dashboard_fla { import flash.display.*; public dynamic class ContraptionButtons_9 extends MovieClip { public var goStopButtons:MovieClip; public var moveButton:MoveButton; public var npWheelButton:NonPoweredWheelButton; public var cwWheelButton:ClockwiseWheelButton; public var solidRodButton:SolidRodButton; public var hollowRodButton:HollowRodButton; public var deleteButton:DeleteButton; public var ccwWheelButton:CounterClockwiseWheelButton; } }//package Dashboard_fla
Section 180
//GoStopButtons_35 (Dashboard_fla.GoStopButtons_35) package Dashboard_fla { import flash.events.*; import flash.display.*; public dynamic class GoStopButtons_35 extends MovieClip { public var stopButtonPing:StopButtonPing; public var goButton:GoButton; public var stopButton:StopButton; public function GoStopButtons_35(){ addFrameScript(0, frame1); } function frame1(){ goButton.addEventListener(MouseEvent.MOUSE_DOWN, buttonPressed); stopButton.addEventListener(MouseEvent.MOUSE_DOWN, buttonPressed); } public function buttonPressed(_arg1:MouseEvent):void{ } } }//package Dashboard_fla
Section 181
//LevelButtons_41 (Dashboard_fla.LevelButtons_41) package Dashboard_fla { import flash.display.*; public dynamic class LevelButtons_41 extends MovieClip { public var dynamicCircleButton:DynamicCircleButton; public var testLevelButton:TestLevelButton; public var staticSquareButton:StaticSquareButton; public var goalSquareButton:GoalSquareButton; public var dynamicSquareButton:DynamicSquareButton; public var staticCircleButton:StaticCircleButton; public var goalCircleButton:GoalCircleButton; } }//package Dashboard_fla
Section 182
//Stream_22 (Dashboard_fla.Stream_22) package Dashboard_fla { import flash.display.*; public dynamic class Stream_22 extends MovieClip { public var dropBouncing:MovieClip; } }//package Dashboard_fla
Section 183
//ZoomButtons_5 (Dashboard_fla.ZoomButtons_5) package Dashboard_fla { import flash.display.*; public dynamic class ZoomButtons_5 extends MovieClip { public var zoomOutButton:ZoomOutButton; public var zoomInButton:ZoomInButton; } }//package Dashboard_fla
Section 184
//compareStringCaseInSensitive (de.polygonal.ds.sort.compare.compareStringCaseInSensitive) package de.polygonal.ds.sort.compare { public function compareStringCaseInSensitive(_arg1:String, _arg2:String):int{ var _local3:int; var _local4:int; var _local5:int; _arg1 = _arg1.toLowerCase(); _arg2 = _arg2.toLowerCase(); if ((_arg1.length + _arg2.length) > 2){ _local3 = 0; _local4 = ((_arg1.length > _arg2.length)) ? _arg1.length : _arg2.length; _local5 = 0; while (_local5 < _local4) { _local3 = (_arg1.charCodeAt(_local5) - _arg2.charCodeAt(_local5)); if (_local3 != 0){ break; }; _local5++; }; return (_local3); //unresolved jump }; return ((_arg1.charCodeAt(0) - _arg2.charCodeAt(0))); } }//package de.polygonal.ds.sort.compare
Section 185
//compareStringCaseInSensitiveDesc (de.polygonal.ds.sort.compare.compareStringCaseInSensitiveDesc) package de.polygonal.ds.sort.compare { public function compareStringCaseInSensitiveDesc(_arg1:String, _arg2:String):int{ var _local3:int; var _local4:int; var _local5:int; _arg1 = _arg1.toLowerCase(); _arg2 = _arg2.toLowerCase(); if ((_arg1.length + _arg2.length) > 2){ _local3 = 0; _local4 = ((_arg1.length > _arg2.length)) ? _arg1.length : _arg2.length; _local5 = 0; while (_local5 < _local4) { _local3 = (_arg2.charCodeAt(_local5) - _arg1.charCodeAt(_local5)); if (_local3 != 0){ break; }; _local5++; }; return (_local3); //unresolved jump }; return ((_arg2.charCodeAt(0) - _arg1.charCodeAt(0))); } }//package de.polygonal.ds.sort.compare
Section 186
//compareStringCaseSensitive (de.polygonal.ds.sort.compare.compareStringCaseSensitive) package de.polygonal.ds.sort.compare { public function compareStringCaseSensitive(_arg1:String, _arg2:String):int{ var _local3:int; var _local4:int; var _local5:int; if ((_arg1.length + _arg2.length) > 2){ _local3 = 0; _local4 = ((_arg1.length > _arg2.length)) ? _arg1.length : _arg2.length; _local5 = 0; while (_local5 < _local4) { _local3 = (_arg1.charCodeAt(_local5) - _arg2.charCodeAt(_local5)); if (_local3 != 0){ break; }; _local5++; }; return (_local3); //unresolved jump }; return ((_arg1.charCodeAt(0) - _arg2.charCodeAt(0))); } }//package de.polygonal.ds.sort.compare
Section 187
//compareStringCaseSensitiveDesc (de.polygonal.ds.sort.compare.compareStringCaseSensitiveDesc) package de.polygonal.ds.sort.compare { public function compareStringCaseSensitiveDesc(_arg1:String, _arg2:String):int{ var _local3:int; var _local4:int; var _local5:int; if ((_arg1.length + _arg2.length) > 2){ _local3 = 0; _local4 = ((_arg1.length > _arg2.length)) ? _arg1.length : _arg2.length; _local5 = 0; while (_local5 < _local4) { _local3 = (_arg2.charCodeAt(_local5) - _arg1.charCodeAt(_local5)); if (_local3 != 0){ break; }; _local5++; }; return (_local3); //unresolved jump }; return ((_arg2.charCodeAt(0) - _arg1.charCodeAt(0))); } }//package de.polygonal.ds.sort.compare
Section 188
//sLinkedInsertionSort (de.polygonal.ds.sort.sLinkedInsertionSort) package de.polygonal.ds.sort { import de.polygonal.ds.*; public function sLinkedInsertionSort(_arg1:SListNode, _arg2:Boolean=false):SListNode{ var _local7:int; var _local8:Number; var _local3:Array = []; var _local4:int; var _local5:SListNode = _arg1; var _local6:SListNode = _arg1; while (_local6) { var _temp1 = _local4; _local4 = (_local4 + 1); var _local10 = _temp1; _local3[_local10] = _local6.data; _local6 = _local6.next; }; if (_local4 <= 1){ return (_local5); }; var _local9 = 1; while (_local9 < _local4) { _local8 = _local3[_local9]; _local7 = _local9; while ((((_local7 > 0)) && ((_local3[int((_local7 - 1))] > _local8)))) { _local3[_local7] = _local3[int((_local7 - 1))]; _local7--; }; _local3[_local7] = _local8; _local9++; }; _local6 = _local5; _local9 = 0; while (_local6) { var _temp2 = _local9; _local9 = (_local9 + 1); _local6.data = _local3[_temp2]; _local6 = _local6.next; }; return (_local5); } }//package de.polygonal.ds.sort
Section 189
//sLinkedInsertionSortCmp (de.polygonal.ds.sort.sLinkedInsertionSortCmp) package de.polygonal.ds.sort { import de.polygonal.ds.*; public function sLinkedInsertionSortCmp(_arg1:SListNode, _arg2:Function, _arg3:Boolean=false):SListNode{ var _local8:int; var _local9:int; var _local10:*; var _local4:Array = []; var _local5:int; var _local6:SListNode = _arg1; var _local7:SListNode = _arg1; while (_local7) { var _temp1 = _local5; _local5 = (_local5 + 1); var _local11 = _temp1; _local4[_local11] = _local7.data; _local7 = _local7.next; }; if (_arg3){ if (_local5 <= 1){ return (_local6); }; _local9 = 1; while (_local9 < _local5) { _local10 = _local4[_local9]; _local8 = _local9; while ((((_local8 > 0)) && ((_arg2(_local4[int((_local8 - 1))], _local10) < 0)))) { _local4[_local8] = _local4[int((_local8 - 1))]; _local8--; }; _local4[_local8] = _local10; _local9++; }; } else { if (_local5 <= 1){ return (_local6); }; _local9 = 1; while (_local9 < _local5) { _local10 = _local4[_local9]; _local8 = _local9; while ((((_local8 > 0)) && ((_arg2(_local4[int((_local8 - 1))], _local10) > 0)))) { _local4[_local8] = _local4[int((_local8 - 1))]; _local8--; }; _local4[_local8] = _local10; _local9++; }; }; _local7 = _local6; _local9 = 0; while (_local7) { var _temp2 = _local9; _local9 = (_local9 + 1); _local7.data = _local4[_temp2]; _local7 = _local7.next; }; return (_local6); } }//package de.polygonal.ds.sort
Section 190
//sLinkedMergeSort (de.polygonal.ds.sort.sLinkedMergeSort) package de.polygonal.ds.sort { import de.polygonal.ds.*; public function sLinkedMergeSort(_arg1:SListNode, _arg2:Boolean=false):SListNode{ var _local4:SListNode; var _local5:SListNode; var _local6:SListNode; var _local7:SListNode; var _local9:int; var _local10:int; var _local11:int; var _local12:int; if (!_arg1){ return (null); }; var _local3:SListNode = _arg1; var _local8 = 1; if (_arg2){ while (true) { _local4 = _local3; _local7 = null; _local3 = _local7; _local9 = 0; while (_local4) { _local9++; _local12 = 0; _local10 = 0; _local5 = _local4; while (_local12 < _local8) { _local10++; _local5 = _local5.next; if (!_local5){ break; }; _local12++; }; _local11 = _local8; while ((((_local10 > 0)) || ((((_local11 > 0)) && (_local5))))) { if (_local10 == 0){ _local6 = _local5; _local5 = _local5.next; _local11--; } else { if ((((_local11 == 0)) || (!(_local5)))){ _local6 = _local4; _local4 = _local4.next; _local10--; } else { if ((_local4.data - _local5.data) >= 0){ _local6 = _local4; _local4 = _local4.next; _local10--; } else { _local6 = _local5; _local5 = _local5.next; _local11--; }; }; }; if (_local7){ _local7.next = _local6; } else { _local3 = _local6; }; _local7 = _local6; }; _local4 = _local5; }; _local7.next = null; if (_local9 <= 1){ return (_local3); }; _local8 = (_local8 << 1); }; } else { while (true) { _local4 = _local3; _local7 = null; _local3 = _local7; _local9 = 0; while (_local4) { _local9++; _local12 = 0; _local10 = 0; _local5 = _local4; while (_local12 < _local8) { _local10++; _local5 = _local5.next; if (!_local5){ break; }; _local12++; }; _local11 = _local8; while ((((_local10 > 0)) || ((((_local11 > 0)) && (_local5))))) { if (_local10 == 0){ _local6 = _local5; _local5 = _local5.next; _local11--; } else { if ((((_local11 == 0)) || (!(_local5)))){ _local6 = _local4; _local4 = _local4.next; _local10--; } else { if ((_local4.data - _local5.data) <= 0){ _local6 = _local4; _local4 = _local4.next; _local10--; } else { _local6 = _local5; _local5 = _local5.next; _local11--; }; }; }; if (_local7){ _local7.next = _local6; } else { _local3 = _local6; }; _local7 = _local6; }; _local4 = _local5; }; _local7.next = null; if (_local9 <= 1){ return (_local3); }; _local8 = (_local8 << 1); }; }; return (null); } }//package de.polygonal.ds.sort
Section 191
//sLinkedMergeSortCmp (de.polygonal.ds.sort.sLinkedMergeSortCmp) package de.polygonal.ds.sort { import de.polygonal.ds.*; public function sLinkedMergeSortCmp(_arg1:SListNode, _arg2:Function, _arg3:Boolean=false):SListNode{ var _local5:SListNode; var _local6:SListNode; var _local7:SListNode; var _local8:SListNode; var _local10:int; var _local11:int; var _local12:int; var _local13:int; if (((!(_arg1)) || ((_arg2 == null)))){ return (null); }; var _local4:SListNode = _arg1; var _local9 = 1; if (_arg3){ while (true) { _local5 = _local4; _local8 = null; _local4 = _local8; _local10 = 0; while (_local5) { _local10++; _local13 = 0; _local11 = 0; _local6 = _local5; while (_local13 < _local9) { _local11++; _local6 = _local6.next; if (!_local6){ break; }; _local13++; }; _local12 = _local9; while ((((_local11 > 0)) || ((((_local12 > 0)) && (_local6))))) { if (_local11 == 0){ _local7 = _local6; _local6 = _local6.next; _local12--; } else { if ((((_local12 == 0)) || (!(_local6)))){ _local7 = _local5; _local5 = _local5.next; _local11--; } else { if (_arg2(_local5.data, _local6.data) >= 0){ _local7 = _local5; _local5 = _local5.next; _local11--; } else { _local7 = _local6; _local6 = _local6.next; _local12--; }; }; }; if (_local8){ _local8.next = _local7; } else { _local4 = _local7; }; _local8 = _local7; }; _local5 = _local6; }; _local8.next = null; if (_local10 <= 1){ return (_local4); }; _local9 = (_local9 << 1); }; } else { while (true) { _local5 = _local4; _local8 = null; _local4 = _local8; _local10 = 0; while (_local5) { _local10++; _local13 = 0; _local11 = 0; _local6 = _local5; while (_local13 < _local9) { _local11++; _local6 = _local6.next; if (!_local6){ break; }; _local13++; }; _local12 = _local9; while ((((_local11 > 0)) || ((((_local12 > 0)) && (_local6))))) { if (_local11 == 0){ _local7 = _local6; _local6 = _local6.next; _local12--; } else { if ((((_local12 == 0)) || (!(_local6)))){ _local7 = _local5; _local5 = _local5.next; _local11--; } else { if (_arg2(_local5.data, _local6.data) <= 0){ _local7 = _local5; _local5 = _local5.next; _local11--; } else { _local7 = _local6; _local6 = _local6.next; _local12--; }; }; }; if (_local8){ _local8.next = _local7; } else { _local4 = _local7; }; _local8 = _local7; }; _local5 = _local6; }; _local8.next = null; if (_local10 <= 1){ return (_local4); }; _local9 = (_local9 << 1); }; }; return (null); } }//package de.polygonal.ds.sort
Section 192
//Collection (de.polygonal.ds.Collection) package de.polygonal.ds { public interface Collection { function get size():int; function isEmpty():Boolean; function getIterator():Iterator; function clear():void; function toArray():Array; function contains(_arg1):Boolean; } }//package de.polygonal.ds
Section 193
//Iterator (de.polygonal.ds.Iterator) package de.polygonal.ds { public interface Iterator { function start():void; function set data(_arg1):void; function get data(); function next(); function hasNext():Boolean; } }//package de.polygonal.ds
Section 194
//LinkedListNode (de.polygonal.ds.LinkedListNode) package de.polygonal.ds { public interface LinkedListNode { } }//package de.polygonal.ds
Section 195
//SLinkedList (de.polygonal.ds.SLinkedList) package de.polygonal.ds { import de.polygonal.ds.sort.*; import de.polygonal.ds.sort.compare.*; public class SLinkedList implements Collection { private var _count:int; public var tail:SListNode; public var head:SListNode; public static const MERGE_SORT:int = (1 << 2); public static const DESCENDING:int = (1 << 4); public static const NUMERIC:int = (1 << 3); public static const INSERTION_SORT:int = (1 << 1); public function SLinkedList(... _args){ head = (tail = null); _count = 0; if (_args.length > 0){ append.apply(this, _args); }; } public function get size():int{ return (_count); } public function isEmpty():Boolean{ return ((_count == 0)); } public function remove(_arg1:SListIterator):Boolean{ if (((!((_arg1.list == this))) || (!(_arg1.node)))){ return (false); }; var _local2:SListNode = head; if (_arg1.node == head){ _arg1.forth(); removeHead(); return (true); }; while (_local2.next != _arg1.node) { _local2 = _local2.next; }; _arg1.forth(); if (_local2.next == tail){ tail = _local2; }; _local2.next = _arg1.node; _count--; return (true); } public function removeHead(){ var _local1:*; var _local2:SListNode; if (head){ _local1 = head.data; if (head == tail){ head = (tail = null); } else { _local2 = head; head = head.next; _local2.next = null; if (head == null){ tail = null; }; }; _count--; return (_local1); }; return (null); } public function clear():void{ var _local2:SListNode; var _local1:SListNode = head; head = null; while (_local1) { _local2 = _local1.next; _local1.next = null; _local1 = _local2; }; _count = 0; } public function prepend(... _args):SListNode{ var _local4:SListNode; var _local5:int; var _local2:int = _args.length; var _local3:SListNode = new SListNode(_args[int((_local2 - 1))]); if (head){ _local3.next = head; head = _local3; } else { head = (tail = _local3); }; if (_local2 > 1){ _local4 = _local3; _local5 = (_local2 - 2); while (_local5 >= 0) { _local3 = new SListNode(_args[_local5]); _local3.next = head; head = _local3; _local5--; }; _count = (_count + _local2); return (_local4); }; _count++; return (_local3); } public function popDown():void{ var _local2:SListNode; var _local1:SListNode = tail; if (head.next == tail){ tail = head; head = _local1; tail.next = null; head.next = tail; } else { _local2 = head; while (_local2.next != tail) { _local2 = _local2.next; }; tail = _local2; tail.next = null; _local1.next = head; head = _local1; }; } public function concat(... _args):SLinkedList{ var _local3:SLinkedList; var _local4:SListNode; var _local2:SLinkedList = new SLinkedList(); _local4 = head; while (_local4) { _local2.append(_local4.data); _local4 = _local4.next; }; var _local5:int = _args.length; var _local6:int; while (_local6 < _local5) { _local3 = _args[_local6]; _local4 = _local3.head; while (_local4) { _local2.append(_local4.data); _local4 = _local4.next; }; _local6++; }; return (_local2); } public function append(... _args):SListNode{ var _local4:SListNode; var _local5:int; var _local2:int = _args.length; var _local3:SListNode = new SListNode(_args[0]); if (head){ tail.next = _local3; tail = _local3; } else { head = (tail = _local3); }; if (_local2 > 1){ _local4 = _local3; _local5 = 1; while (_local5 < _local2) { _local3 = new SListNode(_args[_local5]); tail.next = _local3; tail = _local3; _local5++; }; _count = (_count + _local2); return (_local4); }; _count++; return (_local3); } public function sort(... _args):void{ var _local2:int; var _local3:Function; var _local4:*; if (_count <= 1){ return; }; if (_args.length > 0){ _local2 = 0; _local3 = null; _local4 = _args[0]; if ((_local4 is Function)){ _local3 = _local4; if (_args.length > 1){ _local4 = _args[1]; if ((_local4 is int)){ _local2 = _local4; }; }; } else { if ((_local4 is int)){ _local2 = _local4; }; }; if (Boolean(_local3)){ if ((_local2 & 2)){ head = sLinkedInsertionSortCmp(head, _local3, (_local2 == 18)); } else { head = sLinkedMergeSortCmp(head, _local3, (_local2 == 16)); }; } else { if ((_local2 & 2)){ if ((_local2 & 4)){ if (_local2 == 22){ head = sLinkedInsertionSortCmp(head, compareStringCaseSensitiveDesc); } else { if (_local2 == 14){ head = sLinkedInsertionSortCmp(head, compareStringCaseInSensitive); } else { if (_local2 == 30){ head = sLinkedInsertionSortCmp(head, compareStringCaseInSensitiveDesc); } else { head = sLinkedInsertionSortCmp(head, compareStringCaseSensitive); }; }; }; } else { head = sLinkedInsertionSort(head, (_local2 == 18)); }; } else { if ((_local2 & 4)){ if (_local2 == 20){ head = sLinkedMergeSortCmp(head, compareStringCaseSensitiveDesc); } else { if (_local2 == 12){ head = sLinkedMergeSortCmp(head, compareStringCaseInSensitive); } else { if (_local2 == 28){ head = sLinkedMergeSortCmp(head, compareStringCaseInSensitiveDesc); } else { head = sLinkedMergeSortCmp(head, compareStringCaseSensitive); }; }; }; } else { if ((_local2 & 16)){ head = sLinkedMergeSort(head, true); }; }; }; }; } else { head = sLinkedMergeSort(head); }; } public function reverse():void{ if (_count == 0){ return; }; var _local1:Array = new Array(_count); var _local2:int; var _local3:SListNode = head; while (_local3) { var _temp1 = _local2; _local2 = (_local2 + 1); var _local4 = _temp1; _local1[_local4] = _local3; _local3 = _local3.next; }; _local1.reverse(); _local3 = (head = _local1[0]); _local2 = 1; while (_local2 < _count) { _local3 = (_local3.next = _local1[_local2]); _local2++; }; _local3.next = null; tail = _local3; _local1 = null; } public function insertAfter(_arg1:SListIterator, _arg2):SListNode{ var _local3:SListNode; if (_arg1.list != this){ return (null); }; if (_arg1.node){ _local3 = new SListNode(_arg2); _arg1.node.insertAfter(_local3); if (_arg1.node == tail){ tail = _arg1.node.next; }; _count++; return (_local3); //unresolved jump }; return (append(_arg2)); } public function getIterator():Iterator{ return (new SListIterator(this, head)); } public function toArray():Array{ var _local1:Array = []; var _local2:SListNode = head; while (_local2) { _local1.push(_local2.data); _local2 = _local2.next; }; return (_local1); } public function contains(_arg1):Boolean{ var _local2:SListNode = head; while (_local2) { if (_local2.data == _arg1){ return (true); }; _local2 = _local2.next; }; return (false); } public function getListIterator():SListIterator{ return (new SListIterator(this, head)); } public function join(_arg1):String{ if (_count == 0){ return (""); }; var _local2 = ""; var _local3:SListNode = head; while (_local3.next) { _local2 = (_local2 + (_local3.data + _arg1)); _local3 = _local3.next; }; _local2 = (_local2 + _local3.data); return (_local2); } public function toString():String{ return ((("[SlinkedList, size=" + size) + "]")); } public function removeTail(){ var _local1:*; var _local2:SListNode; if (tail){ _local1 = tail.data; if (head == tail){ head = (tail = null); } else { _local2 = head; while (_local2.next != tail) { _local2 = _local2.next; }; tail = _local2; _local2.next = null; }; _count--; return (_local1); }; return (null); } public function merge(... _args):void{ var _local2:SLinkedList; _local2 = _args[0]; if (head){ tail.next = _local2.head; tail = _local2.tail; } else { head = _local2.head; tail = _local2.tail; }; var _local3:int = _args.length; var _local4 = 1; while (_local4 < _local3) { _local2 = _args[_local4]; tail.next = _local2.head; tail = _local2.tail; _count = (_count + _local2.size); _local4++; }; } public function nodeOf(_arg1, _arg2:SListIterator=null):SListIterator{ if (_arg2 != null){ if (_arg2.list != null){ return (null); }; }; var _local3:SListNode = ((_arg2)==null) ? head : _arg2.node; while (_local3) { if (_local3.data === _arg1){ return (new SListIterator(this, _local3)); }; _local3 = _local3.next; }; return (null); } public function dump():String{ if (!head){ return ("SLinkedList: (empty)"); }; var _local1 = (((("SLinkedList: has " + _count) + " node") + ((_count == 1)) ? "" : "s") + "\n|< Head\n"); var _local2:SListIterator = getListIterator(); while (_local2.valid()) { _local1 = (_local1 + (("\t" + _local2.data) + "\n")); _local2.forth(); }; _local1 = (_local1 + "Tail >|"); return (_local1); } public function splice(_arg1:SListIterator, _arg2:uint=4294967295, ... _args):SLinkedList{ var _local4:SListNode; var _local5:SListNode; var _local6:SLinkedList; var _local7:int; var _local8:int; var _local9:SListNode; if (_arg1){ if (_arg1.list != this){ return (null); }; }; if (_arg1.node){ _local4 = _arg1.node; _local5 = head; while (_local5.next != _local4) { _local5 = _local5.next; }; _local6 = new SLinkedList(); if (_arg2 == 4294967295){ if (_arg1.node == tail){ return (_local6); }; while (_arg1.node) { _local6.append(_arg1.node.data); _arg1.remove(); }; _arg1.list = _local6; _arg1.node = _local4; return (_local6); } else { _local7 = 0; while (_local7 < _arg2) { if (_arg1.node){ _local6.append(_arg1.node.data); _arg1.remove(); } else { break; }; _local7++; }; }; _local8 = _args.length; if (_local8 > 0){ if (_count == 0){ _local7 = 0; while (_local7 < _local8) { append(_args[_local7]); _local7++; }; } else { if (_local5 == null){ _local9 = prepend(_args[0]); _local7 = 1; while (_local7 < _local8) { _local9.insertAfter(new SListNode(_args[_local7])); if (_local9 == tail){ tail = _local9.next; }; _local9 = _local9.next; _count++; _local7++; }; } else { _local9 = _local5; _local7 = 0; while (_local7 < _local8) { _local9.insertAfter(new SListNode(_args[_local7])); if (_local9 == tail){ tail = _local9.next; }; _local9 = _local9.next; _count++; _local7++; }; }; }; _arg1.node = _local9; } else { _arg1.node = _local4; }; _arg1.list = _local6; return (_local6); }; return (null); } public function shiftUp():void{ var _local1:SListNode = head; if (head.next == tail){ head = tail; tail = _local1; tail.next = null; head.next = tail; } else { head = head.next; tail.next = _local1; _local1.next = null; tail = _local1; }; } } }//package de.polygonal.ds
Section 196
//SListIterator (de.polygonal.ds.SListIterator) package de.polygonal.ds { public class SListIterator implements Iterator { public var node:SListNode; public var list:SLinkedList; public function SListIterator(_arg1:SLinkedList=null, _arg2:SListNode=null){ this.list = _arg1; this.node = _arg2; } public function remove():Boolean{ return (list.remove(this)); } public function start():void{ if (list){ node = list.head; }; } public function get data(){ if (node){ return (node.data); }; return (null); } public function forth():void{ if (node){ node = node.next; }; } public function toString():String{ return ((("{SListIterator: data=" + node.data) + "}")); } public function hasNext():Boolean{ return (Boolean(node)); } public function valid():Boolean{ return (Boolean(node)); } public function next(){ var _local1:*; if (hasNext()){ _local1 = node.data; node = node.next; return (_local1); }; return (null); } public function set data(_arg1):void{ node.data = _arg1; } public function end():void{ if (list){ node = list.tail; }; } } }//package de.polygonal.ds
Section 197
//SListNode (de.polygonal.ds.SListNode) package de.polygonal.ds { public class SListNode implements LinkedListNode { public var next:SListNode; public var data; public function SListNode(_arg1){ data = _arg1; next = null; } public function insertAfter(_arg1:SListNode):void{ _arg1.next = next; next = _arg1; } public function toString():String{ return ((("[SListNode, data=" + data) + "]")); } } }//package de.polygonal.ds
Section 198
//FontAsset (mx.core.FontAsset) package mx.core { import flash.text.*; public class FontAsset extends Font implements IFlexAsset { mx_internal static const VERSION:String = "3.2.0.3958"; } }//package mx.core
Section 199
//IFlexAsset (mx.core.IFlexAsset) package mx.core { public interface IFlexAsset { } }//package mx.core
Section 200
//mx_internal (mx.core.mx_internal) package mx.core { public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal"; }//package mx.core
Section 201
//BackButton (BackButton) package { import contraption.menu.*; public dynamic class BackButton extends DashboardButton { } }//package
Section 202
//BackTestButton (BackTestButton) package { import contraption.menu.*; public dynamic class BackTestButton extends DashboardButton { } }//package
Section 203
//BackToMenuButton (BackToMenuButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class BackToMenuButton extends Button { public function BackToMenuButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.MENU_BACK; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 204
//BobbingCloud (BobbingCloud) package { import flash.display.*; public dynamic class BobbingCloud extends MovieClip { } }//package
Section 205
//Border (Border) package { import flash.display.*; public dynamic class Border extends MovieClip { } }//package
Section 206
//BubbleSceneChange (BubbleSceneChange) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class BubbleSceneChange extends SceneChange { public function BubbleSceneChange(){ addFrameScript(0, frame1, 14, frame15); } function frame15(){ if (!doOpen){ stop(); } else { dispatchEvent(new MenuEvent(MenuEvent.OPEN_CURTAIN)); }; } function frame1(){ stop(); } } }//package
Section 207
//BuildingMousePointer (BuildingMousePointer) package { import flash.display.*; public dynamic class BuildingMousePointer extends MovieClip { } }//package
Section 208
//ButtonBack (ButtonBack) package { import contraption.menu.*; public dynamic class ButtonBack extends NoTabButton { } }//package
Section 209
//ButtonMousePointer (ButtonMousePointer) package { import flash.display.*; public dynamic class ButtonMousePointer extends MovieClip { } }//package
Section 210
//BuyGameButton (BuyGameButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class BuyGameButton extends Button { public function BuyGameButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.BUY_GAME; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 211
//BuyMenuBackground (BuyMenuBackground) package { import flash.display.*; public dynamic class BuyMenuBackground extends MovieClip { } }//package
Section 212
//ClockwiseWheel (ClockwiseWheel) package { import flash.display.*; public dynamic class ClockwiseWheel extends MovieClip { } }//package
Section 213
//ClockwiseWheelButton (ClockwiseWheelButton) package { import contraption.menu.*; public dynamic class ClockwiseWheelButton extends DashboardButton { } }//package
Section 214
//ClockwiseWheelGraphic (ClockwiseWheelGraphic) package { import flash.display.*; public dynamic class ClockwiseWheelGraphic extends MovieClip { } }//package
Section 215
//Clouds (Clouds) package { import flash.events.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class Clouds extends MovieClip { public var cloudArray:Array; public var SPEED_MODIFIER:Number; public var speedArray:Array; public var SCENE_WIDTH:int; public var NUM_CLOUDS:int; public var SCENE_HEIGHT:int; public function Clouds(){ addFrameScript(0, frame1); } public function getRandomNumber(_arg1:int, _arg2:int):int{ return ((Math.round((Math.random() * (_arg2 - _arg1))) + _arg1)); } public function setRandomBob(_arg1:BobbingCloud):void{ var _local2:int = getRandomNumber(1, 70); _arg1.gotoAndPlay(_local2); } public function getRandomSpeed():int{ return (getRandomNumber(1, 5)); } public function moveClouds(_arg1:Event):void{ var _local2:int; var _local3:BobbingCloud; var _local4:Number; _local2 = 0; while (_local2 < cloudArray.length) { _local3 = cloudArray[_local2]; _local4 = speedArray[_local2]; _local3.x = (_local3.x + ((5 * _local4) * SPEED_MODIFIER)); if (_local3.x > (SCENE_WIDTH + 50)){ removeChild(_local3); _local3 = new BobbingCloud(); _local3.x = -325; _local3.y = getRandomNumber(0, (SCENE_HEIGHT - 200)); addChild(_local3); cloudArray[_local2] = _local3; speedArray[_local2] = getRandomSpeed(); }; _local2++; }; } function frame1(){ cloudArray = new Array(); speedArray = new Array(); SCENE_WIDTH = 2000; SCENE_HEIGHT = 1400; SPEED_MODIFIER = 0.05; NUM_CLOUDS = 5; setup(); addEventListener(Event.ENTER_FRAME, moveClouds); } public function setup():void{ var _local2:BobbingCloud; var _local3:int; var _local1:int; while (_local1 < NUM_CLOUDS) { _local2 = new BobbingCloud(); _local2.x = getRandomNumber(0, (SCENE_WIDTH - 200)); _local2.y = getRandomNumber(0, (SCENE_HEIGHT - 200)); setRandomBob(_local2); _local3 = getRandomSpeed(); addChild(_local2); cloudArray.push(_local2); speedArray.push(_local3); _local1++; }; } } }//package
Section 216
//ContinueButton (ContinueButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class ContinueButton extends Button { public function ContinueButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.MENU_BACK; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 217
//ContinueTutorialButton (ContinueTutorialButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class ContinueTutorialButton extends Button { public function ContinueTutorialButton(){ addFrameScript(0, frame1); } function frame1(){ buttonWidth = 116; buttonHeight = 42; } } }//package
Section 218
//Contraption (Contraption) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import contraption.*; import de.polygonal.ds.*; import flash.net.*; import contraption.blocks.*; import flash.geom.*; import contraption.tutorials.*; import flash.system.*; import flash.text.*; import mochi.as3.*; import flash.ui.*; public dynamic class Contraption extends MovieClip { protected var acting:Boolean;// = false private var adClip:MovieClip; protected var spinner:MovieClip; private var _loaderContext:LoaderContext; protected var newMenu:MenuWindow; private var _loader:Loader; protected var sceneChange:SceneChange; protected var splash:MovieClip; protected var menuStack:SLinkedList; protected var tf:TextField; protected var editor:Editor; protected var currentMenu:MenuWindow; protected var mouseType:int; protected var pointerMode:String; protected var menuCanvas:Sprite; public var pleaseRegisterMenu:PleaseRegisterMenu; protected var mainMenu:MainMenu; protected var mousePointer:MousePointer; protected var player:Player; protected var toolTip:Sprite; public static const INCLUDE_PAYPAL_LINKS:Boolean = false; public static const SPARKWORKZ_LOCATION:String = "http://sparkworkz.com"; public static const SERVER_LOCATION:String = "http://fantasticcontraption.com"; public static const VERSION_NAME:String = ""; public static const USE_ADS:Boolean = false; public static const VERSION_NUMBER:String = "1.026"; protected static var LAWS_FONT:Class = Contraption_LAWS_FONT; public function Contraption():void{ _loader = new Loader(); _loaderContext = new LoaderContext(); adClip = new MovieClip(); super(); playAd(); stage.stageFocusRect = false; stop(); } public function loadAdComplete(_arg1:Event):void{ var _local2:LoaderInfo = LoaderInfo(_arg1.target); trace(_local2.bytesTotal); trace(_local2.bytesLoaded); var _local3:* = _local2.content; adClip = MovieClip(_loader.content); adClip.addEventListener(Event.ENTER_FRAME, checkAd); addChild(adClip); adClip.scaleX = (700 / adClip.width); adClip.scaleY = (500 / adClip.height); if (adClip.scaleX > 1){ adClip.scaleX = 1; }; if (adClip.scaleY > 1){ adClip.scaleY = 1; }; adClip.gotoAndPlay(1); } protected function loadUpdateUserInfoMenu(_arg1:MenuEvent):void{ loadModalMenu(new UpdateUserInfoMenu()); } protected function loadUserGenLevels(_arg1:Event):void{ loadMenu(new UserGenLevelsMenu()); } protected function moveMode(_arg1:Event=null):void{ pointerMode = ModeEvent.MOVE_MODE; setPointer(); } protected function loadSavedLevels(_arg1:MenuEvent):void{ var _local2:int = _arg1.userId; if (_local2 == 0){ _local2 = User.getInstance().getUserId(); }; loadMenu(new UserLevelsMenu(_local2)); } protected function loadOfficialLevel(_arg1:int):void{ player = new Player(stage, this); loadMenu(player); player.loadOfficialLevel(_arg1); finishLoading(); } protected function tutorialLevelCompleteMenu(_arg1:MenuEvent):void{ loadModalMenu(new CompletedTutorialLevelMenu(_arg1.tutorialNumber)); } protected function addTooltip(_arg1:TooltipEvent):void{ if (toolTip){ menuCanvas.removeChild(toolTip); }; var _local2:TextField = new TextField(); _local2.autoSize = "left"; _local2.text = _arg1.toolTip; toolTip = new Sprite(); toolTip.graphics.lineStyle(2, 14509636); toolTip.graphics.beginFill(16772795); toolTip.graphics.drawRect(0, 0, (_local2.width + 5), (_local2.height + 5)); toolTip.addChild(_local2); toolTip.x = (mouseX - (toolTip.width / 2)); toolTip.y = ((mouseY - toolTip.height) - 25); if (toolTip.x < 0){ toolTip.x = (mouseX + 20); }; if (toolTip.y < 0){ toolTip.y = (mouseY + 50); }; menuCanvas.addChild(toolTip); } protected function finishLoading(_arg1:MenuEvent=null):void{ if (newMenu == null){ return; }; if (menuCanvas.contains(sceneChange)){ sceneChange.open(); } else { showNewMenu(); }; } protected function loadLevelHandler(_arg1:MenuEvent):void{ loadLevel(_arg1.levelId); } protected function addSpinner(_arg1:MenuEvent):void{ menuCanvas.addChild(spinner); } protected function loadSaveContraptionMenu(_arg1:SaveEvent):void{ loadModalMenu(new SaveContraptionMenu(_arg1.xml, _arg1.isSolution, _arg1.currentLevelId)); } protected function loadLogInMenu(_arg1:MenuEvent):void{ loadModalMenu(new LogInMenu()); } protected function loadResetPasswordMenu(_arg1:MenuEvent):void{ menuBack(); loadModalMenu(new LostPasswordMenu()); } protected function loadDesign(_arg1:int, _arg2:Boolean=false):void{ player = new Player(stage, this, _arg2); loadMenu(player); player.loadDesign(_arg1); } protected function loadLevel(_arg1:int):void{ player = new Player(stage, this); loadMenu(player); player.loadLevel(_arg1); } protected function startAction(_arg1:Event=null):void{ if ((_arg1 as ModeEvent)){ setPointer(true, (_arg1 as ModeEvent).actionType); } else { setPointer(true); }; } public function checkAd(_arg1:Event):void{ var _local2:int = adClip.framesLoaded; trace(("total:" + adClip.totalFrames)); trace(("frame:" + adClip.currentFrame)); if (adClip.currentFrame == adClip.totalFrames){ StartAfterAds(null); adClip.removeEventListener(Event.ENTER_FRAME, checkAd); }; } protected function setPointerHandler(_arg1:Event):void{ setPointer(); } protected function editLevelHandler(_arg1:MenuEvent):void{ editLevel(_arg1.levelId); } protected function loadBuyGameMenu(_arg1:MenuEvent):void{ loadModalMenu(new BuyGameMenu()); } protected function curtainOpenComplete(_arg1:MenuEvent):void{ menuCanvas.removeChild(sceneChange); } public function progressHandler(_arg1:ProgressEvent):void{ var _local2:Number = (_arg1.target.bytesLoaded / _arg1.target.bytesTotal); trace(("loaded = " + _local2)); } protected function showNewMenu(_arg1:MenuEvent=null):void{ var _local2:SListIterator; var _local3:MenuWindow; if (currentMenu != null){ menuCanvas.removeChild(currentMenu); }; newMenu.visible = true; currentMenu = newMenu; newMenu = null; if ((currentMenu as Player)){ _local2 = menuStack.getListIterator(); while (_local2.hasNext()) { _local3 = (_local2.next() as MenuWindow); if ((((((_local3 as ModalMenu)) || ((_local3 as Player)))) && (!((_local3 == currentMenu))))){ if (menuCanvas.contains(_local3)){ menuCanvas.removeChild(_local3); }; menuStack.remove(menuStack.nodeOf(_local3)); }; }; }; } protected function loadMenu(_arg1:MenuWindow):void{ _arg1.visible = false; newMenu = _arg1; addMenu(_arg1); sceneChange.close(); menuCanvas.addChild(sceneChange); if ((newMenu as Arena)){ Music.getInstance().playArena(); } else { Music.getInstance().playMenu(); }; } protected function loadDesignHandler(_arg1:MenuEvent):void{ loadDesign(_arg1.designId); } public function ioErrorHandler(_arg1:IOErrorEvent):void{ showText(("error:" + _arg1)); trace(("ioErrorHandler: " + _arg1)); } protected function mouseOut(_arg1:Event):void{ Mouse.show(); mousePointer.visible = false; } protected function loadModalMenu(_arg1:ModalMenu):void{ addMenu(_arg1); } public function playAd():void{ _loaderContext.checkPolicyFile = true; try { if (0){ _loader.load(new URLRequest("http://fc1portal/portal_testing/swintro_fc.swf"), _loaderContext); } else { _loader.load(new URLRequest("http://www.sparkworkz.com/portals/portal_games/swintro_fc.swf"), _loaderContext); }; } catch(error:Error) { trace("ERROR"); }; trace(_loader.contentLoaderInfo.bytesTotal); trace(_loader.contentLoaderInfo.bytesLoaded); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadAdComplete); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); addChild(_loader); } protected function setPointer(_arg1:Boolean=false, _arg2:int=0):void{ var _local6:int; var _local7:ActionContainer; var _local8:Actions; if (VERSION_NAME == "whirled.com"){ return; }; if (acting){ if (_arg2 != ModeEvent.ACTION_UNKNOWN){ menuCanvas.removeChild(mousePointer); if (_arg2 == ModeEvent.ACTION_MOVE){ mousePointer = new MovePointer(acting); } else { if (_arg2 == ModeEvent.ACTION_BUILD){ mousePointer = new BuildingPointer(acting); } else { if (_arg2 == ModeEvent.ACTION_BUTTON){ mousePointer = new ButtonPointer(acting); }; }; }; menuCanvas.addChild(mousePointer); }; return; }; if (_arg1){ acting = true; }; var _local3:Array = getObjectsUnderPoint(localToGlobal(new Point(mouseX, mouseY))); Mouse.hide(); mousePointer.visible = true; var _local4:int = (_local3.length - 1); while (_local4 >= 0) { if ((_local3[_local4] as ActionContainer)){ _local7 = (_local3[_local4] as ActionContainer); if ((((((player == null)) || (player.isInStartZone(new Point(mouseX, mouseY))))) || (!((_local7 as Block))))){ break; }; }; if (((!((_local3[_local4] == this))) && ((_local3[_local4].parent as MouseBlockingBackground)))){ _local7 = (_local3[_local4] as ActionContainer); break; }; _local4--; }; if (_local7 != null){ _local8 = _local7.getAllowableActions(); } else { _local8 = new Actions(); }; var _local5:Boolean; if (((!((player == null))) && (player.isRunning()))){ _local5 = true; }; if (_local8.button){ _local6 = MousePointer.BUTTON_UP; } else { if ((((pointerMode == ModeEvent.DELETE_MODE)) && (!(_local5)))){ if (_local8.delete_){ _local6 = MousePointer.DELETE_UP; } else { _local6 = MousePointer.NORMAL_UP; }; } else { if ((((pointerMode == ModeEvent.MOVE_MODE)) && (_local8.drag))){ _local6 = MousePointer.DRAG_UP; } else { if ((((((pointerMode == ModeEvent.MOVE_MODE)) && (_local8.move))) && (!(_local5)))){ _local6 = MousePointer.MOVE_UP; } else { if (((_local8.build) && (!(_local5)))){ _local6 = MousePointer.BUILDING_UP; } else { if (_local8.alwaysDrag){ _local6 = MousePointer.DRAG_UP; } else { _local6 = MousePointer.NORMAL_UP; }; }; }; }; }; }; if (acting){ _local6++; }; if (_local6 != mouseType){ mouseType = _local6; menuCanvas.removeChild(mousePointer); switch (_local6){ case MousePointer.NORMAL_UP: mousePointer = new MousePointer(false); break; case MousePointer.NORMAL_DOWN: mousePointer = new MousePointer(true); break; case MousePointer.BUILDING_UP: mousePointer = new BuildingPointer(false); break; case MousePointer.BUILDING_DOWN: mousePointer = new BuildingPointer(true); break; case MousePointer.DELETE_UP: mousePointer = new DeletePointer(false); break; case MousePointer.DELETE_DOWN: mousePointer = new DeletePointer(true); break; case MousePointer.MOVE_UP: mousePointer = new MovePointer(false); break; case MousePointer.MOVE_DOWN: mousePointer = new MovePointer(true); break; case MousePointer.DRAG_UP: mousePointer = new DragPointer(false); break; case MousePointer.DRAG_DOWN: mousePointer = new DragPointer(true); break; case MousePointer.BUTTON_UP: mousePointer = new ButtonPointer(false); break; case MousePointer.BUTTON_DOWN: mousePointer = new ButtonPointer(true); break; }; }; menuCanvas.addChild(mousePointer); if (_local8.inputText){ mousePointer.visible = false; } else { mousePointer.visible = true; }; mousePointer.x = mouseX; mousePointer.y = mouseY; } protected function loadLevelSolutions(_arg1:MenuEvent):void{ loadMenu(new UserDesignsMenu(_arg1.levelId, UserDesignsMenu.LEVEL_MODE)); } protected function defaultMode(_arg1:Event=null):void{ pointerMode = ModeEvent.DEFAULT_MODE; setPointer(); } protected function addMenuListeners(_arg1:MenuWindow):void{ _arg1.addEventListener(MenuEvent.LOAD_EDITOR, loadEditor, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_LEVEL, loadLevelHandler, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_OFFICIAL_LEVEL, loadOfficialLevelHandler, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_TUTORIAL_LEVEL, loadTutorialLevelHandler, false, 0, true); _arg1.addEventListener(MenuEvent.EDIT_LEVEL, editLevelHandler, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_SAVED_DESIGNS, loadSavedDesigns, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_SAVED_LEVELS, loadSavedLevels, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_TUTORIALS, loadTutorials, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_USER_GENERATED_LEVELS, loadUserGenLevels, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_LEVEL_SOLUTIONS, loadLevelSolutions, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_DESIGN, loadDesignHandler, false, 0, true); _arg1.addEventListener(MenuEvent.TRY_LEVEL, tryLevel, false, 0, true); _arg1.addEventListener(MenuEvent.RETURN_TO_MAIN_MENU, loadMainMenu, false, 0, true); _arg1.addEventListener(MenuEvent.MENU_BACK, menuBack, false, 0, true); _arg1.addEventListener(MenuEvent.FINISHED_LOADING, finishLoading, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_USER_MENU, loadUserMenu, false, 0, true); _arg1.addEventListener(MenuEvent.LOG_IN, loadLogInMenu, false, 0, true); _arg1.addEventListener(MenuEvent.NEW_USER, loadNewUserMenu, false, 0, true); _arg1.addEventListener(MenuEvent.RESET_PASSWORD, loadResetPasswordMenu, false, 0, true); _arg1.addEventListener(MenuEvent.UPDATE_USER_INFO, loadUpdateUserInfoMenu, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_LEVEL_LINK_MENU, loadLevelLinkMenu, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_DESIGN_LINK_MENU, loadDesignLinkMenu, false, 0, true); _arg1.addEventListener(MenuEvent.LEVEL_COMPLETE, levelCompleteMenu, false, 0, true); _arg1.addEventListener(MenuEvent.TUTORIAL_LEVEL_COMPLETE, tutorialLevelCompleteMenu, false, 0, true); _arg1.addEventListener(MenuEvent.LOAD_LINKED_IN_MENU, loadLinkedInMenu, false, 0, true); _arg1.addEventListener(MenuEvent.BUY_GAME, loadBuyGameMenu, false, 0, true); _arg1.addEventListener(MenuEvent.ADD_SPINNER, addSpinner, false, 0, true); _arg1.addEventListener(MenuEvent.REMOVE_SPINNER, removeSpinner, false, 0, true); _arg1.addEventListener(SaveEvent.SAVE_CONTRAPTION, loadSaveContraptionMenu, false, 0, true); _arg1.addEventListener(SaveEvent.SAVE_LEVEL, loadSaveLevelMenu, false, 0, true); _arg1.addEventListener(ModeEvent.MOVE_MODE, moveMode, false, 0, true); _arg1.addEventListener(ModeEvent.DELETE_MODE, deleteMode, false, 0, true); _arg1.addEventListener(ModeEvent.DEFAULT_MODE, defaultMode, false, 0, true); _arg1.addEventListener(ModeEvent.START_ACTION, startAction, false, 0, true); _arg1.addEventListener(MenuEvent.LOGGED_IN, bubble, false, 0, true); _arg1.addEventListener(MenuEvent.LOGGED_OUT, bubble, false, 0, true); } protected function loadTutorialLevel(_arg1:int):void{ player = new TutorialPlayer(stage, this); loadMenu(player); (player as TutorialPlayer).loadTutorialLevel(_arg1); } protected function tryLevel(_arg1:Event):void{ player = new Player(stage, this, false, true); loadMenu(player); player.loadFromXml(editor.getLevelXml()); player.initZoomAndScroll(); } protected function bubble(_arg1:Event):void{ dispatchEvent(_arg1); mainMenu.pagingData.currentPage = 0; mainMenu.refresh(); } protected function closeSplash(_arg1:Event):void{ splash.gotoAndPlay("leave"); sceneChange.removeEventListener(MouseEvent.MOUSE_DOWN, closeSplash); GlobalListener.getInstance().removeEventListener(KeyboardEvent.KEY_DOWN, closeSplash); sceneChange.lockClosed = false; sceneChange.open(); if (adClip != null){ removeChild(adClip); }; _arg1.stopPropagation(); } protected function loadTutorials(_arg1:MenuEvent):void{ loadTutorialLevel(1); } public function checkAccess():void{ var _local1:URLLoader = new ContraptionUrlLoader(); _local1.addEventListener(Event.COMPLETE, checkAccessComplete); var _local2:URLRequest = new URLRequest((Contraption.SERVER_LOCATION + "/checkAccess.php")); var _local3:URLVariables = new URLVariables(); _local3.versionName = VERSION_NAME; _local3.versionNumber = VERSION_NUMBER; _local3.requestingDomain = currentDomain(); _local2.data = _local3; _local2.method = URLRequestMethod.GET; _local1.load(_local2); } public function StartAfterAds(_arg1:Event):void{ var _local2:Button; MochiBot.track(this, "0563fb3a"); Music.getInstance().playMenu(); if (VERSION_NAME != "whirled.com"){ stage.frameRate = 30; }; graphics.beginFill(8895985); graphics.drawRect(0, 0, 700, 500); menuCanvas = new Sprite(); addChild(menuCanvas); _local2 = new MuteButton(); _local2.x = 10; _local2.y = 455; addChild(_local2); tf = new TextField(); tf.y = 460; tf.width = 2000; addChild(tf); tf.mouseEnabled = false; var _local3:Sprite = new Sprite(); _local3.graphics.beginFill(8895985); _local3.graphics.drawRect(0, 0, 700, 500); addChild(_local3); mask = _local3; spinner = new Spinner(); mousePointer = new MousePointer(acting); mousePointer.visible = false; addChild(mousePointer); pointerMode = ModeEvent.DEFAULT_MODE; sceneChange = new BubbleSceneChange(); sceneChange.addEventListener(MenuEvent.OPEN_CURTAIN, showNewMenu, false, 0, true); sceneChange.addEventListener(MenuEvent.CURTAIN_OPEN_COMPLETE, curtainOpenComplete, false, 0, true); menuStack = new SLinkedList(); mainMenu = new MainMenu(); loadMenu(mainMenu); sceneChange.jumpToClosed(); sceneChange.lockClosed = true; splash = new Splash(); splash.x = 350; splash.y = 250; sceneChange.addChild(splash); sceneChange.addEventListener(MouseEvent.MOUSE_DOWN, closeSplash, false, 0, true); var _local4:GlobalListener = GlobalListener.getInstance(); _local4.init(stage, this); _local4.addEventListener(KeyboardEvent.KEY_DOWN, closeSplash, false, 0, true); var _local5:String = root.loaderInfo.parameters.levelId; var _local6:String = root.loaderInfo.parameters.designId; var _local7:String = root.loaderInfo.parameters.editId; if (((!((_local5 == null))) && (!((_local5 == ""))))){ loadLevel(new int(_local5)); } else { if (((!((_local6 == null))) && (!((_local6 == ""))))){ loadDesign(new int(_local6), true); } else { if (((!((_local7 == null))) && (!((_local7 == ""))))){ editLevel(new int(_local7)); }; }; }; addEventListener(Event.ENTER_FRAME, update, false, 0, true); _local4.addEventListener(Event.MOUSE_LEAVE, mouseOut, false, 0, true); this.addEventListener(MouseEvent.MOUSE_DOWN, startAction, false, 0, true); this.addEventListener(MouseEvent.MOUSE_UP, endAction, false, 0, true); this.addEventListener(MouseEvent.MOUSE_MOVE, setPointerHandler, false, 0, true); _local4.addEventListener(Event.UNLOAD, unload, false, 0, true); addEventListener(TooltipEvent.ADD_TOOLTIP, addTooltip, false, 0, true); addEventListener(TooltipEvent.REMOVE_TOOLTIP, removeTooltip, false, 0, true); var _local8:MovieClip = new Border(); _local8.x = 351; _local8.y = 247; addChild(_local8); } protected function editLevel(_arg1:int):void{ editor = new Editor(stage, this); loadMenu(editor); editor.loadLevel(_arg1); } protected function currentDomain():String{ var _local1:int = (stage.loaderInfo.loaderURL.indexOf("://") + 3); var _local2:int = stage.loaderInfo.loaderURL.indexOf("/", _local1); var _local3:String = stage.loaderInfo.loaderURL.substring(_local1, _local2); var _local4:int = (_local3.lastIndexOf(".") - 1); var _local5:int = (_local3.lastIndexOf(".", _local4) + 1); if (_local3.substring(_local5, (_local4 + 1)) == "com"){ _local5 = (_local3.lastIndexOf(".", (_local5 - 2)) + 1); }; return (_local3.substring(_local5, _local3.length)); } protected function addMenu(_arg1:MenuWindow):void{ addMenuListeners(_arg1); menuStack.append(_arg1); menuCanvas.addChild(_arg1); acting = false; setPointer(); } protected function loadLinkedInMenu(_arg1:MenuEvent):void{ loadModalMenu(new LinkInMenu()); } protected function loadTutorialLevelHandler(_arg1:MenuEvent):void{ loadTutorialLevel(_arg1.tutorialNumber); } protected function loadOfficialLevelHandler(_arg1:MenuEvent):void{ if (_arg1.levelNumber == 0){ return (loadLevel(_arg1.levelId)); }; if (_arg1.levelNumber < 13){ loadOfficialLevel(_arg1.levelNumber); } else { loadModalMenu(new PleaseRegisterMenu()); trace("UNPLAYABLE"); }; } protected function deniedPermissionToPlay(_arg1:String):void{ menuCanvas.visible = false; var _local2:TextArea = new TextArea(_arg1, 14); _local2.bold(); _local2.mouseEnabled = true; _local2.x = 200; _local2.y = 200; addChild(_local2); throw (("Error: " + _arg1)); } protected function loadMainMenu(_arg1:MenuEvent=null):void{ var _local3:MenuWindow; var _local2:Iterator = menuStack.getIterator(); while (_local2.hasNext()) { _local3 = _local2.next(); _local3.disposeMenu(); if (menuCanvas.contains(_local3)){ menuCanvas.removeChild(_local3); }; }; menuStack.clear(); mainMenu.refresh(); mainMenu.visible = true; menuCanvas.addChild(mainMenu); menuStack.append(mainMenu); currentMenu = mainMenu; } protected function loadSaveLevelMenu(_arg1:SaveEvent):void{ loadModalMenu(new SaveLevelMenu(_arg1.xml)); } protected function loadNewUserMenu(_arg1:MenuEvent):void{ loadModalMenu(new NewUserMenu()); } protected function update(_arg1:Event):void{ mousePointer.x = mouseX; mousePointer.y = mouseY; } protected function showText(_arg1:String):void{ var _local2:TextArea = new TextArea(_arg1, 14); _local2.bold(); _local2.mouseEnabled = true; _local2.x = 200; _local2.y = 200; _local2.textColor = 0xFFFFFF; addChild(_local2); } protected function loadUserMenu(_arg1:MenuEvent):void{ loadMenu(new UserMenu(_arg1.userId, _arg1.userName)); finishLoading(); } protected function authenticate(_arg1:String="example.com"):void{ var _local2:TextArea; if (currentDomain().toLowerCase() == "fc1portal"){ _local2 = new TextArea("CL:97845"); _local2.bold(); _local2.width = 300; _local2.x = 30; _local2.y = 5; addChild(_local2); }; checkAccess(); } protected function loadLevelLinkMenu(_arg1:MenuEvent):void{ loadModalMenu(new LevelLinkMenu(_arg1.levelId)); } protected function levelCompleteMenu(_arg1:MenuEvent):void{ loadModalMenu(new CompletedLevelMenu(_arg1.levelNumber, _arg1.levelId)); } protected function loadDesignLinkMenu(_arg1:MenuEvent):void{ loadModalMenu(new DesignLinkMenu(_arg1.designId)); } protected function removeTooltip(_arg1:TooltipEvent):void{ if (toolTip){ menuCanvas.removeChild(toolTip); }; toolTip = null; } public function checkAccessComplete(_arg1:Event):void{ var _local2:XML = new XML(_arg1.target.data); if (_local2.permission == "false"){ deniedPermissionToPlay(_local2.message); }; } protected function menuBack(_arg1:MenuEvent=null):void{ var _local2:MenuWindow = (menuStack.tail.data as MenuWindow); _local2.disposeMenu(); menuCanvas.removeChild(_local2); menuStack.removeTail(); if (menuStack.tail == null){ loadMainMenu(); }; _local2 = (menuStack.tail.data as MenuWindow); _local2.refresh(); _local2.visible = true; menuCanvas.addChild(_local2); currentMenu = _local2; acting = false; setPointer(); if ((currentMenu as Arena)){ Music.getInstance().playArena(); } else { Music.getInstance().playMenu(); }; } protected function deleteMode(_arg1:Event=null):void{ pointerMode = ModeEvent.DELETE_MODE; setPointer(); } protected function endAction(_arg1:Event=null):void{ acting = false; setPointer(); } protected function loadEditor(_arg1:MenuEvent):void{ editor = new Editor(stage, this); loadMenu(editor); finishLoading(); } protected function loadSavedDesigns(_arg1:MenuEvent):void{ var _local2:int = _arg1.userId; if (_local2 == 0){ _local2 = User.getInstance().getUserId(); }; loadMenu(new UserDesignsMenu(_local2, UserDesignsMenu.USER_MODE)); } protected function removeSpinner(_arg1:MenuEvent):void{ if (menuCanvas.contains(spinner)){ menuCanvas.removeChild(spinner); }; } public function linkToSite():void{ var _local1:URLRequest = new URLRequest(Contraption.SERVER_LOCATION); navigateToURL(_local1); } public function isCurrentMenu(_arg1:MenuWindow):Boolean{ return ((_arg1 == (menuStack.tail.data as MenuWindow))); } public function unload(_arg1:Event):void{ removeEventListener(Event.ENTER_FRAME, update); Music.getInstance().stopSound(); } } }//package
Section 219
//Contraption_LAWS_FONT (Contraption_LAWS_FONT) package { import mx.core.*; public class Contraption_LAWS_FONT extends FontAsset { } }//package
Section 220
//CounterClockwiseWheel (CounterClockwiseWheel) package { import flash.display.*; public dynamic class CounterClockwiseWheel extends MovieClip { } }//package
Section 221
//CounterClockwiseWheelButton (CounterClockwiseWheelButton) package { import contraption.menu.*; public dynamic class CounterClockwiseWheelButton extends DashboardButton { } }//package
Section 222
//CounterClockwiseWheelGraphic (CounterClockwiseWheelGraphic) package { import flash.display.*; public dynamic class CounterClockwiseWheelGraphic extends MovieClip { } }//package
Section 223
//DashBackground (DashBackground) package { import contraption.menu.*; public dynamic class DashBackground extends MouseBlockingBackground { } }//package
Section 224
//DashboardImpl (DashboardImpl) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; import adobe.utils.*; import flash.printing.*; import flash.xml.*; public dynamic class DashboardImpl extends Dashboard { public var expander; public function DashboardImpl(){ addFrameScript(0, frame1); } function frame1(){ expander = (getChildAt(0) as Expander); fatInitFunction = fatInit; initFat(); } public function fatInit(_arg1:String):void{ zoomInButton = expander.dash.zoomButtons.zoomInButton; zoomOutButton = expander.dash.zoomButtons.zoomOutButton; if (_arg1 == MODE_EDIT_LEVEL){ expander.dash.removeChild(expander.dash.contraptionButtons); testLevelButton = expander.dash.levelButtons.testLevelButton; goalCircleButton = expander.dash.levelButtons.goalCircleButton; goalSquareButton = expander.dash.levelButtons.goalSquareButton; staticCircleButton = expander.dash.levelButtons.staticCircleButton; staticSquareButton = expander.dash.levelButtons.staticSquareButton; dynamicCircleButton = expander.dash.levelButtons.dynamicCircleButton; dynamicSquareButton = expander.dash.levelButtons.dynamicSquareButton; } else { expander.dash.removeChild(expander.dash.levelButtons); goButton = expander.dash.contraptionButtons.goStopButtons.goButton; stopButton = expander.dash.contraptionButtons.goStopButtons.stopButton; stopButtonPing = expander.dash.contraptionButtons.goStopButtons.stopButtonPing; cwWheelButton = expander.dash.contraptionButtons.cwWheelButton; ccwWheelButton = expander.dash.contraptionButtons.ccwWheelButton; npWheelButton = expander.dash.contraptionButtons.npWheelButton; hollowRodButton = expander.dash.contraptionButtons.hollowRodButton; solidRodButton = expander.dash.contraptionButtons.solidRodButton; moveButton = expander.dash.contraptionButtons.moveButton; deleteButton = expander.dash.contraptionButtons.deleteButton; }; if (_arg1 == MODE_TEST_LEVEL){ backButton = expander.dash.backTestButton; expander.dash.removeChild(expander.dash.saveButton); expander.dash.removeChild(expander.dash.backButton); } else { saveButton = expander.dash.saveButton; backButton = expander.dash.backButton; expander.dash.removeChild(expander.dash.backTestButton); }; tooltip = expander.dash.tooltip; init(); } } }//package
Section 225
//DefaultMousePointer (DefaultMousePointer) package { import flash.display.*; public dynamic class DefaultMousePointer extends MovieClip { } }//package
Section 226
//DeleteButton (DeleteButton) package { import contraption.menu.*; public dynamic class DeleteButton extends DashboardButton { } }//package
Section 227
//DeleteDesignButton (DeleteDesignButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class DeleteDesignButton extends Button { public function DeleteDesignButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.DELETE_DESIGN; toolTip = "Delete this contraption"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 228
//DeleteLevelButton (DeleteLevelButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class DeleteLevelButton extends Button { public function DeleteLevelButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.DELETE_LEVEL; toolTip = "Delete this level"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 229
//DeleteMousePointer (DeleteMousePointer) package { import flash.display.*; public dynamic class DeleteMousePointer extends MovieClip { } }//package
Section 230
//DoPublishButton (DoPublishButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class DoPublishButton extends Button { public function DoPublishButton(){ addFrameScript(0, frame1); } function frame1(){ buttonWidth = 30; buttonHeight = 30; } } }//package
Section 231
//DragActingMousePointer (DragActingMousePointer) package { import flash.display.*; public dynamic class DragActingMousePointer extends MovieClip { } }//package
Section 232
//DragMousePointer (DragMousePointer) package { import flash.display.*; public dynamic class DragMousePointer extends MovieClip { } }//package
Section 233
//DynamicCircleButton (DynamicCircleButton) package { import contraption.menu.*; public dynamic class DynamicCircleButton extends DashboardButton { } }//package
Section 234
//DynamicSquareButton (DynamicSquareButton) package { import contraption.menu.*; public dynamic class DynamicSquareButton extends DashboardButton { } }//package
Section 235
//EditLevelButton (EditLevelButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class EditLevelButton extends Button { public function EditLevelButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.EDIT_LEVEL; toolTip = "Edit this level"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 236
//Expander (Expander) package { import flash.events.*; import flash.display.*; public dynamic class Expander extends MovieClip { public var expandButton:SimpleButton; public var dash:MovieClip; public function Expander(){ addFrameScript(0, frame1, 1, frame2, 12, frame13, 13, frame14); } function frame14(){ stop(); } function frame1(){ expandButton.addEventListener(MouseEvent.CLICK, expandButtonClick); } function frame13(){ gotoAndStop("contracted"); } public function expandButtonClick(_arg1:MouseEvent){ if (currentLabel == "contracted"){ gotoAndPlay("expanding"); } else { if (currentLabel == "expanded"){ gotoAndPlay("contracting"); }; }; } function frame2(){ stop(); } } }//package
Section 237
//FanCon_Link (FanCon_Link) package { import flash.display.*; public dynamic class FanCon_Link extends SimpleButton { } }//package
Section 238
//FC_Logo_Button (FC_Logo_Button) package { import flash.display.*; public dynamic class FC_Logo_Button extends SimpleButton { } }//package
Section 239
//GoalCircleButton (GoalCircleButton) package { import contraption.menu.*; public dynamic class GoalCircleButton extends DashboardButton { } }//package
Section 240
//GoalSquareButton (GoalSquareButton) package { import contraption.menu.*; public dynamic class GoalSquareButton extends DashboardButton { } }//package
Section 241
//GoButton (GoButton) package { import contraption.menu.*; public dynamic class GoButton extends DashboardButton { } }//package
Section 242
//GraphicsOffButton (GraphicsOffButton) package { import flash.display.*; public dynamic class GraphicsOffButton extends SimpleButton { } }//package
Section 243
//GraphicsOnButton (GraphicsOnButton) package { import flash.display.*; public dynamic class GraphicsOnButton extends SimpleButton { } }//package
Section 244
//HollowRod (HollowRod) package { import flash.display.*; public dynamic class HollowRod extends MovieClip { public var one:MovieClip; } }//package
Section 245
//HollowRodButton (HollowRodButton) package { import contraption.menu.*; public dynamic class HollowRodButton extends DashboardButton { } }//package
Section 246
//HollowRodGraphic (HollowRodGraphic) package { import flash.events.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; import adobe.utils.*; import flash.printing.*; import flash.xml.*; public dynamic class HollowRodGraphic extends MovieClip { public var four:MovieClip; public var two:MovieClip; public var one:MovieClip; public var three:MovieClip; public function HollowRodGraphic(){ addFrameScript(0, frame1); } function frame1(){ one.gotoAndPlay(1); two.gotoAndPlay(11); three.gotoAndPlay(21); four.gotoAndPlay(31); one.dropBouncing.gotoAndPlay(1); two.dropBouncing.gotoAndPlay(7); three.dropBouncing.gotoAndPlay(14); four.dropBouncing.gotoAndPlay(21); } } }//package
Section 247
//HollowRodGraphicBG (HollowRodGraphicBG) package { import flash.events.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; import adobe.utils.*; import flash.printing.*; import flash.xml.*; public dynamic class HollowRodGraphicBG extends MovieClip { public var four:MovieClip; public var two:MovieClip; public var one:MovieClip; public var three:MovieClip; public function HollowRodGraphicBG(){ addFrameScript(0, frame1); } function frame1(){ one.gotoAndPlay(1); two.gotoAndPlay(11); three.gotoAndPlay(21); four.gotoAndPlay(31); one.dropBouncing.gotoAndPlay(1); two.dropBouncing.gotoAndPlay(7); three.dropBouncing.gotoAndPlay(14); four.dropBouncing.gotoAndPlay(21); } } }//package
Section 248
//iphone (iphone) package { import flash.display.*; public dynamic class iphone extends SimpleButton { } }//package
Section 249
//LearnToPlayButton (LearnToPlayButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class LearnToPlayButton extends Button { public function LearnToPlayButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_TUTORIALS; buttonWidth = 218; buttonHeight = 46; } } }//package
Section 250
//LeftArrow (LeftArrow) package { import contraption.menu.*; public dynamic class LeftArrow extends NoTabButton { } }//package
Section 251
//Level4Overlay (Level4Overlay) package { import flash.display.*; public dynamic class Level4Overlay extends MovieClip { } }//package
Section 252
//LevelCircle (LevelCircle) package { import contraption.menu.*; public dynamic class LevelCircle extends NoTabButton { } }//package
Section 253
//LevelCircleChecked (LevelCircleChecked) package { import contraption.menu.*; public dynamic class LevelCircleChecked extends NoTabButton { } }//package
Section 254
//LevelCircleRestricted (LevelCircleRestricted) package { import flash.display.*; public dynamic class LevelCircleRestricted extends SimpleButton { } }//package
Section 255
//LinkDesignButton (LinkDesignButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class LinkDesignButton extends Button { public function LinkDesignButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_DESIGN_LINK_MENU; toolTip = "Link to this contraption"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 256
//LinkedInOverlay (LinkedInOverlay) package { import flash.display.*; public dynamic class LinkedInOverlay extends MovieClip { } }//package
Section 257
//LinkLevelButton (LinkLevelButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class LinkLevelButton extends Button { public function LinkLevelButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_LEVEL_LINK_MENU; toolTip = "Link to this level"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 258
//linkto (linkto) package { import flash.display.*; public dynamic class linkto extends SimpleButton { } }//package
Section 259
//LogInButton (LogInButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class LogInButton extends Button { public function LogInButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOG_IN; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 260
//LogOutButton (LogOutButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class LogOutButton extends Button { public function LogOutButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOG_OUT; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 261
//MainMenuButton (MainMenuButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class MainMenuButton extends Button { public function MainMenuButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.RETURN_TO_MAIN_MENU; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 262
//MenuBackground (MenuBackground) package { import flash.display.*; public dynamic class MenuBackground extends MovieClip { } }//package
Section 263
//MenuTopButtons (MenuTopButtons) package { import flash.display.*; public dynamic class MenuTopButtons extends MovieClip { } }//package
Section 264
//MochiBot (MochiBot) package { import flash.display.*; import flash.net.*; import flash.system.*; public dynamic class MochiBot extends Sprite { public static function track(_arg1:Sprite, _arg2:String):MochiBot{ if (Security.sandboxType == "localWithFile"){ return (null); }; var _local3:MochiBot = new (MochiBot); _arg1.addChild(_local3); Security.allowDomain("*"); Security.allowInsecureDomain("*"); var _local4 = "http://core.mochibot.com/my/core.swf"; var _local5:URLVariables = new URLVariables(); _local5["sb"] = Security.sandboxType; _local5["v"] = Capabilities.version; _local5["swfid"] = _arg2; _local5["mv"] = "8"; _local5["fv"] = "9"; var _local6:String = _local3.root.loaderInfo.loaderURL; if (_local6.indexOf("http") == 0){ _local5["url"] = _local6; } else { _local5["url"] = "local"; }; var _local7:URLRequest = new URLRequest(_local4); _local7.contentType = "application/x-www-form-urlencoded"; _local7.method = URLRequestMethod.POST; _local7.data = _local5; var _local8:Loader = new Loader(); _local3.addChild(_local8); _local8.load(_local7); return (_local3); } } }//package
Section 265
//ModalMenuCloud (ModalMenuCloud) package { import flash.display.*; public dynamic class ModalMenuCloud extends MovieClip { } }//package
Section 266
//ModalMenuCloudMore (ModalMenuCloudMore) package { import flash.display.*; public dynamic class ModalMenuCloudMore extends MovieClip { } }//package
Section 267
//MoveButton (MoveButton) package { import contraption.menu.*; public dynamic class MoveButton extends DashboardButton { } }//package
Section 268
//MoveMousePointer (MoveMousePointer) package { import flash.display.*; public dynamic class MoveMousePointer extends MovieClip { } }//package
Section 269
//NewUserButton (NewUserButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class NewUserButton extends Button { public function NewUserButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.NEW_USER; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 270
//NextLevelButton (NextLevelButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class NextLevelButton extends Button { public function NextLevelButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_LEVEL; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 271
//NextPageButton (NextPageButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class NextPageButton extends Button { public function NextPageButton(){ addFrameScript(0, frame1); } function frame1(){ buttonWidth = 37; buttonHeight = 27; } } }//package
Section 272
//NonPoweredWheelButton (NonPoweredWheelButton) package { import contraption.menu.*; public dynamic class NonPoweredWheelButton extends DashboardButton { } }//package
Section 273
//NonPoweredWheelGraphic (NonPoweredWheelGraphic) package { import flash.display.*; public dynamic class NonPoweredWheelGraphic extends MovieClip { } }//package
Section 274
//Play_more_games (Play_more_games) package { import flash.display.*; public dynamic class Play_more_games extends SimpleButton { } }//package
Section 275
//PlayDesignSmallButton (PlayDesignSmallButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class PlayDesignSmallButton extends Button { public function PlayDesignSmallButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_DESIGN; toolTip = "View this contraption"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 276
//PlayGameButton (PlayGameButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class PlayGameButton extends Button { public function PlayGameButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.MENU_BACK; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 277
//PlayLevelSmallButton (PlayLevelSmallButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class PlayLevelSmallButton extends Button { public function PlayLevelSmallButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_LEVEL; toolTip = "Play this level"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 278
//playOnIPhone (playOnIPhone) package { import flash.display.*; public dynamic class playOnIPhone extends SimpleButton { } }//package
Section 279
//PreviousMenuButton (PreviousMenuButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class PreviousMenuButton extends Button { public function PreviousMenuButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.MENU_BACK; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 280
//PreviousPageButton (PreviousPageButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class PreviousPageButton extends Button { public function PreviousPageButton(){ addFrameScript(0, frame1); } function frame1(){ buttonWidth = 37; buttonHeight = 27; } } }//package
Section 281
//ResetPasswordButton (ResetPasswordButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class ResetPasswordButton extends Button { public function ResetPasswordButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.RESET_PASSWORD; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 282
//RightArrow (RightArrow) package { import contraption.menu.*; public dynamic class RightArrow extends NoTabButton { } }//package
Section 283
//SaveButton (SaveButton) package { import contraption.menu.*; public dynamic class SaveButton extends DashboardButton { } }//package
Section 284
//SavedContraptionsButton (SavedContraptionsButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SavedContraptionsButton extends Button { public function SavedContraptionsButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_SAVED_DESIGNS; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 285
//SavedLevelBackground (SavedLevelBackground) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SavedLevelBackground extends SavedLevelBackgroundBase { public function SavedLevelBackground(){ addFrameScript(9, frame10, 19, frame20); } function frame20(){ stop(); } function frame10(){ stop(); } } }//package
Section 286
//SavedLevelBackgroundMask (SavedLevelBackgroundMask) package { import flash.events.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SavedLevelBackgroundMask extends MovieClip { public function SavedLevelBackgroundMask(){ addFrameScript(9, frame10, 19, frame20); } function frame20(){ stop(); } function frame10(){ stop(); } } }//package
Section 287
//SavedLevelsButton (SavedLevelsButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SavedLevelsButton extends Button { public function SavedLevelsButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_SAVED_LEVELS; requiresLogIn = true; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 288
//SkipTutorialButton (SkipTutorialButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import contraption.tutorials.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SkipTutorialButton extends TutorialButton { public function SkipTutorialButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = TutorialEvent.SKIP_TUTORIAL; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 289
//SmallBackButton (SmallBackButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SmallBackButton extends Button { public function SmallBackButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.MENU_BACK; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 290
//SmallCancelButton (SmallCancelButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SmallCancelButton extends Button { public function SmallCancelButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.MENU_BACK; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 291
//SmallSaveButton (SmallSaveButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SmallSaveButton extends Button { public function SmallSaveButton(){ addFrameScript(0, frame1); } function frame1(){ buttonWidth = 116; buttonHeight = 42; } } }//package
Section 292
//SolidRodButton (SolidRodButton) package { import contraption.menu.*; public dynamic class SolidRodButton extends DashboardButton { } }//package
Section 293
//SolidRodGraphic (SolidRodGraphic) package { import flash.display.*; public dynamic class SolidRodGraphic extends MovieClip { } }//package
Section 294
//SolidRodGraphicBG (SolidRodGraphicBG) package { import flash.display.*; public dynamic class SolidRodGraphicBG extends MovieClip { } }//package
Section 295
//SolutionsButton (SolutionsButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class SolutionsButton extends Button { public function SolutionsButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.LOAD_LEVEL_SOLUTIONS; toolTip = "View published designs people\nhave made for this level"; buttonWidth = 30; buttonHeight = 30; } } }//package
Section 296
//SoundOffButton (SoundOffButton) package { import flash.display.*; public dynamic class SoundOffButton extends SimpleButton { } }//package
Section 297
//SoundOnButton (SoundOnButton) package { import flash.display.*; public dynamic class SoundOnButton extends SimpleButton { } }//package
Section 298
//Splash (Splash) package { import flash.display.*; public dynamic class Splash extends MovieClip { public function Splash(){ addFrameScript(18, frame19, 29, frame30); } function frame30(){ stop(); } function frame19(){ stop(); } } }//package
Section 299
//StartHere (StartHere) package { import flash.display.*; public dynamic class StartHere extends MovieClip { } }//package
Section 300
//StaticCircleButton (StaticCircleButton) package { import contraption.menu.*; public dynamic class StaticCircleButton extends DashboardButton { } }//package
Section 301
//StaticSquareButton (StaticSquareButton) package { import contraption.menu.*; public dynamic class StaticSquareButton extends DashboardButton { } }//package
Section 302
//StopButton (StopButton) package { import contraption.menu.*; public dynamic class StopButton extends DashboardButton { } }//package
Section 303
//StopButtonPing (StopButtonPing) package { import flash.display.*; public dynamic class StopButtonPing extends MovieClip { public function StopButtonPing(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package
Section 304
//SW_Button (SW_Button) package { import flash.display.*; public dynamic class SW_Button extends SimpleButton { } }//package
Section 305
//TestLevelButton (TestLevelButton) package { import contraption.menu.*; public dynamic class TestLevelButton extends DashboardButton { } }//package
Section 306
//tut1DrawWater (tut1DrawWater) package { import contraption.tutorials.*; public dynamic class tut1DrawWater extends AddedBlockBetweenWheelsOverlay { } }//package
Section 307
//tut1DrawWheel (tut1DrawWheel) package { import contraption.tutorials.*; public dynamic class tut1DrawWheel extends AddedBlockOverlay { } }//package
Section 308
//tut1Goal (tut1Goal) package { import contraption.tutorials.*; public dynamic class tut1Goal extends TutorialOverlay { } }//package
Section 309
//tut1PinkBall (tut1PinkBall) package { import contraption.tutorials.*; public dynamic class tut1PinkBall extends TutorialOverlay { } }//package
Section 310
//tut1PressStart (tut1PressStart) package { import contraption.tutorials.*; public dynamic class tut1PressStart extends PressStartOverlay { } }//package
Section 311
//tut1SelectWater (tut1SelectWater) package { import contraption.tutorials.*; public dynamic class tut1SelectWater extends HollowSelectedOverlay { } }//package
Section 312
//tut1SelectWheel (tut1SelectWheel) package { import contraption.tutorials.*; public dynamic class tut1SelectWheel extends WheelSelectedOverlay { } }//package
Section 313
//tut1Welcome (tut1Welcome) package { import contraption.tutorials.*; public dynamic class tut1Welcome extends TutorialOverlay { } }//package
Section 314
//tut1Workshop (tut1Workshop) package { import contraption.tutorials.*; public dynamic class tut1Workshop extends TutorialOverlay { } }//package
Section 315
//tut2DeleteFirstRod (tut2DeleteFirstRod) package { import contraption.tutorials.*; public dynamic class tut2DeleteFirstRod extends DeleteBlockOverlay { } }//package
Section 316
//tut2DeleteSecondRod (tut2DeleteSecondRod) package { import contraption.tutorials.*; public dynamic class tut2DeleteSecondRod extends DeleteBlockOverlay { } }//package
Section 317
//tut2FirstDrawWater (tut2FirstDrawWater) package { import contraption.tutorials.*; public dynamic class tut2FirstDrawWater extends AddedBlockBetweenWheelsOverlay { } }//package
Section 318
//tut2FirstSelectDelete (tut2FirstSelectDelete) package { import contraption.tutorials.*; public dynamic class tut2FirstSelectDelete extends DeleteSelectedOverlay { } }//package
Section 319
//tut2FirstSelectWater (tut2FirstSelectWater) package { import contraption.tutorials.*; public dynamic class tut2FirstSelectWater extends HollowSelectedOverlay { } }//package
Section 320
//tut2FirstStop (tut2FirstStop) package { import contraption.tutorials.*; public dynamic class tut2FirstStop extends PressStopOverlay { } }//package
Section 321
//tut2FirstTry (tut2FirstTry) package { import contraption.tutorials.*; public dynamic class tut2FirstTry extends PressStartOverlay { } }//package
Section 322
//tut2SecondDrawWater (tut2SecondDrawWater) package { import contraption.tutorials.*; public dynamic class tut2SecondDrawWater extends AddedBlockBetweenWheelsOverlay { } }//package
Section 323
//tut2SecondSelectDelete (tut2SecondSelectDelete) package { import contraption.tutorials.*; public dynamic class tut2SecondSelectDelete extends DeleteSelectedOverlay { } }//package
Section 324
//tut2SecondSelectWater (tut2SecondSelectWater) package { import contraption.tutorials.*; public dynamic class tut2SecondSelectWater extends HollowSelectedOverlay { } }//package
Section 325
//tut2SecondStop (tut2SecondStop) package { import contraption.tutorials.*; public dynamic class tut2SecondStop extends PressStopOverlay { } }//package
Section 326
//tut2SecondTry (tut2SecondTry) package { import contraption.tutorials.*; public dynamic class tut2SecondTry extends PressStartOverlay { } }//package
Section 327
//tut2ThirdTry (tut2ThirdTry) package { import contraption.tutorials.*; public dynamic class tut2ThirdTry extends PressStartOverlay { } }//package
Section 328
//tut2Welcome (tut2Welcome) package { import contraption.tutorials.*; public dynamic class tut2Welcome extends TutorialOverlay { } }//package
Section 329
//tut3Back (tut3Back) package { import contraption.tutorials.*; public dynamic class tut3Back extends TutorialOverlay { } }//package
Section 330
//tut3Delete (tut3Delete) package { import contraption.tutorials.*; public dynamic class tut3Delete extends TutorialOverlay { } }//package
Section 331
//tut3Goodbye (tut3Goodbye) package { import contraption.tutorials.*; public dynamic class tut3Goodbye extends TutorialOverlay { } }//package
Section 332
//tut3Move (tut3Move) package { import contraption.tutorials.*; public dynamic class tut3Move extends TutorialOverlay { } }//package
Section 333
//tut3NonPowerWheel (tut3NonPowerWheel) package { import contraption.tutorials.*; public dynamic class tut3NonPowerWheel extends TutorialOverlay { } }//package
Section 334
//tut3Save (tut3Save) package { import contraption.tutorials.*; public dynamic class tut3Save extends TutorialOverlay { } }//package
Section 335
//tut3Start (tut3Start) package { import contraption.tutorials.*; public dynamic class tut3Start extends TutorialOverlay { } }//package
Section 336
//tut3Water (tut3Water) package { import contraption.tutorials.*; public dynamic class tut3Water extends TutorialOverlay { } }//package
Section 337
//tut3Wheels (tut3Wheels) package { import contraption.tutorials.*; public dynamic class tut3Wheels extends TutorialOverlay { } }//package
Section 338
//tut3Wood (tut3Wood) package { import contraption.tutorials.*; public dynamic class tut3Wood extends TutorialOverlay { } }//package
Section 339
//tut3Zoom (tut3Zoom) package { import contraption.tutorials.*; public dynamic class tut3Zoom extends TutorialOverlay { } }//package
Section 340
//tutLocked (tutLocked) package { import contraption.tutorials.*; public dynamic class tutLocked extends TutorialOverlay { } }//package
Section 341
//TutorialNextButton (TutorialNextButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import contraption.tutorials.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class TutorialNextButton extends TutorialButton { public function TutorialNextButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = TutorialEvent.FINISHED_OVERLAY; buttonWidth = 56; buttonHeight = 42; } } }//package
Section 342
//UnPublishButton (UnPublishButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class UnPublishButton extends Button { public function UnPublishButton(){ addFrameScript(0, frame1); } function frame1(){ buttonWidth = 30; buttonHeight = 30; } } }//package
Section 343
//UpdateUserInfoButton (UpdateUserInfoButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class UpdateUserInfoButton extends Button { public function UpdateUserInfoButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.UPDATE_USER_INFO; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 344
//UpdateUserInfoSubmitButton (UpdateUserInfoSubmitButton) package { import flash.events.*; import contraption.menu.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.utils.*; import flash.system.*; import flash.text.*; import flash.media.*; import flash.ui.*; import flash.errors.*; import flash.external.*; import flash.accessibility.*; import flash.filters.*; public dynamic class UpdateUserInfoSubmitButton extends Button { public function UpdateUserInfoSubmitButton(){ addFrameScript(0, frame1); } function frame1(){ downEvent = MenuEvent.UPDATE_USER_INFO; buttonWidth = 116; buttonHeight = 42; } } }//package
Section 345
//ZoomInButton (ZoomInButton) package { import contraption.menu.*; public dynamic class ZoomInButton extends DashboardButton { } }//package
Section 346
//ZoomOutButton (ZoomOutButton) package { import contraption.menu.*; public dynamic class ZoomOutButton extends DashboardButton { } }//package

Library Items

Symbol 1 GraphicUsed by:2
Symbol 2 MovieClipUses:1Used by:7
Symbol 3 GraphicUsed by:4
Symbol 4 MovieClipUses:3Used by:7
Symbol 5 GraphicUsed by:6
Symbol 6 MovieClipUses:5Used by:7
Symbol 7 MovieClip {BubbleSceneChange} [BubbleSceneChange]Uses:2 4 6
Symbol 8 GraphicUsed by:25
Symbol 9 FontUsed by:10
Symbol 10 TextUses:9Used by:25
Symbol 11 GraphicUsed by:19
Symbol 12 GraphicUsed by:13
Symbol 13 MovieClipUses:12Used by:19
Symbol 14 GraphicUsed by:19
Symbol 15 GraphicUsed by:18
Symbol 16 TextUsed by:18
Symbol 17 GraphicUsed by:18
Symbol 18 MovieClipUses:15 16 17Used by:19
Symbol 19 MovieClipUses:11 13 14 18Used by:25
Symbol 20 GraphicUsed by:24
Symbol 21 FontUsed by:22 23 43
Symbol 22 TextUses:21Used by:24
Symbol 23 TextUses:21Used by:24
Symbol 24 ButtonUses:20 22 23Used by:25
Symbol 25 MovieClipUses:8 10 19 24Used by:26
Symbol 26 MovieClip {Splash} [Splash]Uses:25
Symbol 27 GraphicUsed by:28
Symbol 28 MovieClip {Border} [Border]Uses:27
Symbol 29 GraphicUsed by:30
Symbol 30 MovieClip {MenuBackground} [MenuBackground]Uses:29
Symbol 31 GraphicUsed by:35
Symbol 32 GraphicUsed by:35
Symbol 33 GraphicUsed by:35
Symbol 34 GraphicUsed by:35
Symbol 35 Button {ButtonBack} [ButtonBack]Uses:31 32 33 34Used by:38 40 53 55 57 59 61 190 204 206 218 222 224 228 234 288 469
Symbol 36 FontUsed by:37 39 52 54 56 58 60 201 203 205 217 221 223 227 230 233 238 241 242 255 257 259 261 287 392 468
Symbol 37 TextUses:36Used by:38
Symbol 38 MovieClip {MainMenuButton} [MainMenuButton]Uses:35 37Used by:41
Symbol 39 TextUses:36Used by:40 190
Symbol 40 MovieClip {PreviousMenuButton} [PreviousMenuButton]Uses:35 39Used by:41
Symbol 41 MovieClip {MenuTopButtons} [MenuTopButtons]Uses:38 40
Symbol 42 GraphicUsed by:50 51
Symbol 43 TextUses:21Used by:50
Symbol 44 FontUsed by:45 46
Symbol 45 TextUses:44Used by:50
Symbol 46 TextUses:44Used by:50
Symbol 47 FontUsed by:48
Symbol 48 TextUses:47Used by:49
Symbol 49 Button {FanCon_Link} [FanCon_Link]Uses:48Used by:50
Symbol 50 MovieClip {ModalMenuCloudMore} [ModalMenuCloudMore]Uses:42 43 45 46 49
Symbol 51 MovieClip {ModalMenuCloud} [ModalMenuCloud]Uses:42
Symbol 52 TextUses:36Used by:53
Symbol 53 MovieClip {NewUserButton} [NewUserButton]Uses:35 52
Symbol 54 TextUses:36Used by:55
Symbol 55 MovieClip {SmallSaveButton} [SmallSaveButton]Uses:35 54
Symbol 56 TextUses:36Used by:57
Symbol 57 MovieClip {LogInButton} [LogInButton]Uses:35 56
Symbol 58 TextUses:36Used by:59
Symbol 59 MovieClip {SmallCancelButton} [SmallCancelButton]Uses:35 58
Symbol 60 TextUses:36Used by:61
Symbol 61 MovieClip {UpdateUserInfoSubmitButton} [UpdateUserInfoSubmitButton]Uses:35 60
Symbol 62 GraphicUsed by:65
Symbol 63 GraphicUsed by:65
Symbol 64 GraphicUsed by:65 69
Symbol 65 Button {RightArrow} [RightArrow]Uses:62 63 64Used by:66
Symbol 66 MovieClip {NextPageButton} [NextPageButton]Uses:65
Symbol 67 GraphicUsed by:69
Symbol 68 GraphicUsed by:69
Symbol 69 Button {LeftArrow} [LeftArrow]Uses:67 68 64Used by:70
Symbol 70 MovieClip {PreviousPageButton} [PreviousPageButton]Uses:69
Symbol 71 GraphicUsed by:72 220 226
Symbol 72 MovieClip {DefaultMousePointer} [DefaultMousePointer]Uses:71
Symbol 73 GraphicUsed by:74
Symbol 74 MovieClip {BuildingMousePointer} [BuildingMousePointer]Uses:73
Symbol 75 GraphicUsed by:78
Symbol 76 FontUsed by:77 188 214 215 252 334 335 338 339 342 343 346 349 350 353 354 357 358 361 364 365 368 369 374 377 378 381 382 383 386 387 396 397 398 401 402 405 408 416 417 420 421 424 425 426 429 430 433 436 439 442 445 448 451 454 457 460 463 466
Symbol 77 TextUses:76Used by:78
Symbol 78 MovieClip {Level4Overlay} [Level4Overlay]Uses:75 77
Symbol 79 GraphicUsed by:80
Symbol 80 MovieClip {DashBackground} [DashBackground]Uses:79Used by:177
Symbol 81 GraphicUsed by:87 89
Symbol 82 GraphicUsed by:83 94 97 104 122 126 130 134 152 154 156 158 161 163
Symbol 83 MovieClipUses:82Used by:87 89 94 97 104 122 126 130 134 152 154 156 158 161 163
Symbol 84 GraphicUsed by:87
Symbol 85 GraphicUsed by:87 89
Symbol 86 GraphicUsed by:87 89
Symbol 87 Button {ZoomInButton} [ZoomInButton]Uses:81 83 84 85 86Used by:90
Symbol 88 GraphicUsed by:89
Symbol 89 Button {ZoomOutButton} [ZoomOutButton]Uses:81 83 88 85 86Used by:90
Symbol 90 MovieClip {Dashboard_fla.ZoomButtons_5} [Dashboard_fla.ZoomButtons_5]Uses:87 89Used by:177
Symbol 91 GraphicUsed by:92 94
Symbol 92 MovieClipUses:91Used by:94
Symbol 93 GraphicUsed by:94 97 104 122 126 130 134 152 154 156 158 161 163
Symbol 94 Button {DeleteButton} [DeleteButton]Uses:91 92 83 93 82Used by:150
Symbol 95 GraphicUsed by:96 97
Symbol 96 MovieClipUses:95Used by:97
Symbol 97 Button {MoveButton} [MoveButton]Uses:95 96 83 93 82Used by:150
Symbol 98 GraphicUsed by:99 104
Symbol 99 MovieClipUses:98Used by:102 103
Symbol 100 GraphicUsed by:101 104
Symbol 101 MovieClipUses:100Used by:102 103 493
Symbol 102 MovieClipUses:99 101Used by:104
Symbol 103 MovieClipUses:101 99Used by:104
Symbol 104 Button {SolidRodButton} [SolidRodButton]Uses:102 103 83 93 98 100 82Used by:150
Symbol 105 GraphicUsed by:106 122
Symbol 106 MovieClipUses:105Used by:122
Symbol 107 GraphicUsed by:108
Symbol 108 MovieClipUses:107Used by:109
Symbol 109 MovieClipUses:108Used by:110 310
Symbol 110 MovieClip {Dashboard_fla.Stream_22} [Dashboard_fla.Stream_22]Uses:109Used by:121
Symbol 111 ShapeTweeningUsed by:120
Symbol 112 ShapeTweeningUsed by:120
Symbol 113 ShapeTweeningUsed by:120
Symbol 114 ShapeTweeningUsed by:120
Symbol 115 ShapeTweeningUsed by:120
Symbol 116 ShapeTweeningUsed by:120
Symbol 117 ShapeTweeningUsed by:120
Symbol 118 ShapeTweeningUsed by:120
Symbol 119 GraphicUsed by:120
Symbol 120 MovieClipUses:111 112 113 114 115 116 117 118 119Used by:121
Symbol 121 MovieClip {HollowRod} [HollowRod]Uses:110 120Used by:122
Symbol 122 Button {HollowRodButton} [HollowRodButton]Uses:106 121 83 93 105 82Used by:150
Symbol 123 GraphicUsed by:124 126
Symbol 124 MovieClipUses:123Used by:125 126
Symbol 125 MovieClipUses:124Used by:126
Symbol 126 Button {NonPoweredWheelButton} [NonPoweredWheelButton]Uses:124 125 83 93 123 82Used by:150
Symbol 127 GraphicUsed by:128 130
Symbol 128 MovieClip {CounterClockwiseWheel} [CounterClockwiseWheel]Uses:127Used by:129 130
Symbol 129 MovieClipUses:128Used by:130
Symbol 130 Button {CounterClockwiseWheelButton} [CounterClockwiseWheelButton]Uses:128 129 83 93 127 82Used by:150
Symbol 131 GraphicUsed by:132 133 134
Symbol 132 MovieClip {ClockwiseWheel} [ClockwiseWheel]Uses:131Used by:134
Symbol 133 MovieClipUses:131Used by:134
Symbol 134 Button {ClockwiseWheelButton} [ClockwiseWheelButton]Uses:132 133 83 93 131 82Used by:150
Symbol 135 GraphicUsed by:136
Symbol 136 MovieClipUses:135Used by:137
Symbol 137 MovieClip {StopButtonPing} [StopButtonPing]Uses:136Used by:149
Symbol 138 GraphicUsed by:144 174
Symbol 139 GraphicUsed by:140 144 148 165 174
Symbol 140 MovieClipUses:139Used by:144 148 165 174
Symbol 141 FontUsed by:142 146 160 164 173
Symbol 142 TextUses:141Used by:144
Symbol 143 GraphicUsed by:144 174
Symbol 144 Button {StopButton} [StopButton]Uses:138 140 142 143 139Used by:149
Symbol 145 GraphicUsed by:148 165
Symbol 146 TextUses:141Used by:148
Symbol 147 GraphicUsed by:148 165
Symbol 148 Button {GoButton} [GoButton]Uses:145 140 146 147 139Used by:149
Symbol 149 MovieClip {Dashboard_fla.GoStopButtons_35} [Dashboard_fla.GoStopButtons_35]Uses:137 144 148Used by:150
Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9]Uses:94 97 104 122 126 130 134 149Used by:177
Symbol 151 GraphicUsed by:152
Symbol 152 Button {DynamicSquareButton} [DynamicSquareButton]Uses:151 83 93 82Used by:166
Symbol 153 GraphicUsed by:154
Symbol 154 Button {DynamicCircleButton} [DynamicCircleButton]Uses:153 83 93 82Used by:166
Symbol 155 GraphicUsed by:156
Symbol 156 Button {StaticSquareButton} [StaticSquareButton]Uses:155 83 93 82Used by:166
Symbol 157 GraphicUsed by:158
Symbol 158 Button {StaticCircleButton} [StaticCircleButton]Uses:157 83 93 82Used by:166
Symbol 159 GraphicUsed by:161
Symbol 160 TextUses:141Used by:161 163
Symbol 161 Button {GoalSquareButton} [GoalSquareButton]Uses:159 160 83 93 82Used by:166
Symbol 162 GraphicUsed by:163
Symbol 163 Button {GoalCircleButton} [GoalCircleButton]Uses:162 160 83 93 82Used by:166
Symbol 164 TextUses:141Used by:165
Symbol 165 Button {TestLevelButton} [TestLevelButton]Uses:145 140 164 147 139Used by:166
Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41]Uses:152 154 156 158 161 163 165Used by:177
Symbol 167 GraphicUsed by:170
Symbol 168 GraphicUsed by:170
Symbol 169 GraphicUsed by:170 172
Symbol 170 Button {BackButton} [BackButton]Uses:167 168 169Used by:177
Symbol 171 GraphicUsed by:172
Symbol 172 Button {SaveButton} [SaveButton]Uses:171 169Used by:177
Symbol 173 TextUses:141Used by:174
Symbol 174 Button {BackTestButton} [BackTestButton]Uses:138 140 173 143 139Used by:177
Symbol 175 FontUsed by:176
Symbol 176 EditableTextUses:175Used by:177
Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3]Uses:80 90 150 166 170 172 174 176Used by:181
Symbol 178 GraphicUsed by:180
Symbol 179 GraphicUsed by:180
Symbol 180 ButtonUses:178 179Used by:181
Symbol 181 MovieClip {Expander} [Expander]Uses:177 180Used by:182
Symbol 182 MovieClip {DashboardImpl} [DashboardImpl]Uses:181
Symbol 183 MovieClip {Clouds} [Clouds]
Symbol 184 GraphicUsed by:189
Symbol 185 FontUsed by:186
Symbol 186 TextUses:185Used by:189
Symbol 187 GraphicUsed by:189
Symbol 188 TextUses:76Used by:189
Symbol 189 MovieClip {BuyGameButton} [BuyGameButton]Uses:184 186 187 188
Symbol 190 MovieClip {SmallBackButton} [SmallBackButton]Uses:35 39
Symbol 191 GraphicUsed by:193
Symbol 192 GraphicUsed by:193 195
Symbol 193 Button {SoundOnButton} [SoundOnButton]Uses:191 192
Symbol 194 GraphicUsed by:195 329
Symbol 195 Button {SoundOffButton} [SoundOffButton]Uses:192 194
Symbol 196 GraphicUsed by:200 391
Symbol 197 GraphicUsed by:200
Symbol 198 GraphicUsed by:200
Symbol 199 GraphicUsed by:200
Symbol 200 ButtonUses:196 197 198 199Used by:202 262
Symbol 201 TextUses:36Used by:202
Symbol 202 MovieClip {NextLevelButton} [NextLevelButton]Uses:200 201
Symbol 203 TextUses:36Used by:204
Symbol 204 MovieClip {BackToMenuButton} [BackToMenuButton]Uses:35 203
Symbol 205 TextUses:36Used by:206
Symbol 206 MovieClip {ResetPasswordButton} [ResetPasswordButton]Uses:35 205
Symbol 207 GraphicUsed by:208
Symbol 208 MovieClip {ButtonMousePointer} [ButtonMousePointer]Uses:207
Symbol 209 GraphicUsed by:210
Symbol 210 MovieClip {DragActingMousePointer} [DragActingMousePointer]Uses:209
Symbol 211 GraphicUsed by:212
Symbol 212 MovieClip {DragMousePointer} [DragMousePointer]Uses:211
Symbol 213 GraphicUsed by:216
Symbol 214 TextUses:76Used by:216
Symbol 215 TextUses:76Used by:216
Symbol 216 MovieClip {LinkedInOverlay} [LinkedInOverlay]Uses:213 214 215
Symbol 217 TextUses:36Used by:218
Symbol 218 MovieClip {ContinueButton} [ContinueButton]Uses:35 217
Symbol 219 GraphicUsed by:220
Symbol 220 MovieClip {DeleteMousePointer} [DeleteMousePointer]Uses:71 219
Symbol 221 TextUses:36Used by:222
Symbol 222 MovieClip {SavedLevelsButton} [SavedLevelsButton]Uses:35 221
Symbol 223 TextUses:36Used by:224
Symbol 224 MovieClip {SavedContraptionsButton} [SavedContraptionsButton]Uses:35 223
Symbol 225 GraphicUsed by:226
Symbol 226 MovieClip {MoveMousePointer} [MoveMousePointer]Uses:71 225
Symbol 227 TextUses:36Used by:228
Symbol 228 MovieClip {UpdateUserInfoButton} [UpdateUserInfoButton]Uses:35 227
Symbol 229 GraphicUsed by:232
Symbol 230 TextUses:36Used by:232
Symbol 231 GraphicUsed by:232
Symbol 232 MovieClip {BuyMenuBackground} [BuyMenuBackground]Uses:229 230 231
Symbol 233 TextUses:36Used by:234
Symbol 234 MovieClip {SkipTutorialButton} [SkipTutorialButton]Uses:35 233
Symbol 235 GraphicUsed by:237
Symbol 236 GraphicUsed by:237
Symbol 237 ButtonUses:235 236Used by:239
Symbol 238 TextUses:36Used by:239
Symbol 239 MovieClip {LearnToPlayButton} [LearnToPlayButton]Uses:237 238
Symbol 240 GraphicUsed by:244
Symbol 241 TextUses:36Used by:244
Symbol 242 TextUses:36Used by:244
Symbol 243 GraphicUsed by:244
Symbol 244 Button {iphone} [iphone]Uses:240 241 242 243Used by:245
Symbol 245 Button {playOnIPhone} [playOnIPhone]Uses:244
Symbol 246 GraphicUsed by:247
Symbol 247 MovieClip {StartHere} [StartHere]Uses:246
Symbol 248 GraphicUsed by:250
Symbol 249 GraphicUsed by:250
Symbol 250 Button {FC_Logo_Button} [FC_Logo_Button]Uses:248 249
Symbol 251 GraphicUsed by:253
Symbol 252 TextUses:76Used by:253
Symbol 253 Button {SW_Button} [SW_Button]Uses:251 252
Symbol 254 GraphicUsed by:258
Symbol 255 TextUses:36Used by:258
Symbol 256 GraphicUsed by:258
Symbol 257 TextUses:36Used by:258
Symbol 258 Button {linkto} [linkto]Uses:254 255 256 257
Symbol 259 TextUses:36Used by:260
Symbol 260 Button {Play_more_games} [Play_more_games]Uses:259
Symbol 261 TextUses:36Used by:262
Symbol 262 MovieClip {ContinueTutorialButton} [ContinueTutorialButton]Uses:200 261
Symbol 263 GraphicUsed by:273 485
Symbol 264 GraphicUsed by:273 485
Symbol 265 GraphicUsed by:273 485
Symbol 266 GraphicUsed by:273 485
Symbol 267 GraphicUsed by:273 485
Symbol 268 GraphicUsed by:273 485
Symbol 269 GraphicUsed by:273 485
Symbol 270 GraphicUsed by:273 485
Symbol 271 GraphicUsed by:273 485
Symbol 272 GraphicUsed by:273 485
Symbol 273 MovieClip {SavedLevelBackground} [SavedLevelBackground]Uses:263 264 265 266 267 268 269 270 271 272
Symbol 274 GraphicUsed by:275 285
Symbol 275 MovieClip {DeleteDesignButton} [DeleteDesignButton]Uses:274
Symbol 276 GraphicUsed by:277 286
Symbol 277 MovieClip {PlayDesignSmallButton} [PlayDesignSmallButton]Uses:276
Symbol 278 GraphicUsed by:279 280
Symbol 279 MovieClip {LinkDesignButton} [LinkDesignButton]Uses:278
Symbol 280 MovieClip {LinkLevelButton} [LinkLevelButton]Uses:278
Symbol 281 GraphicUsed by:282
Symbol 282 MovieClip {SolutionsButton} [SolutionsButton]Uses:281
Symbol 283 GraphicUsed by:284
Symbol 284 MovieClip {EditLevelButton} [EditLevelButton]Uses:283
Symbol 285 MovieClip {DeleteLevelButton} [DeleteLevelButton]Uses:274
Symbol 286 MovieClip {PlayLevelSmallButton} [PlayLevelSmallButton]Uses:276
Symbol 287 TextUses:36Used by:288
Symbol 288 MovieClip {PlayGameButton} [PlayGameButton]Uses:35 287
Symbol 289 GraphicUsed by:293
Symbol 290 GraphicUsed by:293
Symbol 291 GraphicUsed by:293
Symbol 292 GraphicUsed by:293
Symbol 293 MovieClip {ArtAssets_fla.MultiCloud_103} [ArtAssets_fla.MultiCloud_103]Uses:289 290 291 292Used by:294
Symbol 294 MovieClip {BobbingCloud} [BobbingCloud]Uses:293
Symbol 295 GraphicUsed by:296
Symbol 296 MovieClipUses:295Used by:297
Symbol 297 MovieClipUses:296Used by:298
Symbol 298 MovieClip {contraption_objects_fla.StreamBG_9} [contraption_objects_fla.StreamBG_9]Uses:297Used by:309
Symbol 299 ShapeTweeningUsed by:308
Symbol 300 ShapeTweeningUsed by:308
Symbol 301 ShapeTweeningUsed by:308
Symbol 302 ShapeTweeningUsed by:308
Symbol 303 ShapeTweeningUsed by:308
Symbol 304 ShapeTweeningUsed by:308
Symbol 305 ShapeTweeningUsed by:308
Symbol 306 ShapeTweeningUsed by:308
Symbol 307 GraphicUsed by:308
Symbol 308 MovieClipUses:299 300 301 302 303 304 305 306 307Used by:309
Symbol 309 MovieClip {HollowRodGraphicBG} [HollowRodGraphicBG]Uses:298 308
Symbol 310 MovieClip {contraption_objects_fla.Stream_14} [contraption_objects_fla.Stream_14]Uses:109Used by:321
Symbol 311 ShapeTweeningUsed by:320
Symbol 312 ShapeTweeningUsed by:320
Symbol 313 ShapeTweeningUsed by:320
Symbol 314 ShapeTweeningUsed by:320
Symbol 315 ShapeTweeningUsed by:320
Symbol 316 ShapeTweeningUsed by:320
Symbol 317 ShapeTweeningUsed by:320
Symbol 318 ShapeTweeningUsed by:320
Symbol 319 GraphicUsed by:320
Symbol 320 MovieClipUses:311 312 313 314 315 316 317 318 319Used by:321
Symbol 321 MovieClip {HollowRodGraphic} [HollowRodGraphic]Uses:310 320
Symbol 322 GraphicUsed by:323
Symbol 323 MovieClip {ClockwiseWheelGraphic} [ClockwiseWheelGraphic]Uses:322Used by:414
Symbol 324 GraphicUsed by:325
Symbol 325 MovieClip {NonPoweredWheelGraphic} [NonPoweredWheelGraphic]Uses:324
Symbol 326 GraphicUsed by:327
Symbol 327 MovieClip {CounterClockwiseWheelGraphic} [CounterClockwiseWheelGraphic]Uses:326
Symbol 328 GraphicUsed by:329 330
Symbol 329 Button {GraphicsOffButton} [GraphicsOffButton]Uses:328 194
Symbol 330 Button {GraphicsOnButton} [GraphicsOnButton]Uses:328
Symbol 331 GraphicUsed by:336
Symbol 332 GraphicUsed by:333
Symbol 333 MovieClipUses:332Used by:336 340 347 362 366 384 427
Symbol 334 TextUses:76Used by:336
Symbol 335 TextUses:76Used by:336
Symbol 336 MovieClip {tut2FirstDrawWater} [tut2FirstDrawWater]Uses:331 333 334 335
Symbol 337 GraphicUsed by:340
Symbol 338 TextUses:76Used by:340
Symbol 339 TextUses:76Used by:340
Symbol 340 MovieClip {tut2DeleteSecondRod} [tut2DeleteSecondRod]Uses:337 333 338 339
Symbol 341 GraphicUsed by:344
Symbol 342 TextUses:76Used by:344
Symbol 343 TextUses:76Used by:344
Symbol 344 MovieClip {tut2FirstStop} [tut2FirstStop]Uses:341 342 343
Symbol 345 GraphicUsed by:347
Symbol 346 TextUses:76Used by:347
Symbol 347 MovieClip {tut2FirstSelectWater} [tut2FirstSelectWater]Uses:345 333 346
Symbol 348 GraphicUsed by:351
Symbol 349 TextUses:76Used by:351
Symbol 350 TextUses:76Used by:351
Symbol 351 MovieClip {tut2FirstSelectDelete} [tut2FirstSelectDelete]Uses:348 349 350
Symbol 352 GraphicUsed by:355
Symbol 353 TextUses:76Used by:355
Symbol 354 TextUses:76Used by:355
Symbol 355 MovieClip {tut2ThirdTry} [tut2ThirdTry]Uses:352 353 354
Symbol 356 GraphicUsed by:359
Symbol 357 TextUses:76Used by:359
Symbol 358 TextUses:76Used by:359
Symbol 359 MovieClip {tut2SecondTry} [tut2SecondTry]Uses:356 357 358
Symbol 360 GraphicUsed by:362
Symbol 361 TextUses:76Used by:362
Symbol 362 MovieClip {tut2SecondSelectWater} [tut2SecondSelectWater]Uses:360 333 361
Symbol 363 GraphicUsed by:366
Symbol 364 TextUses:76Used by:366
Symbol 365 TextUses:76Used by:366
Symbol 366 MovieClip {tut2DeleteFirstRod} [tut2DeleteFirstRod]Uses:363 333 364 365
Symbol 367 GraphicUsed by:370
Symbol 368 TextUses:76Used by:370
Symbol 369 TextUses:76Used by:370
Symbol 370 MovieClip {tut2FirstTry} [tut2FirstTry]Uses:367 368 369
Symbol 371 GraphicUsed by:372
Symbol 372 MovieClip {tutLocked} [tutLocked]Uses:371
Symbol 373 GraphicUsed by:375
Symbol 374 TextUses:76Used by:375
Symbol 375 MovieClip {tut2SecondSelectDelete} [tut2SecondSelectDelete]Uses:373 374
Symbol 376 GraphicUsed by:379
Symbol 377 TextUses:76Used by:379
Symbol 378 TextUses:76Used by:379
Symbol 379 MovieClip {tut2SecondStop} [tut2SecondStop]Uses:376 377 378
Symbol 380 GraphicUsed by:384
Symbol 381 TextUses:76Used by:384
Symbol 382 TextUses:76Used by:384
Symbol 383 TextUses:76Used by:384
Symbol 384 MovieClip {tut2SecondDrawWater} [tut2SecondDrawWater]Uses:380 333 381 382 383
Symbol 385 GraphicUsed by:394
Symbol 386 TextUses:76Used by:394
Symbol 387 TextUses:76Used by:394
Symbol 388 GraphicUsed by:391
Symbol 389 GraphicUsed by:391
Symbol 390 GraphicUsed by:391
Symbol 391 ButtonUses:196 388 389 390Used by:393
Symbol 392 TextUses:36Used by:393
Symbol 393 MovieClip {TutorialNextButton} [TutorialNextButton]Uses:391 392Used by:394 403 406 418 422 437 440 443 446 449 452 455 458 461 464 467
Symbol 394 MovieClip {tut2Welcome} [tut2Welcome]Uses:385 386 387 393
Symbol 395 GraphicUsed by:399
Symbol 396 TextUses:76Used by:399
Symbol 397 TextUses:76Used by:399
Symbol 398 TextUses:76Used by:399
Symbol 399 MovieClip {tut1SelectWater} [tut1SelectWater]Uses:395 396 397 398
Symbol 400 GraphicUsed by:403
Symbol 401 TextUses:76Used by:403
Symbol 402 TextUses:76Used by:403
Symbol 403 MovieClip {tut1Welcome} [tut1Welcome]Uses:400 401 402 393
Symbol 404 GraphicUsed by:406
Symbol 405 TextUses:76Used by:406
Symbol 406 MovieClip {tut1Goal} [tut1Goal]Uses:404 405 393
Symbol 407 GraphicUsed by:414
Symbol 408 TextUses:76Used by:414
Symbol 409 GraphicUsed by:414
Symbol 410 GraphicUsed by:414
Symbol 411 GraphicUsed by:414
Symbol 412 GraphicUsed by:414
Symbol 413 GraphicUsed by:414
Symbol 414 MovieClip {tut1DrawWater} [tut1DrawWater]Uses:407 408 409 410 323 411 412 413
Symbol 415 GraphicUsed by:418
Symbol 416 TextUses:76Used by:418
Symbol 417 TextUses:76Used by:418
Symbol 418 MovieClip {tut1Workshop} [tut1Workshop]Uses:415 416 417 393
Symbol 419 GraphicUsed by:422
Symbol 420 TextUses:76Used by:422
Symbol 421 TextUses:76Used by:422
Symbol 422 MovieClip {tut1PinkBall} [tut1PinkBall]Uses:419 420 421 393
Symbol 423 GraphicUsed by:427
Symbol 424 TextUses:76Used by:427
Symbol 425 TextUses:76Used by:427
Symbol 426 TextUses:76Used by:427
Symbol 427 MovieClip {tut1PressStart} [tut1PressStart]Uses:423 333 424 425 426
Symbol 428 GraphicUsed by:431
Symbol 429 TextUses:76Used by:431
Symbol 430 TextUses:76Used by:431
Symbol 431 MovieClip {tut1SelectWheel} [tut1SelectWheel]Uses:428 429 430
Symbol 432 GraphicUsed by:434
Symbol 433 TextUses:76Used by:434
Symbol 434 MovieClip {tut1DrawWheel} [tut1DrawWheel]Uses:432 433
Symbol 435 GraphicUsed by:437
Symbol 436 TextUses:76Used by:437
Symbol 437 MovieClip {tut3Move} [tut3Move]Uses:435 436 393
Symbol 438 GraphicUsed by:440
Symbol 439 TextUses:76Used by:440
Symbol 440 MovieClip {tut3Water} [tut3Water]Uses:438 439 393
Symbol 441 GraphicUsed by:443
Symbol 442 TextUses:76Used by:443
Symbol 443 MovieClip {tut3Goodbye} [tut3Goodbye]Uses:441 442 393
Symbol 444 GraphicUsed by:446
Symbol 445 TextUses:76Used by:446
Symbol 446 MovieClip {tut3Save} [tut3Save]Uses:444 445 393
Symbol 447 GraphicUsed by:449
Symbol 448 TextUses:76Used by:449
Symbol 449 MovieClip {tut3Wood} [tut3Wood]Uses:447 448 393
Symbol 450 GraphicUsed by:452
Symbol 451 TextUses:76Used by:452
Symbol 452 MovieClip {tut3Back} [tut3Back]Uses:450 451 393
Symbol 453 GraphicUsed by:455
Symbol 454 TextUses:76Used by:455
Symbol 455 MovieClip {tut3NonPowerWheel} [tut3NonPowerWheel]Uses:453 454 393
Symbol 456 GraphicUsed by:458
Symbol 457 TextUses:76Used by:458
Symbol 458 MovieClip {tut3Zoom} [tut3Zoom]Uses:456 457 393
Symbol 459 GraphicUsed by:461
Symbol 460 TextUses:76Used by:461
Symbol 461 MovieClip {tut3Delete} [tut3Delete]Uses:459 460 393
Symbol 462 GraphicUsed by:464
Symbol 463 TextUses:76Used by:464
Symbol 464 MovieClip {tut3Wheels} [tut3Wheels]Uses:462 463 393
Symbol 465 GraphicUsed by:467
Symbol 466 TextUses:76Used by:467
Symbol 467 MovieClip {tut3Start} [tut3Start]Uses:465 466 393
Symbol 468 TextUses:36Used by:469
Symbol 469 MovieClip {LogOutButton} [LogOutButton]Uses:35 468
Symbol 470 GraphicUsed by:471
Symbol 471 MovieClipUses:470Used by:478 484
Symbol 472 GraphicUsed by:473 478
Symbol 473 MovieClipUses:472Used by:478
Symbol 474 GraphicUsed by:475 478
Symbol 475 MovieClipUses:474Used by:478
Symbol 476 GraphicUsed by:477 478 484
Symbol 477 MovieClipUses:476Used by:478 484
Symbol 478 Button {LevelCircleRestricted} [LevelCircleRestricted]Uses:471 473 475 477 476 472 474
Symbol 479 GraphicUsed by:480
Symbol 480 MovieClipUses:479Used by:483
Symbol 481 GraphicUsed by:482 483
Symbol 482 MovieClipUses:481Used by:483
Symbol 483 Button {LevelCircleChecked} [LevelCircleChecked]Uses:480 482 481
Symbol 484 Button {LevelCircle} [LevelCircle]Uses:471 477 476
Symbol 485 MovieClip {SavedLevelBackgroundMask} [SavedLevelBackgroundMask]Uses:263 264 265 266 267 268 269 270 271 272
Symbol 486 GraphicUsed by:487
Symbol 487 MovieClip {DoPublishButton} [DoPublishButton]Uses:486
Symbol 488 GraphicUsed by:489
Symbol 489 MovieClip {UnPublishButton} [UnPublishButton]Uses:488
Symbol 490 GraphicUsed by:491
Symbol 491 MovieClipUses:490Used by:493
Symbol 492 GraphicUsed by:493
Symbol 493 MovieClip {SolidRodGraphic} [SolidRodGraphic]Uses:491 492 101
Symbol 494 GraphicUsed by:495
Symbol 495 MovieClip {SolidRodGraphicBG} [SolidRodGraphicBG]Uses:494
Symbol 496 Font {Contraption_LAWS_FONT}

Instance Names

"zoomInButton"Symbol 90 MovieClip {Dashboard_fla.ZoomButtons_5} [Dashboard_fla.ZoomButtons_5] Frame 1Symbol 87 Button {ZoomInButton} [ZoomInButton]
"zoomOutButton"Symbol 90 MovieClip {Dashboard_fla.ZoomButtons_5} [Dashboard_fla.ZoomButtons_5] Frame 1Symbol 89 Button {ZoomOutButton} [ZoomOutButton]
"dropBouncing"Symbol 110 MovieClip {Dashboard_fla.Stream_22} [Dashboard_fla.Stream_22] Frame 1Symbol 109 MovieClip
"one"Symbol 121 MovieClip {HollowRod} [HollowRod] Frame 1Symbol 110 MovieClip {Dashboard_fla.Stream_22} [Dashboard_fla.Stream_22]
"stopButtonPing"Symbol 149 MovieClip {Dashboard_fla.GoStopButtons_35} [Dashboard_fla.GoStopButtons_35] Frame 1Symbol 137 MovieClip {StopButtonPing} [StopButtonPing]
"stopButton"Symbol 149 MovieClip {Dashboard_fla.GoStopButtons_35} [Dashboard_fla.GoStopButtons_35] Frame 1Symbol 144 Button {StopButton} [StopButton]
"goButton"Symbol 149 MovieClip {Dashboard_fla.GoStopButtons_35} [Dashboard_fla.GoStopButtons_35] Frame 1Symbol 148 Button {GoButton} [GoButton]
"deleteButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 94 Button {DeleteButton} [DeleteButton]
"moveButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 97 Button {MoveButton} [MoveButton]
"solidRodButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 104 Button {SolidRodButton} [SolidRodButton]
"hollowRodButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 122 Button {HollowRodButton} [HollowRodButton]
"npWheelButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 126 Button {NonPoweredWheelButton} [NonPoweredWheelButton]
"ccwWheelButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 130 Button {CounterClockwiseWheelButton} [CounterClockwiseWheelButton]
"cwWheelButton"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 134 Button {ClockwiseWheelButton} [ClockwiseWheelButton]
"goStopButtons"Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9] Frame 1Symbol 149 MovieClip {Dashboard_fla.GoStopButtons_35} [Dashboard_fla.GoStopButtons_35]
"dynamicSquareButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 152 Button {DynamicSquareButton} [DynamicSquareButton]
"dynamicCircleButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 154 Button {DynamicCircleButton} [DynamicCircleButton]
"staticSquareButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 156 Button {StaticSquareButton} [StaticSquareButton]
"staticCircleButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 158 Button {StaticCircleButton} [StaticCircleButton]
"goalSquareButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 161 Button {GoalSquareButton} [GoalSquareButton]
"goalCircleButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 163 Button {GoalCircleButton} [GoalCircleButton]
"testLevelButton"Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41] Frame 1Symbol 165 Button {TestLevelButton} [TestLevelButton]
"zoomButtons"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 90 MovieClip {Dashboard_fla.ZoomButtons_5} [Dashboard_fla.ZoomButtons_5]
"contraptionButtons"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 150 MovieClip {Dashboard_fla.ContraptionButtons_9} [Dashboard_fla.ContraptionButtons_9]
"levelButtons"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 166 MovieClip {Dashboard_fla.LevelButtons_41} [Dashboard_fla.LevelButtons_41]
"backButton"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 170 Button {BackButton} [BackButton]
"saveButton"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 172 Button {SaveButton} [SaveButton]
"backTestButton"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 174 Button {BackTestButton} [BackTestButton]
"tooltip"Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3] Frame 1Symbol 176 EditableText
"dash"Symbol 181 MovieClip {Expander} [Expander] Frame 1Symbol 177 MovieClip {Dashboard_fla.Buttons_3} [Dashboard_fla.Buttons_3]
"expandButton"Symbol 181 MovieClip {Expander} [Expander] Frame 1Symbol 180 Button
"dropBouncing"Symbol 298 MovieClip {contraption_objects_fla.StreamBG_9} [contraption_objects_fla.StreamBG_9] Frame 1Symbol 297 MovieClip
"four"Symbol 309 MovieClip {HollowRodGraphicBG} [HollowRodGraphicBG] Frame 1Symbol 298 MovieClip {contraption_objects_fla.StreamBG_9} [contraption_objects_fla.StreamBG_9]
"three"Symbol 309 MovieClip {HollowRodGraphicBG} [HollowRodGraphicBG] Frame 1Symbol 298 MovieClip {contraption_objects_fla.StreamBG_9} [contraption_objects_fla.StreamBG_9]
"two"Symbol 309 MovieClip {HollowRodGraphicBG} [HollowRodGraphicBG] Frame 1Symbol 298 MovieClip {contraption_objects_fla.StreamBG_9} [contraption_objects_fla.StreamBG_9]
"one"Symbol 309 MovieClip {HollowRodGraphicBG} [HollowRodGraphicBG] Frame 1Symbol 298 MovieClip {contraption_objects_fla.StreamBG_9} [contraption_objects_fla.StreamBG_9]
"dropBouncing"Symbol 310 MovieClip {contraption_objects_fla.Stream_14} [contraption_objects_fla.Stream_14] Frame 1Symbol 109 MovieClip
"four"Symbol 321 MovieClip {HollowRodGraphic} [HollowRodGraphic] Frame 1Symbol 310 MovieClip {contraption_objects_fla.Stream_14} [contraption_objects_fla.Stream_14]
"three"Symbol 321 MovieClip {HollowRodGraphic} [HollowRodGraphic] Frame 1Symbol 310 MovieClip {contraption_objects_fla.Stream_14} [contraption_objects_fla.Stream_14]
"two"Symbol 321 MovieClip {HollowRodGraphic} [HollowRodGraphic] Frame 1Symbol 310 MovieClip {contraption_objects_fla.Stream_14} [contraption_objects_fla.Stream_14]
"one"Symbol 321 MovieClip {HollowRodGraphic} [HollowRodGraphic] Frame 1Symbol 310 MovieClip {contraption_objects_fla.Stream_14} [contraption_objects_fla.Stream_14]

Special Tags

FileAttributes (69)Timeline Frame 1Access network only, Metadata present, AS3.
SWFMetaData (77)Timeline Frame 1459 bytes "<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'><rdf:Description rdf:about='' xmlns ..."
ScriptLimits (65)Timeline Frame 1MaxRecursionDepth: 1000, ScriptTimeout: 60 seconds
ExportAssets (56)Timeline Frame 1Symbol 7 as "BubbleSceneChange"
ExportAssets (56)Timeline Frame 1Symbol 26 as "Splash"
ExportAssets (56)Timeline Frame 1Symbol 28 as "Border"
ExportAssets (56)Timeline Frame 1Symbol 30 as "MenuBackground"
ExportAssets (56)Timeline Frame 1Symbol 41 as "MenuTopButtons"
ExportAssets (56)Timeline Frame 1Symbol 50 as "ModalMenuCloudMore"
ExportAssets (56)Timeline Frame 1Symbol 51 as "ModalMenuCloud"
ExportAssets (56)Timeline Frame 1Symbol 53 as "NewUserButton"
ExportAssets (56)Timeline Frame 1Symbol 55 as "SmallSaveButton"
ExportAssets (56)Timeline Frame 1Symbol 57 as "LogInButton"
ExportAssets (56)Timeline Frame 1Symbol 59 as "SmallCancelButton"
ExportAssets (56)Timeline Frame 1Symbol 61 as "UpdateUserInfoSubmitButton"
ExportAssets (56)Timeline Frame 1Symbol 66 as "NextPageButton"
ExportAssets (56)Timeline Frame 1Symbol 70 as "PreviousPageButton"
ExportAssets (56)Timeline Frame 1Symbol 72 as "DefaultMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 74 as "BuildingMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 78 as "Level4Overlay"
ExportAssets (56)Timeline Frame 1Symbol 182 as "DashboardImpl"
ExportAssets (56)Timeline Frame 1Symbol 183 as "Clouds"
ExportAssets (56)Timeline Frame 1Symbol 189 as "BuyGameButton"
ExportAssets (56)Timeline Frame 1Symbol 49 as "FanCon_Link"
ExportAssets (56)Timeline Frame 1Symbol 190 as "SmallBackButton"
ExportAssets (56)Timeline Frame 1Symbol 193 as "SoundOnButton"
ExportAssets (56)Timeline Frame 1Symbol 195 as "SoundOffButton"
ExportAssets (56)Timeline Frame 1Symbol 202 as "NextLevelButton"
ExportAssets (56)Timeline Frame 1Symbol 204 as "BackToMenuButton"
ExportAssets (56)Timeline Frame 1Symbol 206 as "ResetPasswordButton"
ExportAssets (56)Timeline Frame 1Symbol 208 as "ButtonMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 210 as "DragActingMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 212 as "DragMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 216 as "LinkedInOverlay"
ExportAssets (56)Timeline Frame 1Symbol 218 as "ContinueButton"
ExportAssets (56)Timeline Frame 1Symbol 220 as "DeleteMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 222 as "SavedLevelsButton"
ExportAssets (56)Timeline Frame 1Symbol 224 as "SavedContraptionsButton"
ExportAssets (56)Timeline Frame 1Symbol 226 as "MoveMousePointer"
ExportAssets (56)Timeline Frame 1Symbol 228 as "UpdateUserInfoButton"
ExportAssets (56)Timeline Frame 1Symbol 232 as "BuyMenuBackground"
ExportAssets (56)Timeline Frame 1Symbol 234 as "SkipTutorialButton"
ExportAssets (56)Timeline Frame 1Symbol 239 as "LearnToPlayButton"
ExportAssets (56)Timeline Frame 1Symbol 245 as "playOnIPhone"
ExportAssets (56)Timeline Frame 1Symbol 247 as "StartHere"
ExportAssets (56)Timeline Frame 1Symbol 250 as "FC_Logo_Button"
ExportAssets (56)Timeline Frame 1Symbol 253 as "SW_Button"
ExportAssets (56)Timeline Frame 1Symbol 258 as "linkto"
ExportAssets (56)Timeline Frame 1Symbol 260 as "Play_more_games"
ExportAssets (56)Timeline Frame 1Symbol 262 as "ContinueTutorialButton"
ExportAssets (56)Timeline Frame 1Symbol 40 as "PreviousMenuButton"
ExportAssets (56)Timeline Frame 1Symbol 38 as "MainMenuButton"
ExportAssets (56)Timeline Frame 1Symbol 35 as "ButtonBack"
ExportAssets (56)Timeline Frame 1Symbol 65 as "RightArrow"
ExportAssets (56)Timeline Frame 1Symbol 69 as "LeftArrow"
ExportAssets (56)Timeline Frame 1Symbol 273 as "SavedLevelBackground"
ExportAssets (56)Timeline Frame 1Symbol 275 as "DeleteDesignButton"
ExportAssets (56)Timeline Frame 1Symbol 277 as "PlayDesignSmallButton"
ExportAssets (56)Timeline Frame 1Symbol 279 as "LinkDesignButton"
ExportAssets (56)Timeline Frame 1Symbol 280 as "LinkLevelButton"
ExportAssets (56)Timeline Frame 1Symbol 282 as "SolutionsButton"
ExportAssets (56)Timeline Frame 1Symbol 284 as "EditLevelButton"
ExportAssets (56)Timeline Frame 1Symbol 285 as "DeleteLevelButton"
ExportAssets (56)Timeline Frame 1Symbol 286 as "PlayLevelSmallButton"
ExportAssets (56)Timeline Frame 1Symbol 288 as "PlayGameButton"
ExportAssets (56)Timeline Frame 1Symbol 181 as "Expander"
ExportAssets (56)Timeline Frame 1Symbol 294 as "BobbingCloud"
ExportAssets (56)Timeline Frame 1Symbol 309 as "HollowRodGraphicBG"
ExportAssets (56)Timeline Frame 1Symbol 321 as "HollowRodGraphic"
ExportAssets (56)Timeline Frame 1Symbol 323 as "ClockwiseWheelGraphic"
ExportAssets (56)Timeline Frame 1Symbol 325 as "NonPoweredWheelGraphic"
ExportAssets (56)Timeline Frame 1Symbol 327 as "CounterClockwiseWheelGraphic"
ExportAssets (56)Timeline Frame 1Symbol 329 as "GraphicsOffButton"
ExportAssets (56)Timeline Frame 1Symbol 330 as "GraphicsOnButton"
ExportAssets (56)Timeline Frame 1Symbol 336 as "tut2FirstDrawWater"
ExportAssets (56)Timeline Frame 1Symbol 340 as "tut2DeleteSecondRod"
ExportAssets (56)Timeline Frame 1Symbol 344 as "tut2FirstStop"
ExportAssets (56)Timeline Frame 1Symbol 347 as "tut2FirstSelectWater"
ExportAssets (56)Timeline Frame 1Symbol 351 as "tut2FirstSelectDelete"
ExportAssets (56)Timeline Frame 1Symbol 355 as "tut2ThirdTry"
ExportAssets (56)Timeline Frame 1Symbol 359 as "tut2SecondTry"
ExportAssets (56)Timeline Frame 1Symbol 362 as "tut2SecondSelectWater"
ExportAssets (56)Timeline Frame 1Symbol 366 as "tut2DeleteFirstRod"
ExportAssets (56)Timeline Frame 1Symbol 370 as "tut2FirstTry"
ExportAssets (56)Timeline Frame 1Symbol 372 as "tutLocked"
ExportAssets (56)Timeline Frame 1Symbol 375 as "tut2SecondSelectDelete"
ExportAssets (56)Timeline Frame 1Symbol 379 as "tut2SecondStop"
ExportAssets (56)Timeline Frame 1Symbol 384 as "tut2SecondDrawWater"
ExportAssets (56)Timeline Frame 1Symbol 394 as "tut2Welcome"
ExportAssets (56)Timeline Frame 1Symbol 399 as "tut1SelectWater"
ExportAssets (56)Timeline Frame 1Symbol 403 as "tut1Welcome"
ExportAssets (56)Timeline Frame 1Symbol 406 as "tut1Goal"
ExportAssets (56)Timeline Frame 1Symbol 414 as "tut1DrawWater"
ExportAssets (56)Timeline Frame 1Symbol 418 as "tut1Workshop"
ExportAssets (56)Timeline Frame 1Symbol 422 as "tut1PinkBall"
ExportAssets (56)Timeline Frame 1Symbol 427 as "tut1PressStart"
ExportAssets (56)Timeline Frame 1Symbol 431 as "tut1SelectWheel"
ExportAssets (56)Timeline Frame 1Symbol 434 as "tut1DrawWheel"
ExportAssets (56)Timeline Frame 1Symbol 437 as "tut3Move"
ExportAssets (56)Timeline Frame 1Symbol 440 as "tut3Water"
ExportAssets (56)Timeline Frame 1Symbol 443 as "tut3Goodbye"
ExportAssets (56)Timeline Frame 1Symbol 446 as "tut3Save"
ExportAssets (56)Timeline Frame 1Symbol 449 as "tut3Wood"
ExportAssets (56)Timeline Frame 1Symbol 452 as "tut3Back"
ExportAssets (56)Timeline Frame 1Symbol 455 as "tut3NonPowerWheel"
ExportAssets (56)Timeline Frame 1Symbol 458 as "tut3Zoom"
ExportAssets (56)Timeline Frame 1Symbol 461 as "tut3Delete"
ExportAssets (56)Timeline Frame 1Symbol 464 as "tut3Wheels"
ExportAssets (56)Timeline Frame 1Symbol 467 as "tut3Start"
ExportAssets (56)Timeline Frame 1Symbol 469 as "LogOutButton"
ExportAssets (56)Timeline Frame 1Symbol 244 as "iphone"
ExportAssets (56)Timeline Frame 1Symbol 478 as "LevelCircleRestricted"
ExportAssets (56)Timeline Frame 1Symbol 483 as "LevelCircleChecked"
ExportAssets (56)Timeline Frame 1Symbol 484 as "LevelCircle"
ExportAssets (56)Timeline Frame 1Symbol 485 as "SavedLevelBackgroundMask"
ExportAssets (56)Timeline Frame 1Symbol 487 as "DoPublishButton"
ExportAssets (56)Timeline Frame 1Symbol 489 as "UnPublishButton"
ExportAssets (56)Timeline Frame 1Symbol 177 as "Dashboard_fla.Buttons_3"
ExportAssets (56)Timeline Frame 1Symbol 293 as "ArtAssets_fla.MultiCloud_103"
ExportAssets (56)Timeline Frame 1Symbol 298 as "contraption_objects_fla.StreamBG_9"
ExportAssets (56)Timeline Frame 1Symbol 310 as "contraption_objects_fla.Stream_14"
ExportAssets (56)Timeline Frame 1Symbol 493 as "SolidRodGraphic"
ExportAssets (56)Timeline Frame 1Symbol 495 as "SolidRodGraphicBG"
ExportAssets (56)Timeline Frame 1Symbol 393 as "TutorialNextButton"
ExportAssets (56)Timeline Frame 1Symbol 174 as "BackTestButton"
ExportAssets (56)Timeline Frame 1Symbol 172 as "SaveButton"
ExportAssets (56)Timeline Frame 1Symbol 90 as "Dashboard_fla.ZoomButtons_5"
ExportAssets (56)Timeline Frame 1Symbol 80 as "DashBackground"
ExportAssets (56)Timeline Frame 1Symbol 150 as "Dashboard_fla.ContraptionButtons_9"
ExportAssets (56)Timeline Frame 1Symbol 170 as "BackButton"
ExportAssets (56)Timeline Frame 1Symbol 166 as "Dashboard_fla.LevelButtons_41"
ExportAssets (56)Timeline Frame 1Symbol 89 as "ZoomOutButton"
ExportAssets (56)Timeline Frame 1Symbol 87 as "ZoomInButton"
ExportAssets (56)Timeline Frame 1Symbol 94 as "DeleteButton"
ExportAssets (56)Timeline Frame 1Symbol 97 as "MoveButton"
ExportAssets (56)Timeline Frame 1Symbol 134 as "ClockwiseWheelButton"
ExportAssets (56)Timeline Frame 1Symbol 149 as "Dashboard_fla.GoStopButtons_35"
ExportAssets (56)Timeline Frame 1Symbol 122 as "HollowRodButton"
ExportAssets (56)Timeline Frame 1Symbol 130 as "CounterClockwiseWheelButton"
ExportAssets (56)Timeline Frame 1Symbol 126 as "NonPoweredWheelButton"
ExportAssets (56)Timeline Frame 1Symbol 104 as "SolidRodButton"
ExportAssets (56)Timeline Frame 1Symbol 163 as "GoalCircleButton"
ExportAssets (56)Timeline Frame 1Symbol 152 as "DynamicSquareButton"
ExportAssets (56)Timeline Frame 1Symbol 161 as "GoalSquareButton"
ExportAssets (56)Timeline Frame 1Symbol 158 as "StaticCircleButton"
ExportAssets (56)Timeline Frame 1Symbol 156 as "StaticSquareButton"
ExportAssets (56)Timeline Frame 1Symbol 165 as "TestLevelButton"
ExportAssets (56)Timeline Frame 1Symbol 154 as "DynamicCircleButton"
ExportAssets (56)Timeline Frame 1Symbol 132 as "ClockwiseWheel"
ExportAssets (56)Timeline Frame 1Symbol 144 as "StopButton"
ExportAssets (56)Timeline Frame 1Symbol 148 as "GoButton"
ExportAssets (56)Timeline Frame 1Symbol 137 as "StopButtonPing"
ExportAssets (56)Timeline Frame 1Symbol 121 as "HollowRod"
ExportAssets (56)Timeline Frame 1Symbol 128 as "CounterClockwiseWheel"
ExportAssets (56)Timeline Frame 1Symbol 110 as "Dashboard_fla.Stream_22"
SerialNumber (41)Timeline Frame 1

Labels

"Contraption"Frame 1
"close"Symbol 7 MovieClip {BubbleSceneChange} [BubbleSceneChange] Frame 1
"open"Symbol 7 MovieClip {BubbleSceneChange} [BubbleSceneChange] Frame 15
"appear"Symbol 26 MovieClip {Splash} [Splash] Frame 1
"stop"Symbol 26 MovieClip {Splash} [Splash] Frame 19
"leave"Symbol 26 MovieClip {Splash} [Splash] Frame 20
"start"Symbol 181 MovieClip {Expander} [Expander] Frame 1
"expanded"Symbol 181 MovieClip {Expander} [Expander] Frame 2
"contracting"Symbol 181 MovieClip {Expander} [Expander] Frame 3
"contracted"Symbol 181 MovieClip {Expander} [Expander] Frame 14
"expanding"Symbol 181 MovieClip {Expander} [Expander] Frame 15
"up"Symbol 273 MovieClip {SavedLevelBackground} [SavedLevelBackground] Frame 1
"default"Symbol 273 MovieClip {SavedLevelBackground} [SavedLevelBackground] Frame 10
"over"Symbol 273 MovieClip {SavedLevelBackground} [SavedLevelBackground] Frame 11
"open"Symbol 273 MovieClip {SavedLevelBackground} [SavedLevelBackground] Frame 20
"up"Symbol 485 MovieClip {SavedLevelBackgroundMask} [SavedLevelBackgroundMask] Frame 1
"default"Symbol 485 MovieClip {SavedLevelBackgroundMask} [SavedLevelBackgroundMask] Frame 10
"over"Symbol 485 MovieClip {SavedLevelBackgroundMask} [SavedLevelBackgroundMask] Frame 11




https://swfchan.com/53/263486/info.shtml
Created: 25/3 -2026 10:40:49 Last modified: 25/3 -2026 10:40:49 Server time: 03/04 -2026 19:45:06