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