Section 1
//Animated (moonlib2.Animated)
package moonlib2 {
import flash.events.*;
import flash.geom.*;
public class Animated extends Thing {
public var anim:Animation;
protected var anim_offset_x:Number;// = 0
protected var anim_offset_y:Number;// = 0
public function Animated(_arg1:Animation, _arg2:Number=INF, _arg3:Number=INF){
if (_arg1 != null){
set_animation(_arg1, _arg2, _arg3);
};
}
override public function on_removed():void{
super.on_removed();
if (anim != null){
removeChild(anim);
anim = null;
};
}
public function flip_away(_arg1:Thing):void{
if (_arg1.x < x){
scaleX = 1;
} else {
scaleX = -1;
};
}
override public function update(_arg1:Event):void{
super.update(_arg1);
if (anim != null){
anim.update();
};
}
public function flip_towards(_arg1:Thing):void{
if (_arg1.x < x){
scaleX = -1;
} else {
scaleX = 1;
};
}
public function attach_anim(_arg1:Animation, _arg2:Number=INF, _arg3:Number=INF):Animation{
if (_arg2 == Number.POSITIVE_INFINITY){
_arg2 = Math.floor((_arg1.strip.frameW / 2));
_arg1.x = (_arg1.x - _arg2);
};
if (_arg3 == Number.POSITIVE_INFINITY){
_arg3 = Math.floor((_arg1.strip.frameH / 2));
_arg1.y = (_arg1.y - _arg3);
};
addChild(_arg1);
return (_arg1);
}
public function flip(_arg1:Number):void{
if (_arg1 > 0){
scaleX = 1;
} else {
if (_arg1 < 0){
scaleX = -1;
};
};
}
public function set_animation(_arg1:Animation, _arg2:Number=INF, _arg3:Number=INF):void{
if (_arg1 == anim){
return;
};
if (_arg2 == Number.POSITIVE_INFINITY){
_arg2 = Math.floor((_arg1.strip.frameW / 2));
_arg1.x = (_arg1.x - _arg2);
} else {
_arg1.x = -(_arg2);
};
if (_arg3 == Number.POSITIVE_INFINITY){
_arg3 = Math.floor((_arg1.strip.frameH / 2));
_arg1.y = (_arg1.y - _arg3);
} else {
_arg1.y = -(_arg3);
};
this.anim_offset_x = _arg2;
this.anim_offset_y = _arg3;
if (anim != null){
removeChild(anim);
addChild(_arg1);
} else {
addChild(_arg1);
};
anim = _arg1;
}
override public function get area():Rectangle{
if (anim == null){
return (super.area);
};
return (new Rectangle((x - anim_offset_x), (y - anim_offset_y), anim.strip.frameW, anim.strip.frameH));
}
}
}//package moonlib2
Section 2
//Animation (moonlib2.Animation)
package moonlib2 {
import flash.display.*;
public class Animation extends Sprite {
private var looping:Boolean;// = false
public var currentFrame:int;// = 0
public var frameTime:int;
public var strip:Strip;
private var _sequence:Array;
private var currentTime:int;// = 0
private var running:Boolean;// = false
public function Animation(_arg1:BitmapData, _arg2:int=-1, _arg3:int=-1, _arg4:int=0, _arg5:Boolean=false){
strip = new Strip(_arg1, ((_arg2 == -1)) ? _arg1.width : _arg2, ((_arg3 == -1)) ? _arg1.height : _arg3, _arg5);
addChild(strip);
this.frameTime = _arg4;
setDefaultSequence();
}
public function get sequence():Array{
return (_sequence);
}
public function set sequence(_arg1:Array):void{
_sequence = _arg1;
if (currentFrame >= _sequence.length){
currentFrame = (_sequence.length - 1);
};
}
public function stop():void{
running = false;
}
public function update():void{
strip.frame = sequence[currentFrame];
if (frameTime <= 0){
stop();
return;
};
if (running){
currentTime = (currentTime + Game.frame_time);
if (currentTime >= frameTime){
currentTime = (currentTime - frameTime);
if (currentFrame < (sequence.length - 1)){
currentFrame++;
} else {
if (looping){
currentFrame = 0;
} else {
stop();
};
};
};
};
}
public function setFrameTime(_arg1:int):void{
frameTime = _arg1;
}
public function setDefaultSequence():void{
sequence = new Array(strip.frameCount);
var _local1:int;
while (_local1 != sequence.length) {
sequence[_local1] = _local1;
_local1++;
};
}
public function setFrame(_arg1:int):void{
currentFrame = _arg1;
strip.frame = sequence[currentFrame];
}
public function setBouncingSequence():void{
var _local1:Array = new Array((strip.frameCount * 2));
var _local2:int;
var _local3:int;
_local3 = 0;
while (_local3 != strip.frameCount) {
var _temp1 = _local2;
_local2 = (_local2 + 1);
var _local4 = _temp1;
_local1[_local4] = _local3;
_local3++;
};
_local3 = 0;
while (_local3 != strip.frameCount) {
var _temp2 = _local2;
_local2 = (_local2 + 1);
_local4 = _temp2;
_local1[_local4] = ((strip.frameCount - _local3) - 1);
_local3++;
};
sequence = _local1;
}
public function play(_arg1:Boolean=false):void{
running = true;
looping = _arg1;
}
public function isRunning():Boolean{
return (running);
}
public function rewind():void{
currentFrame = 0;
}
}
}//package moonlib2
Section 3
//Expression (moonlib2.Expression)
package moonlib2 {
import flash.events.*;
import flash.geom.*;
import flash.display.*;
public class Expression extends Thing {
private var cache:BitmapData;
public var separation:int;// = 3
public var seekTarget:Thing;
private var from:Animated;
private var old_status:Number;// = 0
public var status:int;// = 1
public var strip:Strip;
public static const ANGRY:int = 7;
public static const FOCUSED_UP:int = 15;
public static const HAPPY:int = 1;
public static const DYING:int = 10;
public static const NONE:int = 0;
public static const EFFORTING:int = 5;
public static const FOCUSED:int = 6;
public static const ANGRY_UP:int = 14;
public static const SEEK:int = 3;
public static const UP:int = 12;
public static const ASLEEP:int = 17;
public static const ANGRY_DOWN:int = 13;
public static const ALMOST_CLOSED:int = 18;
public static const DOWN:int = 8;
public static const FOCUSED_AT:int = 9;
public static const SEEK_NOT_FLIP:int = 11;
public static const SAD_LONELY:int = 2;
public static const SAD_LOOKING:int = 4;
public static const SLEEPY_LOOK:int = 16;
private static var _cache_rect_update:Rectangle = new Rectangle();
private static var img:Class = Expression_img;
private static var _cache_matrix:Matrix = new Matrix();
public function Expression(_arg1:Animated, _arg2:Number=2, _arg3:Number=4, _arg4:Number=3){
super((cache = new BitmapData(((_arg2 * 2) + _arg4), _arg3, true, 0)), 0, 0);
strip = new Strip(new img().bitmapData, _arg2, _arg3);
this.separation = _arg4;
this.from = _arg1;
addEventListener(Event.ENTER_FRAME, update);
}
override public function update(_arg1:Event):void{
super.update(_arg1);
old_status = status;
_cache_rect_update.width = cache.width;
_cache_rect_update.height = cache.height;
cache.fillRect(_cache_rect_update, 0);
drawEye(cache, 0, 0, true);
drawEye(cache, separation, 0, false);
}
private function drawSeekerEye(_arg1:BitmapData, _arg2:int, _arg3:int):void{
var _local4:int;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:int;
if (seekTarget != null){
_local4 = 0;
if (seekTarget.x > (from.x + x)){
_local4 = 1;
};
_local5 = ((from.y + y) - seekTarget.y);
_local6 = ((from.x + x) - seekTarget.x);
_local7 = -(Math.atan((_local5 / _local6)));
if (_local7 < (-(Math.PI) / 10)){
_local8 = 2;
} else {
if (_local7 > (Math.PI / 10)){
_local8 = 0;
} else {
_local8 = 1;
};
};
if (from.scaleX < 0){
_local4 = ((_local4 == 0)) ? 1 : 0;
if (_local4 == 1){
if (_local8 == 2){
_local8 = 0;
} else {
if (_local8 == 0){
_local8 = 2;
};
};
};
};
if (_local4 == 1){
draw_strip(_arg1, _arg2, _arg3, _local8);
} else {
draw_strip(_arg1, _arg2, _arg3, (_local8 + 3));
};
};
}
private function drawEye(_arg1:BitmapData, _arg2:int, _arg3:int, _arg4:Boolean):void{
switch (status){
case NONE:
break;
case FOCUSED:
draw_strip(_arg1, _arg2, (_arg3 - 1), 13);
break;
case HAPPY:
draw_strip(_arg1, _arg2, _arg3, 6);
break;
case EFFORTING:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 11 : 12);
drawSeekerEye(_arg1, _arg2, _arg3);
break;
case ASLEEP:
draw_strip(_arg1, _arg2, _arg3, 13);
break;
case SAD_LONELY:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 8 : 9);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 2 : 3);
break;
case DYING:
draw_strip(_arg1, _arg2, _arg3, 18);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 2 : 3);
break;
case SAD_LOOKING:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 8 : 9);
drawSeekerEye(_arg1, _arg2, _arg3);
break;
case SEEK:
draw_strip(_arg1, _arg2, _arg3, 7);
drawSeekerEye(_arg1, _arg2, _arg3);
break;
case FOCUSED_AT:
draw_strip(_arg1, _arg2, (_arg3 - 1), (_arg4) ? 10 : 10);
drawSeekerEye(_arg1, _arg2, _arg3);
break;
case FOCUSED_UP:
draw_strip(_arg1, _arg2, (_arg3 - 1), (_arg4) ? 10 : 10);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 0 : 5);
break;
case ANGRY:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 15 : 14);
drawSeekerEye(_arg1, _arg2, _arg3);
break;
case SLEEPY_LOOK:
draw_strip(_arg1, _arg2, _arg3, 18);
if (from.x > seekTarget.x){
draw_strip(_arg1, _arg2, _arg3, 4);
} else {
draw_strip(_arg1, _arg2, _arg3, 1);
};
break;
case ANGRY_UP:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 15 : 14);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 1 : 4);
break;
case ANGRY_DOWN:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 15 : 14);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 2 : 3);
break;
case DOWN:
draw_strip(_arg1, _arg2, _arg3, 7);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 2 : 3);
break;
case UP:
draw_strip(_arg1, _arg2, _arg3, 7);
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 0 : 5);
break;
case ALMOST_CLOSED:
draw_strip(_arg1, _arg2, _arg3, (_arg4) ? 19 : 20);
break;
};
}
private function draw_strip(_arg1:BitmapData, _arg2:int, _arg3:int, _arg4:int):void{
_cache_matrix.tx = _arg2;
_cache_matrix.ty = _arg3;
strip.frame = _arg4;
_arg1.draw(strip, _cache_matrix);
}
}
}//package moonlib2
Section 4
//Expression_img (moonlib2.Expression_img)
package moonlib2 {
import mx.core.*;
public class Expression_img extends BitmapAsset {
}
}//package moonlib2
Section 5
//Game (moonlib2.Game)
package moonlib2 {
import flash.text.*;
import flash.events.*;
import flash.geom.*;
import flash.display.*;
public class Game extends Sprite {
private var MyFontHolder:Class;
public var dragAnchor:Point;
public var mouse_clicked:Boolean;// = false
public var dragging:Thing;// = null
private var proper_size:Point;
private var _cache_array_filter:Array;
private var _area_cache:Rectangle;
var changed:Boolean;// = false
public var highligthed:Thing;// = null
public static const DEBUG:Boolean = false;
public static var debug:TextField;
public static var font:TextFormat;
public static var time:Number = 0;
private static var current_game:Game;
public function Game(_arg1:Number, _arg2:Number, _arg3:Number){
MyFontHolder = Game_MyFontHolder;
dragAnchor = new Point();
proper_size = new Point();
_cache_array_filter = new Array();
super();
current_game = this;
this.scaleX = _arg1;
this.scaleY = _arg1;
proper_size.x = _arg2;
proper_size.y = _arg3;
addEventListener(Event.ENTER_FRAME, update);
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function mouseUp(_arg1:MouseEvent):void{
mouse_clicked = false;
on_drop_thing();
}
private function get_thing(_arg1:MouseEvent, _arg2:Boolean=false):Thing{
var e = _arg1;
var include_noninteractive = _arg2;
var list:Array = filter(function (_arg1:Thing):Boolean{
var _local2:*;
if (((_arg1.interactive) || (include_noninteractive))){
_local2 = _arg1.area;
if (_arg1.highlighted){
_local2.height = (_local2.height + 1);
};
return (_local2.contains(mouseX, mouseY));
};
return (false);
});
if (list.length == 0){
return (null);
};
list = list.sortOn("z", (Array.NUMERIC | Array.DESCENDING));
return (list[0]);
}
public function release_selected(_arg1:Thing):void{
if (dragging == _arg1){
on_drop_thing();
};
}
public function get area():Rectangle{
return (_area_cache.clone());
}
public function count(_arg1:Class, _arg2:Boolean=false):Array{
var c = _arg1;
var include_invisible = _arg2;
return (filter(function (_arg1:Thing):Boolean{
return ((((_arg1 is c)) && (((include_invisible) || (_arg1.visible)))));
}, null, true));
}
public function init(_arg1:Event):void{
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
_area_cache = new Rectangle(0, 0, (proper_size.x / scaleX), (proper_size.y / scaleY));
font = create_font(12, 0xFFFFFF);
if (DEBUG){
debug = create_text(false);
addChild(debug);
};
}
public function update(_arg1:Event):void{
var _local2:Array;
var _local3:int;
if (changed){
changed = false;
_local2 = filter(null, null, true);
_local2 = _local2.sortOn(["z", "y"], Array.NUMERIC);
_local3 = 0;
while (_local3 != _local2.length) {
setChildIndex(_local2[_local3], (numChildren - 1));
_local3++;
};
};
time = (time + frame_time);
if (DEBUG){
debug.setTextFormat(font);
setChildIndex(debug, (numChildren - 1));
};
}
public function closest(_arg1:Thing, _arg2:Array):Thing{
var _local6:Number;
var _local3:Thing;
var _local4:Number = 10000000;
var _local5:int;
while (_local5 != _arg2.length) {
if ((((_arg1 == _arg2[_local5])) || (!(_arg2[_local5].alive)))){
} else {
_local6 = _arg2[_local5].distance(_arg1);
if (_local6 < _local4){
_local3 = _arg2[_local5];
_local4 = _local6;
};
};
_local5++;
};
return (_local3);
}
private function mouseMove(_arg1:MouseEvent):void{
if (!_arg1.buttonDown){
on_drop_thing();
highligthed = get_thing(_arg1);
} else {
highligthed = null;
};
}
public function add(_arg1:Thing, _arg2:Number=-1, _arg3:Number=-1):Thing{
if (((!((_arg2 == -1))) && (!((_arg3 == -1))))){
_arg1.x = _arg2;
_arg1.y = _arg3;
};
_arg1.alive = true;
addChildAt(_arg1, 0);
changed = true;
return (_arg1);
}
protected function mouseDown(_arg1:MouseEvent):void{
mouse_clicked = true;
var _local2:Thing = get_thing(_arg1);
if (_local2 == null){
_local2 = get_thing(_arg1, true);
if (_local2 != null){
_local2.on_click();
};
return;
};
pick_up(_local2, new Point((_local2.x - mouseX), (_local2.y - mouseY)));
}
public function filter(_arg1:Function, _arg2:Array=null, _arg3:Boolean=false):Array{
var _local6:DisplayObject;
var _local7:Thing;
var _local4:Array = (_arg2) ? _arg2 : new Array();
var _local5:int;
while (_local5 != numChildren) {
_local6 = getChildAt(_local5);
if ((_local6 is Thing)){
_local7 = Thing(_local6);
if (((((((_local7.visible) || (_arg3))) && (_local7.alive))) && ((((_arg1 == null)) || (_arg1(_local7)))))){
_local4.push(_local7);
};
};
_local5++;
};
return (_local4);
}
public function pick_up(_arg1:Thing, _arg2:Point):void{
if (_arg1 != null){
_arg1.on_click();
};
if ((((_arg1 as Thing).interactive) && ((_arg1 as Thing).alive))){
dragging = _arg1;
dragging.on_grab();
dragAnchor.x = _arg2.x;
dragAnchor.y = _arg2.y;
};
}
private function on_drop_thing():void{
if (dragging != null){
dragging.on_drop();
dragging = null;
highligthed = null;
};
}
public static function create_font(_arg1:Number, _arg2:Number):TextFormat{
var _local3:TextFormat = new TextFormat();
_local3.size = _arg1;
_local3.color = (_arg2 | 4278190080);
_local3.font = "uni 05_54_8pt_st";
return (_local3);
}
public static function create_text(_arg1:Boolean=true):TextField{
var _local2:TextField = new TextField();
_local2.selectable = false;
_local2.type = TextFieldType.DYNAMIC;
_local2.autoSize = TextFieldAutoSize.LEFT;
_local2.multiline = true;
_local2.wordWrap = true;
_local2.gridFitType = GridFitType.PIXEL;
_local2.embedFonts = _arg1;
return (_local2);
}
public static function get frame_time():Number{
return ((1000 / current_game.stage.frameRate));
}
}
}//package moonlib2
Section 6
//Game_MyFontHolder (moonlib2.Game_MyFontHolder)
package moonlib2 {
import mx.core.*;
public class Game_MyFontHolder extends SpriteAsset {
}
}//package moonlib2
Section 7
//Strip (moonlib2.Strip)
package moonlib2 {
import flash.geom.*;
import flash.display.*;
public class Strip extends Sprite {
private var _cache_rect:Rectangle;
public var frameCount:int;
private var _cache_point:Point;
private var cacheSprite:BitmapData;
public var frameW:int;
private var _img:BitmapData;
private var _frame:int;// = -1
private var rowSize:int;
public var frameH:int;
public function Strip(_arg1:BitmapData, _arg2:int, _arg3:int, _arg4:Boolean=false){
_cache_point = new Point();
super();
this._img = _arg1;
this.frameW = _arg2;
this.frameH = _arg3;
rowSize = (_arg1.width / _arg2);
frameCount = (rowSize * (_arg1.height / _arg3));
cacheSprite = new BitmapData(_arg2, _arg3, true, 0);
addChild(new Bitmap(cacheSprite, PixelSnapping.AUTO, _arg4));
_cache_rect = new Rectangle(0, 0, _arg2, _arg3);
frame = 0;
}
public function set frame(_arg1:int):void{
var _local2:int;
var _local3:int;
if (_frame != _arg1){
_frame = _arg1;
_local2 = (Math.floor((frame / rowSize)) * frameH);
_local3 = ((frame % rowSize) * frameW);
_cache_rect.x = _local3;
_cache_rect.y = _local2;
cacheSprite.copyPixels(img, _cache_rect, _cache_point);
};
}
public function set img(_arg1:BitmapData):void{
var _local2:int;
var _local3:int;
if (_img != _arg1){
_img = _arg1;
_local2 = (Math.floor((frame / rowSize)) * frameH);
_local3 = ((frame % rowSize) * frameW);
cacheSprite.copyPixels(img, new Rectangle(_local3, _local2, frameW, frameH), new Point(0, 0), null, null, false);
};
}
public function get frame():int{
return (_frame);
}
public function get img():BitmapData{
return (_img);
}
}
}//package moonlib2
Section 8
//Text (moonlib2.Text)
package moonlib2 {
import flash.text.*;
import flash.events.*;
import flash.geom.*;
public class Text extends Thing {
protected var field:TextField;
protected var format:TextFormat;
public function Text(_arg1:TextFormat){
this.format = _arg1;
z = 1000;
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
field = create_text();
addChild(field);
}
override public function update(_arg1:Event):void{
super.update(_arg1);
x = int(x);
y = int(y);
}
public function set text(_arg1:String):void{
field.htmlText = _arg1;
field.setTextFormat(format);
}
override public function get area():Rectangle{
return (new Rectangle(x, y, (field.textWidth - 10), field.textHeight));
}
public static function create_text():TextField{
var _local1:TextField;
_local1 = new TextField();
_local1.selectable = false;
_local1.type = TextFieldType.DYNAMIC;
_local1.autoSize = TextFieldAutoSize.LEFT;
_local1.multiline = true;
_local1.wordWrap = true;
_local1.antiAliasType = AntiAliasType.ADVANCED;
_local1.embedFonts = true;
_local1.gridFitType = GridFitType.PIXEL;
_local1.width = 800;
return (_local1);
}
}
}//package moonlib2
Section 9
//Thing (moonlib2.Thing)
package moonlib2 {
import flash.text.*;
import flash.events.*;
import flash.geom.*;
import flash.display.*;
import utils.*;
public class Thing extends Sprite {
public var shown:Boolean;// = false
private var _interactive:Boolean;// = false
public var solid:Boolean;// = true
public var alive:Boolean;// = false
private var debug:TextField;// = null
protected var default_bitmap:Bitmap;// = null
private var last_parent:Game;
private var _z:Number;// = 0
private var was_highlighted:Boolean;// = false
private var highlighted_offset:Number;// = 0
public function Thing(_arg1:BitmapData=null, _arg2:Number=-INF, _arg3:Number=-INF){
if (_arg1 != null){
default_bitmap = attach_bitmap_data(_arg1, _arg2, _arg3);
};
mouseEnabled = false;
mouseChildren = false;
addEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.REMOVED_FROM_STAGE, removed);
}
public function is_completely_inside():Boolean{
return (world.area.containsRect(area));
}
public function destroy():void{
on_removed();
alive = false;
if (parent != null){
parent.removeChild(this);
};
}
public function on_removed():void{
if (default_bitmap != null){
removeChild(default_bitmap);
default_bitmap = null;
};
}
public function get z():Number{
return (_z);
}
public function get area():Rectangle{
if (default_bitmap != null){
return (new Rectangle((x + default_bitmap.x), (y + default_bitmap.y), default_bitmap.width, default_bitmap.height));
};
return (getRect(stage));
}
protected function init(_arg1:Event):void{
last_parent = (parent as Game);
addEventListener(Event.ENTER_FRAME, update);
}
public function get world():Game{
var _local1:Object = last_parent;
while ((!(last_parent) is Game)) {
_local1 = _local1.parent;
};
return ((_local1 as Game));
}
public function fit_in(_arg1:Rectangle):void{
var _local2:Rectangle;
if (!_arg1.containsRect(area)){
_local2 = Utils.fitRectangle(area, _arg1);
x = int((_local2.x + (x - area.left)));
y = int((_local2.y + (y - area.top)));
};
}
public function destroy_if_shown():Boolean{
if (((shown) && (!(is_inside())))){
destroy();
return (true);
};
return (false);
}
public function is_clicked():Boolean{
if (!world.mouse_clicked){
return (false);
};
return (area.contains(world.mouseX, world.mouseY));
}
public function get selected():Boolean{
if (world == null){
return (false);
};
return ((world.dragging == this));
}
public function direction_towards(_arg1:Number, _arg2:Number, _arg3:Number=1, _arg4:Point=null):Point{
var _local5:Point = new Point((_arg1 - x), (_arg2 - y));
if (_arg4 != null){
_local5.x = (_arg1 - (area.x + _arg4.x));
_local5.y = (_arg2 - (area.y + _arg4.y));
};
_local5.normalize(_arg3);
return (_local5);
}
public function get collision_area():Rectangle{
return (area);
}
public function on_click():void{
}
public function on_grab():void{
}
public function is_inside():Boolean{
return (area.intersects(world.area));
}
public function collide(_arg1:Thing):void{
}
protected function attach_bitmap_data(_arg1:BitmapData, _arg2:Number=-INF, _arg3:Number=-INF):Bitmap{
var _local4:Bitmap = new Bitmap(_arg1);
_local4.x = ((_arg2 == Number.NEGATIVE_INFINITY)) ? -(Math.floor((_arg1.width / 2))) : _arg2;
_local4.y = ((_arg3 == Number.NEGATIVE_INFINITY)) ? -(Math.floor((_arg1.height / 2))) : _arg3;
addChild(_local4);
if (default_bitmap == null){
default_bitmap = _local4;
};
return (_local4);
}
public function set interactive(_arg1:Boolean):void{
_interactive = _arg1;
}
public function place_randomly(_arg1:Rectangle, _arg2:Function=null, _arg3:Boolean=false):void{
var _local4:Array;
var _local5:int;
x = (_arg1.x + (_arg1.width / 2));
y = (_arg1.y + (_arg1.height / 2));
if (_arg2 != null){
_local4 = world.filter(_arg2, null, _arg3);
_local5 = 20;
while (((!(place_randomly_check(_local4, _arg3))) && ((_local5 > 0)))) {
x = Utils.rand(_arg1.x, _arg1.right);
y = Utils.rand(_arg1.y, _arg1.bottom);
_local5--;
};
} else {
x = Utils.rand(_arg1.x, _arg1.right);
y = Utils.rand(_arg1.y, _arg1.bottom);
};
}
public function update(_arg1:Event):void{
if (((Game.DEBUG) && (selected))){
Game.debug.text = ((int(x) + " , ") + int(y));
};
if (((selected) && (!((world == null))))){
x = Math.floor((world.mouseX + world.dragAnchor.x));
y = Math.floor((world.mouseY + world.dragAnchor.y));
};
process_highlight();
if (((((!(shown)) && (!((world == null))))) && (is_inside()))){
shown = true;
};
}
public function on_drop():void{
}
public function collides_with(_arg1:Thing, _arg2:Number=-1, _arg3:Rectangle=null, _arg4:Boolean=false):Boolean{
var _local5:Rectangle;
if (((((((((_arg4) || (((visible) && (_arg1.visible))))) && (solid))) && (_arg1.solid))) && (!((_arg1 == this))))){
if (_arg3 != null){
_local5 = collision_area.intersection(_arg1.collision_area);
if (((!(_local5.isEmpty())) && ((((_arg2 == -1)) || ((distance(_arg1) < _arg2)))))){
if (_arg3 != null){
_arg3.x = _local5.x;
_arg3.y = _local5.y;
_arg3.width = _local5.width;
_arg3.height = _local5.height;
};
return (true);
};
} else {
return (((collision_area.intersects(_arg1.collision_area)) && ((((_arg2 == -1)) || ((distance(_arg1) < _arg2))))));
};
};
return (false);
}
private function place_randomly_check(_arg1:Array, _arg2:Boolean):Boolean{
var _local3:Thing;
for each (_local3 in _arg1) {
if (((!((_local3 == this))) && (collides_with(_local3, -1, null, _arg2)))){
return (false);
};
};
return (true);
}
public function distance_point(_arg1:Number, _arg2:Number):Number{
var _local3:Number = (x - _arg1);
var _local4:Number = (y - _arg2);
return (Math.sqrt(((_local3 * _local3) + (_local4 * _local4))));
}
private function removed(_arg1:Event):void{
if (((!((world == null))) && ((world.dragging == _arg1.target)))){
world.dragging = null;
};
if (world != null){
world.changed = true;
};
removeEventListener(Event.ADDED_TO_STAGE, init);
removeEventListener(Event.ENTER_FRAME, update);
removeEventListener(Event.REMOVED_FROM_STAGE, removed);
}
public function get interactive():Boolean{
return (_interactive);
}
public function is_mouse_over():Boolean{
return (area.contains(world.mouseX, world.mouseY));
}
function process_highlight():void{
var _local1:int;
var _local2:int;
if (((interactive) && (((highlighted) || (selected))))){
if (!was_highlighted){
was_highlighted = true;
_local1 = 0;
while (_local1 != numChildren) {
getChildAt(_local1).y = (getChildAt(_local1).y - 2);
_local1++;
};
};
} else {
if (was_highlighted){
was_highlighted = false;
_local2 = 0;
while (_local2 != numChildren) {
getChildAt(_local2).y = (getChildAt(_local2).y + 2);
_local2++;
};
};
};
}
protected function attach_bitmap(_arg1:Bitmap, _arg2:Number=-INF, _arg3:Number=-INF):Bitmap{
_arg1.x = ((_arg2 == Number.NEGATIVE_INFINITY)) ? -(Math.floor((_arg1.width / 2))) : _arg2;
_arg1.y = ((_arg3 == Number.NEGATIVE_INFINITY)) ? -(Math.floor((_arg1.height / 2))) : _arg3;
addChild(_arg1);
if (default_bitmap == null){
default_bitmap = _arg1;
};
return (_arg1);
}
public function get highlighted():Boolean{
if (world == null){
return (false);
};
return ((world.highligthed == this));
}
public function set z(_arg1:Number):void{
_z = _arg1;
if (world != null){
world.changed = true;
};
}
public function distance(_arg1:Thing):Number{
var _local2:Number = (x - _arg1.x);
var _local3:Number = (y - _arg1.y);
return (Math.sqrt(((_local2 * _local2) + (_local3 * _local3))));
}
}
}//package moonlib2
Section 10
//Timer (moonlib2.Timer)
package moonlib2 {
import flash.geom.*;
import utils.*;
public class Timer {
private var timer_range:Point;// = null
private var timer:Number;// = 0
public var time:Number;
public function Timer(_arg1:Number, _arg2:Number=-1){
this.time = _arg1;
if (_arg2 != -1){
timer_range = new Point(_arg1, _arg2);
_arg1 = Utils.rand(_arg1, _arg2);
};
}
public function add(_arg1:Number):void{
timer = (timer + _arg1);
timer = Math.min(timer, time);
}
public function get done():Boolean{
return ((timer == time));
}
public function tick_back(_arg1:Number=-1):void{
if (_arg1 == -1){
_arg1 = Game.frame_time;
};
timer = (timer - _arg1);
if (timer < 0){
timer = 0;
};
}
public function get ratio():Number{
return ((timer / time));
}
public function reset():void{
timer = 0;
if (timer_range){
time = Utils.rand(timer_range.x, timer_range.y);
};
}
public function reset_to(_arg1:Number):void{
timer = 0;
time = _arg1;
timer_range = null;
}
public function set ratio(_arg1:Number):void{
timer = (_arg1 * time);
}
public function trigger():void{
timer = time;
}
public function tick(_arg1:Boolean=false):void{
timer = (timer + Game.frame_time);
if (((_arg1) && ((timer >= time)))){
timer = (timer - time);
if (timer_range){
time = Utils.rand(timer_range.x, timer_range.y);
};
};
timer = Math.min(timer, time);
}
public function get running():Boolean{
return ((timer < time));
}
}
}//package moonlib2
Section 11
//BitmapAsset (mx.core.BitmapAsset)
package mx.core {
import flash.display.*;
public class BitmapAsset extends FlexBitmap implements IFlexAsset, IFlexDisplayObject {
mx_internal static const VERSION:String = "3.2.0.3958";
public function BitmapAsset(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){
super(_arg1, _arg2, _arg3);
}
public function get measuredWidth():Number{
if (bitmapData){
return (bitmapData.width);
};
return (0);
}
public function get measuredHeight():Number{
if (bitmapData){
return (bitmapData.height);
};
return (0);
}
public function setActualSize(_arg1:Number, _arg2:Number):void{
width = _arg1;
height = _arg2;
}
public function move(_arg1:Number, _arg2:Number):void{
this.x = _arg1;
this.y = _arg2;
}
}
}//package mx.core
Section 12
//ByteArrayAsset (mx.core.ByteArrayAsset)
package mx.core {
import flash.utils.*;
public class ByteArrayAsset extends ByteArray implements IFlexAsset {
mx_internal static const VERSION:String = "3.2.0.3958";
}
}//package mx.core
Section 13
//EdgeMetrics (mx.core.EdgeMetrics)
package mx.core {
public class EdgeMetrics {
public var top:Number;
public var left:Number;
public var bottom:Number;
public var right:Number;
mx_internal static const VERSION:String = "3.2.0.3958";
public static const EMPTY:EdgeMetrics = new EdgeMetrics(0, 0, 0, 0);
;
public function EdgeMetrics(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0){
this.left = _arg1;
this.top = _arg2;
this.right = _arg3;
this.bottom = _arg4;
}
public function clone():EdgeMetrics{
return (new EdgeMetrics(left, top, right, bottom));
}
}
}//package mx.core
Section 14
//FlexBitmap (mx.core.FlexBitmap)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexBitmap extends Bitmap {
mx_internal static const VERSION:String = "3.2.0.3958";
public function FlexBitmap(_arg1:BitmapData=null, _arg2:String="auto", _arg3:Boolean=false){
var bitmapData = _arg1;
var pixelSnapping = _arg2;
var smoothing = _arg3;
super(bitmapData, pixelSnapping, smoothing);
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 15
//FlexSprite (mx.core.FlexSprite)
package mx.core {
import flash.display.*;
import mx.utils.*;
public class FlexSprite extends Sprite {
mx_internal static const VERSION:String = "3.2.0.3958";
public function FlexSprite(){
super();
try {
name = NameUtil.createUniqueName(this);
} catch(e:Error) {
};
}
override public function toString():String{
return (NameUtil.displayObjectToString(this));
}
}
}//package mx.core
Section 16
//FontAsset (mx.core.FontAsset)
package mx.core {
import flash.text.*;
public class FontAsset extends Font implements IFlexAsset {
mx_internal static const VERSION:String = "3.2.0.3958";
}
}//package mx.core
Section 17
//IBorder (mx.core.IBorder)
package mx.core {
public interface IBorder {
function get borderMetrics():EdgeMetrics;
}
}//package mx.core
Section 18
//IFlexAsset (mx.core.IFlexAsset)
package mx.core {
public interface IFlexAsset {
}
}//package mx.core
Section 19
//IFlexDisplayObject (mx.core.IFlexDisplayObject)
package mx.core {
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import flash.accessibility.*;
public interface IFlexDisplayObject extends IBitmapDrawable, IEventDispatcher {
function get visible():Boolean;
function get rotation():Number;
function localToGlobal(_arg1:Point):Point;
function get name():String;
function set width(_arg1:Number):void;
function get measuredHeight():Number;
function get blendMode():String;
function get scale9Grid():Rectangle;
function set name(_arg1:String):void;
function set scaleX(_arg1:Number):void;
function set scaleY(_arg1:Number):void;
function get measuredWidth():Number;
function get accessibilityProperties():AccessibilityProperties;
function set scrollRect(_arg1:Rectangle):void;
function get cacheAsBitmap():Boolean;
function globalToLocal(_arg1:Point):Point;
function get height():Number;
function set blendMode(_arg1:String):void;
function get parent():DisplayObjectContainer;
function getBounds(_arg1:DisplayObject):Rectangle;
function get opaqueBackground():Object;
function set scale9Grid(_arg1:Rectangle):void;
function setActualSize(_arg1:Number, _arg2:Number):void;
function set alpha(_arg1:Number):void;
function set accessibilityProperties(_arg1:AccessibilityProperties):void;
function get width():Number;
function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean;
function set cacheAsBitmap(_arg1:Boolean):void;
function get scaleX():Number;
function get scaleY():Number;
function get scrollRect():Rectangle;
function get mouseX():Number;
function get mouseY():Number;
function set height(_arg1:Number):void;
function set mask(_arg1:DisplayObject):void;
function getRect(_arg1:DisplayObject):Rectangle;
function get alpha():Number;
function set transform(_arg1:Transform):void;
function move(_arg1:Number, _arg2:Number):void;
function get loaderInfo():LoaderInfo;
function get root():DisplayObject;
function hitTestObject(_arg1:DisplayObject):Boolean;
function set opaqueBackground(_arg1:Object):void;
function set visible(_arg1:Boolean):void;
function get mask():DisplayObject;
function set x(_arg1:Number):void;
function set y(_arg1:Number):void;
function get transform():Transform;
function set filters(_arg1:Array):void;
function get x():Number;
function get y():Number;
function get filters():Array;
function set rotation(_arg1:Number):void;
function get stage():Stage;
}
}//package mx.core
Section 20
//IRepeaterClient (mx.core.IRepeaterClient)
package mx.core {
public interface IRepeaterClient {
function get instanceIndices():Array;
function set instanceIndices(_arg1:Array):void;
function get isDocument():Boolean;
function set repeaters(_arg1:Array):void;
function initializeRepeaterArrays(_arg1:IRepeaterClient):void;
function get repeaters():Array;
function set repeaterIndices(_arg1:Array):void;
function get repeaterIndices():Array;
}
}//package mx.core
Section 21
//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 22
//SoundAsset (mx.core.SoundAsset)
package mx.core {
import flash.media.*;
public class SoundAsset extends Sound implements IFlexAsset {
mx_internal static const VERSION:String = "3.2.0.3958";
}
}//package mx.core
Section 23
//SpriteAsset (mx.core.SpriteAsset)
package mx.core {
public class SpriteAsset extends FlexSprite implements IFlexAsset, IFlexDisplayObject, IBorder {
private var _measuredHeight:Number;
private var _measuredWidth:Number;
mx_internal static const VERSION:String = "3.2.0.3958";
public function SpriteAsset(){
_measuredWidth = width;
_measuredHeight = height;
}
public function get measuredWidth():Number{
return (_measuredWidth);
}
public function get measuredHeight():Number{
return (_measuredHeight);
}
public function setActualSize(_arg1:Number, _arg2:Number):void{
width = _arg1;
height = _arg2;
}
public function move(_arg1:Number, _arg2:Number):void{
this.x = _arg1;
this.y = _arg2;
}
public function get borderMetrics():EdgeMetrics{
if (scale9Grid == null){
return (EdgeMetrics.EMPTY);
};
return (new EdgeMetrics(scale9Grid.left, scale9Grid.top, Math.ceil((measuredWidth - scale9Grid.right)), Math.ceil((measuredHeight - scale9Grid.bottom))));
}
}
}//package mx.core
Section 24
//NameUtil (mx.utils.NameUtil)
package mx.utils {
import flash.display.*;
import mx.core.*;
import flash.utils.*;
public class NameUtil {
mx_internal static const VERSION:String = "3.2.0.3958";
private static var counter:int = 0;
public static function displayObjectToString(_arg1:DisplayObject):String{
var result:String;
var o:DisplayObject;
var s:String;
var indices:Array;
var displayObject = _arg1;
try {
o = displayObject;
while (o != null) {
if (((((o.parent) && (o.stage))) && ((o.parent == o.stage)))){
break;
};
s = o.name;
if ((o is IRepeaterClient)){
indices = IRepeaterClient(o).instanceIndices;
if (indices){
s = (s + (("[" + indices.join("][")) + "]"));
};
};
result = ((result == null)) ? s : ((s + ".") + result);
o = o.parent;
};
} catch(e:SecurityError) {
};
return (result);
}
public static function createUniqueName(_arg1:Object):String{
if (!_arg1){
return (null);
};
var _local2:String = getQualifiedClassName(_arg1);
var _local3:int = _local2.indexOf("::");
if (_local3 != -1){
_local2 = _local2.substr((_local3 + 2));
};
var _local4:int = _local2.charCodeAt((_local2.length - 1));
if ((((_local4 >= 48)) && ((_local4 <= 57)))){
_local2 = (_local2 + "_");
};
return ((_local2 + counter++));
}
}
}//package mx.utils
Section 25
//StringUtil (mx.utils.StringUtil)
package mx.utils {
public class StringUtil {
mx_internal static const VERSION:String = "3.2.0.3958";
public static function trim(_arg1:String):String{
if (_arg1 == null){
return ("");
};
var _local2:int;
while (isWhitespace(_arg1.charAt(_local2))) {
_local2++;
};
var _local3:int = (_arg1.length - 1);
while (isWhitespace(_arg1.charAt(_local3))) {
_local3--;
};
if (_local3 >= _local2){
return (_arg1.slice(_local2, (_local3 + 1)));
};
return ("");
}
public static function isWhitespace(_arg1:String):Boolean{
switch (_arg1){
case " ":
case "\t":
case "\r":
case "\n":
case "\f":
return (true);
default:
return (false);
};
}
public static function substitute(_arg1:String, ... _args):String{
var _local4:Array;
if (_arg1 == null){
return ("");
};
var _local3:uint = _args.length;
if ((((_local3 == 1)) && ((_args[0] is Array)))){
_local4 = (_args[0] as Array);
_local3 = _local4.length;
} else {
_local4 = _args;
};
var _local5:int;
while (_local5 < _local3) {
_arg1 = _arg1.replace(new RegExp((("\\{" + _local5) + "\\}"), "g"), _local4[_local5]);
_local5++;
};
return (_arg1);
}
public static function trimArrayElements(_arg1:String, _arg2:String):String{
var _local3:Array;
var _local4:int;
var _local5:int;
if (((!((_arg1 == ""))) && (!((_arg1 == null))))){
_local3 = _arg1.split(_arg2);
_local4 = _local3.length;
_local5 = 0;
while (_local5 < _local4) {
_local3[_local5] = StringUtil.trim(_local3[_local5]);
_local5++;
};
if (_local4 > 0){
_arg1 = _local3.join(_arg2);
};
};
return (_arg1);
}
}
}//package mx.utils
Section 26
//Strip (utils.Strip)
package utils {
import flash.geom.*;
import flash.display.*;
public class Strip {
public var frameCount:int;
public var img:BitmapData;
private var cacheSprite:BitmapData;
public var frameW:int;
public var frameH:int;
private var rowSize:int;
public function Strip(_arg1:BitmapData, _arg2:int, _arg3:int){
this.img = _arg1;
this.frameW = _arg2;
this.frameH = _arg3;
rowSize = (_arg1.width / _arg2);
frameCount = (rowSize * (_arg1.height / _arg3));
}
public function drawMatrix(_arg1:BitmapData, _arg2:int, _arg3:Matrix, _arg4:Number=1):void{
var _local8:Number;
var _local5:int = (Math.floor((_arg2 / rowSize)) * frameH);
var _local6:int = ((_arg2 % rowSize) * frameW);
var _local7:ColorTransform;
if (_arg4 != 1){
_local7 = new ColorTransform(1, 1, 1, _arg4);
};
if (cacheSprite == null){
_local8 = Math.max(frameW, frameH);
cacheSprite = new BitmapData(frameW, frameH, true, 0);
};
_arg3.translate(_local6, _local6);
cacheSprite.draw(img, _arg3, null, null, new Rectangle(_local6, _local5, frameW, frameH));
_arg1.draw(cacheSprite, null, _local7);
}
public function draw(_arg1:BitmapData, _arg2:int, _arg3:int, _arg4:int, _arg5:int=0, _arg6:int=0, _arg7:Number=1, _arg8:Number=0):void{
var _local13:int;
var _local14:int;
var _local15:Number;
var _local9:int = (Math.floor((_arg4 / rowSize)) * frameH);
var _local10:int = ((_arg4 % rowSize) * frameW);
if ((_arg6 & Utils.ANCHOR_HCENTER) != 0){
_arg2 = (_arg2 - (frameW / 2));
};
if ((((((_arg5 == 0)) && ((_arg7 == 1)))) && ((_arg8 == 0)))){
_arg1.copyPixels(img, new Rectangle(_local10, _local9, frameW, frameH), new Point(_arg2, _arg3), null, null, true);
return;
};
var _local11:Matrix = new Matrix();
var _local12:ColorTransform;
if (_arg7 != 1){
_local12 = new ColorTransform(1, 1, 1, _arg7);
};
if (_arg8 == 0){
_local11.translate(-(_local10), _local9);
if (_arg5 != 0){
_local11.scale(-1, 1);
_local11.translate(frameW, 0);
};
_local11.translate(_arg2, _arg3);
_arg1.draw(img, _local11, _local12, null, new Rectangle(_arg2, _arg3, frameW, frameH));
} else {
if (cacheSprite == null){
_local15 = Math.max(frameW, frameH);
cacheSprite = new BitmapData(frameW, frameH, true, 0);
};
cacheSprite.fillRect(new Rectangle(0, 0, cacheSprite.width, cacheSprite.height), 0);
_local11.translate(-(_local10), -(_local9));
cacheSprite.draw(img, _local11, null, null, new Rectangle(0, 0, frameW, frameH));
_local11.identity();
_local13 = (frameW >> 1);
_local14 = (frameH >> 1);
_local11.translate(-(_local13), -(_local14));
_local11.rotate(Utils.deg2rad(_arg8));
_local11.translate((_arg2 + _local13), (_arg3 + _local14));
_arg1.draw(cacheSprite, _local11, new ColorTransform(1, 1, 1, _arg7));
};
}
}
}//package utils
Section 27
//Utils (utils.Utils)
package utils {
import flash.text.*;
import flash.geom.*;
import flash.display.*;
import mx.utils.*;
import flash.utils.*;
public class Utils {
public static const ANCHOR_HCENTER:int = 4;
public static const ANCHOR_RIGHT:int = 1;
public static const ANCHOR_BOTTOM:int = 2;
private static var textField:TextField;
private static var _di_rect:Rectangle = new Rectangle();
private static var textWrap:MovieClip;
private static var _di_point:Point = new Point();
public static function newMatrix(_arg1:int, _arg2:int, _arg3:Function=null):Array{
var _local6:int;
var _local4:Array = new Array(_arg1);
var _local5:int;
while (_local5 != _arg1) {
_local4[_local5] = new Array(_arg2);
_local6 = 0;
while (_local6 != _arg2) {
if (_arg3 != null){
_local4[_local5][_local6] = _arg3(_local5, _local6);
} else {
_local4[_local5][_local6] = null;
};
_local6++;
};
_local5++;
};
return (_local4);
}
public static function getClass(_arg1:Object):Class{
return (Class(getDefinitionByName(getQualifiedClassName(_arg1))));
}
public static function cloneArray(_arg1:Array):Array{
var _local2:Array = new Array(_arg1.length);
var _local3:int;
while (_local3 < _arg1.length) {
_local2[_local3] = _arg1[_local3];
_local3++;
};
return (_local2);
}
public static function remove(_arg1:Array, _arg2:Object):void{
var _local3:int;
if (_arg2 != null){
_local3 = _arg1.indexOf(_arg2);
if (_local3 != -1){
_arg1.splice(_local3, 1);
};
};
}
public static function fillRect(_arg1:BitmapData, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:uint, _arg7:Number=1):void{
var _local8:Sprite = new Sprite();
_local8.graphics.beginFill(_arg6);
_local8.graphics.drawRect(0, 0, _arg4, _arg5);
_local8.graphics.endFill();
var _local9:Matrix = new Matrix();
_local9.translate(_arg2, _arg3);
_arg1.draw(_local8, _local9, new ColorTransform(1, 1, 1, _arg7));
}
public static function set_put(_arg1:Array, _arg2):Boolean{
if (_arg1.indexOf(_arg2) == -1){
_arg1.push(_arg2);
return (true);
};
return (false);
}
public static function drawTargetOutline(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{
_arg1.lineStyle(1, 4294967295);
drawLine(_arg1, _arg2, _arg3, (_arg2 + _arg6), _arg3);
drawLine(_arg1, _arg2, _arg3, _arg2, (_arg3 + _arg6));
drawLine(_arg1, (_arg2 + _arg4), _arg3, ((_arg2 + _arg4) - _arg6), _arg3);
drawLine(_arg1, (_arg2 + _arg4), _arg3, (_arg2 + _arg4), (_arg3 + _arg6));
drawLine(_arg1, (_arg2 + _arg4), (_arg3 + _arg5), ((_arg2 + _arg4) - _arg6), (_arg3 + _arg5));
drawLine(_arg1, (_arg2 + _arg4), (_arg3 + _arg5), (_arg2 + _arg4), ((_arg3 + _arg5) - _arg6));
drawLine(_arg1, _arg2, (_arg3 + _arg5), (_arg2 + _arg6), (_arg3 + _arg5));
drawLine(_arg1, _arg2, (_arg3 + _arg5), _arg2, ((_arg3 + _arg5) - _arg6));
}
public static function textSize(_arg1:String, _arg2:TextFormat, _arg3:int=-1):Point{
return (drawText(null, _arg1, _arg2, ((_arg3 == -1)) ? 10000 : _arg3, 0, 0).size);
}
public static function fillRoundRect(_arg1:BitmapData, _arg2:int, _arg3:int, _arg4:int, _arg5:int, _arg6:int, _arg7:uint, _arg8:Number=1):void{
var _local9:Sprite = new Sprite();
_local9.graphics.beginFill(_arg7);
_local9.graphics.drawRoundRect(0, 0, _arg4, _arg5, _arg6);
_local9.graphics.endFill();
var _local10:Matrix = new Matrix();
_local10.translate(_arg2, _arg3);
_arg1.draw(_local9, _local10, new ColorTransform(1, 1, 1, _arg8));
}
public static function drawText(_arg1:BitmapData, _arg2:String, _arg3:TextFormat, _arg4:int, _arg5:int, _arg6:int, _arg7:Number=1, _arg8:int=0, _arg9:Boolean=true):Rectangle{
var _local10:Matrix;
if (textField == null){
textField = new TextField();
textWrap = new MovieClip();
textWrap.addChild(textField);
textField.selectable = false;
textField.antiAliasType = AntiAliasType.ADVANCED;
textField.type = TextFieldType.DYNAMIC;
textField.autoSize = TextFieldAutoSize.LEFT;
textField.multiline = true;
textField.wordWrap = true;
textField.sharpness = 400;
textField.gridFitType = GridFitType.PIXEL;
textField.embedFonts = _arg9;
};
textField.width = _arg4;
textField.text = _arg2;
textField.setTextFormat(_arg3);
if (_arg1 != null){
_local10 = new Matrix();
if ((_arg8 & ANCHOR_RIGHT) != 0){
_local10.translate(-(textField.textWidth), 0);
} else {
if ((_arg8 & ANCHOR_HCENTER) != 0){
_local10.translate((-(textField.textWidth) / 2), 0);
};
};
if ((_arg8 & ANCHOR_BOTTOM) != 0){
_local10.translate(0, -(textField.textHeight));
};
_local10.translate(_arg5, _arg6);
_arg1.draw(textWrap, _local10, new ColorTransform(1, 1, 1, _arg7));
};
return (new Rectangle(0, 0, Math.min(_arg4, textField.textWidth), textField.textHeight));
}
public static function fillUI(_arg1:BitmapData, _arg2:Strip, _arg3:Rectangle):void{
var _local9:int;
var _local10:int;
var _local4:int = (_arg3.width / _arg2.frameW);
var _local5:int = (_arg3.height / _arg2.frameH);
var _local6:int = _arg3.x;
var _local7:int = _arg3.y;
var _local8:int;
while (_local8 != _local5) {
_local6 = _arg3.x;
_local9 = 0;
while (_local9 != _local4) {
_local10 = 4;
if (_local9 == 0){
_local10 = 3;
};
if (_local8 == 0){
_local10 = 1;
};
if (_local9 == 0){
_local10 = 3;
};
if (_local9 == (_local4 - 1)){
_local10 = 5;
};
if (_local8 == (_local5 - 1)){
_local10 = 7;
};
if ((((_local9 == 0)) && ((_local8 == 0)))){
_local10 = 0;
};
if ((((_local9 == (_local4 - 1))) && ((_local8 == 0)))){
_local10 = 2;
};
if ((((_local9 == (_local4 - 1))) && ((_local8 == (_local5 - 1))))){
_local10 = 8;
};
if ((((_local9 == 0)) && ((_local8 == (_local5 - 1))))){
_local10 = 6;
};
_arg2.draw(_arg1, _local6, _local7, _local10);
_local6 = (_local6 + _arg2.frameW);
_local9++;
};
_local7 = (_local7 + _arg2.frameH);
_local8++;
};
}
public static function drawLine(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):void{
_arg1.moveTo(_arg2, _arg3);
_arg1.lineTo(_arg4, _arg5);
}
public static function iterateMatrix(_arg1:Array, _arg2:Function):void{
var _local4:int;
var _local3:int;
while (_local3 != _arg1.length) {
_local4 = 0;
while (_local4 != _arg1[0].length) {
_arg1[_local3][_local4] = _arg2(_local3, _local4);
_local4++;
};
_local3++;
};
}
public static function splitTrim(_arg1:String, _arg2:String):Array{
if (_arg1 == ""){
return ([]);
};
var _local3:Array = _arg1.split(_arg2);
var _local4:int;
while (_local4 != _local3.length) {
_local3[_local4] = StringUtil.trim(_local3[_local4]);
_local4++;
};
return (_local3);
}
public static function drawFlipH(_arg1:BitmapData, _arg2:BitmapData, _arg3:Rectangle, _arg4:Point, _arg5:Number=1):void{
var _local6:Matrix = new Matrix();
_local6.scale(-1, 1);
_local6.translate((_arg4.x + _arg3.width), _arg4.y);
var _local7:BitmapData = new BitmapData(_arg3.width, _arg3.height, true, 0);
_local7.copyPixels(_arg2, _arg3, new Point());
_arg1.draw(_local7, _local6, ((_arg5 == 1)) ? null : new ColorTransform(1, 1, 1, _arg5));
}
public static function pick(_arg1:Array){
return (_arg1[rand(0, (_arg1.length - 1))]);
}
public static function fitRectangle(_arg1:Rectangle, _arg2:Rectangle):Rectangle{
var _local3:Rectangle = new Rectangle();
_local3.x = ((_arg1.x < _arg2.x)) ? _arg2.x : (((_arg1.x + _arg1.width) > (_arg2.x + _arg2.width))) ? ((_arg2.x + _arg2.width) - _arg1.width) : _arg1.x;
_local3.y = ((_arg1.y < _arg2.y)) ? _arg2.y : (((_arg1.y + _arg1.height) > (_arg2.y + _arg2.height))) ? ((_arg2.y + _arg2.height) - _arg1.height) : _arg1.y;
_local3.width = _arg1.width;
_local3.height = _arg1.height;
return (_local3);
}
public static function draw_bar(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:Rectangle):void{
_arg1.beginFill(0xFF0000);
_arg1.drawRect(int(_arg4.x), int(_arg4.y), int(_arg4.width), _arg4.height);
_arg1.endFill();
_arg1.beginFill(0xFF00);
_arg1.drawRect(int(_arg4.x), int(_arg4.y), int(((_arg2 * _arg4.width) / _arg3)), _arg4.height);
_arg1.endFill();
}
public static function deg2rad(_arg1:Number):Number{
return (((_arg1 * Math.PI) / 180));
}
public static function rand(_arg1:int, _arg2:int):int{
if (_arg1 >= _arg2){
return (int(_arg2));
};
_arg2 = (_arg2 + 1);
var _local3:int = (_arg2 - _arg1);
var _local4:Number = ((Math.random() * _local3) + _arg1);
return (_local4);
}
public static function rad2deg(_arg1:Number):Number{
return (((_arg1 * 180) / Math.PI));
}
public static function drawTextCentered(_arg1:BitmapData, _arg2:String, _arg3:TextFormat, _arg4:int, _arg5:int, _arg6:int):Rectangle{
var _local7:Point = textSize(_arg2, _arg3, _arg4);
return (drawText(_arg1, _arg2, _arg3, _arg4, (_arg5 - (_local7.x / 2)), (_arg6 - _local7.y)));
}
public static function drawImage(_arg1:BitmapData, _arg2:BitmapData, _arg3:Number, _arg4:Number):void{
_di_rect.width = _arg2.width;
_di_rect.height = _arg2.height;
_di_point.x = _arg3;
_di_point.y = _arg4;
_arg1.copyPixels(_arg2, _di_rect, _di_point, null, null, true);
}
public static function shuffle(_arg1:Array):Array{
var _local4:uint;
var _local2:Array = new Array();
var _local3:Array = _arg1.slice();
while (_local3.length > 0) {
_local4 = Math.floor((Math.random() * _local3.length));
_local2.push(_local3.splice(_local4, 1));
};
return (_local2);
}
public static function drawAlpha(_arg1:BitmapData, _arg2:BitmapData, _arg3:Rectangle, _arg4:Point, _arg5:Number=1):void{
if (_arg5 <= 0){
return;
};
var _local6:Matrix = new Matrix();
_local6.translate(_arg4.x, _arg4.y);
_arg1.draw(_arg2, _local6, ((_arg5 == 1)) ? null : new ColorTransform(1, 1, 1, _arg5));
}
public static function sign(_arg1:Number):Number{
if (_arg1 == 0){
return (0);
};
if (_arg1 > 0){
return (1);
};
return (-1);
}
}
}//package utils
Section 28
//Background (Background)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import flash.display.*;
public class Background extends Thing {
private var depth:Number;// = 0
private var back_free:BitmapData;
private var flash_time:Timer;
private var back_dark:BitmapData;
private var back_fear:BitmapData;
private var blend:BitmapData;
private var light:Bitmap;
private var atlantis:Bitmap;
private var explosion_timer:Timer;
private var backs:Array;
private var last_back:BitmapData;// = null
private var leaving_timer:Timer;
private var back_dead:BitmapData;
private static var img_dead:Class = Background_img_dead;
private static var img_fear:Class = Background_img_fear;
private static var img_free:Class = Background_img_free;
private static var img_dark:Class = Background_img_dark;
private static var img_light:Class = Background_img_light;
private static var img_atlantis:Class = Background_img_atlantis;
public function Background(){
var _local2:Bitmap;
backs = new Array();
leaving_timer = new Timer(4000);
flash_time = new Timer(70);
explosion_timer = new Timer(250, 1200);
super();
back_dark = new img_dark().bitmapData;
back_free = new img_free().bitmapData;
back_fear = new img_fear().bitmapData;
back_dead = new img_dead().bitmapData;
blend = back_fear.clone();
var _local1:int;
while (_local1 != 3) {
_local2 = new Bitmap(back_dead);
addChild(_local2);
_local2.y = ((_local1 - 1) * back_dark.height);
backs.push(_local2);
_local1++;
};
z = 0;
light = attach_bitmap_data(new img_light().bitmapData, 0, 0);
setChildIndex(light, (numChildren - 1));
light.visible = false;
atlantis = attach_bitmap_data(new img_atlantis().bitmapData, 0, 0);
atlantis.visible = false;
flash_time.trigger();
}
override public function update(_arg1:Event):void{
var _local2:Number;
super.update(_arg1);
light.visible = false;
atlantis.visible = false;
depth = (depth + ((poem.velocity < 0)) ? poem.velocity : 0);
transform.colorTransform = new ColorTransform();
if (poem.epilogue){
y = 0;
backs[0].bitmapData = light.bitmapData;
backs[1].bitmapData = light.bitmapData;
backs[2].bitmapData = light.bitmapData;
} else {
if (poem.environment == Today.word_dark){
y = 0;
atlantis.y = ((world.area.height - atlantis.height) - depth);
atlantis.visible = true;
atlantis.transform.colorTransform = (Today.she.shining) ? new ColorTransform() : new ColorTransform(0, 0, 0);
backs[0].bitmapData = back_dark;
backs[1].bitmapData = back_dark;
backs[2].bitmapData = back_dark;
} else {
if (poem.environment == Today.word_struggle){
y = (y - poem.velocity);
backs[0].bitmapData = blend;
backs[1].bitmapData = blend;
backs[2].bitmapData = blend;
blend.copyPixels(back_fear, new Rectangle(0, 0, blend.width, blend.height), new Point(0, 0), null, null, true);
blend.draw(back_free, null, new ColorTransform(1, 1, 1, Today.word_free.alpha));
explosion_timer.tick();
if (explosion_timer.done){
explosion_timer.reset();
};
} else {
if (poem.environment == Today.word_death){
y = 0;
backs[0].bitmapData = back_dead;
backs[1].bitmapData = back_dead;
backs[2].bitmapData = back_dead;
} else {
y = (y - poem.velocity);
backs[0].bitmapData = back_free;
backs[1].bitmapData = back_free;
backs[2].bitmapData = back_free;
if (Today.boy.rescuing){
leaving_timer.tick();
light.visible = true;
light.y = -(y);
light.alpha = leaving_timer.ratio;
};
};
};
};
};
if ((((poem.environment == Today.word_dark)) && (!(Today.she.shining)))){
transform.colorTransform = new ColorTransform(0.4, 0.4, 0.4);
};
if (((!(poem.epilogue)) && (!(Today.boy.rescuing)))){
if (poem.environment == Today.word_free){
_local2 = ((poem.beacon_completeness(true) * 0.15) + 0.85);
transform.colorTransform = new ColorTransform(_local2, _local2, _local2);
} else {
if (poem.environment == Today.word_struggle){
_local2 = ((poem.beacon_completeness(true) * 0.25) + 0.75);
transform.colorTransform = new ColorTransform(_local2, _local2, _local2);
};
};
};
if (!poem.epilogue){
flash_time.tick();
if (flash_time.running){
transform.colorTransform = new ColorTransform(1, 1, 1, 1, 64, 64, 64);
};
};
y = (y % area.height);
light.y = (light.y % area.height);
}
override public function get area():Rectangle{
return (new Rectangle(x, y, back_dark.width, back_dark.height));
}
public function explosion():void{
flash_time.reset();
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
}
private function get poem():Today{
return ((world as Today));
}
}
}//package
Section 29
//Background_img_atlantis (Background_img_atlantis)
package {
import mx.core.*;
public class Background_img_atlantis extends BitmapAsset {
}
}//package
Section 30
//Background_img_dark (Background_img_dark)
package {
import mx.core.*;
public class Background_img_dark extends BitmapAsset {
}
}//package
Section 31
//Background_img_dead (Background_img_dead)
package {
import mx.core.*;
public class Background_img_dead extends BitmapAsset {
}
}//package
Section 32
//Background_img_fear (Background_img_fear)
package {
import mx.core.*;
public class Background_img_fear extends BitmapAsset {
}
}//package
Section 33
//Background_img_free (Background_img_free)
package {
import mx.core.*;
public class Background_img_free extends BitmapAsset {
}
}//package
Section 34
//Background_img_light (Background_img_light)
package {
import mx.core.*;
public class Background_img_light extends BitmapAsset {
}
}//package
Section 35
//Boy (Boy)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import utils.*;
public class Boy extends Animated {
public var rescuing:Boolean;// = false
private var struggling_bubble_timer:Timer;
private var expression:Expression;
public var tired_of_waiting:Timer;
private static var img:Class = Boy_img;
public function Boy(){
struggling_bubble_timer = new Timer(250);
tired_of_waiting = new Timer(15000);
super(new Animation(new img().bitmapData, 7, 22, 150));
anim.play(true);
interactive = true;
visible = false;
expression = new Expression(this, 2, 3);
addChild(expression);
expression.x = (anim.x + 2);
expression.y = (anim.y + 2);
(expression.status == Expression.SEEK);
expression.seekTarget = Today.she;
z = (Today.she.z - 1);
}
override public function update(_arg1:Event):void{
var bubble:Thing;
var e = _arg1;
super.update(e);
visible = ((Today.word_beauty.is_on_poem()) && (((rescuing) || ((Today.main.beacon_completeness(true) == 1)))));
if (visible){
if (!is_inside()){
bubble = world.closest(this, world.filter(function (_arg1:Thing):Boolean{
return ((((_arg1 is Bubble)) && ((_arg1 as Bubble).grown)));
}));
if (bubble != null){
y = bubble.y;
};
};
if (!Today.main.epilogue){
tired_of_waiting.tick();
};
expression.seekTarget = Today.she;
expression.status = Expression.SEEK;
make_bubbles();
if (rescuing){
y = (Today.she.y + 7);
x = int((Today.she.x - (area.width * 1.5)));
alpha = 0.2;
expression.status = Expression.NONE;
anim.transform.colorTransform = new ColorTransform(0, 0, 0, 1);
} else {
if (tired_of_waiting.done){
x = (x - 0.5);
expression.status = Expression.SAD_LONELY;
if (!is_inside()){
destroy();
return;
};
} else {
if (x < (area.width * 4)){
x = (x + 1);
} else {
if (Math.abs((y - Today.she.y)) > 5){
y = (y - (Utils.sign((y - Today.she.y)) * 0.5));
};
if (collides_with(Today.she)){
rescuing = true;
x = (Today.she.x - area.width);
};
};
};
};
};
}
protected function make_bubbles():void{
struggling_bubble_timer.tick();
if (struggling_bubble_timer.done){
world.add(new Whirlwind(), (x + 3), (y + 6));
struggling_bubble_timer.reset();
};
}
}
}//package
Section 36
//Boy_img (Boy_img)
package {
import mx.core.*;
public class Boy_img extends BitmapAsset {
}
}//package
Section 37
//Bubble (Bubble)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import flash.display.*;
public class Bubble extends Animated {
public var original_enviro:Word;// = null
private var degradation_timer:Timer;
private var light:Bitmap;
private var struggling_bubble_timer:Timer;
private var stuck_anchor:Point;
public var grow_timer:Timer;
private var has_grown:Boolean;// = false
public var stuck_to:Thing;// = null
private static const DEGRADATION_BASE:Number = 14000;
private static var img:Class = Bubble_img;
private static var img_light:Class = Bubble_img_light;
public static var built_at_least_a_bubble:Boolean = false;
public function Bubble(){
grow_timer = new Timer(1000);
stuck_anchor = new Point();
degradation_timer = new Timer(DEGRADATION_BASE);
struggling_bubble_timer = new Timer(500);
super(new Animation(new img().bitmapData, 12, 12));
anim.setFrame(0);
light = attach_bitmap_data(new img_light().bitmapData);
light.alpha = 0;
setChildIndex(light, 0);
interactive = true;
z = (Today.she.z + 1);
}
public function burst():void{
world.add(new Explosion(), x, y);
grow_timer.reset();
destroy();
if (Today.she.carrying == this){
Today.she.carrying = null;
};
}
override public function update(_arg1:Event):void{
var s:Shadow;
var hitting:Array;
var b:Bubble;
var e = _arg1;
super.update(e);
interactive = true;
if (selected){
fit_in(world.area);
};
if (((((!((original_enviro == poem.environment))) || (poem.epilogue))) || (Today.boy.rescuing))){
burst();
return;
};
var max = 9;
if (poem.epilogue){
max = 9;
} else {
if (poem.environment == Today.word_dark){
max = 2;
anim.setFrame(1);
if (!grown){
degradation_timer.reset_to((DEGRADATION_BASE / 2));
};
} else {
if ((((poem.environment == Today.word_fear)) || ((poem.environment == Today.word_struggle)))){
max = 5;
};
};
};
var size:Number = (grow_timer.ratio - degradation_timer.ratio);
anim.setFrame(Math.floor((size * max)));
if (grown){
z = (Today.she.z + 1);
built_at_least_a_bubble = true;
has_grown = true;
if (((selected) && (!(is_inside())))){
destroy();
};
light.alpha = 0.5;
if (poem.filled == Today.word_beauty){
z = (Today.she.z - 1);
anim.setFrame((anim.strip.frameCount - 1));
if (stuck_to == null){
if (collides_with(Today.she, 15)){
stick_to(Today.she);
} else {
hitting = world.filter(function (_arg1:Thing):Boolean{
return ((((((_arg1 is Bubble)) && (collides_with(_arg1, 11)))) && ((_arg1 as Bubble).grown)));
});
for each (b in hitting) {
if (((!((b == this))) && (!((b.stuck_to == this))))){
stick_to(b);
break;
};
};
};
};
if (stuck_to != null){
if (!selected){
x = (stuck_anchor.x + stuck_to.x);
y = (stuck_anchor.y + stuck_to.y);
} else {
stuck_to = null;
};
light.alpha = Math.max(0.4, Today.she.pulse);
};
};
return;
};
light.alpha = Math.max(0.4, (grow_timer.ratio * (anim.currentFrame / (anim.strip.frameCount - 1))));
if (Today.she.carrying == this){
interactive = false;
} else {
interactive = true;
};
for each (s in Today.shadows) {
if (((s.is_completely_inside()) && (s.collides_with(this, 10)))){
burst();
return;
};
};
if (((((((((((Today.she.visible) && (!(selected)))) && (!(grown)))) && (!(has_grown)))) && ((Today.she.carrying == null)))) && (collides_with(Today.she, 10)))){
if (Today.she.shining){
Today.she.carrying = this;
} else {
if (Today.main.action != Today.word_swim){
burst();
return;
};
};
};
y = (y - 2);
x = (x + (Math.sin((Game.time / 1000)) * 0.2));
if (((shown) && ((y < (-(area.height) * 2))))){
destroy();
};
x = int(x);
y = int(y);
}
public function get grown():Boolean{
return (grow_timer.done);
}
protected function make_bubbles():void{
struggling_bubble_timer.tick();
if (struggling_bubble_timer.done){
world.add(new Whirlwind(), (x + 3), (y + 6));
struggling_bubble_timer.reset();
};
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
original_enviro = poem.environment;
if (poem.environment == Today.word_free){
grow_timer.add((grow_timer.time / 2));
};
}
public function inflate():void{
if (!has_grown){
grow_timer.tick();
};
}
private function stick_to(_arg1:Thing):void{
stuck_to = _arg1;
stuck_anchor.x = (x - _arg1.x);
stuck_anchor.y = (y - _arg1.y);
}
public function get poem():Today{
return ((world as Today));
}
}
}//package
Section 38
//Bubble_img (Bubble_img)
package {
import mx.core.*;
public class Bubble_img extends BitmapAsset {
}
}//package
Section 39
//Bubble_img_light (Bubble_img_light)
package {
import mx.core.*;
public class Bubble_img_light extends BitmapAsset {
}
}//package
Section 40
//ChaseBehavior (ChaseBehavior)
package {
import moonlib2.*;
import flash.geom.*;
public class ChaseBehavior {
public var dir:Point;
private var avoid:Function;// = null
public var launch_timer:Timer;
public function ChaseBehavior(_arg1:Timer, _arg2:Function){
dir = new Point();
launch_timer = new Timer(250, 600);
super();
this.launch_timer = _arg1;
this.avoid = _arg2;
}
public function go_away_from(_arg1:Thing, _arg2:Thing):void{
dir = _arg1.direction_towards(_arg2.x, _arg2.y);
dir.x = (dir.x * -1);
dir.y = (dir.y * -1);
}
public function go_towards(_arg1:Thing, _arg2:Thing):void{
dir = _arg1.direction_towards(_arg2.x, _arg2.y);
}
public function update(_arg1:Thing, _arg2:Number):void{
_arg1.x = (_arg1.x + (dir.x * _arg2));
_arg1.y = (_arg1.y + (dir.y * _arg2));
}
public function go_away(_arg1:Thing, _arg2:Number, _arg3:Number):void{
dir = _arg1.direction_towards(_arg2, _arg3);
dir.x = (dir.x * -1);
dir.y = (dir.y * -1);
}
public function chase(_arg1:Animated, _arg2:Thing):Boolean{
var _local3:Array;
if (_arg2 != null){
_local3 = ((avoid)!=null) ? _arg1.world.filter(avoid) : [];
if (_local3.length > 0){
go_away_from(_arg1, _local3[0]);
} else {
launch_timer.tick();
if (launch_timer.done){
go_towards(_arg1, _arg2);
launch_timer.reset();
};
};
_arg1.flip_towards(_arg2);
if (_arg1.collides_with(_arg2, 17)){
_arg2 = null;
return (true);
};
} else {
dir.x = (dir.y = 0);
launch_timer.reset();
};
return (false);
}
public function reset():void{
launch_timer.reset();
}
}
}//package
Section 41
//Darkness (Darkness)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Darkness extends Fear {
private static var img:Class = Darkness_img;
public function Darkness(){
super(null, new Point(), new Animation(new img().bitmapData, 31, 20));
visible = false;
interactive = true;
z = 6;
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
}
override public function update(_arg1:Event):void{
super.update(_arg1);
visible = (poem.environment == Today.word_dark);
if (visible){
if (selected){
fit_in(world.area);
};
if (Today.she.shining){
anim.setFrame(1);
interactive = true;
escape(20);
} else {
anim.setFrame(0);
interactive = false;
};
flip(1);
};
}
}
}//package
Section 42
//Darkness_img (Darkness_img)
package {
import mx.core.*;
public class Darkness_img extends BitmapAsset {
}
}//package
Section 43
//Explosion (Explosion)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Explosion extends Animated {
private var life:Timer;
private static var img:Class = Explosion_img;
public function Explosion(_arg1:Boolean=false){
life = new Timer(800);
super(new Animation(new img().bitmapData));
z = (Today.she.z + 1);
if (_arg1){
transform.colorTransform = new ColorTransform(0, 0, 0);
};
}
override public function update(_arg1:Event):void{
super.update(_arg1);
y = (y - 1);
life.tick();
if (life.done){
destroy();
};
}
}
}//package
Section 44
//Explosion_img (Explosion_img)
package {
import mx.core.*;
public class Explosion_img extends BitmapAsset {
}
}//package
Section 45
//Fear (Fear)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Fear extends Animated {
protected var movement:ChaseBehavior;
private static var optim_shiner_update:Number = 0;
private static var optim_shiners:Array = new Array();
public function Fear(_arg1:Function, _arg2:Point, _arg3:Animation, _arg4:Number=INF, _arg5:Number=INF){
super(_arg3, _arg4, _arg5);
movement = new ChaseBehavior(new Timer(_arg2.x, _arg2.y), _arg1);
visible = false;
interactive = true;
z = 17;
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
}
protected function escape(_arg1:Number=25):Boolean{
var _local4:Number;
var _local2:Thing = this;
var _local3:Thing = world.closest(this, optim_shiners);
if (_local3){
_local4 = ((_local3 is She)) ? _arg1 : (_local3.area.width + 6);
if (distance(_local3) < _local4){
flip_away(_local3);
movement.go_away_from(this, _local3);
movement.update(this, 3);
if ((((_local3 is She)) && (!(((_local3 as She).carrying == null))))){
(_local3 as She).carrying.burst();
};
return (true);
};
};
return (false);
}
protected function get poem():Today{
return ((world as Today));
}
override public function update(_arg1:Event):void{
var e = _arg1;
super.update(e);
if (selected){
fit_in(world.area);
};
if (optim_shiner_update != Game.time){
optim_shiner_update = Game.time;
optim_shiners.length = 0;
world.filter(function (_arg1:Thing):Boolean{
return (((_arg1.alive) && (is_shining(_arg1))));
}, optim_shiners);
};
}
protected function best_target():Thing{
if (poem.environment == Today.word_free){
return (null);
};
var _local1:She = Today.she;
if (!_local1.visible){
return (null);
};
if (((!(_local1.shining)) && ((poem.action == Today.word_swim)))){
if (distance(_local1) < 40){
return (((distance(_local1) < 40)) ? _local1 : null);
};
return (_local1);
};
return (null);
}
public static function is_shining(_arg1:Thing):Boolean{
if ((((((_arg1 is She)) && ((_arg1 as She).shining))) && (((_arg1 as She).carrying == null)))){
return (true);
};
if ((((_arg1 is Bubble)) && ((_arg1 as Bubble).grown))){
return (true);
};
if ((((_arg1 is Fish)) && ((_arg1 as Fish).lit))){
return (true);
};
return (false);
}
}
}//package
Section 46
//Fish (Fish)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import flash.display.*;
import utils.*;
public class Fish extends Animated {
private var struggle_timer:Timer;
private var speed:Number;// = 1
private var lumped_against:Fish;// = null
private var light:Bitmap;
private var initial_rotation:Number;
private var was_holding_word:Fish;// = null
public var dead:Boolean;// = true
private var lumped_anchor:Point;
private var impulse_timer:Timer;
private var initial_y:Number;
private static var img_light:Class = Fish_img_light;
private static var img:Class = Fish_img;
public function Fish(){
struggle_timer = new Timer(6000);
lumped_anchor = new Point();
impulse_timer = new Timer(1000, 4000);
super(new Animation(new img().bitmapData, 9, 12, 2000));
speed = (Utils.rand(50, 200) / 100);
rotation = Utils.rand(0, 360);
visible = false;
interactive = true;
z = 16;
light = attach_bitmap_data(new img_light().bitmapData, -20, -24);
light.alpha = 0;
struggle_timer.ratio = 0.1;
initial_rotation = rotation;
}
public function is_lumped():Boolean{
return (!((lumped_against == null)));
}
override public function update(_arg1:Event):void{
super.update(_arg1);
visible = (poem.environment == Today.word_death);
if (visible){
if (selected){
fit_in(world.area);
if (dead){
dead = false;
anim.rewind();
anim.setFrameTime(150);
anim.play(true);
};
} else {
anim.stop();
};
if (lit){
z = 18;
};
if (Today.she.shining){
struggle_timer.tick();
if (dead){
dead = false;
anim.rewind();
anim.setFrameTime(150);
anim.play(true);
};
};
if (dead){
light.alpha = 0;
y = (y - 0.2);
transform.colorTransform = new ColorTransform(0.7, 0.7, 0.7);
} else {
rotation = 0;
transform.colorTransform = new ColorTransform();
if (selected){
struggle_timer.tick();
Today.she.event(this);
if (!Today.word_shine.is_available()){
Today.word_shine.stop_fade_out();
Today.word_shine.alpha = struggle_timer.ratio;
was_holding_word = this;
};
} else {
impulse_timer.tick();
if (impulse_timer.done){
impulse_timer.reset_to(Utils.rand(2000, 3000));
};
if (impulse_timer.ratio < 0.3){
anim.setFrame(1);
} else {
anim.setFrame(0);
};
y = (y - (speed * (1 - impulse_timer.ratio)));
if (((!(Today.word_shine.is_available())) && ((was_holding_word == this)))){
struggle_timer.tick_back();
Today.word_shine.alpha = 0;
dead = true;
anim.stop();
anim.setFrame(0);
rotation = initial_rotation;
};
if (((Today.word_shine.is_available()) && ((was_holding_word == this)))){
was_holding_word = null;
};
};
if ((((was_holding_word == this)) && (!(Today.word_shine.is_available())))){
poem.place_word(Today.word_shine, was_holding_word);
};
light.alpha = struggle_timer.ratio;
};
if (((shown) && (!(is_inside())))){
y = (world.area.height + Utils.rand(20, 50));
if (!Today.word_shine.is_available()){
dead = true;
anim.stop();
};
shown = false;
};
};
}
override protected function init(_arg1:Event):void{
var e = _arg1;
super.init(e);
var r:Rectangle = world.area;
r.y = 0;
r.height = (world.area.height * 2);
r.inflate(-(area.width), 0);
place_randomly(r, function (_arg1:Thing):Boolean{
return ((_arg1 is Fish));
}, true);
}
override public function get area():Rectangle{
var _local1:Rectangle = super.area;
_local1.inflate(5, 5);
return (_local1);
}
public function get lit():Boolean{
return ((struggle_timer.ratio == 1));
}
public function on_eaten():void{
var _local1:Fish;
if (!Today.word_shine.is_available()){
Today.word_shine.fade_out();
struggle_timer.reset();
};
world.add(new Whirlwind(), (x + 3), (y + 6));
world.add(new Tail(this), x, y);
_local1 = new Fish();
world.add(_local1);
_local1.x = x;
_local1.y = (world.area.height + Utils.rand(40, 70));
destroy();
}
private function get poem():Today{
return ((world as Today));
}
}
}//package
Section 47
//Fish_img (Fish_img)
package {
import mx.core.*;
public class Fish_img extends BitmapAsset {
}
}//package
Section 48
//Fish_img_light (Fish_img_light)
package {
import mx.core.*;
public class Fish_img_light extends BitmapAsset {
}
}//package
Section 49
//FloatingBehavior (FloatingBehavior)
package {
import moonlib2.*;
import utils.*;
public class FloatingBehavior {
private var wait:Timer;
public function FloatingBehavior(){
wait = new Timer(400, 800);
super();
}
public function update(_arg1:Thing):void{
wait.tick();
if (wait.done){
wait.reset();
_arg1.y = (_arg1.y + (Utils.rand(0, 2) - 1));
};
}
}
}//package
Section 50
//Floor (Floor)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Floor extends Animated {
private static var img:Class = Floor_img;
public function Floor(){
super(new Animation(new img().bitmapData), 0, 0);
visible = false;
z = 5;
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
y = (world.area.height - area.height);
}
override public function update(_arg1:Event):void{
super.update(_arg1);
visible = (Today.main.environment == Today.word_dark);
if (visible){
transform.colorTransform = new ColorTransform(0, 0, 0);
};
}
}
}//package
Section 51
//Floor_img (Floor_img)
package {
import mx.core.*;
public class Floor_img extends BitmapAsset {
}
}//package
Section 52
//Girl (Girl)
package {
import moonlib2.*;
import flash.geom.*;
public class Girl extends Animated {
protected var anim_sinking:Animation;
protected var anim_swimming:Animation;
protected var anim_floating:Animation;
private var struggling_bubble_timer:Timer;
protected var expression:Expression;
private static var img:Class = Girl_img;
private static var img_drowning:Class = Girl_img_drowning;
private static var img_swimmer:Class = Girl_img_swimmer;
public function Girl(){
struggling_bubble_timer = new Timer(140);
super(new Animation(new img().bitmapData, 21, 13, 1500));
anim_sinking = anim;
anim_floating = attach_anim(new Animation(new img_drowning().bitmapData, 14, 20, 150));
anim_floating.visible = false;
anim_swimming = attach_anim(new Animation(new img_swimmer().bitmapData, 8, 20, 150));
anim_swimming.visible = false;
expression = new Expression(this, 2, 3);
addChild(expression);
anim.sequence = new Array(0, 1);
anim.play(true);
}
protected function update_sinking(_arg1:Thing, _arg2:Boolean=false):void{
set_no_anims();
anim_sinking.visible = true;
if (_arg1 != null){
anim_sinking.stop();
anim_sinking.sequence = new Array(2, 3);
anim_sinking.setFrame(((_arg1.y < y)) ? 0 : 1);
} else {
anim_sinking.sequence = [0, 1];
anim_sinking.play(true);
};
expression.status = Expression.NONE;
}
protected function update_float():void{
set_no_anims();
anim_floating.update();
anim_floating.play(true);
anim_floating.sequence = [2, 3];
anim_floating.visible = true;
expression.x = (anim_floating.x + 6);
expression.y = anim_floating.y;
expression.status = Expression.ALMOST_CLOSED;
}
public function get poem():Today{
return ((world as Today));
}
protected function update_drowning():void{
set_no_anims();
anim_floating.update();
anim_floating.play(true);
anim_floating.sequence = [6, 7];
anim_floating.visible = true;
expression.x = (anim_floating.x + 6);
expression.y = (anim_floating.y + 2);
expression.status = Expression.ALMOST_CLOSED;
make_bubbles();
}
protected function update_shining():void{
set_no_anims();
anim_floating.update();
anim_floating.play(true);
anim_floating.sequence = [4, 5];
anim_floating.visible = true;
expression.status = Expression.FOCUSED;
expression.x = (anim_floating.x + 6);
expression.y = (anim_floating.y + 2);
flip(1);
}
private function set_no_anims():void{
anim_swimming.visible = false;
anim_floating.visible = false;
anim_sinking.visible = false;
}
override public function get collision_area():Rectangle{
var _local1:Rectangle = area;
_local1.inflate(-1, -1);
return (_local1);
}
protected function update_swimmer():void{
set_no_anims();
anim_swimming.update();
anim_swimming.visible = true;
expression.x = (anim_swimming.x + 2);
expression.y = (anim_swimming.y + 2);
if (poem.environment == Today.word_fear){
expression.status = Expression.FOCUSED_UP;
} else {
expression.status = Expression.UP;
};
}
protected function make_bubbles():void{
struggling_bubble_timer.tick();
if (struggling_bubble_timer.done){
world.add(new Whirlwind(), (x - 1), (y + 5));
struggling_bubble_timer.reset();
};
}
protected function get_visible_anim():Animation{
if (anim_swimming.visible){
return (anim_swimming);
};
if (anim_floating.visible){
return (anim_floating);
};
if (anim_sinking.visible){
return (anim_sinking);
};
return (anim);
}
}
}//package
Section 53
//Girl_img (Girl_img)
package {
import mx.core.*;
public class Girl_img extends BitmapAsset {
}
}//package
Section 54
//Girl_img_drowning (Girl_img_drowning)
package {
import mx.core.*;
public class Girl_img_drowning extends BitmapAsset {
}
}//package
Section 55
//Girl_img_swimmer (Girl_img_swimmer)
package {
import mx.core.*;
public class Girl_img_swimmer extends BitmapAsset {
}
}//package
Section 56
//Hyperlink (Hyperlink)
package {
import flash.text.*;
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import flash.net.*;
public class Hyperlink extends Text {
private var txt:String;
public var url:String;
public function Hyperlink(_arg1:TextFormat, _arg2:String, _arg3:String){
super(_arg1);
this.url = _arg3;
this.txt = _arg2;
z = 5000;
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
text = (("<u>" + txt) + "</u>");
field.antiAliasType = AntiAliasType.NORMAL;
buttonMode = true;
mouseEnabled = true;
mouseChildren = false;
useHandCursor = true;
}
override public function on_click():void{
super.on_click();
var _local1:URLRequest = new URLRequest(url);
navigateToURL(_local1, "_blank");
}
override public function get area():Rectangle{
return (new Rectangle(x, y, field.textWidth, field.textHeight));
}
}
}//package
Section 57
//MochiBot (MochiBot)
package {
import flash.display.*;
import flash.system.*;
import flash.net.*;
public dynamic class MochiBot extends Sprite {
public static function track(_arg1:Sprite, _arg2:String):MochiBot{
if (Security.sandboxType == "localWithFile"){
return (null);
};
var _local3:MochiBot = new (MochiBot);
_arg1.addChild(_local3);
Security.allowDomain("*");
Security.allowInsecureDomain("*");
var _local4 = "http://core.mochibot.com/my/core.swf";
var _local5:URLVariables = new URLVariables();
_local5["sb"] = Security.sandboxType;
_local5["v"] = Capabilities.version;
_local5["swfid"] = _arg2;
_local5["mv"] = "8";
_local5["fv"] = "9";
var _local6:String = _local3.root.loaderInfo.loaderURL;
if (_local6.indexOf("http") == 0){
_local5["url"] = _local6;
} else {
_local5["url"] = "local";
};
var _local7:URLRequest = new URLRequest(_local4);
_local7.contentType = "application/x-www-form-urlencoded";
_local7.method = URLRequestMethod.POST;
_local7.data = _local5;
var _local8:Loader = new Loader();
_local3.addChild(_local8);
_local8.load(_local7);
return (_local3);
}
}
}//package
Section 58
//Pirana (Pirana)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Pirana extends Fear {
public var target:Thing;// = null
private var floating:FloatingBehavior;
private var leader:Boolean;// = false
private static var img_pirana:Class = Pirana_img_pirana;
public function Pirana(_arg1:Boolean){
var me:Thing;
var leader = _arg1;
floating = new FloatingBehavior();
super((leader) ? null : function (_arg1:Thing):Boolean{
return ((((_arg1 is Pirana)) && (_arg1.collides_with(me))));
}, new Point(100, 300), new Animation(new img_pirana().bitmapData));
this.leader = leader;
if (leader){
movement.launch_timer.reset_to(0);
};
me = this;
interactive = true;
visible = false;
}
override public function update(_arg1:Event):void{
var fish:Fish;
var e = _arg1;
super.update(e);
visible = (poem.environment == Today.word_death);
if (!visible){
return;
};
target = null;
var chasing:Boolean;
if (!Today.word_shine.is_available()){
if ((world.dragging is Fish)){
target = world.dragging;
} else {
fish = (world.closest(this, world.filter(function (_arg1:Thing):Boolean{
return ((((_arg1 is Fish)) && (!((_arg1 as Fish).dead))));
})) as Fish);
if (fish != null){
target = fish;
};
};
if (((!((target == null))) && ((Today.word_shine.alpha > 0.4)))){
chasing = true;
if (movement.chase(this, target)){
(target as Fish).on_eaten();
target = null;
movement.reset();
poem.shake();
};
} else {
movement.dir.x = (movement.dir.y = 0);
};
movement.update(this, 2);
} else {
escape();
};
if (!chasing){
floating.update(this);
};
}
}
}//package
Section 59
//Pirana_img_pirana (Pirana_img_pirana)
package {
import mx.core.*;
public class Pirana_img_pirana extends BitmapAsset {
}
}//package
Section 60
//Preloader (Preloader)
package {
import flash.text.*;
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import flash.utils.*;
public class Preloader extends MovieClip {
private var instructions:TextField;
private var MyFontHolder:Class;
private var begin:Boolean;// = false
private var text:TextField;
private var font:TextFormat;
private var loading_bar_y:Number;
private var bar:Sprite;
private var waiting_begin:Boolean;// = false
private var title:TextField;
private static var img_dead:Class = Preloader_img_dead;
private static var img:Class = Preloader_img;
public function Preloader(){
var _local1:Bitmap;
MyFontHolder = Preloader_MyFontHolder;
bar = new Sprite();
super();
stop();
if (((((!(check_domain("daniel_benmergui_games.s3.amazonaws.com"))) && (!(check_domain("ludomancy.com/games"))))) && (!((stage.loaderInfo.url.substring(0, 4) == "file"))))){
throw (new String(("Checksum failed. Please update your flash player. URL: " + stage.loaderInfo.url)));
};
addEventListener(Event.ENTER_FRAME, onEnterFrame);
addEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
_local1 = new Bitmap(new img_dead().bitmapData);
_local1.scaleX = (_local1.scaleY = 3);
addChild(_local1);
_local1 = new Bitmap(new img().bitmapData);
_local1.x = ((390 - _local1.width) / 2);
_local1.y = 200;
addChild(_local1);
addChild(bar);
var _local2:Object = root.loaderInfo.parameters;
new Texts(_local2["lang"]);
}
public function onEnterFrame(_arg1:Event):void{
if (waiting_begin){
if (begin){
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
nextFrame();
init_main();
};
} else {
if (framesLoaded == totalFrames){
text.text = Texts.txt(Texts.CLICK);
text.setTextFormat(font);
text.x = ((390 - text.width) / 2);
waiting_begin = true;
};
};
bar.graphics.clear();
draw_bar(bar.graphics, root.loaderInfo.bytesLoaded, root.loaderInfo.bytesTotal, new Rectangle(20, (loading_bar_y + 45), (390 - 40), 20));
}
private function init_main():void{
var _local2:Object;
var _local1:Class = Class(getDefinitionByName("Today"));
if (_local1){
_local2 = new (_local1);
addChild((_local2 as DisplayObject));
};
}
public function check_domain(_arg1:String):Boolean{
var _local2:String = stage.loaderInfo.url;
var _local3:Number = (_local2.indexOf("://") + 3);
var _local4:Number = _local2.lastIndexOf("/");
var _local5:String = _local2.substring(_local3, _local4);
if ((((_local5.indexOf(_arg1) == -1)) && (!((_local5 == ""))))){
return (false);
};
return (true);
}
private function mouse_down(_arg1:MouseEvent):void{
if (waiting_begin){
begin = true;
stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
};
}
private function init(_arg1:Event):void{
font = create_font(24, 0xFFFFFF);
text = create_text(true);
text.text = "Loading...";
text.width = 390;
text.y = (loading_bar_y = (570 - 90));
text.setTextFormat(font);
text.wordWrap = false;
text.multiline = true;
text.autoSize = TextFieldAutoSize.CENTER;
addChild(text);
instructions = create_text(true);
instructions.width = (390 - 20);
instructions.multiline = true;
instructions.wordWrap = true;
instructions.y = 300;
instructions.x = 10;
instructions.setTextFormat(font);
addChild(instructions);
}
private static function create_text(_arg1:Boolean=true):TextField{
var _local2:TextField = new TextField();
_local2.selectable = false;
_local2.type = TextFieldType.DYNAMIC;
_local2.autoSize = TextFieldAutoSize.LEFT;
_local2.multiline = true;
_local2.wordWrap = true;
_local2.gridFitType = GridFitType.PIXEL;
_local2.embedFonts = _arg1;
return (_local2);
}
private static function draw_bar(_arg1:Graphics, _arg2:Number, _arg3:Number, _arg4:Rectangle):void{
_arg1.beginFill(4026000);
_arg1.drawRect(int(_arg4.x), int(_arg4.y), int(((_arg2 * _arg4.width) / _arg3)), _arg4.height);
_arg1.endFill();
}
private static function create_font(_arg1:Number, _arg2:Number):TextFormat{
var _local3:TextFormat = new TextFormat();
_local3.size = _arg1;
_local3.color = (_arg2 | 4278190080);
_local3.font = "uni 05_54_8pt_st";
return (_local3);
}
}
}//package
Section 61
//Preloader_img (Preloader_img)
package {
import mx.core.*;
public class Preloader_img extends BitmapAsset {
}
}//package
Section 62
//Preloader_img_dead (Preloader_img_dead)
package {
import mx.core.*;
public class Preloader_img_dead extends BitmapAsset {
}
}//package
Section 63
//Preloader_MyFontHolder (Preloader_MyFontHolder)
package {
import mx.core.*;
public class Preloader_MyFontHolder extends SpriteAsset {
}
}//package
Section 64
//Shadow (Shadow)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import utils.*;
public class Shadow extends Fear {
public var stuck_to:Thing;// = null
private var speed:Number;
private var stuck_anchor:Point;
private static var img_shadow:Class = Shadow_img_shadow;
private static var music_triggered:Boolean = false;
public function Shadow(_arg1:Boolean=false){
stuck_anchor = new Point();
super((_arg1) ? null : hitting_colleague, new Point(100, 600), new Animation(new img_shadow().bitmapData, 14, 18));
if (_arg1){
movement.launch_timer.reset_to(0);
};
anim.setFrame(2);
speed = Utils.rand(2, 4);
interactive = true;
z = (Today.she.z + 1);
}
private function hitting_colleague(_arg1:Thing):Boolean{
return ((((((((_arg1 is Shadow)) && (!((_arg1.x == x))))) && (((_arg1 as Shadow).stuck_to == null)))) && (_arg1.collides_with(this))));
}
override public function update(_arg1:Event):void{
var _local2:Bubble;
var _local3:Thing;
super.update(_arg1);
visible = (((poem.filled == Today.word_fear)) && ((((poem.environment == Today.word_struggle)) || ((poem.environment == Today.word_free)))));
if (!visible){
stuck_to = null;
return;
};
if (poem.environment == Today.word_free){
fit_in(world.area);
anim.setFrame(1);
if (collides_with(Today.she, 8)){
stuck_to = null;
world.add(new Explosion(true), x, y);
_local2 = new Bubble();
world.add(_local2, x, y);
_local2.grow_timer.trigger();
Utils.remove(Today.shadows, this);
destroy();
return;
};
};
if (selected){
fit_in(world.area);
};
if (stuck_to != null){
if (((selected) && (!(collides_with(Today.she))))){
stuck_to = null;
} else {
x = (stuck_anchor.x + stuck_to.x);
y = (stuck_anchor.y + stuck_to.y);
};
};
if (!escape()){
if (stuck_to == null){
_local3 = best_target();
if ((((Today.word_free.alpha <= 0.2)) && ((Today.she.velocity < 0)))){
anim.setFrame(2);
flip_towards(Today.she);
};
if (((!((_local3 == null))) && ((((Today.word_free.alpha > 0.2)) || (Today.she.has_weight))))){
anim.setFrame(0);
if (!music_triggered){
music_triggered = true;
Today.background.explosion();
SoundManager.play_struggle();
};
if (movement.chase(this, _local3)){
if (_local3 == Today.she){
stick_to(_local3);
Today.she.on_hit();
poem.shake();
Today.background.explosion();
};
};
movement.update(this, speed);
};
};
} else {
stuck_to = null;
};
x = int(x);
y = int(y);
}
private function stick_to(_arg1:Thing):void{
if (_arg1.visible){
stuck_to = _arg1;
stuck_anchor.x = (x - _arg1.x);
stuck_anchor.y = (y - _arg1.y);
};
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
var _local2:Rectangle = world.area;
_local2.y = Today.POEM_BOTTOM;
_local2.inflate(-8, 0);
_local2.height = ((world.area.height - _local2.y) - area.height);
}
}
}//package
Section 65
//Shadow_img_shadow (Shadow_img_shadow)
package {
import mx.core.*;
public class Shadow_img_shadow extends BitmapAsset {
}
}//package
Section 66
//She (She)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import flash.display.*;
public class She extends Girl {
private var weight_up:Bitmap;
private var initial_y:Number;
private var speed:Number;// = 2
private var weight_down:Bitmap;
private var debug:Array;
private var light:Bitmap;
private var hit_timer:Timer;
public var velocity:Number;// = 0
private var pulse_timer:Timer;
private var stare_timer:Timer;
private var stare_at:Thing;// = null
public var carrying:Bubble;// = null
private var shade:ColorTransform;
private var impulse_timer:Timer;
private var debug_i:int;// = 0
private static var img_weight_up:Class = She_img_weight_up;
private static var img_light:Class = She_img_light;
private static var img_weight_down:Class = She_img_weight_down;
public function She(){
pulse_timer = new Timer(1500);
stare_timer = new Timer(1500);
shade = new ColorTransform(0.7, 0.7, 0.7);
hit_timer = new Timer(300);
impulse_timer = new Timer(500);
debug = [BlendMode.ADD, BlendMode.ALPHA, BlendMode.DARKEN, BlendMode.DIFFERENCE, BlendMode.ERASE, BlendMode.HARDLIGHT, BlendMode.INVERT, BlendMode.LAYER, BlendMode.LIGHTEN, BlendMode.MULTIPLY, BlendMode.OVERLAY, BlendMode.SCREEN, BlendMode.SUBTRACT];
super();
weight_up = attach_bitmap_data(new img_weight_up().bitmapData);
weight_up.visible = false;
weight_down = attach_bitmap_data(new img_weight_down().bitmapData);
weight_down.visible = false;
hit_timer.trigger();
interactive = true;
light = attach_bitmap_data(new img_light().bitmapData);
light.visible = false;
setChildIndex(light, 0);
stare_timer.trigger();
z = 22;
}
private function swim():void{
anim_swimming.play(true);
velocity = -(speed);
}
public function on_hit():void{
var b:Bubble;
hit_timer.reset();
var complete:Array = world.filter(function (_arg1:Thing):Boolean{
return ((((_arg1 is Bubble)) && ((_arg1 as Bubble).grown)));
});
for each (b in complete) {
b.burst();
};
}
public function get has_weight():Boolean{
var me:Thing;
if (hit_timer.running){
return (true);
};
me = this;
var shadows:Array = world.filter(function (_arg1:Thing):Boolean{
return ((((_arg1 is Shadow)) && (((_arg1 as Shadow).stuck_to == me))));
});
return ((shadows.length > 0));
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
}
override public function get area():Rectangle{
var _local1:Animation;
if (((anim_swimming.visible) || (anim_floating.visible))){
_local1 = get_visible_anim();
return (new Rectangle((x - (_local1.strip.frameW / 2)), (y - (_local1.strip.frameH / 2)), _local1.strip.frameW, _local1.strip.frameH));
};
return (super.area);
}
override public function update(_arg1:Event):void{
super.update(_arg1);
pulse_timer.tick(true);
if (y < -80){
visible = false;
return;
};
stare_timer.tick();
if (stare_at != null){
if (((stare_timer.done) || (!(stare_at.visible)))){
stare_at = null;
};
};
light.visible = shining;
hit_timer.tick();
if (poem.epilogue){
update_epilogue();
} else {
if (!Today.boy.rescuing){
fit_in(world.area);
update_ingame();
} else {
update_swimmer();
y = (y - 1);
alpha = 0.2;
get_visible_anim().transform.colorTransform = new ColorTransform(0, 0, 0, 1);
expression.status = Expression.NONE;
};
};
weight_down.visible = false;
weight_up.visible = false;
weight_down.alpha = (weight_up.alpha = Today.word_struggle.alpha);
if (get_visible_anim() == anim_floating){
weight_up.visible = true;
weight_up.x = (anim_floating.x + 5);
weight_up.y = (anim_floating.y + 11);
} else {
if (get_visible_anim() == anim_swimming){
weight_up.visible = true;
weight_up.x = (anim_swimming.x + 2);
weight_up.y = (anim_swimming.y + 14);
} else {
if (get_visible_anim() == anim_sinking){
weight_down.visible = true;
weight_down.x = (anim_sinking.x + 10);
weight_down.y = (anim_sinking.y + 7);
};
};
};
}
private function update_ingame():void{
var _local1:Rectangle;
var _local2:Thing;
if (poem.environment == Today.word_dark){
_local1 = world.area;
_local1.top = Today.POEM_BOTTOM;
_local1.bottom = Today.floor.area.top;
_local1.inflate(-3, 0);
fit_in(_local1);
};
if ((((poem.environment == Today.word_dark)) && (!(shining)))){
shade.redMultiplier = (shade.greenMultiplier = (shade.blueMultiplier = 0.7));
} else {
shade.redMultiplier = (shade.greenMultiplier = (shade.blueMultiplier = 1));
};
transform.colorTransform = shade;
if (poem.action == Today.word_die){
velocity = 0.2;
update_sinking(stare_at);
} else {
if (shining){
if (poem.environment == Today.word_free){
update_swimmer();
swim();
_local2 = world.closest(this, Today.shadows);
if (_local2 != null){
expression.status = Expression.ANGRY;
expression.seekTarget = _local2;
} else {
expression.status = Expression.HAPPY;
};
} else {
velocity = 0;
update_shining();
light.alpha = 1;
if (carrying != null){
expression.status = Expression.DOWN;
};
};
if (((stare_timer.running) && (!((stare_at == null))))){
expression.status = Expression.SEEK;
expression.seekTarget = stare_at;
};
if (Today.boy.is_completely_inside()){
expression.status = Expression.ANGRY;
expression.seekTarget = Today.boy;
};
} else {
if (poem.action == Today.word_swim){
if (has_weight){
velocity = 3;
update_drowning();
expression.status = Expression.SAD_LONELY;
} else {
if (poem.environment == Today.word_dark){
if (area.top <= Today.POEM_BOTTOM){
update_drowning();
} else {
update_swimmer();
y = (y - 2);
};
} else {
update_swimmer();
swim();
if (poem.environment == Today.word_struggle){
expression.status = Expression.FOCUSED_UP;
} else {
if (((stare_timer.running) && (!((stare_at == null))))){
expression.status = Expression.SEEK;
expression.seekTarget = stare_at;
};
};
if (Today.boy.is_completely_inside()){
expression.status = Expression.ANGRY;
expression.seekTarget = Today.boy;
};
};
};
} else {
if (Today.boy.rescuing){
};
};
};
};
if (carrying != null){
carrying.x = x;
carrying.y = (y + 2);
if (((carrying.grown) || (!(shining)))){
carrying.x = (carrying.x + 1);
carrying = null;
} else {
if (((hit_timer.done) && (shining))){
carrying.grow_timer.tick();
};
};
};
}
public function event(_arg1:Thing):void{
if (((!((_arg1 == null))) && (_arg1.is_inside()))){
stare_timer.reset();
stare_at = _arg1;
};
}
private function update_epilogue():void{
alpha = 1;
if (poem.action == Today.word_struggle){
update_swimmer();
} else {
if (poem.action == Today.word_shine){
update_shining();
} else {
if (poem.action == Today.word_dark){
update_float();
anim.stop();
transform.colorTransform = new ColorTransform(0.6, 0.6, 0.6);
} else {
if (poem.action == Today.word_fear){
update_sinking(null, true);
};
};
};
};
if (poem.endings[Today.ENDING_ALONE]){
velocity = 0;
alpha = 0.2;
y = (y - 1);
get_visible_anim().transform.colorTransform = new ColorTransform(0, 0, 0, 1);
expression.status = Expression.NONE;
} else {
if (poem.endings[Today.ENDING_COURAGE]){
y = (y - 1);
expression.status = Expression.ANGRY_UP;
};
};
visible = !((poem.action == Today.word_dark));
}
public function get pulse():Number{
var _local1:Number = ((pulse_timer.ratio - 0.5) * 2);
return (Math.abs(_local1));
}
private function key(_arg1:KeyboardEvent):void{
debug_i++;
debug_i = (debug_i % debug.length);
light.blendMode = debug[debug_i];
trace(("blend: " + debug_i));
}
public function get shining():Boolean{
return ((((poem.action == Today.word_shine)) || ((poem.environment == Today.word_free))));
}
}
}//package
Section 67
//She_img_light (She_img_light)
package {
import mx.core.*;
public class She_img_light extends BitmapAsset {
}
}//package
Section 68
//She_img_weight_down (She_img_weight_down)
package {
import mx.core.*;
public class She_img_weight_down extends BitmapAsset {
}
}//package
Section 69
//She_img_weight_up (She_img_weight_up)
package {
import mx.core.*;
public class She_img_weight_up extends BitmapAsset {
}
}//package
Section 70
//SoundManager (SoundManager)
package {
import flash.events.*;
import mx.core.*;
import flash.media.*;
public class SoundManager {
private static var loaded:Boolean = false;
private static var music_sound_asset_happy:SoundAsset;
public static var ending_finished:Boolean = false;
private static var music_data_change:Class = SoundManager_music_data_change;
private static var music_data_dark:Class = SoundManager_music_data_dark;
public static var on:Boolean = true;
private static var music_sound_asset_hostile:SoundAsset;
private static var music_data_happy:Class = SoundManager_music_data_happy;
private static var music_sound_asset_dark:SoundAsset;
private static var music_sound_asset_change:SoundAsset;
private static var current:SoundChannel;
private static var music_data_hostile:Class = SoundManager_music_data_hostile;
public static function play_change_words():void{
if (!on){
return;
};
music_sound_asset_change.play();
}
private static function on_complete(_arg1:Event):void{
if (current != null){
current.stop();
};
}
private static function load():void{
if (current != null){
current.stop();
};
if (!loaded){
music_sound_asset_dark = (new music_data_dark() as SoundAsset);
music_sound_asset_hostile = (new music_data_hostile() as SoundAsset);
music_sound_asset_happy = (new music_data_happy() as SoundAsset);
music_sound_asset_change = (new music_data_change() as SoundAsset);
loaded = true;
};
}
public static function play_intro():void{
if (!on){
return;
};
load();
current = music_sound_asset_dark.play(30, 99);
}
public static function play_ending():void{
ending_finished = false;
if (!on){
return;
};
load();
current = music_sound_asset_happy.play(0);
current.addEventListener(Event.SOUND_COMPLETE, ending_over);
}
public static function ending_over(_arg1:Event):void{
ending_finished = true;
}
public static function play_struggle():void{
if (!on){
return;
};
load();
current = music_sound_asset_hostile.play(0, 99);
}
}
}//package
Section 71
//SoundManager_music_data_change (SoundManager_music_data_change)
package {
import mx.core.*;
public class SoundManager_music_data_change extends SoundAsset {
}
}//package
Section 72
//SoundManager_music_data_dark (SoundManager_music_data_dark)
package {
import mx.core.*;
public class SoundManager_music_data_dark extends SoundAsset {
}
}//package
Section 73
//SoundManager_music_data_happy (SoundManager_music_data_happy)
package {
import mx.core.*;
public class SoundManager_music_data_happy extends SoundAsset {
}
}//package
Section 74
//SoundManager_music_data_hostile (SoundManager_music_data_hostile)
package {
import mx.core.*;
public class SoundManager_music_data_hostile extends SoundAsset {
}
}//package
Section 75
//Statue (Statue)
package {
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Statue extends Thing {
private var swim_delivered:Boolean;// = false
private var initial_x:Number;
private static var img:Class = Statue_img;
public function Statue(){
super(new img().bitmapData, Number.NEGATIVE_INFINITY, 0);
visible = false;
interactive = true;
rotation = 20;
z = 2;
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
x = 70;
y = (world.area.height - 20);
initial_x = x;
}
private function get poem():Today{
return ((world as Today));
}
override public function update(_arg1:Event):void{
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Rectangle;
super.update(_arg1);
visible = (poem.environment == Today.word_dark);
if (visible){
Today.word_swim.visible = true;
if (((Today.word_swim.is_on_poem()) || (Today.word_swim.user_placed))){
swim_delivered = true;
};
if (Today.she.shining){
_local2 = 35;
_local3 = 80;
_local4 = Today.she.distance_point(x, (area.top + (area.height / 2)));
_local5 = ((_local4 - _local2) / (_local3 - _local2));
_local5 = (1 - Math.max(0, Math.min(1, _local5)));
interactive = (_local5 > 0.6);
transform.colorTransform = new ColorTransform(_local5, _local5, _local5);
if (rotation != 0){
if ((y + area.height) < Today.floor.area.top){
rotation = 0;
};
x = initial_x;
} else {
z = 7;
_local6 = world.area;
_local6.top = Today.POEM_BOTTOM;
_local6.bottom = Today.floor.area.top;
_local6.inflate(-3, 0);
fit_in(_local6);
if (((((y + area.height) < Today.floor.area.top)) && (!(selected)))){
y = (y + 1);
};
if (!swim_delivered){
Today.word_swim.alpha = _local5;
poem.place_word(Today.word_swim, this);
Today.she.event(this);
};
};
} else {
interactive = false;
transform.colorTransform = new ColorTransform(0.1, 0.1, 0.1);
};
};
}
override public function get area():Rectangle{
var _local1:Rectangle = super.area;
_local1.inflate(5, 0);
return (_local1);
}
}
}//package
Section 76
//Statue_img (Statue_img)
package {
import mx.core.*;
public class Statue_img extends BitmapAsset {
}
}//package
Section 77
//Tail (Tail)
package {
import flash.events.*;
import moonlib2.*;
public class Tail extends Animated {
private static var img:Class = Tail_img;
public function Tail(_arg1:Fish){
super(new Animation(new img().bitmapData));
interactive = true;
visible = true;
rotation = 315;
z = 2;
}
override public function update(_arg1:Event):void{
super.update(_arg1);
visible = (Today.main.environment == Today.word_death);
y = (y + 1);
destroy_if_shown();
}
}
}//package
Section 78
//Tail_img (Tail_img)
package {
import mx.core.*;
public class Tail_img extends BitmapAsset {
}
}//package
Section 79
//Texts (Texts)
package {
import flash.utils.*;
public class Texts {
private var text_file:Class;
public static const PAINFUL:int = 6;
public static const SHINE:int = 7;
public static const SWIM:int = 8;
public static const DIE:int = 5;
public static const DEAD:int = 1;
public static const LINE_2:int = 10;
public static const LINE_3:int = 11;
public static const SHADES:int = 3;
public static const CLICK:int = 14;
public static const FREE:int = 4;
public static const LINE_1:int = 9;
public static const DARK:int = 0;
public static const BEAUTY:int = 2;
public static const UNTIL:int = 12;
public static const MYSELF:int = 13;
private static var texts:Dictionary = new Dictionary();
public static var selected:String;
public function Texts(_arg1:String){
var _local4:String;
var _local5:Array;
text_file = Texts_text_file;
super();
Texts.selected = _arg1;
if ((((Texts.selected == null)) || ((Texts.selected.length == 0)))){
Texts.selected = "en";
};
var _local2:String = new text_file();
var _local3:Array = _local2.split("-");
for each (_local4 in _local3) {
if (_local4.length > 0){
_local5 = _local4.split("\r\n");
texts[_local5[0]] = _local5.splice(1, (_local5.length - 1));
};
};
if (texts[Texts.selected] == null){
_arg1 = "en";
};
}
public static function txt(_arg1:int):String{
return (texts[selected][_arg1]);
}
}
}//package
Section 80
//Texts_text_file (Texts_text_file)
package {
import mx.core.*;
public class Texts_text_file extends ByteArrayAsset {
}
}//package
Section 81
//Today (Today)
package {
import flash.text.*;
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
import utils.*;
import mx.utils.*;
public class Today extends Game {
public var interactive_words:Array;
public var freedom_timer:Timer;
public var lights:Array;
private var bubble_spawn_freedom_timer:Timer;
public var endings:Array;
private var pending_exchange:Array;
private var endgame_timer:Timer;
private var bubble_spawn_struggle_timer:Timer;
private var shake_timer:Timer;
private var hyperlink:Hyperlink;
private var poem:Array;
private var light_mask:Thing;
public var epilogue:Boolean;// = false
public static const POEM_BOTTOM:Number = 50;
public static const ENDINGS:int = 3;
public static const ENDING_COURAGE:int = 2;
public static const ENDING_ALONE:int = 1;
public static const ENDING_RESCUE:int = 0;
private static const SHADOWS:int = 5;
public static const ACTION:int = 2;
private static const LINE_HEIGHT:Number = 13;
public static const FILLED:int = 1;
public static const FREE:int = 3;
public static const ENVIRONMENT:int = 0;
private static var font_asset:Class = Today_font_asset;
public static var word_free:Word;
public static var word_dark:Word;
public static var floor:Floor;
public static var word_swim:Word;
public static var background:Background;
public static var she:She;
public static var main:Today;
public static var fixed_font:TextFormat;
public static var word_fear:Word;
public static var word_die:Word;
public static var boy:Boy;
public static var word_beauty:Word;
public static var word_struggle:Word;
public static var shadows:Array = [];
public static var noun_font:TextFormat;
public static var adjective_font:TextFormat;
public static var verb_font:TextFormat;
public static var word_shine:Word;
public static var word_death:Word;
public function Today(){
endgame_timer = new Timer(5000);
interactive_words = new Array();
poem = new Array();
endings = [false, false, false];
bubble_spawn_struggle_timer = new Timer(2000);
bubble_spawn_freedom_timer = new Timer(500);
freedom_timer = new Timer(12000);
shake_timer = new Timer(800);
lights = [];
pending_exchange = [];
super(3, 390, 570);
visible = false;
}
public function shake():void{
shake_timer.reset();
}
override public function init(_arg1:Event):void{
var _local3:Word;
var _local4:Array;
var _local5:Word;
super.init(_arg1);
main = this;
MochiBot.track(this, "836a893f");
fixed_font = new TextFormat(new font_asset().fontName, 10, 0xEBEBEB);
adjective_font = new TextFormat(new font_asset().fontName, 10, 1039713);
noun_font = new TextFormat(new font_asset().fontName, 10, 0xFF00);
verb_font = new TextFormat(new font_asset().fontName, 10, 14539535);
add((background = new Background()), 0, 0);
add((she = new She()), (area.width / 2), 126);
light_mask = new Thing();
light_mask.z = 19;
light_mask.graphics.beginFill(4278190080, 0.5);
light_mask.graphics.drawRect(-(area.width), -(area.height), (area.width * 2), (area.height * 2));
light_mask.graphics.drawCircle(0, 0, 50);
light_mask.graphics.endFill();
light_mask.visible = false;
add(light_mask);
add(new Statue());
add((boy = new Boy()), -100, 70);
add((floor = new Floor()));
add(new Pirana(false), 64, 160);
add(new Pirana(false), 99, 150);
add(new Darkness(), 26, 174);
add(new Darkness(), 30, 167);
add(new Darkness(), 55, 166);
add(new Darkness(), 60, 178);
add(new Darkness(), 67, 154);
add(new Darkness(), 87, 176);
add(new Darkness(), 80, 165);
add(new Shadow(), 45, 102);
add(new Shadow(), 25, 132);
add(new Shadow(), 50, 161);
(add(new Shadow(), 95, 109) as Shadow).flip_towards(she);
(add(new Shadow(), 89, 159) as Shadow).flip_towards(she);
shadows = count(Shadow, true);
add_multiple(Fish, 10);
word_dark = new Word(Texts.txt(Texts.DARK), ENVIRONMENT, 6, 76);
word_death = new Word(Texts.txt(Texts.DEAD), ENVIRONMENT, 1, 76);
word_beauty = new Word(Texts.txt(Texts.BEAUTY), FILLED, 3, 98);
word_fear = new Word(Texts.txt(Texts.SHADES), FILLED, 7, 110);
word_free = new Word(Texts.txt(Texts.FREE), ENVIRONMENT, 5, 65);
word_die = new Word(Texts.txt(Texts.DIE), ACTION, 0, 52);
word_struggle = new Word(Texts.txt(Texts.PAINFUL), ENVIRONMENT, 2, 93);
word_shine = new Word(Texts.txt(Texts.SHINE), ACTION, 9, 80);
word_swim = new Word(Texts.txt(Texts.SWIM), ACTION, 4, 81);
interactive_words.push(word_dark);
interactive_words.push(word_fear);
interactive_words.push(word_death);
interactive_words.push(word_free);
interactive_words.push(word_die);
interactive_words.push(word_struggle);
interactive_words.push(word_shine);
interactive_words.push(word_beauty);
interactive_words.push(word_swim);
var _local2:Number = 50;
for each (_local3 in interactive_words) {
add(_local3, (area.width / 2), _local2);
_local3.alpha = 0;
_local3.update(_arg1);
_local2 = (_local2 + LINE_HEIGHT);
};
word_dark.alpha = 1;
word_death.alpha = 1;
word_struggle.alpha = 1;
word_free.x = int(((area.width - word_free.area.width) / 2));
word_free.y = (POEM_BOTTOM + 15);
word_beauty.x = word_free.x;
word_beauty.y = word_free.area.bottom;
word_dark.x = 13;
word_dark.y = 63;
word_struggle.x = 75;
word_struggle.y = 63;
word_shine.x = 88;
word_shine.y = 50;
word_swim.x = 88;
word_swim.y = 62;
add_line(Texts.txt(Texts.LINE_1), 3, word_death);
add_line(Texts.txt(Texts.LINE_2), 1, word_fear);
add_line(Texts.txt(Texts.LINE_3), 4, word_die);
for each (_local4 in poem) {
for each (_local5 in _local4) {
if (_local5.fixed){
add(_local5);
};
};
};
adjust_poem();
shake_timer.trigger();
visible = true;
SoundManager.play_intro();
hyperlink = new Hyperlink(create_font(8, 0xFFFFFF), "click", "http://www.ludomancy.com/blog/downloads/");
hyperlink.visible = false;
add(hyperlink);
hyperlink.x = ((area.width - hyperlink.area.width) - 11);
hyperlink.y = ((area.height - hyperlink.height) - 10);
}
public function get environment():Word{
return (get_word_for_type(ENVIRONMENT));
}
private function must_be_forgotten(_arg1:Word):Boolean{
if ((((((((((((((((_arg1 == word_die)) || ((((((_arg1 == word_dark)) && (word_swim.is_available()))) && (word_swim.user_placed))))) || ((((_arg1 == word_death)) && (word_shine.is_available()))))) || ((((_arg1 == word_fear)) && (word_beauty.is_on_poem()))))) || ((((_arg1 == word_struggle)) && (word_free.is_on_poem()))))) || ((((_arg1 == word_shine)) && (word_free.is_on_poem()))))) || ((((_arg1 == word_swim)) && (word_beauty.is_on_poem()))))) || ((((_arg1 == word_shine)) && (word_beauty.is_on_poem()))))){
return (true);
};
return (false);
}
public function adjust_poem():void{
if (Texts.selected == "en"){
adjust_poem_images();
} else {
adjust_poem_text();
};
}
public function on_word_arrived(_arg1:Word):void{
if ((((pending_exchange.length > 0)) && (!((pending_exchange.indexOf(_arg1) == -1))))){
exchange(pending_exchange[0], pending_exchange[1]);
pending_exchange = [];
};
}
private function adjust_poem_images():void{
var _local6:Number;
var _local7:int;
var _local8:Word;
var _local1:Number = 30;
var _local2:int;
var _local3 = 11;
var _local4:Array = [0, 47, 38];
var _local5:int;
while (_local5 != poem.length) {
_local6 = _local1;
_local2 = _local6;
_local7 = 0;
while (_local7 != poem[_local5].length) {
_local8 = poem[_local5][_local7];
if (_local8.fixed){
_local8.x = _local2;
_local2 = (_local2 + (_local8.area.width - _local4[_local5]));
_local8.y = _local3;
} else {
_local8.x = _local2;
_local2 = ((_local8 == word_free)) ? (_local6 - 7) : _local6;
_local8.y = (_local3 - 1);
};
_local8.starting_pos.x = _local8.x;
_local8.starting_pos.y = _local8.y;
_local7++;
};
_local3 = (_local3 + LINE_HEIGHT);
_local5++;
};
}
private function spawn_bubbles(_arg1:Timer):void{
var _local3:Bubble;
var _local4:Number;
var _local2:Number = ((environment == word_free)) ? 8 : 5;
_arg1.tick();
if (_arg1.done){
_arg1.reset();
if (count(Bubble).length < _local2){
_local3 = new Bubble();
_local4 = Utils.rand(20, (area.width - 20));
add(_local3, _local4, (area.height + 10));
};
};
}
public function get_word_type(_arg1:Word):int{
var _local3:int;
var _local2:int;
while (_local2 != poem.length) {
_local3 = 0;
while (_local3 != poem[_local2].length) {
if (poem[_local2][_local3] == _arg1){
return (_local2);
};
_local3++;
};
_local2++;
};
return (FREE);
}
public function exchange(_arg1:Word, _arg2:Word):void{
var _local6:int;
var _local7:Point;
if (_arg1 == _arg2){
return;
};
SoundManager.play_change_words();
var _local3:Word = (_arg1.is_on_poem()) ? _arg2 : _arg1;
var _local4:Word = (_arg1.is_on_poem()) ? _arg1 : _arg2;
var _local5:int;
while (_local5 != poem.length) {
_local6 = 0;
while (_local6 != poem[_local5].length) {
if (poem[_local5][_local6] == _local4){
poem[_local5][_local6] = _local3;
};
_local6++;
};
_local5++;
};
if (_local3 == word_free){
SoundManager.play_ending();
};
if (must_be_forgotten(_local4)){
_local4.fade_out();
} else {
_local7 = new Point(((_local3.starting_pos.x + (_local3.area.width / 2)) - (_local4.area.width / 2)), ((_local3.starting_pos.y + (_local3.area.height / 2)) - (_local4.area.height / 2)));
_local4.starting_pos.x = (_local4.x = _local7.x);
_local4.starting_pos.y = (_local4.y = _local7.y);
};
adjust_poem();
}
public function beacon_completeness(_arg1:Boolean=false):Number{
var include_pulsating = _arg1;
var complete:Array = filter(function (_arg1:Thing):Boolean{
return ((((((((_arg1 is Bubble)) && (((_arg1 as Bubble).original_enviro == Today.word_free)))) && ((_arg1 as Bubble).grown))) && (((!(include_pulsating)) || (!(((_arg1 as Bubble).stuck_to == null)))))));
});
var pulse:Number = complete.length;
return (Math.min(1, (pulse / (SHADOWS - 1))));
}
private function update_epilogue():void{
var _local1:Word;
for each (_local1 in interactive_words) {
_local1.interactive = false;
};
}
public function is_on_poem(_arg1:Word):Boolean{
return (!((get_word_type(_arg1) == FREE)));
}
public function discovered_endings():int{
var _local2:Boolean;
var _local1:int;
for each (_local2 in endings) {
if (_local2){
_local1++;
};
};
return (_local1);
}
public function get action():Word{
return (get_word_for_type(ACTION));
}
public function place_word(_arg1:Word, _arg2:Thing):void{
if (((((!((_arg2 == null))) && (!(_arg1.selected)))) && (!(_arg1.user_placed)))){
_arg1.x = (_arg2.x - (_arg1.area.width / 2));
if (Texts.selected == "en"){
_arg1.y = ((_arg2.area.top - _arg1.area.height) + 5);
} else {
_arg1.y = (_arg2.area.top - _arg1.area.height);
};
if (_arg2 == she){
_arg1.y = (_arg1.y - 5);
};
_arg1.fit_in(area);
};
}
override public function update(_arg1:Event):void{
var _local2:Word;
super.update(_arg1);
shake_timer.tick();
if (shake_timer.running){
y = Utils.rand(-1, 1);
x = Utils.rand(-1, 1);
} else {
x = 0;
y = 0;
};
check_endings();
for each (_local2 in interactive_words) {
if (((!(_local2.is_on_poem())) && (must_be_forgotten(_local2)))){
_local2.fade_out();
};
};
light_mask.visible = false;
if (epilogue){
Today.she.visible = false;
update_epilogue();
endgame_timer.tick();
if (endgame_timer.done){
hyperlink.visible = true;
};
} else {
if (environment == word_dark){
if (action == word_shine){
light_mask.visible = true;
light_mask.x = she.x;
light_mask.y = she.y;
};
} else {
if (environment == word_death){
} else {
if (environment == word_free){
if (!word_beauty.is_available()){
word_beauty.alpha = beacon_completeness();
};
} else {
if (environment == word_struggle){
if (word_swim.is_available()){
if (!word_swim.user_placed){
word_swim.visible = false;
} else {
word_swim.visible = true;
};
};
word_free.alpha = freedom_timer.ratio;
if (!word_free.user_placed){
place_word(word_free, she);
};
if (!she.has_weight){
if (action == Today.word_shine){
spawn_bubbles(bubble_spawn_struggle_timer);
};
if (she.velocity < 0){
freedom_timer.tick();
} else {
word_free.alpha = 0;
};
} else {
freedom_timer.tick_back((Game.frame_time * 6));
};
};
};
};
};
};
}
private function add_line(_arg1:String, _arg2:int, _arg3:Word):void{
var _local6:String;
var _local4:Array = [];
var _local5:Array = _arg1.split("*");
for each (_local6 in _local5) {
if (StringUtil.trim(_local6) != ""){
_local4.push(new Word(_local6, -1, _arg2));
} else {
_local4.push(_arg3);
};
};
poem.push(_local4);
}
private function adjust_poem_text():void{
var _local5:int;
var _local6:Word;
var _local1:Number = 18;
var _local2:int;
var _local3 = 7;
var _local4:int;
while (_local4 != poem.length) {
_local2 = _local1;
_local5 = 0;
while (_local5 != poem[_local4].length) {
_local6 = poem[_local4][_local5];
_local6.reinterpret();
_local6.x = _local2;
_local6.y = _local3;
_local6.starting_pos.x = _local6.x;
_local6.starting_pos.y = _local6.y;
_local2 = (_local2 + _local6.area.width);
_local5++;
};
_local3 = (_local3 + LINE_HEIGHT);
_local4++;
};
}
public function get_word_for_type(_arg1:int):Word{
var _local2:int;
while (_local2 != poem[_arg1].length) {
if (!poem[_arg1][_local2].fixed){
return (poem[_arg1][_local2]);
};
_local2++;
};
return (null);
}
public function get velocity():Number{
if (epilogue){
return (-1);
};
return (she.velocity);
}
public function get filled():Word{
return (get_word_for_type(FILLED));
}
private function add_multiple(_arg1:Class, _arg2:int, _arg3:Array=null):void{
var _local5:Thing;
var _local4:int;
while (_local4 != _arg2) {
_local5 = new (_arg1);
add(_local5);
if (_arg3){
_arg3.push(_local5);
};
_local4++;
};
}
public function ensure_multiple(_arg1:Class, _arg2:int):void{
var _local3:int = (_arg2 - count(_arg1, true).length);
add_multiple(_arg1, _local3);
}
private function check_endings():void{
var _local2:Word;
if (epilogue){
return;
};
var _local1 = "";
if ((((she.y < -40)) && (boy.rescuing))){
epilogue = true;
endings[ENDING_RESCUE] = true;
_local1 = "The End";
_local2 = new Word(Texts.txt(Texts.UNTIL), -1, 0);
} else {
if (((boy.tired_of_waiting.done) && (!(boy.alive)))){
epilogue = true;
endings[ENDING_ALONE] = true;
_local1 = "The End";
_local2 = new Word(Texts.txt(Texts.MYSELF), -1, 2);
};
};
if (_local1 != ""){
add(_local2);
poem.push([_local2]);
adjust_poem();
};
}
public function get fears_visible():Boolean{
return ((((environment == word_fear)) && (!(word_dark.is_available()))));
}
}
}//package
Section 82
//Today_font_asset (Today_font_asset)
package {
import mx.core.*;
public class Today_font_asset extends FontAsset {
}
}//package
Section 83
//Whirlwind (Whirlwind)
package {
import flash.events.*;
import moonlib2.*;
import flash.display.*;
import utils.*;
public class Whirlwind extends Thing {
private var speed:Number;
private var dir:Number;
private var rot_speed:Number;
private static var img:Class = Whirlwind_img;
private static var bitmap:BitmapData;
public function Whirlwind(){
super(((bitmap == null)) ? bitmap = new img().bitmapData : bitmap);
dir = (Utils.rand(-30, 30) / 100);
speed = (Utils.rand(50, 150) / 100);
z = 3;
alpha = 0.3;
visible = !(Today.main.epilogue);
}
override public function update(_arg1:Event):void{
super.update(_arg1);
y = (y - (speed + Today.main.velocity));
x = (x + dir);
destroy_if_shown();
if (y > (world.area.height + 40)){
destroy();
};
}
}
}//package
Section 84
//Whirlwind_img (Whirlwind_img)
package {
import mx.core.*;
public class Whirlwind_img extends BitmapAsset {
}
}//package
Section 85
//Word (Word)
package {
import flash.text.*;
import flash.events.*;
import moonlib2.*;
import flash.geom.*;
public class Word extends Animated {
private var destination_x:Number;// = 0
private var destination_y:Number;// = 0
private var def_width:Number;
private var initial_rotation:Number;// = 0
private var hover_rotation:Number;// = 0
public var user_placed:Boolean;// = false
private var fading:Boolean;// = false
private var the_text:String;
private var hovering_offset_y:Number;// = 0
private var fade_timer:Timer;
private var initial_frame:int;
private var font:TextFormat;// = null
public var type:int;
public var starting_pos:Point;
private var hovered:Boolean;// = false
private var destinating:Boolean;// = false
public var fixed:Boolean;
public var field:TextField;
private static const ANIM_SPEED:Number = 3;
private static var img_fixed:Class = Word_img_fixed;
private static var img_moving:Class = Word_img_moving;
public function Word(_arg1:String, _arg2:int, _arg3:int, _arg4:Number=-1){
starting_pos = new Point();
fade_timer = new Timer(1500);
super(create_animation(_arg2), 0, 0);
this.type = _arg2;
this.the_text = _arg1;
if (!is_img){
if (_arg2 == Today.ACTION){
font = Today.verb_font;
} else {
if (_arg2 == Today.FILLED){
font = Today.noun_font;
} else {
if (_arg2 == Today.ENVIRONMENT){
font = Today.adjective_font;
} else {
font = Today.fixed_font;
};
};
};
};
this.fixed = (_arg2 == -1);
solid = false;
initial_frame = _arg3;
interactive = !(fixed);
if (is_img){
scaleX = (scaleY = (1 / 3));
this.def_width = (_arg4 / 3);
if (_arg4 == -1){
this.def_width = (anim.strip.frameW / 3);
};
if (fixed){
anim.setFrame((initial_frame * 2));
} else {
anim.setFrame(int(_arg3));
};
} else {
field = create_text(_arg1);
addChild(field);
};
z = (fixed) ? 19 : 20;
}
private function create_animation(_arg1:int):Animation{
if (!is_img){
return (null);
};
if (_arg1 == -1){
return (new Animation(new img_fixed().bitmapData, 250, 50, 0, true));
};
return (new Animation(new img_moving().bitmapData, 125, 50, 0, true));
}
public function is_only_word_of_its_type():Boolean{
var _local1:Word;
for each (_local1 in sea.interactive_words) {
if (((((!((_local1 == this))) && ((_local1.alpha == 1)))) && ((_local1.type == type)))){
return (false);
};
};
return (true);
}
public function fade_out():void{
fading = true;
fade_timer.ratio = (1 - alpha);
}
override public function get area():Rectangle{
var _local1:Rectangle;
if (is_img){
_local1 = super.area;
_local1.width = def_width;
_local1.height = (44 / 3);
return (_local1);
};
return (new Rectangle(x, (y + 5), (field.textWidth + 3), (field.textHeight - 5)));
}
private function update_animation():void{
if (!destinating){
return;
};
if (((selected) || ((Math.abs((y - destination_y)) < ANIM_SPEED)))){
destinating = false;
return;
};
var _local1:Point = direction_towards(destination_x, destination_y, ANIM_SPEED);
x = (x + _local1.x);
y = (y + _local1.y);
}
override protected function init(_arg1:Event):void{
super.init(_arg1);
starting_pos.x = x;
starting_pos.y = y;
if (is_on_poem()){
visible = true;
alpha = 1;
};
reinterpret();
}
public function stop_fade_out():void{
fading = false;
y = starting_pos.y;
}
private function get is_img():Boolean{
return ((Texts.selected == "en"));
}
public function reinterpret():void{
if (!is_img){
if (((!(fixed)) && (!((field.text == the_text))))){
field.text = the_text;
field.setTextFormat(font);
field.cacheAsBitmap = true;
};
};
}
public function is_on_poem():Boolean{
return (sea.is_on_poem(this));
}
public function get sea():Today{
return ((world as Today));
}
override public function update(_arg1:Event):void{
super.update(_arg1);
rotation = initial_rotation;
if (fading){
if (alpha == 0){
fading = false;
} else {
fade_timer.tick();
alpha = Math.max(0, (1 - fade_timer.ratio));
};
};
fit_in(world.area);
if (is_on_poem()){
visible = true;
alpha = 1;
rotation = 0;
} else {
if (((((((!(selected)) && (!(destinating)))) && (!(fixed)))) && (!(fading)))){
y = Math.max(Today.POEM_BOTTOM, y);
starting_pos.y = y;
};
update_animation();
};
if (fading){
if (is_img){
anim.setFrame(((initial_frame * 2) + 1));
} else {
field.setTextFormat(Today.fixed_font);
};
y = (y + 1);
} else {
if (fixed){
if (is_img){
anim.setFrame(initial_frame);
};
} else {
if (!interactive){
if (is_img){
anim.setFrame(((initial_frame * 2) + 1));
} else {
field.setTextFormat(Today.fixed_font);
};
} else {
if (is_img){
anim.setFrame((initial_frame * 2));
} else {
field.setTextFormat(font);
};
};
};
};
hover_rotation = 0;
if (hovering_offset_y != 0){
if (is_img){
anim.y = (anim.y - hovering_offset_y);
} else {
field.y = (field.y - hovering_offset_y);
};
hovering_offset_y = 0;
};
if (selected){
user_placed = true;
z = 22;
} else {
if (((!((world.dragging == null))) && ((world.dragging is Word)))){
z = 21;
if ((world.dragging as Word).is_over_interactive_word() == this){
hover_rotation = -12;
if (hovering_offset_y == 0){
hovering_offset_y = (-(area.height) / 2);
};
};
};
};
if (fixed){
z = 20;
};
if (selected){
rotation = 0;
};
rotation = (rotation + hover_rotation);
if (is_img){
anim.y = (anim.y + hovering_offset_y);
} else {
field.y = (field.y + hovering_offset_y);
};
x = int(x);
y = int(y);
}
override public function on_drop():void{
if (new Rectangle(starting_pos.x, (starting_pos.y + 5), area.width, area.height).contains((stage.mouseX / world.scaleX), (stage.mouseY / world.scaleY))){
sea.adjust_poem();
return;
};
var _local1:Word = is_over_interactive_word();
if ((((_local1 == null)) || ((_local1 == this)))){
if (is_on_poem()){
sea.adjust_poem();
} else {
starting_pos.x = x;
starting_pos.y = y;
reinterpret();
};
} else {
if (((is_on_poem()) || (_local1.is_on_poem()))){
sea.exchange(this, _local1);
};
};
}
override public function get interactive():Boolean{
var _local1:Word;
if (((((((super.interactive) && ((alpha == 1)))) && (visible))) && (!(fixed)))){
if (is_only_word_of_its_type()){
return (false);
};
if ((((world.dragging == null)) || (!((world.dragging is Word))))){
return (true);
};
_local1 = (world.dragging as Word);
return ((type == _local1.type));
};
return (false);
}
public function is_available():Boolean{
return ((alpha == 1));
}
private function is_over_interactive_word():Word{
var mouse:Point;
var me:Word;
var mostOverlapping:Word;
var biggestArea:Number;
var i:int;
var word_area:Number;
var overlap:Rectangle;
var amount:Number;
mouse = new Point((stage.mouseX / world.scaleX), (stage.mouseY / world.scaleY));
me = this;
var cols:Array = world.filter(function (_arg1:Thing):Boolean{
return ((((((((((((_arg1 is Word)) && (!((_arg1 == me))))) && (_arg1.interactive))) && ((_arg1 as Word).interactive))) && ((sea.get_word_type((_arg1 as Word)) == sea.get_word_type(me))))) && (_arg1.area.containsPoint(mouse))));
});
if (cols.length > 0){
return ((cols[0] as Word));
};
cols = world.filter(function (_arg1:Thing):Boolean{
return ((((((((_arg1 is Word)) && (!((_arg1 == me))))) && (_arg1.interactive))) && ((_arg1 as Word).interactive)));
});
mostOverlapping = null;
biggestArea = 0;
i = 0;
while (i != cols.length) {
word_area = Math.min((area.width * area.height), (cols[i].area.width * cols[i].area.height));
overlap = area.intersection(cols[i].area);
amount = (overlap.height * overlap.width);
if ((((amount > (word_area / 2))) && ((amount > biggestArea)))){
mostOverlapping = cols[i];
biggestArea = amount;
};
i = (i + 1);
};
return (mostOverlapping);
}
public function animate_towards(_arg1:Number, _arg2:Number):void{
destinating = true;
destination_x = _arg1;
destination_y = _arg2;
}
public static function create_text(_arg1:String):TextField{
var _local2:TextField;
_local2 = new TextField();
_local2.selectable = false;
_local2.type = TextFieldType.DYNAMIC;
_local2.autoSize = TextFieldAutoSize.LEFT;
_local2.multiline = true;
_local2.wordWrap = true;
_local2.antiAliasType = AntiAliasType.ADVANCED;
_local2.embedFonts = true;
_local2.gridFitType = GridFitType.PIXEL;
_local2.text = _arg1;
_local2.htmlText.replace(_local2.text, _arg1);
_local2.setTextFormat(Today.fixed_font);
return (_local2);
}
}
}//package
Section 86
//Word_img_fixed (Word_img_fixed)
package {
import mx.core.*;
public class Word_img_fixed extends BitmapAsset {
}
}//package
Section 87
//Word_img_moving (Word_img_moving)
package {
import mx.core.*;
public class Word_img_moving extends BitmapAsset {
}
}//package