Example #1
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)));
        }
Example #2
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
        }