コード例 #1
0
ファイル: Faster.cs プロジェクト: Dmgvol/GhostrunnerRNG
        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
        }
コード例 #2
0
ファイル: Faster.cs プロジェクト: Dmgvol/GhostrunnerRNG
        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
        }