Quasi-3D Sandbox

by hemingway
propagating, organizing and rewriting nearly all of this to accommodate for future revisions and additions

disassembled algorithm written by Brandel & Aidan; I think Aidan did most of the work (the Quasi-3D part)

credit: 
Brandel Zachernuk
Aidan Fraser

♥0 | Line 202 | Modified 2012-12-06 08:25:08 | MIT License
play

ActionScript3 source code

/**
 * Copyright hemingway ( http://wonderfl.net/user/hemingway )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/b8gz
 */

package 
{
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    
    [SWF(frameRate = 60)]
    public class Main extends Sprite
    {
        public var t     :int = 0;//---------?
        public var lastX :int;//-------------?
        public var lastY :int;//-------------?
        public var curBMP  :Bitmap;//--------?
        public var pageBMD :BitmapData;//----?
        public var pageBMP :Bitmap;//--------?
        public var curBMD  :BitmapData;//----?
        public var viewBMD :BitmapData;//----?
        
        protected var mouseDown:Boolean = false;

        public function Main()
        {
            addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        }

        private function _init() : void
        {
            var loc_2:* = 0;
            var loc_3:* = 0;
            var loc_4:* = 0;

            pageBMD = new BitmapData(stage.stageWidth >> 2, stage.stageHeight >> 2, false, 0);//--?
            viewBMD = new BitmapData(pageBMD.width, pageBMD.height, false, 0);//------------------?
            curBMD  = new BitmapData(pageBMD.width, pageBMD.height, true, 0);//-------------------?
            pageBMP = new Bitmap(viewBMD, "auto", false);
            curBMP  = new Bitmap(curBMD, "auto", false);
            
            pageBMP.scaleX = 1 << 2;
            pageBMP.scaleY = 1 << 2;
            
            var loc_5:* = pageBMP.scaleX;
            curBMP.scaleY = pageBMP.scaleX;
            curBMP.scaleX = loc_5;
            addChild(pageBMP);
            addChild(curBMP);
            addEventListener(Event.ENTER_FRAME, this.think);
            
            while (loc_2 < 10000)
            {
                
                loc_3 = int(Math.random() * pageBMD.width);
                loc_4 = int(Math.random() * pageBMD.height);
                pageBMD.setPixel32(loc_3, loc_4, int(Math.random() * 200));
                loc_2 = (loc_2 + 1);
            }

            stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);
            stage.addEventListener(MouseEvent.MOUSE_UP, mouseHandler);
        }
        
        private function addedToStage($e:Event) :void
        {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
            
            _init();
        }

        protected function mouseHandler($e:MouseEvent) :void
        {
            if   ($e.type == MouseEvent.MOUSE_DOWN)
                 {mouseDown = true;}
            else {mouseDown = false;}
        }

        public function think(param1:uint) : void
        {
            var loc_5:*  = 0;
            var loc_6:*  = 0;
            var loc_7:*  = 0;
            var loc_8:*  = 0;
            var loc_9:*  = 0;
            var loc_10:* = 0;
            var loc_11:* = 0;
            var loc_12:* = 0;
            var loc_13:* = 0;
            var loc_14:* = NaN;
            var loc_15:* = NaN;
            var loc_16:* = 0;
            var loc_17:* = 0;
            var loc_18:* = 0;
            var loc_19:* = NaN;
            var loc_20:* = 0;
            var loc_21:* = 0;
            var loc_22:* = 0;
            var loc_23:* = 0;
            var loc_24:* = 0;
            var loc_25:* = this;
            var loc_26:* = t + 1;
            
            loc_25.t = loc_26;
            
            var loc_2:* = (stage.mouseX * 0.25 - lastX);
            var loc_3:* = (stage.mouseY * 0.25 - lastY);
            
            if (mouseDown && (Math.abs(loc_2) + Math.abs(loc_3)) > 0)
            {
                loc_12 = stage.mouseX / 4 - 9;
                while (loc_12 < stage.mouseX / 4 + 9)
                {
                    
                    loc_13 = stage.mouseY / 4 - 9;
                    while (loc_13 < stage.mouseY / 4 + 9)
                    {
                        
                        loc_14 = pageBMD.getPixel(loc_12 + loc_2, loc_13 + loc_3);
                        loc_15 = pageBMD.getPixel(loc_12, loc_13);
                        pageBMD.setPixel(loc_12, loc_13, 0);
                        pageBMD.setPixel(loc_12 + loc_2, loc_13 + loc_3, Math.min(loc_14 + loc_15, 2550000));
                        loc_13++;
                    }
                    loc_12++;
                }
            }
            
            lastX = int(stage.mouseX / 4);
            lastY = int(stage.mouseY / 4);
            pageBMD.lock();
            var loc_4:* = 0;
            
            while (loc_4 < pageBMD.width)
            {
                
                loc_16 = 0;
                while (loc_16 < pageBMD.height)
                {
                    
                    loc_17 = pageBMD.getPixel(loc_4, loc_16);
                    loc_18 = pageBMD.getPixel(loc_4, (loc_16 - 1));
                    
                    var loc_25:* = (loc_17 - loc_18);
                    loc_19 = (loc_17 - loc_18);
                    if (loc_25 > 10)
                    {
                        pageBMD.setPixel(loc_4, loc_16, loc_17 - loc_19 >> 2);
                        pageBMD.setPixel(loc_4, (loc_16 - 1), loc_18 + loc_19 >> 2);
                        loc_17 = loc_17 - loc_19 >> 2;
                    }
                    
                    param1 = pageBMD.getPixel((loc_4 + 1), loc_16);
                    var loc_25:* = (loc_17 - param1);
                    loc_19 = (loc_17 - param1);
                    
                    if (loc_25 > 10)
                    {
                        pageBMD.setPixel(loc_4, loc_16, loc_17 - loc_19 * 0.33);
                        pageBMD.setPixel((loc_4 + 1), loc_16, param1 + loc_19 * 0.33);
                        loc_17 = (loc_17 - loc_19 * 0.33);
                    }
                    
                    loc_20 = pageBMD.getPixel((loc_4 - 1), loc_16);
                    var loc_25:* = (loc_17 - loc_20);
                    loc_19 = (loc_17 - loc_20);
                    
                    if (loc_25 > 10)
                    {
                        pageBMD.setPixel(loc_4, loc_16, loc_17 - loc_19 >> 1);
                        pageBMD.setPixel((loc_4 - 1), loc_16, loc_20 + loc_19 >> 1);
                        loc_17 = loc_17 - loc_19 >> 1;
                    }
                    
                    loc_21 = pageBMD.getPixel(loc_4, (loc_16 + 1));
                    var loc_25:* = (loc_17 - loc_21);
                    loc_19 = (loc_17 - loc_21);
                    
                    if (loc_25 > 10)
                    {
                        pageBMD.setPixel(loc_4, loc_16, loc_17 - loc_19);
                        pageBMD.setPixel(loc_4, (loc_16 + 1), loc_21 + loc_19);
                    }
                    
                    loc_16 = (loc_16 + 1);
                }
                
                loc_4 = (loc_4 + 1);
            }
            
            pageBMD.unlock();
            curBMD.fillRect(curBMD.rect, 16711680);
            viewBMD.lock();
            loc_4 = 0;
            
            while (loc_4 < pageBMD.width)
            {
                loc_16 = 0;
                
                while (loc_16 < pageBMD.height)
                {
                    loc_22 = pageBMD.getPixel(loc_4, loc_16);
                    
                    if (loc_22)
                    {
                        loc_6 = pageBMD.getPixel(loc_4, (loc_16 + 1));
                        loc_7 = pageBMD.getPixel((loc_4 + 1), loc_16);
                        loc_8 = pageBMD.getPixel((loc_4 + 1), (loc_16 + 1));
                        loc_9 = pageBMD.getPixel((loc_4 + 1), loc_16 + 2);
                        loc_10 = pageBMD.getPixel(loc_4 + 2, (loc_16 + 1));
                        loc_11 = pageBMD.getPixel(loc_4 + 2, loc_16 + 2);
                        loc_23 = loc_6 > loc_7 ? (loc_6) : (loc_7);
                        loc_23 = loc_23 > loc_8 ? (loc_23) : (loc_8);
                        loc_23 = loc_23 > loc_9 ? (loc_23) : (loc_9);
                        loc_23 = loc_23 > param1 ? (loc_23) : (loc_10);
                        loc_23 = loc_23 > loc_11 ? (loc_23) : (loc_11);
                        loc_5 = Math.min(loc_23 < loc_22 ? (Math.max(180, 230 + loc_23 - loc_22)) : (255), (loc_22 << 2) + 50);
                        loc_5 = (viewBMD.getPixel(loc_4, loc_16) & 255) + loc_5 >> 1;
                        loc_5 = (loc_5 >> 1) + 10 + ((loc_5 << 8) + 1) + ((loc_5 << 16) + 1);
                        
                        viewBMD.setPixel(loc_4, loc_16, loc_5);
                        loc_24 = 1;
                        
                        while (loc_24 < (loc_22 >> 5))
                        {
                            viewBMD.setPixel(loc_4, (loc_16 - loc_24), loc_5);
                            
                            if  (loc_24 > 10)
                                {break;}
                                
                            loc_24++;
                        }
                    } else {viewBMD.setPixel(loc_4, loc_16, 2106929)}
                    
                    if (loc_4 == lastX || loc_16 == lastY)
                    {
                        curBMD.setPixel32(loc_4, (loc_16 - loc_24), 2164195328);
                    }
                    
                    loc_16 = (loc_16 + 1);
                }
                
                loc_4 = (loc_4 + 1);
            }
            viewBMD.unlock();
            return;
        }// end function

    }
}