Exemplo n.º 1
0
        //Initializes the game for each level.
        void InitGame()
        {
            //While doingSetup is true the player can't move, prevent player from moving while title card is up.
            doingSetup = true;
            startRoom  = GameObject.FindGameObjectWithTag("StartRoom");
            roomLayout = startRoom.GetComponent <RoomLayout>();
            roomLayout.SendMessage("SetupScene", level);
            Debug.Log("Sent Message to SetupScene. Level = " + level);

            //Get a reference to our image LevelImage by finding it by name.
            levelImage = GameObject.Find("LevelImage");

            //Get a reference to our text LevelText's text component by finding it by name and calling GetComponent.
            levelText = GameObject.Find("LevelText").GetComponent <Text>();


            //Set the text of levelText to the string "Day" and append the current level number.
            levelText.text = "Day " + level;

            //Set levelImage to active blocking player's view of the game board during setup.
            levelImage.SetActive(true);

            //Call the HideLevelImage function with a delay in seconds of levelStartDelay.
            Invoke("HideLevelImage", levelStartDelay);

            //Clear any Enemy objects in our List to prepare for next level.
            enemies.Clear();
        }
Exemplo n.º 2
0
        public HallWay(Room source, Room desination)
        {
            Source             = source;
            Destination        = desination;
            Corner             = Rectangle.Empty;
            HorizonalConnector = Rectangle.Empty;
            VerticalConnector  = Rectangle.Empty;

            random            = new Random();
            cornerOrientation = "";

            // Set Dimension
            setHorizontalConnectors();
            setVerticalConnectors();

            if (VerticalConnector != Rectangle.Empty && HorizonalConnector != Rectangle.Empty)
            {
                combineToCorner();
                setCorner();
            }

            // Create layouts
            if (VerticalConnector != Rectangle.Empty)
            {
                vlayout = new RoomLayout(VerticalConnector, new List <Rectangle>(), vhallway: true);
            }
            if (HorizonalConnector != Rectangle.Empty)
            {
                hlayout = new RoomLayout(HorizonalConnector, new List <Rectangle>(), hhallway: true);
            }
            if (Corner != Rectangle.Empty)
            {
                clayout = new RoomLayout(Corner, new List <Rectangle>(), corner: true, cornerOrientation: cornerOrientation);
            }
        }
Exemplo n.º 3
0
 public Room(Vector3Int bottomLeft, Vector3Int topRight, RoomLayout lay)
 {
     bottomLeftCorner = bottomLeft;
     topRightCorner   = topRight;
     layout           = lay;
     exitLocations    = new Dictionary <Vector3Int, System.Tuple <Vector3Int, Room> >();
 }
Exemplo n.º 4
0
    void SetupGUI()
    {
        EditorGUILayout.BeginHorizontal();
        GUILayout.Space(indent);

        EditorGUILayout.LabelField("Room:", GUILayout.Width(42f));
        selectedRoom = EditorGUILayout.Popup(selectedRoom, roomNames, GUILayout.Width(100f));
        if (roomPaths[selectedRoom] != loadedRoom)
        {
            LoadRoom(roomPaths[selectedRoom]);
        }

        if (GUILayout.Button("New Room", GUILayout.Width(100f)))
        {
            RoomLayout room = CreateRoomAsset(ROOMPATH + "/New Room");
            // Select new room
            for (int i = 0; i < roomNames.Length; i++)
            {
                if (roomNames[i].Equals(room.name))
                {
                    selectedRoom = i;
                    break;
                }
            }
        }

        EditorGUILayout.EndHorizontal();
    }
Exemplo n.º 5
0
        public async Task <PartialViewResult> UpdateRoomLayout(int RoomLayoutID)
        {
            RoomLayout model = await db_context.RoomLayouts.AsNoTracking().SingleAsync(x => x.RoomLayoutID == RoomLayoutID);

            ViewBag.Locations = db_context.Locations.AsNoTracking().ToList <Location>();
            return(PartialView(model));
        }
Exemplo n.º 6
0
Arquivo: Room.cs Projeto: Malnen/Unity
 void chooseRoomLayout()
 {
     if (type.Length == 4)
     {
         roomLayout = new RoomLayoutFourDoors(gameObject);
     }
     if (type.Length == 3)
     {
         roomLayout = new RoomLayoutThreeDoors(gameObject);
     }
     if (type.Length == 2)
     {
         if (type.Contains("N") && type.Contains("S") || type.Contains("E") && type.Contains("W"))
         {
             roomLayout = new RoomLayoutTwoDoorsOpposite(gameObject);
         }
         else
         {
             roomLayout = new RoomLayoutTwoDoors(gameObject);
         }
     }
     if (type.Length == 1)
     {
         roomLayout = new RoomLayoutOneDoor(gameObject);
     }
 }
Exemplo n.º 7
0
 public MapGenerator(int size, int newPathChance, int stopDirectionChance, RoomLayout startingRoom, RoomLayout[] roomLayouts)
 {
     this.size                = size;
     this.newPathChance       = newPathChance;
     this.stopDirectionChance = stopDirectionChance;
     this.startingRoom        = startingRoom;
     this.roomLayouts         = roomLayouts;
 }
Exemplo n.º 8
0
    public override RoomParameters GetNextParameters(RoomHistory history, Random random)
    {
        var original = OriginalBuilder.GetNextParameters(history, random);

        original.Layout = Room;

        Room = null;
        return(original);
    }
Exemplo n.º 9
0
    public override RoomParameters GetInitialParameters(Random random)
    {
        var original = OriginalBuilder.GetInitialParameters(random);

        original.Layout = Room;

        Room = null;
        return(original);
    }
Exemplo n.º 10
0
        public JsonResult UpdateRoomLayout(RoomLayout RoomLayout)
        {
            RoomLayout model = db_context.RoomLayouts.Single(x => x.RoomLayoutID == RoomLayout.RoomLayoutID);

            db_context.Entry(model).CurrentValues.SetValues(RoomLayout);
            int result = db_context.SaveChanges();

            return(Json(true));
        }
    static void Main(string[] args)
    {
        Dictionary <int, RoomLayout> roomTypes = DefaultRoomTypes();

        string[] inputs;
        inputs = Console.ReadLine().Split(' ');
        int dungeonWidth  = int.Parse(inputs[0]); // number of columns.
        int dungeonHeight = int.Parse(inputs[1]); // number of rows.

        int[,] dungeonMap = new int[dungeonWidth, dungeonHeight];
        for (int i = 0; i < dungeonHeight; i++)
        {
            string[] LINE = Console.ReadLine().Split(' '); // represents a line in the grid and contains W integers. Each integer represents one room of a given type.
            for (int j = 0; j < dungeonWidth; j++)
            {
                dungeonMap[j, i] = int.Parse(LINE[j]);
            }
        }
        int EX = int.Parse(Console.ReadLine()); // the coordinate along the X axis of the exit (not useful for this first mission, but must be read).

        // game loop
        while (true)
        {
            inputs = Console.ReadLine().Split(' ');
            int    XI  = int.Parse(inputs[0]);
            int    YI  = int.Parse(inputs[1]);
            string POS = inputs[2];

            RoomLayout currentRoomType = roomTypes[dungeonMap[XI, YI]];
            List <int> newDirections   = currentRoomType.AvailableExits(POS);

            if (newDirections.Count == 1)
            {
                switch (newDirections[0])
                {
                case 0:
                    YI -= 1;
                    break;

                case 1:
                    XI += 1;
                    break;

                case 2:
                    YI += 1;
                    break;

                case 3:
                    XI -= 1;
                    break;
                }
            }

            Console.WriteLine("" + XI + " " + YI);
        }
    }
    /// <summary>
    /// 创建新的布局文件并选择该文件
    /// </summary>
    /// <param name="path"></param>
    private void CreateRoomLayoutFile(string path)
    {
        RoomLayout go      = ScriptableObject.CreateInstance <RoomLayout>();
        string     newPath = Path.Combine(path, newFileName + ".asset");

        AssetDatabase.CreateAsset(go, newPath);
        roomLayout = SelectObject(newPath) as RoomLayout;
        roomLayout.isGenerateReward = true;
        roomLayout.RewardPosition   = centerCoordinate;
        ResetEditInstallWhenCreat();
    }
Exemplo n.º 13
0
    /// <summary>
    /// 获取布局文件并初始化
    /// </summary>
    /// <param name="type"></param>
    public void Initialize()
    {
        roomLayout = level.pools.GetRoomLayout(roomType);

        for (int i = 0; i < fllor.childCount; i++)
        {
            fllor.GetChild(i).GetComponent <SpriteRenderer>().sprite = roomLayout.floor;
        }

        ChangeDoorOutWard();
    }
Exemplo n.º 14
0
    private Room CreateRoom(int x, int y, RoomLayout layout)
    {
        Room room = new Room(x, y);

        room.layout = layout.GetCopy();
        room.size   = layout.size;
        if (x == size - 1 && y == size - 1)
        {
            room.finalRoom = true;
        }
        return(room);
    }
Exemplo n.º 15
0
    void Instantiate(string path)
    {
        RoomLayout roomLayout = Resources.Load <RoomLayout>(path);

        if (roomLayout != null)
        {
            Room room = new Room(0, 0);
            room.layout = roomLayout.entities;
            room.size   = roomLayout.size;
            RoomLoader roomLoader = GameObject.Find("Room Spawn").GetComponent <RoomLoader>();
            roomLoader.DestroyRoom();
            roomLoader.Load(room);
        }
    }
Exemplo n.º 16
0
 private void Start()
 {
     if (!startingRoom)
     {
         GameObject _layout     = Instantiate(eligableRooms[(int)Random.Range(0, eligableRooms.Length)], this.gameObject.transform.position, Quaternion.identity);
         RoomLayout _rm         = _layout.GetComponent <RoomLayout>();
         int        _enemyCount = _rm.enemies.Length;
         enemiesInRoom = new GameObject[_enemyCount];
         for (int _i = 0; _i < _enemyCount; _i++)
         {
             enemiesInRoom[_i] = _rm.enemies[_i];
         }
     }
 }
Exemplo n.º 17
0
    Room createRoomAtLocation(int curRoomX, int curRoomY, RoomLayout layout, direction direction, Vector3Int bottomLeft, Vector3Int topRight, Room[,] roomGrid)
    {
        //Debug.Log("Creating room in direction: " + direction + ", " + layout.name);
        Room newRoom = new Room(
            //bottom Left
            new Vector3Int(
                bottomLeft.x + ((curRoomX - layout.width + 1) * curLayout.baseRoomX + curRoomX) - (layout.width - 1),
                topRight.y - (curRoomY * curLayout.baseRoomY + curRoomY) - (curLayout.baseRoomY * layout.height),
                0
                ),
            new Vector3Int(
                bottomLeft.x + ((curRoomX - layout.width + 1) * curLayout.baseRoomX + curRoomX) + (curLayout.baseRoomX * layout.width),
                topRight.y - (curRoomY * curLayout.baseRoomY + curRoomY),
                0
                ),
            layout
            );

        rooms.Add(newRoom);
        if (direction == direction.UP)
        {
            for (int i = curRoomY; i < curRoomY + layout.height; i++)
            {
                roomGrid[i, curRoomX] = newRoom;
            }
        }
        else if (direction == direction.DOWN)
        {
            for (int i = curRoomY; i > curRoomY - layout.height; i--)
            {
                roomGrid[i, curRoomX] = newRoom;
            }
        }
        else if (direction == direction.LEFT)
        {
            for (int i = curRoomX; i < curRoomX + layout.width; i++)
            {
                roomGrid[curRoomY, i] = newRoom;
            }
        }
        else if (direction == direction.RIGHT)
        {
            for (int i = curRoomX; i > curRoomX - layout.width; i--)
            {
                roomGrid[curRoomY, i] = newRoom;
            }
        }
        return(newRoom);
    }
Exemplo n.º 18
0
    void SaveRoom(string path)
    {
        RoomLayout room = Resources.Load <RoomLayout>(path);

        if (room != null)
        {
            UpdateEntities();
            room.entities = entities;
            room.size     = roomSize;
            string assetPath = AssetDatabase.GetAssetPath(room);
            AssetDatabase.RenameAsset(assetPath, roomName);
            EditorUtility.SetDirty(room);
            UpdateRoomList();
        }
    }
Exemplo n.º 19
0
 void LoadRoom(string roomName)
 {
     if (roomName != "")
     {
         loadedRoom = roomName;
         string     path = roomName.TrimStart("Assets/Resources/".ToCharArray());
         RoomLayout room = Resources.Load <RoomLayout>(path);
         if (room != null)
         {
             this.roomName = room.name;
             this.entities = room.GetCopy();
             this.roomSize = room.size;
         }
     }
 }
    /// <summary>
    /// 绘制文件选择区域
    /// </summary>
    private void DrawFileSelectArea()
    {
        GUILayout.BeginHorizontal("box");
        RoomLayout temp = roomLayout;

        roomLayout = (RoomLayout)EditorGUILayout.ObjectField("文件", roomLayout, typeof(RoomLayout), false);
        GUILayout.Space(50);
        isDrawAuxiliaryLine = GUILayout.Toggle(isDrawAuxiliaryLine, "辅助线");
        //监控roomLayout文件是否被替换
        if (temp != roomLayout)
        {
            ResetEditInstallWhenChange();
        }
        GUILayout.EndHorizontal();
    }
Exemplo n.º 21
0
    public override void OnInspectorGUI()
    {
        RoomLayout rl = (RoomLayout)target;

        if (DrawDefaultInspector())
        {
            //rl.GenerateRoom();
        }


        if (GUILayout.Button("Generate"))
        {
            rl.GenerateRoom();
        }
    }
Exemplo n.º 22
0
        public virtual int GetTile(int x, int y, PluginManager manager)
        {
            RoomLayout room = manager.GetActiveRoomLayout();
            int        t    = room.GetTile(x, y);

            if (!tiles.Contains(t) || ignoreTiles.Contains(t))
            {
                return(t);
            }

            Func <int, bool> f = a => {
                return(tiles.Contains(a));
            };

            return(GetTileBy(x, y, manager, f));
        }
Exemplo n.º 23
0
        void OnDragged(int x, int y, Gdk.Event triggerEvent)
        {
            if (EnableTileEditing && draggingTile)
            {
                if (IsInBounds(x, y, scale: false, offset: false))
                {
                    Cairo.Point p = GetGridPosition(x, y, scale: false, offset: false);
                    RoomLayout.SetTile(p.X, p.Y, TilesetViewer.SelectedIndex);
                }
            }
            if (DrawRoomComponents && draggingObject)
            {
                RoomComponent com = selectedComponent;
                if (com != null && com.HasXY)
                {
                    int newX, newY;
                    if (gdkState.HasFlag(Gdk.ModifierType.ControlMask) || com.HasShortenedXY)
                    {
                        newX = x;
                        newY = y;
                    }
                    else
                    {
                        // Move comects in increments of 8 pixels
                        int unit    = 8;
                        int unitLog = (int)Math.Log(unit, 2);

                        int dataX  = com.X + unit / 2;
                        int dataY  = com.Y + unit / 2;
                        int alignX = (dataX) % unit;
                        int alignY = (dataY) % unit;
                        newX = (x - alignX) >> unitLog;
                        newY = (y - alignY) >> unitLog;
                        newX = newX * unit + alignX + unit / 2;
                        newY = newY * unit + alignY + unit / 2;
                    }

                    if (newX >= 0 && newX < 256 && newY >= 0 && newY < 256)
                    {
                        com.X = (byte)newX;
                        com.Y = (byte)newY;
                    }

                    QueueDraw();
                }
            }
        }
Exemplo n.º 24
0
        public void Gen_Normal()
        {
            List <Enemy> AllEnemies = GetAllEnemies(GameHook.game, 0, 9); // static range, no gap

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

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

            //// Room 2 - 5 pistols, last room
            layout = new RoomLayout(room2.ReturnEnemiesInRoom(AllEnemies));
            // main platforms
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158225, -43241, 3198), new Vector3f(156081, -42827, 3198), new Angle(-0.89f, 0.46f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156846, -40737, 3198), new Vector3f(157130, -41736, 3198), new Angle(-0.94f, 0.35f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158792, -41972, 3198), new Vector3f(158922, -43343, 3198), new Angle(-0.96f, 0.27f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(152012, -48136, 3198), new Vector3f(152209, -47198, 3198), new Angle(-0.59f, 0.81f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153685, -47214, 3198), new Vector3f(155030, -47501, 3198), new Angle(-0.89f, 0.46f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(156721, -46427, 3198), new Vector3f(156351, -45285, 3198), new Angle(-0.89f, 0.46f)));
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(154520, -43688, 3198), new Vector3f(154647, -45111, 3198), new Angle(-0.87f, 0.49f)));
            // special/high spots
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(151930, -47267, 3948), new Angle(-0.52f, 0.85f)).setDiff(1)); // billboard
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153667, -50388, 3298), new Angle(-0.64f, 0.77f)));            // slide edge
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155839, -42364, 4052), new Angle(-0.53f, 0.85f)));            // generator/server
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(158129, -44004, 4052), new Angle(-1.00f, 0.01f)));            // generator/server 2
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(155591, -45151, 3618), new Angle(0.47f, 0.89f)));             // middle wall platform
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153328, -47607, 3638), new Angle(-0.88f, 0.47f)));            // wide generator 1
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(153988, -48037, 3640), new Angle(-0.96f, 0.27f)));            // wide generator 2
            Rooms.Add(layout);
        }
Exemplo n.º 25
0
    RoomLayout CreateRoomAsset(string path)
    {
        RoomLayout asset = CreateInstance <RoomLayout>();

        if (path == ROOMPATH + "/")
        {
            path = ROOMPATH + "/New Level";
        }
        else if (Path.GetExtension(path) != "")
        {
            path = path.Replace(Path.GetFileName(path), "");
        }
        string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path + ".asset");

        AssetDatabase.CreateAsset(asset, assetPathAndName);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
        UpdateRoomList();
        return(asset);
    }
Exemplo n.º 26
0
        // Overridable function which generates the image for a tile on the map.
        // Child classes could choose override "TileDrawer" instead. The advantage of overriding
        // this function is that the image will be cached.
        protected virtual Cairo.Surface GenerateTileImage(int x, int y)
        {
            RoomLayout layout      = GetRoomLayout(x, y);
            var        tileSurface = this.Window.CreateSimilarSurface(Cairo.Content.Color,
                                                                      (int)(layout.Width * 16 * _scale), (int)(layout.Height * 16 * _scale));

            // The below line works fine, but doesn't look as good on hidpi monitors
            //_surface = new Cairo.ImageSurface(Cairo.Format.Rgb24,
            //        (int)(layout.Width * 16 * _scale), (int)(layout.Height * 16 * _scale));

            Bitmap img = layout.GetImage();

            using (var cr = new Cairo.Context(tileSurface))
                using (var source = new BitmapSurface(img)) {
                    cr.Scale(_scale, _scale);
                    cr.SetSource(source, 0, 0);
                    cr.Paint();
                }

            return(tileSurface);
        }
Exemplo n.º 27
0
        public void Apply(PluginManager manager)
        {
            if (baseTiles[0, 0] == -1)
            {
                return;
            }

            AssembleTiles();

            RoomLayout room = manager.GetActiveRoomLayout();

            for (int y = 0; y < room.Height; y++)
            {
                for (int x = 0; x < room.Width; x++)
                {
                    int t = GetTile(x, y, manager);
                    if (t != room.GetTile(x, y))
                    {
                        room.SetTile(x, y, t);
                    }
                }
            }
        }
Exemplo n.º 28
0
        protected override void Gen_PerRoom()
        {
            ////// Green Platforms //////
            platforms.Add(new GreenPlatform(0x9E0, 0xE88));
            platforms.Add(new GreenPlatform(0x9F8, 0xDB0));
            platforms.Add(new GreenPlatform(0xA00, 0xD68));
            platforms.Add(new GreenPlatform(0xA08, 0xD20));
            platforms.Add(new GreenPlatform(0xA30, 0xBB8));
            platforms.Add(new GreenPlatform(0xA20, 0xC48));
            platforms.Add(new GreenPlatform(0xA18, 0xC90));
            platforms.Add(new GreenPlatform(0xA28, 0xC00));
            platforms.Add(new GreenPlatform(0xA10, 0xCD8));
            platforms.Add(new GreenPlatform(0x9F0, 0xDF8));
            platforms.Add(new GreenPlatform(0x9E8, 0xE40));
            platforms.Add(new GreenPlatform(0x9D8, 0xED0));
            platforms.Add(new GreenPlatform(0x9D0, 0xF18));
            platforms.Add(new GreenPlatform(0x9C8, 0xF60));
            platforms.Add(new GreenPlatform(0x9C0, 0xFA8));
            platforms.Add(new GreenPlatform(0x9B8, 0xFF0));
            platforms.Add(new GreenPlatform(0x9B0, 0x1038));
            platforms.Add(new GreenPlatform(0x9A8, 0x1080));

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

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

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

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

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

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


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


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

            #endregion

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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


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


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

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

            //// EXTRA spots
            layout = new RoomLayout();
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14200, -63865, 2798), new Vector3f(-14996, -62722, 2798)).RandomAngle().setRarity(0.2)); // pistol 1, default pos
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-14729, -63919, 3591), new Angle(0.03f, 1.0f)).setDiff(1));                               // pistol 1, wall lamp above
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-18060, -64136, 3598), new Vector3f(-19392, -63758, 3601), new Angle(0f, 1f)));           // vent area
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-21681, -63576, 2998), new Angle(-1.00f, 0.05f)));                                        // after first vent, left corner
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-20723, -59412, 4298), new Vector3f(-21563, -60163, 4302), new Angle(-0.99f, 0.15f)));    // before sensory boost vent
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-3991, -70323, -80), new Angle(0.01f, 1.00f)));                                           // before elevator (surprise)
            layout.AddSpawnPlane(new SpawnPlane(new Vector3f(-16471, -56114, 4098), new Angle(-0.78f, 0.62f)));                                        // after sensory boost
            Rooms.Add(layout);
        }
Exemplo n.º 30
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)));
        }