package{ import flash.display.*; import flash.events.*; import flash.geom.*; [SWF(frameRate="30")] public class X extends Sprite { private static const C:uint = 0x776030; private var bd:BitmapData; private var yb:BitmapData = new SpritePool(YUNO); private var count:int = 0; private var mGPt:Point = new Point(); private var mt:int = 0; private var dir:Boolean = true; private var vy:Number = -2; function X() { bd = new BitmapData(600, 600, false, 0xddd5c3); var b:Bitmap = new Bitmap(bd); addChild(b); addEventListener(Event.ENTER_FRAME, tick); } private function tick(e:Event):void { if (dir) { mt++; if (mt == 20) { dir = false; vy = -15; mGPt.x = Math.random()*480; mGPt.y = Math.random()*180 + 190; } } else { mt--; if (mt == -19) { dir = true; } } mGPt.y += vy; vy += 0.8; if (mGPt.y > 450) { mGPt.y = 450; vy *= -0.6; } count++; bd.fillRect(new Rectangle(0, 0, 600, 600), 0xddd5c3); var i:int, k:int, xx:int, xy:int; for (k = 0;k < 80;k++) { for (i = 0;i < 70;i++) { xx = i*6 + 10; var px:int = yb.getPixel(i, k) & 0xff; var val:int = (px>90) ? 2 : (px>30) ? 1 : 0; var t:Number; t = mt*0.09 - Math.cos(k*0.3)*0.2 - - Math.sin(k*0.4)*0.2 - 0.1; if (t>1) t = 1; if (t<0) t = 0; xy = k*6 + 10; xx = mGPt.x * (1-t) + xx*t; xy = mGPt.y * (1-t) + xy*t; if (val > 0) { bd.setPixel(xx, xy, C); bd.setPixel(xx+1, xy+1, C); bd.setPixel(xx+2, xy+2, C); bd.setPixel(xx+2, xy, C); bd.setPixel(xx, xy+2, C); if (val > 1) { bd.setPixel(xx-1, xy-1, C); bd.setPixel(xx+3, xy+3, C); bd.setPixel(xx+3, xy-1, C); bd.setPixel(xx-1, xy+3, C); xx++; bd.setPixel(xx, xy, C); bd.setPixel(xx+1, xy+1, C); bd.setPixel(xx+2, xy+2, C); bd.setPixel(xx+2, xy, C); bd.setPixel(xx, xy+2, C); bd.setPixel(xx-1, xy-1, C); bd.setPixel(xx+3, xy+3, C); bd.setPixel(xx+3, xy-1, C); bd.setPixel(xx-1, xy+3, C); } } } } } } } class SpritePool extends flash.display.BitmapData { import flash.utils.ByteArray; function SpritePool(src:*) { var ba:ByteArray = B64.decode(src.DATA); ba.uncompress(); var w:int = ba.readUnsignedShort(); var h:int = ba.readUnsignedShort(); super(w, h, true, 0); var pal_length:int = ba.readUnsignedByte(); var pal:Array = new Array(pal_length); for (var i:int = 0;i < pal_length;i++) { pal[i] = ba.readUnsignedInt(); } lock(); var x:int, y:int, k:uint; for (y = 0;y < h;y++) { for (x = 0;x < w;x += 2) { k = ba.readUnsignedByte(); setPixel32(x , y, uint(pal[k&0x0f])); setPixel32(x+1, y, uint(pal[(k&0xf0)>>4])); } } unlock(); } } class B64 { import flash.utils.ByteArray; public static function decode(raw:String):ByteArray { var res:ByteArray = new ByteArray(); var d1:int, d2:int, d3:int, d4:int; var len:int = raw.length; for (var i:int = 0;i < len;i += 4) { d1 = v(raw.charCodeAt(i )); d2 = v(raw.charCodeAt(i+1)); d3 = v(raw.charCodeAt(i+2)); d4 = v(raw.charCodeAt(i+3)); if (d2 == 64) break; res.writeByte( (d1 << 2) + ((d2 & 0x30) >> 4) ); if (d3 == 64) break; res.writeByte( ((d2 & 0x0f) << 4) + ((d3 & 0x3c) >> 2) ); if (d4 == 64) break; res.writeByte( ((d3 & 0x03) << 6) + d4 ); } res.position = 0; return res; } public static function v(c:int):int { return (c==61) ? 64 : (c>=65 && c<=90) ? (c-65) : (c>=97 && c <= 122) ? (c-71) : (c>=48) ? (c+4) : (c==43) ? 62 : 63; } } class YUNO { public static const DATA:String = 'eNqFlkmW1DAMhiWzB1knsHQalqzhcWR43KjRLzmOkxo61fW6KvlK82D6Qd+/fHzrXz9+/f758fffH3q4eu9Mn1zSvWvH31vM3fu8XF8Lc+379VLn/XpqpugDqE+lPcp7ptrprlSeSTR+ECVPTJS7F0wl364Y3zhe7red456eWGbCOnUieuLKYYb1wcyDaUB+BZ15w6Zb'+ 'SjAHUCPIvQiM1Hv9Bk+Lo0yz7lwklR0fRrwIVluDBSiFPXsS7yYIQ7wEnDYSg6ypWM7g4VsL86CSFInWJ8ljcMZBWnJ+6NRL2YwMqQWJJEc8FmcXrlMZbX0WPRhTvUVGsjACCFJHckDUbwaWuMnBT4WoCKpeDJzi4q4uzp9wQ5qVeSFxchYfsvXMlmIdBHM2bkqFwI1j'+ 'lYMLMeUC0uvhiZrpwY30EVxo0pThPPBPoTm99kgntwEPPAz3llx3DhU2YGMqSA5uhGUO21uqDS4Um4SikhlCEJd0N8xROID0eRQbjBDNqMJDVKXDU4fRbYBrxrA1JCGNniiqwJHY5FQ8yDYmByUZhp2L3OJJcFFgXl/AVWJ441KIBEfRY/GFoRomZeYknqTeDF84UZ09'+ 'OUtvc4pQhjOvyE14f3BaXI1Y6IVLuBlxxhjUOYH94BBqnlyr+zcOYUpngpPibHJkOvWWuxWXriMFI2WTk5074hxphA/g0hfOyZpSi7PK2+L05LLZi7NiwFLlTF0Orpo6DbZedYXABBK2NhO3nYuqctXVwhHAFgCCe+WylXSbbtJGcOEknvC2EGvZnTOhyQjFMH3jymdb'+ 'QzBnAmzLEtHbWtQ+G876nMsxHE0v0mT4KS6TNJTWuj2n2GzWOTksc071g9wkvJasntaxZIXIw8YT5hwk24YdObLi07ZSiEVSq26buCag8FqOXBmxrNNzy9UcP+e/VeWj4FKcVS8IZZSm1mjLXtHz4/RhiFoNe707IhgHXl05895zTfE1Z5KFBBNh3diOJHaLDEadMk4X'+ 'rY/tuNQfsgsOo5C2KmKYoRf7tOpiN1wQQoxKPjEMpTR/OyEIVmmn1SA5+ZXW4l1VnvuXhiEcqbPfavb8jWTr2qp3f3sCHHCHe7r69kAZU3eeEj/hsDvS7/dc9JMdJwx5TQ1in0oxW1+fdtEGuR/ruLqe/QeFSp5W'; } code on 2008-12-31