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))); }
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 }