In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

桜乱忍者(Auto-Run Ninja)

スマホ用タッチ板Wall×Walk
・前作:http://wonderfl.net/c/oIST

概要
・自動で走る忍者をタッチでジャンプさせてゴールに導く

操作方法(How to Play)
・タッチ(Touch)
 ・ジャンプ(Jump)
 ・(Flash上ではSPACEでもジャンプ可能)

Android版
・https://play.google.com/store/apps/details?id=air.showohealer.game.ninjarun
Get Adobe Flash player
by o_healer 16 Nov 2012
/**
 * Copyright o_healer ( http://wonderfl.net/user/o_healer )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/aQYx
 */

/*

「桜乱忍者(Auto-run Ninja)」

・スマホ用タッチ板Wall×Walk

 ・前作:http://wonderfl.net/c/oIST



概要

・自動で走る忍者をタッチでジャンプさせてゴールに導く



操作方法(How to Play)

・タッチ(Touch)

 ・ジャンプ(Jump)

 ・(Flash上ではSPACEでもジャンプ可能)



Android版

・https://play.google.com/store/apps/details?id=air.showohealer.game.ninjarun

*/



/*

・追加案

 ・「ゴール」ではなく「メダル集め」にする

  ・メダルが1個ならゴールと同じ扱い

  ・メダルが2個以上ならショートカットの抑止やチキンレースの推奨、探索などが可能

  ・アクトレーザーでも使うことになりそうなので採用して共通フォーマットにしたい

   ・というかタッチ版アクトレーザーではすでにやっているので、それをコピペすればOK?

  ・「秘伝書」を回収する?

*/



package{

    import flash.display.*;

    import flash.events.*;

    import flash.geom.*;

    import flash.net.*;

    import flash.text.*;

    import flash.filters.*;

    import flash.ui.*;

    import flash.system.*;

    import flash.desktop.*;



    [SWF(width="465", height="465", frameRate="30", backgroundColor="0x000000")]

    public class GameMainWonderfl extends Sprite{

        //==File==

//*

        static public const BITMAP_URL:String = "http://assets.wonderfl.net/images/related_images/8/8c/8c09/8c096abe8a77528385efcb4b2e4873afe0a0c5eb";

/*/

        [Embed(source='Graphics.png')]

         private static var Bitmap_Graphic: Class;

//*/



        //==Const==



        //画面サイズ

        static public const VIEW_W:int = 465;

        static public const VIEW_H:int = 465;

        static public const AD_H:int = 0;



        //マップ要素

        static public var MapIter:int = 0;

        static public const O:uint    = MapIter++;

        static public const W:uint    = MapIter++;

        static public const P:uint    = MapIter++;

        static public const G:uint    = MapIter++;

        static public const X:uint    = MapIter++;



        //マップ

        static public var s_MapIter:int = 0;

        static public const MAP:Array = [

            {

                name:"Tutorial1",

                map:[//○Tutorial1 : Free Run

                [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,W],

                [W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W],

                [W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W],

                [W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W],

                [W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W],

                [W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W,W,W,W,W,W,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W],

                ]

            },

            {

                name:"Tutorial2",

                map:[//○Tutorial2 : Timing

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,P,O,O,O,O,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,W,W,W,W,W,W,W,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,W,W,W,W,W,O,O,O,O,],

                [O,O,O,O,W,W,W,W,W,O,O,O,O,],

                [O,O,O,O,W,W,W,W,W,O,O,O,O,],

                [O,O,O,O,W,W,W,W,W,O,O,O,O,],

                [O,O,O,O,W,W,W,W,W,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,W,W,W,O,O,O,O,O,],

                [O,O,O,O,O,W,W,W,O,O,O,O,O,],

                [O,O,O,O,O,W,W,W,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,G,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Tutorial3",

                map:[//○Tutorial3 : Needle

                [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,O,O,X,O,O,W,W,W,W,W,O,O,X,O,O,W],

                [W,O,O,X,O,O,W,W,W,W,W,O,O,X,O,O,W],

                [W,O,O,X,O,O,W,W,W,W,W,O,O,X,O,O,W],

                [W,O,O,X,O,O,W,W,W,W,W,O,O,X,O,O,W],

                [W,O,O,X,O,O,W,W,W,W,W,O,O,X,O,O,W],

                [W,O,O,X,O,O,O,O,G,O,O,O,O,X,O,O,W],

                [W,O,O,X,O,O,O,O,O,O,O,O,O,X,O,O,W],

                [W,O,O,X,X,X,X,X,X,X,X,X,X,X,O,O,W],

                [W,O,O,O,O,O,O,O,P,O,O,O,O,O,O,O,W],

                [W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W],

                [W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W],

                ]

            },

            {

                name:"Tutorial4",

                map:[//○Tutorial4 : Reverse

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,O,W,O,O],

                [O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,P,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,W,W,X,X,X,W,W,W,W,W,W,W,W,W,W,W,W,W,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Tutorial5",

                map:[//○Tutorial5 : Reduce Vel

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,W,X,X,X,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,O,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [O,O,O,O,W,O,X,O,W,O,O,O,O,],

                [W,W,W,W,W,O,X,O,W,O,O,O,O,],

                [W,G,O,O,O,O,X,O,W,O,O,O,O,],

                [W,X,X,X,X,X,X,O,W,O,O,O,O,],

                [W,P,O,O,O,O,O,O,W,O,O,O,O,],

                [W,W,W,W,W,W,W,W,W,O,O,O,O,],

                ]

            },

            {

                name:"Timing1",

                map:[//○Timing1 : Seq HighJump

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,P,O,O,O,X,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,W,W,W,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,W,W,W,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,O,O,W,W,W,W,W,W,W,O,O,],

                [O,W,W,W,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,O,O,W,W,W,W,W,W,W,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,O,O,W,W,W,W,W,W,W,O,O,],

                [O,O,O,O,O,O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,X,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O,O,O,O,O,O,O,G,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Timing2",

                map:[//○Timing2 : i shuu : Difficult

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,W,W,W,W,W,W,W,W,W,X,W,W,W,W,W,X,W,W,W,W,W,X,W,W,W,W,X,W,W,W,W,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O],

                [O,X,O,O,X,W,W,X,W,W,W,W,W,X,W,W,W,W,W,X,W,W,W,W,W,X,W,W,X,O,O,W,O],

                [O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O],

                [O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,X,O],

                [O,W,O,O,W,O,O,W,W,W,W,W,W,X,W,W,W,W,W,X,W,W,W,W,W,W,O,O,W,O,O,W,O],

                [O,W,O,O,X,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,W,O,O,X,O,O,W,O],

                [O,W,O,O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O,O,W,O],

                [O,W,O,O,W,O,O,W,O,O,W,W,W,X,W,W,W,W,W,X,W,W,W,O,O,W,O,O,W,O,O,X,O],

                [O,W,O,O,X,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O,O,W,O,O,W,O],

                [O,W,O,O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O,O,X,O,O,W,O],

                [O,W,O,O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,G,O,X,O,O,X,O,O,W,O,O,W,O],

                [O,X,O,O,W,O,O,W,W,W,W,W,W,X,W,W,W,W,W,W,W,W,W,O,O,W,O,O,W,O,O,W,O],

                [O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O,O,X,O],

                [O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O,O,W,O],

                [O,W,O,O,W,W,W,X,W,W,W,W,W,X,W,W,W,W,W,W,W,W,W,W,W,W,O,O,W,O,O,W,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,W,O],

                [O,W,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,W,O],

                [O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,X,W,W,W,W,W,W,X,W,W,W,W,W,W,O,O,W,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O],

                [O,W,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O],

                [O,W,W,W,W,W,W,W,W,X,W,W,W,W,W,W,W,W,W,X,W,W,W,W,X,X,X,X,X,X,X,X,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Timing3",

                map:[//○Timing3 : Jump Jump Jump : Easy

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,X,X,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,P,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,O,O,O,O,O,O,O,X,O,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,O],

                [O,O,O,O,O,O,O,X,X,X,X,X,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,X,O,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Timing4",

                map:[//○Timing4 : Renda

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,X,W,W,W,W,W,W,W,W,W,W,X,O,O,O,O,X,W,W,W,W,W,W,W,W,X,O,O,O,X,W,W,W,W,W,X,O,O,X,W,W,W,X,O,O,X,W,W,W,X,O,X,W,W,W,X,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O],

                [X,W,W,W,W,W,X,O,O,O,O,X,W,W,W,W,W,W,W,W,W,X,O,O,O,O,X,W,W,W,W,W,W,X,O,O,O,X,W,W,W,X,O,O,O,X,W,W,W,X,O,X,W,W,W,X,O,X,W,W,W,X,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

/*

            {

                name:"Technique1",

                map:[//○Technique1 : Adjust Stay Block

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,G,O,O,O,O,O,O,O,O,O,O,O],

                [O,W,O,W,O,W,O,X,O,X,O,X,O,X,O,X,O,X,O,W,O,W,O,X,O,W,O,W,O,W,O,W,O,W,O,W,O,W,O,X,O,W,O,W,O,W,O,W,O,W,O,W,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

//*/

            {

                name:"Technique1",

                map:[//Technique ; ○Pause & Jump

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,X,O,O,O,X,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,X,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,X,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,X,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O],

                [O,O,X,O,O,O,X,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O,O,O,O,O],

                [O,O,X,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,X,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,X,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,X,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,X,O,O,O,O,G,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Technique2",

                map:[//○Technique : Mini Jump (Reduce Vel 2)

                [O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,W,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,G,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,W,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,P,O,O,O,O,O,W,O,X,O,O,O,O,O,O,O],

                [O,W,W,W,W,W,W,W,O,X,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Technique3",

                map:[//○Technique : Loop Break

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,W,W,W,W,W,W,W,O,O],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,W,O,O],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,W,O,O],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,W,O,O],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,W,O,O],

                [O,O,G,O,P,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,X,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Technique4",

                map:[//Pole Walk

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,P,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,W,W,W,O,O,O],

                [O,W,W,W,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,W,W,W,O,O,O],

                [O,W,W,W,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,W,W,W,O,O,O],

                [O,W,W,W,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,O,G,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

/*

            {

                name:"Technique7",

                map:[//LongJump or HighJump

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,W,W,W,W,W,O,O,O,O,X,O,O,O,O,O,O,O,O,W,W,W,O,O,O,O,X,O,O,O,O,O,O,O,O,O,W,W,W,O,],

                [O,W,W,W,W,W,O,O,O,O,O,X,O,O,O,O,O,O,O,W,W,W,O,O,O,O,X,O,O,O,O,O,O,O,O,O,W,W,W,O,],

                [O,W,W,W,W,W,O,O,X,X,X,X,X,O,O,O,O,O,O,W,W,W,O,O,O,O,X,O,O,O,O,O,O,O,O,O,W,W,W,O,],

                [O,W,W,W,W,W,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,G,O,O,],

                [O,W,W,W,W,W,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

//*/

            {

                name:"Technique5",

                map:[//Escape

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,W,W,W,W,W,W,W,W,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,O,O,G,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,X,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,W,O,O,O,O,W,O,O],

                [O,O,W,W,X,O,O,W,O,O,X,W,W,O,O],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O],

                [O,O,W,W,X,O,O,W,O,O,X,W,W,O,O],

                [O,O,W,O,O,O,O,W,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,X,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,P,O,O,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,W,W,W,W,W,O,O,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,O,O,O,O,O,O,O,O,O,W,O,O],

                [O,O,W,W,W,W,W,W,W,W,W,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

/*

            {

                name:"Technique All",

                map:[//All Technique

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [X,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [X,O,W,O,W,O,W,O,W,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

//*/

            {

                name:"Tower1",

                map:[//○Tower1 : Tower Inner

                [O,O,O,O,O,O,X,W,W,W,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,G,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,W,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,P,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,W,W,W,W,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Tower2",

                map:[//○Tower2 : Parallel : Easy

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,P,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,W,W,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Tower3",

                map:[//○Tower3 : Reduce Vel

                [O,O,O,O,O,O,O,O,G,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,W,W,W,X,W,W,W,W,W,W,W,X,W,W,W,O,],

                [O,O,O,O,O,X,O,O,W,O,O,X,O,O,O,O,O,],

                [O,O,O,O,O,W,O,O,W,O,O,W,O,O,O,O,O,],

                [O,O,O,O,O,W,O,O,W,O,O,W,O,O,O,O,O,],

                [O,O,O,O,O,W,O,O,W,O,O,W,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,W,W,W,X,X,X,X,X,W,W,W,O,O,O,],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,],

                [O,O,O,W,W,W,W,X,X,X,W,W,W,W,O,O,O,],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,O,O,],

                [O,O,O,O,W,W,W,W,W,W,W,W,W,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,P,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Tower4",

                map:[//○Tower4 : Difficult

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,X,O,O,O,O,O,O,O,O,O,X,O,],

                [O,W,O,O,O,O,O,O,O,O,O,W,O,],

                [O,W,O,O,O,O,O,O,O,O,O,W,O,],

                [O,W,O,O,O,O,O,O,O,O,O,W,O,],

                [O,W,O,O,O,O,O,O,O,O,O,W,O,],

                [O,W,O,O,O,O,X,O,O,O,O,W,O,],

                [O,W,O,O,O,O,W,O,O,O,O,W,O,],

                [O,W,O,O,O,O,W,O,O,O,O,W,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,W,W,W,X,X,X,X,X,W,W,W,O,],

                [O,O,O,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,X,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,X,O,O,W,O,O,X,O,O,O,],

                [O,O,O,X,O,O,W,O,O,X,O,O,O,],

                [O,O,O,W,O,O,W,O,O,W,O,O,O,],

                [O,O,O,W,O,O,X,O,O,W,O,O,O,],

                [O,O,O,W,O,O,X,O,O,W,O,O,O,],

                [O,O,O,W,O,O,X,O,O,W,O,O,O,],

                [O,O,O,W,O,O,W,O,O,W,O,O,O,],

                [O,O,O,X,O,O,W,O,O,X,O,O,O,],

                [O,O,O,X,O,O,W,O,O,X,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,W,W,W,X,W,X,W,W,W,O,O,],

                [O,O,W,W,W,W,W,W,W,W,W,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,O,W,O,O,O,O,O,O,],

                [O,O,O,O,O,P,W,G,O,O,O,O,O,],

                [O,O,O,O,O,W,X,W,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Maze1",

                map:[//○Maze1 : No Way (LongJump for Escape)

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,W,W,O,X,X,O,X,X,O,X,X,O,X,X,O,W,W,O,W,W,O,O],

                [O,O,W,W,O,W,W,O,X,X,O,X,X,O,X,X,O,X,X,O,W,W,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,W,W,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,W,W,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,W,W,O,W,W,O,W,W,O,W,W,O,W,W,O,X,X,G,W,W,O,O],

                [O,O,W,W,O,W,W,O,W,W,O,W,W,O,W,W,O,W,W,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,X,X,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,W,W,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,W,W,O,X,X,O,X,X,O,W,W,O,W,W,O,X,X,O,X,X,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,W,W,O,W,W,O,X,X,O,X,X,O,X,X,O,X,X,O,W,W,O,W,W,O,O],

                [O,O,W,W,O,W,W,O,X,X,O,X,X,O,X,X,O,X,X,O,W,W,O,W,W,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Maze2",

                map:[//○Maze2 : Search & Reach

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,O,O,W,O,W,O,O,O,O,P,O,O,O,O,W,O,W,O,O,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,W,O,W,O,W,O,O,O,W,W,W,O,O,O,W,O,W,O,W,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,W,O,W,O,W,O,W,O,O,O,W,W,W,O,O,O,W,O,W,O,W,O,W,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,W,O,W,O,W,O,O,O,W,W,W,O,O,O,W,O,W,O,W,O,O,O,O,O,O,X,O,W,O,],

                [O,O,O,O,O,O,O,W,O,W,O,O,O,O,O,O,O,O,O,W,O,W,O,O,O,O,O,O,O,O,X,G,W,O,],

                [O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,X,W,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Maze3",

                map:[//○Maze3 : Middle

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,X,O,O,O,O,O,W,W,W,X,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,],

                [O,X,O,O,W,X,W,O,O,W,X,W,O,O,W,W,W,O,O,W,W,W,O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,W,O,],

                [O,X,O,O,W,X,X,O,O,W,X,W,O,O,W,X,W,O,O,W,W,W,O,W,X,X,X,W,X,X,X,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,W,W,O,O,W,W,W,O,O,W,W,W,O,O,W,W,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,X,W,O,O,W,W,W,O,O,W,W,W,O,O,W,G,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,X,W,O,O,X,X,W,O,O,W,X,W,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,X,W,O,O,W,W,W,O,O,W,W,W,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,X,W,O,O,W,X,W,O,O,W,W,W,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,X,X,O,O,W,X,W,O,O,W,X,W,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,W,W,W,O,O,W,W,W,O,O,W,W,W,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,O,O,O,O,W,O,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,W,O,W,O,O,O,W,O,O,O,W,W,W,W,W,W,O,W,O,],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,W,X,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,W,O,],

                [O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,W,W,W,O,O,O,W,W,W,W,W,W,W,W,W,W,W,W,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Zig Zag",

                map:[//○Normal Jump Stage

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,G,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,W,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,P,O,O,O,O,O,O,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,W,W,W,W,W,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,],

                ]

            },

            {

                name:"Vortex",

                map:[//

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,O,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,W,O,X,O,O,O,O,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,W,O,X,O,O,O,O,O,W,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,W,O,X,O,O,O,O,O,W,O,X,O,O,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,W,O,X,O,O,O,O,O,W,O,X,O,O,O,O,O,O,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,W,O,X,O,O,O,O,O,W,O,X,O,O,O,O,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,W,O,X,O,O,O,O,O,W,O,X,O,W,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,W,O,X,O,O,O,O,O,W,O,X,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,W,O,X,O,O,O,O,O,W,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,W,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,W,O,X,O,O,O,O,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,W,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,O,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,W,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,X,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Escape",

                map:[//

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,X,O,O,O,X,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,W,W,W,W,W,W,W,W,W,W,W,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,X,O,O,O,W,O,O,O,O,P,O,O,O,O,X,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,W,W,W,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,W,W,W,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,W,O,O,O,W,W,W,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,X,O,O,O,W,O,O,O,O,O,O,O,O,O,X,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,W,W,W,W,W,W,W,W,W,W,W,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O],

                [O,O,O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O],

                [O,O,O,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,W,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

            {

                name:"Landing",

                map:[//

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,P,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,W,W,W,W,W,W,W,W,X,O,W,O,X,W,W,W,W,W,W,W,W,W,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,W,W,W,W,W,W,W,W,X,O,W,O,X,W,W,W,W,W,W,W,W,W,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,X,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,X,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,W,O,O,O,O,O,O],

                [O,W,W,W,W,W,W,W,W,W,X,O,W,O,X,W,W,W,W,W,W,W,W,W,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,G,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                [O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O],

                ]

            },

        ];



        //ステージのサイズ(初期化時に計算する)

        static public var BitmapW:int = 100;

        static public var BitmapH:int = 100;



        //マップの要素の最大数

        static public const MAP_NUM_MAX_X:int = 128;

        static public const MAP_NUM_MAX_Y:int = 128;



        //モード

        static public var ModeIter:int = 0;

        static public const MODE_MAIN:int    = ModeIter++;

        static public const MODE_GOAL:int    = ModeIter++;

        static public const MODE_GAME_OVER:int    = ModeIter++;





        //==Var==



        //ルート

        public var m_Layer_Root    :Sprite = new Sprite();

        public var  m_Layer_BG    :Sprite = new Sprite();

        public var  m_Layer_Game:Sprite = new Sprite();

        //Scale

        public var m_GlobalScl:Number = 1;



        //背景&パス

        public var m_BitmapData_Ori:BitmapData;

        public var m_BitmapData_Path:BitmapData;



        //プレイヤー

        public var m_Player:Player;



        //ゴール

        public var m_Goal:Goal;



        //Button

        public var m_ButtonPause:Button;

        public var m_Pause_Push:Boolean = false;

        public var m_Pause_Exec:Boolean = false;



        //テキスト

        public var m_Text:TextField = new TextField();



        //Popup系UI

        public var m_Popup_Queue:Vector.<Popup> = new Vector.<Popup>();

        public var m_TopPopup:Popup = null;





        //モード

        public var m_Mode:int = MODE_MAIN;





        //==Function==



        //Static Global Access

        static private var m_Instance:GameMainWonderfl;

        static public function Instance():GameMainWonderfl{return m_Instance;}



        //#Init

        public function GameMainWonderfl(){

            m_Instance = this;

//*

            //wonderfl用:Bitmapを外部からロードする場合



            //Load

            addEventListener(

                Event.ADDED_TO_STAGE,//ステージに追加されたら

                function(e:Event):void{

                    var loader:Loader = new Loader();

                    loader.load(new URLRequest(BITMAP_URL), new LoaderContext(true));//画像のロードを開始して

                    loader.contentLoaderInfo.addEventListener(

                        Event.COMPLETE,//ロードが完了したら

                        function(e:Event):void{

                            ImageManager.Init(loader.content);//それを保持した後



                            Init();//初期化に入る

                        }

                    );

                }

            );



            //キャプチャのタイミング指定

            Wonderfl.capture_delay(30);//30秒後に実行

/*/

            //ローカル用:Bitmapを事前ロードできる場合



            //ブロック画像のセット(&その他初期化)

            ImageManager.Init(new Bitmap_Graphic());



            //本体の初期化

            addEventListener(Event.ADDED_TO_STAGE, Init);

//*/

        }



        //#Init

        public function Init(e:Event=null):void{

            //Settings

            {

                stage.scaleMode = StageScaleMode.NO_SCALE;//Stage3Dとの共存のため、倍率は自前で決めることにする

                stage.align = StageAlign.TOP_LEFT; 

            }



            //レイヤー

            {

                addChild(m_Layer_Root);

                m_Layer_Root.addChild(m_Layer_BG);

                m_Layer_Root.addChild(m_Layer_Game);

            }



            //Global Scale

            {

                ResetGlobalScale();

            }



            //BG

            {

                //PerlinNoise + ColorTransform

                const PanelLen:int = 16;//VIEW_W / 4;

                const Octave:int = 2;//変化は雑でいい

                const stitch:Boolean = true;//端はループできる感じで

                const fractalNoise:Boolean = true;//なめらかな変化で

                const channel:uint = 0x7;//全色

                const grayScale:Boolean = true;//RGBは全て同じ値で



                const base_ratio_min:Number = 0.5;

                const base_ratio_max:Number = 1.0;

                const r_ratio:Number = 0.1;

                const r_offset:uint = 0xD0;//0x80;

                const g_ratio:Number = 0.1;

                const g_offset:uint = 0xB0;//0x80;

                const b_ratio:Number = 0.02;

                const b_offset:uint = 0x50;//0x80;



                var bmd_bg:BitmapData = new BitmapData(VIEW_W, VIEW_H, false, 0x000000);



                bmd_bg.lock();



                //PerlinNoise

                bmd_bg.perlinNoise(PanelLen,PanelLen, Octave, 1000*Math.random(), stitch, fractalNoise, channel, grayScale);



/*

                //ColorTransform

                bmd_bg.colorTransform(bmd_bg.rect, new ColorTransform(0,g_ratio,0,1, 0,g_offset,0,0));

/*/

                for(var yy:int = 0; yy < bmd_bg.height; ++yy){

                    var base_ratio:Number = Util.Lerp(base_ratio_min, base_ratio_max, 1.0 * (bmd_bg.height - yy) / bmd_bg.height);

                    for(var xx:int = 0; xx < bmd_bg.width; ++xx){

                        var color_ori:uint = bmd_bg.getPixel(xx, yy);

                        var r:uint = (color_ori >> 16) & 0xFF;

                        var g:uint = (color_ori >>  8) & 0xFF;

                        var b:uint = (color_ori >>  0) & 0xFF;



                        r = base_ratio * (r * r_ratio + r_offset);

                        g = base_ratio * (g * g_ratio + g_offset);

                        b = base_ratio * (b * b_ratio + b_offset);



                        bmd_bg.setPixel(xx, yy, (r << 16) | (g << 8) | (b << 0));

                    }

                }

//*/

                bmd_bg.unlock();



                m_Layer_BG.addChild(new Bitmap(bmd_bg));

            }



            //m_BitmapData_Ori

            //m_BitmapData_Path

            {

                m_BitmapData_Ori = new BitmapData(MAP_NUM_MAX_X * 32, MAP_NUM_MAX_Y * 32, true, 0x00000000);

                m_BitmapData_Path = new BitmapData(MAP_NUM_MAX_X * 32, MAP_NUM_MAX_Y * 32, true, 0x00000000);



                m_Layer_Game.addChild(new Bitmap(m_BitmapData_Ori));

            }



            //Player

            {

                m_Player = new Player();

                m_Layer_Game.addChild(m_Player);

            }



            //Goal

            {

                m_Goal = new Goal();

                m_Layer_Game.addChild(m_Goal);

            }



            //Pause Button

            {

                m_ButtonPause = new Button(ImageManager.GetButtonBitmapData());

                m_Layer_Root.addChild(m_ButtonPause);

                m_ButtonPause.x = VIEW_W - 64/2;

                m_ButtonPause.y = 64/2;

            }



            //Text

            {

                m_Text.selectable = false;

                m_Text.autoSize = TextFieldAutoSize.LEFT;

                m_Text.defaultTextFormat = new TextFormat('Verdana', 60, 0xFFFF00, true);

                m_Text.text = '';

                m_Text.filters = [new GlowFilter(0xFF0000)];



                m_Layer_Root.addChild(m_Text);

            }



            //Key

            {

                stage.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDown);

            }



            //Touch

            {

                stage.addEventListener(MouseEvent.MOUSE_DOWN,    OnMouseDown);

                stage.addEventListener(MouseEvent.MOUSE_MOVE,    OnMouseMove);

                stage.addEventListener(MouseEvent.MOUSE_UP,        OnMouseUp);

            }



            //Update

            {

                addEventListener(Event.ENTER_FRAME, Update);

            }



            //Reset

            {

                Reset(true);

            }



            //最初のState

            {

                //ちょっと強引にステージ選択画面にする

                Push(new Popup_StageSelect());

                Pop();//上のResetでPushされたものをPopしておく

            }

        }



        //

        public function ResetGlobalScale():void{

            var stageWidth :int = stage.stageWidth;

            var stageHeight:int = stage.stageHeight;

/*

            CONFIG::RELEASE

            {

                stageWidth  = Capabilities.screenResolutionX;

                stageHeight = Capabilities.screenResolutionY;

            }

//*/

            //GlobalScale

            var GlobalX:Number = 0;

            var GlobalY:Number = 0;

            var GlobalScale:Number = 1;

            {

                var GlobalScaleX:Number = stageWidth  / VIEW_W;

                var GlobalScaleY:Number = stageHeight / VIEW_H;

                if(GlobalScaleX < GlobalScaleY){

                    GlobalScale = GlobalScaleX;

                    GlobalY += stageHeight/2 - GlobalScale * VIEW_H/2;

                }else{

                    GlobalScale = GlobalScaleY;

                    GlobalX += stageWidth/2 - GlobalScale * VIEW_W/2;

                }

            }

            m_GlobalScl = GlobalScale;



//            m_View.width  = GAME_H * GlobalScale;
//            m_View.height = GAME_H * GlobalScale;

            m_Layer_Root.x = GlobalX;

            m_Layer_Root.y = GlobalY;

            m_Layer_Root.scaleX = GlobalScale;

            m_Layer_Root.scaleY = GlobalScale;

        }



        //Key

        private function OnKeyDown(event:KeyboardEvent):void{

            switch(event.keyCode){

            case Keyboard.BACK://バックキー

//            case Keyboard.ESCAPE://PC動作チェック用

                //デフォルトの挙動をキャンセル

                event.preventDefault();



                //アプリを終了

//                NativeApplication.nativeApplication.exit();



                break;

            }

        }



        //Touch

        private function OnMouseDown(e:MouseEvent):void{

            if(m_TopPopup != null){

                m_TopPopup.OnMouseDown();

                return;

            }



            if(m_ButtonPause.IsRectIn()){

                m_Pause_Push = true;

                m_Pause_Exec = true;

                return;

            }



            m_Player.OnMouseDown(e);

        }

        private function OnMouseMove(e:MouseEvent):void{

            if(m_TopPopup != null){

                m_TopPopup.OnMouseMove();

                return;

            }



            if(m_Pause_Push && !m_ButtonPause.IsRectIn()){

                m_Pause_Exec = false;

            }

        }

        private function OnMouseUp(e:MouseEvent):void{

            if(m_TopPopup != null){

                m_TopPopup.OnMouseUp();

                return;

            }



            if(m_Pause_Push && m_ButtonPause.IsRectIn()){

                if(m_Pause_Exec){

                    Push(new Popup_Pause());

                }



                return;

            }



            m_Player.OnMouseUp(e);

        }



        //#Reset

        public function Reset(in_RestructFlag:Boolean):void{

            var map:Array = MAP[s_MapIter].map;

            var NumX:int = map[0].length;

            var NumY:int = map.length;



            //Param

            {

                BitmapW = NumX * 32;

                BitmapH = NumY * 32;

            }



            //m_BitmapData_Ori

            //m_BitmapData_Path

            if(in_RestructFlag)

            {

                ImageManager.DrawBG(map, m_BitmapData_Ori, m_BitmapData_Path);



/*

                //Debug

                {

                    var bmd:BitmapData = new BitmapData(BitmapW, BitmapH, true, 0x00000000);

                    {

                        var palette:Array = new Array(256);



                        for(var i:int = 0; i < 256; i++){

                            palette[i] = 0x00000000;

                        }

                        palette[Player.PATH_U] = 0xFF008800;

                        palette[Player.PATH_D] = 0xFF008800;

                        palette[Player.PATH_L] = 0xFF008800;

                        palette[Player.PATH_R] = 0xFF008800;

                        palette[Player.PATH_UorL] = 0xFF00FF00;

                        palette[Player.PATH_UorR] = 0xFF00FF00;

                        palette[Player.PATH_DorL] = 0xFFFF0000;

                        palette[Player.PATH_DorR] = 0xFF00FF00;

                        palette[Player.PATH_UandL] = 0xFF00FF00;

                        palette[Player.PATH_UandR] = 0xFF00FF00;

                        palette[Player.PATH_DandL] = 0xFFFF0000;

                        palette[Player.PATH_DandR] = 0xFF00FF00;

                        palette[Player.PATH_DAMAGE] = 0xFFFF0000;



                        const POS_ZERO:Point = new Point(0,0);

                        bmd.paletteMap(m_BitmapData_Path, m_BitmapData_Path.rect, POS_ZERO, null, null, palette);

                        //bmd.paletteMap(ImageManager.m_BitmapData_Path, ImageManager.m_BitmapData_Path.rect, POS_ZERO, null, null, palette);

                    }



                    m_Layer_Game.addChild(new Bitmap(bmd));

                }

//*/

            }



            //MAPからパラメータ取得

            var PlayerX:int = 0;

            var PlayerY:int = 0;

            var GoalX:int = 0;

            var GoalY:int = 0;

            {

                for(var y:int = 0; y < NumY; y++){

                    for(var x:int = 0; x < NumX; x++){

                        switch(map[y][x]){

                        case P:

                            PlayerX = (x + 0.5) * 32;

                            PlayerY = (y + 0.5) * 32;

                            break;

                        case G:

                            GoalX = (x + 0.5) * 32;

                            GoalY = (y + 0.5) * 32;

                            break;

                        }

                    }

                }

            }



            //Player

            {

                m_Player.Reset(PlayerX, PlayerY);

            }



            //Goal

            {

                m_Goal.Reset(GoalX, GoalY);

            }



            //Mode

            {

                m_Mode = MODE_MAIN;

            }



            //Text

            {

                m_Text.text = '';

            }



            //Init Camera

            {

                Update_Camera();

            }



            //StageName

            if(in_RestructFlag)

            {

                Push(new Popup_StageName(MAP[s_MapIter].name));

            }

        }



        //#Update

        public function Update(e:Event=null):void{

            var DeltaTime:Number = 1/24.0;



            //Popup

            if(m_TopPopup != null){

                m_TopPopup.Update(DeltaTime);

                if(m_TopPopup.IsEnd()){

                    Pop();

                }

                return;//ダイアログ表示中

            }



            //Button

            {

                m_ButtonPause.Update(DeltaTime);

            }



            //Player

            {

                m_Player.Update();

            }



            //Camera

            {

                Update_Camera();

            }



            //Goal

            {

                m_Goal.Update();

            }

        }



        //Update :Camera

        public function Update_Camera():void{

            var CAMERA_W:int = VIEW_W;

            var CAMERA_H:int = VIEW_H;



            var trgX:Number = m_Player.x*m_GlobalScl - CAMERA_W/2.0;

            var trgY:Number = m_Player.y*m_GlobalScl - CAMERA_H/2.0;



            var MinX:Number = 0.0;

            var MaxX:Number = (BitmapW - CAMERA_W) * m_GlobalScl;

            var MinY:Number = 0.0;

            var MaxY:Number = (BitmapH - CAMERA_H) * m_GlobalScl;



            if(trgX > MaxX){

                trgX = MaxX;

            }

            if(trgY > MaxY){

                trgY = MaxY;

            }

            if(trgX < MinX){

                trgX = MinX;

            }

            if(trgY < MinY){

                trgY = MinY;

            }



/*

            m_Layer_Game.x = -trgX;

            m_Layer_Game.y = -trgY;

/*/

//            m_Layer_Game.scrollRect = new Rectangle(trgX/m_GlobalScl, trgY/m_GlobalScl, VIEW_W / m_GlobalScl, VIEW_H / m_GlobalScl);

            m_Layer_Game.scrollRect = new Rectangle(trgX/m_GlobalScl, trgY/m_GlobalScl, VIEW_W, VIEW_H);

//*/

        }



        //#Path

        public function GetPathIndex(in_X:int, in_Y:int):int{

            return m_BitmapData_Path.getPixel(in_X, in_Y);

        }





        //Popup : Push

        public function Push(in_Popup:Popup):void{

            if(m_Popup_Queue.length <= 0){

                m_TopPopup = in_Popup;

            }

            m_Layer_Root.addChild(in_Popup);

            m_Popup_Queue.push(in_Popup);

        }



        //Popup : Pop

        public function Pop():void{

            if(m_TopPopup != null){

                m_TopPopup.parent.removeChild(m_TopPopup);

                m_Popup_Queue.shift();

            }



            if(m_Popup_Queue.length <= 0){

                m_TopPopup = null;

            }else{

                m_TopPopup = m_Popup_Queue[0];

            }

        }





        //#Goal

        public function OnGoal():void{

            //Mode

            {

                m_Mode = MODE_GOAL;

            }

/*

            //Text

            {

                //Text

                m_Text.text = 'Clear';



                //Centering

                m_Text.x = (stage.stageWidth - m_Text.width) / 2;

                m_Text.y = (stage.stageHeight - m_Text.height) / 2;

            }

//*/

            //Popup

            {

                Push(new Popup_Result(true));

            }

        }



        //#Game Over : Damage

        public function OnDead_Damage():void{

            //Mode

            {

                m_Mode = MODE_GAME_OVER;

            }

/*

            //Text

            {

                //Text

                m_Text.text = 'Game Over';



                //Centering

                m_Text.x = (stage.stageWidth - m_Text.width) / 2;

                m_Text.y = (stage.stageHeight - m_Text.height) / 2;

            }

//*/

            //Popup

            {

                Push(new Popup_Result(false));

            }

        }



        //#Game Over : Fall

        public function OnDead_Fall():void{

            //Mode

            {

                m_Mode = MODE_GAME_OVER;

            }

/*

            //Text

            {

                //Text

                m_Text.text = 'Game Over';



                //Centering

                m_Text.x = (stage.stageWidth - m_Text.width) / 2;

                m_Text.y = (stage.stageHeight - m_Text.height) / 2;

            }

//*/

            //Popup

            {

                Push(new Popup_Result(false));

            }

        }



        //#IsGameOver

        public function IsEnd():Boolean{

            return (m_Mode != MODE_MAIN);

        }

    }

}





import flash.display.*;

import flash.events.*;

import flash.geom.*;

import flash.net.*;

import flash.text.*;

import flash.filters.*;

import flash.ui.*;

import flash.system.*;





//Base : Popup

class Popup extends Sprite

{

    //==Static==



    //全てPopするためのフラグ

//    static public var s_AllEndFlag:Boolean = false;





    //==Const==



    //プレートの高さ(押しやすいようにする)

    static public const PLATE_H:int = 64;

    //ついでに幅も

    static public const PLATE_W:int = 400;





    //==Var==



    //次のポップアップ

    public var m_NextPopup:Popup = null;



    //Flag

    protected var m_EndFlag:Boolean = false;





    //==Function==



    //Init

    public function Popup(){

//        s_AllEndFlag = false;

    }



    //Update

    public function Update(in_DeltaTime:Number):void{

        //Override

    }



    //Touch

    public function OnMouseDown():void{

        //Override

    }

    public function OnMouseMove():void{

        //Override

    }

    public function OnMouseUp():void{

        //Override

    }





    //

    public function GetNextPopup():Popup{

        return m_NextPopup;

    }

    public function ClearNextPopup():void{

        m_NextPopup = null;

    }



    //Flag

    public function IsEnd():Boolean{

        return m_EndFlag;// || s_AllEndFlag;

    }

}





//Base : Popup Scroll

class Popup_Scroll extends Popup

{

    //==Static==



    //毎回生成するのは高コストなので、一度生成したら保持しておく

    static public var s_BitmapData_BG:BitmapData = null;

    static public var s_NinePatch_Button_Content:NinePatch;



    //==Const==



    //

    static public const CONTENT_GAP_NORMAL        :int = 122;

    static public const CONTENT_GAP_STAGESELECT    :int = 70;



    //Type

    static public var s_TypeIter:int = 0;

    static public const TYPE_PAUSE        :int  = s_TypeIter++;

    static public const TYPE_RESULT        :int  = s_TypeIter++;

    static public const TYPE_STAGESELECT:int  = s_TypeIter++;





    //==Var==



    //Layer

    public var m_Layer_Root:Sprite = new Sprite();

    public var  m_Layer_BG:Sprite = new Sprite();

    public var  m_Layer_Content:Sprite = new Sprite();

    public var   m_Layer_Scroll:Sprite = new Sprite();



    //Type

    public var m_Type:int;



    //

    public var m_ContentGap:int;



    //Title

    public var m_BitmapData_Title:BitmapData;



    //Content

    public var m_BitmapData_Content:Vector.<BitmapData>;

    public var m_ContentAlign:int;



    //ボタン

    public var m_ButtonManager:ButtonManager = new ButtonManager();



    //Slide

    public var m_PushFlag:Boolean = false;

//    public var m_SrcTouchYXNumber = 0;

//    public var m_DstTouchX:Number = 0;

    public var m_SrcTouchY:Number = 0;

    public var m_DstTouchY:Number = 0;

    public var m_ScrollGap:Number = 0;





    //==Function==



    //Init

    public function Popup_Scroll(in_Type:int, in_Title:String, in_MesList:Vector.<String>, in_ContentAlign:int = -1){

        super();



        //Param

        {

            m_Type = in_Type;



            if(0 <= in_ContentAlign){

                m_ContentAlign = in_ContentAlign;

            }else{

                m_ContentAlign = FontText.ALIGN_LEFT;

            }



            m_ContentGap = (in_Type == TYPE_STAGESELECT)? CONTENT_GAP_STAGESELECT: CONTENT_GAP_NORMAL;

        }



        var bmd_ori:BitmapData = ImageManager.m_BitmapData_Ori;

        var bmd:BitmapData;

        var rad_x:int;

        var rad_y:int;

        var w:int;

        var h:int;

        var ori_x:int;

        var ori_y:int;

        var ori_w:int;

        var ori_h:int;



        const HeaderH:int = 64;

        const FooterH:int = 8;



        const offset:int = 0;//8;



        const TotalW:int = GameMainWonderfl.VIEW_W - 2*offset;

        const TotalH:int = GameMainWonderfl.VIEW_H - 2*offset - GameMainWonderfl.AD_H;



        var ContentAreaH:int = TotalH - HeaderH - FooterH;



        //Layer

        {

            addChild(m_Layer_Root);

            m_Layer_Root.y = GameMainWonderfl.AD_H;



            m_Layer_Root.addChild(m_Layer_BG);



//            m_Layer_Content.x = GameMainWonderfl.VIEW_W/2;

//            m_Layer_Content.y = 88;

            m_Layer_Content.y = HeaderH + offset;

            m_Layer_Content.scrollRect = new Rectangle(-GameMainWonderfl.VIEW_W/2, -m_ContentGap/2, GameMainWonderfl.VIEW_W, ContentAreaH);

            m_Layer_Root.addChild(m_Layer_Content);



            m_Layer_Content.addChild(m_Layer_Scroll);

        }



        //BG

        {

            if(s_BitmapData_BG == null){

                var mtx:Matrix = new Matrix();



                s_BitmapData_BG = new BitmapData(TotalW, TotalH, true, 0x00000000);



                rad_x = 12;

                rad_y = 12;

                w = TotalW;

                h = HeaderH;

                ori_x = 80 + 64*2;

                ori_y = 0;

                ori_w = 64;

                ori_h = 64;

                s_BitmapData_BG.draw(NinePatch.Create(bmd_ori, rad_x, rad_y, w, h, ori_x, ori_y, ori_w, ori_h), mtx);

                mtx.ty += h;



                rad_x = 12;

                rad_y = 12;

                w = TotalW;

                h = TotalH - HeaderH;

                ori_x = 80 + 64*2;

                ori_y = 64;

                ori_w = 64;

                ori_h = 64;

                s_BitmapData_BG.draw(NinePatch.Create(bmd_ori, rad_x, rad_y, w, h, ori_x, ori_y, ori_w, ori_h), mtx);

                mtx.ty += h;



            }



            var bmp_bg:Bitmap = new Bitmap(s_BitmapData_BG);

            bmp_bg.x = offset;

            bmp_bg.y = offset;

            m_Layer_BG.addChild(bmp_bg);

        }



        //Title

        {

            m_BitmapData_Title = new BitmapData(GameMainWonderfl.VIEW_W, 64, true, 0x00000000);

            FontText.DrawText(m_BitmapData_Title, in_Title, m_BitmapData_Title.width/2, m_BitmapData_Title.height/2, 32, 0x000000);

            var bmp_title:Bitmap = new Bitmap(m_BitmapData_Title);

            bmp_title.y = 8;

            m_Layer_Root.addChild(bmp_title);

        }



        //Content

        {

            if(s_NinePatch_Button_Content == null){

                rad_x = 12;

                rad_y = 12;

                w = PLATE_W - 64;

                h = PLATE_H;

                ori_x = 16*5 + 64;

                ori_y = 0;

                ori_w = 64;

                ori_h = 64;



                s_NinePatch_Button_Content = NinePatch.Create(bmd_ori, rad_x, rad_y, w, h, ori_x, ori_y, ori_w, ori_h);

            }



            var item_list:Vector.<String> = in_MesList;

//                new <String>["AA", "BB", "CC"];//!!test



            var num:int = item_list.length;

            m_BitmapData_Content = new Vector.<BitmapData>(num);

            var src_rect:Rectangle = new Rectangle(0,0,PLATE_W,PLATE_H);

            var dst_point:Point = new Point(0,0);

            for(var i:int = 0; i < num; ++i){

                //Frame

                {

                    bmd = new BitmapData(PLATE_W, PLATE_H, true, 0x00000000);



                    src_rect.x = 0;

                    src_rect.y = 0;

                    src_rect.width = PLATE_W - 64;

                    dst_point.x = 64;

                    bmd.copyPixels(s_NinePatch_Button_Content.m_BitmapData, src_rect, dst_point);



                    switch(m_Type){

                    case TYPE_PAUSE:

                    case TYPE_RESULT:

                        switch(i){

                        case 0: src_rect.x = 16*5 + 64*0; src_rect.y = 64*0; break;

                        case 1: src_rect.x = 16*5 + 64*0; src_rect.y = 64*1; break;

                        case 2: src_rect.x = 16*5 + 64*1; src_rect.y = 64*1; break;

                        }

                        break;

                    case TYPE_STAGESELECT:

                        src_rect.x = 16*5 + 64*0; src_rect.y = 64*0; break;

                        break;

                    }

                    src_rect.width = 64;

                    dst_point.x = 0;

                    bmd.copyPixels(bmd_ori, src_rect, dst_point);

                }



                switch(m_ContentAlign){

                case FontText.ALIGN_LEFT:

                    FontText.DrawText(bmd, item_list[i], 64+8, bmd.height/2, 32, 0x000000, m_ContentAlign);

                    break;

                case FontText.ALIGN_CENTER:

                    FontText.DrawText(bmd, item_list[i], bmd.width/2, bmd.height/2, 32, 0x000000, m_ContentAlign);

                    break;

                case FontText.ALIGN_RIGHT:

                    //No Support

                    break;

                }

                var button_content:Button = new Button(bmd);



                button_content.x = 0;//GameMainWonderfl.VIEW_W/2;

                button_content.y = i * m_ContentGap;

                m_Layer_Scroll.addChild(button_content);



                m_ButtonManager.AddButton(button_content);



                m_BitmapData_Content[i] = bmd;

            }

        }



        //Slide

        {

            m_ScrollGap = Math.min(ContentAreaH - in_MesList.length * m_ContentGap, 0);

        }

    }



    //Update

    override public function Update(in_DeltaTime:Number):void{

        m_ButtonManager.Update(in_DeltaTime);

    }



    //Touch

    override public function OnMouseDown():void{

//        m_SrcTouchX = m_DstTouchX = m_Layer_Content.mouseX;

        m_SrcTouchY = m_DstTouchY = m_Layer_Content.mouseY;

        m_PushFlag = true;



        m_ButtonManager.OnMouseDown();

    }

    override public function OnMouseMove():void{

        CheckSlide();



        m_ButtonManager.OnMouseMove();

    }

    override public function OnMouseUp():void{

        m_PushFlag = false;



        var index:int = m_ButtonManager.OnMouseUp();



        if(index < 0){//No Select

            return;

        }



        OnSelect(index);

    }

    protected function OnSelect(in_Index:int):void{

        //override

    }



    //

    public function CheckSlide():void{

        if(! m_PushFlag){

            return;

        }



//        var last_touch_x:int = m_Layer_Content.mouseX;

        var last_touch_y:int = m_Layer_Content.mouseY;



        //Slide

        m_Layer_Scroll.y += last_touch_y - m_DstTouchY;

        if(0 < m_Layer_Scroll.y){m_Layer_Scroll.y = 0;}

        if(m_Layer_Scroll.y < m_ScrollGap){m_Layer_Scroll.y = m_ScrollGap;}



        //一定以上スライドさせたらボタンの反応を無効化

        if(m_ContentGap/2 < Math.abs(m_DstTouchY - m_SrcTouchY)){

            m_ButtonManager.Cancel();

        }



//        m_DstTouchX = last_touch_x;

        m_DstTouchY = last_touch_y;

    }

}





//Popup : Result

class Popup_Result extends Popup_Scroll

{

    //==Var==



    public var m_SelectedIndex:int = -1;



    public var m_IsClear:Boolean;





    //==Function==



    //Init

    public function Popup_Result(in_IsClear:Boolean){

        super(Popup_Scroll.TYPE_RESULT, GetTitle(in_IsClear), GetMesList(in_IsClear));



        m_IsClear = in_IsClear;

    }



    //

    public function GetTitle(in_IsClear:Boolean):String{

        if(in_IsClear){

            return Util.IsJapanese()? "クリア!": "Clear!";

        }else{

            return Util.IsJapanese()? "失敗...": "Fail...";

        }

    }



    //

    public function GetMesList(in_IsClear:Boolean):Vector.<String>{

        var item_list_clear_jp:Vector.<String> =

            new <String>["次へ", "もう一度", "ステージ選択"];

        var item_list_clear_en:Vector.<String> =

            new <String>["Next Stage", "Replay", "Select Stage"];

        var item_list_fail_jp:Vector.<String> =

            new <String>["もう一度", "ステージ選択"];

        var item_list_fail_en:Vector.<String> =

            new <String>["Replay", "Select Stage"];



        if(in_IsClear){

            return Util.IsJapanese()? item_list_clear_jp: item_list_clear_en;

        }else{

            return Util.IsJapanese()? item_list_fail_jp: item_list_fail_en;

        }

    }



    //Touch

    override protected function OnSelect(in_Index:int):void{

        if(m_IsClear){

            switch(in_Index){

            case 0:

                //++

                GameMainWonderfl.s_MapIter++;

                if(GameMainWonderfl.MAP.length <= GameMainWonderfl.s_MapIter){

                    GameMainWonderfl.s_MapIter = 0;

                }

                //Reset

                GameMainWonderfl.Instance().Reset(true);

                //End

                m_EndFlag = true;

                break;

            case 1:

                //Reset

                GameMainWonderfl.Instance().Reset(false);

                //End

                m_EndFlag = true;

                break;

            case 2:

                //Menu

                GameMainWonderfl.Instance().Push(new Popup_StageSelect());

                //End

                m_EndFlag = true;

                break;

            }

        }else{

            switch(in_Index){

            case 0:

                //Reset

                GameMainWonderfl.Instance().Reset(false);

                //End

                m_EndFlag = true;

                break;

            case 1:

                //Menu

                GameMainWonderfl.Instance().Push(new Popup_StageSelect());

                //End

                m_EndFlag = true;

                break;

            }

        }



        m_SelectedIndex = in_Index;

    }



    //Update

    override public function Update(in_DeltaTime:Number):void{

        super.Update(in_DeltaTime);



/*

        switch(m_SelectedIndex){

        case 1:

            GlobalData.Instance.ChangeTask(GlobalData.TASK_MENU_GROUND);

            break;

        }

//*/

    }



}





//Popup : Pause

class Popup_Pause extends Popup_Scroll

{

    //==Var==



    public var m_SelectedIndex:int = -1;





    //==Function==



    //Init

    public function Popup_Pause(){

        super(Popup_Scroll.TYPE_PAUSE, Util.IsJapanese()? "メニュー": "Menu", GetMesList());

    }



    //

    public function GetMesList():Vector.<String>{

        var item_list_jp:Vector.<String> =

            new <String>["続ける", "最初から", "ステージ選択"];

        var item_list_en:Vector.<String> =

            new <String>["Continue", "Restart", "Select Stage"];



        return Util.IsJapanese()? item_list_jp: item_list_en;

    }



    //Touch

    override protected function OnSelect(in_Index:int):void{

        switch(in_Index){

        case 0:

            //End

            m_EndFlag = true;

            break;

        case 1:

            //Reset

            GameMainWonderfl.Instance().Reset(false);

            //End

            m_EndFlag = true;

            break;

        case 2:

            //Menu

            GameMainWonderfl.Instance().Push(new Popup_StageSelect());

            //End

            m_EndFlag = true;

            break;

        }



        m_SelectedIndex = in_Index;

    }



    //Update

    override public function Update(in_DeltaTime:Number):void{

        super.Update(in_DeltaTime);



/*

        switch(m_SelectedIndex){

        case 1:

            GlobalData.Instance.ChangeTask(GlobalData.TASK_MENU_GROUND);

            break;

        }

//*/

    }



}





//Popup : StageSelect

class Popup_StageSelect extends Popup_Scroll

{

    //==Var==



    public var m_SelectedIndex:int = -1;





    //==Function==



    //Init

    public function Popup_StageSelect(){

        super(Popup_Scroll.TYPE_STAGESELECT, Util.IsJapanese()? "ステージ選択": "Select Stage", GetMesList());

    }



    //

    public function GetMesList():Vector.<String>{

        var num:int = GameMainWonderfl.MAP.length;



        var item_list:Vector.<String> = new Vector.<String>(num);



        for(var i:int = 0; i < num; ++i){

            item_list[i] = GameMainWonderfl.MAP[i].name;

        }



        return item_list;

    }



    //Touch

    override protected function OnSelect(in_Index:int):void{

        //Index

        GameMainWonderfl.s_MapIter = in_Index;

        if(GameMainWonderfl.MAP.length <= GameMainWonderfl.s_MapIter){

            GameMainWonderfl.s_MapIter = 0;

        }

        //Reset

        GameMainWonderfl.Instance().Reset(true);

        //End

        m_EndFlag = true;





        m_SelectedIndex = in_Index;

    }



    //Update

    override public function Update(in_DeltaTime:Number):void{

        super.Update(in_DeltaTime);



/*

        switch(m_SelectedIndex){

        case 1:

            GlobalData.Instance.ChangeTask(GlobalData.TASK_MENU_GROUND);

            break;

        }

//*/

    }



}





//Base : StageName

class Popup_StageName extends Popup

{

    //==Const==



    //Time

    static public const TIME_WAIT    :Number = 2.0;

    static public const TIME_FADE    :Number = 1.0;



    //Mode

    static public var s_ModeIter:int = 0;

    static public const MODE_WAIT    :int = s_ModeIter++;

    static public const MODE_FADE    :int = s_ModeIter++;





    //==Var==



    //Time

    public var m_Timer:Number = 0;



    //Mode

    public var m_Mode:int = 0;





    //==Function==



    //Init

    public function Popup_StageName(in_StageName:String){

        super();



        var bmd:BitmapData = new BitmapData(GameMainWonderfl.VIEW_W, GameMainWonderfl.VIEW_H, false, 0x000000);

        FontText.DrawText(bmd, in_StageName, bmd.width/2, bmd.height/2, 32, 0xFFFFFF);

        addChild(new Bitmap(bmd));

    }



    //Update

    override public function Update(in_DeltaTime:Number):void{

        m_Timer += in_DeltaTime;



        switch(m_Mode){

        case MODE_WAIT:

            if(TIME_WAIT <= m_Timer){

                m_Timer -= TIME_WAIT;

                ++m_Mode;

            }

            break;

        case MODE_FADE:

            {

                var ratio:Number = m_Timer / TIME_FADE;

                if(TIME_FADE <= m_Timer){

                    ratio = 1;

                    m_EndFlag = true;

                }



                this.alpha = 1 - ratio;

            }

            break;

        }

    }

}





class Button extends Sprite

{

    //==Const==



    static public const SCALE_OFF    :Number = 1;

    static public const SCALE_ON    :Number = 1.1;





    //==Var==



    //Graphic

    public var m_Layer_Scale:Sprite = new Sprite();

    public var m_Bitmap:Bitmap;



    //Flag

    public var m_PressFlag:Boolean = false;





    //==Function==



    //Init

    public function Button(in_BMD:BitmapData){

/*

        m_Layer_Scale.x = in_BMD.width/2;

        m_Layer_Scale.y = in_BMD.height/2;

        addChild(m_Layer_Scale);

/*/

        addChild(m_Layer_Scale);

//*/



        var bmp:Bitmap = new Bitmap(in_BMD);

        bmp.x = -in_BMD.width/2;

        bmp.y = -in_BMD.height/2;

        m_Layer_Scale.addChild(bmp);

        m_Bitmap = bmp;

    }



    //Update

    public function Update(in_DeltaTime:Number):void{

        var lerp_ratio:Number = 0.9;

        var scl:Number = Util.Lerp(m_Layer_Scale.scaleX, (m_PressFlag? SCALE_ON: SCALE_OFF), lerp_ratio);

        m_Layer_Scale.scaleX = m_Layer_Scale.scaleY = scl;

    }



    //Range

    public function IsRectIn():Boolean{

        return m_Bitmap.bitmapData.rect.contains(m_Bitmap.mouseX, m_Bitmap.mouseY);

    }



    //

    public function SetPressFlag(in_Flag:Boolean):void{

        m_PressFlag = in_Flag;

    }

}





class ButtonManager

{

    //==Var==



    public var m_Button:Vector.<Button> = new Vector.<Button>();



    public var m_TouchIndex:int = -1;





    //==Function==



    //Register

    public function AddButton(in_Button:Button):void{

        m_Button.push(in_Button);

    }



    //Update

    public function Update(in_DeltaTime:Number):void{

        var num:int = m_Button.length;

        for(var i:int = 0; i < num; ++i){

            var button:Button = m_Button[i];

            button.Update(in_DeltaTime);

        }

    }



    //Touch

    public function OnMouseDown():void{

        m_TouchIndex = -1;



        var num:int = m_Button.length;

        for(var i:int = 0; i < num; ++i){

            var button:Button = m_Button[i];

            var parent:DisplayObjectContainer = button.parent;

            if(IsRangeIn(button)){

                m_TouchIndex = i;



                button.SetPressFlag(true);



                break;

            }

        }

    }

    public function OnMouseMove():void{

        if(0 <= m_TouchIndex){

            var button:Button = m_Button[m_TouchIndex];

            if(! button.IsRectIn()){

                button.SetPressFlag(false);

                m_TouchIndex = -1;

            }

        }

    }

    public function OnMouseUp():int{

        var touch_index:int = m_TouchIndex;



        if(0 <= m_TouchIndex){

            var button:Button = m_Button[m_TouchIndex];

            button.SetPressFlag(false);

        }



        m_TouchIndex = -1;



        return touch_index;

    }



    //Check Range

    public function IsRangeIn(in_Button:Button):Boolean{

        //そもそもボタンの範囲外なら反応しない

        if(! in_Button.IsRectIn()){

            return false;

        }



        //親のどこかのScrollRectの範囲外になってたら反応しない(スクロール対応)

        for(var content:DisplayObjectContainer = in_Button.parent; content != null; content = content.parent){

            if(content.scrollRect == null){

                continue;

            }



            if(! content.scrollRect.contains(content.mouseX / content.scaleX, content.mouseY / content.scaleY)){

                return false;

            }

        }



        return true;

    }



    //Cancel

    //- 主にボタンを押しながらのスライド用

    public function Cancel():void{

        if(0 <= m_TouchIndex){

            var button:Button = m_Button[m_TouchIndex];

            button.SetPressFlag(false);

        }



        m_TouchIndex = -1;

    }

}







//#Image

class ImageManager

{

    //==BG==



    //#Graphic

    static public var m_GraphicIndexIter:int = 0;



    static public const GRAPHIC_INDEX_BG:int            = m_GraphicIndexIter++;



    static public const GRAPHIC_INDEX_WALL:int            = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_WALL_X:int        = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_WALL_Y:int        = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_WALL_XorY:int        = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_WALL_XandY:int    = m_GraphicIndexIter++;



    static public const GRAPHIC_INDEX_NEEDLE:int        = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_NEEDLE_X:int        = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_NEEDLE_Y:int        = m_GraphicIndexIter++;

    static public const GRAPHIC_INDEX_NEEDLE_XY:int        = m_GraphicIndexIter++;



    static public const GRAPHIC_INDEX_NUM:int            = m_GraphicIndexIter;





    //#Path

    static public var m_PathIndexIter:int = 0;



    static public const PATH_INDEX_NONE:int                 = m_PathIndexIter++;



    static public const PATH_INDEX_WALL_X:int            = m_PathIndexIter++;

    static public const PATH_INDEX_WALL_Y:int            = m_PathIndexIter++;

    static public const PATH_INDEX_WALL_XorY:int        = m_PathIndexIter++;

    static public const PATH_INDEX_WALL_XandY:int        = m_PathIndexIter++;



    static public const PATH_INDEX_DAMAGE_X:int            = m_PathIndexIter++;

    static public const PATH_INDEX_DAMAGE_Y:int            = m_PathIndexIter++;

    static public const PATH_INDEX_DAMAGE_XorY:int        = m_PathIndexIter++;

    static public const PATH_INDEX_DAMAGE_XandY:int        = m_PathIndexIter++;



    static public const PATH_INDEX_WALL_X_DAMAGE_Y:int    = m_PathIndexIter++;

    static public const PATH_INDEX_WALL_Y_DAMAGE_X:int    = m_PathIndexIter++;



    static public const PATH_INDEX_NUM:int                 = m_PathIndexIter;



    //#Offset:地形からどれだけ浮かせるか

    static public const PATH_OFFSET:int = 12;





    //#enum:Quater

    static public const LU:int = 0;

    static public const RU:int = 1;

    static public const LD:int = 2;

    static public const RD:int = 3;



    //#enum:Pos

    static public const POS_X:int = 0;

    static public const POS_Y:int = 1;





    //#Graphic

    static public var m_BitmapData_Ori:BitmapData;

    static public var m_BitmapData_Path:BitmapData;



    //#Mapping

    static public var GRAPHIC_INDEX_TO_POS:Array;

    static public var PATH_INDEX_TO_POS:Array;





    //#Palette

    static public var m_Palette_ForView:Array;

    static public var m_Palette_ForPath:Array;





    //==Button==



    //

    static public var m_BitmapData_Pause:BitmapData;





    //==Player==



    //#Bitmap

    static public var m_PlayerBitmap:Array = new Array(3);





    //==Goal==



    //

    static public var m_BirmapData_Goal:BitmapData;





    //==Utility==



    static public const POS_ZERO:Point = new Point(0,0);





    //#Init

    static public function Init(in_Graphic:DisplayObject):void{

        var x:int, y:int, i:int;



        //m_BitmapData_Ori

        {

            m_BitmapData_Ori = new BitmapData(512, 512, true, 0x00000000);

            m_BitmapData_Ori.draw(in_Graphic);

        }



        //m_BitmapData_Path

        {

            var rect:Rectangle = new Rectangle(0,0,1,1);



            m_BitmapData_Path = new BitmapData(256, 256, false, 0x000000);



            //U

            rect.x = PATH_OFFSET; rect.y = PATH_OFFSET; rect.width = 3*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_U);

            //D

            rect.x = PATH_OFFSET; rect.y = 3*16-1-PATH_OFFSET; rect.width = 3*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_D);

            //L

            rect.x = PATH_OFFSET; rect.y = PATH_OFFSET; rect.width = 1; rect.height = 3*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_L);

            //R

            rect.x = 3*16-1-PATH_OFFSET; rect.y = PATH_OFFSET; rect.width = 1; rect.height = 3*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_R);



            //UorL

            m_BitmapData_Path.setPixel(PATH_OFFSET,            PATH_OFFSET,        Player.PATH_UorL);

            //UorR

            m_BitmapData_Path.setPixel(3*16-1-PATH_OFFSET,    PATH_OFFSET,        Player.PATH_UorR);

            //DorL

            m_BitmapData_Path.setPixel(PATH_OFFSET,            3*16-1-PATH_OFFSET,    Player.PATH_DorL);

            //DorR

            m_BitmapData_Path.setPixel(3*16-1-PATH_OFFSET,    3*16-1-PATH_OFFSET,    Player.PATH_DorR);



            //UandL

            rect.x = 3*16; rect.y = PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_U);

            rect.x = 3*16+PATH_OFFSET; rect.y = 0; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_L);

            m_BitmapData_Path.setPixel(3*16+PATH_OFFSET,    PATH_OFFSET,        Player.PATH_UandL);

            //UandR

            rect.x = 5*16-1-PATH_OFFSET; rect.y = PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_U);

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 0; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_R);

            m_BitmapData_Path.setPixel(5*16-1-PATH_OFFSET,    PATH_OFFSET,        Player.PATH_UandR);

            //DandL

            rect.x = 3*16; rect.y = 2*16-1-PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_D);

            rect.x = 3*16+PATH_OFFSET; rect.y = 2*16-1-PATH_OFFSET; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_L);

            m_BitmapData_Path.setPixel(3*16+PATH_OFFSET,    2*16-1-PATH_OFFSET,    Player.PATH_DandL);

            //DandR

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 2*16-1-PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_D);

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 2*16-1-PATH_OFFSET; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_R);

            m_BitmapData_Path.setPixel(5*16-1-PATH_OFFSET,    2*16-1-PATH_OFFSET,    Player.PATH_DandR);



            //Damage:U

            rect.x = PATH_OFFSET; rect.y = 3*16+PATH_OFFSET; rect.width = 3*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            //Damage:D

            rect.x = PATH_OFFSET; rect.y = 6*16-1-PATH_OFFSET; rect.width = 3*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            //Damage:L

            rect.x = PATH_OFFSET; rect.y = 3*16+PATH_OFFSET; rect.width = 1; rect.height = 3*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            //Damage:R

            rect.x = 3*16-1-PATH_OFFSET; rect.y = 3*16+PATH_OFFSET; rect.width = 1; rect.height = 3*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);



            //Damage:UandL

            rect.x = 3*16; rect.y = 3*16+PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 3*16+PATH_OFFSET; rect.y = 3*16; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            m_BitmapData_Path.setPixel(3*16+PATH_OFFSET,    PATH_OFFSET,        Player.PATH_UandL);

            //Damage:UandR

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 3*16+PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 3*16; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            m_BitmapData_Path.setPixel(5*16-1-PATH_OFFSET,    PATH_OFFSET,        Player.PATH_UandR);

            //Damage:DandL

            rect.x = 3*16; rect.y = 5*16-1-PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 3*16+PATH_OFFSET; rect.y = 5*16-1-PATH_OFFSET; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            m_BitmapData_Path.setPixel(3*16+PATH_OFFSET,    2*16-1-PATH_OFFSET,    Player.PATH_DandL);

            //Damage:DandR

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 5*16-1-PATH_OFFSET; rect.width = PATH_OFFSET+1; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 5*16-1-PATH_OFFSET; rect.y = 5*16-1-PATH_OFFSET; rect.width = 1; rect.height = PATH_OFFSET+1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            m_BitmapData_Path.setPixel(5*16-1-PATH_OFFSET,    2*16-1-PATH_OFFSET,    Player.PATH_DandR);



            //Damage+Wall

            rect.x = 5*16+PATH_OFFSET; rect.y = 0*16+PATH_OFFSET; rect.width = 1; rect.height = 2*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_L);

            rect.x = 7*16-1-PATH_OFFSET; rect.y = 0*16+PATH_OFFSET; rect.width = 1; rect.height = 2*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_R);

            rect.x = 5*16+PATH_OFFSET; rect.y = 2*16+PATH_OFFSET; rect.width = 2*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_U);

            rect.x = 5*16+PATH_OFFSET; rect.y = 4*16-1-PATH_OFFSET; rect.width = 2*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_D);

            rect.x = 5*16+PATH_OFFSET; rect.y = 0*16+PATH_OFFSET; rect.width = 2*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 5*16+PATH_OFFSET; rect.y = 2*16-1-PATH_OFFSET; rect.width = 2*16-2*PATH_OFFSET; rect.height = 1;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 5*16+PATH_OFFSET; rect.y = 2*16+PATH_OFFSET; rect.width = 1; rect.height = 2*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

            rect.x = 7*16-1-PATH_OFFSET; rect.y = 2*16+PATH_OFFSET; rect.width = 1; rect.height = 2*16-2*PATH_OFFSET;

            m_BitmapData_Path.fillRect(rect, Player.PATH_DAMAGE);

        }



        //GRAPHIC_INDEX_TO_POS

        {//GRAPHIC_INDEX_~から画像の位置へのマッピング(さらにどの隅での処理かも含む)(そして左から何マス目、上から何マス目、という指定)

            GRAPHIC_INDEX_TO_POS = new Array(GRAPHIC_INDEX_NUM);



            //[LU][RU][LD][RD]



            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_BG]            = [[3,2], [3,2], [3,2], [3,2]];



            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_WALL]        = [[1,1], [1,1], [1,1], [1,1]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_WALL_X]        = [[0,1], [2,1], [0,1], [2,1]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_WALL_Y]        = [[1,0], [1,0], [1,2], [1,2]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_WALL_XorY]    = [[0,0], [2,0], [0,2], [2,2]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_WALL_XandY]    = [[3,0], [4,0], [3,1], [4,1]];



            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_NEEDLE]        = [[3,3], [4,3], [3,4], [4,4]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_NEEDLE_X]    = [[0,4], [2,4], [0,4], [2,4]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_NEEDLE_Y]    = [[1,3], [1,3], [1,5], [1,5]];

            GRAPHIC_INDEX_TO_POS[GRAPHIC_INDEX_NEEDLE_XY]    = [[0,3], [2,3], [0,5], [2,5]];

        }



        //PATH_INDEX_TO_POS

        {//PATH_INDEX_~からパス用画像の位置へのマッピング

            PATH_INDEX_TO_POS = new Array(PATH_INDEX_NUM);



            //[LU][RU][LD][RD]



            PATH_INDEX_TO_POS[PATH_INDEX_NONE]                = [[1,1], [1,1], [1,1], [1,1]];



            PATH_INDEX_TO_POS[PATH_INDEX_WALL_X]            = [[0,1], [2,1], [0,1], [2,1]];

            PATH_INDEX_TO_POS[PATH_INDEX_WALL_Y]            = [[1,0], [1,0], [1,2], [1,2]];

            PATH_INDEX_TO_POS[PATH_INDEX_WALL_XorY]            = [[0,0], [2,0], [0,2], [2,2]];

            PATH_INDEX_TO_POS[PATH_INDEX_WALL_XandY]        = [[3,0], [4,0], [3,1], [4,1]];



            PATH_INDEX_TO_POS[PATH_INDEX_DAMAGE_X]            = [[0,4], [2,4], [0,4], [2,4]];

            PATH_INDEX_TO_POS[PATH_INDEX_DAMAGE_Y]            = [[1,3], [1,3], [1,5], [1,5]];

            PATH_INDEX_TO_POS[PATH_INDEX_DAMAGE_XorY]        = [[0,3], [2,3], [0,5], [2,5]];

            PATH_INDEX_TO_POS[PATH_INDEX_DAMAGE_XandY]        = [[3,3], [4,3], [3,4], [4,4]];



            PATH_INDEX_TO_POS[PATH_INDEX_WALL_X_DAMAGE_Y]    = [[5,0], [6,0], [5,1], [6,1]];

            PATH_INDEX_TO_POS[PATH_INDEX_WALL_Y_DAMAGE_X]    = [[5,2], [6,2], [5,3], [6,3]];

        }



        //m_Palette_ForView

        {

            m_Palette_ForView = new Array(256);



            var index_graphic:int = GRAPHIC_INDEX_BG;

            for(i = 0; i < 256; i++){

                //区切りごとにindexを変更。次の区切りまではその値をセット

                switch(i){

                case 0:

                case 6:

                case 18:

                case 24:

                    index_graphic = GRAPHIC_INDEX_BG; break;

                case 3:

                case 21:

                    index_graphic = GRAPHIC_INDEX_NEEDLE_Y; break;

                case 9:

                case 15:

                    index_graphic = GRAPHIC_INDEX_NEEDLE_X; break;

                case 12:

                    index_graphic = GRAPHIC_INDEX_NEEDLE_XY; break;

                case 27:

                    index_graphic = GRAPHIC_INDEX_NEEDLE; break;

                case 54:

                case 63:

                    index_graphic = GRAPHIC_INDEX_WALL_XorY; break;

                case 60:

                case 69:

                    index_graphic = GRAPHIC_INDEX_WALL_X; break;

                case 72:

                    index_graphic = GRAPHIC_INDEX_WALL_Y; break;

                case 78:

                    index_graphic = GRAPHIC_INDEX_WALL_XandY; break;

                case 80:

                    index_graphic = GRAPHIC_INDEX_WALL; break;

                }



                m_Palette_ForView[i] = index_graphic;

            }

        }



        //m_Palette_ForPath

        {

            m_Palette_ForPath = new Array(256);



            var index_path:int = GRAPHIC_INDEX_BG;

            for(i = 0; i < 256; i++){

                //区切りごとにindexを変更。次の区切りまではその値をセット

                switch(i){

                case 0:

                case 27:

                    index_path = PATH_INDEX_NONE; break;

                case 2:

                    index_path = PATH_INDEX_WALL_XandY; break;

                case 6:

                    index_path = PATH_INDEX_WALL_Y; break;

                case 18:

                    index_path = PATH_INDEX_WALL_X; break;

                case 24:

                    index_path = PATH_INDEX_WALL_XorY; break;

                case 3:

                    index_path = PATH_INDEX_DAMAGE_Y; break;

                case 21:

                    index_path = PATH_INDEX_WALL_X_DAMAGE_Y; break;

                case 9:

                    index_path = PATH_INDEX_DAMAGE_X; break;

                case 15:

                    index_path = PATH_INDEX_WALL_Y_DAMAGE_X; break;

                case 12:

                    index_path = PATH_INDEX_DAMAGE_XorY; break;

                case 1:

                    index_path = PATH_INDEX_DAMAGE_XandY; break;

                }



                m_Palette_ForPath[i] = index_path;

            }

        }



        //m_PlayerBitmap

        {

            var mtx:Matrix = new Matrix();

            //var rect:Rectangle = new Rectangle(0,0, 32,32);

            rect.width = rect.height = 32;



            for(i = 0; i < 3; i++){

                //Init

                m_PlayerBitmap[i] = new Bitmap(new BitmapData(24, 32, true, 0x00000000));



                //Pos

                m_PlayerBitmap[i].x = -24/2;

                m_PlayerBitmap[i].y = -29 + PATH_OFFSET;



                //Draw Graphic

                mtx.tx = -i*24;

                mtx.ty = -6*16;

                m_PlayerBitmap[i].bitmapData.draw(m_BitmapData_Ori, mtx);



                //Set Alpha

//                rect.x = i*24;

//                rect.y = 8*16;

//                m_PlayerBitmap[i].bitmapData.copyChannel(m_BitmapData_Ori, rect, POS_ZERO, BitmapDataChannel.RED, BitmapDataChannel.ALPHA);

            }

        }



        //m_BitmapData_Pause

        {

            m_BitmapData_Pause = new BitmapData(64, 64, true, 0x00000000);

            mtx.tx = -16*5 - 64*3;

            mtx.ty = 0;

            m_BitmapData_Pause.draw(m_BitmapData_Ori, mtx);

        }



        //m_BirmapData_Goal

        {

            m_BirmapData_Goal = new BitmapData(24, 32, true, 0x00000000);

            mtx.tx = 0;

            mtx.ty = -128;

            m_BirmapData_Goal.draw(m_BitmapData_Ori, mtx);

        }

    }



    //#Draw : BG

    static public function DrawBG(in_Map:Array, out_BitmapData_View:BitmapData, out_BitmapData_Path:BitmapData):void

    {

        var x:int, y:int, i:int;

        var mtx:Matrix = new Matrix();



        var NumX:int = in_Map[0].length;

        var NumY:int = in_Map.length;



        //Clear

        {

            out_BitmapData_View.fillRect(out_BitmapData_View.rect, 0x00000000);

            out_BitmapData_Path.fillRect(out_BitmapData_Path.rect, 0x00000000);

        }



        //Map => Bitmap_Base

        //Mapの要素を元に、「0:空白」「1:トゲ」「2:壁」というBitmapを生成

        var BitmapData_Base:BitmapData;

        {

            BitmapData_Base = new BitmapData(NumX, NumY, false, 0x000000);

            for(y = 0; y < NumY; y++){

                for(x = 0; x < NumX; x++){

                    var index:int = 0;//default(O, P, G)

                    {

                        switch(in_Map[y][x]){

                        case GameMainWonderfl.W:

                            index = 2;

                            break;

                        case GameMainWonderfl.X:

                            index = 1;

                            break;

                        }

                    }



                    BitmapData_Base.setPixel(x, y, index);

                }

            }

        }



        //Bitmap_Base => Bitmap_LU,Bitmap_RU,Bitmap_LD,Bitmap_RD

        //Bitmap_Baseを元に、四隅の隣接状況をそれぞれ求める(Uniqueな値になるようにする)

        var BitmapData_Quater:Array = new Array(4);

        {

            //Create Filter

            const filter:Array = [

                new ConvolutionFilter(3,3,

                    [//LU

                        1,  3,  0,

                        9, 27,  0,

                        0,  0,  0,

                    ]

                ),

                new ConvolutionFilter(3,3,

                    [//RU

                        0,  3,  1,

                        0, 27,  9,

                        0,  0,  0,

                    ]

                ),

                new ConvolutionFilter(3,3,

                    [//LD

                        0,  0,  0,

                        9, 27,  0,

                        1,  3,  0,

                    ]

                ),

                new ConvolutionFilter(3,3,

                    [//RD

                        0,  0,  0,

                        0, 27,  9,

                        0,  3,  1,

                    ]

                ),

            ];



            for(i = 0; i < 4; i++){

                //Init

                BitmapData_Quater[i] = new BitmapData(NumX, NumY, false, 0x000000);



                //Apply Filter

                BitmapData_Quater[i].applyFilter(BitmapData_Base, BitmapData_Base.rect, POS_ZERO, filter[i]);

            }

        }



        //Bitmap_LU,Bitmap_RU,Bitmap_LD,Bitmap_RD => ForView & ForPath

        //Uniqueな値から、対応するIndexへと変換する

        var BitmapData_ForView:Array = new Array(4);

        var BitmapData_ForPath:Array = new Array(4);

        {

            for(i = 0; i < 4; i++){

                //Init

                BitmapData_ForView[i] = new BitmapData(NumX, NumY, false, 0x000000);

                BitmapData_ForPath[i] = new BitmapData(NumX, NumY, false, 0x000000);



                //Apply Palette

                BitmapData_ForView[i].paletteMap(BitmapData_Quater[i], BitmapData_Quater[i].rect, POS_ZERO, null, null, m_Palette_ForView);

                BitmapData_ForPath[i].paletteMap(BitmapData_Quater[i], BitmapData_Quater[i].rect, POS_ZERO, null, null, m_Palette_ForPath);

            }

        }





        //Draw

        //上で求めたIndexに基づき描画

        {

            var rect:Rectangle = new Rectangle(0,0, 16,16);



            for(y = 0; y < NumY; y++){

                for(x = 0; x < NumX; x++){

                    for(i = 0; i < 4; i++){

                        rect.x = x * 32 + 16 * ((i&1)>>0);

                        rect.y = y * 32 + 16 * ((i&2)>>1);



                        //#view

                        mtx.tx = rect.x - 16 * GRAPHIC_INDEX_TO_POS[BitmapData_ForView[i].getPixel(x, y)][i][POS_X];

                        mtx.ty = rect.y - 16 * GRAPHIC_INDEX_TO_POS[BitmapData_ForView[i].getPixel(x, y)][i][POS_Y];

                        out_BitmapData_View.draw(m_BitmapData_Ori, mtx, null, null, rect);



                        //#Path

                        mtx.tx = rect.x - 16 * PATH_INDEX_TO_POS[BitmapData_ForPath[i].getPixel(x, y)][i][POS_X];

                        mtx.ty = rect.y - 16 * PATH_INDEX_TO_POS[BitmapData_ForPath[i].getPixel(x, y)][i][POS_Y];

                        out_BitmapData_Path.draw(m_BitmapData_Path, mtx, null, null, rect);

                    }

                }

            }

        }

    }



    //Image : Button : Pause

    static public function GetButtonBitmapData():BitmapData{

        return m_BitmapData_Pause;

    }



    //Image : Player

    static public function GetPlayerGraphic(in_Index:int):Bitmap{

        const Index2Index:Array = [0, 1, 2, 1];

        return m_PlayerBitmap[Index2Index[in_Index]];

    }



    //Image : Goal

    static public function CreateGoalGraphic():Bitmap{

        var result:Bitmap = new Bitmap(m_BirmapData_Goal);



        result.x = -m_BirmapData_Goal.width/2;

        result.y = -m_BirmapData_Goal.height/2;



        result.blendMode = BlendMode.ADD;



        return result;

    }

}





//#Player

class Player extends Sprite

{

    //==Const==



    //パス

    static public var PathIter:int = 0;

    static public const PATH_NONE:int    = PathIter++;

    static public const PATH_U:int        = PathIter++;

    static public const PATH_D:int        = PathIter++;

    static public const PATH_L:int        = PathIter++;

    static public const PATH_R:int        = PathIter++;

    static public const PATH_UorL:int    = PathIter++;

    static public const PATH_UorR:int    = PathIter++;

    static public const PATH_DorL:int    = PathIter++;

    static public const PATH_DorR:int    = PathIter++;

    static public const PATH_UandL:int    = PathIter++;

    static public const PATH_UandR:int    = PathIter++;

    static public const PATH_DandL:int    = PathIter++;

    static public const PATH_DandR:int    = PathIter++;

    static public const PATH_DAMAGE:int    = PathIter++;

    static public const PATH_NUM:int    = PathIter;



    //軸

    static public const AXIS_X:int = 0;

    static public const AXIS_Y:int = 1;

    static public const AXIS_NUM:int = 2;



    //方向

    static public const DIR_U:int = 0;

    static public const DIR_D:int = 1;

    static public const DIR_L:int = 2;

    static public const DIR_R:int = 3;

    static public const DIR_NUM:int = 4;



    //移動力

    static public const MOVE_POW:Number = 150.0;



    //地上での減速率

    static public const BREAK_RATIO:Number = 0.98;



    //ジャンプ速度

    static public const JUMP_VEL:Number = 120.0;



    //重力

    static public const GRAVITY:Number = 150.0;



    //入力

    static public var InputIter:int = 0;

    static public const INPUT_U:int        = InputIter++;

    static public const INPUT_D:int        = InputIter++;

    static public const INPUT_L:int        = InputIter++;

    static public const INPUT_R:int        = InputIter++;

    static public const INPUT_JUMP:int    = InputIter++;

    static public const INPUT_RESET:int    = InputIter++;

    static public const INPUT_NUM:int    = InputIter;



    //アニメーション

    static public const ANIM_NUM:int = 4;



    //移動

    static public const MOVE_NONE:uint    = 0x11;

    static public const MOVE_U:uint        = 0x11 - 0x10;

    static public const MOVE_D:uint        = 0x11 + 0x10;

    static public const MOVE_L:uint        = 0x11 - 0x01;

    static public const MOVE_R:uint        = 0x11 + 0x01;

    static public const MOVE_UL:uint    = 0x11 - 0x10 - 0x01;

    static public const MOVE_UR:uint    = 0x11 - 0x10 + 0x01;

    static public const MOVE_DL:uint    = 0x11 + 0x10 - 0x01;

    static public const MOVE_DR:uint    = 0x11 + 0x10 + 0x01;



    //パスによる移動方向の変化(初期化時に作成)

    static public var PALETTE_MOVE:Array = new Array(PATH_NUM);//[PATH_NUM][MOVE_XX] = MOVE_YY



    //Utility

    static public const POS_ZERO:Point = new Point(0,0);





    //==Var==



    //スタート位置(初期化、リセット用)

    public var m_StartPosX:int = 0;

    public var m_StartPosY:int = 0;



    //現在位置(小数点まで保持版)(でもなんか普通のxでも上手くいってる気がする)

    public var m_PosX:Number = 0;

    public var m_PosY:Number = 0;



    //現在速度

    public var m_VelX:Number = 0;

    public var m_VelY:Number = 0;



    //現在加速度

    public var m_AccX:Number = 0;

    public var m_AccY:Number = 0;



    //現在のパス

    public var m_PathIndex:int = PATH_NONE;



    //地面に居るか

    public var m_OnGround:Boolean = false;//最初は空中からスタートすると仮定



    //現在の姿勢(足→頭の方向)

    public var m_HeadDir:int = DIR_U;



    //入力

    public var m_Input:Array = new Array(INPUT_NUM);

    public var m_Input_Old:Array = new Array(INPUT_NUM);

    public var m_Input_Edge:Array = new Array(INPUT_NUM);



    //現在表示中の画像のIndex

    public var m_AnimIndex:Number = 0;



    //表示に使う画像

    public var m_Graphic:Array;



    //死んでいるか

    public var m_IsDead:Boolean = false;



    //移動処理用のもろもろ

    public var m_MoveList:BitmapData = new BitmapData(256, 1, false, MOVE_NONE);//1ドットずつ移動する処理の配列相当(移動方向の変換処理のためBitmapDataで)

    public var m_Util:BitmapData = new BitmapData(16, 1, false, MOVE_NONE);//汎用





    //==Function==



    //Init

    public function Player(){

        //Param

        {

            InitPaletteForMove();

        }



        //Init Later

        addEventListener(

            Event.ADDED_TO_STAGE,//stageに触れるようになるまで遅延

            Init

        );

    }



    //Init

    public function Init(e:Event=null):void{

        //Init Once Only

        {

            removeEventListener(Event.ADDED_TO_STAGE, Init);

        }



        //Input

        {

            stage.addEventListener(KeyboardEvent.KEY_DOWN, SetKeyFlag(true));

            stage.addEventListener(KeyboardEvent.KEY_UP,   SetKeyFlag(false));

//            stage.addEventListener(MouseEvent.MOUSE_DOWN,  OnMouseDown);

//            stage.addEventListener(MouseEvent.MOUSE_UP,    OnMouseUp);

        }



        //Graphic

        {

            m_Graphic = new Array(ANIM_NUM);

            for(var i:int = 0; i < ANIM_NUM; i++){

                m_Graphic[i] = ImageManager.GetPlayerGraphic(i);

            }

            addChild(m_Graphic[0]);

        }



        //Update

//        {//→本体で一括処理する

//            addEventListener(Event.ENTER_FRAME, Update);

//        }



        //残りはResetと同じ処理

        {

            Reset(this.x, this.y);

        }

    }



    //Init : Palette

    public function InitPaletteForMove():void{

        //PALETTE_MOVEの初期化

        //現在のパス位置に応じて移動方向を変えるパレットを準備



        //要素を変えないパレットの生成

        const createBasePalette:Function = function():Array{

            var arr:Array = new Array(256);

            for(var i:int = 0; i < 256; i++){

                arr[i] = i;

            }

            return arr;

        };



        //PATH_NONE:空中:移動を変更する必要がないのでそのままで

        PALETTE_MOVE[PATH_NONE] = createBasePalette();



        //PATH_U:天井走り中:上下方向の移動は無効化

        PALETTE_MOVE[PATH_U] = createBasePalette();

        PALETTE_MOVE[PATH_U][MOVE_U] = MOVE_NONE;

        PALETTE_MOVE[PATH_U][MOVE_D] = MOVE_NONE;

        PALETTE_MOVE[PATH_U][MOVE_UL] = MOVE_L;

        PALETTE_MOVE[PATH_U][MOVE_UR] = MOVE_R;

        PALETTE_MOVE[PATH_U][MOVE_DL] = MOVE_L;

        PALETTE_MOVE[PATH_U][MOVE_DR] = MOVE_R;



        //PATH_D:地面走り中:PATH_Uと同じなので、同じものを参照する

        PALETTE_MOVE[PATH_D] = PALETTE_MOVE[PATH_U];



        //PATH_L:壁走り中(壁が左にある):左右方向の移動は無効化

        PALETTE_MOVE[PATH_L] = createBasePalette();

        PALETTE_MOVE[PATH_L][MOVE_L] = MOVE_NONE;

        PALETTE_MOVE[PATH_L][MOVE_R] = MOVE_NONE;

        PALETTE_MOVE[PATH_L][MOVE_UL] = MOVE_U;

        PALETTE_MOVE[PATH_L][MOVE_UR] = MOVE_U;

        PALETTE_MOVE[PATH_L][MOVE_DL] = MOVE_D;

        PALETTE_MOVE[PATH_L][MOVE_DR] = MOVE_D;



        //PATH_R:壁走り中(壁が右にある):同じくPATH_Lを参照

        PALETTE_MOVE[PATH_R] = PALETTE_MOVE[PATH_L];



        //PATH_UorL:空間の左上隅:移動は右か下のみ

        PALETTE_MOVE[PATH_UorL] = createBasePalette();

        PALETTE_MOVE[PATH_UorL][MOVE_U] = MOVE_R;

        PALETTE_MOVE[PATH_UorL][MOVE_D] = MOVE_D;

        PALETTE_MOVE[PATH_UorL][MOVE_L] = MOVE_D;

        PALETTE_MOVE[PATH_UorL][MOVE_R] = MOVE_R;

        PALETTE_MOVE[PATH_UorL][MOVE_UL] = MOVE_NONE;

        PALETTE_MOVE[PATH_UorL][MOVE_UR] = MOVE_R;

        PALETTE_MOVE[PATH_UorL][MOVE_DL] = MOVE_D;

        PALETTE_MOVE[PATH_UorL][MOVE_DR] = MOVE_NONE;



        //PATH_UorR:空間の右上隅:移動は左か下のみ

        PALETTE_MOVE[PATH_UorR] = createBasePalette();

        PALETTE_MOVE[PATH_UorR][MOVE_U] = MOVE_L;

        PALETTE_MOVE[PATH_UorR][MOVE_D] = MOVE_D;

        PALETTE_MOVE[PATH_UorR][MOVE_L] = MOVE_L;

        PALETTE_MOVE[PATH_UorR][MOVE_R] = MOVE_D;

        PALETTE_MOVE[PATH_UorR][MOVE_UL] = MOVE_L;

        PALETTE_MOVE[PATH_UorR][MOVE_UR] = MOVE_NONE;

        PALETTE_MOVE[PATH_UorR][MOVE_DL] = MOVE_NONE;

        PALETTE_MOVE[PATH_UorR][MOVE_DR] = MOVE_D;



        //PATH_DorL:空間の左下隅:移動は右か上のみ

        PALETTE_MOVE[PATH_DorL] = createBasePalette();

        PALETTE_MOVE[PATH_DorL][MOVE_U] = MOVE_U;

        PALETTE_MOVE[PATH_DorL][MOVE_D] = MOVE_R;

        PALETTE_MOVE[PATH_DorL][MOVE_L] = MOVE_U;

        PALETTE_MOVE[PATH_DorL][MOVE_R] = MOVE_R;

        PALETTE_MOVE[PATH_DorL][MOVE_UL] = MOVE_U;

        PALETTE_MOVE[PATH_DorL][MOVE_UR] = MOVE_NONE;

        PALETTE_MOVE[PATH_DorL][MOVE_DL] = MOVE_NONE;

        PALETTE_MOVE[PATH_DorL][MOVE_DR] = MOVE_R;



        //PATH_DorR:空間の右下隅:移動は左か上のみ

        PALETTE_MOVE[PATH_DorR] = createBasePalette();

        PALETTE_MOVE[PATH_DorR][MOVE_U] = MOVE_U;

        PALETTE_MOVE[PATH_DorR][MOVE_D] = MOVE_L;

        PALETTE_MOVE[PATH_DorR][MOVE_L] = MOVE_L;

        PALETTE_MOVE[PATH_DorR][MOVE_R] = MOVE_U;

        PALETTE_MOVE[PATH_DorR][MOVE_UL] = MOVE_NONE;

        PALETTE_MOVE[PATH_DorR][MOVE_UR] = MOVE_U;

        PALETTE_MOVE[PATH_DorR][MOVE_DL] = MOVE_L;

        PALETTE_MOVE[PATH_DorR][MOVE_DR] = MOVE_NONE;



        //PATH_UandL:壁の右下隅:移動は左か上のみ→PATH_DorRと同じなので参照で済ませる

        PALETTE_MOVE[PATH_UandL] = PALETTE_MOVE[PATH_DorR];



        //PATH_UandR:壁の左下隅:PATH_DorLと同じ

        PALETTE_MOVE[PATH_UandR] = PALETTE_MOVE[PATH_DorL];



        //PATH_DandL:壁の右上隅:PATH_UorRと同じ

        PALETTE_MOVE[PATH_DandL] = PALETTE_MOVE[PATH_UorR];



        //PATH_DandR:壁の左上隅:PATH_UorLと同じ

        PALETTE_MOVE[PATH_DandR] = PALETTE_MOVE[PATH_UorL];



        //PATH_DAMAGE:ダメージエリア:変える必要もないのでNONEと同じで。

        PALETTE_MOVE[PATH_DAMAGE] = PALETTE_MOVE[PATH_NONE];

    }



    //Reset

    public function Reset(in_X:int, in_Y:int):void{

        //Pos

        {

            this.x = m_PosX = m_StartPosX = in_X;

            this.y = m_PosY = m_StartPosY = in_Y;

        }



        //Vel

        {

            m_VelX = 0;

            m_VelY = 0;

        }



        //Acc

        {

            m_AccX = 0;

            m_AccY = 0;

        }



        //現在のパス

        {

            //m_PathIndex = PATH_NONE;

            m_PathIndex = GameMainWonderfl.Instance().GetPathIndex(this.x, this.y);

        }



        //地面に居るか

        {

            m_OnGround = false;//最初は空中からスタートすると仮定

        }



        //死んでいるか

        {

            m_IsDead = false;

        }



        //姿勢

        {

            this.rotation = 0;

            this.scaleX = 1;

        }



        //Input

        {

            for(var i:int = 0; i < INPUT_NUM; i++){

                m_Input[i] = m_Input_Old[i] = m_Input_Edge[i] = false;

            }

        }



        //

        {

            m_HeadDir = DIR_U;

            m_MoveList.fillRect(m_MoveList.rect, MOVE_NONE);

            m_Util.fillRect(m_Util.rect, MOVE_NONE);

        }

    }



    //Input

    public function SetKeyFlag(in_Flag:Boolean):Function{

        const KEY_R:int = 82;



        return function(e:KeyboardEvent):void{

            switch(e.keyCode){

            case Keyboard.UP:        m_Input[INPUT_U] = in_Flag; break;

            case Keyboard.DOWN:        m_Input[INPUT_D] = in_Flag; break;

            case Keyboard.LEFT:        m_Input[INPUT_L] = in_Flag; break;

            case Keyboard.RIGHT:    m_Input[INPUT_R] = in_Flag; break;

            case Keyboard.SPACE:    m_Input[INPUT_JUMP] = in_Flag; break;

            case KEY_R:                m_Input[INPUT_RESET] = in_Flag; break;

            }

        };

    }



    //Touch

    public function OnMouseDown(e:MouseEvent):void{

        m_Input[INPUT_JUMP] = true;

    }

    public function OnMouseUp(e:MouseEvent):void{

        m_Input[INPUT_JUMP] = false;

    }



    //Update

    public function Update(e:Event=null):void{

        var DeltaTime:Number = 1/24.0;



        //Input

        {

            Update_Input();

        }



        //Check Reset

        {

            if(m_Input_Edge[INPUT_RESET]){

                //本当はリセットの入力管理は本体側に持たせるべきだが面倒なのでここで。

                GameMainWonderfl.Instance().Reset(false);



                return;

            }

        }



        //死んでたら以降の処理はしない

        {

/*

            if(m_IsDead){

                return;

            }

/*/

            //死亡フラグは不要かも

            if(GameMainWonderfl.Instance().IsEnd()){

                return;

            }

//*/

        }



        //Move

        {

            Update_Move(DeltaTime);

        }



        //Anim

        {

            Update_Anim(DeltaTime);

        }

    }



    //Update : Input

    public function Update_Input():void{

        //

        for(var i:int = 0; i < INPUT_NUM; i++){

            m_Input_Edge[i] = (m_Input[i] && !m_Input_Old[i]);

            m_Input_Old[i] = m_Input[i];

        }

    }



    //Update : Move

    public function Update_Move(in_DeltaTime:Number):void{

        var i:int, j:int;



        //Acc

        {

            m_AccX = 0;

            m_AccY = 0;



            if(m_OnGround){

                //着地中は入力を力として扱う



                //まずは中央値で初期化

                var Pow:uint = MOVE_NONE;



                //入力に応じた方向に力を加える

                if(m_Input_Edge[INPUT_JUMP]){

                    //ジャンプ

                    switch(m_HeadDir){

                    case DIR_U: m_VelY = -JUMP_VEL; break;

                    case DIR_D: m_VelY =  JUMP_VEL; break;

                    case DIR_L: m_VelX = -JUMP_VEL; break;

                    case DIR_R: m_VelX =  JUMP_VEL; break;

                    }

                }else{

                    //壁に沿った入力移動

/*

                    if(m_Input[INPUT_L]){Pow -= 0x01;}

                    if(m_Input[INPUT_R]){Pow += 0x01;}

                    if(m_Input[INPUT_U]){Pow -= 0x10;}

                    if(m_Input[INPUT_D]){Pow += 0x10;}

/*/

                    switch(m_PathIndex){

                    case PATH_D: if(0 < this.scaleX){Pow += 0x01;}else{Pow -= 0x01;} break;

                    case PATH_L: if(0 < this.scaleX){Pow += 0x10;}else{Pow -= 0x10;} break;

                    case PATH_U: if(0 < this.scaleX){Pow -= 0x01;}else{Pow += 0x01;} break;

                    case PATH_R: if(0 < this.scaleX){Pow -= 0x10;}else{Pow += 0x10;} break;

                    }

//*/



                    //そして現在の位置に応じて力の方向を変更

                    m_Util.setPixel(0,0, Pow);

                    ConvertByPath(m_Util);//, 0, 1

                    m_AccX = ((m_Util.getPixel(0,0) & 0x0F) >> 0) - 1;

                    m_AccY = ((m_Util.getPixel(0,0) & 0xF0) >> 4) - 1;

                    m_AccX *= MOVE_POW;

                    m_AccY *= MOVE_POW;



                    //地上に入れば自然減速する

                    {

                        if(m_OnGround){

                            m_VelX *= BREAK_RATIO;//m_HeadDirに応じて変えるのも面倒なので両方やっちゃう

                            m_VelY *= BREAK_RATIO;

                        }

                    }

                }

            }else{

                //空中ならば入力は受け付けず、重力しか働かない



                m_AccY = GRAVITY;

            }

        }



        //Vel

        {

            //Powに応じて加減速

            {

                m_VelX += m_AccX * in_DeltaTime;

                m_VelY += m_AccY * in_DeltaTime;

            }

        }



        //移動目標

        var RelTrgX:int;

        var RelTrgY:int;

        {

            m_PosX += m_VelX * in_DeltaTime;

            m_PosY += m_VelY * in_DeltaTime;



            RelTrgX = Math.round(m_PosX - this.x);

            RelTrgY = Math.round(m_PosY - this.y);

        }



        //端数

        var RestX:Number = (RelTrgX < 0)? RelTrgX - (m_PosX - this.x): (m_PosX - this.x) - RelTrgX;

        var RestY:Number = (RelTrgY < 0)? RelTrgY - (m_PosY - this.y): (m_PosY - this.y) - RelTrgY;



        //端数の反映方向

        m_Util.setPixel(0,0, (RelTrgX < 0)? MOVE_L: MOVE_R);

        m_Util.setPixel(1,0, (RelTrgY < 0)? MOVE_U: MOVE_D);



        //速度

        var AbsVelX:Number = Math.abs(m_VelX);

        var AbsVelY:Number = Math.abs(m_VelY);



        //速度の反映方向

        m_Util.setPixel(2,0, (m_VelX < 0)? MOVE_L: MOVE_R);

        m_Util.setPixel(3,0, (m_VelY < 0)? MOVE_U: MOVE_D);



        //1ドットずつの動きを求める

        var MoveNum:int;

        {

            //何ドット進むか

            var NumX:int = Math.abs(RelTrgX);

            var NumY:int = Math.abs(RelTrgY);

            MoveNum = NumX + NumY;



            //移動方向

            var MoveX:uint = (RelTrgX < 0)? MOVE_L: MOVE_R;

            var MoveY:uint = (RelTrgY < 0)? MOVE_U: MOVE_D;



            //初期化

            m_MoveList.fillRect(m_MoveList.rect, MOVE_NONE);//不要っちゃ不要



            //移動列を詰め込む

            //ちゃんとした直線にする意味も特にないので、「縦移動→横移動」みたいな感じで積む

            //ジャンプ処理がやりやすいように、必ず初手で空宙に移動するようにする(そうでないとジャンプ方向の移動が打ち消される)

            switch(m_HeadDir){

            case DIR_U:

            case DIR_D:

                for(i = 0; i < NumY; i++){

                    m_MoveList.setPixel(i, 0, MoveY);

                }

                for(i = 0; i < NumX; i++){

                    m_MoveList.setPixel(NumY+i, 0, MoveX);

                }

                break;

            case DIR_L:

            case DIR_R:

                for(i = 0; i < NumX; i++){

                    m_MoveList.setPixel(i, 0, MoveX);

                }

                for(i = 0; i < NumY; i++){

                    m_MoveList.setPixel(NumX+i, 0, MoveY);

                }

                break;

            }

        }



        //指定された動きに合わせて1ドットずつ移動する

        for(i = 0; i < MoveNum; i++){

            //Move

            {

                var ValX:int = ((m_MoveList.getPixel(i,0) & 0x0F) >> 0) - 1;

                var ValY:int = ((m_MoveList.getPixel(i,0) & 0xF0) >> 4) - 1;



                this.x += ValX;

                this.y += ValY;

            }



            //現在位置のパス取得

            {

                m_PathIndex = GameMainWonderfl.Instance().GetPathIndex(this.x, this.y);

            }



            //ダメージエリアに入ったならここで死んで終了

            {

                if(m_PathIndex == PATH_DAMAGE){

                    Dead_Damage();



                    return;

                }

            }

            //現在位置に応じて以降の移動方向を変更(角での移動方向変更などの対応)

            {

                ConvertByPath(m_MoveList);//, i, MoveNum

                ConvertByPath(m_Util);//, 0, 2

            }



        }





        var XtoX:int, XtoY:int, YtoX:int, YtoY:int;



        //端数の書き戻し

        {

            XtoX = ((m_Util.getPixel(0,0) & 0x0F) >> 0) - 1;

            XtoY = ((m_Util.getPixel(0,0) & 0xF0) >> 4) - 1;

            YtoX = ((m_Util.getPixel(1,0) & 0x0F) >> 0) - 1;

            YtoY = ((m_Util.getPixel(1,0) & 0xF0) >> 4) - 1;



            m_PosX = this.x + XtoX*RestX + YtoX*RestY;

            m_PosY = this.y + XtoY*RestX + YtoY*RestY;

        }



        //速度をパスに応じて変更

        {

            XtoX = ((m_Util.getPixel(2,0) & 0x0F) >> 0) - 1;

            XtoY = ((m_Util.getPixel(2,0) & 0xF0) >> 4) - 1;

            YtoX = ((m_Util.getPixel(3,0) & 0x0F) >> 0) - 1;

            YtoY = ((m_Util.getPixel(3,0) & 0xF0) >> 4) - 1;



            m_VelX = XtoX*AbsVelX + YtoX*AbsVelY;

            m_VelY = XtoY*AbsVelX + YtoY*AbsVelY;

        }



        //現在の位置に合わせて姿勢制御

        {

            //回転

            switch(m_PathIndex){

            case PATH_D: this.rotation =   0; m_HeadDir = DIR_U; break;

            case PATH_L: this.rotation =  90; m_HeadDir = DIR_R; break;

            case PATH_U: this.rotation = 180; m_HeadDir = DIR_D; break;

            case PATH_R: this.rotation = 270; m_HeadDir = DIR_L; break;

            //これ以外のパス上では姿勢は更新しない

            }



            //向き(スケールで実現)

            switch(m_HeadDir){//基本は速度で判定。入力があればそちらを優先

            case DIR_U:

                if(m_VelX < 0){this.scaleX = -1;}

                if(m_VelX > 0){this.scaleX =  1;}

//                if(m_AccX < 0){this.scaleX = -1;}

//                if(m_AccX > 0){this.scaleX =  1;}

                break;

            case DIR_D:

                if(m_VelX < 0){this.scaleX =  1;}

                if(m_VelX > 0){this.scaleX = -1;}

//                if(m_AccX < 0){this.scaleX =  1;}

//                if(m_AccX > 0){this.scaleX = -1;}

                break;

            case DIR_L:

                if(m_VelY < 0){this.scaleX =  1;}

                if(m_VelY > 0){this.scaleX = -1;}

//                if(m_AccY < 0){this.scaleX =  1;}

//                if(m_AccY > 0){this.scaleX = -1;}

                break;

            case DIR_R:

                if(m_VelY < 0){this.scaleX = -1;}

                if(m_VelY > 0){this.scaleX =  1;}

//                if(m_AccY < 0){this.scaleX = -1;}

//                if(m_AccY > 0){this.scaleX =  1;}

                break;

            }

        }



        //フラグ更新

        {

            //地上にいる=パスがある

            m_OnGround = (m_PathIndex != PATH_NONE);

        }



        //落下死チェック

        {

            if(this.y > GameMainWonderfl.BitmapH+32){

                Dead_Fall();

            }

        }

    }



    //Update : Anim

    public function Update_Anim(in_DeltaTime:Number):void{

        var AnimIndex_Old:int = m_AnimIndex;



        //考慮する速度・加速度

        var Vel:Number;

        var Acc:Number;

        {

            switch(m_HeadDir){

            case DIR_U:

            case DIR_D:

                Vel = Math.abs(m_VelX);

                Acc = Math.abs(m_AccX);

                break;

            case DIR_L:

            case DIR_R:

                Vel = Math.abs(m_VelY);

                Acc = Math.abs(m_AccY);

                break;

            }

        }



        //アニメーションの更新量

        var DeltaAnim:Number;

        {

            //速度による更新量

            const ANIM_CYCLE_PER_VEL:Number = 20;

            var DeltaAnim_ByVel:Number = Vel / ANIM_CYCLE_PER_VEL * in_DeltaTime;



            //加速度による更新量

            const ANIM_CYCLE_PER_ACC:Number = 10;

            var DeltaAnim_ByAcc:Number = Acc / ANIM_CYCLE_PER_VEL * in_DeltaTime;



            //大きい方を採用

            DeltaAnim = Math.max(DeltaAnim_ByVel, DeltaAnim_ByAcc);

        }



        //m_AnimIndexの更新

        {

            m_AnimIndex += DeltaAnim;

            while(m_AnimIndex >= ANIM_NUM){m_AnimIndex -= ANIM_NUM;}

        }



        //新しいAnimIndexになったら表示画像を差し替える

        var AnimIndex_New:int = m_AnimIndex;

        if(AnimIndex_New != AnimIndex_Old){

            //Delete Old

            removeChild(m_Graphic[AnimIndex_Old]);

            //Create New

            addChild(m_Graphic[AnimIndex_New]);

        }

    }



    //移動方向を今のパスに基づいて変更する

    public function ConvertByPath(io_MoveList:BitmapData):void{

        //for(i++ < 256){List[i] = PALETTE_MOVE[PALETTE_MOVE][List[i]];}

        io_MoveList.paletteMap(io_MoveList, io_MoveList.rect, POS_ZERO, null, null, PALETTE_MOVE[m_PathIndex]);

    }



    //死亡する

    public function Dead_Damage():void{

        //Check

        {

            if(m_IsDead){

                return;

            }

        }



        //ゲームオーバー処理

        {

            GameMainWonderfl.Instance().OnDead_Damage();

        }



        //フラグ

        {

            m_IsDead = true;

        }

    }

    public function Dead_Fall():void{

        //Check

        {

            if(m_IsDead){

                return;

            }

        }



        //ゲームオーバー処理

        {

            GameMainWonderfl.Instance().OnDead_Fall();//こいつに引数を渡すようにして統合したい

        }



        //フラグ

        {

            m_IsDead = true;

        }

    }

}





//#Goal

class Goal extends Sprite

{

    //==Constt==



    static public const GOAL_RANGE:int = 9;



    static public const ANIM_INTERVAL:Number = 0.5;





    //==Var==



    public var m_AlphaRatio:Number = 0;





    //==Function==



    //Init

    public function Goal():void{

        //Graphic

        {

            addChild(ImageManager.CreateGoalGraphic());

        }

    }



    //Reset

    public function Reset(in_X:int, in_Y:int):void{

        //Pos

        {

            this.x = in_X;

            this.y = in_Y;

        }

    }



    //Update

    public function Update():void{

        //プレイヤーが一定範囲に来たらゴールとする



        //そもそもすでにゴールしてたら何も処理しない

        {

            if(GameMainWonderfl.Instance().IsEnd()){

                return;

            }

        }



        //Alpha Anim

        {

            const ALPHA_MIN:Number = 0.5;

            const ALPHA_MAX:Number = 1.0;



            const DeltaTime:Number = 1/30;



            m_AlphaRatio += DeltaTime / ANIM_INTERVAL;

            if(1 <= m_AlphaRatio){

                m_AlphaRatio -= 1;

            }



            this.alpha = Util.Lerp(ALPHA_MIN, ALPHA_MAX, 0.5 + 0.5*Math.cos(2*Math.PI * m_AlphaRatio));

        }



        //プレイヤーとの距離が一定以上離れていたら何も処理しない

        {

            var GapX:Number = GameMainWonderfl.Instance().m_Player.x - this.x;

            var GapY:Number = GameMainWonderfl.Instance().m_Player.y - this.y;



            var Distance:Number = Math.sqrt(GapX*GapX + GapY*GapY);



            if(Distance > GOAL_RANGE){

                return;

            }

        }



        //上のチェックに全てクリアしたらゴールしたものとして処理する

        {

            GameMainWonderfl.Instance().OnGoal();

        }

    }

}





class NinePatch extends Sprite

{

    //処理コストが高いので、Popupなどで使う場合は事前に生成しておいて使いまわすこと



    //==Var==



    //描画結果を使いまわす場合、このBitmapDataを使いまわす

    public var m_BitmapData:BitmapData;





    //==Function==



    //Create

    static public function Create(in_BMD:BitmapData, in_RadX:int, in_RadY:int, in_W:int, in_H:int, in_OriX:int = 0, in_OriY:int = 0, in_OriW:int = -1, in_OriH:int = -1):NinePatch{

        var nine_patch:NinePatch = new NinePatch();

        nine_patch.Init(in_BMD, in_RadX, in_RadY, in_W, in_H, in_OriX, in_OriY, in_OriW, in_OriH);

        return nine_patch;

    }



    //Clone

    static public function Clone(in_BMD:BitmapData):NinePatch{

        var nine_patch:NinePatch = new NinePatch();

        nine_patch.m_BitmapData = in_BMD;

        nine_patch.addChild(new Bitmap(in_BMD));

        return nine_patch;

    }



    //Init

    public function Init(in_BMD:BitmapData, in_RadX:int, in_RadY:int, in_W:int, in_H:int, in_OriX:int, in_OriY:int, in_OriW:int, in_OriH:int):void{

        var OriW:int = (in_OriW <= 0)? in_BMD.width: in_OriW;

        var OriH:int = (in_OriH <= 0)? in_BMD.height: in_OriH;



        var edge_w:int = OriW - in_RadX*2;

        var edge_h:int = OriH - in_RadY*2;

        //念のため補正

        if(edge_w <= 0){edge_w = 1;}

        if(edge_h <= 0){edge_h = 1;}



        var bmd:BitmapData = new BitmapData(in_W, in_H, true, 0x00000000);



        var src_rect:Rectangle = new Rectangle(0,0,1,1);

        var dst_pos:Point = new Point(0,0);

        var offset_x:int;

        var offset_y:int;



        //Corner

        {

            src_rect.width  = in_RadX;

            src_rect.height = in_RadY;

            //- LU

            src_rect.x = in_OriX;

            src_rect.y = in_OriY;

            dst_pos.x = 0;

            dst_pos.y = 0;

            bmd.copyPixels(in_BMD, src_rect, dst_pos);

            //- RU

            src_rect.x = in_OriX + OriW-in_RadX;

            src_rect.y = in_OriY;

            dst_pos.x = in_W-in_RadX;

            dst_pos.y = 0;

            bmd.copyPixels(in_BMD, src_rect, dst_pos);

            //- LD

            src_rect.x = in_OriX;

            src_rect.y = in_OriY + OriH-in_RadY;

            dst_pos.x = 0;

            dst_pos.y = in_H-in_RadY;

            bmd.copyPixels(in_BMD, src_rect, dst_pos);

            //- RD

            src_rect.x = in_OriX + OriW-in_RadX;

            src_rect.y = in_OriY + OriH-in_RadY;

            dst_pos.x = in_W-in_RadX;

            dst_pos.y = in_H-in_RadY;

            bmd.copyPixels(in_BMD, src_rect, dst_pos);

        }



        //Edge

        {

            //UD

            src_rect.x = in_OriX + in_RadX;

            src_rect.width = edge_w;

            src_rect.height = in_RadY;

            for(offset_x = in_RadX; offset_x < in_W - in_RadX; offset_x += edge_w){

                dst_pos.x = offset_x;

                if(in_W - in_RadX < offset_x + edge_w){

                    src_rect.width = (in_W - in_RadX) - offset_x;

                }

                //U

                src_rect.y = in_OriY;

                dst_pos.y = 0;

                bmd.copyPixels(in_BMD, src_rect, dst_pos);

                //D

                src_rect.y = in_OriY + OriH-in_RadY;

                dst_pos.y = in_H-in_RadY;

                bmd.copyPixels(in_BMD, src_rect, dst_pos);

            }



            //LR

            src_rect.y = in_OriY + in_RadY;

            src_rect.width = in_RadX;

            src_rect.height = edge_h;

            for(offset_y = in_RadY; offset_y < in_H - in_RadY; offset_y += edge_h){

                dst_pos.y = offset_y;

                if(in_H - in_RadY < offset_y + edge_h){

                    src_rect.height = (in_H - in_RadY) - offset_y;

                }

                //L

                src_rect.x = in_OriX;

                dst_pos.x = 0;

                bmd.copyPixels(in_BMD, src_rect, dst_pos);

                //R

                src_rect.x = in_OriX + OriW-in_RadX;

                dst_pos.x = in_W-in_RadX;

                bmd.copyPixels(in_BMD, src_rect, dst_pos);

            }

        }



        //Center

        {

            src_rect.x = in_OriX + in_RadX;

            src_rect.y = in_OriY + in_RadY;

            for(offset_x = in_RadX; offset_x < in_W - in_RadX; offset_x += edge_w){

                dst_pos.x = offset_x;

                if(in_W - in_RadX < offset_x + edge_w){

                    src_rect.width = (in_W - in_RadX) - offset_x;

                }else{

                    src_rect.width = edge_w;

                }



                for(offset_y = in_RadY; offset_y < in_H - in_RadY; offset_y += edge_h){

                    dst_pos.y = offset_y;

                    if(in_H - in_RadY < offset_y + edge_h){

                        src_rect.height = (in_H - in_RadY) - offset_y;

                    }else{

                        src_rect.height = edge_h;

                    }



                    bmd.copyPixels(in_BMD, src_rect, dst_pos);

                }

            }

        }



        m_BitmapData = bmd;

        addChild(new Bitmap(bmd));

    }

}





class FontText

{

    //==Embed==

    //fontNameではなくfontFamily + embedAsCFF=falseにすること

//    [Embed(source="mplus-1c-black.ttf", fontFamily="mplus", embedAsCFF = "false", mimeType='application/x-font')]

//    private var font:Class;



    //==Const==



    //

    static public var s_AlignIter:int = 0;

    static public const ALIGN_CENTER:int = s_AlignIter++;//Default

    static public const ALIGN_LEFT    :int = s_AlignIter++;

    static public const ALIGN_RIGHT    :int = s_AlignIter++;

    static public const ALIGN_UP    :int = ALIGN_LEFT;

    static public const ALIGN_DOWN    :int = ALIGN_DOWN;



    //==Var==



    static public var s_TextField:TextField = null;

    static public var s_TextFormat:TextFormat = new TextFormat();

    static public var s_TextSprite:Sprite = new Sprite();





    //==Function==



    static public function DrawText(out_BMD:BitmapData, in_Text:String, in_X:Number, in_Y:Number, in_Size:int, in_Color:uint, in_AlignX:int = 0, in_AlignY:int = 0):void{

        if(s_TextField == null){

            s_TextField = new TextField();

//            s_TextField.embedFonts = true;

            s_TextField.autoSize = TextFieldAutoSize.LEFT;



//            s_TextFormat.font = "mplus";



            s_TextSprite.addChild(s_TextField);

        }



        //Param

        s_TextFormat.size = in_Size;

        s_TextFormat.color = in_Color;

        s_TextField.defaultTextFormat = s_TextFormat;

        s_TextField.text = in_Text;



        //Align

        switch(in_AlignX){

        case ALIGN_LEFT:

            s_TextField.x = in_X;

            break;

        case ALIGN_CENTER:

            s_TextField.x = in_X - s_TextField.textWidth/2;

            break;

        case ALIGN_CENTER:

            s_TextField.x = in_X - s_TextField.textWidth;

            break;

        }

        switch(in_AlignY){

        case ALIGN_UP:

            s_TextField.y = in_Y;

            break;

        case ALIGN_CENTER:

            s_TextField.y = in_Y - s_TextField.textHeight/2;

            break;

        case ALIGN_DOWN:

            s_TextField.y = in_Y - s_TextField.textHeight;

            break;

        }



        //Draw

        out_BMD.draw(s_TextSprite);

    }

}





class Util

{

    //Lerp

    static public function Lerp(in_Src:Number, in_Dst:Number, in_Ratio:Number):Number{

        return (in_Src * (1 - in_Ratio)) + (in_Dst * in_Ratio);

    }



    //Clamp

    static public function Clamp(in_Val:Number, in_Min:Number, in_Max:Number):Number{

        if(in_Val < in_Min){return in_Min;}

        if(in_Max < in_Val){return in_Max;}

        return in_Val;

    }

    static public function Clamp01(in_Val:Number):Number{

        if(in_Val < 0){return 0;}

        if(1 < in_Val){return 1;}

        return in_Val;

    }



    //Language

    static public function IsJapanese():Boolean{

//*

        return (Capabilities.language == "ja");

/*/

        return false;

//*/

    }

}