Esempio n. 1
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
        }
Esempio n. 2
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
        }