Section 1
//Bar (abagames.la2.barrage.Bar)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Bar extends Barrage {
private const FIRE_INTERVAL:Number = 60;
private const FIRE_SPEED:Number = 1;
public function Bar(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:int;
var _local4:int;
var _local5:Number;
_local3 = (2 + (_arg2.rank * 4));
_local4 = _arg2.cnt;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) / (1 + _arg2.rank)), (_local3 * 7))){
return;
};
if ((_local4 % 7) != 0){
return;
};
if (!_arg2.fires){
_arg2.fires = true;
_arg2.fireDeg = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
_arg2.firePos.x = _arg1.x;
_arg2.firePos.y = _arg1.y;
};
_local5 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
fire(_arg2.firePos, _arg2.fireDeg, _local5, _arg2.tainted);
}
}
}//package abagames.la2.barrage
Section 2
//Barrage (abagames.la2.barrage.Barrage)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Barrage {
protected var player:Player;
protected var bullets:BulletPool;
protected var particles:ParticlePool;
public function Barrage(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
this.bullets = _arg1;
this.particles = _arg2;
this.player = _arg3;
}
protected function fire(_arg1:Vector, _arg2:Number, _arg3:Number, _arg4:Boolean=false):Boolean{
var _local5:Bullet;
var _local6:int;
var _local7:Particle;
if (!bullets.hasNextInstance){
return (false);
};
_local5 = Bullet(bullets.getInstance());
_local5.add(_arg1.x, _arg1.y, _arg2, _arg3, _arg4);
_local6 = 0;
while (_local6 < 5) {
_local7 = Particle(particles.getInstanceForced());
_local7.add(_arg1.x, _arg1.y, ((_arg2 + (Math.random() * 0.2)) - 0.1), (_arg3 * (2 + Math.random())), 100, 200, 200);
_local6++;
};
return (true);
}
public function update(_arg1:Vector, _arg2:BarrageState):void{
}
}
}//package abagames.la2.barrage
Section 3
//BarrageState (abagames.la2.barrage.BarrageState)
package abagames.la2.barrage {
import abagames.util.*;
public class BarrageState {
public var tainted:Boolean;
private var _speed:Number;
private var _rank:Number;
public var fireDegVel:Number;
public var fireCnt:int;
public var onCell:Boolean;
private var _interval:Number;
private var _cnt:int;
private var isFirst:Boolean;
public var fireDeg:Number;
public var fires:Boolean;
public var firePos:Vector;
public function BarrageState(){
firePos = new Vector();
}
public function get interval():Number{
return (_interval);
}
public function get speed():Number{
return (_speed);
}
public function update(_arg1:int, _arg2:int=1):Boolean{
if (tainted){
_rank = (_rank + ((1 - _rank) * 0.003));
};
_cnt--;
if (_cnt >= _arg2){
return (false);
};
if (_cnt <= 0){
_cnt = _arg1;
if (!onCell){
_cnt = (_cnt * 2);
};
fires = false;
};
if (isFirst){
isFirst = false;
return (false);
};
return (true);
}
public function init(_arg1:Number, _arg2:Number):void{
tainted = false;
onCell = true;
fireCnt = 0;
fireDeg = 0;
fireDegVel = 1;
fires = false;
_cnt = 0;
_rank = 0;
_interval = _arg1;
_speed = _arg2;
isFirst = true;
}
public function get cnt():int{
return (_cnt);
}
public function get rank():Number{
return (_rank);
}
}
}//package abagames.la2.barrage
Section 4
//Nway (abagames.la2.barrage.Nway)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Nway extends Barrage {
private const FIRE_INTERVAL:Number = 100;
private const FIRE_SPEED:Number = 1;
public function Nway(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:int;
var _local5:Number;
var _local6:Number;
var _local7:int;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) / (1 + _arg2.rank)))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = (3 + (int((_arg2.rank * 5)) * 2));
_local5 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
_local6 = (((Math.PI / 3) * 2) / (_local4 - 1));
_local5 = (_local5 - (Math.PI / 3));
_local7 = 0;
while (_local7 < _local4) {
fire(_arg1, _local5, _local3, _arg2.tainted);
_local5 = (_local5 + _local6);
_local7++;
};
}
}
}//package abagames.la2.barrage
Section 5
//NwayHat (abagames.la2.barrage.NwayHat)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class NwayHat extends Barrage {
private const FIRE_INTERVAL:Number = 100;
private const FIRE_SPEED:Number = 1;
public function NwayHat(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:int;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:int;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) / (1 + _arg2.rank)))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = (3 + (int((_arg2.rank * 5)) * 2));
_local5 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
_local6 = (Math.PI / (_local4 - 1));
_local7 = _local5;
_local8 = _local3;
_local9 = 0;
while (_local9 < int(((_local4 + 1) / 2))) {
fire(_arg1, _local7, _local8, _arg2.tainted);
_local8 = (_local8 + (_local3 * 0.22));
_local7 = (_local7 + _local6);
_local9++;
};
_local7 = _local5;
_local8 = _local3;
_local9 = 0;
while (_local9 < int(((_local4 + 1) / 2))) {
fire(_arg1, _local7, _local8, _arg2.tainted);
_local8 = (_local8 + (_local3 * 0.22));
_local7 = (_local7 - _local6);
_local9++;
};
}
}
}//package abagames.la2.barrage
Section 6
//Random (abagames.la2.barrage.Random)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Random extends Barrage {
private const FIRE_INTERVAL:Number = 60;
private const FIRE_SPEED:Number = 1;
public function Random(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:Number;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) * (1 - (_arg2.rank * 0.95))))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = (Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y)) + (((Math.random() - 0.5) * Math.PI) / 3));
fire(_arg1, _local4, _local3, _arg2.tainted);
}
}
}//package abagames.la2.barrage
Section 7
//Rapid (abagames.la2.barrage.Rapid)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Rapid extends Barrage {
private const FIRE_INTERVAL:Number = 40;
private const FIRE_SPEED:Number = 1;
public function Rapid(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:Number;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) * (1 - (_arg2.rank * 0.95))))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
fire(_arg1, _local4, _local3, _arg2.tainted);
}
}
}//package abagames.la2.barrage
Section 8
//Shotgun (abagames.la2.barrage.Shotgun)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Shotgun extends Barrage {
private const FIRE_INTERVAL:Number = 80;
private const FIRE_SPEED:Number = 1;
public function Shotgun(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:int;
var _local5:Number;
var _local6:int;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) / (1 + _arg2.rank)))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = (2 + int((_arg2.rank * 10)));
_local5 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
_local6 = 0;
while (_local6 < _local4) {
fire(_arg1, (_local5 + ((Math.random() - 0.5) * 0.3)), (_local3 * (1 + ((Math.random() - 0.5) * 0.3))), _arg2.tainted);
_local6++;
};
}
}
}//package abagames.la2.barrage
Section 9
//Spray (abagames.la2.barrage.Spray)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Spray extends Barrage {
private const FIRE_INTERVAL:Number = 30;
private const FIRE_SPEED:Number = 1;
public function Spray(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:Number;
var _local5:int;
var _local6:Number;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) * (1 - (_arg2.rank * 0.9))))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
_local5 = (3 + (int((_arg2.rank * 5)) * 2));
_local6 = (Math.PI / (_local5 + 1));
_arg2.fireCnt = (_arg2.fireCnt + _arg2.fireDegVel);
if ((((_arg2.fireCnt >= ((_local5 + 1) / 2))) || ((_arg2.fireCnt <= (-((_local5 + 1)) / 2))))){
_arg2.fireDegVel = (_arg2.fireDegVel * -1);
_arg2.fireCnt = (_arg2.fireCnt + (_arg2.fireDegVel * 2));
};
fire(_arg1, (_local4 + (_local6 * _arg2.fireCnt)), _local3, _arg2.tainted);
}
}
}//package abagames.la2.barrage
Section 10
//Wave (abagames.la2.barrage.Wave)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Wave extends Barrage {
private const FIRE_INTERVAL:Number = 60;
private const FIRE_SPEED:Number = 1;
public function Wave(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:Number;
var _local4:int;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:int;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) / (1 + _arg2.rank)))){
return;
};
_local3 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local4 = (3 + (int((_arg2.rank * 5)) * 2));
_local5 = ((Math.PI / 3) / (_local4 + 2));
_arg2.fireCnt++;
if ((_arg2.fireCnt % 2) == 0){
_local5 = (_local5 * -1);
};
_local6 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
_local7 = _local3;
_local8 = 0;
while (_local8 < int(((_local4 + 1) / 2))) {
fire(_arg1, _local6, _local7, _arg2.tainted);
_local7 = (_local7 - (_local3 * 0.08));
_local6 = (_local6 + _local5);
_local8++;
};
}
}
}//package abagames.la2.barrage
Section 11
//Whip (abagames.la2.barrage.Whip)
package abagames.la2.barrage {
import abagames.util.*;
import abagames.la2.*;
public class Whip extends Barrage {
private const FIRE_INTERVAL:Number = 80;
private const FIRE_SPEED:Number = 1;
public function Whip(_arg1:BulletPool, _arg2:ParticlePool, _arg3:Player){
super(_arg1, _arg2, _arg3);
}
override public function update(_arg1:Vector, _arg2:BarrageState):void{
var _local3:int;
var _local4:int;
var _local5:Number;
var _local6:Number;
_local3 = (2 + (_arg2.rank * 5));
_local4 = _arg2.cnt;
if (!_arg2.update(((FIRE_INTERVAL * _arg2.interval) / (1 + _arg2.rank)), (_local3 * 3))){
return;
};
if ((_local4 % 3) != 0){
return;
};
_local5 = ((FIRE_SPEED * _arg2.speed) * (1 + _arg2.rank));
_local5 = (_local5 * (1 + ((_local3 - int((_local4 / 3))) * 0.2)));
_local6 = Math.atan2((player.pos.x - _arg1.x), (player.pos.y - _arg1.y));
fire(_arg1, _local6, _local5, _arg2.tainted);
}
}
}//package abagames.la2.barrage
Section 12
//Background (abagames.la2.Background)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
import flash.geom.*;
public class Background {
private var buffer:BitmapData;
private var heightMapX:Number;
private var heightMapY:Number;
private var field:Field;
private var shadowIdxNext:int;
private var heightMapWidth:int;
private var shadows:Array;
private var shadowRect:Rectangle;
private var heightMapYScroll:Number;
private var heightMap:Array;
private var heightMapSquareRect:Rectangle;
private var heightMapHeight:int;
private var shadowIdx:int;
public static const HEIGHT_MAP_SQUARE_SIZE:Number = 20;
public function Background(_arg1:BitmapData, _arg2:Field){
var _local3:int;
var _local4:int;
var _local5:Array;
var _local6:int;
var _local7:Number;
super();
this.buffer = _arg1;
this.field = _arg2;
heightMapWidth = (_arg2.size.x / HEIGHT_MAP_SQUARE_SIZE);
heightMapHeight = (_arg2.size.y / HEIGHT_MAP_SQUARE_SIZE);
heightMap = new Array();
_local3 = 0;
while (_local3 <= heightMapWidth) {
_local5 = new Array();
_local6 = 0;
while (_local6 <= heightMapHeight) {
_local7 = 0;
if (((!(((_local3 % 10) == 0))) && (!(((_local6 % 10) == 0))))){
_local7 = (Math.random() * 25);
};
_local5.push(_local7);
_local6++;
};
heightMap.push(_local5);
_local3++;
};
heightMapSquareRect = new Rectangle(0, 0, HEIGHT_MAP_SQUARE_SIZE, HEIGHT_MAP_SQUARE_SIZE);
shadows = new Array();
_local4 = 0;
while (_local4 < 0x0400) {
shadows.push(new Shadow());
_local4++;
};
shadowIdx = (shadowIdxNext = 0);
shadowRect = new Rectangle();
heightMapX = (heightMapY = (heightMapYScroll = 0));
}
public function update():void{
var _local1:Number;
var _local2:int;
var _local3:int;
var _local4:Number;
var _local5:int;
var _local6:Number;
var _local7:int;
var _local8:int;
var _local9:Number;
var _local10:Number;
var _local11:Number;
var _local12:Number;
var _local13:int;
heightMapX = (field.offset.x * 0.5);
heightMapY = (field.offset.y * 0.5);
_local1 = (heightMapY + heightMapYScroll);
if (_local1 < 0){
_local1 = (_local1 + field.size.y);
};
if (_local1 >= field.size.y){
_local1 = (_local1 - field.size.y);
};
_local3 = (heightMapX / HEIGHT_MAP_SQUARE_SIZE);
_local4 = (heightMapX % HEIGHT_MAP_SQUARE_SIZE);
_local5 = (_local1 / HEIGHT_MAP_SQUARE_SIZE);
_local6 = (_local1 % HEIGHT_MAP_SQUARE_SIZE);
_local7 = 0;
while (_local7 <= ((heightMapHeight / Field.SIZE_RATIO) + 1)) {
_local2 = _local3;
_local8 = 0;
while (_local8 <= ((heightMapWidth / Field.SIZE_RATIO) + 1)) {
_local9 = heightMap[_local2][_local5];
heightMapSquareRect.x = (((_local8 * HEIGHT_MAP_SQUARE_SIZE) - _local4) - _local9);
heightMapSquareRect.y = (((_local7 * HEIGHT_MAP_SQUARE_SIZE) - _local6) - _local9);
_local10 = (((_local8 * HEIGHT_MAP_SQUARE_SIZE) - _local4) - 200);
_local11 = (((_local7 * HEIGHT_MAP_SQUARE_SIZE) - _local6) - 150);
_local12 = Math.sqrt(((_local10 * _local10) + (_local11 * _local11)));
_local12 = (_local12 * 0.012);
_local12 = (1.5 - _local12);
if (_local12 > 1){
_local12 = 1;
};
if (_local12 > 0){
_local13 = (((int((85 * _local12)) * 65536) + (int((51 * _local12)) * 0x0100)) + int((153 * _local12)));
buffer.fillRect(heightMapSquareRect, _local13);
};
_local2++;
_local8++;
};
_local5++;
if (_local5 >= heightMapHeight){
_local5 = (_local5 - heightMapHeight);
};
_local7++;
};
drawShadows();
heightMapYScroll = (heightMapYScroll - 0.1);
if (heightMapYScroll < 0){
heightMapYScroll = (heightMapYScroll + field.size.y);
};
}
public function addShadow(_arg1:Number, _arg2:Number, _arg3:Vector):void{
shadows[shadowIdxNext].set(_arg1, _arg2, _arg3.x, _arg3.y);
shadowIdxNext--;
if (shadowIdxNext < 0){
shadowIdxNext = (shadowIdxNext + shadows.length);
};
}
public function drawShadows():void{
var _local1:int;
var _local2:Shadow;
var _local3:Number;
var _local4:int;
var _local5:Number;
var _local6:Number;
var _local7:int;
var _local8:Number;
_local1 = 0;
while (_local1 < shadows.length) {
if (shadowIdx == shadowIdxNext){
break;
};
_local2 = shadows[shadowIdx];
_local3 = ((_local2.pos.x * 0.5) - heightMapX);
_local4 = ((_local2.pos.x * 0.5) / HEIGHT_MAP_SQUARE_SIZE);
_local5 = ((_local2.pos.y * 0.5) - heightMapY);
_local6 = ((_local2.pos.y * 0.5) - heightMapY);
if (_local6 < 0){
_local6 = (_local6 + field.size.y);
};
_local7 = (_local6 / HEIGHT_MAP_SQUARE_SIZE);
_local8 = heightMap[_local4][_local7];
shadowRect.x = (_local3 - _local8);
shadowRect.y = (_local5 - _local8);
shadowRect.width = (_local2.size.x * 0.5);
shadowRect.height = (_local2.size.y * 0.5);
buffer.fillRect(shadowRect, 0);
shadowIdx--;
if (shadowIdx < 0){
shadowIdx = (shadowIdx + shadows.length);
};
_local1++;
};
}
}
}//package abagames.la2
import abagames.util.*;
class Shadow {
public var size:Vector;
public var pos:Vector;
private function Shadow(){
pos = new Vector();
size = new Vector();
}
public function set(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{
pos.x = (_arg1 + 250);
pos.y = (_arg2 + 150);
size.x = _arg3;
size.y = _arg4;
}
}
Section 13
//Bullet (abagames.la2.Bullet)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
public class Bullet extends Actor {
private var buffer:BitmapData;
private var deg:Number;
private var speed:Number;
private var _tainted:Boolean;
private var _pos:Vector;
private var player:Player;
private var particles:ParticlePool;
private var cnt:int;
private var shapes:Array;
private var bullets:BulletPool;
private var field:Field;
private static const SIZE:Number = 4;
public function Bullet(_arg1:BitmapData, _arg2:Player, _arg3:Field, _arg4:Background, _arg5:BulletPool, _arg6:ParticlePool){
var _local7:Shape;
super();
this.buffer = _arg1;
this.player = _arg2;
this.field = _arg3;
this.bullets = _arg5;
this.particles = _arg6;
_pos = new Vector();
shapes = new Array();
_local7 = new Shape(_arg1, _arg3, _arg4);
_local7.addBox(0, 0, (SIZE * 2), (SIZE * 2), 2, 0, 220, 220);
shapes.push(_local7);
_local7 = new Shape(_arg1, _arg3, _arg4);
_local7.addBox(0, 0, (SIZE * 2), (SIZE * 2), 2, 180, 180, 250);
shapes.push(_local7);
}
public function get tainted():Boolean{
return (_tainted);
}
override public function update():void{
var _local1:Number;
var _local2:int;
_pos.x = (_pos.x + (Math.sin(deg) * speed));
_pos.y = (_pos.y + (Math.cos(deg) * speed));
if (!field.isIn(_pos)){
remove();
return;
};
if (((!(_tainted)) && (((((((field.existsTaintedCellScreen((_pos.x - SIZE), (_pos.y - SIZE))) || (field.existsTaintedCellScreen((_pos.x + SIZE), (_pos.y - SIZE))))) || (field.existsTaintedCellScreen((_pos.x - SIZE), (_pos.y + SIZE))))) || (field.existsTaintedCellScreen((_pos.x + SIZE), (_pos.y + SIZE))))))){
addParticles(Math.PI);
remove();
return;
};
_local2 = (cnt % 30);
if (_local2 < 15){
_local1 = (_local2 * (1 / 15));
} else {
_local1 = (2 - (_local2 * (1 / 15)));
};
if (_tainted){
shapes[1].drawDistorted(_pos, _local1);
} else {
shapes[0].drawDistorted(_pos, _local1);
};
cnt++;
}
public function addParticles(_arg1:Number=0):void{
var _local2:int;
var _local3:Particle;
_local2 = 0;
while (_local2 < 7) {
_local3 = Particle(particles.getInstanceForced());
_local3.add(_pos.x, _pos.y, (((deg + _arg1) + (Math.random() * 0.4)) - 0.2), (speed * (2 + Math.random())), 100, 200, 200);
_local2++;
};
}
public function get pos():Vector{
return (_pos);
}
public function checkHitToPlayer(_arg1:Vector):Boolean{
return ((_pos.dist(_arg1) < Player.BULLET_HIT_SIZE));
}
public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Boolean=false):void{
_pos.x = _arg1;
_pos.y = _arg2;
deg = _arg3;
speed = _arg4;
_tainted = _arg5;
cnt = 0;
}
}
}//package abagames.la2
Section 14
//BulletPool (abagames.la2.BulletPool)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
public class BulletPool extends ActorPool {
private var buffer:BitmapData;
private var particles:ParticlePool;
private var player:Player;
private var background:Background;
private var field:Field;
public function BulletPool(_arg1:int, _arg2:BitmapData, _arg3:Player, _arg4:Field, _arg5:Background, _arg6:ParticlePool){
this.buffer = _arg2;
this.player = _arg3;
this.field = _arg4;
this.background = _arg5;
this.particles = _arg6;
super(_arg1);
}
public function checkHitToPlayer(_arg1:Vector):Boolean{
var _local2:int;
_local2 = 0;
while (_local2 < actorNum) {
if (Bullet(actors[_local2]).checkHitToPlayer(_arg1)){
return (true);
};
_local2++;
};
return (false);
}
override protected function createActor():Actor{
return (new Bullet(buffer, player, field, background, this, particles));
}
public function removeTainted(_arg1:ScoreboardPool, _arg2:Boolean):int{
var _local3:int;
var _local4:int;
var _local5:Bullet;
var _local6:Scoreboard;
_local3 = 0;
_local4 = 0;
while (_local4 < actorNum) {
_local5 = Bullet(actors[_local4]);
if (_local5.tainted){
_local5.addParticles();
if (_arg2){
_local3++;
if (_arg1.hasNextInstance){
_local6 = Scoreboard(_arg1.getInstance());
_local6.add(_local5.pos.x, _local5.pos.y, _local3, _local3, 10);
} else {
field.addScore(_local3);
};
};
_local5.remove();
_local4--;
};
_local4++;
};
return (_local3);
}
}
}//package abagames.la2
Section 15
//Field (abagames.la2.Field)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
import abagames.la2.barrage.*;
import flash.geom.*;
public class Field {
private const DEFAULT_FIRE_INTERVAL:Number = 1;
private const DEFAULT_TURRET_INSTANCES_NUM:Number = 3;
private const DEFAULT_UPDATE_INTERVAL:Number = 6;
private const DEFAULT_FIRE_SPEED:Number = 1;
private var _taintedCellsCenterPosX:Number;
private var left:int;
private var _cellsHeight:int;
private var leftShapePos:Vector;
private var fireInterval:Number;
private var cellsTaintNext:Array;
private var turretInstancesNum:Number;
private var buffer:BitmapData;
private var screenPos:Vector;
private var cells:Array;
private var cellsCnt:Array;
private var scoreboards:ScoreboardPool;
private var cellRect:Rectangle;
private var keyState:KeyState;
private var turrets:TurretPool;
private var aPressed:Boolean;
private var cellsTaint:Array;
private var score:int;
public var offset:Vector;
private var _cellsWidth:int;
private var barrageChangeCnt:int;
private var barrages:Array;
private var _outerSize:Vector;
private var particles:ParticlePool;
private var updateInterval:Number;
private var bullets:BulletPool;
private var fireSpeed:Number;
private var barrageIdx:int;
private var gameoverCnt:int;
private var _taintedCellsNum:int;
private var updateCnt:Number;
private var player:Player;
private var _size:Vector;
private var titleCnt:int;
private var shapes:Array;
private var lineRect:Rectangle;
private var mainLoop:MainLoop;
public static const SIZE_RATIO:Number = 1.25;
public static const CELLS_SQUARE_SIZE:Number = 12;
private static const GLIDER:Array = [[[-1, 1], [0, 1], [1, 1], [1, 0], [0, -1]], [[1, -1], [1, 0], [1, 1], [0, -1], [-1, 0]], [[-1, -1], [0, -1], [1, -1], [-1, 0], [0, 1]], [[-1, -1], [-1, 0], [-1, 1], [0, 1], [1, 0]]];
public static const SIZE_OFFSET_RATIO:Number = 0.2;
public function Field(_arg1:BitmapData){
var _local2:Number;
var _local3:int;
var _local4:Array;
var _local5:Array;
var _local6:Array;
var _local7:Array;
var _local8:int;
super();
this.buffer = _arg1;
_local2 = (La2.SCREEN_WIDTH * SIZE_RATIO);
_local2 = ((int((_local2 / Background.HEIGHT_MAP_SQUARE_SIZE)) + 1) * Background.HEIGHT_MAP_SQUARE_SIZE);
_size = new Vector(_local2, _local2);
_outerSize = new Vector((_size.x * 1.05), (_size.y * 1.05));
_cellsWidth = (_size.x / CELLS_SQUARE_SIZE);
_cellsHeight = (_size.y / CELLS_SQUARE_SIZE);
cells = new Array();
cellsCnt = new Array();
cellsTaint = new Array();
cellsTaintNext = new Array();
_local3 = 0;
while (_local3 <= _cellsWidth) {
_local4 = new Array();
_local5 = new Array();
_local6 = new Array();
_local7 = new Array();
_local8 = 0;
while (_local8 <= _cellsHeight) {
_local4.push(false);
_local5.push(false);
_local6.push(false);
_local7.push(false);
_local8++;
};
cells.push(_local4);
cellsCnt.push(_local5);
cellsTaint.push(_local6);
cellsTaintNext.push(_local7);
_local3++;
};
offset = new Vector();
screenPos = new Vector();
leftShapePos = new Vector();
leftShapePos.y = 12;
lineRect = new Rectangle();
}
public function get size():Vector{
return (_size);
}
public function appearedTurret():void{
var _local1:int;
barrageChangeCnt--;
if (barrageChangeCnt <= 0){
barrageChangeCnt = 8;
_local1 = barrageIdx;
barrageIdx = int((Math.random() * barrages.length));
if (barrageIdx == _local1){
barrageIdx++;
if (barrageIdx >= barrages.length){
barrageIdx = 0;
};
};
};
}
public function removeCell(_arg1:int, _arg2:int):void{
cells[_arg1][_arg2] = false;
cellsTaint[_arg1][_arg2] = false;
}
public function startTitle():void{
init();
aPressed = true;
left = 0;
titleCnt = 0;
turretInstancesNum = 0;
turrets.instancesNum = 0;
updateCnt = (updateInterval = 15);
}
public function get outerSize():Vector{
return (_outerSize);
}
public function get taintedCellsNum():int{
return (_taintedCellsNum);
}
private function init():void{
gameoverCnt = -1;
updateCnt = (updateInterval = DEFAULT_UPDATE_INTERVAL);
fireInterval = DEFAULT_FIRE_INTERVAL;
fireSpeed = DEFAULT_FIRE_SPEED;
turretInstancesNum = DEFAULT_TURRET_INSTANCES_NUM;
removeAllCells();
}
private function updateCells():void{
var _local1:int;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:Turret;
var _local6:Boolean;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:Particle;
updateCnt--;
if (updateCnt <= 0){
updateCnt = updateInterval;
_local2 = 0;
while (_local2 < _cellsHeight) {
_local1 = 0;
while (_local1 < _cellsWidth) {
if ((((((((_local1 > 0)) && ((_local1 < (_cellsWidth - 1))))) && ((_local2 > 0)))) && ((_local2 < (_cellsHeight - 1))))){
} else {
if (Math.random() < 0.3){
cells[_local1][_local2] = true;
if ((((Math.random() < 0.01)) && (turrets.hasNextInstance))){
_local4 = int(((Math.atan2((_local1 - (_cellsWidth / 2)), (-(_local2) + (_cellsHeight / 2))) / Math.PI) * 4));
if (_local4 < 0){
_local4 = (_local4 + 8);
};
_local5 = Turret(turrets.getInstance());
_local5.add(_local1, _local2, _local4, fireInterval, fireSpeed, barrages[barrageIdx]);
};
} else {
cells[_local1][_local2] = false;
};
cellsTaint[_local1][_local2] = false;
};
_local1++;
};
_local2++;
};
_local2 = 1;
while (_local2 < (_cellsHeight - 1)) {
_local1 = 1;
while (_local1 < (_cellsWidth - 1)) {
_local3 = 0;
_local6 = false;
_local7 = -1;
while (_local7 <= 1) {
_local8 = -1;
while (_local8 <= 1) {
if (cells[(_local1 + _local8)][(_local2 + _local7)]){
_local3++;
};
if (cellsTaint[(_local1 + _local8)][(_local2 + _local7)]){
_local6 = true;
};
_local8++;
};
_local7++;
};
cellsCnt[_local1][_local2] = _local3;
cellsTaintNext[_local1][_local2] = _local6;
_local1++;
};
_local2++;
};
_local2 = 1;
while (_local2 < (_cellsHeight - 1)) {
_local1 = 1;
while (_local1 < (_cellsWidth - 1)) {
_local3 = cellsCnt[_local1][_local2];
if (cells[_local1][_local2]){
if ((((_local3 < 3)) || ((_local3 > 4)))){
cells[_local1][_local2] = false;
};
} else {
if (_local3 == 3){
cells[_local1][_local2] = true;
};
};
cellsTaint[_local1][_local2] = ((cells[_local1][_local2]) && (cellsTaintNext[_local1][_local2]));
_local1++;
};
_local2++;
};
};
_taintedCellsNum = 0;
_taintedCellsCenterPosX = 0;
_local2 = 0;
while (_local2 < _cellsHeight) {
_local1 = 0;
while (_local1 < _cellsWidth) {
if (cells[_local1][_local2]){
getScreenPos(_local1, _local2);
_local9 = 0;
if (cellsTaint[_local1][_local2]){
_local9++;
_taintedCellsNum++;
_taintedCellsCenterPosX = (_taintedCellsCenterPosX + _local1);
};
if ((((((((_local1 == 0)) || ((_local1 == (_cellsWidth - 1))))) || ((_local2 == 0)))) || ((_local2 == (_cellsHeight - 1))))){
_local9 = (_local9 + 2);
};
if ((((_local9 == 0)) && ((updateCnt <= 1)))){
_local10 = Particle(particles.getInstanceForced());
_local10.add(screenPos.x, screenPos.y, ((Math.random() * Math.PI) * 2), ((Math.random() * 3) + 1), 100, 250, 100);
};
shapes[_local9].draw(screenPos);
};
_local1++;
};
_local2++;
};
if (taintedCellsNum > 0){
_taintedCellsCenterPosX = (_taintedCellsCenterPosX / _taintedCellsNum);
} else {
_taintedCellsCenterPosX = -1;
};
}
public function drawStatus():void{
var _local1:int;
Letter.drawNum(score, (La2.SCREEN_WIDTH - 16), 16);
_local1 = 0;
while (_local1 < left) {
leftShapePos.x = ((_local1 * 16) + 12);
player.drawShape(leftShapePos);
_local1++;
};
if (titleCnt >= 0){
titleCnt++;
Letter.drawString("L.A.2", 100, 100, 1);
lineRect.x = 0;
lineRect.y = 120;
lineRect.width = 200;
lineRect.height = 4;
buffer.fillRect(lineRect, 0x606060);
lineRect.y = (lineRect.y - 2);
lineRect.width = (lineRect.width - 2);
buffer.fillRect(lineRect, 0xC0C0C0);
if ((titleCnt % 60) < 30){
Letter.drawString("PUSH Z", 260, 340, 0.8);
};
if (keyState.a){
if (!aPressed){
mainLoop.startInGame();
};
} else {
aPressed = false;
};
};
if (gameoverCnt >= 0){
gameoverCnt++;
if (gameoverCnt > 30){
Letter.drawString("GAME OVER", 100, 150);
if (keyState.a){
if (!aPressed){
mainLoop.startTitle();
return;
};
} else {
aPressed = false;
};
if (gameoverCnt > 450){
mainLoop.startTitle();
};
};
};
}
private function startGameover():void{
mainLoop.fadeoutBgm();
gameoverCnt = 0;
aPressed = true;
}
public function destroyedPlayer():Boolean{
removeTaintedCells(false);
left--;
if (left < 0){
startGameover();
};
return ((left >= 0));
}
private function updateDifficulty():void{
updateInterval = (updateInterval * 0.99995);
if (updateInterval < 2){
updateInterval = 2;
};
fireInterval = (fireInterval * 0.99995);
if (fireInterval < 0.2){
fireInterval = 0.2;
};
fireSpeed = (fireSpeed * 1.0001);
if (fireSpeed > 2){
fireSpeed = 2;
};
turretInstancesNum = (turretInstancesNum * 1.00005);
if (turretInstancesNum >= turrets.maxInstancesNum){
turretInstancesNum = turrets.maxInstancesNum;
};
turrets.instancesNum = int(turretInstancesNum);
}
public function resetDifficulty():void{
updateInterval = (updateInterval + ((DEFAULT_UPDATE_INTERVAL - updateInterval) * 0.5));
fireInterval = (fireInterval + ((DEFAULT_FIRE_INTERVAL - fireInterval) * 0.5));
fireSpeed = (fireSpeed + ((DEFAULT_FIRE_SPEED - fireSpeed) * 0.5));
turretInstancesNum = (turretInstancesNum + ((DEFAULT_TURRET_INSTANCES_NUM - turretInstancesNum) * 0.5));
}
public function addGlider(_arg1:Vector, _arg2:Number):void{
var _local3:int;
var _local4:int;
var _local5:Number;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
_local3 = int(((_arg1.x + (CELLS_SQUARE_SIZE / 2)) / CELLS_SQUARE_SIZE));
_local4 = int(((_arg1.y + (CELLS_SQUARE_SIZE / 2)) / CELLS_SQUARE_SIZE));
_local5 = _arg2;
if (_local5 < 0){
_local5 = (_local5 + (Math.PI * 2));
};
_local6 = int(((_local5 / Math.PI) * 2));
_local7 = 0;
while (_local7 < 5) {
_local8 = (_local3 + GLIDER[_local6][_local7][0]);
_local9 = (_local4 + GLIDER[_local6][_local7][1]);
if ((((((((_local8 >= 0)) && ((_local8 < _cellsWidth)))) && ((_local9 >= 0)))) && ((_local9 <= _cellsHeight)))){
cells[_local8][_local9] = true;
cellsTaint[_local8][_local9] = true;
};
_local7++;
};
}
public function addScore(_arg1:int):void{
score = (score + _arg1);
}
public function existsTaintedCell(_arg1:Number, _arg2:Number):Boolean{
if ((((((((_arg1 < 0)) || ((_arg1 >= _cellsWidth)))) || ((_arg2 < 0)))) || ((_arg2 >= _cellsHeight)))){
return (false);
};
return (cellsTaint[int(_arg1)][int(_arg2)]);
}
public function setParams(_arg1:TurretPool, _arg2:BulletPool, _arg3:ParticlePool, _arg4:ScoreboardPool, _arg5:Background, _arg6:Player, _arg7:KeyState, _arg8:MainLoop):void{
var _local9:Shape;
this.turrets = _arg1;
this.bullets = _arg2;
this.particles = _arg3;
this.scoreboards = _arg4;
this.player = _arg6;
this.keyState = _arg7;
this.mainLoop = _arg8;
shapes = new Array();
_local9 = new Shape(buffer, this, _arg5);
_local9.addBox(0, 0, (CELLS_SQUARE_SIZE - 2), (CELLS_SQUARE_SIZE - 2), 2, 0, 250, 100);
shapes.push(_local9);
_local9 = new Shape(buffer, this, _arg5);
_local9.addBox(0, 0, (CELLS_SQUARE_SIZE - 2), (CELLS_SQUARE_SIZE - 2), 2, 200, 150, 100);
shapes.push(_local9);
_local9 = new Shape(buffer, this, _arg5);
_local9.addBox(0, 0, (CELLS_SQUARE_SIZE - 2), (CELLS_SQUARE_SIZE - 2), 2, 0, 100, 50);
shapes.push(_local9);
_local9 = new Shape(buffer, this, _arg5);
_local9.addBox(0, 0, (CELLS_SQUARE_SIZE - 2), (CELLS_SQUARE_SIZE - 2), 2, 100, 50, 0);
shapes.push(_local9);
barrages = new Array();
barrages.push(new Nway(_arg2, _arg3, _arg6));
barrages.push(new NwayHat(_arg2, _arg3, _arg6));
barrages.push(new Wave(_arg2, _arg3, _arg6));
barrages.push(new Rapid(_arg2, _arg3, _arg6));
barrages.push(new Random(_arg2, _arg3, _arg6));
barrages.push(new Spray(_arg2, _arg3, _arg6));
barrages.push(new Whip(_arg2, _arg3, _arg6));
barrages.push(new Bar(_arg2, _arg3, _arg6));
barrages.push(new Shotgun(_arg2, _arg3, _arg6));
}
public function getScreenPos(_arg1:Number, _arg2:Number):Vector{
screenPos.x = ((_arg1 * CELLS_SQUARE_SIZE) + (CELLS_SQUARE_SIZE / 2));
screenPos.y = ((_arg2 * CELLS_SQUARE_SIZE) + (CELLS_SQUARE_SIZE / 2));
return (screenPos);
}
public function startInGame():void{
init();
score = 0;
left = 2;
titleCnt = -1;
barrageIdx = -1;
barrageChangeCnt = 0;
appearedTurret();
}
public function existsNotTaintedCellScreen(_arg1:Vector):Boolean{
var _local2:int;
var _local3:int;
_local2 = int(((_arg1.x + (CELLS_SQUARE_SIZE / 2)) / CELLS_SQUARE_SIZE));
_local3 = int(((_arg1.y + (CELLS_SQUARE_SIZE / 2)) / CELLS_SQUARE_SIZE));
if ((((((((_local2 < 0)) || ((_local2 >= _cellsWidth)))) || ((_local3 < 0)))) || ((_local3 >= _cellsHeight)))){
return (false);
};
return (((cells[_local2][_local3]) && (!(cellsTaint[_local2][_local3]))));
}
public function update():void{
if (titleCnt < 0){
updateDifficulty();
};
updateCells();
}
public function existsTaintedCellScreen(_arg1:Number, _arg2:Number):Boolean{
var _local3:int;
var _local4:int;
_local3 = int(((_arg1 + (CELLS_SQUARE_SIZE / 2)) / CELLS_SQUARE_SIZE));
_local4 = int(((_arg2 + (CELLS_SQUARE_SIZE / 2)) / CELLS_SQUARE_SIZE));
if ((((((((_local3 < 0)) || ((_local3 >= _cellsWidth)))) || ((_local4 < 0)))) || ((_local4 >= _cellsHeight)))){
return (false);
};
return (cellsTaint[_local3][_local4]);
}
private function removeAllCells():void{
var _local1:int;
var _local2:int;
_local1 = 0;
while (_local1 < _cellsHeight) {
_local2 = 0;
while (_local2 < _cellsWidth) {
removeCell(_local2, _local1);
_local2++;
};
_local1++;
};
}
public function get cellsHeight():Number{
return (_cellsHeight);
}
public function isInOuter(_arg1:Vector):Boolean{
return ((((((((_arg1.x >= 0)) && ((_arg1.x < _outerSize.x)))) && ((_arg1.y >= 0)))) && ((_arg1.y < _outerSize.y))));
}
public function existsCell(_arg1:Number, _arg2:Number):Boolean{
if ((((((((_arg1 < 0)) || ((_arg1 >= _cellsWidth)))) || ((_arg2 < 0)))) || ((_arg2 >= _cellsHeight)))){
return (false);
};
return (cells[int(_arg1)][int(_arg2)]);
}
public function get taintedCellsCenterPosX():Number{
return (_taintedCellsCenterPosX);
}
public function isIn(_arg1:Vector):Boolean{
return ((((((((_arg1.x >= 0)) && ((_arg1.x < _size.x)))) && ((_arg1.y >= 0)))) && ((_arg1.y < _size.y))));
}
public function removeTaintedCells(_arg1:Boolean=true):int{
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Boolean;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:int;
var _local11:Particle;
var _local12:Scoreboard;
_local4 = 0;
_local5 = turrets.removeTainted();
_local3 = 0;
while (_local3 < _cellsHeight) {
_local2 = 0;
while (_local2 < _cellsWidth) {
if (((cells[_local2][_local3]) && (cellsTaint[_local2][_local3]))){
_local4++;
};
_local2++;
};
_local3++;
};
if (!_arg1){
_local5 = 0;
};
_local6 = true;
if ((((_local5 <= 0)) || ((_local4 <= 0)))){
_local6 = false;
};
_local7 = bullets.removeTainted(scoreboards, _local6);
_local8 = _local7;
_local9 = 0;
_local3 = 0;
while (_local3 < _cellsHeight) {
_local2 = 0;
while (_local2 < _cellsWidth) {
if (((cells[_local2][_local3]) && (cellsTaint[_local2][_local3]))){
removeCell(_local2, _local3);
getScreenPos(_local2, _local3);
_local10 = 0;
while (_local10 < 17) {
_local11 = Particle(particles.getInstanceForced());
_local11.add(screenPos.x, screenPos.y, ((Math.random() * Math.PI) * 2), ((Math.random() * 6) + 1), 250, 50, 50);
_local10++;
};
_local8 = (_local8 + _local5);
_local9++;
if (_local8 > 0){
if (scoreboards.hasNextInstance){
_local12 = Scoreboard(scoreboards.getInstance());
if (_local9 == _local4){
_local12.add(screenPos.x, screenPos.y, _local8, (_local9 + _local7), 60);
} else {
_local12.add(screenPos.x, screenPos.y, _local8, (_local9 + _local7), 20);
};
} else {
addScore(_local8);
};
};
};
_local2++;
};
_local3++;
};
return (_local4);
}
public function get cellsWidth():Number{
return (_cellsWidth);
}
}
}//package abagames.la2
Section 16
//Letter (abagames.la2.Letter)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
public class Letter {
private static var shapes:Array;
private static var pos:Vector;
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]]];
public static function init(_arg1:BitmapData, _arg2:Field, _arg3:Background):void{
var _local4:Shape;
shapes = new Array();
_local4 = new Shape(_arg1, _arg2, _arg3);
_local4.addBox(0, 0, 10, 4, 2, 220, 220, 220);
shapes.push(_local4);
_local4 = new Shape(_arg1, _arg2, _arg3);
_local4.addBox(0, 0, 4, 10, 2, 220, 220, 220);
shapes.push(_local4);
_local4 = new Shape(_arg1, _arg2, _arg3);
_local4.addBox(0, 0, 4, 4, 2, 220, 220, 220);
_local4.addBox(3, -4, 4, 4, 2, 220, 220, 220);
_local4.addBox(-3, 4, 4, 4, 2, 220, 220, 220);
shapes.push(_local4);
pos = new Vector();
}
public static function drawNum(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number=1, _arg5:Boolean=false):void{
var _local6:Number;
var _local7:int;
var _local8:int;
_local6 = _arg2;
_local7 = _arg1;
while (true) {
_local8 = (_local7 % 10);
draw(_local8, _local6, _arg3, _arg4, _arg5);
_local6 = (_local6 - (20 * _arg4));
_local7 = (_local7 / 10);
if (_local7 <= 0){
return;
};
};
}
public static function draw(_arg1:int, _arg2:Number, _arg3:Number, _arg4:Number=1, _arg5:Boolean=false):void{
var _local6:Array;
_local6 = patterns[_arg1];
_arg1 = 0;
while (_local6[_arg1][4] != 99999) {
pos.x = (((_local6[_arg1][0] * 12) * _arg4) + _arg2);
pos.y = (((-(_local6[_arg1][1]) * 11) * _arg4) + _arg3);
if ((((_local6[_arg1][4] >= 75)) && ((_local6[_arg1][4] <= 105)))){
shapes[1].draw(pos, 1, _arg5);
} else {
if (_local6[_arg1][4] == 120){
shapes[2].draw(pos, 1, _arg5);
} else {
shapes[0].draw(pos, 1, _arg5);
};
};
_arg1++;
};
}
public static function drawString(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Number=1, _arg5:Boolean=false):void{
var _local6:Number;
var _local7:int;
var _local8:int;
_local6 = _arg2;
_local7 = 0;
while (_local7 < _arg1.length) {
_local8 = int(_arg1.charCodeAt(_local7));
if (_local8 != 32){
draw(convertCharToInt(_local8), _local6, _arg3, _arg4, _arg5);
};
_local6 = (_local6 + (20 * _arg4));
_local7++;
};
}
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);
}
}
}//package abagames.la2
Section 17
//MainLoop (abagames.la2.MainLoop)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
import flash.media.*;
public class MainLoop {
private var buffer:BitmapData;
private var turrets:TurretPool;
private var sounds:Array;
private var bgmTransform:SoundTransform;
private var rootSprite:Sprite;
private var bgmChannel:SoundChannel;
private var scoreboards:ScoreboardPool;
private var player:Player;
private var bgmFadeout:Boolean;
private var screen:Bitmap;
private var particles:ParticlePool;
private var background:Background;
private var bullets:BulletPool;
private var keyState:KeyState;
private var field:Field;
public function update():void{
buffer.fillRect(buffer.rect, 0);
if (bgmChannel != null){
Shape.distortion = (0.7 + ((bgmChannel.leftPeak + bgmChannel.rightPeak) * 0.3));
if (bgmFadeout){
bgmTransform.volume = (bgmTransform.volume - 0.01);
if (bgmTransform.volume <= 0.05){
bgmTransform.volume = 0;
bgmFadeout = false;
};
bgmChannel.soundTransform = bgmTransform;
};
};
background.update();
particles.update();
scoreboards.update();
field.update();
turrets.update();
bullets.update();
player.update();
field.drawStatus();
}
private function startBgm():void{
bgmTransform.volume = 1;
bgmFadeout = false;
bgmChannel = sounds[0].play(0, 99999, bgmTransform);
}
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;
this.sounds = _arg5;
field = new Field(_arg3);
background = new Background(_arg3, field);
particles = new ParticlePool(0x0200, _arg3, field, background);
scoreboards = new ScoreboardPool(0x0100, field);
player = new Player(_arg3, _arg2, field, background, this);
bullets = new BulletPool(0x0100, _arg3, player, field, background, particles);
turrets = new TurretPool(8, _arg3, player, field, bullets, particles);
player.setParams(bullets, particles, turrets);
field.setParams(turrets, bullets, particles, scoreboards, background, player, _arg2, this);
Letter.init(_arg3, field, background);
startTitle();
bgmTransform = new SoundTransform();
}
public function startTitle():void{
initPools();
player.init();
player.setHidden();
field.startTitle();
stopBgm();
}
public function fadeoutBgm():void{
bgmFadeout = true;
}
public function stopBgm():void{
bgmFadeout = false;
if (bgmChannel != null){
bgmChannel.stop();
};
bgmChannel = null;
}
private function initPools():void{
particles.clear();
scoreboards.clear();
bullets.clear();
turrets.clear();
}
public function playSe(_arg1:int, _arg2:int=1, _arg3:SoundTransform=null):SoundChannel{
return (sounds[_arg1].play(0, _arg2, _arg3));
}
public function startInGame():void{
initPools();
player.init();
field.startInGame();
startBgm();
}
}
}//package abagames.la2
Section 18
//Particle (abagames.la2.Particle)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
import flash.geom.*;
public class Particle extends Actor {
private var buffer:BitmapData;
private var size:Vector;
private var field:Field;
private var pos:Vector;
private var b:int;
private var vel:Vector;
private var g:int;
private var cnt:int;
private var color:int;
private var rect:Rectangle;
private var background:Background;
private var r:int;
public function Particle(_arg1:BitmapData, _arg2:Field, _arg3:Background){
this.buffer = _arg1;
this.field = _arg2;
this.background = _arg3;
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.92);
vel.y = (vel.y * 0.92);
rect.x = ((pos.x - 1) - field.offset.x);
rect.y = ((pos.y - 1) - field.offset.y);
color = (((65536 * int((r * Math.random()))) + (0x0100 * int((g * Math.random())))) + int((b * Math.random())));
buffer.fillRect(rect, color);
background.addShadow((pos.x - 1), (pos.y - 1), size);
cnt--;
if (cnt <= 0){
remove();
};
}
public function add(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:int, _arg7:int):void{
pos.x = _arg1;
pos.y = _arg2;
vel.x = (Math.sin(_arg3) * _arg4);
vel.y = (Math.cos(_arg3) * _arg4);
this.r = _arg5;
this.g = _arg6;
this.b = _arg7;
cnt = ((Math.random() * 15) + 45);
}
}
}//package abagames.la2
Section 19
//ParticlePool (abagames.la2.ParticlePool)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
public class ParticlePool extends ActorPool {
private var buffer:BitmapData;
private var background:Background;
private var field:Field;
public function ParticlePool(_arg1:int, _arg2:BitmapData, _arg3:Field, _arg4:Background){
this.buffer = _arg2;
this.field = _arg3;
this.background = _arg4;
super(_arg1);
}
override protected function createActor():Actor{
return (new Particle(buffer, field, background));
}
}
}//package abagames.la2
Section 20
//Player (abagames.la2.Player)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
import flash.media.*;
public class Player {
private var buffer:BitmapData;
private var turrets:TurretPool;
private var aPressed:Boolean;
private var invincibleCnt:int;
private var deg:Number;
private var flyingSe:SoundChannel;
private var _pos:Vector;
private var speed:Number;
private var shape:Shape;
private var flyingSeTransform:SoundTransform;
private var particles:ParticlePool;
private var bullets:BulletPool;
private var keyState:KeyState;
private var field:Field;
private var mainLoop:MainLoop;
private static const INVINCIBLE_CNT:int = 228;
public static const BULLET_HIT_SIZE:Number = 3;
private static const FIRE_INTERVAL:int = 8;
private static const DEFAULT_SPEED:Number = 4;
private static const DEG_VELOCITY:Number = 0.2;
private static const RESTART_CNT:int = 268;
public function Player(_arg1:BitmapData, _arg2:KeyState, _arg3:Field, _arg4:Background, _arg5:MainLoop){
this.buffer = _arg1;
this.keyState = _arg2;
this.field = _arg3;
this.mainLoop = _arg5;
_pos = new Vector();
shape = new Shape(_arg1, _arg3, _arg4);
shape.addBox(0, 0, 10, 10, 2, 0xFF, 0, 0);
shape.addBox(-4, -8, 6, 6, 1, 0xFF, 150, 0);
shape.addBox(4, -8, 6, 6, 1, 0xFF, 150, 0);
flyingSeTransform = new SoundTransform();
}
public function drawShape(_arg1:Vector):void{
shape.draw(_arg1, 1, false);
}
public function setParams(_arg1:BulletPool, _arg2:ParticlePool, _arg3:TurretPool):void{
this.bullets = _arg1;
this.particles = _arg2;
this.turrets = _arg3;
}
public function update():void{
var _local1:Number;
var _local2:Number;
var _local3:Boolean;
var _local4:Number;
var _local5:Number;
var _local6:Particle;
var _local7:Number;
if (invincibleCnt > INVINCIBLE_CNT){
if (invincibleCnt < 10000){
invincibleCnt--;
if (invincibleCnt == INVINCIBLE_CNT){
respawn();
};
};
return;
};
_local1 = 0;
_local2 = 0;
if (keyState.left){
_local1 = -(speed);
};
if (keyState.right){
_local1 = speed;
};
if (keyState.up){
_local2 = -(speed);
};
if (keyState.down){
_local2 = speed;
};
if (((!((_local1 == 0))) && (!((_local2 == 0))))){
_local1 = (_local1 * 0.7);
_local2 = (_local2 * 0.7);
};
_pos.x = (_pos.x + _local1);
_pos.y = (_pos.y + _local2);
if (_pos.x < 8){
_pos.x = 8;
};
if (_pos.x > (field.size.x - 16)){
_pos.x = (field.size.x - 16);
};
if (_pos.y < 8){
_pos.y = 8;
};
if (_pos.y > (field.size.y - 16)){
_pos.y = (field.size.y - 16);
};
setFieldOffset();
if (((!((_local1 == 0))) || (!((_local2 == 0))))){
_local4 = normalizeDeg(Math.atan2(_local1, _local2));
_local5 = normalizeDeg((deg - _local4));
if (_local5 > DEG_VELOCITY){
deg = (deg - DEG_VELOCITY);
} else {
if (_local5 < -(DEG_VELOCITY)){
deg = (deg + DEG_VELOCITY);
} else {
deg = _local4;
};
};
deg = normalizeDeg(deg);
_local6 = Particle(particles.getInstanceForced());
_local6.add(_pos.x, _pos.y, (((deg + Math.PI) + (Math.random() * 0.6)) - 0.3), (speed * Math.random()), 0xFF, 100, 0);
};
if (keyState.a){
if (!aPressed){
aPressed = true;
field.addGlider(_pos, deg);
} else {
if (field.taintedCellsNum <= 0){
stopFlyingSe();
} else {
_local7 = (0.33 + (field.taintedCellsNum * 0.02));
if (_local7 > 1){
_local7 = 1;
};
flyingSeTransform.volume = _local7;
flyingSeTransform.pan = ((field.taintedCellsCenterPosX - (field.cellsWidth / 2)) / ((field.cellsWidth / 2) + 1));
if (flyingSe == null){
flyingSe = mainLoop.playSe(1, 9999, flyingSeTransform);
};
if (flyingSe != null){
flyingSe.soundTransform = flyingSeTransform;
};
};
};
speed = (speed + (((DEFAULT_SPEED * 0.66) - speed) * 0.1));
} else {
if (aPressed){
aPressed = false;
if (field.removeTaintedCells() > 0){
mainLoop.playSe(2, 1, flyingSeTransform);
};
stopFlyingSe();
};
speed = (speed + ((DEFAULT_SPEED - speed) * 0.1));
};
_local3 = true;
if (invincibleCnt > 0){
invincibleCnt--;
if ((invincibleCnt % 30) >= 15){
_local3 = false;
};
} else {
if (((field.existsNotTaintedCellScreen(pos)) || (bullets.checkHitToPlayer(pos)))){
destroyed();
return;
};
};
if (_local3){
shape.drawTilt(_pos, deg);
};
}
private function destroyed():void{
var _local1:Boolean;
var _local2:int;
var _local3:Particle;
stopFlyingSe();
mainLoop.playSe(3);
turrets.removeAll();
_local1 = field.destroyedPlayer();
_local2 = 0;
while (_local2 < 128) {
_local3 = Particle(particles.getInstanceForced());
_local3.add(_pos.x, _pos.y, ((Math.random() * Math.PI) * 2), ((Math.random() * 10) + 1), ((Math.random() * 128) + 128), 200, 200);
_local2++;
};
if (_local1){
field.resetDifficulty();
invincibleCnt = RESTART_CNT;
} else {
setHidden();
};
}
public function get pos():Vector{
return (_pos);
}
public function init():void{
respawn();
}
private function stopFlyingSe():void{
if (flyingSe != null){
flyingSe.stop();
flyingSe = null;
};
}
public function respawn():void{
_pos.x = (field.size.x * 0.5);
_pos.y = (field.size.y * 0.5);
setFieldOffset();
deg = 0;
invincibleCnt = INVINCIBLE_CNT;
aPressed = true;
speed = DEFAULT_SPEED;
stopFlyingSe();
}
public function setHidden():void{
invincibleCnt = 999999;
}
private function normalizeDeg(_arg1:Number):Number{
if (_arg1 > Math.PI){
return ((_arg1 - (Math.PI * 2)));
};
if (_arg1 < -(Math.PI)){
return ((_arg1 + (Math.PI * 2)));
};
return (_arg1);
}
private function setFieldOffset():void{
field.offset.x = (((field.size.x * Field.SIZE_OFFSET_RATIO) / 2) + ((_pos.x - (field.size.x / 2)) * 0.8));
field.offset.y = (((field.size.y * Field.SIZE_OFFSET_RATIO) / 2) + ((_pos.y - (field.size.y / 2)) * 0.8));
if (field.offset.x < 0){
field.offset.x = 0;
};
if (field.offset.x >= (field.size.x * Field.SIZE_OFFSET_RATIO)){
field.offset.x = (field.size.x * Field.SIZE_OFFSET_RATIO);
};
if (field.offset.y < 0){
field.offset.y = 0;
};
if (field.offset.y >= (field.size.y * Field.SIZE_OFFSET_RATIO)){
field.offset.y = (field.size.y * Field.SIZE_OFFSET_RATIO);
};
}
}
}//package abagames.la2
Section 21
//Scoreboard (abagames.la2.Scoreboard)
package abagames.la2 {
import abagames.util.*;
public class Scoreboard extends Actor {
private var num:int;
private var size:Number;
private var duration:int;
private var pos:Vector;
private var field:Field;
private var vel:Vector;
private var cnt:int;
public function Scoreboard(_arg1:Field){
this.field = _arg1;
pos = new Vector();
vel = new Vector();
}
override public function update():void{
cnt++;
if (cnt < 0){
return;
};
if (cnt == 0){
field.addScore(num);
};
pos.x = (pos.x + vel.x);
pos.y = (pos.y + vel.y);
vel.x = (vel.x * 0.95);
vel.y = (vel.y + ((-1 - vel.y) * 0.05));
size = (size + ((1 - size) * 0.05));
Letter.drawNum(num, pos.x, pos.y, size, true);
if (cnt > duration){
remove();
};
}
public function add(_arg1:Number, _arg2:Number, _arg3:int, _arg4:int, _arg5:int):void{
pos.x = _arg1;
pos.y = _arg2;
vel.x = (((field.size.x / 2) - _arg1) * 0.03);
vel.y = (((field.size.y / 2) - _arg2) * 0.03);
num = _arg3;
size = 0.1;
cnt = -(_arg4);
duration = _arg5;
}
}
}//package abagames.la2
Section 22
//ScoreboardPool (abagames.la2.ScoreboardPool)
package abagames.la2 {
import abagames.util.*;
public class ScoreboardPool extends ActorPool {
private var field:Field;
public function ScoreboardPool(_arg1:int, _arg2:Field){
this.field = _arg2;
super(_arg1);
}
override protected function createActor():Actor{
return (new Scoreboard(field));
}
}
}//package abagames.la2
Section 23
//Shape (abagames.la2.Shape)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
public class Shape {
private var buffer:BitmapData;
private var background:Background;
private var boxes:Array;
private var field:Field;
public static var distortion:Number = 1;
public function Shape(_arg1:BitmapData, _arg2:Field, _arg3:Background=null){
this.buffer = _arg1;
this.field = _arg2;
this.background = _arg3;
boxes = new Array();
}
public function draw(_arg1:Vector, _arg2:Number=1, _arg3:Boolean=true):void{
var _local4:Box;
for each (_local4 in boxes) {
_local4.draw(_arg1, _arg2, _arg3);
};
}
public function drawDistorted(_arg1:Vector, _arg2:Number=1):void{
var _local3:Box;
for each (_local3 in boxes) {
_local3.drawDistorted(_arg1, _arg2);
};
}
public function drawTilt(_arg1:Vector, _arg2:Number, _arg3:Number=1):void{
var _local4:Box;
for each (_local4 in boxes) {
_local4.drawTilt(_arg1, _arg2, _arg3);
};
}
public function addBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number):void{
var _local9:Box;
_local9 = new Box(buffer, field, background, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8);
boxes.push(_local9);
}
}
}//package abagames.la2
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 g:int;
private var rect:Rectangle;
private var background:Background;
private var r:int;
private var field:Field;
private var tp:Vector;
private function Box(_arg1:BitmapData, _arg2:Field, _arg3:Background, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number){
this.buffer = _arg1;
this.field = _arg2;
this.background = _arg3;
pos = new Vector((_arg4 - (_arg6 / 2)), (_arg5 - (_arg7 / 2)));
size = new Vector(_arg6, _arg7);
rect = new Rectangle(0, 0, _arg6, _arg7);
this.depth = _arg8;
this.r = _arg9;
this.g = _arg10;
this.b = _arg11;
color = (((this.r * 65536) + (this.g * 0x0100)) + this.b);
tp = new Vector();
}
public function draw(_arg1:Vector, _arg2:Number, _arg3:Boolean=true):void{
tp.x = (tp.y = 0);
rect.x = ((_arg1.x + pos.x) + depth);
rect.y = ((_arg1.y + pos.y) + depth);
if (_arg3){
rect.x = (rect.x - field.offset.x);
rect.y = (rect.y - field.offset.y);
};
drawRect(_arg1, _arg2);
}
public function drawDistorted(_arg1:Vector, _arg2:Number):void{
tp.x = (tp.y = 0);
rect.x = ((_arg1.x + pos.x) + depth);
rect.y = ((_arg1.y + pos.y) + depth);
rect.x = (rect.x - field.offset.x);
rect.y = (rect.y - field.offset.y);
rect.width = (size.x * Shape.distortion);
rect.height = (size.y * Shape.distortion);
rect.x = (rect.x - ((rect.width - size.x) / 2));
rect.y = (rect.y - ((rect.height - size.y) / 2));
drawRect(_arg1, _arg2);
}
public function drawTilt(_arg1:Vector, _arg2:Number, _arg3: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) - field.offset.x) + depth);
rect.y = (((_arg1.y + tp.y) - field.offset.y) + depth);
drawRect(_arg1, _arg3);
}
private function drawRect(_arg1:Vector, _arg2:Number):void{
if (_arg2 > 0){
depthColor = (((int(((this.r * 0.8) * _arg2)) * 65536) + (int(((this.g * 0.8) * _arg2)) * 0x0100)) + int(((this.b * 0.8) * _arg2)));
buffer.fillRect(rect, depthColor);
};
rect.x = (rect.x - depth);
rect.y = (rect.y - depth);
buffer.fillRect(rect, color);
if (background != null){
background.addShadow((_arg1.x - tp.x), (_arg1.y + tp.y), size);
};
}
}
Section 24
//Turret (abagames.la2.Turret)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
import abagames.la2.barrage.*;
public class Turret extends Actor {
private var deg:Number;
private var barrageState:BarrageState;
private var rank:Number;
private var particles:ParticlePool;
private var fireIntervalRatio:Number;
private var degVel:Number;
private var bullets:BulletPool;
private var onEdge:Boolean;
private var movePatternIdx:int;
private var buffer:BitmapData;
private var screenPos:Vector;
private var _tainted:Boolean;
private var fireCnt:int;
private var pos:Vector;
private var barrage:Barrage;
private var player:Player;
private var shapes:Array;
private var screenTargetPos:Vector;
private var field:Field;
private var fireSpeedRatio:Number;
private static var moveDir:Array = [[0, -1], [1, -1], [1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1]];
private static var movePattern:Array = [[4, 5, 3, 6, 2, 7, 1, 0], [6, 5, 7, 4, 0, 3, 1, 2], [6, 7, 5, 0, 4, 1, 3, 2], [0, 7, 1, 6, 2, 5, 3, 4], [0, 1, 7, 2, 6, 3, 5, 4], [2, 1, 3, 0, 4, 7, 5, 6], [2, 3, 1, 4, 0, 5, 7, 6], [4, 3, 5, 2, 6, 1, 7, 0]];
public function Turret(_arg1:BitmapData, _arg2:Player, _arg3:Field, _arg4:BulletPool, _arg5:ParticlePool){
var _local6:Shape;
super();
this.buffer = _arg1;
this.player = _arg2;
this.field = _arg3;
this.bullets = _arg4;
this.particles = _arg5;
pos = new Vector();
screenPos = new Vector();
screenTargetPos = new Vector();
shapes = new Array();
_local6 = new Shape(_arg1, _arg3);
_local6.addBox(-5, -5, 6, 6, 1, 0, 80, 200);
_local6.addBox(5, -5, 6, 6, 1, 0, 80, 200);
_local6.addBox(-5, 5, 6, 6, 1, 0, 80, 200);
_local6.addBox(5, 5, 6, 6, 1, 0, 80, 200);
_local6.addBox(0, 0, 8, 8, 3, 50, 150, 250);
shapes.push(_local6);
_local6 = new Shape(_arg1, _arg3);
_local6.addBox(-5, -5, 6, 6, 1, 120, 0, 200);
_local6.addBox(5, -5, 6, 6, 1, 120, 0, 200);
_local6.addBox(-5, 5, 6, 6, 1, 120, 0, 200);
_local6.addBox(5, 5, 6, 6, 1, 120, 0, 200);
_local6.addBox(0, 0, 8, 8, 3, 150, 50, 250);
shapes.push(_local6);
barrageState = new BarrageState();
}
public function get tainted():Boolean{
return (_tainted);
}
public function destroy():void{
var _local1:int;
var _local2:Particle;
_local1 = 0;
while (_local1 < 23) {
_local2 = Particle(particles.getInstanceForced());
_local2.add(screenPos.x, screenPos.y, ((Math.random() * Math.PI) * 2), ((Math.random() * 7) + 3), 100, 150, 250);
_local1++;
};
remove();
}
public function add(_arg1:int, _arg2:int, _arg3:int, _arg4:Number, _arg5:Number, _arg6:Barrage):void{
var _local7:Vector;
pos.x = _arg1;
pos.y = _arg2;
deg = (degVel = 0);
_local7 = field.getScreenPos(pos.x, pos.y);
screenPos.x = (screenTargetPos.x = _local7.x);
screenPos.y = (screenTargetPos.x = _local7.y);
movePatternIdx = _arg3;
barrageState.init(_arg4, _arg5);
this.barrage = _arg6;
_tainted = false;
rank = 0;
onEdge = true;
}
public function get cellX():int{
return (int(pos.x));
}
public function get cellY():int{
return (int(pos.y));
}
override public function update():void{
var _local1:Boolean;
var _local2:int;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:Vector;
if (!field.existsCell(pos.x, pos.y)){
_local1 = false;
_local2 = 0;
while (_local2 < 8) {
_local3 = movePattern[movePatternIdx][_local2];
_local4 = (pos.x + moveDir[_local3][0]);
_local5 = (pos.y + moveDir[_local3][1]);
if ((((((((((_local4 >= 1)) && ((_local4 <= (field.cellsWidth - 2))))) && ((_local5 >= 1)))) && ((_local5 <= (field.cellsWidth - 2))))) && (field.existsCell(_local4, _local5)))){
pos.x = _local4;
pos.y = _local5;
_local6 = field.getScreenPos(pos.x, pos.y);
screenTargetPos.x = _local6.x;
screenTargetPos.y = _local6.y;
_local1 = true;
if (onEdge){
field.appearedTurret();
onEdge = false;
};
break;
};
_local2++;
};
if (!_local1){
if (onEdge){
remove();
return;
};
degVel = (degVel * 0.96);
barrageState.onCell = false;
};
} else {
if (((!(tainted)) && (field.existsTaintedCell(pos.x, pos.y)))){
_tainted = (barrageState.tainted = true);
};
degVel = (degVel + ((0.1 - degVel) * 0.08));
barrageState.onCell = true;
};
if (!onEdge){
screenPos.x = (screenPos.x + ((screenTargetPos.x - screenPos.x) * 0.1));
screenPos.y = (screenPos.y + ((screenTargetPos.y - screenPos.y) * 0.1));
deg = (deg + degVel);
barrage.update(screenPos, barrageState);
if (_tainted){
shapes[1].drawTilt(screenPos, deg);
} else {
shapes[0].drawTilt(screenPos, deg);
};
};
}
}
}//package abagames.la2
Section 25
//TurretPool (abagames.la2.TurretPool)
package abagames.la2 {
import flash.display.*;
import abagames.util.*;
public class TurretPool extends ActorPool {
private var buffer:BitmapData;
private var particles:ParticlePool;
private var player:Player;
private var bullets:BulletPool;
private var field:Field;
public function TurretPool(_arg1:int, _arg2:BitmapData, _arg3:Player, _arg4:Field, _arg5:BulletPool, _arg6:ParticlePool){
this.buffer = _arg2;
this.player = _arg3;
this.field = _arg4;
this.bullets = _arg5;
this.particles = _arg6;
super(_arg1);
}
override protected function createActor():Actor{
return (new Turret(buffer, player, field, bullets, particles));
}
public function removeTainted():int{
var _local1:int;
var _local2:int;
var _local3:Turret;
_local1 = 0;
_local2 = 0;
while (_local2 < actorNum) {
_local3 = Turret(actors[_local2]);
if (_local3.tainted){
_local3.destroy();
_local2--;
_local1++;
};
_local2++;
};
return (_local1);
}
public function removeAll():void{
var _local1:Turret;
while (actorNum > 0) {
_local1 = Turret(actors[0]);
_local1.destroy();
};
}
}
}//package abagames.la2
Section 26
//Actor (abagames.util.Actor)
package abagames.util {
public class Actor {
public var removed:Boolean;
protected var actorPool:ActorPool;
private var idx:int;
public function set index(_arg1:int):void{
idx = _arg1;
}
public function update():void{
}
public function remove():void{
actorPool.remove(idx);
}
public function setActorPool(_arg1:ActorPool):void{
actorPool = _arg1;
}
public function get exists():Boolean{
return (actorPool.existsActor(idx));
}
}
}//package abagames.util
Section 27
//ActorPool (abagames.util.ActorPool)
package abagames.util {
public class ActorPool {
protected var _instancesNum:int;
protected var actorIdx:int;
protected var actorNum:int;
protected var actors:Array;
protected var _maxInstancesNum:int;
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 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 clear():void{
actorNum = 0;
actorIdx = -1;
}
public function getInstance():Actor{
if (actorNum >= _instancesNum){
return (null);
};
actorNum++;
return (actors[(actorNum - 1)]);
}
public function set instancesNum(_arg1:int):void{
if (_arg1 > _maxInstancesNum){
_instancesNum = _maxInstancesNum;
} else {
_instancesNum = _arg1;
};
}
protected function createActor():Actor{
return (null);
}
public function get instancesNum():int{
return (_instancesNum);
}
public function get hasNextInstance():Boolean{
return ((actorNum < _instancesNum));
}
public function get maxInstancesNum():int{
return (_maxInstancesNum);
}
public function existsActor(_arg1:int):Boolean{
return ((_arg1 < actorNum));
}
}
}//package abagames.util
Section 28
//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 c:Boolean;// = false
public var left:Boolean;// = false
public var b: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;
b = false;
c = false;
super();
}
public function onKeyUp(_arg1:KeyboardEvent):void{
switch (_arg1.keyCode){
case 37:
left = false;
break;
case 38:
up = false;
break;
case 39:
right = false;
break;
case 40:
down = false;
break;
case 90:
a = false;
break;
case 88:
b = false;
break;
case 67:
c = false;
break;
};
}
public function onKeyDown(_arg1:KeyboardEvent):void{
switch (_arg1.keyCode){
case 37:
left = true;
break;
case 38:
up = true;
break;
case 39:
right = true;
break;
case 40:
down = true;
break;
case 90:
a = true;
break;
case 88:
b = true;
break;
case 67:
c = true;
break;
};
}
}
}//package abagames.util
Section 29
//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 dist(_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)));
}
}
}//package abagames.util
Section 30
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 31
//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 32
//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 33
//La2 (La2)
package {
import flash.events.*;
import flash.display.*;
import abagames.util.*;
import abagames.la2.*;
public class La2 extends Sprite {
private var sounds:Array;
private var rootSprite:Sprite;
private var SoundRemove:Class;
private var SoundBgm:Class;
private var SoundFlying:Class;
private var keyState:KeyState;
private var isFirst:Boolean;// = true
private var SoundDestroyed:Class;
private var mainLoop:MainLoop;
public static const SCREEN_HEIGHT:int = 360;
public static const SCREEN_WIDTH:int = 360;
public function La2(){
SoundBgm = La2_SoundBgm;
SoundFlying = La2_SoundFlying;
SoundRemove = La2_SoundRemove;
SoundDestroyed = La2_SoundDestroyed;
isFirst = true;
super();
sounds = new Array();
sounds.push(new SoundBgm());
sounds.push(new SoundFlying());
sounds.push(new SoundRemove());
sounds.push(new SoundDestroyed());
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 34
//La2_SoundBgm (La2_SoundBgm)
package {
import mx.core.*;
public class La2_SoundBgm extends SoundAsset {
}
}//package
Section 35
//La2_SoundDestroyed (La2_SoundDestroyed)
package {
import mx.core.*;
public class La2_SoundDestroyed extends SoundAsset {
}
}//package
Section 36
//La2_SoundFlying (La2_SoundFlying)
package {
import mx.core.*;
public class La2_SoundFlying extends SoundAsset {
}
}//package
Section 37
//La2_SoundRemove (La2_SoundRemove)
package {
import mx.core.*;
public class La2_SoundRemove extends SoundAsset {
}
}//package