Exemple #1
0
        public void Gen_Normal()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 9); // static range, no gap

            Rooms = new List <RoomLayout>();
            RoomLayout layout;

            //// Room 1 - 4 pistols, floating platforms
            layout = new RoomLayout(room1.ReturnEnemiesInRoom(AllEnemies));
            // to avoid wrong pos spawns, I use vertical planes in the middle of the  platforms
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153148, -59471, 2832), new Vector3f(154124, -58691, 2832), new Angle(-0.75f, 0.66f)).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155664, -57651, 2833), new Vector3f(156740, -56869, 2833), new Angle(-0.53f, 0.85f)).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158191, -59078, 2832), new Vector3f(157983, -60312, 2832), new Angle(-0.87f, 0.50f)).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155531, -61958, 2832), new Vector3f(154254, -61625, 2832), new Angle(0.39f, 0.92f)).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(152882, -55794, 3598), new Vector3f(155365, -54986, 3598), new Angle(-0.68f, 0.74f))); // collectible platform
            // special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153746, -62014, 4234), new Angle(0.76f, 0.65f)).setDiff(1));                           // billboard near
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158799, -58624, 4248), new Angle(0.96f, 0.28f)).setDiff(1));                           // billboard far
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153237, -56789, 4301), new Angle(-0.53f, 0.85f)).setDiff(1));                          // collectible wall
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153961, -52953, 3803), new Angle(-0.70f, 0.71f)));                                     // slide ledge, to next room
            Rooms.Add(layout);

            //// Room 2 - 5 pistols, last room
            layout = new RoomLayout(room2.ReturnEnemiesInRoom(AllEnemies));
            // main platforms
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158225, -43241, 3198), new Vector3f(156081, -42827, 3198), new Angle(-0.89f, 0.46f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156846, -40737, 3198), new Vector3f(157130, -41736, 3198), new Angle(-0.94f, 0.35f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158792, -41972, 3198), new Vector3f(158922, -43343, 3198), new Angle(-0.96f, 0.27f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(152012, -48136, 3198), new Vector3f(152209, -47198, 3198), new Angle(-0.59f, 0.81f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153685, -47214, 3198), new Vector3f(155030, -47501, 3198), new Angle(-0.89f, 0.46f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156721, -46427, 3198), new Vector3f(156351, -45285, 3198), new Angle(-0.89f, 0.46f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154520, -43688, 3198), new Vector3f(154647, -45111, 3198), new Angle(-0.87f, 0.49f)));
            // special/high spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(151930, -47267, 3948), new Angle(-0.52f, 0.85f)).setDiff(1)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153667, -50388, 3298), new Angle(-0.64f, 0.77f)));            // slide edge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155839, -42364, 4052), new Angle(-0.53f, 0.85f)));            // generator/server
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158129, -44004, 4052), new Angle(-1.00f, 0.01f)));            // generator/server 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155591, -45151, 3618), new Angle(0.47f, 0.89f)));             // middle wall platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153328, -47607, 3638), new Angle(-0.88f, 0.47f)));            // wide generator 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153988, -48037, 3640), new Angle(-0.96f, 0.27f)));            // wide generator 2
            Rooms.Add(layout);
        }
        protected override void Gen_PerRoom()
        {
            ////// Green Platforms //////
            platforms.Add(new GreenPlatform(0x9E0, 0xE88));
            platforms.Add(new GreenPlatform(0x9F8, 0xDB0));
            platforms.Add(new GreenPlatform(0xA00, 0xD68));
            platforms.Add(new GreenPlatform(0xA08, 0xD20));
            platforms.Add(new GreenPlatform(0xA30, 0xBB8));
            platforms.Add(new GreenPlatform(0xA20, 0xC48));
            platforms.Add(new GreenPlatform(0xA18, 0xC90));
            platforms.Add(new GreenPlatform(0xA28, 0xC00));
            platforms.Add(new GreenPlatform(0xA10, 0xCD8));
            platforms.Add(new GreenPlatform(0x9F0, 0xDF8));
            platforms.Add(new GreenPlatform(0x9E8, 0xE40));
            platforms.Add(new GreenPlatform(0x9D8, 0xED0));
            platforms.Add(new GreenPlatform(0x9D0, 0xF18));
            platforms.Add(new GreenPlatform(0x9C8, 0xF60));
            platforms.Add(new GreenPlatform(0x9C0, 0xFA8));
            platforms.Add(new GreenPlatform(0x9B8, 0xFF0));
            platforms.Add(new GreenPlatform(0x9B0, 0x1038));
            platforms.Add(new GreenPlatform(0x9A8, 0x1080));

            ////// Platforms layouts //////
            #region GreenPlatforms
            //// going around right, splitting in middle
            platformLayouts.Add(new SpawnData(new Vector3f(50232.93f, -10371.06f, 2988.9f), new Angle(1.00f, 0.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50746.19f, -10623.07f, 3123.783f), new Angle(-0.45f, 0.89f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51239.04f, -11337.36f, 3209.209f), new Angle(-0.72f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51176.75f, -12164.8f, 3406.602f), new Angle(-0.71f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51293.42f, -12759.18f, 3573.017f), new Angle(-0.48f, 0.87f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51762.2f, -13277.17f, 3737.203f), new Angle(-0.28f, 0.96f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52215.43f, -13650.36f, 3941.672f), new Angle(-0.65f, 0.76f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52200.01f, -14317.66f, 4140.634f), new Angle(-0.72f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52099.57f, -14987.48f, 4318.261f), new Angle(-0.76f, 0.65f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51784.11f, -15663.53f, 4455.74f), new Angle(-0.88f, 0.48f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51317.89f, -16294.11f, 4584.072f), new Angle(-0.89f, 0.45f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50883.04f, -16784.74f, 4716.091f), new Angle(-0.85f, 0.52f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50659.76f, -17336.82f, 4764.241f), new Angle(-0.76f, 0.65f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50223.77f, -18020.39f, 4812.391f), new Angle(-0.82f, 0.57f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50428.26f, -12785.69f, 3529.526f), new Angle(-1.00f, 0.02f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49754.46f, -13154.93f, 3900.068f), new Angle(-0.96f, 0.28f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49187.71f, -13739.8f, 4251.918f), new Angle(-0.91f, 0.42f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49155.66f, -14196.82f, 4731.175f), new Angle(-0.51f, 0.86f)));

            //// splits at start, 2 paths around
            platformLayouts.Add(new SpawnData(new Vector3f(49928, -10312, 3170), new Angle(-0.26f, 0.97f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50252, -10700, 3345), new Angle(-0.59f, 0.81f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50486, -11389, 3660), new Angle(-0.61f, 0.79f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50709, -12114, 3992), new Angle(-0.59f, 0.80f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50921, -12905, 4346), new Angle(-0.62f, 0.79f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51068, -13386, 4590), new Angle(-0.57f, 0.82f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51005, -14147, 4745), new Angle(-0.79f, 0.62f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50599, -14875, 4823), new Angle(-0.86f, 0.50f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50122, -15624, 4883), new Angle(-0.89f, 0.45f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48998, -10505, 3185), new Angle(-0.94f, 0.35f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48649, -10795, 3203), new Angle(0.35f, 0.94f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48388, -11375, 3390), new Angle(-0.74f, 0.67f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48372, -12026, 3607), new Angle(-0.67f, 0.74f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48418, -12612, 3793), new Angle(-0.68f, 0.74f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48496, -13244, 4021), new Angle(-0.65f, 0.76f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48564, -13815, 4264), new Angle(-0.62f, 0.78f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48692, -14364, 4559), new Angle(-0.29f, 0.96f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49049, -14572, 4826), new Angle(-0.25f, 0.97f)));

            //// stair-like on main platform
            platformLayouts.Add(new SpawnData(new Vector3f(49656f, -10212f, 3430f), new Angle(1.00f, 0.01f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49294f, -10239f, 3790f), new Angle(0.68f, 0.73f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49335f, -9567f, 3732f), new Angle(0.70f, 0.72f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49368f, -8924f, 3829f), new Angle(0.32f, 0.95f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49854f, -8735f, 4073f), new Angle(0.06f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50363f, -8889f, 4317f), new Angle(-0.34f, 0.94f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50665f, -9431f, 4532f), new Angle(-0.66f, 0.75f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50815f, -10256f, 4561f), new Angle(-0.64f, 0.77f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50789f, -11138f, 4572f), new Angle(-0.80f, 0.60f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50577f, -11889f, 4677f), new Angle(-0.80f, 0.60f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50588f, -12653f, 4775f), new Angle(-0.70f, 0.72f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50730f, -13350f, 4952f), new Angle(-0.62f, 0.79f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50693f, -14090f, 5075f), new Angle(-0.83f, 0.55f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50364f, -14597f, 4911f), new Angle(-0.88f, 0.48f)));
            //  hide rest
            platformLayouts.Add(new SpawnData(new Vector3f(45468f, -10094f, 4457f), new Angle(-0.03f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(45468f, -10094f, 4457f), new Angle(-0.03f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(45468f, -10094f, 4457f), new Angle(-0.03f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(45468f, -10094f, 4457f), new Angle(-0.03f, 1.00f)));

            //// early stairs, around left side
            platformLayouts.Add(new SpawnData(new Vector3f(49422f, -8528f, 3183f), new Angle(-0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49422f, -8894f, 3388f), new Angle(-0.70f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49405f, -9388f, 3622f), new Angle(-0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49411f, -9903f, 3865f), new Angle(-0.70f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49411f, -10469f, 4102f), new Angle(-0.71f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49411f, -10982f, 4353f), new Angle(-0.71f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49350f, -11762f, 4421f), new Angle(-0.71f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49346f, -12423f, 4632f), new Angle(-0.71f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48628f, -12405f, 4777f), new Angle(0.02f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47640f, -12444f, 4825f), new Angle(0.00f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47637f, -13124f, 4873f), new Angle(0.00f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47666f, -13921f, 4921f), new Angle(0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47668f, -14622f, 4969f), new Angle(0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47692f, -15471f, 5017f), new Angle(0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48138f, -15964f, 5065f), new Angle(-0.36f, 0.93f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48829f, -16554f, 4893f), new Angle(-0.34f, 0.94f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49241f, -16973f, 4857f), new Angle(-0.39f, 0.92f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49531f, -17340f, 4829f), new Angle(-0.60f, 0.80f)));

            //// Inverted spiral
            platformLayouts.Add(new SpawnData(new Vector3f(49701f, -11128f, 3153f), new Angle(-0.42f, 0.91f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50386f, -11533f, 3242f), new Angle(-0.18f, 0.98f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51231f, -11638f, 3295f), new Angle(0.09f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51873f, -11280f, 3376f), new Angle(0.30f, 0.95f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52293f, -10676f, 3505f), new Angle(0.56f, 0.83f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52207f, -9967f, 3622f), new Angle(0.84f, 0.55f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51557f, -9450f, 3694f), new Angle(0.98f, 0.21f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50811f, -9420f, 3771f), new Angle(-0.99f, 0.13f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50087f, -9632f, 3868f), new Angle(-0.99f, 0.17f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49424f, -10042f, 3995f), new Angle(-0.94f, 0.33f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48780f, -10568f, 4038f), new Angle(-0.92f, 0.39f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48397f, -11260f, 4129f), new Angle(-0.81f, 0.59f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48361f, -11940f, 4291f), new Angle(-0.68f, 0.73f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48172f, -12515f, 4507f), new Angle(-0.84f, 0.54f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47852f, -13104f, 4717f), new Angle(-0.79f, 0.62f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48050f, -13880f, 5012f), new Angle(-0.59f, 0.80f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48421f, -14681f, 4868f), new Angle(-0.42f, 0.91f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49052f, -15132f, 4823f), new Angle(-0.22f, 0.97f)));

            //// high step stairs
            platformLayouts.Add(new SpawnData(new Vector3f(49863f, -10249f, 3185f), new Angle(-0.01f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50313f, -10302f, 3641f), new Angle(-0.04f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50613f, -10331f, 4008f), new Angle(-0.03f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51077f, -10372f, 4508f), new Angle(0.00f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51078f, -10772f, 4969f), new Angle(-0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51072f, -11467f, 4203f), new Angle(-0.69f, 0.73f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51206f, -12384f, 4507f), new Angle(-0.74f, 0.67f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51601f, -13060f, 4675f), new Angle(-0.49f, 0.87f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51767f, -13788f, 4824f), new Angle(-0.79f, 0.61f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51307f, -14580f, 4906f), new Angle(-0.90f, 0.43f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50667f, -15140f, 4863f), new Angle(-0.95f, 0.32f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50198f, -15678f, 4783f), new Angle(-0.88f, 0.47f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51720f, -10804f, 5462f), new Angle(-0.01f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51666f, -12065f, 5532f), new Angle(-0.71f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51501f, -12952f, 5554f), new Angle(-0.76f, 0.65f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51309f, -13913f, 5376f), new Angle(-0.79f, 0.62f)));
            // hide
            platformLayouts.Add(new SpawnData(new Vector3f(45468f, -10094f, 4457f), new Angle(-0.03f, 1.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(45468f, -10094f, 4457f), new Angle(-0.03f, 1.00f)));


            //// down drop
            platformLayouts.Add(new SpawnData(new Vector3f(49582f, -10629f, 3170f), new Angle(-0.71f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49576f, -10914f, 3218f), new Angle(-0.72f, 0.69f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49562f, -11194f, 2615f), new Angle(0.68f, 0.73f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49589f, -11915f, 2283f), new Angle(0.72f, 0.70f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49300f, -12588f, 2331f), new Angle(0.50f, 0.86f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48933f, -13232f, 2380f), new Angle(0.50f, 0.86f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48533f, -13917f, 2674f), new Angle(0.50f, 0.87f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48192f, -14490f, 2877f), new Angle(0.49f, 0.87f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48006f, -15053f, 3024f), new Angle(0.62f, 0.79f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47854f, -15695f, 3302f), new Angle(0.62f, 0.78f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47739f, -16225f, 3643f), new Angle(0.67f, 0.74f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47716f, -16740f, 3866f), new Angle(0.69f, 0.72f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47880f, -17336f, 4067f), new Angle(0.79f, 0.61f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48062f, -17837f, 4349f), new Angle(0.84f, 0.55f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48393f, -18410f, 4501f), new Angle(0.88f, 0.47f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48788f, -18990f, 4681f), new Angle(0.90f, 0.44f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49206f, -19520f, 4820f), new Angle(-0.46f, 0.89f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49448f, -19729f, 4828f), new Angle(-0.58f, 0.82f)));


            //// left, to middle and around the right
            platformLayouts.Add(new SpawnData(new Vector3f(48944f, -10468f, 3179f), new Angle(-0.97f, 0.23f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48584f, -10659f, 3344f), new Angle(-0.95f, 0.30f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48016f, -11026f, 3478f), new Angle(-0.95f, 0.31f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47618f, -11548f, 3628f), new Angle(-0.81f, 0.59f)));
            platformLayouts.Add(new SpawnData(new Vector3f(47525f, -12080f, 3718f), new Angle(0.70f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(48329f, -12072f, 3755f), new Angle(-1.00f, 0.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49029f, -12035f, 3794f), new Angle(-1.00f, 0.00f)));
            platformLayouts.Add(new SpawnData(new Vector3f(49699f, -12038f, 3832f), new Angle(1.00f, 0.01f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50417f, -12055f, 3850f), new Angle(1.00f, 0.02f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51136f, -12137f, 3819f), new Angle(1.00f, 0.03f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51832f, -12443f, 3965f), new Angle(0.96f, 0.29f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52026f, -12993f, 4105f), new Angle(0.77f, 0.63f)));
            platformLayouts.Add(new SpawnData(new Vector3f(52078f, -13592f, 4237f), new Angle(0.70f, 0.71f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51743f, -14260f, 4361f), new Angle(0.54f, 0.84f)));
            platformLayouts.Add(new SpawnData(new Vector3f(51316f, -14702f, 4477f), new Angle(0.40f, 0.92f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50878f, -15056f, 4650f), new Angle(0.31f, 0.95f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50412f, -15582f, 4868f), new Angle(-0.93f, 0.37f)));
            platformLayouts.Add(new SpawnData(new Vector3f(50042f, -15943f, 4774f), new Angle(-0.92f, 0.38f)));

            #endregion

            // Fix green platform rotations by converting it to quaternion rotation
            for (int i = 0; i < platformLayouts.Count; i++)
            {
                platformLayouts[i].angle = ToQuaternion(platformLayouts[i].angle);
            }

            ////// keys //////
            #region Keys
            Rooms = new List <RoomLayout>();
            RoomLayout         layout;
            List <WorldObject> keys = new List <WorldObject>();
            keys.Add(new CVKey(0xA98, 0xCF8, 0x318));
            keys.Add(new CVKey(0xAB0, 0xCD8, 0x408));
            keys.Add(new CVKey(0xAA8, 0xCB8, 0x510));
            keys.Add(new CVKey(0xAA0, 0xCA8, 0x570));
            keys.Add(new CVKey(0xA90, 0xC88, 0x5D0));

            // First Room
            layout = new RoomLayout(keys[0]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(45823, -37582, 8593)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(53754, -37374, 8593)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(53697, -34409, 8593)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(49089, -33463, 8593)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(47570, -39136, 8621)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(52143, -38772, 8643)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(49757, -42331, 8593)));
            Rooms.Add(layout);

            // Second Room - 2 keys
            layout = new RoomLayout(keys[1], keys[2]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(47537, -34205, 11478)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(45532, -35307, 11478)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(45611, -37278, 11478)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(45647, -38806, 11337)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(45537, -40240, 11470)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(49587, -36790, 11478)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(53261, -38783, 11478)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(53310, -41370, 12917)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(53327, -37553, 12878)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(53371, -35344, 12826)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(51016, -34844, 12878)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(51075, -33337, 12878)));
            Rooms.Add(layout);

            // Third Room - architect/mara scene
            layout = new RoomLayout(keys[3]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(54034, -33631, 14314), new Vector3f(45390, -36957, 14303)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(50890, -42501, 14314), new Vector3f(54199, -37696, 14303)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(45326, -37232, 14303), new Vector3f(48101, -42259, 14314)));
            Rooms.Add(layout);

            // 4'th Room, long platform
            layout = new RoomLayout(keys[4]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(52483, -39739, 17498), new Vector3f(51113, -38894, 17498)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(49968, -38949, 17498), new Vector3f(45421, -39878, 17498)));
            Rooms.Add(layout);
            #endregion


            ////// JumpPads //////
            #region JumpPad
            NonPlaceableObject jumppad = new JumpPad(0xB78); //5000
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo());    //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(90.0f, -60.0f, 0.0f), Speed = 6000
            });                                                                                                          //backwards 1 platfrom
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(120.0f, -60.0f, 0.0f), Speed = 8000
            }.SetRarity(0.5));                                                                                                           //backwards 2 platform
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -92.0f, 0.0f), Speed = 8500
            }.SetRarity(0.35));                                                                                                          //3 platfrom
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -92.0f, 0.0f), Speed = 9500
            }.SetRarity(0.2));                                                                                                          //to the last jumppad
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -95.0f, 0.0f), Speed = 14000
            }.SetRarity(0.2));                                                                                                           //to the EOL
            worldObjects.Add(jumppad);

            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(48575, -35900, 8230), new Vector3f(50500, -34860, 9450),
                                               new Vector3f(49740, -40875, 8650), new Angle(0.71f, 0.71f)));

            jumppad = new JumpPad(0xB70);                 //5000
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo()); //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(90.0f, -50.0f, 0.0f), Speed = 6000
            });                                                                                                           //front without cp
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(-11.0f, -40.0f, 0.0f), Speed = 8200
            });                                                                                                            //3 green platforms
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(-135.0f, -40.0f, 0.0f), Speed = 6500
            });                                                                                                             //left side
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-90.0f, -37.0f, 0.0f), Speed = 8000 }.SetRarity(0.2));//for hardcore
            worldObjects.Add(jumppad);

            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(45000, -32900, 11000), new Vector3f(46350, -33875, 12000),
                                               new Vector3f(49655, -34680, 11550), new Angle(-0.71f, 0.71f)));
            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(45000, -40780, 11130), new Vector3f(46180, -39500, 11775),
                                               new Vector3f(49655, -34680, 11550), new Angle(-0.71f, 0.71f)));
            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(52345, -37325, 12145), new Vector3f(54945, -33385, 13470),
                                               new Vector3f(49655, -34680, 11550), new Angle(-0.71f, 0.71f)));

            jumppad = new JumpPad(0xB68);                 //5000
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo()); //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(-90.0f, -50.0f, 0.0f), Speed = 6000
            });                                                                                                            //front without cp
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -90.0f, 0.0f), Speed = 10200
            }.SetRarity(0.5));                                                                                                           // last jumppad
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -90.0f, 0.0f), Speed = 13200
            }.SetRarity(0.25));                                                                                                           //to the EOL
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0xB60);                 //5000
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo()); //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -90.0f, 0.0f), Speed = 6000
            });                                                                                                          //1 up
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(-125.0f, -30.0f, 0.0f), Speed = 12200
            }.SetRarity(0.25));                                                                                                              // hard jump, easy with sideway jump
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(25.0f, -60.0f, 0.0f), Speed = 7500
            }.SetRarity(0.35));                                                                                                           //2 up
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0xB88);                 //5000
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo()); //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(65.0f, -60.0f, 0.0f), Speed = 5500
            });                                                                                                           //1 up
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(135.0f, -45.0f, 0.0f), Speed = 8200
            });                                                                                                            // right side
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(25.0f, -40.0f, 0.0f), Speed = 6500
            });                                                                                                           //left side up
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0x6a8);                 //3500
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo()); //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(-36.0f, -20.0f, 0.0f), Speed = 8500
            });                                                                                                            //climb on other side
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(-33.0f, -20.0f, 0.0f), Speed = 13200
            }.SetRarity(0.35));                                                                                                             // bounce jump,sideways(can make to the last jumppad)
            worldObjects.Add(jumppad);

            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(53067, -35725, 19143), new Vector3f(54065, -36610, 20550),
                                               new Vector3f(50660, -34400, 19600), new Angle(0.0f, 1.0f)));

            jumppad = new JumpPad(0xB80);                 //10000
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo()); //default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -90.0f, 0.0f), Speed = 9350
            });                                                                                                          //short
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo {
                Angle = new QuaternionAngle(0.0f, -90.0f, 0.0f), Speed = 150000
            });                                                                                                            //teleport
            worldObjects.Add(jumppad);
            #endregion
        }
Exemple #3
0
        public void Gen_Normal()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 13); // static range, no gap

            Rooms = new List <RoomLayout>();
            RoomLayout   layout;
            List <Enemy> enemies;

            //// room 1 - pistol
            enemies = room1.ReturnEnemiesInRoom(AllEnemies);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false); // take pistol, force, no cp/door attached


            //// room 2 - pistol, sensory boost
            if (!IsNewGame)  // skip rng if new game
            {
                enemies = room2.ReturnEnemiesInRoom(AllEnemies);
                RandomPickEnemiesWithoutCP(ref enemies); // chance to move enemy to EnemiesWithoutCP
                if (enemies != null && enemies.Count > 0)
                {
                    layout = new RoomLayout(enemies); // minimal rng
                    layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14496, -59107, 2803), new Vector3f(-15633, -60168, 2799), new Angle(-1.00f, 0.09f)));
                    layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-15826, -58998, 2889), new Angle(-0.99f, 0.17f)));
                    Rooms.Add(layout);
                }
            }

            //// room 3 - 3 pistol, before bridge
            enemies = room3.ReturnEnemiesInRoom(AllEnemies);
            DetachEnemyFromCP(ref enemies, force: false);
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8179, -54300, 3408), new Vector3f(-9091, -52688, 3402), new Angle(-0.9f, 0.43f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8309, -55792, 3408), new Vector3f(-10221, -56789, 3408), new Angle(1.0f, 0.01f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9798, -53058, 3402), new Vector3f(-10775, -54270, 3408), new Angle(-0.96f, 0.28f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12762, -55235, 4398), new Angle(-0.98f, 0.22f)));
            // special/high spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8122, -54648, 3911), new Angle(-0.99f, 0.17f)).setDiff(1));  // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10040, -55579, 4030), new Angle(-0.99f, 0.15f)).setDiff(1)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7336, -57117, 3408), new Angle(1.00f, 0.08f)));              // SR route
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9023, -57121, 4195), new Angle(0.99f, 0.15f)).setDiff(1));   // wall lamp
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9582, -57001, 3788), new Angle(0.97f, 0.26f)));              // small platform
            Rooms.Add(layout);


            //// Room 4 - 3 pistol, hallway
            enemies = room4.ReturnEnemiesInRoom(AllEnemies);
            DetachEnemyFromCP(ref enemies, force: false);
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5740, -63956, 1468), new Vector3f(6337, -64859, 1468), new Angle(0.72f, 0.7f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5771, -66227, 1678), new Vector3f(6538, -67229, 1678), new Angle(0.73f, 0.68f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5656, -68518, 1868), new Vector3f(6591, -69532, 1868), new Angle(0.73f, 0.68f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6648, -70563, 1798), new Vector3f(5848, -71930, 1798), new Angle(0.69f, 0.73f)));
            // special/high spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5699, -61602, 2065), new Angle(0.83f, 0.56f)));                                                     // first small wall/building
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6764, -62525, 2116), new Angle(0.89f, 0.46f)).setDiff(1));                                          // first billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6779, -69590, 2587), new Angle(0.83f, 0.56f)).setDiff(1));                                          // last billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6404, -64078, 2241), new Angle(0.73f, 0.68f)).setDiff(1));                                          // pipe
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6676, -72123, 2088), new Vector3f(5889, -72129, 2088), new Angle(0.69f, 0.72f)).AsVerticalPlane()); // slide pipe
            Rooms.Add(layout);


            //// Room 5 - 5 enemies, dome
            enemies = room5.ReturnEnemiesInRoom(AllEnemies);
            layout  = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4603, -70321, -346), new Vector3f(3303, -68684, -350), new Angle(-0.71f, 0.71f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5128, -71555, 307), new Vector3f(3678, -71883, 307), new Angle(-0.71f, 0.71f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(997, -70468, -41), new Vector3f(1689, -68394, -41)).RandomAngle());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(910, -72873, -160), new Vector3f(1698, -72192, -167), new Angle(-0.45f, 0.89f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(955, -76167, 362), new Vector3f(1578, -75331, 371), new Angle(0f, 1.00f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2142, -75881, -42), new Vector3f(-1468, -73341, -42), new Angle(0.12f, 0.99f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-280, -68970, -41), new Vector3f(-1275, -68147, -41), new Angle(-0.34f, 0.94f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2226, -69843, -81), new Vector3f(-1017, -70568, -81), new Angle(-0.24f, 0.97f)));

            // high/special spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3256, -68387, 237), new Angle(-0.61f, 0.79f)));             // neon sign platform, far bottom
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3373, -72039, 924), new Angle(-0.64f, 0.77f)));             // street light
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(1943, -75088, 1008), new Angle(-0.26f, 0.97f)));            // big pipe, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1100, -74848, 340)).RandomAngle());                        // small platform, right bot
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2033, -72982, 605), new Angle(-0.18f, 0.98f)).setDiff(1)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1339, -71031, 605), new Angle(-0.37f, 0.93f)).setDiff(1)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2744, -71368, 473), new Angle(0.00f, 1.00f)));             // fuel tank
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(891, -70099, 584), new Angle(-0.59f, 0.80f)));              // street light
            Rooms.Add(layout);

            //// EXTRA spots
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14200, -63865, 2798), new Vector3f(-14996, -62722, 2798)).RandomAngle().setRarity(0.2)); // pistol 1, default pos
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14729, -63919, 3591), new Angle(0.03f, 1.0f)).setDiff(1));                               // pistol 1, wall lamp above
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-18060, -64136, 3598), new Vector3f(-19392, -63758, 3601), new Angle(0f, 1f)));           // vent area
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-21681, -63576, 2998), new Angle(-1.00f, 0.05f)));                                        // after first vent, left corner
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-20723, -59412, 4298), new Vector3f(-21563, -60163, 4302), new Angle(-0.99f, 0.15f)));    // before sensory boost vent
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-3991, -70323, -80), new Angle(0.01f, 1.00f)));                                           // before elevator (surprise)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-16471, -56114, 4098), new Angle(-0.78f, 0.62f)));                                        // after sensory boost
            Rooms.Add(layout);
        }
Exemple #4
0
        public void Gen_Hardcore()
        {
            // Gen - Hardcore(for in-game Hardcore mode, requires special attention)
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 39);

            Rooms = new List <RoomLayout>();
            RoomLayout   layout;
            List <Enemy> enemies;

            // room 1
            enemies = hc_room1.ReturnEnemiesInRoom(AllEnemies);
            enemies[4].SetEnemyType(Enemy.EnemyTypes.Weeb);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false);
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-19224, -64141, 3598), new Vector3f(-18365, -63753, 3598), new Angle(0.02f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));  // area before vent
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12260, -64194, 3099), new Vector3f(-11507, -63194, 3099), new Angle(-0.28f, 0.96f)).Mask(SpawnPlane.Mask_Flatground)); // fakeMantle platform

            // high/special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9969, -67666, 2778), new Vector3f(-10971, -67635, 2778), new Angle(0.97f, 0.23f))
                                 .Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());                                                                 // billboard left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9704, -63406, 3296), new Vector3f(-10746, -63403, 3296), new Angle(-0.66f, 0.75f))
                                 .Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());                                                                 // bilboard right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-13559, -64348, 3908), new Angle(0.21f, 0.98f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // billboard before vent 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14738, -63855, 3590), new Angle(0.03f, 1.00f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // billboard before vent 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9238, -63303, 3193), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_Highground));        // near 'billboard right'
            Rooms.Add(layout);


            // room 2
            enemies = hc_room2.ReturnEnemiesInRoom(AllEnemies);
            enemies[1].SetEnemyType(Enemy.EnemyTypes.Waver);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false);
            layout = new RoomLayout(enemies);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-26815, -64787, 2998), new Vector3f(-26243, -63621, 2998), new Angle(-0.03f, 1.00f)).Mask(SpawnPlane.Mask_Flatground)); // before fan
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-29552, -61256, 3798), new Angle(-0.62f, 0.79f)).Mask(SpawnPlane.Mask_Highground));                                     // after fan, platform ledge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-20779, -60233, 4298), new Vector3f(-21916, -59283, 4298), new Angle(-1.00f, 0.07f)).Mask(SpawnPlane.Mask_Flatground)); // before vent
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-20364, -59342, 4708), new Angle(-0.96f, 0.27f)).Mask(SpawnPlane.Mask_Highground));                                     // vent frame
            Rooms.Add(layout);


            // room 3 - before big slide
            enemies = hc_room3.ReturnEnemiesInRoom(AllEnemies);
            //RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false, enemyIndexBesides: 1); // besides shifter
            var info = new ShifterSpawnInfo();

            info.shiftPoints = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(-11876, -56306, 4513), new Angle(0.03f, 1.00f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-11181, -53500, 3772), new Angle(-0.56f, 0.83f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-9615, -56984, 3788), new Angle(0.90f, 0.43f)),
            };

            enemies[1] = new EnemyShifter(enemies[1], 3).AddFixedSpawnInfo(info);
            layout     = new RoomLayout(enemies);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8414, -56026, 3402), new Vector3f(-9987, -56690, 3402), new Angle(-1.00f, 0.02f)).Mask(SpawnPlane.Mask_Flatground)); // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11531, -54906, 5040), new Angle(-0.99f, 0.17f)).Mask(SpawnPlane.Mask_HighgroundLimited));                            // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10315, -54501, 4030), new Angle(-0.99f, 0.17f)).Mask(SpawnPlane.Mask_HighgroundLimited));                            // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9994, -55723, 4030), new Angle(-1.00f, 0.09f)).Mask(SpawnPlane.Mask_HighgroundLimited));                             // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8131, -54614, 3970), new Angle(-1.00f, 0.08f)).Mask(SpawnPlane.Mask_HighgroundLimited));                             // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8112, -55647, 3970), new Angle(-1.00f, 0.06f)).Mask(SpawnPlane.Mask_HighgroundLimited));                             // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9004, -57100, 4195), new Angle(0.94f, 0.34f)).Mask(SpawnPlane.Mask_Highground));                                     // wall lamp
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10356, -52803, 4591), new Angle(-0.78f, 0.63f)).Mask(SpawnPlane.Mask_HighgroundLimited));                            // right wall ledge
            Rooms.Add(layout);


            // room 4
            enemies    = hc_room4.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyDrone(enemies[0]);
            RemoveParentObjects(ref enemies);
            EnemiesWithoutCP.AddRange(enemies);

            // room 5
            enemies = hc_room5.ReturnEnemiesInRoom(AllEnemies);
            enemies[2].SetEnemyType(Enemy.EnemyTypes.Waver);
            DetachEnemyFromCP(ref enemies, force: true);
            layout = new RoomLayout(enemies);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6758, -62646, 2116), new Angle(0.87f, 0.50f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6421, -64019, 2238), new Angle(0.77f, 0.64f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // pipes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6814, -67090, 2383), new Angle(0.86f, 0.51f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6779, -69609, 2587), new Angle(0.85f, 0.53f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5795, -68741, 2498), new Angle(0.68f, 0.73f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // rooftop
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(7050, -66729, 1982), new Angle(0.96f, 0.28f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // roofotop
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5255, -67813, 2123), new Angle(0.47f, 0.88f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // small thin ad/sign
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6485, -69383, 1868), new Vector3f(5827, -68615, 1868), new Angle(0.71f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6450, -66512, 1681), new Vector3f(5834, -67095, 1678), new Angle(0.72f, 0.69f)).Mask(SpawnPlane.Mask_Flatground));
            Rooms.Add(layout);


            // room 6
            enemies    = hc_room6.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyShieldOrb(enemies[0]);
            enemies[1] = new EnemyDrone(enemies[1]);

            // shifter points
            info             = new ShifterSpawnInfo();
            info.shiftPoints = new List <Tuple <Vector3f, Angle> >() // 3 street lights + billboard
            {
                new Tuple <Vector3f, Angle>(new Vector3f(3311, -71903, 969), new Angle(0.57f, 0.82f)),
                new Tuple <Vector3f, Angle>(new Vector3f(906, -70209, 630), new Angle(-0.30f, 0.95f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-1086, -70504, 545), new Angle(-0.27f, 0.96f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-2056, -73103, 604), new Angle(-0.19f, 0.98f))
            };
            enemies[2] = new EnemyShifter(enemies[2], 4).AddFixedSpawnInfo(info);

            // orb
            layout = new RoomLayout(enemies.Take(1).Single());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-95, -74846, 966)));                                                         // top of billboard right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1265, -75711, 2797), new Vector3f(-1224, -75844, 1457)).AsVerticalPlane()); // top-up curved billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(895, -70257, 811)));                                                         // street light, middle
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2705, -68480, 1051)));                                                      // top of curve billboard, near exit
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4773, -71128, 1276)));                                                       // left billboard, high
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(2348, -70853, -2), new Vector3f(2340, -71890, 1275)).AsVerticalPlane());     // middle left wall/net
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4054, -71784, -200)));                                                       // under slide
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2544, -69779, 289)));                                                       // near exit door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(673, -75451, 565), new Vector3f(-583, -75460, 912)).AsVerticalPlane());      // right small billboard
            layout.DoNotReuse();
            Rooms.Add(layout);

            // enemies
            enemies = enemies.Skip(1).ToList();
            layout  = new RoomLayout(enemies);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1352, -70928, 605), new Angle(-0.32f, 0.95f)).Mask(SpawnPlane.Mask_Highground));                                                    // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1349, -72207, 605), new Angle(-0.31f, 0.95f)).Mask(SpawnPlane.Mask_Highground));                                                    // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2038, -71712, 605), new Angle(-0.36f, 0.93f)).Mask(SpawnPlane.Mask_Highground));                                                    // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(863, -75103, 1018), new Vector3f(2206, -75094, 1008), new Angle(-0.03f, 1.00f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Highground)); // pipe right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(198, -69741, 913), new Angle(-0.59f, 0.81f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                               // wall lamp, far back
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-391, -69741, 913), new Angle(-0.66f, 0.75f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                              // wall lamp, far back
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2805, -68600, 1051), new Angle(-0.47f, 0.88f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                            // curved billboard near exit
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(744, -71932, 1408), new Angle(-0.45f, 0.89f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                              // middle high billboard/fence
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2606, -74004, 630), new Angle(-0.07f, 1.00f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                             // street light, far right corner

            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2230, -70553, -80), new Vector3f(-1202, -69921, -80), new Angle(-0.02f, 1.00f)).Mask(SpawnPlane.Mask_Flatground)); // near exit
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(1130, -68547, -37), new Vector3f(1613, -70412, -40), new Angle(-0.31f, 0.95f)).Mask(SpawnPlane.Mask_Flatground));   // middle
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4524, -71740, 307), new Angle(-0.92f, 0.39f)).Mask(SpawnPlane.Mask_Highground));                                    // slide middle platform

            // drone
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3054, -72544, 787), new Vector3f(-1907, -73969, 787), new Angle(-0.22f, 0.97f)).Mask(SpawnPlane.Mask_Airborne)); // middle horizontal section
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3838, -70256, 787), new Vector3f(-2210, -70176, 787), new Angle(-0.53f, 0.85f)).Mask(SpawnPlane.Mask_Airborne)); // back horizontal section
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(1456, -75623, 1655), new Angle(-0.02f, 1.00f)).Mask(SpawnPlane.Mask_Airborne));                                  // above right slide

            Rooms.Add(layout);


            //// EXTRA DRONES ////
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-13297, -63905, 3287), new Angle(0.01f, 1.00f)));                                                   // first section, after fakeMantle platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-16909, -63726, 3334), new Angle(-0.01f, 1.00f)));                                                  // before first vent
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-15556, -55873, 4360), new Angle(-0.91f, 0.41f)));                                                  // after sensory boost
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8338, -56423, 4049), new Vector3f(-9328, -55028, 4049), new Angle(1.00f, 0.02f)));                 // before big slide
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6013, -68097, 2075), new Vector3f(6087, -63280, 2075), new Angle(0.70f, 0.71f)).AsVerticalPlane()); // across "3pistol hallway"
            layout.Mask(SpawnPlane.Mask_Airborne);
            Rooms.Add(layout);

            //// EXTRA ////
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4540, -70299, -80), new Angle(-0.02f, 1.00f)).Mask(SpawnPlane.Mask_Flatground)); // before elevator door

            Rooms.Add(layout);



            ////////////////// Combine enemies from LookInside to Awakening //////////////////
            var LIenemiesAll = LookInside.ReturnEnemiesInRoom(AllEnemies);

            // remove any cp and attached doors
            RemoveParentObjects(ref LIenemiesAll);


            // LookInside Room1
            var LIenemies = LookInisde_room1.ReturnEnemiesInRoom(LIenemiesAll);

            LIenemies[0] = new EnemyTurret(LIenemies[0]);
            LIenemies[1] = new EnemyTurret(LIenemies[1]);
            LIenemies[2] = new EnemyTurret(LIenemies[2]);
            LIenemies[3] = new EnemyDrone(LIenemies[3]);
            LIenemies[4] = new EnemyDrone(LIenemies[4]);
            EnemiesWithoutCP.AddRange(LIenemies.Skip(3).Take(2).ToList()); // both drones to EnemiesWithoutCP
            EnemiesWithoutCP.AddRange(LIenemies.Skip(5).Take(3).ToList()); // 3 normals

            LIenemies = LIenemies.Take(3).ToList();                        // leave 3 turrets
            layout    = new RoomLayout(LIenemies);

            // Last room, bottom right, scaffolding, aiming to door
            TurretSpawnInfo turretSpawn = new TurretSpawnInfo();

            turretSpawn.VerticalAngle   = 0;
            turretSpawn.HorizontalSpeed = 50;
            turretSpawn.HorizontalAngle = 45;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1082, -74877, 339), new Angle(0.76f, 0.65f)).SetSpawnInfo(turretSpawn));

            // Last room, exit door platform, aiming to middle
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 10;
            turretSpawn.HorizontalSpeed = 30;
            turretSpawn.HorizontalAngle = 35;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-975, -70054, -80), new Angle(-0.02f, 1.00f)).SetSpawnInfo(turretSpawn));

            // Last room, left bottom, aiming to middle/slide
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 30;
            turretSpawn.HorizontalSpeed = 30;
            turretSpawn.HorizontalAngle = 40;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4739, -70409, -350), new Angle(1.00f, 0.02f)).SetSpawnInfo(turretSpawn));

            // Last room, middle metal wall, aiming to door
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 20;
            turretSpawn.HorizontalSpeed = 40;
            turretSpawn.HorizontalAngle = 30;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66, -69760, 256), new QuaternionAngle(0.00f, -0.71f, 0.71f, 0.00f)).SetSpawnInfo(turretSpawn));


            // Before big slide, right far platform edge, aiming to middile platform
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 10;
            turretSpawn.HorizontalSpeed = 30;
            turretSpawn.HorizontalAngle = 30;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8836, -54267, 3403), new Angle(-0.69f, 0.72f)).SetSpawnInfo(turretSpawn));


            // Before big slide, on top of metal slide, aiming at slide
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 0;
            turretSpawn.HorizontalSpeed = 0;
            turretSpawn.HorizontalAngle = 0;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11887, -56304, 4500), new QuaternionAngle(0.00f, 0.22f, 0.00f, 0.98f)).SetSpawnInfo(turretSpawn));


            // 3DudeHallway, middle platform left corner, aiming at platform 3
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 30;
            turretSpawn.HorizontalSpeed = 30;
            turretSpawn.HorizontalAngle = 30;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5282, -66960, 1678), new Angle(-0.47f, 0.88f)).SetSpawnInfo(turretSpawn));


            // After fan, first platform
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 10;
            turretSpawn.HorizontalSpeed = 50;
            turretSpawn.HorizontalAngle = 45;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-30803, -63598, 3198), new Angle(0.39f, 0.92f)).SetSpawnInfo(turretSpawn));

            // First classic pistol room, on billboard side, aiming towards main path
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 0;
            turretSpawn.HorizontalSpeed = 0;
            turretSpawn.HorizontalAngle = 0;
            turretSpawn.SetRange(3220);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14269, -61957, 3503), new QuaternionAngle(-0.35f, 0.61f, -0.61f, 0.35f)).SetSpawnInfo(turretSpawn));

            layout.DoNotReuse();
            Rooms.Add(layout);



            enemies = LookInisde_room2.ReturnEnemiesInRoom(LIenemiesAll); // 2 shifters
            // SHIFTER 1 : Slide area, before last room
            info = new ShifterSpawnInfo()
            {
                shiftPoints = new List <Tuple <Vector3f, Angle> >()
                {
                    new Tuple <Vector3f, Angle>(new Vector3f(8584, -79887, 878), new Angle(0.82f, 0.58f)),  // platform
                    new Tuple <Vector3f, Angle>(new Vector3f(7975, -80338, 1711), new Angle(0.70f, 0.71f)), // billboard
                    new Tuple <Vector3f, Angle>(new Vector3f(6778, -79664, 1997), new Angle(0.27f, 0.96f)), // billboard mounted
                    new Tuple <Vector3f, Angle>(new Vector3f(6363, -77943, 1348), new Angle(-0.40f, 0.91f)) // in wall, SR route(kinda)
                }
            };
            enemies[0] = new EnemyShifter(enemies[0], 4).AddFixedSpawnInfo(info);
            layout     = new RoomLayout(enemies[0]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8295, -78141, 1093), new Angle(0.71f, 0.71f)).DoNotReuse()); // slide (before last room)
            Rooms.Add(layout);


            // SHIFTER 2: sensory boost
            info = new ShifterSpawnInfo()
            {
                shiftPoints = new List <Tuple <Vector3f, Angle> >()
                {
                    new Tuple <Vector3f, Angle>(new Vector3f(-17375, -58267, 3909), new Angle(-0.47f, 0.88f)), // middle platform
                    new Tuple <Vector3f, Angle>(new Vector3f(-17139, -56103, 4100), new Angle(-0.61f, 0.79f)), // 3rd platform
                    new Tuple <Vector3f, Angle>(new Vector3f(-15815, -57200, 4266), new Angle(-0.89f, 0.45f)), // wall pipes (above SR route)
                    new Tuple <Vector3f, Angle>(new Vector3f(-17518, -57571, 4325), new Angle(-0.34f, 0.94f))  // middle platform, street light
                }
            };
            enemies[1] = new EnemyShifter(enemies[1], 4).AddFixedSpawnInfo(info);
            layout     = new RoomLayout(enemies[1]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-15517, -59683, 2798), new Angle(1.00f, 0.01f)).DoNotReuse()); // sensory boost
            Rooms.Add(layout);


            // last slide, after 3dude hallway
            LIenemies    = LookInisde_room3.ReturnEnemiesInRoom(LIenemiesAll);
            LIenemies[0] = new EnemyShieldOrb(LIenemies[0]);
            // 0 - orb
            layout = new RoomLayout(LIenemies.Take(1).Single());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8990, -73925, 2302), new Vector3f(9006, -72959, 1917))); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8149, -74709, 1975)));                                   // middle platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8988, -72344, 2383)));                                   // collectible platform, right
            layout.DoNotReuse();
            Rooms.Add(layout);

            layout = new RoomLayout(LIenemies.Skip(1).ToList());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(7479, -74629, 1948), new Angle(0.76f, 0.65f)).Mask(SpawnPlane.Mask_Flatground));                                                                      // middle platform, left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(9033, -74727, 1948), new Angle(0.88f, 0.47f)).Mask(SpawnPlane.Mask_Flatground));                                                                      // middle platform, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(9811, -74741, 1948), new Angle(-1.00f, 0.02f)).Mask(SpawnPlane.Mask_Flatground));                                                                     // middle platform, right corner
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8281, -75940, 1682), new Angle(0.72f, 0.70f)).Mask(SpawnPlane.Mask_Highground));                                                                      // slide start
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(7000, -74212, 1807), new Angle(0.40f, 0.92f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                                               // left, small wall ledge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(7389, -76764, 2291), new Vector3f(8757, -76806, 2291), new Angle(0.81f, 0.58f)).AsVerticalPlane().SetMaxEnemies(2).Mask(SpawnPlane.Mask_Highground)); // SR beam

            // drone extra
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8851, -75820, 2415), new Vector3f(7486, -75685, 2415), new Angle(0.69f, 0.72f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);



            // Custom Checkpoints
            // after big slide, (just bigger/additional for speedrunners)
            CustomCheckPoints.Add(new GameObjects.CustomCP(mapType, new Vector3f(2546, -60309, 640), new Vector3f(5995, -58083, 3287),
                                                           new Vector3f(4099, -58986, 1396), new Angle(-0.22f, 0.98f)));

            // after "3dudehallway"
            CustomCheckPoints.Add(new GameObjects.CustomCP(mapType, new Vector3f(5554, -73284, 2487), new Vector3f(7084, -72234, 1285),
                                                           new Vector3f(6099, -72832, 1800), new Angle(-0.03f, 1.00f)));
        }
Exemple #5
0
        public void Gen_Nightmare()
        {
            // GEN - Nightmare (classic levels)

            // GEN - SR routes
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 13); // static range, no gap

            Rooms = new List <RoomLayout>();
            RoomLayout   layout;
            List <Enemy> enemies;

            //// room 1 - pistol
            enemies = room1.ReturnEnemiesInRoom(AllEnemies);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false); // take pistol, force, no cp/door attached

            //// room 3 - 3 pistol, before bridge
            enemies = room3.ReturnEnemiesInRoom(AllEnemies);
            DetachEnemyFromCP(ref enemies, force: false);
            layout = new RoomLayout(enemies);
            // special/high spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12850, -56073, 4908), new Angle(-1.00f, 0.03f))); // door frame
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11519, -54938, 5039), new Angle(-0.98f, 0.18f))); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10337, -54556, 4030), new Angle(-0.97f, 0.23f))); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9410, -54661, 5294), new Angle(-0.92f, 0.38f)));  // high spot ad
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8988, -57174, 4195), new Angle(0.98f, 0.22f)));   // wall lamp
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8100, -55539, 3971), new Angle(-0.99f, 0.11f)));  // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7492, -50434, 4798), new Angle(-0.89f, 0.45f)));  // above bridge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12441, -54370, 5670), new Angle(-0.33f, 0.95f))); // generator above entrance
            Rooms.Add(layout);

            //// Room 4 - 3 pistol, hallway
            enemies = room4.ReturnEnemiesInRoom(AllEnemies);
            DetachEnemyFromCP(ref enemies, force: false);
            layout = new RoomLayout(enemies);
            // special/high spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5839, -61841, 2457), new Angle(0.76f, 0.65f)));                                                     // neon sign, first building/platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5591, -65940, 2138), new Angle(0.71f, 0.71f)));                                                     // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6417, -64113, 2239), new Angle(0.76f, 0.65f)));                                                     // pipes on right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6412, -72908, 1798), new Angle(0.72f, 0.70f)));                                                     // after pipes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6676, -72123, 2088), new Vector3f(5889, -72129, 2088), new Angle(0.69f, 0.72f)).AsVerticalPlane()); // slide pipe
            Rooms.Add(layout);

            //// Room 5 - 5 enemies, dome
            enemies = room5.ReturnEnemiesInRoom(AllEnemies);
            DetachEnemyFromCP(ref enemies, force: false);
            layout = new RoomLayout(enemies);
            // high/special spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3256, -68387, 237), new Angle(-0.61f, 0.79f)));   // neon sign platform, far bottom
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3373, -72039, 924), new Angle(-0.64f, 0.77f)));   // street light
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(1943, -75088, 1008), new Angle(-0.26f, 0.97f)));  // big pipe, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1100, -74848, 340)).RandomAngle());              // small platform, right bot
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2744, -71368, 473), new Angle(0.00f, 1.00f)));   // fuel tank
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(891, -70099, 584), new Angle(-0.59f, 0.80f)));    // street light
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(319, -69641, 1223), new Angle(-0.51f, 0.86f)));   // above middle pos, between beams (double fuel tanks)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4606, -75429, 2298), new Angle(-1.00f, 0.03f)));  // above spawn
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(1630, -71496, 2080), new Angle(-0.70f, 0.71f)));  // middle of dome, high generator
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2451, -68522, 1842), new Angle(-0.39f, 0.92f))); // high pipes, above exit door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-964, -67398, 1411), new Angle(-0.83f, 0.56f)));  // generator
            Rooms.Add(layout);

            //// EXTRA spots
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17894, -64016, 4128), new Angle(0.08f, 1.00f)));                                                                    // before first vent, on small beam, above entrance
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-27278, -64081, 3021), new Angle(0.01f, 1.00f)));                                                                    // on big fan
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-20563, -58060, 4732), new Angle(-0.84f, 0.54f)));                                                                   // before sensory boost, on right wall
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8906, -76819, 2291), new Vector3f(7531, -76705, 2291), new Angle(0.74f, 0.67f)).AsVerticalPlane().SetMaxEnemies(2)); // before dome, dsj beam
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4309, -70324, -80), new Angle(0.02f, 1.00f)));                                                                      // before elevator
            Rooms.Add(layout);
        }
Exemple #6
0
        public void Gen_Hardcore()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 39);

            Rooms = new List <RoomLayout>();
            RoomLayout   layout;
            List <Enemy> enemies;

            // Room 1
            enemies    = hc_room1.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyTurret(enemies[0]);
            enemies[1] = new EnemyTurret(enemies[1]);
            enemies[2] = new EnemyTurret(enemies[2]);
            enemies[3] = new EnemyDrone(enemies[3]);
            enemies[4] = new EnemyDrone(enemies[4]);

            // turrets
            layout = new RoomLayout(enemies.Take(3).ToList());

            // slide ledge
            TurretSpawnInfo turretSpawn = new TurretSpawnInfo();

            turretSpawn.VerticalAngle   = 10;
            turretSpawn.HorizontalSpeed = 50;
            turretSpawn.HorizontalAngle = 60;
            turretSpawn.SetRange(3250);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153916, -52963, 3803), new Angle(-0.68f, 0.73f)).SetSpawnInfo(turretSpawn));

            // platform near uplink
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 10;
            turretSpawn.HorizontalSpeed = 50;
            turretSpawn.HorizontalAngle = 90;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153093, -59742, 2832), new Angle(-0.35f, 0.94f)).SetSpawnInfo(turretSpawn));

            // left billboard, aiming toward last raised platform
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = -30;
            turretSpawn.HorizontalSpeed = 0;
            turretSpawn.HorizontalAngle = 0;
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158809, -58789, 4248), new Angle(0.94f, 0.34f)).SetSpawnInfo(turretSpawn));

            // last room, middle ledge platform
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = -10;
            turretSpawn.HorizontalSpeed = 50;
            turretSpawn.HorizontalAngle = 45;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155608, -45100, 3618), new Angle(0.46f, 0.89f)).SetSpawnInfo(turretSpawn));

            // last room, around left serverrack
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 10;
            turretSpawn.HorizontalSpeed = 0;
            turretSpawn.HorizontalAngle = 0;
            turretSpawn.SetRange(3100);
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(159454, -42630, 3198), new Angle(-0.97f, 0.24f)).SetSpawnInfo(turretSpawn));

            // last room, middle platform, aiming towards main entry
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle   = 20;
            turretSpawn.HorizontalSpeed = 0;
            turretSpawn.HorizontalAngle = 0;
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154429, -48413, 3198), new Angle(-0.99f, 0.13f)).SetSpawnInfo(turretSpawn));

            // right platform billboard, aiming to uplink
            turretSpawn = new TurretSpawnInfo();
            turretSpawn.VerticalAngle = 45;
            turretSpawn.SetRange(TurretSpawnInfo.DefaultRange);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155018, -62253, 3356), new QuaternionAngle(0.09f, 0.70f, 0.70f, 0.09f)).SetSpawnInfo(turretSpawn));

            layout.DoNotReuse();
            Rooms.Add(layout);


            // Floating platforms
            layout = new RoomLayout(RemoveParentObjects(enemies.Skip(3).ToList()));
            // ground spawns
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155878, -57543, 2833), new Vector3f(156530, -57130, 2833), new Angle(-0.72f, 0.70f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Flatground)); // platform 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158035, -59066, 2832), new Vector3f(158265, -60201, 2832), new Angle(-0.77f, 0.64f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Flatground)); // platform 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154542, -61364, 2832), new Vector3f(155412, -62000, 2832), new Angle(-0.18f, 0.98f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Flatground)); // platform 3
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154006, -58364, 2832), new Vector3f(153574, -59231, 2832), new Angle(-0.44f, 0.90f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Flatground)); // platform 4
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154862, -62325, 4234), new Angle(0.22f, 0.97f)).Mask(SpawnPlane.Mask_Highground));                                                        // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158603, -59749, 4248), new Angle(-0.98f, 0.18f)).Mask(SpawnPlane.Mask_Highground));                                                       // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155258, -56568, 4301), new Angle(-0.63f, 0.77f)).Mask(SpawnPlane.Mask_Highground));                                                       // raised platform wall, left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153344, -56715, 4301), new Angle(-0.58f, 0.82f)).Mask(SpawnPlane.Mask_Highground));                                                       // raised platform wall, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153884, -51710, 4517), new Angle(-0.71f, 0.71f)).Mask(SpawnPlane.Mask_Highground));                                                       // above pipes, slide

            // drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153066, -60119, 3365), new Vector3f(157084, -59017, 3365), new Angle(-0.57f, 0.82f)).Mask(SpawnPlane.Mask_Airborne)); // middle floating platforms
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(157441, -56301, 3838), new Angle(-0.96f, 0.27f)).Mask(SpawnPlane.Mask_Airborne));                                     // ledge climb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153447, -53383, 4042), new Vector3f(154392, -53333, 4042), new Angle(-0.72f, 0.70f)).Mask(SpawnPlane.Mask_Airborne)); // near slide frame
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(152182, -58956, 3312), new Vector3f(154446, -57679, 3312), new Angle(-0.52f, 0.85f)).Mask(SpawnPlane.Mask_Airborne)); // back, floating platforms
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153277, -46094, 3719), new Vector3f(155130, -47623, 3719), new Angle(-0.88f, 0.47f)).Mask(SpawnPlane.Mask_Airborne)); // last room, first section
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156323, -42670, 4252), new Vector3f(157676, -43712, 4252), new Angle(-0.90f, 0.44f)).Mask(SpawnPlane.Mask_Airborne)); // last room, second section
            Rooms.Add(layout);

            // Last Room
            enemies = hc_room3.ReturnEnemiesInRoom(AllEnemies);                                                           // orb + 2 enemies
            enemies.AddRange(hc_room2.ReturnEnemiesInRoom(AllEnemies));                                                   // shifters
            layout = new RoomLayout(new EnemyShieldOrb(enemies[0]));                                                      // orb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158199, -43323, 3363), new Vector3f(156247, -42835, 3363))); // default orb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158340, -44165, 4139)));                                     // left serverrack
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156293, -44027, 3288)));                                     // floating in middle, last section
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(157757, -42117, 3517)));                                     // near door
            layout.DoNotReuse();
            Rooms.Add(layout);

            layout = new RoomLayout(enemies.Skip(1).ToList());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154503, -43834, 3198), new Vector3f(154684, -45125, 3198), new Angle(-0.89f, 0.45f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153952, -46586, 3198), new Vector3f(154822, -47930, 3198), new Angle(-0.87f, 0.49f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(152584, -47444, 3198), new Vector3f(151648, -47889, 3198), new Angle(-0.38f, 0.92f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156773, -46517, 3198), new Vector3f(156409, -45096, 3198), new Angle(-0.88f, 0.48f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(157709, -43922, 3198), new Angle(-0.88f, 0.47f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155972, -42788, 3198), new Angle(-0.86f, 0.52f)).Mask(SpawnPlane.Mask_Flatground));
            Rooms.Add(layout);



            // EXTRA //
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158458, -42995, 3198), new Angle(-0.98f, 0.19f)).Mask(SpawnPlane.Mask_Flatground)); // last room spawns
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156573, -41959, 3198), new Angle(-0.72f, 0.70f)).Mask(SpawnPlane.Mask_Flatground)); // last room spawns
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(132165, -69982, 2398), new Angle(0.83f, 0.56f)).Mask(SpawnPlane.Mask_Flatground));  // infront of elevator

            // first part of map
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(133134, -75252, 3298), new Vector3f(133859, -74498, 3298), new Angle(0.78f, 0.62f)).Mask(SpawnPlane.Mask_Flatground));                    // first platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(137251, -73872, 4042), new Vector3f(138452, -74746, 4052), new Angle(-0.94f, 0.35f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane()); // slide ledge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(144243, -69072, 3887), new Vector3f(144299, -69784, 3887), new Angle(-0.98f, 0.20f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane()); // ledge before grinder
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(147668, -69379, 4493), new Angle(0.99f, 0.10f)).Mask(SpawnPlane.Mask_Highground));                                                        // billboard after grinder
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(150356, -67284, 4804), new Angle(-0.96f, 0.28f)).Mask(SpawnPlane.Mask_Highground));                                                       // billboard between default drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154819, -68148, 4848), new Angle(1.00f, 0.04f)).Mask(SpawnPlane.Mask_Highground));                                                        // last billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154675, -66714, 3938), new Vector3f(155200, -67550, 3937), new Angle(-0.99f, 0.12f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane()); // last slide ledge
            Rooms.Add(layout);

            //// Awakening Enemies
            List <Enemy> AwakeningEnemies = new List <Enemy>();

            enemies = Awakening_hc_room1.ReturnEnemiesInRoom(AllEnemies); //pistol, 2 uzi,  weeb, frogger
            AwakeningEnemies.AddRange(enemies.Take(4).ToList());
            enemies = Awakening_hc_room2.ReturnEnemiesInRoom(AllEnemies); // frogger,  pistol,  waver
            enemies[1].SetEnemyType(Enemy.EnemyTypes.Waver);
            AwakeningEnemies.AddRange(enemies);
            enemies    = Awakening_hc_room4.ReturnEnemiesInRoom(AllEnemies); // drone, uzi, pistol
            enemies[0] = new EnemyDrone(enemies[0]);
            AwakeningEnemies.AddRange(enemies);
            enemies = Awakening_hc_room5.ReturnEnemiesInRoom(AllEnemies); // pistol, waver, shielder, frogger
            enemies[2].SetEnemyType(Enemy.EnemyTypes.Waver);
            AwakeningEnemies.AddRange(enemies);
            RemoveParentObjects(ref AwakeningEnemies);   // remove parent objects
            EnemiesWithoutCP.AddRange(AwakeningEnemies); // just add them to enemy pool

            // custom checkpoints
            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(152500, -56671, 5228), new Vector3f(155863, -53898, 2256),
                                               new Vector3f(153243, -56343, 3598), new Angle(0.57f, 0.82f))); // before last room
        }
Exemple #7
0
        protected override void Gen_PerRoom()
        {
            Rooms = new List <RoomLayout>();
            RoomLayout         layout;
            List <WorldObject> orbs = new List <WorldObject>();

            for (int i = 1; i <= 13; i++)
            {
                orbs.Add(new CVOrb(i));
            }
            layout = new RoomLayout(orbs);

            // first platform
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-15460, -4642, -807))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-14811, -4782, -1087))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-15138, -4506, -1114))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-15118, -4659, -1441))));

            ////// 2nd platform (big piece) //////
            // up facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13211, -4677, 98))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13773, -4652, 89))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12932, -5260, 8))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12251, -5712, 22))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13727, -4486, -413))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13321, -4470, -414))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13706, -4929, -800))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13362, -5387, -775))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12495, -5318, -801))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12088, -4903, -1102))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12906, -4480, -811))));
            // bot facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12520, -5746, -653))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12898, -5262, -653))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12528, -5327, -1477))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13262, -5315, -1456))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13746, -4691, -1456))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13174, -4920, -1832))));
            // side facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13406, -4215, -115))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11807, -5734, -311))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12782, -5704, -305))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13206, -5230, -305))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12807, -4565, -305))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-12901, -4195, -1081))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13684, -4164, -1081))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-13331, -4207, -694))));

            ////// 3nd platform (tunnel) //////
            // up facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11319, -4916, -301))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10838, -4647, -414))));
            // bot facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10878, -4667, -1119))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11365, -4986, -1472))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11237, -4978, -604))));
            // side facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11254, -4525, -755))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10855, -4460, -755))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11273, -5316, -755))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11374, -5257, -1053))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-11580, -4872, -1133))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10960, -4934, -1133))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10625, -4649, -736))));

            ////// 4nd platform (U-shaped with floating platform) //////
            // up facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10501, -4702, -109))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10086, -4234, -448))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10113, -5073, -401))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10055, -4632, -803))));
            // bot facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10046, -4960, -1201))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10093, -4332, -1201))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10534, -4617, -420))));
            // side facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10102, -4111, -776))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10097, -5144, -778))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9803, -4673, -1041))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9803, -4673, -1041))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10509, -4192, -308))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-10480, -5166, -297))));

            ////// 5nd platform (last one, biggest piece) //////
            // up facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9336, -5617, 135))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8486, -5325, 98))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8089, -5295, -395))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-7694, -4890, -401))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8916, -5304, -384))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9292, -5346, -732))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9299, -4780, -751))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8863, -4915, -400))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8902, -5351, -401))));
            // bot facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9266, -4867, -1106))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9339, -5339, -1106))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8839, -4955, -1106))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8107, -5289, -1106))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-7691, -4951, -1483))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9316, -5667, -1483))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8903, -5293, -1483))));
            // side facing
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9352, -5997, -1004))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9352, -5997, -348))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9701, -5736, -265))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-9599, -4629, -1110))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8547, -4943, -838))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8092, -5598, -709))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8872, -5679, -709))));
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-8638, -5601, -37))));

            ////// Extra //////
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-16949, -4916, -401)))); // behind spawn
            layout.AddSpawnPlane(new SpawnPlane(ToRelative(new Vector3f(-6261, -4865, -355))));  // end tower/platform
            Rooms.Add(layout);
        }
        protected override void Gen_PerRoom() {
            Rooms = new List<RoomLayout>();
            RoomLayout layout;

            ///// SECTION 1 /////
            List<WorldObject> orbs = new List<WorldObject>();
            orbs.Add(new CVOrb(0x120, 0x1938));
            orbs.Add(new CVOrb(0x128, 0x1920));
            orbs.Add(new CVOrb(0x138, 0x18f0));
            orbs.Add(new CVOrb(0x130, 0x1908));
            layout = new RoomLayout(orbs);

            // railings
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102651, -25257, 298), new Vector3f(102641, -26964, 298))); // middle platform, right railing
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101649, -27187, 289), new Vector3f(101651, -25313, 298))); // middle platform, left railing
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103249, -27136, 298), new Vector3f(103245, -28100, 298))); // middle, right edge, corner railing
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101022, -28150, 295), new Vector3f(101048, -27123, 295))); // middle, left edge, corner railing
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101024, -29145, 296))); // door platform, corner railing left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103296, -29156, 280))); // door platform, corner railing, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104737, -28165, 399))); // right platform, corner jump
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104751, -27124, 457))); // right platform, corner jump 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(99551, -27137, 433))); // left platform, corner jump 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(99553, -28157, 408))); // left platform, corner jump 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103243, -23228, 298))); // behind spawn, railing right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101055, -23226, 298))); // behind spawn, railing left
            // Inside hallways
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103969, -30261, 198))); // door platform, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(100271, -30254, 198))); // door platform, left
            // default platforms
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101177, -27334, 198), new Vector3f(101601, -27971, 198)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102688, -27293, 198), new Vector3f(103122, -28041, 198)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103032, -29533, 198), new Vector3f(101283, -32102, 198)).SetMaxEnemies(2));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101852, -29773, 198), new Vector3f(102517, -25240, 198)).SetMaxEnemies(2));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102209, -29355, 310))); // arc
            Rooms.Add(layout);

            ///// SECTION 2 /////
            orbs = new List<WorldObject>();
            orbs.Add(new CVOrb(0x168, 0x1860));
            orbs.Add(new CVOrb(0x170, 0x1848));
            orbs.Add(new CVOrb(0x178, 0x1830));
            orbs.Add(new CVOrb(0x180, 0x1818));
            orbs.Add(new CVOrb(0x188, 0x1800));
            orbs.Add(new CVOrb(0x190, 0x17E8));

            layout = new RoomLayout(orbs);
            // default platforms
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102944, -45880, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101431, -42426, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104838, -43916, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104773, -45813, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102707, -47428, 1398), new Vector3f(102693, -47409, 1398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103029, -46097, 1398), new Vector3f(101401, -45763, 1398)));
            // railings
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103166, -45600, 1612), new Vector3f(101448, -45596, 1572)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103145, -45798, 1686), new Vector3f(103142, -47288, 1646)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101566, -44100, 758), new Vector3f(102732, -44109, 758)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103150, -43817, 758), new Vector3f(103146, -42426, 758)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104649, -42295, 758), new Vector3f(104635, -43831, 757)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104879, -44106, 758), new Vector3f(106369, -44109, 758)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(106419, -45598, 758), new Vector3f(104913, -45599, 758)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104668, -45878, 757), new Vector3f(104641, -47298, 758)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(101374, -45583, 757), new Vector3f(102736, -45599, 757)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103141, -45879, 758), new Vector3f(103142, -47345, 758)));
            // railing corners, hovering
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103155, -44120, 871)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104643, -44088, 924)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104627, -45610, 858)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103149, -45604, 1652)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102550, -46196, 1642)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(106668, -45599, 927)));
            //// others
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104870, -42133, 939))); // right-bot, railing between buildings
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104726, -48032, 648))); // between trees
            // inside hallways
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(100616, -43116, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(107224, -43101, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(107059, -46584, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(100693, -45905, 1398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(100747, -46601, 648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102836, -48000, 1398)));
            Rooms.Add(layout);

            ///// SECTION 3 /////

            orbs = new List<WorldObject>();
            orbs.Add(new CVOrb(0x140, 0x18D8));
            orbs.Add(new CVOrb(0x148, 0x18C0));
            orbs.Add(new CVOrb(0x150, 0x18A8));
            orbs.Add(new CVOrb(0x158, 0x1890));
            orbs.Add(new CVOrb(0x160, 0x1878));

            layout = new RoomLayout(orbs);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(106184, -65970, -2501), new Vector3f(107959, -68040, -2501)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(109818, -68014, -2501), new Vector3f(111236, -66392, -2501)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(110215, -71496, -1901), new Vector3f(111502, -72057, -1901)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(107927, -69955, -2501), new Vector3f(106114, -70584, -2501)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(106112, -72492, -2501), new Vector3f(107912, -72994, -2501)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104237, -73035, -2501), new Vector3f(102644, -71272, -2501)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102571, -67943, -2501), new Vector3f(104293, -66198, -2501)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102586, -68564, -1501), new Vector3f(103486, -68935, -1501)));
            // railings corners
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103624, -68462, -1338)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104448, -71025, -2223)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(105938, -72257, -2211)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(108167, -72230, -2243)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(108161, -70738, -2201)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(108130, -69738, -2307)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(105927, -69755, -2214)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(105943, -70756, -2205)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104435, -68252, -2201)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(104444, -66024, -2266)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(105930, -68267, -2214)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(108162, -68228, -2275), new Vector3f(108145, -66148, -2265)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(109664, -66031, -2216), new Vector3f(109658, -68267, -2303)));
            // others
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102314, -67150, -1788))); // door frame (left)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103336, -66157, -1789))); // door frame 2 (left)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(103349, -70371, -1501))); // bridge (after button press)
            // in hallways
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(102253, -68760, -598)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(110841, -72220, -798)));
            Rooms.Add(layout);

            ////// JumpPads //////
            #region JumpPad
            NonPlaceableObject jumppad = new JumpPad(0x4e8);//4500
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo());//default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-90.0f, -40.0f, 0.0f), Speed = 8000 });//forward high
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-90.0f, -20.0f, 0.0f), Speed = 8000 });//forward short
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-90.0f, -80.00f, 0.0f), Speed = 8100 });//3 platfrom
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0x508);//4700
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo());//default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-85.0f, -40.0f, 0.0f), Speed = 8000 }.SetRarity(0.35));//skip all jumppads
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-60.0f, -73.0f, 0.0f), Speed = 12750 }.SetRarity(0.25));//oob to the exit
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(0.0f, -90.00f, 0.0f), Speed = 100000 }.SetRarity(0.35));//troll
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-57.0f, -45.00f, 0.0f), Speed = 7200 }.SetRarity(0.5));//skip 2
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-35.0f, -70.00f, 0.0f), Speed = 7200 });//skip 1
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0x500);//4800
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo());//default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-75.0f, -60.0f, 0.0f), Speed = 5500 }.SetRarity(0.5));//skip all jumppads
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-85.0f, -70.0f, 0.0f), Speed = 8000 }.SetRarity(0.5));//oob to the next section
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-42.5f, -40.0f, 0.0f), Speed = 5800 });//skip 1
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-2.0f, -3.0f, 0.0f), Speed = 10800 });//fast bounce 
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0x4F0);//4800
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo());//default
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-127.0f, -60.0f, 0.0f), Speed = 6500 });//skip all jumppads
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(0.0f, -90.00f, 0.0f), Speed = 100000 }.SetRarity(0.5));//troll
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-75.0f, -70.0f, 0.0f), Speed = 8050 }.SetRarity(0.35));//oob to the exit
            worldObjects.Add(jumppad);

            jumppad = new JumpPad(0x4F8);//4600
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo());//default
            //jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(.0f, -90.00f, 0.0f), Speed = 10000 }.SetRarity(0.35));//troll
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-170.0f, -60.00f, 0.0f), Speed = 5000 });//high
            jumppad.AddSpawnInfo(new JumpPadSpawnInfo { Angle = new QuaternionAngle(-177.0f, -23.00f, 0.0f), Speed = 12000 });//fast
            worldObjects.Add(jumppad);
            #endregion

        }
Exemple #9
0
        public void Gen_Hardcore()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game);

            Rooms = new List <RoomLayout>();
            RoomLayout layout;

            //// Room 1 ////
            var enemies = room_hc_1.ReturnEnemiesInRoom(AllEnemies);

            enemies[0] = new EnemyShieldOrb(enemies[0]);
            enemies[1].SetEnemyType(Enemy.EnemyTypes.Waver);
            enemies[2].SetEnemyType(Enemy.EnemyTypes.Waver);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, enemyIndex: 3); // frogger
            layout = new RoomLayout(enemies);
            // orb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6768, -7316, 1952)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-5607, -7288, 1845)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7108, -6459, 1845)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6823, -4901, 1563)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-5895, -5014, 1565)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8377, -6113, 1714)).Mask(SpawnPlane.Mask_ShieldOrb));
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4284, -5851, 1301), new Vector3f(-5621, -6300, 1302), new Angle(-1.00f, 0.05f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6459, -6382, 1305), new Vector3f(-5936, -7750, 1302), new Angle(-0.85f, 0.53f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8312, -6684, 1302), new Vector3f(-7833, -7901, 1302), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            // high
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8403, -5657, 1498), new Vector3f(-5265, -5590, 1502), new Angle(-0.74f, 0.67f)).Mask(SpawnPlane.Mask_Highground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-5666, -6600, 1502), new Angle(-0.92f, 0.38f)).Mask(SpawnPlane.Mask_Highground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7522, -6687, 1498), new Angle(-0.78f, 0.63f)).Mask(SpawnPlane.Mask_Highground));
            layout.DoNotReuse();
            Rooms.Add(layout);


            //// Room 2 ////
            enemies = room_hc_2.ReturnEnemiesInRoom(AllEnemies);
            List <Tuple <Vector3f, Angle> > Shifters_Room2 = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(4864, -798, 2797), new Angle(-0.74f, 0.68f)),  // lamp post
                new Tuple <Vector3f, Angle>(new Vector3f(4215, 905, 3376), new Angle(-0.66f, 0.75f)),   // far big lab tube structure
                new Tuple <Vector3f, Angle>(new Vector3f(5616, -2995, 3472), new Angle(-0.87f, 0.50f)), // billboard
                new Tuple <Vector3f, Angle>(new Vector3f(3880, -5415, 3478), new Angle(0.45f, 0.89f)),  // billboard 2
                new Tuple <Vector3f, Angle>(new Vector3f(3905, -8080, 2745), new Angle(0.52f, 0.86f)),  // boxes near exit
                new Tuple <Vector3f, Angle>(new Vector3f(6315, -8011, 2818), new Angle(0.94f, 0.35f)),  // lab tube near exit
                new Tuple <Vector3f, Angle>(new Vector3f(6222, -4975, 1497), new Angle(0.95f, 0.33f)),  // computers, left
                new Tuple <Vector3f, Angle>(new Vector3f(5435, -1169, 1367), new Angle(-0.80f, 0.60f)), // near red window
                new Tuple <Vector3f, Angle>(new Vector3f(4508, -606, 1608), new Angle(-0.79f, 0.61f)),  // lab tube under stairs
                new Tuple <Vector3f, Angle>(new Vector3f(3047, 153, 2238), new Angle(-0.48f, 0.88f)),   // big ad monitor
                new Tuple <Vector3f, Angle>(new Vector3f(4284, -6800, 2502), new Angle(0.68f, 0.73f))   // last platform ledge
            };

            enemies[0] = new EnemyDrone(enemies[0]);
            enemies[1] = new EnemyDrone(enemies[1]);
            enemies[2] = new EnemyShifter(enemies[2]).AddFixedSpawnInfoList(ref Shifters_Room2);
            enemies[3] = new EnemyShifter(enemies[3]).AddFixedSpawnInfoList(ref Shifters_Room2);
            enemies[4].SetEnemyType(Enemy.EnemyTypes.Waver);
            RandomPickEnemiesWithoutCP(ref enemies, enemyIndex: 4);              // waver
            RandomPickEnemiesWithoutCP(ref enemies, enemyIndex: 1, force: true); // drone
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3982, -5237, 1302), new Vector3f(5344, -1710, 1305), new Angle(-0.72f, 0.69f))
                                 .Mask(SpawnPlane.Mask_Flatground).SetMaxEnemies(5));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3411, -92, 1902), new Angle(-0.60f, 0.80f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(4931, 433, 2502), new Vector3f(5637, -498, 2502), new Angle(-0.92f, 0.40f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6112, -6931, 2502), new Vector3f(5091, -7638, 2502), new Angle(1.00f, 0.03f)).Mask(SpawnPlane.Mask_Flatground));
            // high/special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3126, -6791, 2740), new Angle(0.38f, 0.92f)).Mask(SpawnPlane.Mask_Highground)); // boxes above entry
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5765, -6146, 1302), new Angle(0.78f, 0.62f)).Mask(SpawnPlane.Mask_Highground)); // around left lab tubes
            // reuse shifter points
            for (int i = 0; i < Shifters_Room2.Count; i++)
            {
                layout.AddSpawnPlane(new SpawnPlane(Shifters_Room2[i].Item1, Shifters_Room2[i].Item2).Mask(SpawnPlane.Mask_Highground));
            }
            // drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(5077, -7649, 2953), new Angle(0.84f, 0.55f)).Mask(SpawnPlane.Mask_Airborne)); // above exit
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(3497, 399, 2953), new Angle(-0.59f, 0.80f)).Mask(SpawnPlane.Mask_Airborne));  // above stairs, right corner
            Rooms.Add(layout);


            //// Room 3 ////
            enemies = room_hc_3.ReturnEnemiesInRoom(AllEnemies);

            List <Tuple <Vector3f, Angle> > Shifters_Room3 = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(17071, -11951, 2502), new Angle(0.88f, 0.48f)), // right hallway corner
                new Tuple <Vector3f, Angle>(new Vector3f(17159, -7749, 2502), new Angle(0.99f, 0.14f)),  // end of 1st platform
                new Tuple <Vector3f, Angle>(new Vector3f(15093, -7805, 2496), new Angle(1.00f, 0.04f)),  // platform ledge
                new Tuple <Vector3f, Angle>(new Vector3f(13055, -6635, 3390), new Angle(-0.98f, 0.18f)), // right billboard
                new Tuple <Vector3f, Angle>(new Vector3f(14355, -6668, 3390), new Angle(-0.97f, 0.26f)), // right billboard 2
                new Tuple <Vector3f, Angle>(new Vector3f(10977, -12438, 2740), new Angle(0.52f, 0.86f)), // boxes near end
                new Tuple <Vector3f, Angle>(new Vector3f(14630, -12098, 2740), new Angle(0.68f, 0.74f)), // boxes middle
                new Tuple <Vector3f, Angle>(new Vector3f(15924, -12793, 3429), new Angle(0.76f, 0.65f)), // high billboard/ad
                new Tuple <Vector3f, Angle>(new Vector3f(10489, -11790, 2578), new Angle(0.01f, 1.00f)), // hallway corner near exit
            };

            enemies[0] = new EnemyShieldOrb(enemies[0]);
            enemies[1] = new EnemyDrone(enemies[1]);
            enemies[2] = new EnemyShifter(enemies[2]).AddFixedSpawnInfoList(ref Shifters_Room3);
            enemies[3] = new EnemyShifter(enemies[3]).AddFixedSpawnInfoList(ref Shifters_Room3);
            enemies[4].SetEnemyType(Enemy.EnemyTypes.Waver);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, enemyIndex: 1); // drone
            // orb
            layout = new RoomLayout(enemies[0]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(16280, -12539, 2691)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(16310, -10714, 2959)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(15039, -9824, 2582)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(13861, -6837, 2815)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(11599, -10551, 2785)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(15652, -12369, 2586), new Vector3f(12159, -12671, 2846)));
            Rooms.Add(layout);
            // enemies
            layout = new RoomLayout(enemies.Skip(1).ToList());
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(12147, -11543, 2504), new Vector3f(14354, -12122, 2504), new Angle(0.69f, 0.73f))
                                 .Mask(SpawnPlane.Mask_Flatground).SetMaxEnemies(2));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(15686, -11658, 2504), new Vector3f(17032, -12005, 2502), new Angle(0.76f, 0.66f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(16578, -7197, 2497), new Vector3f(15434, -7737, 2504), new Angle(1.00f, 0.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(11363, -14395, 2504), new Vector3f(10988, -13133, 2504), new Angle(0.70f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            // high - reuse shifter points
            for (int i = 0; i < Shifters_Room3.Count; i++)
            {
                layout.AddSpawnPlane(new SpawnPlane(Shifters_Room3[i].Item1, Shifters_Room3[i].Item2).Mask(SpawnPlane.Mask_Highground));
            }
            // drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(11527, -12313, 3111), new Angle(0.47f, 0.88f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);

            //// EXTRA ////
            //layout = new RoomLayout();
            // above mara
            //layout.AddSpawnPlane(new SpawnPlane(new Vector3f(18352, -29019, 3338), new Vector3f(18233, -27237, 3338), new Angle(0.82f, 0.58f)).Mask(SpawnPlane.Mask_Airborne).AsVerticalPlane());
            //layout.AddSpawnPlane(new SpawnPlane(new Vector3f(16222, -29200, 3134), new Vector3f(16132, -27307, 3134), new Angle(0.54f, 0.84f)).Mask(SpawnPlane.Mask_Airborne).AsVerticalPlane());
            //Rooms.Add(layout);
        }
Exemple #10
0
        public void Gen_Hardcore()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game);

            Rooms = new List <RoomLayout>();
            RoomLayout layout;


            //// Room 1 ////
            var enemies = room_HC_1.ReturnEnemiesInRoom(AllEnemies);

            enemies[0] = new EnemyDrone(enemies[0]);
            enemies[1].SetEnemyType(EnemyTypes.Splitter);
            RandomPickEnemiesWithoutCP(ref enemies, force: true);
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(20372, -159194, -1401), new Vector3f(20358, -158300, -1406), new Angle(-0.03f, 1.00f))
                                 .Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(16283, -161699, -2491), new Vector3f(17048, -160976, -2491), new Angle(0.28f, 0.96f))
                                 .Mask(SpawnPlane.Mask_Flatground).AllowSplitter());
            // drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(11145, -173357, -880), new Angle(0.25f, 0.97f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(22151, -158628, -102), new Angle(0.21f, 0.98f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(2159, -165656, -1289), new Angle(-0.52f, 0.85f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);
            CustomCheckPoints.Add(new CustomCP(mapType, new Vector3f(17292, -162103, -1956), new Vector3f(15817, -163058, -2805),
                                               new Vector3f(16081, -162398, -2492), new Angle(-0.47f, 0.88f)));


            //// Room 2 ////
            enemies    = room_HC_2.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyTurret(enemies[0]);
            enemies[1] = new EnemyTurret(enemies[1]);
            enemies[2] = new EnemyShieldOrb(enemies[2]);
            RandomPickEnemiesWithoutCP(ref enemies, enemyIndex: 4); // pistol
            RandomPickEnemiesWithoutCP(ref enemies, enemyIndex: 0); // turret
            // orb
            layout = new RoomLayout(enemies.Where(x => x is EnemyShieldOrb).First());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6152, -160976, -1188))); // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7151, -163770, -1801))); // right of zipline
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4205, -163386, -2299))); // floating between platforms, under  grapple
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7105, -167582, -1964))); // zipline 90 corner
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4821, -161519, -1043))); // wall
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-5500, -164875, -2134))); // floating behind neon sign
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6144, -161120, -799)));  // rooftop above default
            Rooms.Add(layout);
            enemies.Remove(enemies.Where(x => x is EnemyShieldOrb).First());

            // enemies
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2837, -161806, -1611), new Vector3f(-6734, -162384, -1611), new Angle(-0.52f, 0.86f))
                                 .Mask(SpawnPlane.Mask_Flatground).SetMaxEnemies(3).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6154, -166094, -2211), new Vector3f(-3888, -167198, -2191), new Angle(-0.01f, 1.00f))
                                 .Mask(SpawnPlane.Mask_Flatground).SetMaxEnemies(2).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4310, -165849, -2211), new Vector3f(-3764, -164550, -2191), new Angle(-0.71f, 0.70f)).Mask(SpawnPlane.Mask_Flatground));
            // high/special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4640, -164518, -1602), new Angle(-0.18f, 0.98f)).Mask(SpawnPlane.Mask_Highground));        // neon sign in middle
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2986, -166533, -1141), new Angle(-0.16f, 0.99f)).Mask(SpawnPlane.Mask_Highground));        // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7115, -162544, -1045), new Angle(-0.47f, 0.88f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // zipline pole
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-3639, -162424, -1258), new Angle(-0.59f, 0.80f)).Mask(SpawnPlane.Mask_Highground));        // city ad
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2430, -161829, -1043), new Angle(-0.39f, 0.92f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // zipline pole 2
            // turrets
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4467, -164457, -2191), new Angle(-0.54f, 0.84f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 10, HorizontalSpeed = 20, VerticalAngle = 5
            }));                                                                                                      // default platform corner

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2489, -162374, -1591), new Angle(1.00f, 0.09f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 0, HorizontalSpeed = 0, VerticalAngle = 5
            }));                                                                                                     // exit platform, near zipline

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6289, -161081, -1611), new Angle(-0.72f, 0.69f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 30, HorizontalSpeed = 40, VerticalAngle = 5
            }));                                                                                                       // near exit

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6522, -166968, -2191), new Angle(0.66f, 0.75f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 0, HorizontalSpeed = 0, VerticalAngle = 12
            }));                                                                                                      // first platform, right far corner

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7429, -164705, -2101), new Angle(0.50f, 0.86f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 20, HorizontalSpeed = 20, VerticalAngle = 23
            }));                                                                                                        // net/fence wall near exit, right of zipline
            // drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6368, -162295, -1062), new Vector3f(-2909, -161733, -871), new Angle(-0.73f, 0.69f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6294, -163232, -1390), new Vector3f(-5787, -166775, -1390), new Angle(-0.01f, 1.00f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4794, -167849, -1390), new Angle(0.16f, 0.99f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2711, -162876, -1055), new Angle(-0.41f, 0.91f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);


            //// Room 3 ////
            enemies    = room_HC_3.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyTurret(enemies[0]);
            enemies[1] = new EnemyTurret(enemies[1]);
            enemies[2].SetEnemyType(EnemyTypes.Waver);
            enemies[3].SetEnemyType(EnemyTypes.Waver);
            enemies[5].SetEnemyType(EnemyTypes.Weeb);
            RandomPickEnemiesWithoutCP(ref enemies, force: true);
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-9584, -163504, -1651), new Vector3f(-10005, -162787, -1651), new Angle(0.72f, 0.69f)).Mask(SpawnPlane.Mask_Flatground).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10144, -160860, -1651), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12161, -161969, -1647), new Vector3f(-10988, -162483, -1647), new Angle(0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-13875, -162394, -1647), new Vector3f(-13241, -161806, -1647), new Angle(0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17017, -162299, -1647), new Vector3f(-15992, -161779, -1647), new Angle(-0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12174, -162915, -1651), new Angle(0.37f, 0.93f)).Mask(SpawnPlane.Mask_Flatground));
            // high/special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14173, -162144, -1199), new Angle(0.03f, 1.00f)).Mask(SpawnPlane.Mask_Highground));         // rooftop
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12536, -162454, -1342), new Vector3f(-12586, -161754, -1340), new Angle(0.01f, 1.00f))
                                 .Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());                                                                    // gateway arch
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17966, -162279, -1244), new Angle(0.04f, 1.00f)).Mask(SpawnPlane.Mask_Highground));         // umbrella end
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14240, -161740, -1025), new Angle(-0.05f, 1.00f)).Mask(SpawnPlane.Mask_HighgroundLimited)); // street light
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-18119, -158765, -770), new Angle(-0.48f, 0.88f)).Mask(SpawnPlane.Mask_Highground));         // shuriken target box
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11940, -163003, -1140), new Angle(0.42f, 0.91f)).Mask(SpawnPlane.Mask_Highground));         // rooftop
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11741, -161557, -1292), new Angle(-0.21f, 0.98f)).Mask(SpawnPlane.Mask_Highground));        // city ad
            // turrets
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11205, -163541, -1629), new Angle(0.89f, 0.46f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 20, HorizontalSpeed = 10, VerticalAngle = 10
            }));                                                                                                       // behind right building

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12258, -163524, -1139), new Angle(0.91f, 0.41f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 30, HorizontalSpeed = 20, VerticalAngle = -5
            }));                                                                                                        // rooftop

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10810, -162952, -841), new Angle(0.97f, 0.24f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 10, HorizontalSpeed = 5, VerticalAngle = -5
            }));                                                                                                       // building rooftop

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-15700, -162602, -1641), new Angle(0.78f, 0.63f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 0, HorizontalSpeed = 0, VerticalAngle = 0, VisibleLaserLength = 0
            }));                                                                                                                             // ninja behind last small building
            // drones
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-18062, -160207, -1379), new Vector3f(-15594, -160997, -938), new Angle(-0.24f, 0.97f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-13518, -163157, -893), new Angle(0.30f, 0.95f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);


            //// Room 4 - Train ////
            enemies = room_HC_4.ReturnEnemiesInRoom(AllEnemies);
            enemies[0].SetEnemyType(EnemyTypes.Splitter);
            enemies[2].SetEnemyType(EnemyTypes.Waver);
            RandomPickEnemiesWithoutCP(ref enemies, force: true);
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12322, 149132, 318), new Vector3f(-11349, 145602, 318), new Angle(-0.70f, 0.71f))
                                 .Mask(SpawnPlane.Mask_Flatground).SetMaxEnemies(4).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11374, 144494, 308), new Angle(0.92f, 0.39f)).Mask(SpawnPlane.Mask_Highground));
            // high/special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11374, 144494, 308), new Angle(0.92f, 0.39f)).Mask(SpawnPlane.Mask_Highground));  // crate
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12190, 142962, 893), new Angle(-0.65f, 0.76f)).Mask(SpawnPlane.Mask_Highground)); // red crate
            // additional (drones)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12227, 148569, 1005), new Vector3f(-11480, 145808, 1180), new Angle(-0.69f, 0.72f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11193, 141624, 1425), new Angle(-0.91f, 0.41f)).Mask(SpawnPlane.Mask_Airborne));
            // additional (turrets)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12213, 143296, 303), new Angle(0.67f, 0.74f)).Mask(SpawnPlane.Mask_Turret)
                                 .SetSpawnInfo(new TurretSpawnInfo {
                HorizontalAngle = 0, HorizontalSpeed = 0, VerticalAngle = 5
            }));                                                                                                     // behind crates
            Rooms.Add(layout);


            //// Room 5 - Train ////
            enemies    = room_HC_5.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyShieldOrb(enemies[0]);
            enemies[2].SetEnemyType(EnemyTypes.Weeb);
            enemies[3].SetEnemyType(EnemyTypes.Weeb);
            // lonely weeb in next section, no cp needed
            enemies.Where(x => x.enemyType == EnemyTypes.Weeb && x.Pos.Y > 178000).ToList().ForEach(x => {
                EnemiesWithoutCP.Add(x);
                enemies.Remove(x);
            });
            layout = new RoomLayout(enemies);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11495, 175989, 878), new Vector3f(-11495, 176952, 877)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11438, 175606, 424)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12389, 177656, 485)).Mask(SpawnPlane.Mask_ShieldOrb));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11918, 175233, 318), new Vector3f(-12367, 177373, 317), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11244, 177967, 360), new Angle(-0.89f, 0.46f)).Mask(SpawnPlane.Mask_Highground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11488, 178074, 661), new Angle(-0.76f, 0.65f)).Mask(SpawnPlane.Mask_Highground));
            layout.DoNotReuse();
            Rooms.Add(layout);


            //// Room 6 - Train ////
            enemies = room_HC_6.ReturnEnemiesInRoom(AllEnemies); // all uzi
            int r = Config.GetInstance().r.Next(1, 4);

            for (int i = 0; i < r; i++)
            {
                RandomPickEnemiesWithoutCP(ref enemies, force: true);
            }
            layout = new RoomLayout(enemies);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11558, 196728, 318), new Vector3f(-12011, 201301, 318), new Angle(-0.71f, 0.71f))
                                 .Mask(SpawnPlane.Mask_Flatground).SetMaxEnemies(5).AllowSplitter());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11798, 201592, 893), new Angle(-0.70f, 0.72f)).Mask(SpawnPlane.Mask_Highground)); // red boxes
            Rooms.Add(layout);


            //// Room 7 //// enemies from Hel level
            enemies = room_HC_7.ReturnEnemiesInRoom(AllEnemies);
            enemies.ForEach(x => {
                x.SetEnemyType(EnemyTypes.Drone);
                x.DisableAttachedCP(GameHook.game);
            });
            EnemiesWithoutCP.AddRange(enemies);


            #region Uplinks
            // shuriken for fan
            NonPlaceableObject uplink = new UplinkShurikens(0x10, 0x368);
            uplink.AddSpawnInfo(new UplinkShurikensSpawnInfo {
                MaxAttacks = 1, Duration = 1
            });
            worldObjects.Add(uplink);
            // train slowmo
            uplink = new UplinkSlowmo(0x18, 0x1F8, 0xA0);
            uplink.AddSpawnInfo(new UplinkSlowmoSpawnInfo {
                TotalTime = 3
            });
            worldObjects.Add(uplink);
            #endregion
        }
Exemple #11
0
        public void Gen_Normal()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 6);

            AllEnemies.AddRange(GetAllEnemies(GameHook.game, 8, 11));
            Rooms = new List <RoomLayout>();
            RoomLayout   layout;
            List <Enemy> enemies;

            // drones
            enemies    = room_1.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyDrone(enemies[0]);
            enemies[1] = new EnemyDrone(enemies[1]);
            EnemiesWithoutCP.AddRange(enemies);

            enemies    = room_2.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyDrone(enemies[0]);
            layout     = new RoomLayout(enemies[0]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(6299, -173453, -1379), new Vector3f(7884, -171472, -787)));
            layout.Mask(SpawnPlane.Mask_Airborne);
            Rooms.Add(layout);

            enemies    = room_3.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyDrone(enemies[0]);
            enemies[4].SetEnemyType(EnemyTypes.Weeb);
            layout = new RoomLayout(enemies);

            //drone planes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-3380, -162846, -1032), new Vector3f(-1529, -164636, -532), new Angle(-0.34f, 0.94f)).Mask(SpawnPlane.Mask_Airborne));            //near left billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6211, -163236, -1457), new Vector3f(-4321, -164490, -618), new Angle(-0.01f, 1.00f)).Mask(SpawnPlane.Mask_Airborne));            //between grapple point and door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(2870, -164751, -1396), new Vector3f(841, -166047, -595), new Angle(-0.52f, 0.85f)).Mask(SpawnPlane.Mask_Airborne).setDiff(1));    //left of the cp point
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-5800, -166436, -1140), new Vector3f(-3738, -168281, -544), new Angle(-0.08f, 1.00f)).Mask(SpawnPlane.Mask_Airborne).setDiff(1)); //above pistol+uzi plane

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1894, -162544, -1383), new Angle(-0.30f, 0.96f)).Mask(SpawnPlane.Mask_Airborne).setDiff(0));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4854, -161955, -1196), new Angle(-0.38f, 0.92f)).Mask(SpawnPlane.Mask_Airborne).setDiff(0));

            //pistols +uzi+weeb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2262, -165921, -1065), new Angle(-0.14f, 0.99f)).Mask(SpawnPlane.Mask_HighgroundLimited).setDiff(1));                                    //pole between billboards
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6285, -161101, -799), new Angle(-0.55f, 0.84f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                                // above shuriken
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6987, -162593, -1043), new Angle(0.02f, 1.00f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                                //zipline pole near door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-1224, -165351, -1141), new Vector3f(-3209, -165362, -1141), new Angle(-0.17f, 0.99f))
                                 .AsVerticalPlane().Mask(SpawnPlane.Mask_HighgroundLimited).setDiff(1));                                                                                               //left billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-2422, -161895, -1043), new Angle(-0.70f, 0.72f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                               //end of zipline on weeb platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(232, -165490, -2201), new Vector3f(-392, -167449, -2201), new Angle(-0.41f, 0.91f)).Mask(SpawnPlane.Mask_Highground));                    //platform near cp
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(2087, -166558, -971), new Angle(-0.24f, 0.97f)).Mask(SpawnPlane.Mask_HighgroundLimited).setDiff(1));                                      //pole near cp
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4725, -165273, -611), new Angle(0.03f, 1.00f)).Mask(SpawnPlane.Mask_HighgroundLimited).setDiff(1));                                      //sigh in the middle
            //defualt planes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6153, -167230, -2191), new Vector3f(-3729, -166006, -2192), new Angle(0.24f, 0.97f)).SetMaxEnemies(2).Mask(SpawnPlane.Mask_Flatground)); //pistol+uzi
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-4328, -164639, -2191), new Vector3f(-3766, -165860, -2191), new Angle(0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));                  //uzi near drone
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6809, -161689, -1611), new Vector3f(-4012, -162393, -1611), new Angle(-0.31f, 0.95f)).Mask(SpawnPlane.Mask_Flatground));                 //weeb plane

            Rooms.Add(layout);


            //delete additional cp in that section???
            DisableCP(new DeepPointer(PtrDB.DP_Faster_Train1_CP));
            enemies = room_4.ReturnEnemiesInRoom(AllEnemies);
            enemies[1].SetEnemyType(EnemyTypes.Weeb);
            enemies[2].SetEnemyType(EnemyTypes.Weeb);
            layout = new RoomLayout(enemies);
            //air spawns
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11564, 149494, 1110), new Vector3f(-12251, 140205, 1110), new Angle(-0.73f, 0.68f)).SetMaxEnemies(2).Mask(SpawnPlane.Mask_Airborne)); //air spawn for drones

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11798, 138623, 340), new Angle(-0.71f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));                                                     //in front of the spawn
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11814, 135849, 1018), new Angle(0.70f, 0.72f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                              //behind the spawn
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11686, 141284, 893), new Angle(-0.72f, 0.69f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                              //first boxes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11804, 142467, 299), new Angle(-0.71f, 0.70f)).Mask(SpawnPlane.Mask_Flatground));                                                     //between the boxes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11797, 150242, 1243), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                             //above door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11792, 178094, 1243), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                             //above door 2
            //default planes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12363, 145626, 318), new Vector3f(-11238, 148925, 318), new Angle(-0.70f, 0.71f)).SetMaxEnemies(2).Mask(SpawnPlane.Mask_Flatground));

            Rooms.Add(layout);

            enemies = room_5.ReturnEnemiesInRoom(AllEnemies);
            enemies[0].SetEnemyType(EnemyTypes.Waver);
            enemies[1].SetEnemyType(EnemyTypes.Weeb);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false);
            layout = new RoomLayout(enemies);
            //air spawns
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11008, 177873, 1109), new Vector3f(-12534, 175725, 1109), new Angle(-0.68f, 0.73f)).SetMaxEnemies(2).Mask(SpawnPlane.Mask_Airborne)); //air spawn

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10924, 178352, 336), new Angle(-0.75f, 0.66f)).Mask(SpawnPlane.Mask_Flatground));                                                     //nearzipline
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11280, 175423, 318), new Vector3f(-11537, 175892, 318), new Angle(-0.87f, 0.49f)).Mask(SpawnPlane.Mask_Flatground));                  //between pipes
            //deafult planes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11903, 177370, 335), new Vector3f(-12342, 175403, 318), new Angle(-0.71f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));                  //weeb plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12157, 178006, 365), new Vector3f(-11460, 177654, 361), new Angle(-0.69f, 0.72f)).Mask(SpawnPlane.Mask_Flatground));                  //waver plane
            Rooms.Add(layout);

            //Delete cp before EoL
            ModifyCP(new DeepPointer(PtrDB.DP_Faster_TrainLast_CP), new Vector3f(0, 0, 0), GameHook.game);
            enemies = room_6.ReturnEnemiesInRoom(AllEnemies);
            enemies[1].SetEnemyType(EnemyTypes.Weeb);
            enemies[2].SetEnemyType(EnemyTypes.Weeb);
            enemies[3].SetEnemyType(EnemyTypes.Weeb);
            layout = new RoomLayout(enemies);
            //air spawns
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11114, 198101, 1245), new Vector3f(-12437, 196885, 1245), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_Airborne));                  //first plafrom air
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11120, 203207, 1245), new Vector3f(-12367, 199525, 1245), new Angle(-0.71f, 0.70f)).Mask(SpawnPlane.Mask_Airborne));                  //second platform air

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11753, 201524, 893), new Angle(-0.70f, 0.71f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                              //boxes neardoor
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12289, 201724, 317), new Angle(-0.69f, 0.72f)).Mask(SpawnPlane.Mask_Flatground));                                                     //right side of boxes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11436, 203800, 359), new Vector3f(-12135, 203572, 359), new Angle(-0.71f, 0.70f)).Mask(SpawnPlane.Mask_Flatground));                  //before EoL
            //deafult planes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11265, 198217, 318), new Vector3f(-12308, 197556, 318), new Angle(-0.70f, 0.72f)).Mask(SpawnPlane.Mask_Flatground));                  //1 weeb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11236, 201290, 318), new Vector3f(-12436, 199282, 317), new Angle(-0.72f, 0.70f)).SetMaxEnemies(2).Mask(SpawnPlane.Mask_Flatground)); //weeb+frogger
            Rooms.Add(layout);

            //random spots
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17479, -142371, -2700), new Angle(-0.72f, 0.70f)).Mask(SpawnPlane.Mask_Airborne).setDiff(1));                            //slide section before second shuriken
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10730, -161776, -1647), new Vector3f(-9819, -162463, -1647), new Angle(0.00f, 1.00f)).Mask(SpawnPlane.Mask_Flatground)); //after 1 fight
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(12121, -171111, -763), new Angle(0.20f, 0.98f)).Mask(SpawnPlane.Mask_Airborne));                                          //near second billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(27927, -152787, 605), new Angle(0.70f, 0.72f)).Mask(SpawnPlane.Mask_Highground));                                         //hel platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11928, 151164, 340), new Angle(-0.66f, 0.75f)).Mask(SpawnPlane.Mask_Flatground));                                        //collectible room
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11749, 179582, 1307), new Angle(0.72f, 0.70f)).Mask(SpawnPlane.Mask_Airborne));                                          //after second train fight
            Rooms.Add(layout);

            #region Billboards
            Billboard board1 = new Billboard(0x0, 0x320);
            board1.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 3, Angle1 = 270, Time2 = 1, Angle2 = 90
            });
            board1.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 3, Angle1 = -45, Time2 = 1, Angle2 = 45
            });
            board1.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 2, Angle1 = 970, Time2 = 1, Angle2 = 110
            });
            board1.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 2.25f, Angle1 = -1140, Time2 = 1, Angle2 = 60
            });
            board1.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 1, Angle1 = 0, Time2 = 1, Angle2 = 0
            }.SetRarity(0.05));
            board1.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 500, Angle1 = 200000, Time2 = 1, Angle2 = 90
            }.SetRarity(0.05));
            board1.AddSpawnInfo(new BillboardSpawnInfo());
            worldObjects.Add(board1);

            Billboard board2 = new Billboard(0x0, 0x138);
            board2.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 4, Angle1 = -40, Time2 = 0.5f, Angle2 = 40
            });
            board2.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 4, Angle1 = 320, Time2 = 0.5f, Angle2 = 40
            });
            board2.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 1, Angle1 = 700, Time2 = 0.5f, Angle2 = 20
            });
            board2.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 1.25f, Angle1 = -1160, Time2 = 0.5f, Angle2 = 80
            });
            board2.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 0.25f, Angle1 = 60, Time2 = 500, Angle2 = 0
            });
            board2.AddSpawnInfo(new BillboardSpawnInfo {
                Time1 = 500, Angle1 = 200000, Time2 = 1, Angle2 = 90
            }.SetRarity(0.05));
            board2.AddSpawnInfo(new BillboardSpawnInfo());
            worldObjects.Add(board2);
            #endregion

            #region Jump
            NonPlaceableObject uplink = new UplinkJump(0x0, 0xFD8);

            var jumpSpawn = new UplinkJumpSpawnInfo {
                TimeToActivate = 3, JumpMultiplier = 7
            };
            uplink.AddSpawnInfo(jumpSpawn);

            jumpSpawn = new UplinkJumpSpawnInfo {
                TimeToActivate = Config.GetInstance().r.Next(3, 51) / 10, JumpMultiplier = 6, JumpForwardMultiplier = 1, JumpGravity = 15
            };
            uplink.AddSpawnInfo(jumpSpawn);

            jumpSpawn = new UplinkJumpSpawnInfo {
                TimeToActivate = Config.GetInstance().r.Next(3, 6) / 10, JumpMultiplier = 2, JumpForwardMultiplier = 8
            };
            uplink.AddSpawnInfo(jumpSpawn);

            jumpSpawn = new UplinkJumpSpawnInfo();
            jumpSpawn.TimeToActivate        = Config.GetInstance().r.Next(3, 51) / 10;
            jumpSpawn.JumpMultiplier        = Config.GetInstance().r.Next(1, 11);
            jumpSpawn.JumpForwardMultiplier = Config.GetInstance().r.Next(0, 16) - 8;
            jumpSpawn.JumpGravity           = Config.GetInstance().r.Next(2, 13);
            jumpSpawn.SetRarity(0.1);
            uplink.AddSpawnInfo(jumpSpawn);

            //default
            uplink.AddSpawnInfo(new UplinkJumpSpawnInfo());

            worldObjects.Add(uplink);
            #endregion

            #region shuriken1
            uplink = new UplinkShurikens(0x8, 0x498);

            uplink.AddSpawnInfo(new UplinkShurikensSpawnInfo {
                Duration = 50, MaxAttacks = 3
            });
            uplink.AddSpawnInfo(new UplinkShurikensSpawnInfo {
                Duration = 2, MaxAttacks = 10
            });
            uplink.AddSpawnInfo(new UplinkShurikensSpawnInfo {
                Duration = Config.GetInstance().r.Next(1, 11), MaxAttacks = Config.GetInstance().r.Next(1, 21)
            });
            uplink.AddSpawnInfo(new UplinkShurikensSpawnInfo {
                Duration = 3600, MaxAttacks = 3600
            }.SetRarity(0.05));
            //default
            uplink.AddSpawnInfo(new UplinkShurikensSpawnInfo());
            worldObjects.Add(uplink);
            #endregion

            #region Targets
            worldObjects.Add(new ShurikenTarget(0x10, 0xc98).AddSpawnInfo(new ShurikenTargetSpawnInfo {
                HitsNeeded = Config.GetInstance().r.Next(1, 4)
            }));
            worldObjects.Add(new ShurikenTarget(0x10, 0xd00).AddSpawnInfo(new ShurikenTargetSpawnInfo {
                HitsNeeded = Config.GetInstance().r.Next(1, 4)
            }));
            worldObjects.Add(new ShurikenTarget(0x10, 0xcf8).AddSpawnInfo(new ShurikenTargetSpawnInfo {
                HitsNeeded = Config.GetInstance().r.Next(1, 4)
            }));
            worldObjects.Add(new ShurikenTarget(0x10, 0xcf0).AddSpawnInfo(new ShurikenTargetSpawnInfo {
                HitsNeeded = Config.GetInstance().r.Next(1, 4)
            }));
            worldObjects.Add(new ShurikenTarget(0x10, 0xce8).AddSpawnInfo(new ShurikenTargetSpawnInfo {
                HitsNeeded = Config.GetInstance().r.Next(1, 4)
            }));
            worldObjects.Add(new ShurikenTarget(0x10, 0xce0).AddSpawnInfo(new ShurikenTargetSpawnInfo {
                HitsNeeded = Config.GetInstance().r.Next(1, 4)
            }));
            #endregion
        }
Exemple #12
0
        public void Gen_Normal()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game);

            Rooms = new List <RoomLayout>();
            RoomLayout layout;

            List <Enemy> enemies = room_1.ReturnEnemiesInRoom(AllEnemies);

            enemies.AddRange(room_5.ReturnEnemiesInRoom(AllEnemies));
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false);
            RandomPickEnemiesWithoutCP(ref enemies, force: true, removeCP: false);

            //// room 2 layout ////
            layout = new RoomLayout(room_2.ReturnEnemiesInRoom(AllEnemies));                                                                                                   //pistols
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-21196, -18213, 2188), new Angle(0.32f, 0.95f)));                                                                 //box near cp
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-24745, -17806, 2078), new Angle(-0.18f, 0.98f)));                                                                //box on the left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-25774, -20884, 3251), new Angle(0.25f, 0.97f)).setDiff(1));                                                      //on right grapple line
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-25041, -19397, 2438), new Angle(0.07f, 1.00f)));                                                                 //box near middle guy
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-24383, -17169, 1583), new Vector3f(-23624, -17782, 1598), new Angle(-0.24f, 0.97f)));                            //guy on the left spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-24817, -20152, 1958), new Vector3f(-26861, -19575, 1958), new Angle(-0.01f, 1.00f)));                            //middle guy spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-27271, -21702, 2508), new Vector3f(-26087, -22419, 2523), new Angle(0.37f, 0.93f)));                             //guy on the right spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-28177, -17552, 2254), new Vector3f(-27686, -18289, 2205), new Angle(-0.02f, 1.00f)));                            //far guy spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-28915, -20519, 2568), new Vector3f(-27719, -19575, 2568), new Angle(-0.02f, 1.00f)));                            //near button
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-26610, -20559, 3383), new Angle(0.16f, 0.99f)).setDiff(1));                                                      //on crane near button
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-23195, -20494, 2638), new Vector3f(-24397, -20477, 2638), new Angle(0.25f, 0.97f)).SetMaxEnemies(2).setDiff(1)); //billboard on the right
            Rooms.Add(layout);

            //// room 3 layout ////
            layout = new RoomLayout(room_3.ReturnEnemiesInRoom(AllEnemies));                                                                                                 // 5 pistols
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-33411, -10404, 6202), new Vector3f(-35089, -9769, 6202), new Angle(0.68f, 0.73f)));                            //closer right platformspawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37399, -10206, 6198), new Vector3f(-40051, -9827, 6203), new Angle(0.23f, 0.97f)));                            //far right platform spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-38782, -8209, 6203), new Vector3f(-40321, -7547, 6203), new Angle(0.01f, 1.00f)));                             //far middle platform spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-33776, -8237, 6194), new Vector3f(-36841, -7593, 6194), new Angle(0.0f, 1.00f)));                              //closer middle platform spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36922, -5423, 6198), new Vector3f(-34115, -5995, 6202), new Angle(-0.68f, 0.74f)));                            //closer left platformspawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40545, -5525, 6195), new Vector3f(-38839, -6006, 6202), new Angle(-0.03f, 1.00f)));                            //far left platform spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37883, -7182, 6881), new Angle(-0.09f, 1.00f)));                                                               //billboard in the middle
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36108, -10755, 6917), new Angle(0.38f, 0.93f)));                                                               //billboard on the right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37630, -5086, 6880), new Angle(-0.26f, 0.96f)));                                                               //billboard on the left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-35764, -9000, 7410), new Vector3f(-38934, -9000, 7410), new Angle(0.09f, 1.00f)).SetMaxEnemies(2).setDiff(1)); //grapples line on the right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-35077, -6800, 7410), new Vector3f(-36823, -6800, 7410), new Angle(-0.11f, 0.99f)).setDiff(1));                 //grapples line on the left
            Rooms.Add(layout);

            //// room 4 layout ////
            enemies = room_4.ReturnEnemiesInRoom(AllEnemies);
            EnemyShieldOrb shieldOrb1 = new EnemyShieldOrb(enemies[0]);

            shieldOrb1.HideBeam_Range(0, 2);
            shieldOrb1.HideBeam_Range(1, 2);
            shieldOrb1.LinkObject(2);

            layout = new RoomLayout(shieldOrb1);                                                                                       //orb
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-65251, -20095, 10823), new Vector3f(-66206, -19589, 11027)));            //near most left enemy
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-62300, -26600, 10131), new Vector3f(-62300, -25600, 10564)).setDiff(1)); //back side of the billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-63103, -27335, 10716)).setDiff(1));                                      //top of the second billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-65438, -25916, 12028)));                                                 //uptop moving platform on the right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67475, -23533, 9396), new Vector3f(-67475, -22526, 9750)));              //billboard near exit
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68975, -23056, 9508)));                                                  // near door, on moving platform

            Rooms.Add(layout);

            layout = new RoomLayout(enemies.Skip(1).ToList());                                                                                                                   //4 pistols + 1 uzi
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67825, -21555, 11403), new Vector3f(-66226, -21555, 11403), new Angle(-0.08f, 1.00f)).setDiff(1));                 //uptop left grapple point
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67865, -24555, 11413), new Vector3f(-66417, -24555, 11413), new Angle(0.11f, 0.99f)).setDiff(1));                  //uptop right grapple point
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-62400, -23965, 10563), new Vector3f(-62400, -21730, 10563), new Angle(0.00f, 1.00f)).SetMaxEnemies(2).setDiff(1)); //grapple line
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-60731, -24760, 10355), new Angle(0.72f, 0.70f)).setDiff(1));                                                       //billboard on the way to that lost pistol
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-64572, -23000, 9968), new Vector3f(-63646, -23000, 9968), new Angle(0.02f, 1.00f)));                               //left cargo
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-64530, -24300, 9968), new Vector3f(-63576, -24300, 9968), new Angle(0.29f, 0.96f)));                               //right cargo

            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68054, -19559, 10152), new Vector3f(-67168, -20614, 10152)).RandomAngle());                                        //upper left  enemy spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67327, -21076, 9465), new Vector3f(-66308, -22052, 9472), new Angle(-0.37f, 0.93f)));                              //bottom left enemy spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68105, -25048, 9452), new Vector3f(-66263, -24006, 9452), new Angle(0.00f, 1.00f)));                               //bottom right enemy spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67064, -26495, 10153), new Vector3f(-66309, -25499, 10154), new Angle(0.20f, 0.98f)));                             //upper right  enemy spawn plane
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-64454, -26275, 10162), new Vector3f(-63856, -25658, 10163), new Angle(0.46f, 0.89f)));                             //closer right enemy spawn plane
            Rooms.Add(layout);

            //// EXTRA ////
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17322, -17173, 888), new Angle(0.04f, 1.00f)));    // Room 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-27473, -10452, 5892), new Angle(-0.99f, 0.12f)));  // Between Room 2 & 3
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-30844, -7872, 6513), new Angle(0.02f, 1.00f)));    // Between Room 2 & 3
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-46950, -8139, 7306), new Angle(0.02f, 1.00f)));    // before button room
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-46447, -19445, 8274), new Angle(0.45f, 0.89f)));   // lasers room
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-54132, -19711, 9600), new Angle(0.15f, 0.99f)));   // after lasers room
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-58270, -21755, 9548), new Angle(0.59f, 0.81f)));   // hallway before last fight room
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-75493, -18342, 11185), new Angle(-0.23f, 0.97f))); // before elevator
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-78881, -14708, 13053), new Angle(-0.06f, 1.00f))); // elevator hallway
            Rooms.Add(layout);
        }
Exemple #13
0
        public void Gen_Hardcore()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game);

            Rooms = new List <RoomLayout>();
            RoomLayout layout;


            //// Room 1 ////
            var enemies = HC_room_1.ReturnEnemiesInRoom(AllEnemies);

            EnemiesWithoutCP.AddRange(enemies);


            //// Room 2 ////
            enemies = HC_room_2.ReturnEnemiesInRoom(AllEnemies);
            enemies[2].SetEnemyType(Enemy.EnemyTypes.Waver);
            RemoveParentObjects(ref enemies);

            // SHIFTER LAYOUT
            var Shifter = new EnemyShifter(enemies[0], 3);

            layout = new RoomLayout(Shifter);

            // ROOM 6
            var info = new ShifterSpawnInfo();

            info.shiftPoints = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(-65105, -19758, 10419), new Angle(-0.48f, 0.88f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-66265, -26261, 10153), new Angle(0.50f, 0.87f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-63713, -26258, 10283), new Angle(0.56f, 0.83f))
            };
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-60848, -21594, 9558), new Angle(0.07f, 1.00f)).SetSpawnInfo(info));

            // LAST ROOM
            info             = new ShifterSpawnInfo();
            info.shiftPoints = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(-73999, -18201, 9448), new Angle(-0.69f, 0.72f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-75569, -18357, 10182), new Angle(-0.07f, 1.00f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-73826, -17115, 10835), new Angle(-0.70f, 0.71f))
            };
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-72762, -23132, 9445), new Angle(0.04f, 1.00f)).SetSpawnInfo(info));

            // ROOM 5
            info             = new ShifterSpawnInfo();
            info.shiftPoints = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(-54514, -22173, 9148), new Angle(0.36f, 0.93f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-55268, -19687, 9600), new Angle(0.34f, 0.94f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-51200, -16905, 8348), new Angle(0.00f, 1.00f))
            };
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51610, -15989, 6948), new Angle(-0.13f, 0.99f)).SetSpawnInfo(info));

            // ROOM 4
            info             = new ShifterSpawnInfo();
            info.shiftPoints = new List <Tuple <Vector3f, Angle> >()
            {
                new Tuple <Vector3f, Angle>(new Vector3f(-51710, -5461, 7298), new Angle(-0.27f, 0.96f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-47920, -3635, 7299), new Angle(-0.74f, 0.67f)),
                new Tuple <Vector3f, Angle>(new Vector3f(-52382, 728, 7598), new Angle(-0.53f, 0.85f))
            };
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-47052, -7710, 7303), new Angle(0.04f, 1.00f)).SetSpawnInfo(info));

            layout.DoNotReuse();
            Rooms.Add(layout);

            enemies.RemoveAt(0);                // remove shifter from list.
            EnemiesWithoutCP.AddRange(enemies); // to dynamic enemy list


            //// Room 3 ////
            enemies    = HC_room_3.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyShieldOrb(enemies[0]);
            // orb
            layout = new RoomLayout(enemies[0]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37977, -5307, 6943)));  // floating between billboards, left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36410, -6743, 5877)));  // below platform level, left near (grapple above)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-39168, -8963, 5925)));  // below platform level, right far
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36917, -7967, 6198)));  // middle platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40562, -8001, 6758)));  // near exit door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-38650, -6785, 6268)));  // behind pillar
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-38129, -10303, 6557))); // above platform light
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37417, -4448, 5899)));  // below billboard, left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-35567, -11227, 5899))); // below billboard, right
            Rooms.Add(layout);

            // enemies
            layout = new RoomLayout(enemies.Skip(1).ToList());
            // flatground, default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-39945, -10210, 6198), new Vector3f(-36948, -9821, 6203), new Angle(0.31f, 0.95f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-34518, -10335, 6198), new Vector3f(-33647, -9851, 6195), new Angle(0.70f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-35445, -7664, 6194), new Vector3f(-36837, -8129, 6194), new Angle(-0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36922, -5967, 6198), new Vector3f(-35200, -5469, 6198), new Angle(-0.57f, 0.82f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-39038, -6021, 6202), new Vector3f(-40427, -5554, 6195), new Angle(-0.03f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40329, -8199, 6203), new Vector3f(-38930, -7652, 6198), new Angle(0.04f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            // high grounds
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40727, -5961, 6378), new Angle(0.04f, 1.00f)).Mask(SpawnPlane.Mask_Highground));  // red crate
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40519, -10220, 6702), new Angle(0.07f, 1.00f)).Mask(SpawnPlane.Mask_Highground)); // scaffolding
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-33227, -10274, 6584), new Angle(0.92f, 0.39f)).Mask(SpawnPlane.Mask_Highground)); // scaffolding 2
            // billboards
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37450, -7193, 6881), new Vector3f(-38250, -7194, 6881), new Angle(-0.34f, 0.94f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36578, -10740, 6917), new Vector3f(-35658, -10743, 6917), new Angle(0.75f, 0.66f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-38474, -5058, 6881), new Vector3f(-37492, -5067, 6881), new Angle(-0.39f, 0.92f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37336, -6406, 6881), new Vector3f(-38446, -6403, 6881), new Angle(0.32f, 0.95f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-38269, -4831, 7048), new Vector3f(-37686, -4838, 7048), new Angle(-0.66f, 0.75f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane());  // beam behind billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-35827, -10920, 7049), new Vector3f(-36396, -10932, 7049), new Angle(0.70f, 0.72f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane()); // beam behind billboard
            // high places
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40492, -8742, 7518), new Angle(0.24f, 0.97f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                                 // grappling hook spawner block
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-40477, -7042, 7518), new Angle(-0.30f, 0.95f)).Mask(SpawnPlane.Mask_HighgroundLimited));                                                // grappling hook spawner block
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37388, -4945, 7660), new Angle(-0.44f, 0.90f)).Mask(SpawnPlane.Mask_HighgroundLimited).setRarity(0.3));                                 // beam top
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-38476, -4916, 7660), new Angle(-0.36f, 0.93f)).Mask(SpawnPlane.Mask_HighgroundLimited).setRarity(0.3));                                 // beam top
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36627, -10897, 7660), new Angle(0.52f, 0.85f)).Mask(SpawnPlane.Mask_HighgroundLimited).setRarity(0.3));                                 // beam top
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-35544, -10856, 7660), new Angle(0.45f, 0.89f)).Mask(SpawnPlane.Mask_HighgroundLimited).setRarity(0.3));                                 // beam top
            // additional (drones)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-39581, -10103, 6802), new Vector3f(-37440, -10169, 6802), new Angle(0.26f, 0.96f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-37845, -7930, 6886), new Angle(0.01f, 1.00f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-36212, -5727, 6723), new Angle(-0.41f, 0.91f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);



            //// Room 4 ////
            enemies    = HC_room_4.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyDrone(enemies[0]);
            enemies[1] = new EnemyDrone(enemies[1]);
            enemies[3].SetEnemyType(Enemy.EnemyTypes.Waver);
            enemies[4].SetEnemyType(Enemy.EnemyTypes.Weeb);
            RemoveParentObjects(ref enemies);
            EnemiesWithoutCP.AddRange(enemies);


            //// Room 5 ////
            enemies    = HC_room_5.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyShieldOrb(enemies[0]);
            enemies[1] = new EnemyShieldOrb(enemies[1]);
            enemies[2] = new EnemyShieldOrb(enemies[2]);
            enemies[3] = new EnemyShieldOrb(enemies[3]);
            enemies[5].SetEnemyType(Enemy.EnemyTypes.Weeb);
            // orbs
            layout = new RoomLayout(enemies.Take(4).ToList());
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51746, -21124, 9288)));                                                       // moving platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-52927, -18843, 8129), new Vector3f(-55267, -18846, 8129)).AsVerticalPlane()); // moving platform range
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51488, -15531, 9107)));                                                       // vertical moving platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-48998, -15981, 8648), new Vector3f(-49007, -17450, 8648)).AsVerticalPlane()); // pipes above entrance
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-50208, -19290, 9186), new Vector3f(-50201, -18359, 9186)));                   // platform spawner rectangle
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55360, -13667, 8210), new Vector3f(-51692, -13733, 8210)).AsVerticalPlane()); // moving platform range
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55843, -17560, 9897)));                                                       // near exit door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-52566, -19788, 9394)));                                                       // wall light
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55443, -20536, 8276), new Vector3f(-54148, -20544, 8276)).AsVerticalPlane()); // moving platform beam
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55623, -16391, 5849)));                                                       // under moving platform (cp)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-54675, -14645, 7727), new Vector3f(-54675, -14645, 9758)).AsVerticalPlane()); // vertical moving platform range
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55708, -16032, 9143)));                                                       // wall pipes
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-54025, -15095, 9780)));                                                       // high between vertical beams
            Rooms.Add(layout);

            // enemies
            layout = new RoomLayout(enemies.Skip(4).ToList());
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51417, -17609, 6798), new Vector3f(-51657, -16889, 6798), new Angle(0.04f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-52321, -17229, 6798), new Angle(0.04f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51883, -17690, 8348), new Vector3f(-51376, -17114, 8348), new Angle(0.48f, 0.88f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51189, -17989, 8358), new Vector3f(-50553, -17744, 8348), new Angle(0.83f, 0.55f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-50417, -22478, 8348), new Vector3f(-52324, -22892, 8348), new Angle(0.70f, 0.72f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-54479, -22928, 9148), new Vector3f(-54797, -22455, 9148), new Angle(0.32f, 0.95f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-54325, -20263, 9500), new Vector3f(-55745, -19865, 9498), new Angle(0.28f, 0.96f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55416, -19718, 9498), new Vector3f(-55733, -17936, 9498), new Angle(-0.06f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-53904, -14532, 8098), new Angle(-0.32f, 0.95f)).Mask(SpawnPlane.Mask_Flatground));
            // high
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55864, -18080, 10195), new Angle(-0.32f, 0.95f)).Mask(SpawnPlane.Mask_Highground));                                                      // exit sign
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-54601, -23262, 9298), new Angle(0.36f, 0.93f)).Mask(SpawnPlane.Mask_Highground));                                                        // crate
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-53393, -19821, 8648), new Angle(0.58f, 0.81f)).Mask(SpawnPlane.Mask_Highground));                                                        // crates
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51852, -17776, 9633), new Angle(0.34f, 0.94f)).Mask(SpawnPlane.Mask_Highground));                                                        // extruded wall piece
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-49005, -16982, 8998), new Vector3f(-48984, -17680, 8998), new Angle(-1.00f, 0.00f)).Mask(SpawnPlane.Mask_Highground).AsVerticalPlane()); // pipe above entrance
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51420, -14610, 9398), new Angle(-0.82f, 0.57f)).Mask(SpawnPlane.Mask_Highground));
            // special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-52560, -18860, 7748), new Angle(0.24f, 0.97f)).Mask(SpawnPlane.Mask_HighgroundLimited).setRarity(0.25));  // below moving platform, on small ledge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-52721, -12971, 8209), new Angle(-0.60f, 0.80f)).Mask(SpawnPlane.Mask_HighgroundLimited).setRarity(0.25)); // far left, small pipe
            // additional(drones)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-53769, -17060, 7764), new Angle(-0.03f, 1.00f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-53335, -23387, 9054), new Angle(0.40f, 0.91f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-55338, -19881, 9996), new Angle(0.42f, 0.91f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-51617, -16141, 7470), new Angle(-0.16f, 0.99f)).Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);


            //// Room 6 ////
            enemies    = HC_room_6.ReturnEnemiesInRoom(AllEnemies);
            enemies[0] = new EnemyShieldOrb(enemies[0]);
            enemies[5].SetEnemyType(Enemy.EnemyTypes.Waver);
            enemies[6].SetEnemyType(Enemy.EnemyTypes.Waver);
            layout = new RoomLayout(enemies[0]);
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68920, -27801, 9476)));                                                         // moving platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66788, -25615, 9643)));                                                         // under platform (easy)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-70038, -20384, 13023)).setRarity(0.3));                                         // highest platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67754, -21519, 11403)));                                                        // floating beam 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66263, -24560, 11413)));                                                        // floating beam 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-63118, -27884, 10840)));                                                        // on billboard, right fan
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-71038, -22705, 9847)));                                                         // light near exit, left
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-71072, -23471, 9847)));                                                         // light near exit, right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-65927, -21556, 11403)));                                                        // floating beam 1 right
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68176, -22354, 10408), new Vector3f(-68174, -23776, 10408)).AsVerticalPlane()); // slowmo ledge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-65458, -24902, 13437)).setRarity(0.3));                                         // very high, (need to use vertical elevator)
            Rooms.Add(layout);

            // enemies
            layout = new RoomLayout(enemies.Skip(1).ToList());
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-60772, -26787, 10163), new Vector3f(-61630, -27405, 10162), new Angle(0.70f, 0.71f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-62280, -27505, 10162), new Angle(0.43f, 0.90f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-63088, -25627, 10161), new Vector3f(-64585, -26063, 10162), new Angle(0.73f, 0.68f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66337, -26449, 10153), new Vector3f(-66962, -25605, 10154), new Angle(0.71f, 0.70f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-65372, -20007, 10140), new Vector3f(-66435, -19762, 10140), new Angle(-0.39f, 0.92f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68005, -20481, 10143), new Vector3f(-67462, -19705, 10143), new Angle(-0.64f, 0.77f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67275, -21134, 9465), new Vector3f(-66383, -21965, 9468), new Angle(-0.24f, 0.97f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68059, -25051, 9450), new Vector3f(-66412, -24286, 9445), new Angle(0.14f, 0.99f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-70833, -23329, 9448), new Vector3f(-69862, -22777, 9448), new Angle(0.00f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66184, -22484, 10408), new Vector3f(-66731, -23676, 10408), new Angle(0.08f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));
            // high
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-63099, -26938, 10716), new Angle(0.61f, 0.79f)).Mask(SpawnPlane.Mask_Highground));                                                         // billboard, near fan
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-64558, -24322, 9968), new Angle(0.27f, 0.96f)).Mask(SpawnPlane.Mask_Highground));                                                          // middle floating block 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-64551, -22973, 9968), new Angle(0.11f, 0.99f)).Mask(SpawnPlane.Mask_Highground));                                                          // middle flopating block 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-71067, -23034, 10286), new Angle(0.01f, 1.00f)).Mask(SpawnPlane.Mask_Highground));                                                         // light above exit door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67662, -24594, 11413), new Vector3f(-66446, -24611, 11413), new Angle(-0.65f, 0.76f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Highground)); // floating beam
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66481, -21551, 11403), new Vector3f(-67585, -21543, 11403), new Angle(-0.70f, 0.72f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Highground)); // floating beam
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-60293, -23460, 10285), new Angle(0.95f, 0.30f)).Mask(SpawnPlane.Mask_Highground));                                                         // extruded wall part, near start
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68011, -21274, 9765), new Angle(-0.22f, 0.98f)).Mask(SpawnPlane.Mask_Highground));                                                         // crate
            // additional (drone)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-66118, -21743, 10275), new Angle(-0.18f, 0.98f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-68175, -24704, 10690), new Angle(0.30f, 0.95f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-67049, -26723, 10797), new Angle(0.45f, 0.89f)).Mask(SpawnPlane.Mask_Airborne));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-65458, -25058, 10815), new Vector3f(-65466, -21297, 10815), new Angle(0.01f, 1.00f)).AsVerticalPlane().Mask(SpawnPlane.Mask_Airborne));
            Rooms.Add(layout);


            //// Room 7 ////
            enemies = HC_room_7.ReturnEnemiesInRoom(AllEnemies);
            enemies[3].SetEnemyType(Enemy.EnemyTypes.Waver);
            enemies[5].SetEnemyType(Enemy.EnemyTypes.Weeb);
            EnemiesWithoutCP.AddRange(enemies);


            //// EXTRA ////
            layout = new RoomLayout();
            // room 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17625, -16367, 888), new Angle(-0.12f, 0.99f)).Mask(SpawnPlane.Mask_Flatground));  // near exit door
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-17287, -17283, 1374), new Angle(0.12f, 0.99f)).Mask(SpawnPlane.Mask_Airborne));    // near exit door
            // room 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-21877, -19096, 1608), new Angle(0.18f, 0.98f)).Mask(SpawnPlane.Mask_Highground));  // after cp, on ledge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-27779, -19847, 2568), new Angle(0.06f, 1.00f)).Mask(SpawnPlane.Mask_Highground));  // middle platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-31017, -20938, 2998), new Angle(0.20f, 0.98f)));                                   // verical lasers room
            // between room 2 and 3
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-32163, -12508, 5903), new Angle(-0.65f, 0.76f)).Mask(SpawnPlane.Mask_Highground)); // aiming down the laser walls hallway
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-31085, -7885, 6513), new Angle(-0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));  // hallway
            // between room 3 and 4 (button)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-49218, -7660, 7689), new Angle(-0.07f, 1.00f)).Mask(SpawnPlane.Mask_Highground));  // scaffolding
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-52185, 533, 7298), new Angle(-0.51f, 0.86f)).Mask(SpawnPlane.Mask_Highground));    // near button
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-48468, -3795, 7298), new Angle(-0.65f, 0.76f)).Mask(SpawnPlane.Mask_Highground));  // middle platform
            // moving laser coridor
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-48055, -11608, 8202), new Angle(0.82f, 0.57f)).Mask(SpawnPlane.Mask_Highground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-48690, -13023, 8193), new Angle(0.66f, 0.75f)).Mask(SpawnPlane.Mask_Highground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-45700, -19190, 8580), new Angle(0.59f, 0.81f)).Mask(SpawnPlane.Mask_Airborne));
            // before room 6
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-58091, -21274, 9548), new Angle(0.63f, 0.77f)).Mask(SpawnPlane.Mask_Flatground));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-57595, -22183, 10293), new Angle(0.73f, 0.69f)).Mask(SpawnPlane.Mask_HighgroundLimited));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-58237, -21765, 10166), new Angle(0.60f, 0.80f)).Mask(SpawnPlane.Mask_Airborne));
            // room 7 (before elevator)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-74640, -20592, 9947), new Angle(-0.33f, 0.94f)).Mask(SpawnPlane.Mask_Highground));  // pipe
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-83129, -14731, 13038), new Angle(0.01f, 1.00f)).Mask(SpawnPlane.Mask_Flatground));  // before elevator
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-75398, -15344, 12748), new Angle(-0.61f, 0.80f)).Mask(SpawnPlane.Mask_Highground)); // last platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-78044, -14506, 13386), new Angle(-0.28f, 0.96f)).Mask(SpawnPlane.Mask_Airborne));   // above vertical laser
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-74187, -22740, 9948), new Angle(-0.12f, 0.99f)).Mask(SpawnPlane.Mask_Airborne));    // infront of door
            Rooms.Add(layout);

            #region Uplinks
            var uplink = new UplinkSlowmo(0x40, 0x120, 0xA0);
            uplink.AddSpawnInfo(new UplinkSlowmoSpawnInfo {
                TotalTime = Config.GetInstance().r.Next(2, 6)
            });
            worldObjects.Add(uplink);
            #endregion
        }
Exemple #14
0
        protected override void Gen_PerRoom()
        {
            Rooms = new List <RoomLayout>();
            RoomLayout layout;

            ///// SECTION 1 /////
            List <WorldObject> orbs = new List <WorldObject>();

            orbs.Add(new CVOrb(0x3D0, 0x830, 0xA8));
            orbs.Add(new CVOrb(0x3C8, 0x830, 0xC0));
            orbs.Add(new CVOrb(0x3B8, 0x830, 0xF0));
            orbs.Add(new CVOrb(0x3C0, 0x830, 0xD8));
            layout = new RoomLayout(orbs);
            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8544, 31522, 398), new Vector3f(-6934, 30261, 398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6883, 27798, 398), new Vector3f(-8493, 26694, 398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10379, 26737, 1648), new Vector3f(-11499, 27674, 1648)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8092, 34847, 398), new Vector3f(-7551, 35312, 398)));
            // railing corners
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8808, 32014, 641)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8400, 34694, 685)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8410, 35506, 627)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7201, 35500, 617)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7196, 34715, 702)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8810, 29683, 676)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8795, 28098, 591)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6542, 28075, 722)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6557, 26365, 692)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8789, 26353, 696)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10053, 26384, 1917)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11795, 26379, 1970)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-11790, 28088, 1925)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-10049, 28084, 1912)));
            // special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6776, 29796, 858)));  // main platform, left corner rock
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-6529, 32504, 315)));  // main platform, right corner, over the railing
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-7673, 27619, 2628))); // left rooftop (using moving platform)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-8735, 28053, 1858))); // left rooftop corner
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-12949, 31738, 398))); // around the corner, entry door
            Rooms.Add(layout);


            ///// SECTION 2 /////
            orbs = new List <WorldObject>();
            orbs.Add(new CVOrb(0x338, 0x830, 0x360));
            orbs.Add(new CVOrb(0x330, 0x830, 0x378));
            orbs.Add(new CVOrb(0x320, 0x830, 0x3A8));
            orbs.Add(new CVOrb(0x328, 0x830, 0x390));
            layout = new RoomLayout(orbs);

            // default
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(10509, 23741, 398), new Vector3f(11257, 22069, 398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8046, 13386, 398), new Vector3f(8811, 14803, 398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(14307, 19884, 398), new Vector3f(11906, 19406, 398)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(10320, 19296, 398), new Vector3f(6429, 19931, 398)));

            // special
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(10320, 19296, 398), new Vector3f(6429, 19931, 398))); // floating platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(8413, 18273, 428)));                                  // right block
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(14999, 19233, 395)));                                 // entry door, around the corner
            Rooms.Add(layout);
        }