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

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/28738378?noj=FRM28738378-5DC" width="1" height="1"></div>

Lbr.swf

This is the info page for
Flash #16635

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


ActionScript [AS3]
Section 1
//ApeParticleActor (abagames.lbr.ApeParticleActor) package abagames.lbr { import abagames.util.*; import org.cove.ape.*; public class ApeParticleActor extends SimpleActor { private var forceVector:Vector; protected var _pos:Vector; protected var _particle:AbstractParticle; protected var group:Group; public function ApeParticleActor(){ _pos = new Vector(); } public function get particle():AbstractParticle{ return (_particle); } override public function update():void{ _pos.x = _particle.px; _pos.y = _particle.py; } public function removeFromGroup():void{ group.removeParticle(_particle); } public function setPos(_arg1:Number, _arg2:Number):void{ _pos.x = (_particle.px = _arg1); _pos.y = (_particle.py = _arg2); } public function get pos():Vector{ return (_pos); } public function addForce(_arg1:Number, _arg2:Number):void{ forceVector.x = _arg1; forceVector.y = _arg2; _particle.addForce(forceVector); } public function addToGroup():void{ group.addParticle(_particle); } public function setGroup(_arg1:Group):void{ this.group = _arg1; forceVector = new Vector(); } } }//package abagames.lbr
Section 2
//Ball (abagames.lbr.Ball) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.media.*; import flash.geom.*; public class Ball extends ApeParticleActor { private var sound:SoundHandler; private var radius:Number; private var fragments:FragmentPool; private var pvel:Vector; private var particles:ParticlePool; private var baseRadius:Number; private var smallEnergies:SmallEnergyPool; private var buffer:BitmapData; private var burstRadius:Number; private var player:Player; private var hardness:Number; private var rect:Rectangle; private var field:Field; public function Ball(_arg1:BitmapData, _arg2:Field, _arg3:Player, _arg4:FragmentPool, _arg5:ParticlePool, _arg6:SmallEnergyPool, _arg7:SoundHandler, _arg8:Group){ this.buffer = _arg1; this.field = _arg2; this.player = _arg3; this.fragments = _arg4; this.particles = _arg5; this.smallEnergies = _arg6; this.sound = _arg7; pvel = new Vector(); _particle = new CircleParticle(0, 0, 6); setGroup(_arg8); rect = new Rectangle(0, 0, 6, 6); } public function destroy(_arg1:Boolean=true):void{ var _local2:int; var _local3:Number; var _local4:Particle; var _local5:SoundChannel; var _local6:Fragment; var _local7:SmallEnergy; _local2 = 0; while (_local2 < ((baseRadius * hardness) * 0.4)) { _local4 = Particle(particles.getInstanceForced()); _local4.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), (5 + (Math.random() * 15)), 0xFF, 0, 0xFF); _local2++; }; if (_arg1){ _local2 = 0; while (_local2 < ((baseRadius * hardness) * 0.15)) { _local6 = Fragment(fragments.getInstance()); if (_local6 == null){ break; }; _local3 = ((Math.random() * Math.PI) * 2); _local6.add((_pos.x + (Math.sin(_local3) * radius)), (_pos.y + (Math.cos(_local3) * radius)), _local3, (100 * (1 + Math.random())), 0xFF, 0, 0xFF); _local2++; }; _local2 = 0; while (_local2 < ((baseRadius * hardness) * 0.025)) { _local7 = SmallEnergy(smallEnergies.getInstance()); if (_local7 == null){ break; }; _local3 = ((Math.random() * Math.PI) * 2); _local7.add((_pos.x + (Math.sin(_local3) * radius)), (_pos.y + (Math.cos(_local3) * radius)), _local3, (300 * (1 + Math.random()))); _local2++; }; _local5 = sound.playSe(2); sound.setVolumeAndPan(_local5, player.getSoundVolume(_pos), player.getSoundPan(_pos)); }; remove(); } override public function remove():void{ removeFromGroup(); super.remove(); } public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{ pvel.x = (pvel.y = 0); addToGroup(); _particle.visible = false; baseRadius = (this.radius = _arg3); this.burstRadius = _arg4; this.hardness = _arg5; CircleParticle(_particle).radius = _arg3; _particle.elasticity = 0.3; _particle.mass = (_arg3 * 0.04); _particle.friction = 0.01; setPos(_arg1, _arg2); } public function drawShape(_arg1:Vector):void{ var _local2:Number; var _local3:Number; var _local4:Number; _local2 = 20; _local3 = (Math.PI * 0.125); _local4 = 0; while (_local4 < (Math.PI * 2)) { rect.x = ((_arg1.x + (Math.sin(_local4) * _local2)) - 3); rect.y = ((_arg1.y + (Math.cos(_local4) * _local2)) - 3); buffer.fillRect(rect, 0xFF0000); _local4 = (_local4 + _local3); }; } override public function update():void{ var _local1:Number; var _local2:Number; super.update(); if (!field.isInY(_pos.y)){ remove(); return; }; if ((Math.abs((_particle.velocity.x - pvel.x)) + Math.abs((_particle.velocity.y - pvel.y))) > 10){ radius = (radius * (1 + (0.05 * (4 / hardness)))); CircleParticle(_particle).radius = radius; if (radius >= burstRadius){ destroy(); return; }; }; pvel.x = _particle.velocity.x; pvel.y = _particle.velocity.y; _local1 = (((Math.PI * 5) / Math.sqrt(hardness)) / baseRadius); _local2 = 0; while (_local2 < (Math.PI * 2)) { rect.x = ((_pos.x + (Math.sin(_local2) * radius)) - 3); rect.y = (((_pos.y + (Math.cos(_local2) * radius)) - 3) + field.scrollY); buffer.fillRect(rect, 0xFF0000); _local2 = (_local2 + _local1); }; } } }//package abagames.lbr
Section 3
//BallPool (abagames.lbr.BallPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class BallPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var smallEnergies:SmallEnergyPool; private var player:Player; private var fragments:FragmentPool; private var sound:SoundHandler; private var particles:ParticlePool; private var group:Group; public function BallPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Player, _arg5:FragmentPool, _arg6:ParticlePool, _arg7:SmallEnergyPool, _arg8:SoundHandler, _arg9:Group){ this.buffer = _arg2; this.field = _arg3; this.player = _arg4; this.fragments = _arg5; this.particles = _arg6; this.smallEnergies = _arg7; this.sound = _arg8; this.group = _arg9; super(_arg1); } override protected function createActor():Actor{ return (new Ball(buffer, field, player, fragments, particles, smallEnergies, sound, group)); } public function destroy():void{ var _local1:int; var _local2:int; _local1 = actorNum; _local2 = 0; while (_local2 < _local1) { Ball(actors[0]).destroy(false); _local2++; }; } } }//package abagames.lbr
Section 4
//Body (abagames.lbr.Body) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.geom.*; public class Body extends ApeParticleActor { private var field:Field; private var cords:CordPool; private var posHistory:Array; private var shape:Shape; private var shadowRect:Rectangle; private var stayCnt:int; private var buffer:BitmapData; private var posHistoryIdx:int; public static const POS_HISTORY_MAX:int = 5; public function Body(_arg1:BitmapData, _arg2:Field, _arg3:CordPool, _arg4:Group){ var _local5:int; super(); this.buffer = _arg1; this.field = _arg2; this.cords = _arg3; posHistory = new Array(); _local5 = 0; while (_local5 < POS_HISTORY_MAX) { posHistory.push(new Vector()); _local5++; }; clearPosHistory(); setGroup(_arg4); } override public function remove():void{ cords.removeConnected(this); removeFromGroup(); super.remove(); } public function getHistoryPos(_arg1:int):Vector{ var _local2:int; _local2 = (posHistoryIdx - _arg1); while (_local2 < 0) { _local2 = (_local2 + POS_HISTORY_MAX); }; return (posHistory[_local2]); } public function add(_arg1:Number, _arg2:Number, _arg3:Number):void{ shape = new Shape(buffer, field); shape.addBox(0, 0, _arg3, _arg3, 0, 0xFF, 0); _particle = new CircleParticle(0, 0, _arg3); _particle.mass = 0.15; _particle.friction = 0.1; setPos(_arg1, _arg2); posHistoryIdx = 0; addToGroup(); _particle.visible = false; } public function drawShape(_arg1:Vector):void{ shape.drawDistortedWithoutScroll(_arg1); } public function drawShapeBlur(_arg1:Vector, _arg2:Number):void{ shape.drawBlur(_arg1, _arg2); } public function clearPosHistory():void{ var _local1:int; _local1 = 0; while (_local1 < POS_HISTORY_MAX) { posHistory[_local1].y = 9999; _local1++; }; } override public function update():void{ var _local1:Vector; if (_particle.px < field.upperLeftPos.x){ _particle.px = field.upperLeftPos.x; } else { if (_particle.px > field.lowerRightPos.x){ _particle.px = field.lowerRightPos.x; }; }; super.update(); shape.drawDistorted(_pos); _local1 = Vector(posHistory[posHistoryIdx]); _local1.x = _pos.x; _local1.y = _pos.y; posHistoryIdx++; if (posHistoryIdx >= POS_HISTORY_MAX){ posHistoryIdx = 0; }; } } }//package abagames.lbr
Section 5
//BodyPool (abagames.lbr.BodyPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class BodyPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var cords:CordPool; private var group:Group; public function BodyPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:CordPool, _arg5:Group){ this.buffer = _arg2; this.field = _arg3; this.cords = _arg4; this.group = _arg5; super(_arg1); } override protected function createActor():Actor{ return (new Body(buffer, field, cords, group)); } } }//package abagames.lbr
Section 6
//Cord (abagames.lbr.Cord) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.geom.*; public class Cord extends ApeParticleActor { private var field:Field; private var offset:Vector; private var g:int; private var _actors:Array; private var buffer:BitmapData; private var pointNum:int; private var constraint:SpringConstraint; private var rect:Rectangle; private var length:Number; private var b:int; private var blurRect:Rectangle; private var r:int; private var color:int; public function Cord(_arg1:BitmapData, _arg2:Field, _arg3:Group):void{ var _local4:int; super(); this.buffer = _arg1; this.field = _arg2; _actors = new Array(); _local4 = 0; while (_local4 < 2) { _actors.push(null); _local4++; }; offset = new Vector(); rect = new Rectangle(0, 0, 4, 4); blurRect = new Rectangle(0, 0, 4, 4); setGroup(_arg3); } override public function remove():void{ super.remove(); group.removeConstraint(constraint); } public function get actors():Array{ return (_actors); } public function add(_arg1:ApeParticleActor, _arg2:ApeParticleActor, _arg3:Number, _arg4:Number=0.02, _arg5:int=0, _arg6:int=0, _arg7:int=0xFF):void{ _actors[0] = _arg1; _actors[1] = _arg2; this.length = _arg3; pointNum = int((_arg3 / 4)); constraint = new SpringConstraint(_arg1.particle, _arg2.particle, _arg4); constraint.restLength = _arg3; group.addConstraint(constraint); constraint.visible = false; this.r = _arg5; this.g = _arg6; this.b = _arg7; color = (((_arg5 * 65536) + (_arg6 * 0x0100)) + _arg7); } override public function update():void{ draw(); } private function draw():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:int; _local1 = (_actors[1].pos.x - _actors[0].pos.x); _local2 = (_actors[1].pos.y - _actors[0].pos.y); _local3 = _actors[0].pos.x; _local4 = _actors[0].pos.y; _local1 = (_local1 / (pointNum + 1)); _local2 = (_local2 / (pointNum + 1)); _local5 = 0; while (_local5 < pointNum) { _local3 = (_local3 + _local1); _local4 = (_local4 + _local2); rect.x = (_local3 - 2); rect.y = ((_local4 - 2) + field.scrollY); buffer.fillRect(rect, color); _local5++; }; } public function drawShape(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:int; _local5 = (_arg3 - _arg1); _local6 = (_arg4 - _arg2); _local7 = _arg1; _local8 = _arg2; _local5 = (_local5 / (pointNum + 1)); _local6 = (_local6 / (pointNum + 1)); _local9 = 0; while (_local9 < pointNum) { _local7 = (_local7 + _local5); _local8 = (_local8 + _local6); rect.x = (_local7 - 2); rect.y = (_local8 - 2); buffer.fillRect(rect, color); _local9++; }; } public function removeConnected(_arg1:ApeParticleActor):void{ if ((((_actors[0] == _arg1)) || ((_actors[1] == _arg1)))){ remove(); }; } public function drawShapeBlur(_arg1:Vector, _arg2:Vector, _arg3:Number):void{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:int; var _local10:int; _local4 = (_arg2.x - _arg1.x); _local5 = (_arg2.y - _arg1.y); _local6 = _arg1.x; _local7 = _arg1.y; _local4 = (_local4 / (pointNum + 1)); _local5 = (_local5 / (pointNum + 1)); _local8 = (8 - (_arg3 * 4)); blurRect.width = (blurRect.height = _local8); _local9 = (((int((r * _arg3)) * 65536) + (int((g * _arg3)) * 0x0100)) + int((b * _arg3))); _local10 = 0; while (_local10 < pointNum) { _local6 = (_local6 + _local4); _local7 = (_local7 + _local5); blurRect.x = (_local6 - (_local8 / 2)); blurRect.y = ((_local7 - (_local8 / 2)) + field.scrollY); buffer.fillRect(blurRect, _local9); _local10++; }; } } }//package abagames.lbr
Section 7
//CordPool (abagames.lbr.CordPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class CordPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var group:Group; public function CordPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Group){ this.buffer = _arg2; this.field = _arg3; this.group = _arg4; super(_arg1); } override protected function createActor():Actor{ return (new Cord(buffer, field, group)); } public function removeConnected(_arg1:ApeParticleActor):void{ var _local2:int; var _local3:Cord; _local2 = 0; while (_local2 < actorNum) { _local3 = Cord(actors[_local2]); _local3.removeConnected(_arg1); if (_local3.removed){ _local3.removed = false; _local2--; }; _local2++; }; } } }//package abagames.lbr
Section 8
//Energy (abagames.lbr.Energy) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class Energy extends ApeParticleActor { private var player:Player; private var shape:Shape; private var cnt:int; private var buffer:BitmapData; private var field:Field; private var particles:ParticlePool; public function Energy(_arg1:BitmapData, _arg2:Field, _arg3:Player, _arg4:ParticlePool, _arg5:Group){ this.buffer = _arg1; this.field = _arg2; this.player = _arg3; this.particles = _arg4; shape = new Shape(_arg1, _arg2); shape.addBox(0, -10, 15, 5, 0, 0xFF, 0); shape.addBox(0, 0, 15, 5, 0, 0xFF, 0); shape.addBox(0, 10, 15, 5, 0, 0xFF, 0); shape.addBox(-10, 0, 5, 20, 0, 0xFF, 0); _particle = new CircleParticle(0, 0, 15); _particle.mass = 3; _particle.friction = 0.01; setGroup(_arg5); } override public function remove():void{ removeFromGroup(); super.remove(); } public function drawShape(_arg1:Vector):void{ shape.drawWithoutScroll(_arg1); } override public function update():void{ var _local1:int; var _local2:Particle; var _local3:Particle; super.update(); if (!field.isInYUpper(_pos.y)){ remove(); return; }; if (((player.hasCollision) && ((_pos.dist(player.pos) < 40)))){ player.getEnergy(); _local1 = 0; while (_local1 < 32) { _local2 = Particle(particles.getInstanceForced()); _local2.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), 2, 0, 0xFF, 0, 0.2); _local1++; }; remove(); return; }; cnt++; if ((cnt % 3) == 0){ _local3 = Particle(particles.getInstanceForced()); _local3.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), 3, 0, 0xFF, 0, 0); }; addForce(0, (-(Field.GRAVITY) * (3 + (Math.sin((cnt * 0.2)) * 3)))); shape.drawDistorted(_pos); } public function add(_arg1:Number, _arg2:Number):void{ setPos(_arg1, _arg2); cnt = 0; addToGroup(); _particle.visible = false; } } }//package abagames.lbr
Section 9
//EnergyPool (abagames.lbr.EnergyPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class EnergyPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var player:Player; private var particles:ParticlePool; private var group:Group; public function EnergyPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Player, _arg5:ParticlePool, _arg6:Group){ this.buffer = _arg2; this.field = _arg3; this.player = _arg4; this.particles = _arg5; this.group = _arg6; super(_arg1); } override protected function createActor():Actor{ return (new Energy(buffer, field, player, particles, group)); } } }//package abagames.lbr
Section 10
//Field (abagames.lbr.Field) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.geom.*; public class Field { public var scrollVel:Number; private var isTitle:Boolean; private var buffer:BitmapData; private var _size:Vector; private var rect:Rectangle; private var walls:Array; private var _upperLeftPos:Vector; private var _scrollY:Number; private var _lowerRightPos:Vector; public static const PIXEL_METER_RATIO:Number = 24; public static const GRAVITY:Number = 3; public function Field(_arg1:BitmapData, _arg2:Group){ var _local3:int; var _local4:RectangleParticle; super(); this.buffer = _arg1; _size = new Vector((Lbr.SCREEN_WIDTH - 30), Lbr.SCREEN_HEIGHT); _upperLeftPos = new Vector(15, 0); _lowerRightPos = new Vector((_upperLeftPos.x + _size.x), (_upperLeftPos.y + _size.y)); walls = new Array(); _local3 = 0; while (_local3 < 2) { walls.push(null); _local3++; }; rect = new Rectangle(0, 0, 4, 4); _local4 = new RectangleParticle(-40, (Lbr.SCREEN_HEIGHT / 2), 100, Lbr.SCREEN_HEIGHT, 0, true); _local4.setStyle(0, 0, 0, 0xCCCCCC); _arg2.addParticle(_local4); walls[0] = _local4; _local4 = new RectangleParticle((Lbr.SCREEN_WIDTH + 40), (Lbr.SCREEN_HEIGHT / 2), 100, Lbr.SCREEN_HEIGHT, 0, true); _local4.setStyle(0, 0, 0, 0xCCCCCC); _arg2.addParticle(_local4); walls[1] = _local4; } public function update():void{ var _local1:Number; var _local2:int; var _local3:Number; _scrollY = (_scrollY + scrollVel); updateScroll(); if (isTitle){ return; }; _local1 = ((_scrollY + _size.y) % (PIXEL_METER_RATIO * 10)); _local2 = ((_scrollY + _size.y) / (PIXEL_METER_RATIO * 10)); _local3 = _local1; while (_local3 < (_size.y + 20)) { drawLine(_local3); Letter.drawNumLeft((_local2 * 10), 5, (_local3 - 12), 0.7); _local2--; _local3 = (_local3 + (PIXEL_METER_RATIO * 10)); }; } public function isInY(_arg1:Number):Boolean{ return ((((_arg1 > (_upperLeftPos.y - (_size.y * 0.5)))) && ((_arg1 < (_lowerRightPos.y + (_size.y * 0.4)))))); } public function get upperLeftPos():Vector{ return (_upperLeftPos); } public function isInYScreen(_arg1:Number):Boolean{ return ((((_arg1 > _upperLeftPos.y)) && ((_arg1 < _lowerRightPos.y)))); } public function init():void{ scrollVel = 0; _scrollY = 0; updateScroll(); isTitle = false; } public function get size():Vector{ return (_size); } private function drawLine(_arg1:Number):void{ var _local2:int; _local2 = _upperLeftPos.x; while (_local2 <= _lowerRightPos.x) { rect.x = (_local2 - 2); rect.y = (_arg1 - 2); buffer.fillRect(rect, 0x666666); _local2 = (_local2 + 10); }; } public function initTitle():void{ init(); isTitle = true; } public function get scrollY():Number{ return (_scrollY); } public function isIn(_arg1:Vector):Boolean{ return ((((((((_arg1.x > _upperLeftPos.x)) && ((_arg1.x < _lowerRightPos.x)))) && ((_arg1.y > _upperLeftPos.y)))) && ((_arg1.y < _lowerRightPos.y)))); } private function updateScroll():void{ var _local1:int; _upperLeftPos.y = -(_scrollY); _lowerRightPos.y = (_upperLeftPos.y + _size.y); _local1 = 0; while (_local1 < 2) { walls[_local1].py = ((Lbr.SCREEN_HEIGHT / 2) - _scrollY); _local1++; }; } public function isInYUpper(_arg1:Number):Boolean{ return ((((_arg1 > (_upperLeftPos.y - (_size.y * 0.5)))) && ((_arg1 < (_lowerRightPos.y + (_size.y * 0.05)))))); } public function get lowerRightPos():Vector{ return (_lowerRightPos); } } }//package abagames.lbr
Section 11
//Floor (abagames.lbr.Floor) package abagames.lbr { import flash.display.*; import org.cove.ape.*; public class Floor extends ApeParticleActor { private var shape:Shape; private var buffer:BitmapData; private var cords:CordPool; private var field:Field; public static const WIDTH:Number = 30; public function Floor(_arg1:BitmapData, _arg2:Field, _arg3:CordPool, _arg4:Group){ this.buffer = _arg1; this.field = _arg2; this.cords = _arg3; shape = new Shape(_arg1, _arg2); shape.addBox(0, 0, WIDTH, 10, 200, 200, 200); _particle = new RectangleParticle(0, 0, WIDTH, 10); setGroup(_arg4); } override public function remove():void{ cords.removeConnected(this); removeFromGroup(); super.remove(); } override public function update():void{ if (!field.isInY(_pos.y)){ remove(); return; }; super.update(); shape.draw(_pos); } public function add(_arg1:Number, _arg2:Number, _arg3:Boolean=false):void{ setPos(_arg1, _arg2); addToGroup(); _particle.visible = false; _particle.mass = 1; _particle.fixed = _arg3; } } }//package abagames.lbr
Section 12
//FloorPool (abagames.lbr.FloorPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class FloorPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var cords:CordPool; private var group:Group; public function FloorPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:CordPool, _arg5:Group){ this.buffer = _arg2; this.field = _arg3; this.cords = _arg4; this.group = _arg5; super(_arg1); } override protected function createActor():Actor{ return (new Floor(buffer, field, cords, group)); } } }//package abagames.lbr
Section 13
//Fragment (abagames.lbr.Fragment) package abagames.lbr { import flash.display.*; import org.cove.ape.*; public class Fragment extends ApeParticleActor { private var stayCnt:int; private var shape:Shape; private var buffer:BitmapData; private var field:Field; public function Fragment(_arg1:BitmapData, _arg2:Field, _arg3:Group){ this.buffer = _arg1; this.field = _arg2; shape = new Shape(_arg1, _arg2); shape.addBox(0, 0, 6, 6, 0xFF, 0xFF, 0xFF); _particle = new CircleParticle(0, 0, 6); _particle.mass = 0.5; setGroup(_arg3); } override public function remove():void{ removeFromGroup(); super.remove(); } override public function update():void{ super.update(); if (!field.isInY(_pos.y)){ remove(); return; }; if ((Math.abs(_particle.velocity.x) + Math.abs(_particle.velocity.y)) < 20){ stayCnt++; if (stayCnt > 3){ remove(); return; }; }; shape.draw(_pos); } public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:int, _arg7:int):void{ setPos(_arg1, _arg2); addForce((Math.sin(_arg3) * _arg4), (Math.cos(_arg3) * _arg4)); addToGroup(); shape.setColor(_arg5, _arg6, _arg7); _particle.visible = false; stayCnt = 0; } } }//package abagames.lbr
Section 14
//FragmentPool (abagames.lbr.FragmentPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class FragmentPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var group:Group; public function FragmentPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Group){ this.buffer = _arg2; this.field = _arg3; this.group = _arg4; super(_arg1); } override protected function createActor():Actor{ return (new Fragment(buffer, field, group)); } } }//package abagames.lbr
Section 15
//Letter (abagames.lbr.Letter) package abagames.lbr { import flash.display.*; import abagames.util.*; public class Letter { private static var patterns:Array = [[[0, 1.15, 0.65, 0.3, 0], [-0.6, 0.55, 0.65, 0.3, 90], [0.6, 0.55, 0.65, 0.3, 90], [-0.6, -0.55, 0.65, 0.3, 90], [0.6, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0.5, 0.55, 0.65, 0.3, 90], [0.5, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [0.65, 0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[-0.18, 1.15, 0.45, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.45, 0.55, 0.65, 0.3, 90], [-0.18, 0, 0.45, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.15, 1.15, 0.45, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.45, 0.45, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.05, 0, 0.3, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 0.55, 0.65, 0.3, 90], [0, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0.65, 0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [-0.7, -0.7, 0.3, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [0.4, 0.55, 0.65, 0.3, 100], [-0.25, 0, 0.45, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.6, -0.55, 0.65, 0.3, 80], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.5, 1.15, 0.3, 0.3, 0], [0.1, 1.15, 0.3, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, 0.55, 0.65, 0.3, 90], [0, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0.05, -0.55, 0.45, 0.3, 60], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.2, 0, 0.45, 0.3, 0], [-0.65, -0.55, 0.65, 0.3, 90], [0.45, -0.55, 0.65, 0.3, 80], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [-0.65, 0.55, 0.65, 0.3, 90], [0, 0, 0.65, 0.3, 0], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.5, 1.15, 0.55, 0.3, 0], [0.5, 1.15, 0.55, 0.3, 0], [0.1, 0.55, 0.65, 0.3, 90], [0.1, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.5, -0.55, 0.65, 0.3, 90], [0.5, -0.55, 0.65, 0.3, 90], [-0.1, -1.15, 0.45, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.65, 0.55, 0.65, 0.3, 90], [0.65, 0.55, 0.65, 0.3, 90], [-0.65, -0.55, 0.65, 0.3, 90], [0.65, -0.55, 0.65, 0.3, 90], [-0.5, -1.15, 0.3, 0.3, 0], [0.1, -1.15, 0.3, 0.3, 0], [0, 0.55, 0.65, 0.3, 90], [0, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[-0.4, 0.6, 0.85, 0.3, (360 - 120)], [0.4, 0.6, 0.85, 0.3, (360 - 60)], [-0.4, -0.6, 0.85, 0.3, (360 - 240)], [0.4, -0.6, 0.85, 0.3, (360 - 300)], [0, 0, 0, 0, 99999]], [[-0.4, 0.6, 0.85, 0.3, (360 - 120)], [0.4, 0.6, 0.85, 0.3, (360 - 60)], [-0.1, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1.15, 0.65, 0.3, 0], [0.3, 0.4, 0.65, 0.3, 120], [-0.3, -0.4, 0.65, 0.3, 120], [0, -1.15, 0.65, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, -1.15, 0.3, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, -1.15, 0.8, 0.3, 0], [0, 0, 0, 0, 99999]], [[0, 0, 0.9, 0.3, 0], [0, 0, 0, 0, 99999]], [[-0.5, 0, 0.45, 0.3, 0], [0.45, 0, 0.45, 0.3, 0], [0.1, 0.55, 0.65, 0.3, 90], [0.1, -0.55, 0.65, 0.3, 90], [0, 0, 0, 0, 99999]], [[0, 1, 0.4, 0.2, 90], [0, 0, 0, 0, 99999]], [[-0.19, 1, 0.4, 0.2, 90], [0.2, 1, 0.4, 0.2, 90], [0, 0, 0, 0, 99999]], [[0.56, 0.25, 1.1, 0.3, 90], [0, -1, 0.3, 0.3, 90], [0, 0, 0, 0, 99999]], [[0.8, 0, 1.75, 0.3, 120], [0, 0, 0, 0, 99999]]]; private static var shapes:Array; private static var pos:Vector; public static function drawNum(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number=1):void{ var _local5:Number; var _local6:int; var _local7:int; _local5 = _arg2; _local6 = _arg1; while (true) { _local7 = (_local6 % 10); draw(_local7, _local5, _arg3, _arg4); _local5 = (_local5 - (20 * _arg4)); _local6 = (_local6 / 10); if (_local6 <= 0){ return; }; }; } public static function draw(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number=1):void{ var _local5:Array; _local5 = patterns[_arg1]; _arg1 = 0; while (_local5[_arg1][4] != 99999) { pos.x = (((_local5[_arg1][0] * 12) * _arg4) + _arg2); pos.y = (((-(_local5[_arg1][1]) * 11) * _arg4) + _arg3); if ((((_local5[_arg1][4] >= 75)) && ((_local5[_arg1][4] <= 105)))){ shapes[1].drawWithoutScroll(pos); } else { if ((((_local5[_arg1][4] == 120)) || ((_local5[_arg1][4] == (360 - 60))))){ shapes[2].drawWithoutScroll(pos); } else { if ((((_local5[_arg1][4] == 60)) || ((_local5[_arg1][4] == (360 - 120))))){ shapes[3].drawWithoutScroll(pos); } else { shapes[0].drawWithoutScroll(pos); }; }; }; _arg1++; }; } public static function drawNumLeft(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number=1):void{ var _local5:Number; var _local6:int; var _local7:int; _local5 = _arg2; _local6 = _arg1; while (true) { _local5 = (_local5 + (20 * _arg4)); _local6 = (_local6 / 10); if (_local6 <= 0){ break; }; }; _local6 = _arg1; while (true) { _local7 = (_local6 % 10); draw(_local7, _local5, _arg3, _arg4); _local5 = (_local5 - (20 * _arg4)); _local6 = (_local6 / 10); if (_local6 <= 0){ return; }; }; } private static function convertCharToInt(_arg1:int):int{ var _local2:int; if ((((_arg1 >= 48)) && ((_arg1 <= 57)))){ _local2 = (_arg1 - 48); } else { if ((((_arg1 >= 65)) && ((_arg1 <= 90)))){ _local2 = ((_arg1 - 65) + 10); } else { if ((((_arg1 >= 97)) && ((_arg1 <= 122)))){ _local2 = ((_arg1 - 97) + 10); } else { if (_arg1 == 46){ _local2 = 36; } else { if (_arg1 == 45){ _local2 = 38; } else { if (_arg1 == 43){ _local2 = 39; } else { if (_arg1 == 95){ _local2 = 37; } else { if (_arg1 == 33){ _local2 = 42; } else { if (_arg1 == 47){ _local2 = 43; }; }; }; }; }; }; }; }; }; return (_local2); } public static function init(_arg1:BitmapData, _arg2:Field):void{ var _local3:Shape; shapes = new Array(); _local3 = new Shape(_arg1, _arg2); _local3.addBox(0, 0, 10, 2, 220, 220, 220); shapes.push(_local3); _local3 = new Shape(_arg1, _arg2); _local3.addBox(0, 0, 2, 10, 220, 220, 220); shapes.push(_local3); _local3 = new Shape(_arg1, _arg2); _local3.addBox(0, 0, 2, 2, 220, 220, 220); _local3.addBox(3, -4, 2, 2, 220, 220, 220); _local3.addBox(-3, 4, 2, 2, 220, 220, 220); shapes.push(_local3); _local3 = new Shape(_arg1, _arg2); _local3.addBox(0, 0, 2, 2, 220, 220, 220); _local3.addBox(-3, -4, 2, 2, 220, 220, 220); _local3.addBox(3, 4, 2, 2, 220, 220, 220); shapes.push(_local3); pos = new Vector(); } public static function drawString(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Number=1):void{ var _local5:Number; var _local6:int; var _local7:int; _local5 = _arg2; _local6 = 0; while (_local6 < _arg1.length) { _local7 = int(_arg1.charCodeAt(_local6)); if (_local7 != 32){ draw(convertCharToInt(_local7), _local5, _arg3, _arg4); }; _local5 = (_local5 + (20 * _arg4)); _local6++; }; } } }//package abagames.lbr
Section 16
//MainLoop (abagames.lbr.MainLoop) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class MainLoop { private var mines:MinePool; private var stage:Stage; private var solidBalls:SolidBallPool; private var pPressed:Boolean; private var cords:CordPool; private var sound:SoundHandler; private var groupCollideInternal:Group; private var fragments:FragmentPool; private var energies:EnergyPool; private var particles:ParticlePool; private var mode:int; private var buffer:BitmapData; private var rootSprite:Sprite; private var smallEnergies:SmallEnergyPool; private var balls:BallPool; private var title:Title; private var player:Player; private var floors:FloorPool; private var store:Store; private var cnt:int; private var screen:Bitmap; private var keyState:KeyState; private var isPaused:Boolean; private var field:Field; private var group:Group; private static const TITLE:int = 0; private static const IN_GAME:int = 1; public function init(_arg1:Sprite, _arg2:KeyState, _arg3:BitmapData, _arg4:Bitmap, _arg5:Array):void{ this.rootSprite = _arg1; this.keyState = _arg2; this.buffer = _arg3; this.screen = _arg4; groupCollideInternal = new Group(true); group = new Group(); APEngine.init(0.25); APEngine.container = _arg1; APEngine.addMasslessForce(new Vector(0, Field.GRAVITY)); APEngine.damping = 0.99; APEngine.addGroup(groupCollideInternal); APEngine.addGroup(group); groupCollideInternal.addCollidable(group); sound = new SoundHandler(_arg5); store = new Store(); field = new Field(_arg3, groupCollideInternal); particles = new ParticlePool(0x0200, _arg3, field); fragments = new FragmentPool(64, _arg3, field, group); cords = new CordPool(32, _arg3, field, groupCollideInternal); player = new Player(_arg3, _arg2, field, fragments, particles, groupCollideInternal, sound, this); energies = new EnergyPool(4, _arg3, field, player, particles, groupCollideInternal); smallEnergies = new SmallEnergyPool(64, _arg3, field, player, particles, group); mines = new MinePool(16, _arg3, field, player, fragments, particles, smallEnergies, sound, groupCollideInternal); balls = new BallPool(64, _arg3, field, player, fragments, particles, smallEnergies, sound, groupCollideInternal); solidBalls = new SolidBallPool(16, _arg3, field, player, fragments, particles, sound, groupCollideInternal); floors = new FloorPool(32, _arg3, field, cords, groupCollideInternal); stage = new Stage(particles, player, balls, solidBalls, cords, mines, energies, floors, field); title = new Title(_arg3, field, _arg2, player, store, balls, solidBalls, mines, energies, this); player.setParams(stage); Letter.init(_arg3, field); pPressed = false; isPaused = false; startTitle(); } public function startTitle():void{ mode = TITLE; isPaused = false; initPools(); field.initTitle(); player.initTitle(); stage.init(); title.init(); sound.stopBgm(); } private function initPools():void{ particles.clear(); fragments.clear(); balls.clear(); mines.clear(); energies.clear(); smallEnergies.clear(); floors.clear(); cords.clear(); } public function startInGame():void{ mode = IN_GAME; cnt = 0; initPools(); field.init(); player.init(); stage.init(); sound.startBgm(); } public function playerDestroyed():void{ energies.clear(); smallEnergies.clear(); solidBalls.destroy(); balls.destroy(); mines.destroy(); } public function startGameover():void{ store.storeScore(player.height); sound.fadeoutBgm(); } public function update():void{ buffer.fillRect(buffer.rect, 0); switch (mode){ case TITLE: updateActors(); title.update(); break; case IN_GAME: cnt++; if (keyState.esc){ startTitle(); break; }; if (keyState.p){ if (!pPressed){ pPressed = true; isPaused = !(isPaused); }; } else { pPressed = false; }; if (isPaused){ if ((cnt % 30) < 15){ Letter.drawString("PAUSE", 100, 100, 0.75); }; break; }; updateActors(); break; }; sound.update(); } private function updateActors():void{ APEngine.step(); field.update(); stage.update(); if (player.hasCollision){ player.drawBlur(); }; particles.update(); fragments.update(); cords.update(); floors.update(); balls.update(); solidBalls.update(); mines.update(); energies.update(); smallEnergies.update(); player.update(); } } }//package abagames.lbr
Section 17
//Mine (abagames.lbr.Mine) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.media.*; public class Mine extends ApeParticleActor { private var sound:SoundHandler; private var fragments:FragmentPool; private var pvel:Vector; private var particles:ParticlePool; private var smallEnergies:SmallEnergyPool; private var buffer:BitmapData; private var player:Player; private var damage:int; private var cnt:int; private var shapes:Array; private var field:Field; public function Mine(_arg1:BitmapData, _arg2:Field, _arg3:Player, _arg4:FragmentPool, _arg5:ParticlePool, _arg6:SmallEnergyPool, _arg7:SoundHandler, _arg8:Group){ var _local9:Shape; super(); this.buffer = _arg1; this.field = _arg2; this.player = _arg3; this.fragments = _arg4; this.particles = _arg5; this.smallEnergies = _arg6; this.sound = _arg7; pvel = new Vector(); shapes = new Array(); _local9 = new Shape(_arg1, _arg2); _local9.addBox(0, 0, 16, 16, 150, 150, 150); _local9.addBox(0, -14, 7, 7, 0xFF, 0xFF, 0xFF); _local9.addBox(-12, -6, 7, 7, 0xFF, 0xFF, 0xFF); _local9.addBox(12, -6, 7, 7, 0xFF, 0xFF, 0xFF); _local9.addBox(-12, 6, 7, 7, 0xFF, 0xFF, 0xFF); _local9.addBox(12, 6, 7, 7, 0xFF, 0xFF, 0xFF); _local9.addBox(0, 14, 7, 7, 0xFF, 0xFF, 0xFF); _local9.addBox(0, 0, 7, 7, 0xFF, 0xFF, 0xFF); shapes.push(_local9); _local9 = new Shape(_arg1, _arg2); _local9.addBox(0, 0, 16, 16, 150, 150, 150); _local9.addBox(0, -14, 7, 7, 0xFF, 55, 55); _local9.addBox(-12, -6, 7, 7, 0xFF, 55, 55); _local9.addBox(12, -6, 7, 7, 0xFF, 55, 55); _local9.addBox(-12, 6, 7, 7, 0xFF, 55, 55); _local9.addBox(12, 6, 7, 7, 0xFF, 55, 55); _local9.addBox(0, 14, 7, 7, 0xFF, 55, 55); _local9.addBox(0, 0, 7, 7, 0xFF, 55, 55); shapes.push(_local9); _particle = new CircleParticle(0, 0, 12); setGroup(_arg8); } public function destroy(_arg1:Boolean=true):void{ var _local2:int; var _local3:Number; var _local4:Particle; var _local5:SoundChannel; var _local6:Fragment; var _local7:SmallEnergy; _local2 = 0; while (_local2 < 100) { _local4 = Particle(particles.getInstanceForced()); _local4.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), (1 + (Math.random() * 18)), 0xFF, 0xFF, 150); _local2++; }; if (_arg1){ _local2 = 0; while (_local2 < 15) { _local6 = Fragment(fragments.getInstance()); if (_local6 == null){ break; }; _local3 = ((Math.random() * Math.PI) * 2); _local6.add((_pos.x + (Math.sin(_local3) * 10)), (_pos.y + (Math.cos(_local3) * 10)), _local3, (200 * (1 + Math.random())), 0xFF, 0xFF, 150); _local2++; }; _local2 = 0; while (_local2 < 10) { _local7 = SmallEnergy(smallEnergies.getInstance()); if (_local7 == null){ break; }; _local3 = ((Math.random() * Math.PI) * 2); _local7.add((_pos.x + (Math.sin(_local3) * 15)), (_pos.y + (Math.cos(_local3) * 15)), _local3, (300 * (1 + Math.random()))); _local2++; }; _local5 = sound.playSe(3); sound.setVolumeAndPan(_local5, player.getSoundVolume(_pos), player.getSoundPan(_pos)); }; remove(); } override public function remove():void{ removeFromGroup(); super.remove(); } public function add(_arg1:Number, _arg2:Number):void{ setPos(_arg1, _arg2); pvel.x = (pvel.y = 0); cnt = 0; damage = 0; addToGroup(); _particle.visible = false; _particle.mass = 10; _particle.friction = 0.033; } public function drawShape(_arg1:Vector):void{ shapes[0].drawWithoutScroll(_arg1); } override public function update():void{ var _local1:Particle; var _local2:int; super.update(); if (!field.isInYUpper(_pos.y)){ remove(); return; }; if ((Math.abs((_particle.velocity.x - pvel.x)) + Math.abs((_particle.velocity.y - pvel.y))) > 2){ damage++; if (damage >= 5){ destroy(); return; }; }; pvel.x = _particle.velocity.x; pvel.y = _particle.velocity.y; if (((player.hasCollision) && ((_pos.dist(player.pos) < 24)))){ player.destroy(); return; }; cnt++; _local1 = Particle(particles.getInstanceForced()); _local1.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), 3, 0xFF, 0xFF, 150, 0); addForce(0, ((-(Field.GRAVITY) * (10 + (Math.sin((cnt * 0.2)) * 30))) * 0.5)); _local2 = 0; if ((((damage > 0)) && (((cnt % ((5 - damage) * 2)) == 0)))){ _local2 = 1; }; shapes[_local2].draw(_pos); } } }//package abagames.lbr
Section 18
//MinePool (abagames.lbr.MinePool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class MinePool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var smallEnergies:SmallEnergyPool; private var player:Player; private var fragments:FragmentPool; private var sound:SoundHandler; private var particles:ParticlePool; private var group:Group; public function MinePool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Player, _arg5:FragmentPool, _arg6:ParticlePool, _arg7:SmallEnergyPool, _arg8:SoundHandler, _arg9:Group){ this.buffer = _arg2; this.field = _arg3; this.player = _arg4; this.fragments = _arg5; this.particles = _arg6; this.smallEnergies = _arg7; this.sound = _arg8; this.group = _arg9; super(_arg1); } override protected function createActor():Actor{ return (new Mine(buffer, field, player, fragments, particles, smallEnergies, sound, group)); } public function destroy():void{ var _local1:int; var _local2:int; _local1 = actorNum; _local2 = 0; while (_local2 < _local1) { Mine(actors[0]).destroy(false); _local2++; }; } } }//package abagames.lbr
Section 19
//Particle (abagames.lbr.Particle) package abagames.lbr { import flash.display.*; import abagames.util.*; import flash.geom.*; public class Particle extends SimpleActor { private var pos:Vector; private var buffer:BitmapData; private var size:Vector; private var vel:Vector; private var cnt:int; private var color:int; private var gravityRatio:Number; private var rect:Rectangle; private var field:Field; public function Particle(_arg1:BitmapData, _arg2:Field){ this.buffer = _arg1; this.field = _arg2; pos = new Vector(); vel = new Vector(); rect = new Rectangle(0, 0, 3, 3); size = new Vector(3, 3); } override public function update():void{ pos.x = (pos.x + vel.x); pos.y = (pos.y + vel.y); vel.x = (vel.x * 0.95); vel.y = (vel.y * 0.95); vel.y = (vel.y + ((Field.GRAVITY * 0.15) * gravityRatio)); if ((((((pos.x <= field.upperLeftPos.x)) && ((vel.x < 0)))) || ((((pos.x >= field.lowerRightPos.x)) && ((vel.x > 0)))))){ vel.x = (vel.x * -0.8); }; if (!field.isInYScreen(pos.y)){ remove(); return; }; rect.x = (pos.x - 1); rect.y = ((pos.y - 1) + field.scrollY); buffer.fillRect(rect, color); cnt--; if ((((vel.sizeRough < 1)) || ((cnt < 0)))){ remove(); }; } public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:int, _arg7:int, _arg8:Number=1):void{ addVel(_arg1, _arg2, (Math.sin(_arg3) * _arg4), (Math.cos(_arg3) * _arg4), _arg5, _arg6, _arg7, _arg8); } public function addVel(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:int, _arg7:int, _arg8:Number=1):void{ pos.x = _arg1; pos.y = _arg2; vel.x = _arg3; vel.y = _arg4; color = (((65536 * _arg5) + (0x0100 * _arg6)) + _arg7); gravityRatio = _arg8; cnt = (60 + (Math.random() * 20)); } } }//package abagames.lbr
Section 20
//ParticlePool (abagames.lbr.ParticlePool) package abagames.lbr { import flash.display.*; import abagames.util.*; public class ParticlePool extends ActorPool { private var buffer:BitmapData; private var field:Field; public function ParticlePool(_arg1:int, _arg2:BitmapData, _arg3:Field){ this.buffer = _arg2; this.field = _arg3; super(_arg1); } override protected function createActor():Actor{ return (new Particle(buffer, field)); } } }//package abagames.lbr
Section 21
//Player (abagames.lbr.Player) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.media.*; import flash.geom.*; public class Player { private var energy:Number; private var field:Field; private var sound:SoundHandler; private var _pos:Vector; private var noBounceCnt:int; private var aPressed:Boolean; private var cords:CordPool; private var left:int; private var shape:Shape; private var fragments:FragmentPool; private var fireIdx:int; private var particles:ParticlePool; private var buffer:BitmapData; private var gameoverCnt:int; private var extendEnergy:Number; private var _height:int; private var fireCnt:int; private var energyWarningCnt:int; private var isTitle:Boolean; private var parts:BodyPool; private var restartCnt:int; private var rect:Rectangle; private var fireDeg:Number; private var keyState:KeyState; private var shapePos:Vector; private var mainLoop:MainLoop; private var stage:Stage; private static const MAX_ENERGY:Number = 10000; private static const CONNECTED_IDX:Array = [0, 2, 3, 4, 5]; private static const FIRE_FORCE:Number = 320; private static const MIN_SCROLL_VELOCITY_Y:Number = 5; private static const SCROLL_VELOCITY_Y_RATIO:Number = 0.15; private static const FIRE_INTERVAL:int = 3; private static const FIRE_RECOIL_FORCE:Number = 36; private static const RESTART_CNT:int = 60; private static const MOVEMENT_FORCE:Number = 32; public function Player(_arg1:BitmapData, _arg2:KeyState, _arg3:Field, _arg4:FragmentPool, _arg5:ParticlePool, _arg6:Group, _arg7:SoundHandler, _arg8:MainLoop){ this.buffer = _arg1; this.keyState = _arg2; this.field = _arg3; this.sound = _arg7; this.mainLoop = _arg8; this.fragments = _arg4; this.particles = _arg5; _pos = new Vector(); cords = new CordPool(5, _arg1, _arg3, _arg6); parts = new BodyPool(6, _arg1, _arg3, cords, _arg6); rect = new Rectangle(0, 0, 5, 5); shapePos = new Vector(); setBodies(); } public function getEnergy():void{ sound.playSe(5); addEnergy((MAX_ENERGY / 5)); } private function handleExtendEnergy():void{ rect.width = (extendEnergy * 0.0333); rect.x = 12; rect.y = (Lbr.SCREEN_HEIGHT - 7); buffer.fillRect(rect, 0xFF00); } public function getSoundPan(_arg1:Vector):Number{ var _local2:Number; _local2 = (((_arg1.x - _pos.x) / field.size.x) * 4); if (_local2 < -1){ _local2 = -1; } else { if (_local2 > 1){ _local2 = 1; }; }; return (_local2); } public function destroy():void{ var _local1:int; var _local2:Particle; sound.playSe(4); left--; mainLoop.playerDestroyed(); _local1 = 0; while (_local1 < 0x0100) { _local2 = Particle(particles.getInstanceForced()); if (Math.random() < 0.5){ _local2.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), (0.1 + (Math.random() * 7)), 0, 0xFF, 0, 0); } else { _local2.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), (0.1 + (Math.random() * 7)), 0, 0xFF, 0xFF, 0); }; _local1++; }; if (left >= 0){ restartCnt = RESTART_CNT; } else { setGameover(); }; } public function setParams(_arg1:Stage):void{ this.stage = _arg1; } private function extend():void{ sound.playSe(8); left++; } public function init():void{ left = 2; extendEnergy = 0; _height = 0; respawn(); gameoverCnt = 0; aPressed = true; isTitle = false; } public function setHidden():void{ restartCnt = 999999; } public function get height():int{ return (_height); } public function initTitle():void{ respawn(); setHidden(); gameoverCnt = 0; field.scrollVel = (MIN_SCROLL_VELOCITY_Y * SCROLL_VELOCITY_Y_RATIO); isTitle = true; } private function connectBall(_arg1:int, _arg2:int, _arg3:Number):void{ var _local4:Cord; _local4 = Cord(cords.getInstance()); _local4.add(Body(parts.actors[_arg1]), Body(parts.actors[_arg2]), _arg3, 0.4, 0, 0xFF, 0xFF); } public function respawn():void{ var _local1:int; _pos.x = (field.upperLeftPos.x + (field.size.x * 0.5)); _pos.y = field.lowerRightPos.y; Body(parts.actors[0]).setPos(_pos.x, (_pos.y - 2)); Body(parts.actors[1]).setPos(_pos.x, _pos.y); Body(parts.actors[2]).setPos((_pos.x - 3), _pos.y); Body(parts.actors[3]).setPos((_pos.x + 3), _pos.y); Body(parts.actors[4]).setPos((_pos.x - 3), (_pos.y + 3)); Body(parts.actors[5]).setPos((_pos.x + 3), (_pos.y + 3)); _local1 = 0; while (_local1 < 6) { Body(parts.actors[_local1]).clearPosHistory(); _local1++; }; restartCnt = 0; fireCnt = 0; fireIdx = 0; fireDeg = 0; energy = MAX_ENERGY; energyWarningCnt = 0; noBounceCnt = 0; } public function get hasCollision():Boolean{ return ((restartCnt <= 0)); } private function fire(_arg1:int):void{ var _local2:Fragment; var _local3:SoundChannel; var _local4:Number; var _local5:Number; var _local6:int; var _local7:Particle; fireCnt = FIRE_INTERVAL; _local2 = Fragment(fragments.getInstance()); if (_local2 == null){ return; }; _local3 = sound.playSe(1); _local4 = -(fireDeg); if (_local4 > 1){ _local4 = 1; } else { if (_local4 < -1){ _local4 = -1; }; }; sound.setVolumeAndPan(_local3, 1, _local4); _local5 = (fireDeg + Math.PI); _local2.add((Body(parts.actors[_arg1]).pos.x + (Math.sin(_local5) * 20)), (Body(parts.actors[_arg1]).pos.y + (Math.cos(_local5) * 20)), _local5, FIRE_FORCE, 100, 100, 0xFF); addForce(_arg1, (-(Math.sin(_local5)) * FIRE_RECOIL_FORCE), (-(Math.cos(_local5)) * FIRE_RECOIL_FORCE)); _local6 = 0; while (_local6 < 5) { _local7 = Particle(particles.getInstanceForced()); _local7.addVel(Body(parts.actors[_arg1]).pos.x, Body(parts.actors[_arg1]).pos.y, (((Math.sin(_local5) * 10) + (Math.random() * 10)) - 5), (((Math.cos(_local5) * 10) + (Math.random() * 10)) - 5), 100, 100, 0xFF); _local6++; }; } public function drawShape(_arg1:Number, _arg2:Number):void{ Cord(cords.actors[0]).drawShape(_arg1, _arg2, _arg1, (_arg2 - 10)); Cord(cords.actors[1]).drawShape(_arg1, _arg2, (_arg1 - 10), (_arg2 - 2)); Cord(cords.actors[2]).drawShape(_arg1, _arg2, (_arg1 + 10), (_arg2 - 2)); Cord(cords.actors[3]).drawShape(_arg1, _arg2, (_arg1 - 5), (_arg2 + 15)); Cord(cords.actors[4]).drawShape(_arg1, _arg2, (_arg1 + 5), (_arg2 + 15)); shapePos.x = _arg1; shapePos.y = (_arg2 - 10); Body(parts.actors[0]).drawShape(shapePos); shapePos.x = _arg1; shapePos.y = _arg2; Body(parts.actors[1]).drawShape(shapePos); shapePos.x = (_arg1 - 10); shapePos.y = (_arg2 - 2); Body(parts.actors[2]).drawShape(shapePos); shapePos.x = (_arg1 + 10); shapePos.y = (_arg2 - 2); Body(parts.actors[3]).drawShape(shapePos); shapePos.x = (_arg1 - 5); shapePos.y = (_arg2 + 15); Body(parts.actors[4]).drawShape(shapePos); shapePos.x = (_arg1 + 5); shapePos.y = (_arg2 + 15); Body(parts.actors[5]).drawShape(shapePos); } private function addForce(_arg1:int, _arg2:Number, _arg3:Number):void{ var _local4:Body; _local4 = Body(parts.actors[_arg1]); _local4.addForce(_arg2, _arg3); } public function drawBlur():void{ var _local1:Number; var _local2:int; var _local3:Vector; var _local4:int; var _local5:int; _local1 = 0.1; _local2 = Body.POS_HISTORY_MAX; while (_local2 >= 1) { _local3 = Body(parts.actors[1]).getHistoryPos(_local2); _local4 = 0; while (_local4 < 5) { Cord(cords.actors[_local4]).drawShapeBlur(_local3, Body(parts.actors[CONNECTED_IDX[_local4]]).getHistoryPos(_local2), _local1); _local4++; }; _local5 = 0; while (_local5 < 6) { Body(parts.actors[_local5]).drawShapeBlur(Body(parts.actors[_local5]).getHistoryPos(_local2), _local1); _local5++; }; _local1 = (_local1 + 0.1); _local2--; }; } private function setGameover():void{ setHidden(); gameoverCnt = 1; aPressed = true; mainLoop.startGameover(); } public function update():void{ var _local1:int; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:int; Letter.drawNum(_height, (field.size.x - 10), (field.size.y - 22)); Letter.drawString("m", (field.size.x + 11), (field.size.y - 17), 0.66); if (isTitle){ return; }; handleExtendEnergy(); _local1 = 0; while (_local1 < left) { drawShape((20 + (_local1 * 30)), (field.size.y - 27)); _local1++; }; if (restartCnt > 0){ if (restartCnt < 10000){ restartCnt--; if (restartCnt == 0){ respawn(); }; }; field.scrollVel = (field.scrollVel + ((0 - field.scrollVel) * 0.1)); if (gameoverCnt > 0){ gameoverCnt++; if (gameoverCnt > 300){ mainLoop.startTitle(); return; }; if (gameoverCnt > 15){ Letter.drawString("GAME OVER", 120, 200, 0.7); if (keyState.a){ if (!aPressed){ mainLoop.startTitle(); }; aPressed = true; } else { aPressed = false; }; }; }; return; }; _pos.x = Body(parts.actors[1]).pos.x; _pos.y = Body(parts.actors[1]).pos.y; _local2 = ((field.upperLeftPos.y + (field.size.y * 0.6)) - pos.y); if (_local2 < MIN_SCROLL_VELOCITY_Y){ _local2 = MIN_SCROLL_VELOCITY_Y; }; field.scrollVel = (field.scrollVel + (((_local2 * SCROLL_VELOCITY_Y_RATIO) - field.scrollVel) * 0.1)); _local3 = 0; _local4 = 0; if (keyState.left){ _local3 = -1; }; if (keyState.right){ _local3 = 1; }; if (keyState.up){ _local4 = -1; }; if (keyState.down){ _local4 = 1; }; if (((!((_local3 == 0))) && (!((_local4 == 0))))){ _local3 = (_local3 * 0.7); _local4 = (_local4 * 0.7); }; fireDeg = (fireDeg + ((((-(_local3) * Math.PI) / 2) - fireDeg) * 0.1)); _local3 = (_local3 * MOVEMENT_FORCE); _local4 = (_local4 * MOVEMENT_FORCE); if (_local3 < 0){ addForce(1, (_local3 / 2), 0); addForce(3, (_local3 / 2), 0); } else { if (_local3 > 0){ addForce(3, _local3, 0); }; }; if (_local4 < 0){ addForce(1, 0, _local4); } else { if (_local4 > 0){ addForce(4, 0, (_local4 / 2)); addForce(5, 0, (_local4 / 2)); }; }; fireCnt--; if (keyState.a){ if (((!(aPressed)) && ((fireCnt <= 0)))){ fireIdx++; fire(((fireIdx % 2) + 2)); }; } else { aPressed = false; }; Body(parts.actors[0]).addForce(0, -3); Body(parts.actors[2]).addForce(-1, -0.5); Body(parts.actors[3]).addForce(1, -0.5); Body(parts.actors[4]).addForce(-0.5, 2); Body(parts.actors[5]).addForce(0.5, 2); noBounceCnt--; if (_pos.y > (field.lowerRightPos.y - (field.size.y * 0.04))){ _pos.y = (field.lowerRightPos.y - (field.size.y * 0.06)); Body(parts.actors[1]).setPos(_pos.x, _pos.y); if (noBounceCnt <= 0){ Body(parts.actors[1]).addForce(0, -300); noBounceCnt = 10; }; }; cords.update(); parts.update(); _local5 = ((field.size.y - _pos.y) / Field.PIXEL_METER_RATIO); if (_local5 > _height){ _height = _local5; }; handleEnergy(); } private function setBodies():void{ var _local1:int; var _local2:Body; _local1 = 0; while (_local1 < 6) { _local2 = Body(parts.getInstance()); if (_local1 == 0){ _local2.add(0, 0, 8); } else { _local2.add(0, 0, 5); }; _local1++; }; connectBall(1, 0, 5); connectBall(1, 2, 10); connectBall(1, 3, 10); connectBall(1, 4, 15); connectBall(1, 5, 15); } public function get pos():Vector{ return (_pos); } private function handleEnergy():void{ energy = (energy - stage.energyDecreaseAmount); if (energy <= 0){ destroy(); return; }; rect.width = (energy * 0.0333); rect.x = ((field.size.x + 18) - rect.width); rect.y = 2; if (energy > (MAX_ENERGY / 5)){ buffer.fillRect(rect, 0xFF00); } else { buffer.fillRect(rect, 0xFFFF00); if ((energyWarningCnt % 30) == 0){ sound.playSe(6); }; energyWarningCnt++; }; } public function getSmallEnergy():void{ sound.playSe(7); addEnergy((MAX_ENERGY / 150)); } public function getSoundVolume(_arg1:Vector):Number{ return ((1 / ((Math.abs((_arg1.y - _pos.y)) * 0.005) + 1))); } private function addEnergy(_arg1:Number):void{ energy = (energy + _arg1); if (energy > MAX_ENERGY){ energy = MAX_ENERGY; }; if (left < 9){ extendEnergy = (extendEnergy + (_arg1 / ((1 + left) * (1 + left)))); }; if (extendEnergy > MAX_ENERGY){ extendEnergy = 0; extend(); }; } } }//package abagames.lbr
Section 22
//Shape (abagames.lbr.Shape) package abagames.lbr { import flash.display.*; import abagames.util.*; public class Shape { private var buffer:BitmapData; private var boxes:Array; private var field:Field; public static var distortion:Number = 1; public function Shape(_arg1:BitmapData, _arg2:Field){ this.buffer = _arg1; this.field = _arg2; boxes = new Array(); } public function draw(_arg1:Vector):void{ var _local2:Box; for each (_local2 in boxes) { _local2.draw(_arg1); }; } public function drawDistorted(_arg1:Vector):void{ var _local2:Box; for each (_local2 in boxes) { _local2.drawDistorted(_arg1); }; } public function setColor(_arg1:int, _arg2:int, _arg3:int):void{ var _local4:Box; for each (_local4 in boxes) { _local4.setColor(_arg1, _arg2, _arg3); }; } public function addBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:int, _arg7:int):void{ var _local8:Box; _local8 = new Box(buffer, field, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7); boxes.push(_local8); } public function drawBlur(_arg1:Vector, _arg2:Number):void{ var _local3:Box; for each (_local3 in boxes) { _local3.drawBlur(_arg1, _arg2); }; } public function drawTilt(_arg1:Vector, _arg2:Number):void{ var _local3:Box; for each (_local3 in boxes) { _local3.drawTilt(_arg1, _arg2); }; } public function drawWithoutScroll(_arg1:Vector):void{ var _local2:Box; for each (_local2 in boxes) { _local2.drawWithoutScroll(_arg1); }; } public function drawDistortedWithoutScroll(_arg1:Vector):void{ var _local2:Box; for each (_local2 in boxes) { _local2.drawDistortedWithoutScroll(_arg1); }; } public function drawSized(_arg1:Vector, _arg2:Number):void{ var _local3:Box; for each (_local3 in boxes) { _local3.drawSized(_arg1, _arg2); }; } } }//package abagames.lbr import flash.display.*; import abagames.util.*; import flash.geom.*; class Box { private var buffer:BitmapData; private var depth:Number; private var size:Vector; private var pos:Vector; private var depthColor:uint; private var b:int; private var color:uint; private var rect:Rectangle; private var g:int; private var r:int; private var field:Field; private var tp:Vector; private function Box(_arg1:BitmapData, _arg2:Field, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:int, _arg8:int, _arg9:int){ this.buffer = _arg1; this.field = _arg2; pos = new Vector((_arg3 - (_arg5 / 2)), (_arg4 - (_arg6 / 2))); size = new Vector(_arg5, _arg6); rect = new Rectangle(0, 0, _arg5, _arg6); setColor(_arg7, _arg8, _arg9); tp = new Vector(); } public function draw(_arg1:Vector):void{ rect.x = (_arg1.x + pos.x); rect.y = ((_arg1.y + pos.y) + field.scrollY); drawRect(_arg1); } public function drawWithoutScroll(_arg1:Vector):void{ rect.x = (_arg1.x + pos.x); rect.y = (_arg1.y + pos.y); drawRect(_arg1); } public function drawBlur(_arg1:Vector, _arg2:Number):void{ var _local3:int; rect.x = ((_arg1.x + pos.x) - ((size.x * ((2 - _arg2) - 1)) / 2)); rect.y = (((_arg1.y + pos.y) + field.scrollY) - ((size.y * ((2 - _arg2) - 1)) / 2)); rect.width = (size.x * (2 - _arg2)); rect.height = (size.y * (2 - _arg2)); _local3 = (((int((r * _arg2)) * 65536) + (int((g * _arg2)) * 0x0100)) + int((b * _arg2))); buffer.fillRect(rect, _local3); } public function drawDistortedWithoutScroll(_arg1:Vector):void{ rect.x = (_arg1.x + pos.x); rect.y = (_arg1.y + pos.y); rect.width = (size.x * Shape.distortion); rect.height = (size.y * Shape.distortion); drawRect(_arg1); } public function drawDistorted(_arg1:Vector):void{ rect.x = (_arg1.x + pos.x); rect.y = ((_arg1.y + pos.y) + field.scrollY); rect.width = (size.x * Shape.distortion); rect.height = (size.y * Shape.distortion); drawRect(_arg1); } public function drawSized(_arg1:Vector, _arg2:Number):void{ rect.x = (_arg1.x + (pos.x * _arg2)); rect.y = ((_arg1.y + (pos.y * _arg2)) + field.scrollY); drawRect(_arg1); } public function setColor(_arg1:int, _arg2:int, _arg3:int):void{ color = (((_arg1 * 65536) + (_arg2 * 0x0100)) + _arg3); this.r = _arg1; this.g = _arg2; this.b = _arg3; } private function drawRect(_arg1:Vector):void{ buffer.fillRect(rect, color); } public function drawTilt(_arg1:Vector, _arg2:Number):void{ tp.x = ((Math.cos(_arg2) * pos.x) - (Math.sin(_arg2) * pos.y)); tp.y = ((Math.sin(_arg2) * pos.x) + (Math.cos(_arg2) * pos.y)); rect.x = (_arg1.x - tp.x); rect.y = ((_arg1.y + tp.y) + field.scrollY); drawRect(_arg1); } }
Section 23
//SmallEnergy (abagames.lbr.SmallEnergy) package abagames.lbr { import flash.display.*; import org.cove.ape.*; public class SmallEnergy extends ApeParticleActor { private var stayCnt:int; private var player:Player; private var shape:Shape; private var buffer:BitmapData; private var field:Field; private var particles:ParticlePool; public function SmallEnergy(_arg1:BitmapData, _arg2:Field, _arg3:Player, _arg4:ParticlePool, _arg5:Group){ this.buffer = _arg1; this.field = _arg2; this.player = _arg3; this.particles = _arg4; shape = new Shape(_arg1, _arg2); shape.addBox(0, -5, 7, 2, 0, 0xFF, 0); shape.addBox(0, 0, 7, 2, 0, 0xFF, 0); shape.addBox(0, 5, 7, 2, 0, 0xFF, 0); shape.addBox(-5, 0, 2, 10, 0, 0xFF, 0); _particle = new CircleParticle(0, 0, 3); _particle.mass = 3; _particle.friction = 0; setGroup(_arg5); } override public function remove():void{ removeFromGroup(); super.remove(); } override public function update():void{ var _local1:int; var _local2:Particle; super.update(); if (!field.isInYUpper(_pos.y)){ remove(); return; }; if (((player.hasCollision) && ((_pos.dist(player.pos) < 30)))){ player.getSmallEnergy(); _local1 = 0; while (_local1 < 8) { _local2 = Particle(particles.getInstanceForced()); _local2.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), 1, 0, 0xFF, 0, 0.2); _local1++; }; remove(); return; }; if ((Math.abs(_particle.velocity.x) + Math.abs(_particle.velocity.y)) < 1){ stayCnt++; if (stayCnt > 3){ remove(); return; }; }; addForce(0, (Field.GRAVITY * 2)); shape.drawDistorted(_pos); } public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ setPos(_arg1, _arg2); addForce((Math.sin(_arg3) * _arg4), (Math.cos(_arg3) * _arg4)); addToGroup(); _particle.visible = false; stayCnt = 0; } } }//package abagames.lbr
Section 24
//SmallEnergyPool (abagames.lbr.SmallEnergyPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class SmallEnergyPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var player:Player; private var particles:ParticlePool; private var group:Group; public function SmallEnergyPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Player, _arg5:ParticlePool, _arg6:Group){ this.buffer = _arg2; this.field = _arg3; this.player = _arg4; this.particles = _arg5; this.group = _arg6; super(_arg1); } override protected function createActor():Actor{ return (new SmallEnergy(buffer, field, player, particles, group)); } } }//package abagames.lbr
Section 25
//SolidBall (abagames.lbr.SolidBall) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; import flash.media.*; import flash.geom.*; public class SolidBall extends ApeParticleActor { private var sound:SoundHandler; private var radius:Number; private var fragments:FragmentPool; private var particles:ParticlePool; private var hardness:Number; private var buffer:BitmapData; private var burstRadius:Number; private var player:Player; private var rect:Rectangle; private var cnt:int; private var field:Field; private static const BALL_STRIP_WIDTH:Number = 3; public function SolidBall(_arg1:BitmapData, _arg2:Field, _arg3:Player, _arg4:FragmentPool, _arg5:ParticlePool, _arg6:SoundHandler, _arg7:Group){ this.buffer = _arg1; this.field = _arg2; this.player = _arg3; this.fragments = _arg4; this.particles = _arg5; this.sound = _arg6; _particle = new CircleParticle(0, 0, 6); setGroup(_arg7); rect = new Rectangle(0, 0, BALL_STRIP_WIDTH, BALL_STRIP_WIDTH); } public function destroy(_arg1:Boolean=true):void{ var _local2:int; var _local3:Number; var _local4:Particle; var _local5:SoundChannel; var _local6:Fragment; _local2 = 0; while (_local2 < ((radius * 3) * 0.4)) { _local4 = Particle(particles.getInstanceForced()); _local4.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), (5 + (Math.random() * 15)), 0xFF, 100, 0xFF); _local2++; }; if (_arg1){ _local2 = 0; while (_local2 < ((radius * 3) * 0.2)) { _local6 = Fragment(fragments.getInstance()); if (_local6 == null){ break; }; _local3 = ((Math.random() * Math.PI) * 2); _local6.add((_pos.x + (Math.sin(_local3) * radius)), (_pos.y + (Math.cos(_local3) * radius)), _local3, (100 * (1 + Math.random())), 0xFF, 100, 0xFF); _local2++; }; _local5 = sound.playSe(2); sound.setVolumeAndPan(_local5, player.getSoundVolume(_pos), player.getSoundPan(_pos)); }; remove(); } override public function remove():void{ removeFromGroup(); super.remove(); } public function add(_arg1:Number, _arg2:Number, _arg3:Number):void{ cnt = 0; addToGroup(); _particle.visible = false; this.radius = _arg3; CircleParticle(_particle).radius = _arg3; _particle.elasticity = 0.1; _particle.mass = (_arg3 * 0.15); _particle.friction = 0.01; setPos(_arg1, _arg2); } private function draw():void{ var _local1:int; var _local2:int; var _local3:Number; var _local4:Number; _local2 = ((cnt - 500) / 20); if ((((_local2 > 0)) && (((cnt % ((5 - _local2) * 2)) == 0)))){ _local1 = 13413034; } else { _local1 = 16729156; }; drawBox(_pos.x, (_pos.y + field.scrollY), radius, _local1); _local3 = (BALL_STRIP_WIDTH * 2); while (_local3 < radius) { _local4 = Math.sqrt(((radius * radius) - (_local3 * _local3))); drawBox((_pos.x + _local3), (_pos.y + field.scrollY), _local4, _local1); drawBox((_pos.x - _local3), (_pos.y + field.scrollY), _local4, _local1); _local3 = (_local3 + (BALL_STRIP_WIDTH * 2)); }; } public function drawShape(_arg1:Vector):void{ var _local2:Number; var _local3:int; var _local4:Number; var _local5:Number; _local2 = 20; _local3 = 16729156; drawBox(_arg1.x, _arg1.y, _local2, _local3); _local4 = (BALL_STRIP_WIDTH * 2); while (_local4 < _local2) { _local5 = Math.sqrt(((_local2 * _local2) - (_local4 * _local4))); drawBox((_arg1.x + _local4), _arg1.y, _local5, _local3); drawBox((_arg1.x - _local4), _arg1.y, _local5, _local3); _local4 = (_local4 + (BALL_STRIP_WIDTH * 2)); }; } override public function update():void{ super.update(); if (!field.isInY(_pos.y)){ remove(); return; }; cnt++; if (cnt > 600){ destroy(); return; }; draw(); } private function drawBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:int):void{ rect.x = (_arg1 - (rect.width / 2)); rect.y = (_arg2 - _arg3); rect.height = (_arg3 * 2); buffer.fillRect(rect, _arg4); } } }//package abagames.lbr
Section 26
//SolidBallPool (abagames.lbr.SolidBallPool) package abagames.lbr { import flash.display.*; import abagames.util.*; import org.cove.ape.*; public class SolidBallPool extends ActorPool { private var buffer:BitmapData; private var field:Field; private var player:Player; private var fragments:FragmentPool; private var sound:SoundHandler; private var particles:ParticlePool; private var group:Group; public function SolidBallPool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Player, _arg5:FragmentPool, _arg6:ParticlePool, _arg7:SoundHandler, _arg8:Group){ this.buffer = _arg2; this.field = _arg3; this.player = _arg4; this.fragments = _arg5; this.particles = _arg6; this.sound = _arg7; this.group = _arg8; super(_arg1); } override protected function createActor():Actor{ return (new SolidBall(buffer, field, player, fragments, particles, sound, group)); } public function destroy():void{ var _local1:int; var _local2:int; _local1 = actorNum; _local2 = 0; while (_local2 < _local1) { SolidBall(actors[0]).destroy(false); _local2++; }; } } }//package abagames.lbr
Section 27
//SoundHandler (abagames.lbr.SoundHandler) package abagames.lbr { import flash.media.*; public class SoundHandler { private var bgmTransform:SoundTransform; private var bgmFadeout:Boolean; private var sounds:Array; private var bgmChannel:SoundChannel; public function SoundHandler(_arg1:Array){ this.sounds = _arg1; bgmTransform = new SoundTransform(); } public function setVolumeAndPan(_arg1:SoundChannel, _arg2:Number, _arg3:Number):void{ var _local4:SoundTransform; if (_arg1 == null){ return; }; _local4 = _arg1.soundTransform; _local4.volume = _arg2; _local4.pan = _arg3; _arg1.soundTransform = _local4; } public function startBgm():void{ bgmTransform.volume = 1; bgmFadeout = false; bgmChannel = sounds[0].play(0, 99999, bgmTransform); } public function update():void{ if (bgmChannel != null){ Shape.distortion = (0.5 + ((bgmChannel.leftPeak + bgmChannel.rightPeak) * 0.5)); if (bgmFadeout){ bgmTransform.volume = (bgmTransform.volume - 0.015); if (bgmTransform.volume <= 0.05){ bgmTransform.volume = 0; bgmFadeout = false; }; bgmChannel.soundTransform = bgmTransform; }; } else { Shape.distortion = 1; }; } public function stopBgm():void{ bgmFadeout = false; if (bgmChannel != null){ bgmChannel.stop(); }; bgmChannel = null; } public function playSe(_arg1:int, _arg2:int=1, _arg3:SoundTransform=null):SoundChannel{ return (sounds[_arg1].play(0, _arg2, _arg3)); } public function fadeoutBgm():void{ bgmFadeout = true; } } }//package abagames.lbr
Section 28
//Stage (abagames.lbr.Stage) package abagames.lbr { public class Stage { private var mines:MinePool; private var addEnergyHeight:Number; private var appearancePattern:int; private var balls:BallPool; private var cords:CordPool; private var addMineHeight:Number; private var addBallHeight:Number; private var energies:EnergyPool; private var floors:FloorPool; private var solidBalls:SolidBallPool; private var cnt:int; private var addFloorHeight:Number; private var field:Field; private static const DEFAULT_CORD_LENGTH:Number = 16; private static const NEXT_BALL_APPEARE_CNT:int = 20; public function Stage(_arg1:ParticlePool, _arg2:Player, _arg3:BallPool, _arg4:SolidBallPool, _arg5:CordPool, _arg6:MinePool, _arg7:EnergyPool, _arg8:FloorPool, _arg9:Field){ this.balls = _arg3; this.solidBalls = _arg4; this.cords = _arg5; this.mines = _arg6; this.energies = _arg7; this.floors = _arg8; this.field = _arg9; } public function update():void{ var _local1:int; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:int; cnt++; addBallHeight = (addBallHeight - field.scrollVel); if (addBallHeight <= 0){ _local1 = ((60 + (Math.random() * 10)) / getDifficulty(900)); if (_local1 < 10){ _local1 = 10; }; addBallHeight = (addBallHeight + _local1); addBall(); }; addFloorHeight = (addFloorHeight - field.scrollVel); if (addFloorHeight <= 0){ addFloorHeight = (addFloorHeight + (150 + (Math.random() * 400))); _local4 = Math.random(); if (_local4 < 0.48){ _local2 = (field.upperLeftPos.x + (Floor.WIDTH * 0.4)); _local3 = (field.upperLeftPos.x + (field.size.x * (0.33 + (Math.random() * 0.33)))); } else { if (_local4 < 0.96){ _local2 = (field.lowerRightPos.x - (field.size.x * (0.33 + (Math.random() * 0.33)))); _local3 = (field.lowerRightPos.x - (Floor.WIDTH * 0.4)); } else { _local2 = (field.upperLeftPos.x + (Floor.WIDTH * 0.4)); _local3 = (field.lowerRightPos.x - (Floor.WIDTH * 0.4)); }; }; addFloor(_local2, _local3, field.upperLeftPos.y); }; addMineHeight = (addMineHeight - field.scrollVel); if (addMineHeight <= 0){ _local5 = ((500 + (Math.random() * 250)) / getDifficulty(1200)); if (_local5 < 20){ _local5 = 20; }; addMineHeight = (addMineHeight + _local5); addMine(); }; addEnergyHeight = (addEnergyHeight - field.scrollVel); if (addEnergyHeight <= 0){ addEnergyHeight = (addEnergyHeight + 640); addEnegry(); }; } public function init():void{ addBallHeight = 0; addMineHeight = 500; addFloorHeight = 100; addEnergyHeight = 50; cnt = 0; } private function addEnegry():void{ var _local1:Energy; _local1 = Energy(energies.getInstance()); if (_local1 != null){ _local1.add((field.upperLeftPos.x + (field.size.x * (0.2 + (Math.random() * 0.6)))), (field.upperLeftPos.y - (field.size.y * 0.05))); }; } private function addBall():void{ var _local1:Number; var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Ball; var _local6:SolidBall; _local1 = (field.upperLeftPos.x + (field.size.x * ((Math.random() * 0.8) + 0.1))); _local2 = (field.upperLeftPos.y - (field.size.y * 0.2)); _local3 = (20 + (Math.random() * 30)); if (Math.random() < 0.5){ _local4 = 1; } else { _local4 = (getDifficulty(1800) + Math.random()); }; if (_local4 > 6){ _local4 = 6; }; if (Math.random() < (0.5 - (1 / getDifficulty(2400)))){ _local6 = SolidBall(solidBalls.getInstance()); if (_local6 != null){ _local6.add(_local1, _local2, _local3); return; }; }; _local5 = Ball(balls.getInstance()); if (_local5 == null){ return; }; _local5.add(_local1, _local2, _local3, (_local3 * 1.5), _local4); } private function addMine():void{ var _local1:Mine; var _local2:Number; var _local3:Number; _local1 = Mine(mines.getInstance()); if (_local1 != null){ _local2 = Math.random(); _local3 = field.upperLeftPos.x; if (_local2 < 0.2){ _local3 = (_local3 + (field.size.x * 0.05)); } else { if (_local2 > 0.8){ _local3 = (_local3 + (field.size.x * 0.95)); } else { _local3 = (_local3 + (field.size.x * (0.1 + (Math.random() * 0.8)))); }; }; _local1.add(_local3, (field.upperLeftPos.y - (field.size.y * 0.05))); }; } private function addFloor(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local4:Floor; var _local5:Number; var _local6:Floor; var _local7:int; var _local8:int; var _local9:Cord; _local4 = Floor(floors.getInstance()); if (_local4 == null){ return; }; _local5 = _arg1; _local4.add(_arg1, _arg3, true); _local7 = (int(((_arg2 - _arg1) / 64)) + 1); _local8 = 0; while (_local8 < _local7) { _local6 = _local4; _local5 = (_local5 + ((_arg2 - _arg1) / _local7)); _local4 = Floor(floors.getInstance()); if (_local4 == null){ break; }; _local4.add(_local5, _arg3, (_local8 == (_local7 - 1))); _local9 = Cord(cords.getInstance()); if (_local9 == null){ break; }; _local9.add(_local6, _local4, (((_arg2 - _arg1) / _local7) * 0.5), 0.5); _local8++; }; } private function getDifficulty(_arg1:int):Number{ var _local2:Number; var _local3:Number; _local2 = (Number((cnt % _arg1)) / _arg1); _local3 = int((cnt / _arg1)); return ((1 + ((_local2 * (_local3 + 1)) * 2))); } public function get energyDecreaseAmount():Number{ return ((7 + (Math.sqrt(cnt) * 0.02))); } } }//package abagames.lbr
Section 29
//Store (abagames.lbr.Store) package abagames.lbr { import flash.net.*; public class Store { private var _highScores:Array; private var data:Object; private var sharedObject:SharedObject; public static const HIGH_SCORES_NUM:int = 10; private static const VERSION_NUM:int = 20; public function Store(){ sharedObject = SharedObject.getLocal("store"); data = sharedObject.data; load(); } public function get highScores():Array{ return (_highScores); } private function load():void{ if ((((data.versionNum == null)) && (!((data.versionNum == VERSION_NUM))))){ initData(); } else { _highScores = data._highScores; }; } public function storeScore(_arg1:int):void{ var _local2:int; var _local3:int; _local2 = 0; while (_local2 < HIGH_SCORES_NUM) { if (_arg1 > _highScores[_local2]){ _local3 = (HIGH_SCORES_NUM - 1); while (_local3 > _local2) { _highScores[_local3] = _highScores[(_local3 - 1)]; _local3--; }; _highScores[_local2] = _arg1; save(); return; }; _local2++; }; } private function initData():void{ var _local1:int; _highScores = new Array(); _local1 = 0; while (_local1 < HIGH_SCORES_NUM) { _highScores.push(((10 - _local1) * 100)); _local1++; }; save(); } private function save():void{ data.versionNum = VERSION_NUM; data._highScores = _highScores; sharedObject.flush(); } } }//package abagames.lbr
Section 30
//Title (abagames.lbr.Title) package abagames.lbr { import flash.display.*; import abagames.util.*; import flash.geom.*; public class Title { private const ORDER_STRINGS:Array; private var buffer:BitmapData; private var aPressed:Boolean; private var balls:BallPool; private var player:Player; private var mines:MinePool; private var highScores:Array; private var energies:EnergyPool; private var solidBalls:SolidBallPool; private var rect:Rectangle; private var cnt:int; private var keyState:KeyState; private var shapePos:Vector; private var field:Field; private var mainLoop:MainLoop; public function Title(_arg1:BitmapData, _arg2:Field, _arg3:KeyState, _arg4:Player, _arg5:Store, _arg6:BallPool, _arg7:SolidBallPool, _arg8:MinePool, _arg9:EnergyPool, _arg10:MainLoop){ ORDER_STRINGS = ["ST", "ND", "RD", "TH"]; super(); this.buffer = _arg1; this.field = _arg2; this.keyState = _arg3; this.player = _arg4; this.balls = _arg6; this.solidBalls = _arg7; this.mines = _arg8; this.energies = _arg9; this.mainLoop = _arg10; highScores = _arg5.highScores; rect = new Rectangle(); shapePos = new Vector(); } public function init():void{ aPressed = true; cnt = 0; } private function drawCharacters(_arg1:int):void{ if (_arg1 < 30){ return; }; player.drawShape(120, 180); Letter.drawString("YOU", 190, 180, 0.7); if (_arg1 < 60){ return; }; shapePos.x = 95; shapePos.y = 230; Ball(balls.actors[0]).drawShape(shapePos); shapePos.x = 145; SolidBall(solidBalls.actors[0]).drawShape(shapePos); Letter.drawString("BALL", 190, 230, 0.7); if (_arg1 < 90){ return; }; shapePos.x = 120; shapePos.y = 280; Mine(mines.actors[0]).drawShape(shapePos); Letter.drawString("MINE", 190, 280, 0.7); if (_arg1 < 120){ return; }; shapePos.y = 330; Energy(energies.actors[0]).drawShape(shapePos); Letter.drawString("ENERGY", 190, 330, 0.7); } private function drawHighScores(_arg1:int):void{ var _local2:int; var _local3:Number; var _local4:int; var _local5:int; var _local6:int; _local2 = int((_arg1 / 15)); _local3 = 0.65; if (_local2 > Store.HIGH_SCORES_NUM){ _local2 = Store.HIGH_SCORES_NUM; }; _local4 = 0; while (_local4 < _local2) { _local5 = ((_local4 * 20) + 160); Letter.drawNum((_local4 + 1), 105, _local5, _local3); _local6 = _local4; if (_local6 > 3){ _local6 = 3; }; Letter.drawString(ORDER_STRINGS[_local6], 120, _local5, _local3); Letter.drawNum(highScores[_local4], 230, _local5, _local3); Letter.drawString("m", 245, (_local5 + 2), (_local3 * 0.8)); _local4++; }; } private function drawBox(_arg1:int, _arg2:int, _arg3:int, _arg4:int):void{ rect.x = _arg1; rect.y = _arg2; rect.width = _arg3; rect.height = _arg4; buffer.fillRect(rect, 0xCCCCCC); } public function update():void{ cnt++; drawTitle(); if ((cnt % 40) < 20){ Letter.drawString("PUSH SHOT BUTTON", 80, 400, 0.7); }; if ((cnt % 640) < 320){ drawHighScores((cnt % 640)); } else { drawCharacters(((cnt % 640) - 320)); }; if (keyState.a){ if (!aPressed){ mainLoop.startInGame(); }; aPressed = true; } else { aPressed = false; }; } private function drawTitle():void{ Letter.drawString("LEAST", 120, 30, 0.9); Letter.drawString("BEST", 150, 70, 0.9); Letter.drawString("ROOM", 180, 110, 0.9); drawBox(105, 10, 1, 120); drawBox(247, 10, 1, 120); drawBox(105, 49, 106, 1); drawBox(141, 90, 106, 1); } } }//package abagames.lbr
Section 31
//Actor (abagames.util.Actor) package abagames.util { public interface Actor { function get removed():Boolean; function set index(_arg1:int):void; function set removed(_arg1:Boolean):void; function update():void; function remove():void; function get exists():Boolean; function setActorPool(_arg1:ActorPool):void; } }//package abagames.util
Section 32
//ActorPool (abagames.util.ActorPool) package abagames.util { public class ActorPool { protected var actorIdx:int; protected var _instancesNum:int; protected var _maxInstancesNum:int; protected var _actorNum:int; protected var _actors:Array; public function ActorPool(_arg1:int){ var _local2:int; var _local3:Actor; super(); _actors = new Array(); _local2 = 0; while (_local2 < _arg1) { _local3 = createActor(); _local3.setActorPool(this); _local3.index = _local2; _local3.removed = false; _actors.push(_local3); _local2++; }; _maxInstancesNum = (_instancesNum = _arg1); clear(); } public function getInstanceForced():Actor{ var _local1:Actor; _local1 = getInstance(); if (_local1 != null){ return (_local1); }; actorIdx++; if (actorIdx >= _actors.length){ actorIdx = 0; }; return (_actors[actorIdx]); } public function update():void{ var _local1:int; var _local2:Actor; _local1 = 0; while (_local1 < _actorNum) { _local2 = _actors[_local1]; _local2.update(); if (_local2.removed){ _local2.removed = false; _local1--; }; _local1++; }; } public function getInstance():Actor{ if (_actorNum >= _instancesNum){ return (null); }; _actorNum++; return (_actors[(_actorNum - 1)]); } public function clear():void{ var _local1:int; var _local2:int; _local1 = _actorNum; _local2 = 0; while (_local2 < _local1) { _actors[0].remove(); _local2++; }; _actorNum = 0; actorIdx = -1; } public function get actorNum():int{ return (_actorNum); } public function remove(_arg1:int):void{ var _local2:Actor; _actorNum--; _local2 = _actors[_arg1]; _actors[_arg1] = _actors[_actorNum]; _actors[_arg1].index = _arg1; _actors[_actorNum] = _local2; _actors[_actorNum].index = _actorNum; _actors[_actorNum].removed = true; } public function set instancesNum(_arg1:int):void{ if (_arg1 > _maxInstancesNum){ _instancesNum = _maxInstancesNum; } else { _instancesNum = _arg1; }; } protected function createActor():Actor{ return (null); } public function get actors():Array{ return (_actors); } public function get hasNextInstance():Boolean{ return ((_actorNum < _instancesNum)); } public function get instancesNum():int{ return (_instancesNum); } public function get maxInstancesNum():int{ return (_maxInstancesNum); } public function existsActor(_arg1:int):Boolean{ return ((_arg1 < _actorNum)); } } }//package abagames.util
Section 33
//KeyState (abagames.util.KeyState) package abagames.util { import flash.events.*; public class KeyState { public var a:Boolean;// = false public var down:Boolean;// = false public var esc:Boolean;// = false public var left:Boolean;// = false public var p:Boolean;// = false public var up:Boolean;// = false public var right:Boolean;// = false public function KeyState(){ left = false; up = false; right = false; down = false; a = false; esc = false; p = false; super(); } public function onKeyDown(_arg1:KeyboardEvent):void{ switch (_arg1.keyCode){ case 37: case 65: left = true; break; case 38: case 87: up = true; break; case 39: case 68: right = true; break; case 40: case 83: down = true; break; case 90: case 191: a = true; break; case 27: esc = true; break; case 80: case 67: p = true; break; }; } public function onKeyUp(_arg1:KeyboardEvent):void{ switch (_arg1.keyCode){ case 37: case 65: left = false; break; case 38: case 87: up = false; break; case 39: case 68: right = false; break; case 40: case 83: down = false; break; case 90: case 191: a = false; break; case 27: esc = false; break; case 80: case 67: p = false; break; }; } } }//package abagames.util
Section 34
//SimpleActor (abagames.util.SimpleActor) package abagames.util { public class SimpleActor implements Actor { private var _removed:Boolean; protected var actorPool:ActorPool; private var idx:int; public function get removed():Boolean{ return (_removed); } public function get exists():Boolean{ return (actorPool.existsActor(idx)); } public function set index(_arg1:int):void{ idx = _arg1; } public function setActorPool(_arg1:ActorPool):void{ actorPool = _arg1; } public function update():void{ } public function remove():void{ actorPool.remove(idx); } public function set removed(_arg1:Boolean):void{ _removed = _arg1; } } }//package abagames.util
Section 35
//Vector (abagames.util.Vector) package abagames.util { public class Vector { public var x:Number;// = 0 public var y:Number;// = 0 public function Vector(_arg1:Number=0, _arg2:Number=0){ x = 0; y = 0; super(); this.x = _arg1; this.y = _arg2; } public function mul(_arg1:Number):void{ x = (x * _arg1); y = (y * _arg1); } public function checkCross(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number):Boolean{ var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; var _local21:Number; if (x < _arg1.x){ _local5 = (x - _arg4); _local7 = (_arg1.x + _arg4); } else { _local5 = (_arg1.x - _arg4); _local7 = (x + _arg4); }; if (y < _arg1.y){ _local6 = (y - _arg4); _local8 = (_arg1.y + _arg4); } else { _local6 = (_arg1.y - _arg4); _local8 = (y + _arg4); }; if (_arg3.y < _arg2.y){ _local10 = (_arg3.y - _arg4); _local12 = (_arg2.y + _arg4); } else { _local10 = (_arg2.y - _arg4); _local12 = (_arg3.y + _arg4); }; if ((((_local8 >= _local10)) && ((_local12 >= _local6)))){ if (_arg3.x < _arg2.x){ _local9 = (_arg3.x - _arg4); _local11 = (_arg2.x + _arg4); } else { _local9 = (_arg2.x - _arg4); _local11 = (_arg3.x + _arg4); }; if ((((_local7 >= _local9)) && ((_local11 >= _local5)))){ _local13 = (y - _arg1.y); _local14 = (_arg1.x - x); _local15 = ((_arg1.x * y) - (_arg1.y * x)); _local16 = (_arg3.y - _arg2.y); _local17 = (_arg2.x - _arg3.x); _local18 = ((_arg2.x * _arg3.y) - (_arg2.y * _arg3.x)); _local19 = ((_local14 * _local16) - (_local13 * _local17)); if (_local19 != 0){ _local20 = (((_local14 * _local18) - (_local15 * _local17)) / _local19); _local21 = (((_local15 * _local16) - (_local13 * _local18)) / _local19); if ((((((((((((((((_local5 <= _local20)) && ((_local20 <= _local7)))) && ((_local6 <= _local21)))) && ((_local21 <= _local8)))) && ((_local9 <= _local20)))) && ((_local20 <= _local11)))) && ((_local10 <= _local21)))) && ((_local21 <= _local12)))){ return (true); }; }; }; }; return (false); } public function dist(_arg1:Vector):Number{ var _local2:Number; var _local3:Number; _local2 = (_arg1.x - x); _local3 = (_arg1.y - y); return (Math.sqrt(((_local2 * _local2) + (_local3 * _local3)))); } public function add(_arg1:Vector):void{ x = (x + _arg1.x); y = (y + _arg1.y); } public function distRough(_arg1:Vector):Number{ var _local2:Number; var _local3:Number; _local2 = Math.abs((_arg1.x - x)); _local3 = Math.abs((_arg1.y - y)); if (_local2 > _local3){ return ((_local2 + (_local3 / 2))); }; return ((_local3 + (_local2 / 2))); } public function get sizeRough():Number{ var _local1:Number; var _local2:Number; _local1 = Math.abs(x); _local2 = Math.abs(y); if (_local1 > _local2){ return ((_local1 + (_local2 / 2))); }; return ((_local2 + (_local1 / 2))); } } }//package abagames.util
Section 36
//IFlexAsset (mx.core.IFlexAsset) package mx.core { public interface IFlexAsset { } }//package mx.core
Section 37
//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 38
//SoundAsset (mx.core.SoundAsset) package mx.core { import flash.media.*; public class SoundAsset extends Sound implements IFlexAsset { mx_internal static const VERSION:String = "2.0.1.0"; } }//package mx.core
Section 39
//AbstractCollection (org.cove.ape.AbstractCollection) package org.cove.ape { import flash.display.*; import flash.utils.*; public class AbstractCollection { private var _sprite:Sprite; private var _isParented:Boolean; private var _particles:Array; private var _constraints:Array; public function AbstractCollection(){ if (getQualifiedClassName(this) == "org.cove.ape::AbstractCollection"){ throw (new ArgumentError("AbstractCollection can't be instantiated directly")); }; _isParented = false; _particles = new Array(); _constraints = new Array(); } public function getAll():Array{ return (particles.concat(constraints)); } function checkCollisionsVsCollection(_arg1:AbstractCollection):void{ var _local2:int; var _local3:int; var _local4:int; var _local5:AbstractParticle; var _local6:int; var _local7:int; var _local8:int; var _local9:AbstractParticle; var _local10:SpringConstraint; var _local11:SpringConstraint; var _local12:int; _local2 = _particles.length; _local3 = 0; while (_local3 < _local2) { _local5 = _particles[_local3]; if (!_local5.collidable){ } else { _local6 = _arg1.particles.length; _local7 = 0; while (_local7 < _local6) { _local9 = _arg1.particles[_local7]; if (_local9.collidable){ CollisionDetector.test(_local5, _local9); }; _local7++; }; _local8 = _arg1.constraints.length; _local7 = 0; while (_local7 < _local8) { _local10 = _arg1.constraints[_local7]; if (((_local10.collidable) && (!(_local10.isConnectedTo(_local5))))){ _local10.scp.updatePosition(); CollisionDetector.test(_local5, _local10.scp); }; _local7++; }; }; _local3++; }; _local4 = _constraints.length; _local3 = 0; while (_local3 < _local4) { _local11 = _constraints[_local3]; if (!_local11.collidable){ } else { _local6 = _arg1.particles.length; _local12 = 0; while (_local12 < _local6) { _local9 = _arg1.particles[_local12]; if (((_local9.collidable) && (!(_local11.isConnectedTo(_local9))))){ _local11.scp.updatePosition(); CollisionDetector.test(_local9, _local11.scp); }; _local12++; }; }; _local3++; }; } public function get sprite():Sprite{ if (_sprite != null){ return (_sprite); }; if (APEngine.container == null){ throw (new Error("The container property of the APEngine class has not been set")); }; _sprite = new Sprite(); APEngine.container.addChild(_sprite); return (_sprite); } function checkInternalCollisions():void{ var _local1:int; var _local2:int; var _local3:AbstractParticle; var _local4:int; var _local5:int; var _local6:int; var _local7:AbstractParticle; var _local8:SpringConstraint; _local1 = _particles.length; _local2 = 0; while (_local2 < _local1) { _local3 = _particles[_local2]; if (!_local3.collidable){ } else { _local4 = (_local2 + 1); while (_local4 < _local1) { _local7 = _particles[_local4]; if (_local7.collidable){ CollisionDetector.test(_local3, _local7); }; _local4++; }; _local5 = _constraints.length; _local6 = 0; while (_local6 < _local5) { _local8 = _constraints[_local6]; if (((_local8.collidable) && (!(_local8.isConnectedTo(_local3))))){ _local8.scp.updatePosition(); CollisionDetector.test(_local3, _local8.scp); }; _local6++; }; }; _local2++; }; } public function addParticle(_arg1:AbstractParticle):void{ particles.push(_arg1); if (isParented){ _arg1.init(); }; } public function removeConstraint(_arg1:AbstractConstraint):void{ var _local2:int; _local2 = constraints.indexOf(_arg1); if (_local2 == -1){ return; }; constraints.splice(_local2, 1); _arg1.cleanup(); } function get isParented():Boolean{ return (_isParented); } public function init():void{ var _local1:int; _local1 = 0; while (_local1 < particles.length) { particles[_local1].init(); _local1++; }; _local1 = 0; while (_local1 < constraints.length) { constraints[_local1].init(); _local1++; }; } function satisfyConstraints():void{ var _local1:int; var _local2:int; var _local3:AbstractConstraint; _local1 = _constraints.length; _local2 = 0; while (_local2 < _local1) { _local3 = _constraints[_local2]; _local3.resolve(); _local2++; }; } public function paint():void{ var _local1:AbstractParticle; var _local2:int; var _local3:int; var _local4:SpringConstraint; _local2 = _particles.length; _local3 = 0; while (_local3 < _local2) { _local1 = _particles[_local3]; if (((!(_local1.fixed)) || (_local1.alwaysRepaint))){ _local1.paint(); }; _local3++; }; _local2 = _constraints.length; _local3 = 0; while (_local3 < _local2) { _local4 = _constraints[_local3]; if (((!(_local4.fixed)) || (_local4.alwaysRepaint))){ _local4.paint(); }; _local3++; }; } public function addConstraint(_arg1:AbstractConstraint):void{ constraints.push(_arg1); if (isParented){ _arg1.init(); }; } function set isParented(_arg1:Boolean):void{ _isParented = _arg1; } public function removeParticle(_arg1:AbstractParticle):void{ var _local2:int; _local2 = particles.indexOf(_arg1); if (_local2 == -1){ return; }; particles.splice(_local2, 1); _arg1.cleanup(); } public function cleanup():void{ var _local1:int; _local1 = 0; while (_local1 < particles.length) { particles[_local1].cleanup(); _local1++; }; _local1 = 0; while (_local1 < constraints.length) { constraints[_local1].cleanup(); _local1++; }; } public function get particles():Array{ return (_particles); } function integrate(_arg1:Number):void{ var _local2:int; var _local3:int; var _local4:AbstractParticle; _local2 = _particles.length; _local3 = 0; while (_local3 < _local2) { _local4 = _particles[_local3]; _local4.update(_arg1); _local3++; }; } public function get constraints():Array{ return (_constraints); } } }//package org.cove.ape
Section 40
//AbstractConstraint (org.cove.ape.AbstractConstraint) package org.cove.ape { import flash.utils.*; public class AbstractConstraint extends AbstractItem { private var _stiffness:Number; public function AbstractConstraint(_arg1:Number){ if (getQualifiedClassName(this) == "org.cove.ape::AbstractConstraint"){ throw (new ArgumentError("AbstractConstraint can't be instantiated directly")); }; this.stiffness = _arg1; setStyle(); } public function get stiffness():Number{ return (_stiffness); } public function set stiffness(_arg1:Number):void{ _stiffness = _arg1; } function resolve():void{ } } }//package org.cove.ape
Section 41
//AbstractItem (org.cove.ape.AbstractItem) package org.cove.ape { import flash.display.*; public class AbstractItem { var lineAlpha:Number; var lineColor:uint; var displayObjectOffset:Vector; var lineThickness:Number; var displayObject:DisplayObject; var fillAlpha:Number; private var _sprite:Sprite; var fillColor:uint; private var _visible:Boolean; private var _alwaysRepaint:Boolean; var displayObjectRotation:Number; public function AbstractItem(){ _visible = true; _alwaysRepaint = false; } public function setLine(_arg1:Number=0, _arg2:uint=0, _arg3:Number=1):void{ lineThickness = _arg1; lineColor = _arg2; lineAlpha = _arg3; } public function set visible(_arg1:Boolean):void{ _visible = _arg1; sprite.visible = _arg1; } public function setFill(_arg1:uint=0xFFFFFF, _arg2:Number=1):void{ fillColor = _arg1; fillAlpha = _arg2; } public function init():void{ } public function get sprite():Sprite{ if (_sprite != null){ return (_sprite); }; if (APEngine.container == null){ throw (new Error("The container property of the APEngine class has not been set")); }; _sprite = new Sprite(); APEngine.container.addChild(_sprite); return (_sprite); } public function paint():void{ } public function cleanup():void{ var _local1:int; sprite.graphics.clear(); _local1 = 0; while (_local1 < sprite.numChildren) { sprite.removeChildAt(_local1); _local1++; }; } public function setStyle(_arg1:Number=0, _arg2:uint=0, _arg3:Number=1, _arg4:uint=0xFFFFFF, _arg5:Number=1):void{ setLine(_arg1, _arg2, _arg3); setFill(_arg4, _arg5); } public function get visible():Boolean{ return (_visible); } final public function set alwaysRepaint(_arg1:Boolean):void{ _alwaysRepaint = _arg1; } final public function get alwaysRepaint():Boolean{ return (_alwaysRepaint); } } }//package org.cove.ape
Section 42
//AbstractParticle (org.cove.ape.AbstractParticle) package org.cove.ape { import flash.display.*; import flash.utils.*; public class AbstractParticle extends AbstractItem { private var _collidable:Boolean; private var _multisample:int; private var collision:Collision; var prev:Vector; private var _kfr:Number; var curr:Vector; private var _invMass:Number; var interval:Interval; private var _mass:Number; private var temp:Vector; private var _friction:Number; private var forces:Vector; var samp:Vector; private var _center:Vector; private var _fixed:Boolean; public function AbstractParticle(_arg1:Number, _arg2:Number, _arg3:Boolean, _arg4:Number, _arg5:Number, _arg6:Number){ if (getQualifiedClassName(this) == "org.cove.ape::AbstractParticle"){ throw (new ArgumentError("AbstractParticle can't be instantiated directly")); }; interval = new Interval(0, 0); curr = new Vector(_arg1, _arg2); prev = new Vector(_arg1, _arg2); samp = new Vector(); temp = new Vector(); fixed = _arg3; forces = new Vector(); collision = new Collision(new Vector(), new Vector()); collidable = true; this.mass = _arg4; this.elasticity = _arg5; this.friction = _arg6; setStyle(); _center = new Vector(); _multisample = 0; } public function set friction(_arg1:Number):void{ if ((((_arg1 < 0)) || ((_arg1 > 1)))){ throw (new ArgumentError("Legal friction must be >= 0 and <=1")); }; _friction = _arg1; } public function get px():Number{ return (curr.x); } public function get py():Number{ return (curr.y); } public function set py(_arg1:Number):void{ curr.y = _arg1; prev.y = _arg1; } function getComponents(_arg1:Vector):Collision{ var _local2:Vector; var _local3:Number; _local2 = velocity; _local3 = _arg1.dot(_local2); collision.vn = _arg1.mult(_local3); collision.vt = _local2.minus(collision.vn); return (collision); } public function set mass(_arg1:Number):void{ if (_arg1 <= 0){ throw (new ArgumentError("mass may not be set <= 0")); }; _mass = _arg1; _invMass = (1 / _mass); } public function get fixed():Boolean{ return (_fixed); } public function set px(_arg1:Number):void{ curr.x = _arg1; prev.x = _arg1; } function initDisplay():void{ displayObject.x = displayObjectOffset.x; displayObject.y = displayObjectOffset.y; displayObject.rotation = displayObjectRotation; sprite.addChild(displayObject); } function get invMass():Number{ return ((fixed) ? 0 : _invMass); } public function setDisplay(_arg1:DisplayObject, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0):void{ displayObject = _arg1; displayObjectRotation = _arg4; displayObjectOffset = new Vector(_arg2, _arg3); } public function get position():Vector{ return (new Vector(curr.x, curr.y)); } public function get multisample():int{ return (_multisample); } function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{ curr.plusEquals(_arg1); velocity = _arg2; } public function set fixed(_arg1:Boolean):void{ _fixed = _arg1; } public function addMasslessForce(_arg1:Vector):void{ forces.plusEquals(_arg1); } public function set velocity(_arg1:Vector):void{ prev = curr.minus(_arg1); } public function set multisample(_arg1:int):void{ _multisample = _arg1; } public function get elasticity():Number{ return (_kfr); } public function set position(_arg1:Vector):void{ curr.copy(_arg1); prev.copy(_arg1); } public function get center():Vector{ _center.setTo(px, py); return (_center); } public function update(_arg1:Number):void{ var _local2:Vector; if (fixed){ return; }; addForce(APEngine.force); addMasslessForce(APEngine.masslessForce); temp.copy(curr); _local2 = velocity.plus(forces.multEquals(_arg1)); curr.plusEquals(_local2.multEquals(APEngine.damping)); prev.copy(temp); forces.setTo(0, 0); } public function set collidable(_arg1:Boolean):void{ _collidable = _arg1; } public function get velocity():Vector{ return (curr.minus(prev)); } public function get collidable():Boolean{ return (_collidable); } public function addForce(_arg1:Vector):void{ forces.plusEquals(_arg1.mult(invMass)); } public function set elasticity(_arg1:Number):void{ _kfr = _arg1; } public function get friction():Number{ return (_friction); } public function get mass():Number{ return (_mass); } } }//package org.cove.ape
Section 43
//APEngine (org.cove.ape.APEngine) package org.cove.ape { import flash.display.*; public final class APEngine { private static var _container:DisplayObjectContainer; private static var _damping:Number; private static var _constraintCollisionCycles:int; private static var groups:Array; static var masslessForce:Vector; private static var _constraintCycles:int; static var force:Vector; private static var timeStep:Number; private static var numGroups:int; public static function get container():DisplayObjectContainer{ return (_container); } public static function get constraintCollisionCycles():int{ return (_constraintCollisionCycles); } public static function set damping(_arg1:Number):void{ _damping = _arg1; } public static function step():void{ var _local1:int; var _local2:int; integrate(); _local1 = 0; while (_local1 < _constraintCycles) { satisfyConstraints(); _local1++; }; _local2 = 0; while (_local2 < _constraintCollisionCycles) { satisfyConstraints(); checkCollisions(); _local2++; }; } public static function init(_arg1:Number=0.25):void{ timeStep = (_arg1 * _arg1); numGroups = 0; groups = new Array(); force = new Vector(0, 0); masslessForce = new Vector(0, 0); damping = 1; _constraintCycles = 0; _constraintCollisionCycles = 1; } public static function get constraintCycles():int{ return (_constraintCycles); } public static function set constraintCollisionCycles(_arg1:int):void{ _constraintCollisionCycles = _arg1; } public static function set constraintCycles(_arg1:int):void{ _constraintCycles = _arg1; } public static function addForce(_arg1:Vector):void{ force.plusEquals(_arg1); } public static function get damping():Number{ return (_damping); } public static function set container(_arg1:DisplayObjectContainer):void{ _container = _arg1; } public static function addGroup(_arg1:Group):void{ groups.push(_arg1); _arg1.isParented = true; numGroups++; _arg1.init(); } public static function removeGroup(_arg1:Group):void{ var _local2:int; _local2 = groups.indexOf(_arg1); if (_local2 == -1){ return; }; groups.splice(_local2, 1); _arg1.isParented = false; numGroups--; _arg1.cleanup(); } public static function paint():void{ var _local1:int; var _local2:Group; _local1 = 0; while (_local1 < numGroups) { _local2 = groups[_local1]; _local2.paint(); _local1++; }; } private static function checkCollisions():void{ var _local1:int; var _local2:Group; _local1 = 0; while (_local1 < numGroups) { _local2 = groups[_local1]; _local2.checkCollisions(); _local1++; }; } private static function integrate():void{ var _local1:int; var _local2:Group; _local1 = 0; while (_local1 < numGroups) { _local2 = groups[_local1]; _local2.integrate(timeStep); _local1++; }; } private static function satisfyConstraints():void{ var _local1:int; var _local2:Group; _local1 = 0; while (_local1 < numGroups) { _local2 = groups[_local1]; _local2.satisfyConstraints(); _local1++; }; } public static function addMasslessForce(_arg1:Vector):void{ masslessForce.plusEquals(_arg1); } } }//package org.cove.ape
Section 44
//CircleParticle (org.cove.ape.CircleParticle) package org.cove.ape { public class CircleParticle extends AbstractParticle { private var _radius:Number; public function CircleParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=0.3, _arg7:Number=0){ super(_arg1, _arg2, _arg4, _arg5, _arg6, _arg7); _radius = _arg3; } function getIntervalX():Interval{ interval.min = (curr.x - _radius); interval.max = (curr.x + _radius); return (interval); } function getIntervalY():Interval{ interval.min = (curr.y - _radius); interval.max = (curr.y + _radius); return (interval); } override public function init():void{ cleanup(); if (displayObject != null){ initDisplay(); } else { sprite.graphics.clear(); sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha); sprite.graphics.beginFill(fillColor, fillAlpha); sprite.graphics.drawCircle(0, 0, radius); sprite.graphics.endFill(); }; paint(); } public function set radius(_arg1:Number):void{ _radius = _arg1; } public function get radius():Number{ return (_radius); } function getProjection(_arg1:Vector):Interval{ var _local2:Number; _local2 = samp.dot(_arg1); interval.min = (_local2 - _radius); interval.max = (_local2 + _radius); return (interval); } override public function paint():void{ sprite.x = curr.x; sprite.y = curr.y; } } }//package org.cove.ape
Section 45
//Collision (org.cove.ape.Collision) package org.cove.ape { import org.cove.ape.*; final class Collision { var vn:Vector; var vt:Vector; function Collision(_arg1:Vector, _arg2:Vector){ this.vn = _arg1; this.vt = _arg2; } } }//package org.cove.ape
Section 46
//CollisionDetector (org.cove.ape.CollisionDetector) package org.cove.ape { import org.cove.ape.*; final class CollisionDetector { private static function testOBBvsCircle(_arg1:RectangleParticle, _arg2:CircleParticle):Boolean{ var _local3:Vector; var _local4:Number; var _local5:Array; var _local6:int; var _local7:Number; var _local8:Vector; var _local9:Number; var _local10:Vector; var _local11:Number; _local4 = Number.POSITIVE_INFINITY; _local5 = new Array(2); _local6 = 0; while (_local6 < 2) { _local8 = _arg1.axes[_local6]; _local9 = testIntervals(_arg1.getProjection(_local8), _arg2.getProjection(_local8)); if (_local9 == 0){ return (false); }; if (Math.abs(_local9) < Math.abs(_local4)){ _local3 = _local8; _local4 = _local9; }; _local5[_local6] = _local9; _local6++; }; _local7 = _arg2.radius; if ((((Math.abs(_local5[0]) < _local7)) && ((Math.abs(_local5[1]) < _local7)))){ _local10 = closestVertexOnOBB(_arg2.samp, _arg1); _local3 = _local10.minus(_arg2.samp); _local11 = _local3.magnitude(); _local4 = (_local7 - _local11); if (_local4 > 0){ _local3.divEquals(_local11); } else { return (false); }; }; CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local3, _local4); return (true); } static function test(_arg1:AbstractParticle, _arg2:AbstractParticle):void{ if (((_arg1.fixed) && (_arg2.fixed))){ return; }; if ((((_arg1.multisample == 0)) && ((_arg2.multisample == 0)))){ normVsNorm(_arg1, _arg2); } else { if ((((_arg1.multisample > 0)) && ((_arg2.multisample == 0)))){ sampVsNorm(_arg1, _arg2); } else { if ((((_arg2.multisample > 0)) && ((_arg1.multisample == 0)))){ sampVsNorm(_arg2, _arg1); } else { if (_arg1.multisample == _arg2.multisample){ sampVsSamp(_arg1, _arg2); } else { normVsNorm(_arg1, _arg2); }; }; }; }; } private static function testIntervals(_arg1:Interval, _arg2:Interval):Number{ var _local3:Number; var _local4:Number; if (_arg1.max < _arg2.min){ return (0); }; if (_arg2.max < _arg1.min){ return (0); }; _local3 = (_arg2.max - _arg1.min); _local4 = (_arg2.min - _arg1.max); return (((Math.abs(_local3))<Math.abs(_local4)) ? _local3 : _local4); } private static function normVsNorm(_arg1:AbstractParticle, _arg2:AbstractParticle):void{ _arg1.samp.copy(_arg1.curr); _arg2.samp.copy(_arg2.curr); testTypes(_arg1, _arg2); } private static function testCirclevsCircle(_arg1:CircleParticle, _arg2:CircleParticle):Boolean{ var _local3:Number; var _local4:Number; var _local5:Vector; var _local6:Number; var _local7:Number; _local3 = testIntervals(_arg1.getIntervalX(), _arg2.getIntervalX()); if (_local3 == 0){ return (false); }; _local4 = testIntervals(_arg1.getIntervalY(), _arg2.getIntervalY()); if (_local4 == 0){ return (false); }; _local5 = _arg1.samp.minus(_arg2.samp); _local6 = _local5.magnitude(); _local7 = ((_arg1.radius + _arg2.radius) - _local6); if (_local7 > 0){ _local5.divEquals(_local6); CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local5, _local7); return (true); }; return (false); } private static function testTypes(_arg1:AbstractParticle, _arg2:AbstractParticle):Boolean{ if ((((_arg1 is RectangleParticle)) && ((_arg2 is RectangleParticle)))){ return (testOBBvsOBB((_arg1 as RectangleParticle), (_arg2 as RectangleParticle))); }; if ((((_arg1 is CircleParticle)) && ((_arg2 is CircleParticle)))){ return (testCirclevsCircle((_arg1 as CircleParticle), (_arg2 as CircleParticle))); }; if ((((_arg1 is RectangleParticle)) && ((_arg2 is CircleParticle)))){ return (testOBBvsCircle((_arg1 as RectangleParticle), (_arg2 as CircleParticle))); }; if ((((_arg1 is CircleParticle)) && ((_arg2 is RectangleParticle)))){ return (testOBBvsCircle((_arg2 as RectangleParticle), (_arg1 as CircleParticle))); }; return (false); } private static function sampVsNorm(_arg1:AbstractParticle, _arg2:AbstractParticle):void{ var _local3:Number; var _local4:Number; var _local5:int; _local3 = (1 / (_arg1.multisample + 1)); _local4 = _local3; _arg2.samp.copy(_arg2.curr); _local5 = 0; while (_local5 <= _arg1.multisample) { _arg1.samp.setTo((_arg1.prev.x + (_local4 * (_arg1.curr.x - _arg1.prev.x))), (_arg1.prev.y + (_local4 * (_arg1.curr.y - _arg1.prev.y)))); if (testTypes(_arg1, _arg2)){ return; }; _local4 = (_local4 + _local3); _local5++; }; } private static function closestVertexOnOBB(_arg1:Vector, _arg2:RectangleParticle):Vector{ var _local3:Vector; var _local4:Vector; var _local5:int; var _local6:Number; _local3 = _arg1.minus(_arg2.samp); _local4 = new Vector(_arg2.samp.x, _arg2.samp.y); _local5 = 0; while (_local5 < 2) { _local6 = _local3.dot(_arg2.axes[_local5]); if (_local6 >= 0){ _local6 = _arg2.extents[_local5]; } else { if (_local6 < 0){ _local6 = -(_arg2.extents[_local5]); }; }; _local4.plusEquals(_arg2.axes[_local5].mult(_local6)); _local5++; }; return (_local4); } private static function testOBBvsOBB(_arg1:RectangleParticle, _arg2:RectangleParticle):Boolean{ var _local3:Vector; var _local4:Number; var _local5:int; var _local6:Vector; var _local7:Number; var _local8:Vector; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Boolean; _local4 = Number.POSITIVE_INFINITY; _local5 = 0; while (_local5 < 2) { _local6 = _arg1.axes[_local5]; _local7 = testIntervals(_arg1.getProjection(_local6), _arg2.getProjection(_local6)); if (_local7 == 0){ return (false); }; _local8 = _arg2.axes[_local5]; _local9 = testIntervals(_arg1.getProjection(_local8), _arg2.getProjection(_local8)); if (_local9 == 0){ return (false); }; _local10 = Math.abs(_local7); _local11 = Math.abs(_local9); if ((((_local10 < Math.abs(_local4))) || ((_local11 < Math.abs(_local4))))){ _local12 = (_local10 < _local11); _local3 = (_local12) ? _local6 : _local8; _local4 = (_local12) ? _local7 : _local9; }; _local5++; }; CollisionResolver.resolveParticleParticle(_arg1, _arg2, _local3, _local4); return (true); } private static function sampVsSamp(_arg1:AbstractParticle, _arg2:AbstractParticle):void{ var _local3:Number; var _local4:Number; var _local5:int; _local3 = (1 / (_arg1.multisample + 1)); _local4 = _local3; _local5 = 0; while (_local5 <= _arg1.multisample) { _arg1.samp.setTo((_arg1.prev.x + (_local4 * (_arg1.curr.x - _arg1.prev.x))), (_arg1.prev.y + (_local4 * (_arg1.curr.y - _arg1.prev.y)))); _arg2.samp.setTo((_arg2.prev.x + (_local4 * (_arg2.curr.x - _arg2.prev.x))), (_arg2.prev.y + (_local4 * (_arg2.curr.y - _arg2.prev.y)))); if (testTypes(_arg1, _arg2)){ return; }; _local4 = (_local4 + _local3); _local5++; }; } } }//package org.cove.ape
Section 47
//CollisionResolver (org.cove.ape.CollisionResolver) package org.cove.ape { import org.cove.ape.*; final class CollisionResolver { static function resolveParticleParticle(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:Vector, _arg4:Number):void{ var _local5:Vector; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Collision; var _local10:Collision; var _local11:Vector; var _local12:Vector; var _local13:Vector; var _local14:Vector; _arg1.curr.copy(_arg1.samp); _arg2.curr.copy(_arg2.samp); _local5 = _arg3.mult(_arg4); _local6 = (_arg1.elasticity + _arg2.elasticity); _local7 = (_arg1.invMass + _arg2.invMass); _local8 = clamp((1 - (_arg1.friction + _arg2.friction)), 0, 1); _local9 = _arg1.getComponents(_arg3); _local10 = _arg2.getComponents(_arg3); _local11 = _local10.vn.mult(((_local6 + 1) * _arg1.invMass)).plus(_local9.vn.mult((_arg2.invMass - (_local6 * _arg1.invMass)))).divEquals(_local7); _local12 = _local9.vn.mult(((_local6 + 1) * _arg2.invMass)).plus(_local10.vn.mult((_arg1.invMass - (_local6 * _arg2.invMass)))).divEquals(_local7); _local9.vt.multEquals(_local8); _local10.vt.multEquals(_local8); _local13 = _local5.mult((_arg1.invMass / _local7)); _local14 = _local5.mult((-(_arg2.invMass) / _local7)); _local11.plusEquals(_local9.vt); _local12.plusEquals(_local10.vt); if (!_arg1.fixed){ _arg1.resolveCollision(_local13, _local11, _arg3, _arg4, -1, _arg2); }; if (!_arg2.fixed){ _arg2.resolveCollision(_local14, _local12, _arg3, _arg4, 1, _arg1); }; } static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{ if (_arg1 > _arg3){ return (_arg3); }; if (_arg1 < _arg2){ return (_arg2); }; return (_arg1); } } }//package org.cove.ape
Section 48
//Composite (org.cove.ape.Composite) package org.cove.ape { public class Composite extends AbstractCollection { private var delta:Vector; public function Composite(){ delta = new Vector(); } private function getRelativeAngle(_arg1:Vector, _arg2:Vector):Number{ delta.setTo((_arg2.x - _arg1.x), (_arg2.y - _arg1.y)); return (Math.atan2(delta.y, delta.x)); } public function rotateByRadian(_arg1:Number, _arg2:Vector):void{ var _local3:AbstractParticle; var _local4:Array; var _local5:int; var _local6:int; var _local7:Number; var _local8:Number; _local4 = particles; _local5 = _local4.length; _local6 = 0; while (_local6 < _local5) { _local3 = _local4[_local6]; _local7 = _local3.center.distance(_arg2); _local8 = (getRelativeAngle(_arg2, _local3.center) + _arg1); _local3.px = ((Math.cos(_local8) * _local7) + _arg2.x); _local3.py = ((Math.sin(_local8) * _local7) + _arg2.y); _local6++; }; } public function rotateByAngle(_arg1:Number, _arg2:Vector):void{ var _local3:Number; _local3 = (_arg1 * MathUtil.PI_OVER_ONE_EIGHTY); rotateByRadian(_local3, _arg2); } public function set fixed(_arg1:Boolean):void{ var _local2:int; _local2 = 0; while (_local2 < particles.length) { particles[_local2].fixed = _arg1; _local2++; }; } public function get fixed():Boolean{ var _local1:int; _local1 = 0; while (_local1 < particles.length) { if (!particles[_local1].fixed){ return (false); }; _local1++; }; return (true); } } }//package org.cove.ape
Section 49
//Group (org.cove.ape.Group) package org.cove.ape { public class Group extends AbstractCollection { private var _collideInternal:Boolean; private var _composites:Array; private var _collisionList:Array; public function Group(_arg1:Boolean=false){ _composites = new Array(); _collisionList = new Array(); this.collideInternal = _arg1; } function checkCollisions():void{ var _local1:int; var _local2:int; var _local3:Group; if (collideInternal){ checkCollisionGroupInternal(); }; _local1 = collisionList.length; _local2 = 0; while (_local2 < _local1) { _local3 = collisionList[_local2]; checkCollisionVsGroup(_local3); _local2++; }; } public function get composites():Array{ return (_composites); } override public function init():void{ var _local1:int; super.init(); _local1 = 0; while (_local1 < composites.length) { composites[_local1].init(); _local1++; }; } public function removeCollidable(_arg1:Group):void{ var _local2:int; _local2 = collisionList.indexOf(_arg1); if (_local2 == -1){ return; }; collisionList.splice(_local2, 1); } private function checkCollisionVsGroup(_arg1:Group):void{ var _local2:int; var _local3:int; var _local4:int; var _local5:Composite; var _local6:int; var _local7:Composite; checkCollisionsVsCollection(_arg1); _local2 = _composites.length; _local3 = _arg1.composites.length; _local4 = 0; while (_local4 < _local2) { _local5 = _composites[_local4]; _local5.checkCollisionsVsCollection(_arg1); _local6 = 0; while (_local6 < _local3) { _local7 = _arg1.composites[_local6]; _local5.checkCollisionsVsCollection(_local7); _local6++; }; _local4++; }; _local6 = 0; while (_local6 < _local3) { _local7 = _arg1.composites[_local6]; checkCollisionsVsCollection(_local7); _local6++; }; } override function satisfyConstraints():void{ var _local1:int; var _local2:int; var _local3:Composite; super.satisfyConstraints(); _local1 = _composites.length; _local2 = 0; while (_local2 < _local1) { _local3 = _composites[_local2]; _local3.satisfyConstraints(); _local2++; }; } public function get collideInternal():Boolean{ return (_collideInternal); } override public function paint():void{ var _local1:int; var _local2:int; var _local3:Composite; super.paint(); _local1 = _composites.length; _local2 = 0; while (_local2 < _local1) { _local3 = _composites[_local2]; _local3.paint(); _local2++; }; } public function addCollidableList(_arg1:Array):void{ var _local2:int; var _local3:Group; _local2 = 0; while (_local2 < _arg1.length) { _local3 = _arg1[_local2]; collisionList.push(_local3); _local2++; }; } public function removeComposite(_arg1:Composite):void{ var _local2:int; _local2 = composites.indexOf(_arg1); if (_local2 == -1){ return; }; composites.splice(_local2, 1); _arg1.isParented = false; _arg1.cleanup(); } override public function cleanup():void{ var _local1:int; super.cleanup(); _local1 = 0; while (_local1 < composites.length) { composites[_local1].cleanup(); _local1++; }; } public function addCollidable(_arg1:Group):void{ collisionList.push(_arg1); } public function get collisionList():Array{ return (_collisionList); } override function integrate(_arg1:Number):void{ var _local2:int; var _local3:int; var _local4:Composite; super.integrate(_arg1); _local2 = _composites.length; _local3 = 0; while (_local3 < _local2) { _local4 = _composites[_local3]; _local4.integrate(_arg1); _local3++; }; } override public function getAll():Array{ return (particles.concat(constraints).concat(composites)); } public function addComposite(_arg1:Composite):void{ composites.push(_arg1); _arg1.isParented = true; if (isParented){ _arg1.init(); }; } private function checkCollisionGroupInternal():void{ var _local1:int; var _local2:int; var _local3:Composite; var _local4:int; var _local5:Composite; checkInternalCollisions(); _local1 = _composites.length; _local2 = 0; while (_local2 < _local1) { _local3 = _composites[_local2]; _local3.checkCollisionsVsCollection(this); _local4 = (_local2 + 1); while (_local4 < _local1) { _local5 = _composites[_local4]; _local3.checkCollisionsVsCollection(_local5); _local4++; }; _local2++; }; } public function set collideInternal(_arg1:Boolean):void{ _collideInternal = _arg1; } } }//package org.cove.ape
Section 50
//Interval (org.cove.ape.Interval) package org.cove.ape { final class Interval { var min:Number; var max:Number; function Interval(_arg1:Number, _arg2:Number){ this.min = _arg1; this.max = _arg2; } function toString():String{ return (((min + " : ") + max)); } } }//package org.cove.ape
Section 51
//MathUtil (org.cove.ape.MathUtil) package org.cove.ape { final class MathUtil { static var ONE_EIGHTY_OVER_PI:Number = (180 / Math.PI); static var PI_OVER_ONE_EIGHTY:Number = (Math.PI / 180); static function clamp(_arg1:Number, _arg2:Number, _arg3:Number):Number{ if (_arg1 < _arg2){ return (_arg2); }; if (_arg1 > _arg3){ return (_arg3); }; return (_arg1); } static function sign(_arg1:Number):int{ if (_arg1 < 0){ return (-1); }; return (1); } } }//package org.cove.ape
Section 52
//RectangleParticle (org.cove.ape.RectangleParticle) package org.cove.ape { public class RectangleParticle extends AbstractParticle { private var _axes:Array; private var _radian:Number; private var _extents:Array; public function RectangleParticle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number=0, _arg6:Boolean=false, _arg7:Number=1, _arg8:Number=0.3, _arg9:Number=0){ super(_arg1, _arg2, _arg6, _arg7, _arg8, _arg9); _extents = new Array((_arg3 / 2), (_arg4 / 2)); _axes = new Array(new Vector(0, 0), new Vector(0, 0)); radian = _arg5; } override public function init():void{ var _local1:Number; var _local2:Number; cleanup(); if (displayObject != null){ initDisplay(); } else { _local1 = (extents[0] * 2); _local2 = (extents[1] * 2); sprite.graphics.clear(); sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha); sprite.graphics.beginFill(fillColor, fillAlpha); sprite.graphics.drawRect((-(_local1) / 2), (-(_local2) / 2), _local1, _local2); sprite.graphics.endFill(); }; paint(); } public function set width(_arg1:Number):void{ _extents[0] = (_arg1 / 2); } function get axes():Array{ return (_axes); } public function get height():Number{ return ((_extents[1] * 2)); } function get extents():Array{ return (_extents); } public function set angle(_arg1:Number):void{ radian = (_arg1 * MathUtil.PI_OVER_ONE_EIGHTY); } private function setAxes(_arg1:Number):void{ var _local2:Number; var _local3:Number; _local2 = Math.sin(_arg1); _local3 = Math.cos(_arg1); axes[0].x = _local3; axes[0].y = _local2; axes[1].x = -(_local2); axes[1].y = _local3; } public function get radian():Number{ return (_radian); } public function get width():Number{ return ((_extents[0] * 2)); } public function set height(_arg1:Number):void{ _extents[1] = (_arg1 / 2); } public function get angle():Number{ return ((radian * MathUtil.ONE_EIGHTY_OVER_PI)); } function getProjection(_arg1:Vector):Interval{ var _local2:Number; var _local3:Number; _local2 = ((extents[0] * Math.abs(_arg1.dot(axes[0]))) + (extents[1] * Math.abs(_arg1.dot(axes[1])))); _local3 = samp.dot(_arg1); interval.min = (_local3 - _local2); interval.max = (_local3 + _local2); return (interval); } public function set radian(_arg1:Number):void{ _radian = _arg1; setAxes(_arg1); } override public function paint():void{ sprite.x = curr.x; sprite.y = curr.y; sprite.rotation = angle; } } }//package org.cove.ape
Section 53
//SpringConstraint (org.cove.ape.SpringConstraint) package org.cove.ape { import flash.display.*; public class SpringConstraint extends AbstractConstraint { private var _collidable:Boolean; private var _restLength:Number; private var p1:AbstractParticle; private var p2:AbstractParticle; private var _scp:SpringConstraintParticle; public function SpringConstraint(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:Number=0.5, _arg4:Boolean=false, _arg5:Number=1, _arg6:Number=1, _arg7:Boolean=false){ super(_arg3); this.p1 = _arg1; this.p2 = _arg2; checkParticlesLocation(); _restLength = currLength; setCollidable(_arg4, _arg5, _arg6, _arg7); } public function set rectScale(_arg1:Number):void{ if (scp == null){ return; }; scp.rectScale = _arg1; } override public function init():void{ cleanup(); if (collidable){ scp.init(); } else { if (displayObject != null){ initDisplay(); }; }; paint(); } function initDisplay():void{ if (collidable){ scp.initDisplay(); } else { displayObject.x = displayObjectOffset.x; displayObject.y = displayObjectOffset.y; displayObject.rotation = displayObjectRotation; sprite.addChild(displayObject); }; } private function checkParticlesLocation():void{ if ((((p1.curr.x == p2.curr.x)) && ((p1.curr.y == p2.curr.y)))){ p2.curr.x = (p2.curr.x + 0.0001); }; } public function get radian():Number{ var _local1:Vector; _local1 = delta; return (Math.atan2(_local1.y, _local1.x)); } public function setDisplay(_arg1:DisplayObject, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0):void{ if (collidable){ scp.setDisplay(_arg1, _arg2, _arg3, _arg4); } else { displayObject = _arg1; displayObjectRotation = _arg4; displayObjectOffset = new Vector(_arg2, _arg3); }; } function get scp():SpringConstraintParticle{ return (_scp); } public function get rectHeight():Number{ return (scp.rectHeight); } public function set restLength(_arg1:Number):void{ if (_arg1 <= 0){ throw (new ArgumentError("restLength must be greater than 0")); }; _restLength = _arg1; } public function get currLength():Number{ return (p1.curr.distance(p2.curr)); } public function get fixedEndLimit():Number{ return (scp.fixedEndLimit); } public function get rectScale():Number{ return (scp.rectScale); } function get delta():Vector{ return (p1.curr.minus(p2.curr)); } public function get angle():Number{ return ((radian * MathUtil.ONE_EIGHTY_OVER_PI)); } public function get center():Vector{ return (p1.curr.plus(p2.curr).divEquals(2)); } public function set rectHeight(_arg1:Number):void{ if (scp == null){ return; }; scp.rectHeight = _arg1; } public function get restLength():Number{ return (_restLength); } override public function paint():void{ var _local1:Vector; if (collidable){ scp.paint(); } else { if (displayObject != null){ _local1 = center; sprite.x = _local1.x; sprite.y = _local1.y; sprite.rotation = angle; } else { sprite.graphics.clear(); sprite.graphics.lineStyle(lineThickness, lineColor, lineAlpha); sprite.graphics.moveTo(p1.px, p1.py); sprite.graphics.lineTo(p2.px, p2.py); }; }; } public function setCollidable(_arg1:Boolean, _arg2:Number, _arg3:Number, _arg4:Boolean=false):void{ _collidable = _arg1; _scp = null; if (_collidable){ _scp = new SpringConstraintParticle(p1, p2, this, _arg2, _arg3, _arg4); }; } public function get collidable():Boolean{ return (_collidable); } public function isConnectedTo(_arg1:AbstractParticle):Boolean{ return ((((_arg1 == p1)) || ((_arg1 == p2)))); } override function resolve():void{ var _local1:Number; var _local2:Number; var _local3:Vector; if (((p1.fixed) && (p2.fixed))){ return; }; _local1 = currLength; _local2 = ((_local1 - restLength) / (_local1 * (p1.invMass + p2.invMass))); _local3 = delta.mult((_local2 * stiffness)); p1.curr.minusEquals(_local3.mult(p1.invMass)); p2.curr.plusEquals(_local3.mult(p2.invMass)); } public function get fixed():Boolean{ return (((p1.fixed) && (p2.fixed))); } public function set fixedEndLimit(_arg1:Number):void{ if (scp == null){ return; }; scp.fixedEndLimit = _arg1; } } }//package org.cove.ape
Section 54
//SpringConstraintParticle (org.cove.ape.SpringConstraintParticle) package org.cove.ape { import flash.display.*; import org.cove.ape.*; class SpringConstraintParticle extends RectangleParticle { private var _fixedEndLimit:Number; private var _rectScale:Number; private var rca:Vector; private var rcb:Vector; private var s:Number; private var parent:SpringConstraint; private var scaleToLength:Boolean; private var p1:AbstractParticle; private var p2:AbstractParticle; private var lambda:Vector; private var avgVelocity:Vector; private var _rectHeight:Number; function SpringConstraintParticle(_arg1:AbstractParticle, _arg2:AbstractParticle, _arg3:SpringConstraint, _arg4:Number, _arg5:Number, _arg6:Boolean){ super(0, 0, 0, 0, 0, false); this.p1 = _arg1; this.p2 = _arg2; lambda = new Vector(0, 0); avgVelocity = new Vector(0, 0); parent = _arg3; this.rectScale = _arg5; this.rectHeight = _arg4; this.scaleToLength = _arg6; fixedEndLimit = 0; rca = new Vector(); rcb = new Vector(); } private function setCorners(_arg1:RectangleParticle, _arg2:int):void{ var _local3:Number; var _local4:Number; var _local5:Array; var _local6:Array; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; _local3 = _arg1.curr.x; _local4 = _arg1.curr.y; _local5 = _arg1.axes; _local6 = _arg1.extents; _local7 = (_local5[0].x * _local6[0]); _local8 = (_local5[0].y * _local6[0]); _local9 = (_local5[1].x * _local6[1]); _local10 = (_local5[1].y * _local6[1]); _local11 = (_local7 - _local9); _local12 = (_local8 - _local10); _local13 = (_local7 + _local9); _local14 = (_local8 + _local10); if (_arg2 == 0){ rca.x = (_local3 - _local13); rca.y = (_local4 - _local14); rcb.x = (_local3 + _local11); rcb.y = (_local4 + _local12); } else { if (_arg2 == 1){ rca.x = (_local3 + _local11); rca.y = (_local4 + _local12); rcb.x = (_local3 + _local13); rcb.y = (_local4 + _local14); } else { if (_arg2 == 2){ rca.x = (_local3 + _local13); rca.y = (_local4 + _local14); rcb.x = (_local3 - _local11); rcb.y = (_local4 - _local12); } else { if (_arg2 == 3){ rca.x = (_local3 - _local11); rca.y = (_local4 - _local12); rcb.x = (_local3 - _local13); rcb.y = (_local4 - _local14); }; }; }; }; } override public function init():void{ var _local1:Sprite; var _local2:Number; var _local3:Number; if (displayObject != null){ initDisplay(); } else { _local1 = new Sprite(); parent.sprite.addChild(_local1); _local1.name = "inner"; _local2 = (parent.currLength * rectScale); _local3 = rectHeight; _local1.graphics.clear(); _local1.graphics.lineStyle(parent.lineThickness, parent.lineColor, parent.lineAlpha); _local1.graphics.beginFill(parent.fillColor, parent.fillAlpha); _local1.graphics.drawRect((-(_local2) / 2), (-(_local3) / 2), _local2, _local3); _local1.graphics.endFill(); }; paint(); } function updatePosition():void{ var _local1:Vector; _local1 = parent.center; curr.setTo(_local1.x, _local1.y); width = (scaleToLength) ? (parent.currLength * rectScale) : (parent.restLength * rectScale); height = rectHeight; radian = parent.radian; } private function closestPtSegmentSegment():Number{ var _local1:Vector; var _local2:Vector; var _local3:Vector; var _local4:Vector; var _local5:Vector; var _local6:Vector; var _local7:Vector; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Vector; var _local16:Vector; var _local17:Vector; _local1 = p1.curr; _local2 = p2.curr; _local3 = rca; _local4 = rcb; _local5 = _local2.minus(_local1); _local6 = _local4.minus(_local3); _local7 = _local1.minus(_local3); _local9 = _local5.dot(_local5); _local10 = _local6.dot(_local6); _local11 = _local6.dot(_local7); _local12 = _local5.dot(_local7); _local13 = _local5.dot(_local6); _local14 = ((_local9 * _local10) - (_local13 * _local13)); if (_local14 != 0){ s = MathUtil.clamp((((_local13 * _local11) - (_local12 * _local10)) / _local14), 0, 1); } else { s = 0.5; }; _local8 = (((_local13 * s) + _local11) / _local10); if (_local8 < 0){ _local8 = 0; s = MathUtil.clamp((-(_local12) / _local9), 0, 1); } else { if (_local8 > 0){ _local8 = 1; s = MathUtil.clamp(((_local13 - _local12) / _local9), 0, 1); }; }; _local15 = _local1.plus(_local5.mult(s)); _local16 = _local3.plus(_local6.mult(_local8)); _local17 = _local15.minus(_local16); return (_local15.minus(_local16).dot(_local17)); } function get rectHeight():Number{ return (_rectHeight); } function get fixedEndLimit():Number{ return (_fixedEndLimit); } private function closestParamPoint(_arg1:Vector):Number{ var _local2:Vector; var _local3:Number; _local2 = p2.curr.minus(p1.curr); _local3 = (_local2.dot(_arg1.minus(p1.curr)) / _local2.dot(_local2)); return (MathUtil.clamp(_local3, 0, 1)); } function set rectHeight(_arg1:Number):void{ _rectHeight = _arg1; } override public function paint():void{ var _local1:Vector; var _local2:Sprite; _local1 = parent.center; _local2 = parent.sprite; if (scaleToLength){ _local2.getChildByName("inner").width = (parent.currLength * rectScale); } else { if (displayObject != null){ _local2.getChildByName("inner").width = (parent.restLength * rectScale); }; }; _local2.x = _local1.x; _local2.y = _local1.y; _local2.rotation = parent.angle; } private function getContactPointParam(_arg1:AbstractParticle):Number{ var _local2:Number; var _local3:Number; var _local4:Array; var _local5:Number; var _local6:int; var _local7:Number; if ((_arg1 is CircleParticle)){ _local2 = closestParamPoint(_arg1.curr); } else { if ((_arg1 is RectangleParticle)){ _local4 = new Array(4); _local5 = Number.POSITIVE_INFINITY; _local6 = 0; while (_local6 < 4) { setCorners((_arg1 as RectangleParticle), _local6); _local7 = closestPtSegmentSegment(); if (_local7 < _local5){ _local5 = _local7; _local3 = _local6; _local4[_local6] = s; }; _local6++; }; _local2 = _local4[_local3]; }; }; return (_local2); } function set fixedEndLimit(_arg1:Number):void{ _fixedEndLimit = _arg1; } override function get invMass():Number{ if (((p1.fixed) && (p2.fixed))){ return (0); }; return ((1 / ((p1.mass + p2.mass) / 2))); } override function initDisplay():void{ var _local1:Sprite; displayObject.x = displayObjectOffset.x; displayObject.y = displayObjectOffset.y; displayObject.rotation = displayObjectRotation; _local1 = new Sprite(); _local1.name = "inner"; _local1.addChild(displayObject); parent.sprite.addChild(_local1); } function set rectScale(_arg1:Number):void{ _rectScale = _arg1; } override function resolveCollision(_arg1:Vector, _arg2:Vector, _arg3:Vector, _arg4:Number, _arg5:int, _arg6:AbstractParticle):void{ var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:AbstractParticle; _local7 = getContactPointParam(_arg6); _local8 = (1 - _local7); _local9 = _local7; if (p1.fixed){ if (_local9 <= fixedEndLimit){ return; }; lambda.setTo((_arg1.x / _local9), (_arg1.y / _local9)); p2.curr.plusEquals(lambda); p2.velocity = _arg2; } else { if (p2.fixed){ if (_local8 <= fixedEndLimit){ return; }; lambda.setTo((_arg1.x / _local8), (_arg1.y / _local8)); p1.curr.plusEquals(lambda); p1.velocity = _arg2; } else { _local10 = ((_local8 * _local8) + (_local9 * _local9)); if (_local10 == 0){ return; }; lambda.setTo((_arg1.x / _local10), (_arg1.y / _local10)); p1.curr.plusEquals(lambda.mult(_local8)); p2.curr.plusEquals(lambda.mult(_local9)); if (_local7 == 0.5){ p1.velocity = _arg2; p2.velocity = _arg2; } else { _local11 = ((_local7)<0.5) ? p1 : p2; _local11.velocity = _arg2; }; }; }; } override public function get elasticity():Number{ return (((p1.elasticity + p2.elasticity) / 2)); } function get rectScale():Number{ return (_rectScale); } override public function get velocity():Vector{ var _local1:Vector; var _local2:Vector; _local1 = p1.velocity; _local2 = p2.velocity; avgVelocity.setTo(((_local1.x + _local2.x) / 2), ((_local1.y + _local2.y) / 2)); return (avgVelocity); } override public function get friction():Number{ return (((p1.friction + p2.friction) / 2)); } override public function get mass():Number{ return (((p1.mass + p2.mass) / 2)); } } }//package org.cove.ape
Section 55
//Vector (org.cove.ape.Vector) package org.cove.ape { public class Vector { public var x:Number; public var y:Number; public function Vector(_arg1:Number=0, _arg2:Number=0){ x = _arg1; y = _arg2; } public function cross(_arg1:Vector):Number{ return (((x * _arg1.y) - (y * _arg1.x))); } public function magnitude():Number{ return (Math.sqrt(((x * x) + (y * y)))); } public function divEquals(_arg1:Number):Vector{ if (_arg1 == 0){ _arg1 = 0.0001; }; x = (x / _arg1); y = (y / _arg1); return (this); } public function times(_arg1:Vector):Vector{ return (new Vector((x * _arg1.x), (y * _arg1.y))); } public function plusEquals(_arg1:Vector):Vector{ x = (x + _arg1.x); y = (y + _arg1.y); return (this); } public function dot(_arg1:Vector):Number{ return (((x * _arg1.x) + (y * _arg1.y))); } public function toString():String{ return (((x + " : ") + y)); } public function normalize():Vector{ var _local1:Number; _local1 = magnitude(); if (_local1 == 0){ _local1 = 0.0001; }; return (mult((1 / _local1))); } public function copy(_arg1:Vector):void{ x = _arg1.x; y = _arg1.y; } public function minusEquals(_arg1:Vector):Vector{ x = (x - _arg1.x); y = (y - _arg1.y); return (this); } public function minus(_arg1:Vector):Vector{ return (new Vector((x - _arg1.x), (y - _arg1.y))); } public function plus(_arg1:Vector):Vector{ return (new Vector((x + _arg1.x), (y + _arg1.y))); } public function distance(_arg1:Vector):Number{ var _local2:Vector; _local2 = this.minus(_arg1); return (_local2.magnitude()); } public function setTo(_arg1:Number, _arg2:Number):void{ x = _arg1; y = _arg2; } public function multEquals(_arg1:Number):Vector{ x = (x * _arg1); y = (y * _arg1); return (this); } public function mult(_arg1:Number):Vector{ return (new Vector((x * _arg1), (y * _arg1))); } } }//package org.cove.ape
Section 56
//Lbr (Lbr) package { import flash.events.*; import flash.display.*; import abagames.util.*; import abagames.lbr.*; public class Lbr extends Sprite { private var SoundGetSmallEnergy:Class; private var SoundBurstBall:Class; private var sounds:Array; private var rootSprite:Sprite; private var SoundGetEnergy:Class; private var SoundBurstMine:Class; private var SoundBgm:Class; private var keyState:KeyState; private var SoundShot:Class; private var isFirst:Boolean;// = true private var SoundWarning:Class; private var SoundPlayerMiss:Class; private var SoundExtend:Class; private var mainLoop:MainLoop; public static const SCREEN_HEIGHT:int = 480; public static const SCREEN_WIDTH:int = 360; public function Lbr(){ SoundBgm = Lbr_SoundBgm; SoundShot = Lbr_SoundShot; SoundBurstBall = Lbr_SoundBurstBall; SoundBurstMine = Lbr_SoundBurstMine; SoundPlayerMiss = Lbr_SoundPlayerMiss; SoundGetEnergy = Lbr_SoundGetEnergy; SoundWarning = Lbr_SoundWarning; SoundGetSmallEnergy = Lbr_SoundGetSmallEnergy; SoundExtend = Lbr_SoundExtend; isFirst = true; super(); sounds = new Array(); sounds.push(new SoundBgm()); sounds.push(new SoundShot()); sounds.push(new SoundBurstBall()); sounds.push(new SoundBurstMine()); sounds.push(new SoundPlayerMiss()); sounds.push(new SoundGetEnergy()); sounds.push(new SoundWarning()); sounds.push(new SoundGetSmallEnergy()); sounds.push(new SoundExtend()); addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(_arg1:Event):void{ var _local2:BitmapData; var _local3:Bitmap; if (isFirst){ isFirst = false; mainLoop = new MainLoop(); keyState = new KeyState(); rootSprite = this; stage.addEventListener(KeyboardEvent.KEY_DOWN, keyState.onKeyDown); stage.addEventListener(KeyboardEvent.KEY_UP, keyState.onKeyUp); _local2 = new BitmapData(SCREEN_WIDTH, SCREEN_HEIGHT, false, 0); _local3 = new Bitmap(_local2); rootSprite.addChild(_local3); mainLoop.init(rootSprite, keyState, _local2, _local3, sounds); }; mainLoop.update(); } } }//package
Section 57
//Lbr_SoundBgm (Lbr_SoundBgm) package { import mx.core.*; public class Lbr_SoundBgm extends SoundAsset { } }//package
Section 58
//Lbr_SoundBurstBall (Lbr_SoundBurstBall) package { import mx.core.*; public class Lbr_SoundBurstBall extends SoundAsset { } }//package
Section 59
//Lbr_SoundBurstMine (Lbr_SoundBurstMine) package { import mx.core.*; public class Lbr_SoundBurstMine extends SoundAsset { } }//package
Section 60
//Lbr_SoundExtend (Lbr_SoundExtend) package { import mx.core.*; public class Lbr_SoundExtend extends SoundAsset { } }//package
Section 61
//Lbr_SoundGetEnergy (Lbr_SoundGetEnergy) package { import mx.core.*; public class Lbr_SoundGetEnergy extends SoundAsset { } }//package
Section 62
//Lbr_SoundGetSmallEnergy (Lbr_SoundGetSmallEnergy) package { import mx.core.*; public class Lbr_SoundGetSmallEnergy extends SoundAsset { } }//package
Section 63
//Lbr_SoundPlayerMiss (Lbr_SoundPlayerMiss) package { import mx.core.*; public class Lbr_SoundPlayerMiss extends SoundAsset { } }//package
Section 64
//Lbr_SoundShot (Lbr_SoundShot) package { import mx.core.*; public class Lbr_SoundShot extends SoundAsset { } }//package
Section 65
//Lbr_SoundWarning (Lbr_SoundWarning) package { import mx.core.*; public class Lbr_SoundWarning extends SoundAsset { } }//package

Library Items

Symbol 1 Sound {Lbr_SoundBurstBall} [Lbr_SoundBurstBall]
Symbol 2 Sound {Lbr_SoundWarning} [Lbr_SoundWarning]
Symbol 3 Sound {Lbr_SoundShot} [Lbr_SoundShot]
Symbol 4 Sound {Lbr_SoundGetEnergy} [Lbr_SoundGetEnergy]
Symbol 5 Sound {Lbr_SoundBgm} [Lbr_SoundBgm]
Symbol 6 Sound {Lbr_SoundGetSmallEnergy} [Lbr_SoundGetSmallEnergy]
Symbol 7 Sound {Lbr_SoundPlayerMiss} [Lbr_SoundPlayerMiss]
Symbol 8 Sound {Lbr_SoundBurstMine} [Lbr_SoundBurstMine]
Symbol 9 Sound {Lbr_SoundExtend} [Lbr_SoundExtend]

Special Tags

FileAttributes (69)Timeline Frame 1Access network only, Metadata present, AS3.
SWFMetaData (77)Timeline Frame 1436 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 1 as "Lbr_SoundBurstBall"
ExportAssets (56)Timeline Frame 1Symbol 2 as "Lbr_SoundWarning"
ExportAssets (56)Timeline Frame 1Symbol 3 as "Lbr_SoundShot"
ExportAssets (56)Timeline Frame 1Symbol 4 as "Lbr_SoundGetEnergy"
ExportAssets (56)Timeline Frame 1Symbol 5 as "Lbr_SoundBgm"
ExportAssets (56)Timeline Frame 1Symbol 6 as "Lbr_SoundGetSmallEnergy"
ExportAssets (56)Timeline Frame 1Symbol 7 as "Lbr_SoundPlayerMiss"
ExportAssets (56)Timeline Frame 1Symbol 8 as "Lbr_SoundBurstMine"
ExportAssets (56)Timeline Frame 1Symbol 9 as "Lbr_SoundExtend"
SerialNumber (41)Timeline Frame 1

Labels

"Lbr"Frame 1




http://swfchan.com/4/16635/info.shtml
Created: 1/6 -2019 15:46:52 Last modified: 1/6 -2019 15:46:52 Server time: 05/05 -2024 05:15:26