示例#1
0
        // Token: 0x06000053 RID: 83 RVA: 0x000055AC File Offset: 0x000037AC
        public static DungeonFlow CreateDebugFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = SampleFlow.CreateEntranceExitFlow(dungeon);

            dungeonFlow.name = "debug_flow";
            DungeonFlowNode dungeonFlowNode = new DungeonFlowNode(dungeonFlow)
            {
                overrideExactRoom = RoomFactory.CreateEmptyRoom(12, 12)
            };
            DungeonFlowNode parent = dungeonFlowNode;

            dungeonFlow.AddNodeToFlow(dungeonFlowNode, dungeonFlow.FirstNode);
            foreach (RoomFactory.RoomData roomData in RoomFactory.rooms.Values)
            {
                string str = "Adding room to flow: ";
                PrototypeDungeonRoom room = roomData.room;
                Tools.Log <string>(str + ((room != null) ? room.ToString() : null));
                DungeonFlowNode dungeonFlowNode2 = new DungeonFlowNode(dungeonFlow)
                {
                    overrideExactRoom = roomData.room
                };
                dungeonFlow.AddNodeToFlow(dungeonFlowNode2, parent);
                dungeonFlowNode = new DungeonFlowNode(dungeonFlow)
                {
                    overrideExactRoom = RoomFactory.CreateEmptyRoom(12, 12)
                };
                dungeonFlow.AddNodeToFlow(dungeonFlowNode, dungeonFlowNode2);
                parent = dungeonFlowNode;
            }
            dungeon = null;
            return(dungeonFlow);
        }
示例#2
0
        public static DungeonFlow CreateRoomTypeSampleFlow(Dungeon dungeon)
        {
            var flow = CreateNewFlow(dungeon);

            flow.name = "type_sample_flow";

            var entrance = NodeFromAssetName(flow, "elevator entrance");

            flow.FirstNode = entrance;
            flow.AddNodeToFlow(entrance, null);

            //one room for each visual definition
            DungeonFlowNode lastNode = flow.FirstNode;

            Tools.Print(dungeon.roomMaterialDefinitions?.Length);
            for (int i = 0; i < dungeon.roomMaterialDefinitions.Length; i++)
            {
                if (dungeon.name == OfficialFlows.dungeonPrefabNames[3] && i == 5)
                {
                    continue;
                }
                var room = RoomFactory.CreateEmptyRoom(14, 14);
                room.overrideRoomVisualType = i;
                var shrineNode = new DungeonFlowNode(flow)
                {
                    overrideExactRoom = room
                };
                flow.AddNodeToFlow(shrineNode, lastNode);
                lastNode = shrineNode;
            }
            //exit
            flow.AddNodeToFlow(NodeFromAssetName(flow, "exit_room_basic"), lastNode);
            dungeon = null;
            return(flow);
        }
示例#3
0
		public static DungeonFlow F1b_Hat_flow_01()
		{
			try
			{

				DungeonFlow m_CachedFlow = ScriptableObject.CreateInstance<DungeonFlow>();
				DungeonFlowNode entranceNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ModRoomPrefabs.Mod_Entrance_Room);
				DungeonFlowNode exitNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.EXIT, ModRoomPrefabs.Mod_Exit_Room);
				DungeonFlowNode HatRoomNode_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB);
				DungeonFlowNode HatRoomNode_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);

				m_CachedFlow.name = "F1b_FloorName_Flow_01";
				m_CachedFlow.fallbackRoomTable = ModPrefabs.FloorNameRoomTable;
				m_CachedFlow.phantomRoomTable = null;
				m_CachedFlow.subtypeRestrictions = new List<DungeonFlowSubtypeRestriction>(0);
				m_CachedFlow.flowInjectionData = new List<ProceduralFlowModifierData>(0);
				m_CachedFlow.sharedInjectionData = new List<SharedInjectionData>() { BaseSharedInjectionData };

				m_CachedFlow.Initialize();

				m_CachedFlow.AddNodeToFlow(entranceNode, null);
				// First Looping branch
				m_CachedFlow.AddNodeToFlow(HatRoomNode_01, entranceNode);
				m_CachedFlow.AddNodeToFlow(HatRoomNode_02, HatRoomNode_01);
				m_CachedFlow.AddNodeToFlow(exitNode, HatRoomNode_02);
				m_CachedFlow.FirstNode = entranceNode;

				return m_CachedFlow;
			}
			catch (Exception e)
			{
				ETGModConsole.Log(e.ToString());
				return null;
			}
		}
示例#4
0
        public static DungeonFlow CreateDebugFlow(Dungeon dungeon)
        {
            var flow = SampleFlow.CreateEntranceExitFlow(dungeon);

            flow.name = "debug_flow";
            DungeonFlowNode
                customRoom,
                hub = new DungeonFlowNode(flow)
            {
                overrideExactRoom = RoomFactory.CreateEmptyRoom()
            },
                lastNode = hub;

            flow.AddNodeToFlow(hub, flow.FirstNode);
            foreach (var room in RoomFactory.rooms.Values)
            {
                Tools.Log("Adding room to flow: " + room.room);
                customRoom = new DungeonFlowNode(flow)
                {
                    overrideExactRoom = room.room
                };
                flow.AddNodeToFlow(customRoom, lastNode);
                hub = new DungeonFlowNode(flow)
                {
                    overrideExactRoom = RoomFactory.CreateEmptyRoom()
                };
                flow.AddNodeToFlow(hub, customRoom);
                lastNode = hub;
            }
            dungeon = null;
            return(flow);
        }
        public static DungeonFlow CreateBranchingThesisFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = SampleFlow.CreateNewFlow(dungeon);

            dungeonFlow.name = "thesis_flow_branching";

            DungeonFlowNode parent = null;

            if (Module.Debug)
            {
                parent = MakeNode(LoadRoom("lobby.room"), dungeonFlow);
            }
            else
            {
                parent = MakeNode(LoadRoom("lobby_.room"), dungeonFlow);
            }

            dungeonFlow.FirstNode = parent;
            dungeonFlow.AddNodeToFlow(parent, null);

            AppendBossRoom(dungeonFlow, parent);

            if (Module.Debug)
            {
                ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "a1_legendarychests.room");
            }

            AppendBossRoom(dungeonFlow, parent);

            AppendBossRoom(dungeonFlow, parent);

            dungeon = null;
            return(dungeonFlow);
        }
示例#6
0
        // Token: 0x06000054 RID: 84 RVA: 0x000056A8 File Offset: 0x000038A8
        public static DungeonFlow CreateRoomTypeSampleFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = SampleFlow.CreateNewFlow(dungeon);

            dungeonFlow.name = "type_sample_flow";
            DungeonFlowNode dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "elevator entrance");

            dungeonFlow.FirstNode = dungeonFlowNode;
            dungeonFlow.AddNodeToFlow(dungeonFlowNode, null);
            DungeonFlowNode parent = dungeonFlow.FirstNode;

            DungeonMaterial[] roomMaterialDefinitions = dungeon.roomMaterialDefinitions;
            Tools.Print <int?>((roomMaterialDefinitions != null) ? new int?(roomMaterialDefinitions.Length) : null, "FFFFFF", false);
            for (int i = 0; i < dungeon.roomMaterialDefinitions.Length; i++)
            {
                bool flag = dungeon.name == OfficialFlows.dungeonPrefabNames[3] && i == 5;
                if (!flag)
                {
                    PrototypeDungeonRoom prototypeDungeonRoom = RoomFactory.CreateEmptyRoom(14, 14);
                    prototypeDungeonRoom.overrideRoomVisualType = i;
                    DungeonFlowNode dungeonFlowNode2 = new DungeonFlowNode(dungeonFlow)
                    {
                        overrideExactRoom = prototypeDungeonRoom
                    };
                    dungeonFlow.AddNodeToFlow(dungeonFlowNode2, parent);
                    parent = dungeonFlowNode2;
                }
            }
            dungeonFlow.AddNodeToFlow(SampleFlow.NodeFromAssetName(dungeonFlow, "exit_room_basic"), parent);
            dungeon = null;
            return(dungeonFlow);
        }
        public static DungeonFlow CreateSequentialThesisFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = CreateEntranceFlow(dungeon);

            dungeonFlow.name = "thesis_flow_sequential";

            DungeonFlowNode parent = dungeonFlow.FirstNode;

            ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "a1_legendarychests.room");

            parent = ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "b1_bossroom_gullA_test.room");

            parent = ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "c1_bufferroom.room");

            parent = ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "b1_bossroom_gullA_test.room");

            parent = ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "c1_bufferroom.room");

            parent = ThesisFloorGenerator.AppendRoom(dungeonFlow, parent, "b1_bossroom_gullA_test.room");

            parent = ThesisFloorGenerator.AppendExitElevator(dungeonFlow, parent);

            dungeon = null;
            return(dungeonFlow);
        }
        private static DungeonFlowNode AppendExitElevator(DungeonFlow dungeonFlow, DungeonFlowNode parentNode)
        {
            var dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "exit_room_basic");

            dungeonFlow.AddNodeToFlow(dungeonFlowNode, parentNode);

            return(dungeonFlowNode);
        }
        private static void AppendBossRoom(DungeonFlow dungeonFlow, DungeonFlowNode parentNode)
        {
            DungeonFlowNode dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "GatlingGullRoom02");

            dungeonFlowNode.overrideExactRoom.subCategoryBoss = PrototypeDungeonRoom.RoomBossSubCategory.MINI_BOSS;

            dungeonFlow.AddNodeToFlow(dungeonFlowNode, parentNode);
        }
示例#10
0
        public static DungeonFlow Test_CustomRoom_Flow()
        {
            DungeonFlow m_CachedFlow = ScriptableObject.CreateInstance <DungeonFlow>();

            DungeonFlowNode entranceNode  = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ExpandPrefabs.elevator_entrance);
            DungeonFlowNode exitNode      = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.EXIT, ExpandRoomPrefabs.SecretExitRoom);
            DungeonFlowNode bossfoyerNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.boss_foyertable);
            DungeonFlowNode bossNode      = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.BOSS, ExpandRoomPrefabs.Expand_Jungle_Boss);

            DungeonFlowNode TestRoomNode_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandRoomPrefabs.Expand_Apache_RickRollChest);

            DungeonFlowNode TestShopNode   = GenerateDefaultNode(m_CachedFlow, ExpandPrefabs.shop02.category, overrideTable: ExpandPrefabs.shop_room_table);
            DungeonFlowNode TestRewardNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.gungeon_rewardroom_1);

            DungeonFlowNode TestSecretRoomNode  = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET, ExpandRoomPrefabs.Expand_GlitchedSecret);
            DungeonFlowNode testConnectorNode01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandRoomPrefabs.Expand_BootlegRoom);

            DungeonFlowNode TestRoomNode_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandRoomPrefabs.Expand_Apache_RainbowRoom);

            // DungeonFlowNode SecondSecretRoom = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET, ExpandRoomPrefabs.Secret_Expand_logo);

            /*foreach (PrototypeDungeonRoom room in ExpandRoomPrefabs.Expand_Jungle_Rooms) {
             *  if (room.name == "Expand_Forest_Mixed22") {
             *      TestRoomNode_02.overrideExactRoom = room;
             *      break;
             *  }
             * }*/

            m_CachedFlow.name = "Test_CustomRoom_Flow";
            m_CachedFlow.fallbackRoomTable   = null;
            m_CachedFlow.phantomRoomTable    = null;
            m_CachedFlow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>(0);
            m_CachedFlow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            m_CachedFlow.sharedInjectionData = new List <SharedInjectionData>(0);
            m_CachedFlow.Initialize();

            m_CachedFlow.AddNodeToFlow(entranceNode, null);
            m_CachedFlow.AddNodeToFlow(TestRoomNode_01, entranceNode);

            m_CachedFlow.AddNodeToFlow(TestRewardNode, TestRoomNode_01);
            m_CachedFlow.AddNodeToFlow(TestSecretRoomNode, TestRewardNode);

            m_CachedFlow.AddNodeToFlow(TestShopNode, TestRoomNode_01);
            // m_CachedFlow.AddNodeToFlow(SecondSecretRoom, TestShopNode);

            m_CachedFlow.AddNodeToFlow(TestRoomNode_02, TestShopNode);


            m_CachedFlow.AddNodeToFlow(testConnectorNode01, TestRoomNode_01);

            m_CachedFlow.AddNodeToFlow(bossfoyerNode, testConnectorNode01);
            m_CachedFlow.AddNodeToFlow(bossNode, bossfoyerNode);
            m_CachedFlow.AddNodeToFlow(exitNode, bossNode);

            m_CachedFlow.FirstNode = entranceNode;

            return(m_CachedFlow);
        }
        public static DungeonFlowNode MakeNode(PrototypeDungeonRoom room, DungeonFlow dungeonFlow)
        {
            DungeonFlowNode dungeonFlowNode = new DungeonFlowNode(dungeonFlow)
            {
                overrideExactRoom = room
            };

            return(dungeonFlowNode);
        }
示例#12
0
        // Generate a DungeonFlowNode with a default configuration
        public static DungeonFlowNode GenerateDefaultNode(DungeonFlow targetflow, PrototypeDungeonRoom.RoomCategory roomType, PrototypeDungeonRoom overrideRoom = null, GenericRoomTable overrideTable = null, bool oneWayLoopTarget = false, bool isWarpWingNode = false, string nodeGUID = null, DungeonFlowNode.NodePriority priority = DungeonFlowNode.NodePriority.MANDATORY, float percentChance = 1, bool handlesOwnWarping = true)
        {
            try
            {
                if (string.IsNullOrEmpty(nodeGUID))
                {
                    nodeGUID = Guid.NewGuid().ToString();
                }

                DungeonFlowNode m_CachedNode = new DungeonFlowNode(targetflow)
                {
                    isSubchainStandin         = false,
                    nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                    roomCategory              = roomType,
                    percentChance             = percentChance,
                    priority                  = priority,
                    overrideExactRoom         = overrideRoom,
                    overrideRoomTable         = overrideTable,
                    capSubchain               = false,
                    subchainIdentifier        = string.Empty,
                    limitedCopiesOfSubchain   = false,
                    maxCopiesOfSubchain       = 1,
                    subchainIdentifiers       = new List <string>(0),
                    receivesCaps              = false,
                    isWarpWingEntrance        = isWarpWingNode,
                    handlesOwnWarping         = handlesOwnWarping,
                    forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                    loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                    nodeExpands               = false,
                    initialChainPrototype     = "n",
                    chainRules                = new List <ChainRule>(0),
                    minChainLength            = 3,
                    maxChainLength            = 8,
                    minChildrenToBuild        = 1,
                    maxChildrenToBuild        = 1,
                    canBuildDuplicateChildren = false,
                    guidAsString              = nodeGUID,
                    parentNodeGuid            = string.Empty,
                    childNodeGuids            = new List <string>(0),
                    loopTargetNodeGuid        = string.Empty,
                    loopTargetIsOneWay        = oneWayLoopTarget,
                    flow = targetflow
                };



                return(m_CachedNode);
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.ToString());
                return(null);
            }
        }
        private static DungeonFlow CreateEntranceFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = SampleFlow.CreateNewFlow(dungeon);

            dungeonFlow.name = "entrance_flow";
            DungeonFlowNode dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "elevator entrance");

            dungeonFlow.FirstNode = dungeonFlowNode;
            dungeonFlow.AddNodeToFlow(dungeonFlowNode, null);
            dungeon = null;
            return(dungeonFlow);
        }
示例#14
0
        // Token: 0x06000058 RID: 88 RVA: 0x00005900 File Offset: 0x00003B00
        public static DungeonFlowNode NodeFromAssetName(DungeonFlow flow, string name)
        {
            DungeonFlowNode      dungeonFlowNode      = new DungeonFlowNode(flow);
            PrototypeDungeonRoom prototypeDungeonRoom = SampleFlow.RoomFromAssetName(name);
            bool flag = prototypeDungeonRoom == null;

            if (flag)
            {
                Tools.Print <string>("Error loading room " + name, "FF0000", false);
            }
            dungeonFlowNode.overrideExactRoom = prototypeDungeonRoom;
            return(dungeonFlowNode);
        }
示例#15
0
        // Token: 0x06000055 RID: 85 RVA: 0x000057A8 File Offset: 0x000039A8
        public static DungeonFlow CreateEntranceExitFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = SampleFlow.CreateNewFlow(dungeon);

            dungeonFlow.name = "entrance_exit_flow";
            DungeonFlowNode dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "elevator entrance");

            dungeonFlow.FirstNode = dungeonFlowNode;
            dungeonFlow.AddNodeToFlow(dungeonFlowNode, null);
            dungeonFlow.AddNodeToFlow(SampleFlow.NodeFromAssetName(dungeonFlow, "exit_room_basic"), dungeonFlowNode);
            dungeon = null;
            return(dungeonFlow);
        }
示例#16
0
        // Generate a DungeonFlowNode with a default configuration
        public static DungeonFlowNode GenerateDefaultNode(DungeonFlow targetflow, PrototypeDungeonRoom.RoomCategory roomType, PrototypeDungeonRoom overrideRoom = null, GenericRoomTable overrideTable = null, bool oneWayLoopTarget = false, bool isWarpWingNode = false, string nodeGUID = null)
        {
            DungeonFlowNode m_CachedNode = new DungeonFlowNode(targetflow);

            m_CachedNode.isSubchainStandin       = false;
            m_CachedNode.nodeType                = DungeonFlowNode.ControlNodeType.ROOM;
            m_CachedNode.roomCategory            = roomType;
            m_CachedNode.percentChance           = 1f;
            m_CachedNode.priority                = DungeonFlowNode.NodePriority.MANDATORY;
            m_CachedNode.overrideExactRoom       = overrideRoom;
            m_CachedNode.overrideRoomTable       = overrideTable;
            m_CachedNode.capSubchain             = false;
            m_CachedNode.subchainIdentifier      = string.Empty;
            m_CachedNode.limitedCopiesOfSubchain = false;
            m_CachedNode.maxCopiesOfSubchain     = 1;
            m_CachedNode.subchainIdentifiers     = new List <string>(0);
            m_CachedNode.receivesCaps            = false;
            m_CachedNode.isWarpWingEntrance      = isWarpWingNode;
            if (isWarpWingNode)
            {
                m_CachedNode.handlesOwnWarping = true;
            }
            else
            {
                m_CachedNode.handlesOwnWarping = false;
            }
            m_CachedNode.forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE;
            m_CachedNode.loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE;
            m_CachedNode.nodeExpands               = false;
            m_CachedNode.initialChainPrototype     = "n";
            m_CachedNode.chainRules                = new List <ChainRule>(0);
            m_CachedNode.minChainLength            = 3;
            m_CachedNode.maxChainLength            = 8;
            m_CachedNode.minChildrenToBuild        = 1;
            m_CachedNode.maxChildrenToBuild        = 1;
            m_CachedNode.canBuildDuplicateChildren = false;
            m_CachedNode.parentNodeGuid            = string.Empty;
            m_CachedNode.childNodeGuids            = new List <string>(0);
            m_CachedNode.loopTargetNodeGuid        = string.Empty;
            m_CachedNode.loopTargetIsOneWay        = oneWayLoopTarget;
            if (nodeGUID == null)
            {
                m_CachedNode.guidAsString = Guid.NewGuid().ToString();
            }
            else
            {
                m_CachedNode.guidAsString = nodeGUID;
            }
            m_CachedNode.flow = targetflow;
            return(m_CachedNode);
        }
示例#17
0
        public static DungeonFlowNode NodeFromAssetName(DungeonFlow flow, string name)
        {
            DungeonFlowNode node  = new DungeonFlowNode(flow);
            string          asset = name;
            var             room  = RoomFromAssetName(name);

            if (room == null)
            {
                Tools.Print("Error loading room " + name, "FF0000");
            }
            ;
            node.overrideExactRoom = room;
            return(node);
        }
        private static DungeonFlowNode AppendRoom(DungeonFlow dungeonFlow, DungeonFlowNode parentNode, string roomName)
        {
            PrototypeDungeonRoom room = LoadRoom(roomName);

            if (room is null)
            {
                return(parentNode);
            }

            DungeonFlowNode dungeonFlowNode = MakeNode(room, dungeonFlow);

            dungeonFlow.AddNodeToFlow(dungeonFlowNode, parentNode);

            return(dungeonFlowNode);
        }
示例#19
0
        public static DungeonFlowNode GenerateFlowNode(DungeonFlow flow, PrototypeDungeonRoom.RoomCategory category, PrototypeDungeonRoom overrideRoom = null, GenericRoomTable overrideRoomTable = null, bool loopTargetIsOneWay = false, bool isWarpWing = false,
                                                       bool handlesOwnWarping = true, float weight = 1f, DungeonFlowNode.NodePriority priority = DungeonFlowNode.NodePriority.MANDATORY, string guid = "")
        {
            if (string.IsNullOrEmpty(guid))
            {
                guid = Guid.NewGuid().ToString();
            }
            DungeonFlowNode node = new DungeonFlowNode(flow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = category,
                percentChance             = weight,
                priority                  = priority,
                overrideExactRoom         = overrideRoom,
                overrideRoomTable         = overrideRoomTable,
                capSubchain               = false,
                subchainIdentifier        = string.Empty,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                subchainIdentifiers       = new List <string>(0),
                receivesCaps              = false,
                isWarpWingEntrance        = isWarpWing,
                handlesOwnWarping         = handlesOwnWarping,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                chainRules                = new List <ChainRule>(0),
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                guidAsString              = guid,
                parentNodeGuid            = string.Empty,
                childNodeGuids            = new List <string>(0),
                loopTargetNodeGuid        = string.Empty,
                loopTargetIsOneWay        = loopTargetIsOneWay,
                flow = flow
            };

            return(node);
        }
示例#20
0
        public static DungeonFlowNode DuplicateDungeonFlowNode(DungeonFlowNode node)
        {
            DungeonFlowNode dungeonFlowNode = new DungeonFlowNode(node.flow);

            dungeonFlowNode.isSubchainStandin       = node.isSubchainStandin;
            dungeonFlowNode.nodeType                = node.nodeType;
            dungeonFlowNode.roomCategory            = node.roomCategory;
            dungeonFlowNode.percentChance           = node.percentChance;
            dungeonFlowNode.priority                = node.priority;
            dungeonFlowNode.overrideExactRoom       = node.overrideExactRoom;
            dungeonFlowNode.overrideRoomTable       = node.overrideRoomTable;
            dungeonFlowNode.capSubchain             = node.capSubchain;
            dungeonFlowNode.subchainIdentifier      = node.subchainIdentifier;
            dungeonFlowNode.limitedCopiesOfSubchain = node.limitedCopiesOfSubchain;
            dungeonFlowNode.maxCopiesOfSubchain     = node.maxCopiesOfSubchain;
            dungeonFlowNode.subchainIdentifiers     = new List <string>(node.subchainIdentifiers);
            dungeonFlowNode.receivesCaps            = node.receivesCaps;
            dungeonFlowNode.isWarpWingEntrance      = node.isWarpWingEntrance;
            dungeonFlowNode.handlesOwnWarping       = node.handlesOwnWarping;
            dungeonFlowNode.forcedDoorType          = node.forcedDoorType;
            dungeonFlowNode.loopForcedDoorType      = node.loopForcedDoorType;
            dungeonFlowNode.nodeExpands             = node.nodeExpands;
            dungeonFlowNode.initialChainPrototype   = node.initialChainPrototype;
            dungeonFlowNode.chainRules              = new List <ChainRule>(node.chainRules.Count);
            foreach (ChainRule chainRule in node.chainRules)
            {
                dungeonFlowNode.chainRules.Add(new ChainRule {
                    form = chainRule.form, target = chainRule.target, weight = chainRule.weight, mandatory = chainRule.mandatory
                });
            }
            dungeonFlowNode.minChainLength            = node.minChainLength;
            dungeonFlowNode.maxChainLength            = node.maxChainLength;
            dungeonFlowNode.minChildrenToBuild        = node.minChildrenToBuild;
            dungeonFlowNode.maxChildrenToBuild        = node.maxChildrenToBuild;
            dungeonFlowNode.canBuildDuplicateChildren = node.canBuildDuplicateChildren;
            dungeonFlowNode.parentNodeGuid            = node.parentNodeGuid;
            dungeonFlowNode.childNodeGuids            = new List <string>(node.childNodeGuids);
            dungeonFlowNode.loopTargetNodeGuid        = node.loopTargetNodeGuid;
            dungeonFlowNode.loopTargetIsOneWay        = node.loopTargetIsOneWay;
            dungeonFlowNode.guidAsString = node.guidAsString;
            dungeonFlowNode.flow         = node.flow;
            return(dungeonFlowNode);
        }
示例#21
0
        // Token: 0x06000056 RID: 86 RVA: 0x00005804 File Offset: 0x00003A04
        public static DungeonFlow CreateMazeFlow(Dungeon dungeon)
        {
            DungeonFlow dungeonFlow = SampleFlow.CreateNewFlow(dungeon);

            dungeonFlow.name = "maze_flow";
            DungeonFlowNode dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "elevator entrance");

            dungeonFlow.FirstNode = dungeonFlowNode;
            dungeonFlow.AddNodeToFlow(dungeonFlowNode, null);
            DungeonFlowNode dungeonFlowNode2 = new DungeonFlowNode(dungeonFlow)
            {
                overrideExactRoom = RoomFactory.BuildFromResource("resource/rooms/maze.room").room
            };

            dungeonFlow.AddNodeToFlow(dungeonFlowNode2, dungeonFlowNode);
            dungeonFlow.AddNodeToFlow(SampleFlow.NodeFromAssetName(dungeonFlow, "exit_room_basic"), dungeonFlowNode2);
            dungeon = null;
            return(dungeonFlow);
        }
示例#22
0
        public static DungeonFlow CreateMazeFlow(Dungeon dungeon)
        {
            var flow = CreateNewFlow(dungeon);

            flow.name = "maze_flow";

            var entrance = NodeFromAssetName(flow, "elevator entrance");

            flow.FirstNode = entrance;
            flow.AddNodeToFlow(entrance, null);
            var maze = new DungeonFlowNode(flow)
            {
                overrideExactRoom = RoomFactory.BuildFromResource("resource/rooms/maze.room").room
            };

            flow.AddNodeToFlow(maze, entrance);
            flow.AddNodeToFlow(NodeFromAssetName(flow, "exit_room_basic"), maze);
            dungeon = null;
            return(flow);
        }
示例#23
0
        public static void RemoveNodeConnectParentToChildren(DungeonFlowNode node)
        {
            string        parentNodeGuid = node.parentNodeGuid;
            List <string> list           = new List <string>(node.childNodeGuids);
            DungeonFlow   flow           = node.flow;

            node.flow.DeleteNode(node, false);
            foreach (string text in list)
            {
                bool flag = !string.IsNullOrEmpty(parentNodeGuid) && !string.IsNullOrEmpty(text);
                if (flag)
                {
                    DungeonFlowNode nodeFromGuid  = flow.GetNodeFromGuid(parentNodeGuid);
                    DungeonFlowNode nodeFromGuid2 = flow.GetNodeFromGuid(text);
                    bool            flag2         = nodeFromGuid != null && nodeFromGuid2 != null;
                    if (flag2)
                    {
                        flow.ConnectNodes(nodeFromGuid, nodeFromGuid2);
                    }
                }
            }
        }
示例#24
0
        public static DungeonFlow BuildFlow()
        {
            DungeonFlow flow = ScriptableObject.CreateInstance <DungeonFlow>();

            flow.name = "RedChamberDungeonFlow";
            flow.fallbackRoomTable   = null;
            flow.phantomRoomTable    = null;
            flow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>(0);
            flow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            flow.sharedInjectionData = new List <SharedInjectionData>()
            {
                Toolbox.shared_auto_002.LoadAsset <SharedInjectionData>("Base Shared Injection Data")
            };
            DungeonFlowNode node  = Toolbox.GenerateFlowNode(flow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, RoomFactory.BuildFromResource("SpecialItemPack/RedChamberRooms/RedChamber_Entrance.room").room);
            DungeonFlowNode node2 = Toolbox.GenerateFlowNode(flow, PrototypeDungeonRoom.RoomCategory.EXIT, RoomFactory.BuildFromResource("SpecialItemPack/RedChamberRooms/RedChamber_Exit.room").room);

            flow.Initialize();
            flow.AddNodeToFlow(node, null);
            flow.AddNodeToFlow(node2, node);
            flow.FirstNode = node;
            return(flow);
        }
示例#25
0
        public static DungeonFlow DuplicateDungeonFlow(DungeonFlow flow)
        {
            DungeonFlow dungeonFlow = ScriptableObject.CreateInstance <DungeonFlow>();

            dungeonFlow.name = flow.name;
            dungeonFlow.fallbackRoomTable   = flow.fallbackRoomTable;
            dungeonFlow.phantomRoomTable    = flow.phantomRoomTable;
            dungeonFlow.subtypeRestrictions = flow.subtypeRestrictions;
            dungeonFlow.evolvedRoomTable    = flow.evolvedRoomTable;
            ReflectionHelpers.ReflectSetField(typeof(DungeonFlow), "m_firstNodeGuid", ReflectionHelpers.ReflectGetField <string>(typeof(DungeonFlow), "m_firstNodeGuid", flow), dungeonFlow);
            dungeonFlow.flowInjectionData   = flow.flowInjectionData;
            dungeonFlow.sharedInjectionData = flow.sharedInjectionData;
            ReflectionHelpers.ReflectSetField(typeof(DungeonFlow), "m_nodeGuids", new List <string>(ReflectionHelpers.ReflectGetField <List <string> >(typeof(DungeonFlow), "m_nodeGuids", flow)), dungeonFlow);
            List <DungeonFlowNode> list = new List <DungeonFlowNode>();

            ReflectionHelpers.ReflectSetField(typeof(DungeonFlow), "m_nodes", list, dungeonFlow);
            foreach (DungeonFlowNode node in flow.AllNodes)
            {
                DungeonFlowNode dungeonFlowNode = DuplicateDungeonFlowNode(node);
                dungeonFlowNode.flow = dungeonFlow;
                list.Add(dungeonFlowNode);
            }
            return(dungeonFlow);
        }
示例#26
0
        public static void InitFlow()
        {
            List <DungeonFlowNode> m_cachedNodes_01 = new List <DungeonFlowNode>();
            List <DungeonFlowNode> m_cachedNodes_02 = new List <DungeonFlowNode>();
            List <DungeonFlowNode> m_cachedNodes_03 = new List <DungeonFlowNode>();
            List <DungeonFlowNode> m_cachedNodes_04 = new List <DungeonFlowNode>();

            DungeonFlowNode m_EntranceNode      = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ChaosRoomPrefabs.Giant_Elevator_Room);
            DungeonFlowNode m_HubNode           = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.HUB);
            DungeonFlowNode m_ShopNode_01       = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ChaosPrefabs.shop_room_table);
            DungeonFlowNode m_ShopNode_02       = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ChaosPrefabs.shop_room_table);
            DungeonFlowNode m_ChestRoom_01      = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.reward_room, oneWayLoopTarget: true);
            DungeonFlowNode m_ChestRoom_02      = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.REWARD, ChaosPrefabs.gungeon_rewardroom_1);
            DungeonFlowNode m_ChestRoom_03      = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.REWARD, ChaosPrefabs.gungeon_rewardroom_1);
            DungeonFlowNode m_ChestRoom_04      = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.reward_room, oneWayLoopTarget: true);
            DungeonFlowNode m_ExitNode          = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.EXIT, ChaosPrefabs.tiny_exit);
            DungeonFlowNode m_BossFoyerNode     = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.boss_foyer);
            DungeonFlowNode m_BossNode          = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.BOSS, overrideTable: ChaosPrefabs.MegaBossRoomTable);
            DungeonFlowNode m_FakeBossNode      = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.BOSS, ChaosPrefabs.tutorial_minibossroom);
            DungeonFlowNode m_FakeBossFoyerNode = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.boss_foyer);

            for (int i = 0; i < LoopRoomCount + 1; i++)
            {
                m_cachedNodes_01.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.NORMAL));
                m_cachedNodes_04.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.NORMAL));
            }

            for (int i = 0; i < SingleChainRoomCount + 1; i++)
            {
                m_cachedNodes_02.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.NORMAL));
                m_cachedNodes_03.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Fruit_Loops, PrototypeDungeonRoom.RoomCategory.NORMAL));
            }

            m_cachedNodes_01[0].roomCategory                    = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_01[LoopRoomCount].roomCategory        = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_02[0].roomCategory                    = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_02[SingleChainRoomCount].roomCategory = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_03[0].roomCategory                    = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_03[SingleChainRoomCount].roomCategory = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_04[0].roomCategory                    = PrototypeDungeonRoom.RoomCategory.CONNECTOR;
            m_cachedNodes_04[LoopRoomCount].roomCategory        = PrototypeDungeonRoom.RoomCategory.CONNECTOR;

            bool bossShuffle = BraveUtility.RandomBool();

            ChaosDungeonFlows.Fruit_Loops.name = "Fruit_Loops";
            ChaosDungeonFlows.Fruit_Loops.fallbackRoomTable   = ChaosPrefabs.CustomRoomTableNoCastle;
            ChaosDungeonFlows.Fruit_Loops.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>()
            {
                ChaosDungeonFlows.BaseSubTypeRestrictions
            };
            ChaosDungeonFlows.Fruit_Loops.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            ChaosDungeonFlows.Fruit_Loops.sharedInjectionData = new List <SharedInjectionData>()
            {
                ChaosDungeonFlows.BaseSharedInjectionData
            };
            ChaosDungeonFlows.Fruit_Loops.Initialize();

            // Hub area
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_HubNode, null);

            // Big Entrance with first loop.
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_EntranceNode, m_HubNode);

            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_01[0], m_HubNode);
            for (int i = 1; i < LoopRoomCount + 1; i++)
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_01[i], m_cachedNodes_01[i - 1]);
            }

            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ShopNode_01, m_cachedNodes_01[LoopRoomCount]);
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ChestRoom_01, m_ShopNode_01);
            ChaosDungeonFlows.Fruit_Loops.LoopConnectNodes(m_HubNode, m_ChestRoom_01);

            // Maybe boss path. :P
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_02[0], m_HubNode);
            for (int i = 1; i < SingleChainRoomCount + 1; i++)
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_02[i], m_cachedNodes_02[i - 1]);
            }
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ChestRoom_02, m_cachedNodes_02[SingleChainRoomCount]);
            if (bossShuffle)
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_BossFoyerNode, m_ChestRoom_02);
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_BossNode, m_BossFoyerNode);
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ExitNode, m_BossNode);
            }
            else
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_FakeBossFoyerNode, m_ChestRoom_02);
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_FakeBossNode, m_FakeBossFoyerNode);
            }

            // Maybe boss path. :P
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_03[0], m_EntranceNode);
            for (int i = 1; i < SingleChainRoomCount + 1; i++)
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_03[i], m_cachedNodes_03[i - 1]);
            }
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ChestRoom_03, m_cachedNodes_03[SingleChainRoomCount]);
            if (bossShuffle)
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_FakeBossFoyerNode, m_ChestRoom_03);
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_FakeBossNode, m_FakeBossFoyerNode);
            }
            else
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_BossFoyerNode, m_ChestRoom_03);
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_BossNode, m_BossFoyerNode);
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ExitNode, m_BossNode);
            }

            // Second Loop
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_04[0], m_EntranceNode);
            for (int i = 1; i < LoopRoomCount + 1; i++)
            {
                ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_cachedNodes_04[i], m_cachedNodes_04[i - 1]);
            }
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ShopNode_02, m_cachedNodes_04[LoopRoomCount]);
            ChaosDungeonFlows.Fruit_Loops.AddNodeToFlow(m_ChestRoom_04, m_ShopNode_02);
            ChaosDungeonFlows.Fruit_Loops.LoopConnectNodes(m_ChestRoom_04, m_EntranceNode);
            ChaosDungeonFlows.Fruit_Loops.FirstNode = m_HubNode;
        }
        public static DungeonFlow F1b_Jungle_Flow_02()
        {
            DungeonFlow m_CachedFlow = ScriptableObject.CreateInstance <DungeonFlow>();

            if (!ExpandDungeonFlow.JungleInjectionData)
            {
                ExpandDungeonFlow.JungleInjectionData      = ScriptableObject.CreateInstance <SharedInjectionData>();
                ExpandDungeonFlow.JungleInjectionData.name = "Jungle Common Injection Data";
                ExpandDungeonFlow.JungleInjectionData.UseInvalidWeightAsNoInjection         = true;
                ExpandDungeonFlow.JungleInjectionData.PreventInjectionOfFailedPrerequisites = false;
                ExpandDungeonFlow.JungleInjectionData.IsNPCCell = false;
                ExpandDungeonFlow.JungleInjectionData.IgnoreUnmetPrerequisiteEntries = false;
                ExpandDungeonFlow.JungleInjectionData.OnlyOne               = false;
                ExpandDungeonFlow.JungleInjectionData.ChanceToSpawnOne      = 0.5f;
                ExpandDungeonFlow.JungleInjectionData.AttachedInjectionData = new List <SharedInjectionData>(0);
                ExpandDungeonFlow.JungleInjectionData.InjectionData         = new List <ProceduralFlowModifierData>()
                {
                    new ProceduralFlowModifierData()
                    {
                        annotation        = "Cathedral Crest Room",
                        DEBUG_FORCE_SPAWN = false,
                        OncePerRun        = false,
                        placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                        {
                            ProceduralFlowModifierData.FlowModifierPlacementType.END_OF_CHAIN
                        },
                        roomTable              = null,
                        exactRoom              = ExpandRoomPrefabs.Expand_Jungle_OldCrest,
                        IsWarpWing             = false,
                        RequiresMasteryToken   = false,
                        chanceToLock           = 0.5f,
                        selectionWeight        = 1,
                        chanceToSpawn          = 1,
                        RequiredValidPlaceable = null,
                        CanBeForcedSecret      = true,
                        RandomNodeChildMinDistanceFromEntrance = 0,
                        exactSecondaryRoom = null,
                        framedCombatNodes  = 0,
                        prerequisites      = new DungeonPrerequisite[] {
                            new DungeonPrerequisite()
                            {
                                prerequisiteType           = DungeonPrerequisite.PrerequisiteType.DEMO_MODE,
                                prerequisiteOperation      = DungeonPrerequisite.PrerequisiteOperation.GREATER_THAN,
                                statToCheck                = TrackedStats.TIMES_REACHED_GUNGEON,
                                maxToCheck                 = 0,
                                comparisonValue            = 0,
                                encounteredObjectGuid      = string.Empty,
                                encounteredRoom            = null,
                                requiredNumberOfEncounters = 0,
                                requiredCharacter          = PlayableCharacters.Pilot,
                                requireCharacter           = false,
                                requiredTileset            = 0,
                                requireTileset             = false,
                                saveFlagToCheck            = 0,
                                requireFlag                = false,
                                requireDemoMode            = false
                            },
                        }
                    },
                    new ProceduralFlowModifierData()
                    {
                        annotation        = "Lost Baby Dragun",
                        DEBUG_FORCE_SPAWN = false,
                        OncePerRun        = false,
                        placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                        {
                            ProceduralFlowModifierData.FlowModifierPlacementType.RANDOM_NODE_CHILD
                        },
                        roomTable              = null,
                        exactRoom              = ExpandRoomPrefabs.Expand_Jungle_SecretDragun,
                        IsWarpWing             = false,
                        RequiresMasteryToken   = false,
                        chanceToLock           = 1,
                        selectionWeight        = 1,
                        chanceToSpawn          = 1,
                        RequiredValidPlaceable = null,
                        CanBeForcedSecret      = true,
                        RandomNodeChildMinDistanceFromEntrance = 0,
                        exactSecondaryRoom = null,
                        framedCombatNodes  = 0,
                        prerequisites      = new DungeonPrerequisite[] {
                            new DungeonPrerequisite()
                            {
                                prerequisiteType           = DungeonPrerequisite.PrerequisiteType.TILESET,
                                prerequisiteOperation      = DungeonPrerequisite.PrerequisiteOperation.EQUAL_TO,
                                statToCheck                = TrackedStats.TIMES_REACHED_GUNGEON,
                                maxToCheck                 = 0,
                                comparisonValue            = 0,
                                encounteredObjectGuid      = string.Empty,
                                encounteredRoom            = null,
                                requiredNumberOfEncounters = 0,
                                requiredCharacter          = PlayableCharacters.Pilot,
                                requireCharacter           = false,
                                requiredTileset            = GlobalDungeonData.ValidTilesets.JUNGLEGEON,
                                requireTileset             = true,
                                saveFlagToCheck            = 0,
                                requireFlag                = false,
                                requireDemoMode            = false
                            }
                        }
                    }
                };
            }


            DungeonFlowNode entranceNode  = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ExpandRoomPrefabs.Expand_Jungle_Entrance);
            DungeonFlowNode exitNode      = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.EXIT, ExpandRoomPrefabs.Expand_Jungle_Exit);
            DungeonFlowNode bossfoyerNode = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.boss_foyertable);
            DungeonFlowNode bossNode      = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.BOSS, ExpandRoomPrefabs.Expand_Jungle_Boss);

            DungeonFlowNode JungleShopNode      = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, ExpandPrefabs.shop02.category, overrideTable: ExpandPrefabs.shop_room_table);
            DungeonFlowNode JungleRewardNode_01 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.gungeon_rewardroom_1);
            DungeonFlowNode JungleRewardNode_02 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.gungeon_rewardroom_1);


            DungeonFlowNode JungleRoomNode_01 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB, oneWayLoopTarget: true);
            DungeonFlowNode JungleRoomNode_02 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_04 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_05 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_06 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB, oneWayLoopTarget: true);
            DungeonFlowNode JungleRoomNode_07 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_09 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_10 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_11 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB);
            DungeonFlowNode JungleRoomNode_12 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_13 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_14 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_16 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_17 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode JungleRoomNode_18 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);

            m_CachedFlow.name = "F1b_Jungle_Flow_02";
            m_CachedFlow.fallbackRoomTable   = ExpandPrefabs.JungleRoomTable;
            m_CachedFlow.phantomRoomTable    = null;
            m_CachedFlow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>(0);
            m_CachedFlow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            m_CachedFlow.sharedInjectionData = new List <SharedInjectionData>()
            {
                ExpandDungeonFlow.BaseSharedInjectionData, ExpandDungeonFlow.JungleInjectionData
            };
            m_CachedFlow.Initialize();

            m_CachedFlow.AddNodeToFlow(entranceNode, null);

            // First Looping branch
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_16, entranceNode);
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_01, JungleRoomNode_16);
            // Dead End
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_05, JungleRoomNode_01);
            // Start of Loop
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_02, JungleRoomNode_01);
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_04, JungleRoomNode_02);
            m_CachedFlow.AddNodeToFlow(JungleRewardNode_01, JungleRoomNode_04);
            // Connect End of Loop to first in chain
            m_CachedFlow.LoopConnectNodes(JungleRewardNode_01, JungleRoomNode_01);

            // Second Looping branch
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_17, entranceNode);
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_06, JungleRoomNode_17);
            // Dead End
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_10, JungleRoomNode_06);
            // Start of Loop
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_07, JungleRoomNode_06);
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_09, JungleRoomNode_07);
            m_CachedFlow.AddNodeToFlow(JungleRewardNode_02, JungleRoomNode_09);
            // Connect End of Loop to first in chain
            m_CachedFlow.LoopConnectNodes(JungleRewardNode_02, JungleRoomNode_06);

            // Splitting path to Shop or Boss
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_18, entranceNode);
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_11, JungleRoomNode_18);
            // Path To Boss
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_12, JungleRoomNode_11);
            // Path to Shop
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_13, JungleRoomNode_11);
            m_CachedFlow.AddNodeToFlow(JungleShopNode, JungleRoomNode_13);
            // Dead End
            m_CachedFlow.AddNodeToFlow(JungleRoomNode_14, JungleRoomNode_11);


            m_CachedFlow.AddNodeToFlow(bossfoyerNode, JungleRoomNode_12);
            m_CachedFlow.AddNodeToFlow(bossNode, bossfoyerNode);
            m_CachedFlow.AddNodeToFlow(exitNode, bossNode);

            m_CachedFlow.FirstNode = entranceNode;

            return(m_CachedFlow);
        }
示例#28
0
        public static DungeonFlow TEST_West_Floor_03a_Flow()
        {
            DungeonFlow m_CachedFlow = ScriptableObject.CreateInstance <DungeonFlow>();

            DungeonFlowSubtypeRestriction TestSubTypeRestriction = new DungeonFlowSubtypeRestriction()
            {
                baseCategoryRestriction       = PrototypeDungeonRoom.RoomCategory.NORMAL,
                normalSubcategoryRestriction  = PrototypeDungeonRoom.RoomNormalSubCategory.TRAP,
                bossSubcategoryRestriction    = PrototypeDungeonRoom.RoomBossSubCategory.FLOOR_BOSS,
                specialSubcategoryRestriction = PrototypeDungeonRoom.RoomSpecialSubCategory.UNSPECIFIED_SPECIAL,
                secretSubcategoryRestriction  = PrototypeDungeonRoom.RoomSecretSubCategory.UNSPECIFIED_SECRET,
                maximumRoomsOfSubtype         = 1
            };

            DungeonFlowNode TestNode_00 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.elevator_entrance,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                childNodeGuids = new List <string>()
                {
                    "5160f844-ff79-4d19-b813-38496a344e8e"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "d9be71d3-8d97-48af-8eda-54aa897862be"
            };
            DungeonFlowNode TestNode_01 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.boss_foyer,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "bd36ddc7-e687-4355-a69b-e799c9d857de",
                childNodeGuids = new List <string>()
                {
                    "a0098d24-7733-4baf-82c0-11ce3e068261"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "036aafaf-a754-4410-94c5-2c4e5139a5bf"
            };
            DungeonFlowNode TestNode_02 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.oldbulletking_room_01,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "036aafaf-a754-4410-94c5-2c4e5139a5bf",
                childNodeGuids = new List <string>()
                {
                    "f06e0430-437a-481e-9b34-604d145cc77d"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "a0098d24-7733-4baf-82c0-11ce3e068261"
            };
            DungeonFlowNode TestNode_03 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.exit_room_basic,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "a0098d24-7733-4baf-82c0-11ce3e068261",
                childNodeGuids     = new List <string>(0),
                loopTargetIsOneWay = false,
                guidAsString       = "f06e0430-437a-481e-9b34-604d145cc77d"
            };
            DungeonFlowNode TestNode_04 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "d9be71d3-8d97-48af-8eda-54aa897862be",
                childNodeGuids = new List <string>()
                {
                    "0c8ee6c4-31b4-4226-9ddb-90c7eca8f2d3"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "5160f844-ff79-4d19-b813-38496a344e8e"
            };
            DungeonFlowNode TestNode_05 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "5160f844-ff79-4d19-b813-38496a344e8e",
                childNodeGuids = new List <string>()
                {
                    "2439b6f0-b59e-4b46-8521-3195d72748f7"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "0c8ee6c4-31b4-4226-9ddb-90c7eca8f2d3"
            };
            DungeonFlowNode TestNode_06 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "2439b6f0-b59e-4b46-8521-3195d72748f7",
                childNodeGuids = new List <string>()
                {
                    "989ad791-cfc8-4f4e-afc6-fd9512a789b7"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "a919a262-edf3-47e7-aae9-0eb77fa49262"
            };
            DungeonFlowNode TestNode_07 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "919a262-edf3-47e7-aae9-0eb77fa49262",
                childNodeGuids = new List <string>()
                {
                    "b1da2e8a-afeb-41cc-8840-be1c46aa4401", "3a6325a4-d2c0-4b93-a82e-7f09b007e190"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "989ad791-cfc8-4f4e-afc6-fd9512a789b7"
            };
            DungeonFlowNode TestNode_08 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "8267eaa8-ed7f-403b-97a6-421d15a21ef3",
                childNodeGuids = new List <string>()
                {
                    "3956174b-a5ee-4716-b021-889db041a070"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "8b4c640e-b835-4a6b-9326-7b11d856fcde"
            };
            DungeonFlowNode TestNode_09 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "8b4c640e-b835-4a6b-9326-7b11d856fcde",
                childNodeGuids = new List <string>()
                {
                    "bd36ddc7-e687-4355-a69b-e799c9d857de", "31a9f731-24ba-49dd-9086-2f01cb3fcb1d"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "3956174b-a5ee-4716-b021-889db041a070"
            };
            DungeonFlowNode TestNode_10 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "3956174b-a5ee-4716-b021-889db041a070",
                childNodeGuids = new List <string>()
                {
                    "036aafaf-a754-4410-94c5-2c4e5139a5bf", "17f291e0-37c3-4d03-ba6a-b5b534256c07"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "bd36ddc7-e687-4355-a69b-e799c9d857de"
            };
            DungeonFlowNode TestNode_11 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "0c8ee6c4-31b4-4226-9ddb-90c7eca8f2d3",
                childNodeGuids = new List <string>()
                {
                    "dc3ba41b-dc99-42d3-ab9b-088991bc1741", "a919a262-edf3-47e7-aae9-0eb77fa49262"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "2439b6f0-b59e-4b46-8521-3195d72748f7"
            };
            DungeonFlowNode TestNode_12 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.gungeon_rewardroom_1,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "2439b6f0-b59e-4b46-8521-3195d72748f7",
                childNodeGuids = new List <string>()
                {
                    "55ebfb7d-b617-4da1-853c-209d3bd36f8e"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "dc3ba41b-dc99-42d3-ab9b-088991bc1741"
            };
            DungeonFlowNode TestNode_13 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "dc3ba41b-dc99-42d3-ab9b-088991bc1741",
                childNodeGuids     = new List <string>(0),
                loopTargetNodeGuid = "0c8ee6c4-31b4-4226-9ddb-90c7eca8f2d3",
                loopTargetIsOneWay = false,
                guidAsString       = "55ebfb7d-b617-4da1-853c-209d3bd36f8e"
            };
            DungeonFlowNode TestNode_14 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "8267eaa8-ed7f-403b-97a6-421d15a21ef3",
                childNodeGuids = new List <string>()
                {
                    "44fc3013-6fa2-4436-a0db-1d3b99484703"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "0fbff154-f8cb-4367-a11f-16f5dd56fe4f"
            };
            DungeonFlowNode TestNode_15 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "989ad791-cfc8-4f4e-afc6-fd9512a789b7",
                childNodeGuids = new List <string>()
                {
                    "8267eaa8-ed7f-403b-97a6-421d15a21ef3"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "b1da2e8a-afeb-41cc-8840-be1c46aa4401"
            };
            DungeonFlowNode TestNode_16 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.shop02,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "0fbff154-f8cb-4367-a11f-16f5dd56fe4f",
                childNodeGuids     = new List <string>(0),
                loopTargetIsOneWay = false,
                guidAsString       = "44fc3013-6fa2-4436-a0db-1d3b99484703"
            };
            DungeonFlowNode TestNode_17 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "bd36ddc7-e687-4355-a69b-e799c9d857de",
                childNodeGuids = new List <string>()
                {
                    "56753489-2944-42ed-8c1f-c0daa03417b0"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "17f291e0-37c3-4d03-ba6a-b5b534256c07"
            };
            DungeonFlowNode TestNode_18 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "17f291e0-37c3-4d03-ba6a-b5b534256c07",
                childNodeGuids = new List <string>()
                {
                    "1d489c84-f1b5-431d-bdf3-e61e74cd7f15", "3e0b1ce9-3862-4041-bfa9-bb82474e567a"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "56753489-2944-42ed-8c1f-c0daa03417b0"
            };
            DungeonFlowNode TestNode_19 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.NORMAL,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "56753489-2944-42ed-8c1f-c0daa03417b0",
                childNodeGuids = new List <string>()
                {
                    "9fc6fab9-fe0f-458c-b1a4-e69077243acc"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "1d489c84-f1b5-431d-bdf3-e61e74cd7f15"
            };
            DungeonFlowNode TestNode_20 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.CONNECTOR,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                overrideExactRoom         = ExpandPrefabs.gungeon_rewardroom_1,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "1d489c84-f1b5-431d-bdf3-e61e74cd7f15",
                loopTargetNodeGuid = "bd36ddc7-e687-4355-a69b-e799c9d857de",
                loopTargetIsOneWay = true,
                guidAsString       = "9fc6fab9-fe0f-458c-b1a4-e69077243acc"
            };
            DungeonFlowNode TestNode_21 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.HUB,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.MANDATORY,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow           = m_CachedFlow,
                parentNodeGuid = "b1da2e8a-afeb-41cc-8840-be1c46aa4401",
                childNodeGuids = new List <string>()
                {
                    "0fbff154-f8cb-4367-a11f-16f5dd56fe4f", "8b4c640e-b835-4a6b-9326-7b11d856fcde"
                },
                loopTargetIsOneWay = false,
                guidAsString       = "8267eaa8-ed7f-403b-97a6-421d15a21ef3"
            };
            DungeonFlowNode TestNode_22 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.SECRET,
                percentChance             = 0.196999997f,
                priority                  = DungeonFlowNode.NodePriority.OPTIONAL,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "989ad791-cfc8-4f4e-afc6-fd9512a789b7",
                childNodeGuids     = new List <string>(0),
                loopTargetIsOneWay = false,
                guidAsString       = "3a6325a4-d2c0-4b93-a82e-7f09b007e190"
            };
            DungeonFlowNode TestNode_23 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.SECRET,
                percentChance             = 1f,
                priority                  = DungeonFlowNode.NodePriority.OPTIONAL,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "3956174b-a5ee-4716-b021-889db041a070",
                childNodeGuids     = new List <string>(0),
                loopTargetIsOneWay = false,
                guidAsString       = "31a9f731-24ba-49dd-9086-2f01cb3fcb1d"
            };
            DungeonFlowNode TestNode_24 = new DungeonFlowNode(m_CachedFlow)
            {
                isSubchainStandin         = false,
                nodeType                  = DungeonFlowNode.ControlNodeType.ROOM,
                roomCategory              = PrototypeDungeonRoom.RoomCategory.SECRET,
                percentChance             = 0.291999996f,
                priority                  = DungeonFlowNode.NodePriority.OPTIONAL,
                capSubchain               = false,
                limitedCopiesOfSubchain   = false,
                maxCopiesOfSubchain       = 1,
                receivesCaps              = false,
                isWarpWingEntrance        = false,
                handlesOwnWarping         = false,
                forcedDoorType            = DungeonFlowNode.ForcedDoorType.NONE,
                loopForcedDoorType        = DungeonFlowNode.ForcedDoorType.NONE,
                nodeExpands               = false,
                initialChainPrototype     = "n",
                minChainLength            = 3,
                maxChainLength            = 8,
                minChildrenToBuild        = 1,
                maxChildrenToBuild        = 1,
                canBuildDuplicateChildren = false,
                subchainIdentifiers       = new List <string>(0),
                chainRules                = new List <ChainRule>(0),
                flow               = m_CachedFlow,
                parentNodeGuid     = "56753489-2944-42ed-8c1f-c0daa03417b0",
                childNodeGuids     = new List <string>(0),
                loopTargetIsOneWay = false,
                guidAsString       = "3e0b1ce9-3862-4041-bfa9-bb82474e567a"
            };

            m_CachedFlow.name = "TEST_West_Floor_03a_Flow";
            // m_CachedFlow.fallbackRoomTable = CatacombsPrefab.PatternSettings.flows[0].fallbackRoomTable;
            m_CachedFlow.fallbackRoomTable   = ExpandPrefabs.CatacombsRoomTable;
            m_CachedFlow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>()
            {
                TestSubTypeRestriction
            };
            m_CachedFlow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            m_CachedFlow.sharedInjectionData = new List <SharedInjectionData>(0);

            m_CachedFlow.Initialize();

            m_CachedFlow.AddNodeToFlow(TestNode_00, null);
            m_CachedFlow.AddNodeToFlow(TestNode_01, TestNode_10);
            m_CachedFlow.AddNodeToFlow(TestNode_02, TestNode_01);
            m_CachedFlow.AddNodeToFlow(TestNode_03, TestNode_02);
            m_CachedFlow.AddNodeToFlow(TestNode_04, TestNode_00);
            m_CachedFlow.AddNodeToFlow(TestNode_05, TestNode_04);
            m_CachedFlow.AddNodeToFlow(TestNode_06, TestNode_11);
            m_CachedFlow.AddNodeToFlow(TestNode_07, TestNode_06);
            m_CachedFlow.AddNodeToFlow(TestNode_08, TestNode_21);
            m_CachedFlow.AddNodeToFlow(TestNode_09, TestNode_08);
            m_CachedFlow.AddNodeToFlow(TestNode_10, TestNode_09);
            m_CachedFlow.AddNodeToFlow(TestNode_11, TestNode_05);
            m_CachedFlow.AddNodeToFlow(TestNode_12, TestNode_11);
            m_CachedFlow.AddNodeToFlow(TestNode_13, TestNode_12);
            m_CachedFlow.AddNodeToFlow(TestNode_14, TestNode_21);
            m_CachedFlow.AddNodeToFlow(TestNode_15, TestNode_07);
            m_CachedFlow.AddNodeToFlow(TestNode_16, TestNode_14);
            m_CachedFlow.AddNodeToFlow(TestNode_17, TestNode_10);
            m_CachedFlow.AddNodeToFlow(TestNode_18, TestNode_17);
            m_CachedFlow.AddNodeToFlow(TestNode_19, TestNode_18);
            m_CachedFlow.AddNodeToFlow(TestNode_20, TestNode_19);
            m_CachedFlow.AddNodeToFlow(TestNode_21, TestNode_15);
            m_CachedFlow.AddNodeToFlow(TestNode_22, TestNode_07);
            m_CachedFlow.AddNodeToFlow(TestNode_23, TestNode_09);
            m_CachedFlow.AddNodeToFlow(TestNode_24, TestNode_18);

            m_CachedFlow.LoopConnectNodes(TestNode_13, TestNode_05);
            m_CachedFlow.LoopConnectNodes(TestNode_20, TestNode_10);

            m_CachedFlow.FirstNode = TestNode_00;

            return(m_CachedFlow);
        }
示例#29
0
        public static DungeonFlow F4c_West_Flow_01()
        {
            DungeonFlow m_CachedFlow = ScriptableObject.CreateInstance <DungeonFlow>();

            m_CachedFlow.name = "F4c_West_Flow_01";
            m_CachedFlow.fallbackRoomTable   = ExpandPrefabs.CustomRoomTableSecretGlitchFloor;
            m_CachedFlow.phantomRoomTable    = null;
            m_CachedFlow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>(0);
            m_CachedFlow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            m_CachedFlow.sharedInjectionData = new List <SharedInjectionData>()
            {
                CustomSecretFloorSharedInjectionData
            };
            m_CachedFlow.Initialize();


            DungeonFlowNode entranceNode      = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ExpandRoomPrefabs.Expand_West_Entrance);
            DungeonFlowNode exitNode          = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.EXIT, ExpandRoomPrefabs.SecretExitRoom);
            DungeonFlowNode bossFoyerNode     = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.boss_foyertable);
            DungeonFlowNode bossNode          = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.BOSS, ExpandRoomPrefabs.FakeBossRoom);
            DungeonFlowNode fakeBossfoyerNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.boss_foyertable);
            DungeonFlowNode fakeBossNode      = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.BOSS, ExpandRoomPrefabs.GungeoneerMimicBossRoom);

            DungeonFlowNode             WestWinchesterNode   = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            List <PrototypeDungeonRoom> m_WinchesterRoomList = new List <PrototypeDungeonRoom>();

            foreach (WeightedRoom weightedRoom in ExpandPrefabs.winchesterroomtable.includedRooms.elements)
            {
                if (weightedRoom.room != null)
                {
                    m_WinchesterRoomList.Add(weightedRoom.room);
                }
            }

            if (m_WinchesterRoomList.Count > 0)
            {
                m_WinchesterRoomList = m_WinchesterRoomList.Shuffle();
                WestWinchesterNode.overrideExactRoom = BraveUtility.RandomElement(m_WinchesterRoomList);
            }

            DungeonFlowNode WestGunMuncherNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, ExpandPrefabs.subshop_muncher_01);

            DungeonFlowNode WestShopNode        = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.shop_room_table);
            DungeonFlowNode WestShopBackRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_West_SecretShopWarp, handlesOwnWarping: false);

            DungeonFlowNode WestChestRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.REWARD, ExpandRoomPrefabs.Expand_West_ChestRoom);
            DungeonFlowNode WestChestRoom_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.REWARD, ExpandRoomPrefabs.Expand_West_ChestRoom);

            DungeonFlowNode WestSecretRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET, ExpandRoomPrefabs.Expand_West_SecretKeyShop);
            DungeonFlowNode WestSecretWarp_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_West_SecretWarp, handlesOwnWarping: false);
            DungeonFlowNode WestSecretHub_01  = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB, ExpandRoomPrefabs.Expand_West_SecretHub, isWarpWingNode: true, handlesOwnWarping: false);
            DungeonFlowNode WestSecretHub_02  = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB, ExpandRoomPrefabs.Expand_West_SecretHub2, isWarpWingNode: true, handlesOwnWarping: false);

            DungeonFlowNode WestRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_03 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_04 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_05 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_06 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_07 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_08 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_09 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_10 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_11 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_12 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);

            DungeonFlowNode WestRoom_13 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_14 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_15 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode WestRoom_16 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);

            DungeonFlowNode MinibossRoom_01        = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, overrideTable: ExpandPrefabs.MegaMiniBossRoomTable);
            DungeonFlowNode ChallengeShrineRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.MegaChallengeShrineTable);
            DungeonFlowNode ShrineRoom_01          = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, ExpandRoomPrefabs.Expand_West_ShrineRoom);

            ShrineRoom_01.forcedDoorType = DungeonFlowNode.ForcedDoorType.LOCKED;
            DungeonFlowNode SpecialRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.basic_special_rooms_noBlackMarket);

            DungeonFlowNode BlankRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_West_BlankPedestalRoom);
            DungeonFlowNode BlankRoom_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_West_BlankPedestalRoom);

            DungeonFlowNode RatKeyRoom_01       = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_West_RatKeyPedestalRoom);
            DungeonFlowNode RatKeyRoom_02       = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_West_RatKeyPedestalRoom);
            DungeonFlowNode SecretRatKeyRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET, ExpandRoomPrefabs.Expand_West_SecretRatKeyPedestalRoom);
            DungeonFlowNode SecretRatKeyRoom_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET, ExpandRoomPrefabs.Expand_West_SecretRatKeyPedestalRoom);


            DungeonFlowNode PuzzleRoom_01 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandRoomPrefabs.PuzzleRoom1);
            DungeonFlowNode PuzzleRoom_02 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandRoomPrefabs.PuzzleRoom2);
            DungeonFlowNode PuzzleRoom_03 = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandRoomPrefabs.PuzzleRoom3);

            DungeonFlowNode m_SpecialRewardNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.SecretRewardRoom);

            DungeonFlowNode m_SecretBossNode         = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.BOSS, ExpandRoomPrefabs.SecretBossRoom);
            DungeonFlowNode m_SecretBossFoyerNode    = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, ExpandPrefabs.DragunBossFoyerRoom);
            DungeonFlowNode m_SecretBossExitNode     = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.EXIT, ExpandPrefabs.DraGunExitRoom);
            DungeonFlowNode m_SecretBossEndTimesNode = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, ExpandPrefabs.DraGunEndTimesRoom, isWarpWingNode: true);
            DungeonFlowNode m_SecretBossShopNode     = GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, ExpandPrefabs.BlacksmithShop);

            m_CachedFlow.AddNodeToFlow(entranceNode, null);
            m_CachedFlow.AddNodeToFlow(WestRoom_01, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_03, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_04, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_05, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_06, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_07, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_09, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_11, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestRoom_12, entranceNode);
            m_CachedFlow.AddNodeToFlow(WestGunMuncherNode, WestRoom_03);
            m_CachedFlow.AddNodeToFlow(WestWinchesterNode, WestRoom_11);

            m_CachedFlow.AddNodeToFlow(WestRoom_08, WestRoom_07);
            m_CachedFlow.AddNodeToFlow(BlankRoom_01, WestRoom_08);

            m_CachedFlow.AddNodeToFlow(BlankRoom_02, WestRoom_05);

            m_CachedFlow.AddNodeToFlow(WestChestRoom_01, WestRoom_01);
            m_CachedFlow.AddNodeToFlow(WestChestRoom_02, WestRoom_09);

            m_CachedFlow.AddNodeToFlow(WestSecretRoom_01, WestChestRoom_02);
            m_CachedFlow.AddNodeToFlow(WestSecretWarp_01, WestSecretRoom_01);
            m_CachedFlow.AddNodeToFlow(WestSecretHub_01, WestSecretWarp_01);

            m_CachedFlow.AddNodeToFlow(SecretRatKeyRoom_01, WestSecretHub_01);
            m_CachedFlow.AddNodeToFlow(WestRoom_13, WestSecretHub_01);
            m_CachedFlow.AddNodeToFlow(ShrineRoom_01, WestRoom_13);
            m_CachedFlow.AddNodeToFlow(SpecialRoom_01, WestRoom_13);

            m_CachedFlow.AddNodeToFlow(ChallengeShrineRoom_01, WestSecretHub_01);
            m_CachedFlow.AddNodeToFlow(WestRoom_14, ChallengeShrineRoom_01);
            m_CachedFlow.AddNodeToFlow(WestRoom_15, WestRoom_14);
            m_CachedFlow.AddNodeToFlow(SecretRatKeyRoom_02, WestRoom_15);

            m_CachedFlow.AddNodeToFlow(WestRoom_16, WestRoom_14);
            m_CachedFlow.AddNodeToFlow(MinibossRoom_01, WestRoom_16);
            m_CachedFlow.AddNodeToFlow(RatKeyRoom_01, MinibossRoom_01);

            m_CachedFlow.AddNodeToFlow(WestShopNode, WestRoom_06);
            m_CachedFlow.AddNodeToFlow(WestShopBackRoom_01, WestShopNode);
            m_CachedFlow.AddNodeToFlow(WestSecretHub_02, WestShopBackRoom_01);
            m_CachedFlow.AddNodeToFlow(PuzzleRoom_01, WestSecretHub_02);
            m_CachedFlow.AddNodeToFlow(PuzzleRoom_02, WestSecretHub_02);
            m_CachedFlow.AddNodeToFlow(PuzzleRoom_03, WestSecretHub_02);
            m_CachedFlow.AddNodeToFlow(m_SpecialRewardNode, WestSecretHub_02);
            m_CachedFlow.AddNodeToFlow(m_SecretBossShopNode, m_SpecialRewardNode);
            m_CachedFlow.AddNodeToFlow(m_SecretBossFoyerNode, m_SecretBossShopNode);
            m_CachedFlow.AddNodeToFlow(m_SecretBossNode, m_SecretBossFoyerNode);
            m_CachedFlow.AddNodeToFlow(m_SecretBossExitNode, m_SecretBossNode);
            m_CachedFlow.AddNodeToFlow(m_SecretBossEndTimesNode, m_SecretBossExitNode);

            m_CachedFlow.AddNodeToFlow(WestRoom_02, WestRoom_12);
            m_CachedFlow.AddNodeToFlow(fakeBossfoyerNode, WestRoom_02);
            m_CachedFlow.AddNodeToFlow(fakeBossNode, fakeBossfoyerNode);
            m_CachedFlow.AddNodeToFlow(RatKeyRoom_02, fakeBossNode);

            m_CachedFlow.AddNodeToFlow(WestRoom_10, WestRoom_04);
            m_CachedFlow.AddNodeToFlow(bossFoyerNode, WestRoom_10);
            m_CachedFlow.AddNodeToFlow(bossNode, bossFoyerNode);
            m_CachedFlow.AddNodeToFlow(exitNode, bossNode);

            m_CachedFlow.FirstNode = entranceNode;

            return(m_CachedFlow);
        }
        public static DungeonFlow Apache_Fucking_Around_Flow()
        {
            DungeonFlowSubtypeRestriction m_SubTypeRestrictions = new DungeonFlowSubtypeRestriction()
            {
                baseCategoryRestriction       = PrototypeDungeonRoom.RoomCategory.NORMAL,
                normalSubcategoryRestriction  = PrototypeDungeonRoom.RoomNormalSubCategory.TRAP,
                bossSubcategoryRestriction    = PrototypeDungeonRoom.RoomBossSubCategory.FLOOR_BOSS,
                specialSubcategoryRestriction = PrototypeDungeonRoom.RoomSpecialSubCategory.UNSPECIFIED_SPECIAL,
                secretSubcategoryRestriction  = PrototypeDungeonRoom.RoomSecretSubCategory.UNSPECIFIED_SECRET,
                maximumRoomsOfSubtype         = 1
            };

            DungeonFlow m_CachedFlow = ScriptableObject.CreateInstance <DungeonFlow>();

            bool SecretRoomSelector = BraveUtility.RandomBool();

            m_CachedFlow.name = "Apache_Fucking_Around_Flow";
            m_CachedFlow.fallbackRoomTable   = ExpandPrefabs.CustomRoomTable2;
            m_CachedFlow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>()
            {
                m_SubTypeRestrictions
            };
            m_CachedFlow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            m_CachedFlow.sharedInjectionData = new List <SharedInjectionData>(0);

            m_CachedFlow.Initialize();

            DungeonFlowNode m_EntranceNode  = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ExpandPrefabs.elevator_entrance);
            DungeonFlowNode m_ExitNode      = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.EXIT, ExpandPrefabs.tiny_exit);
            DungeonFlowNode m_BossNode      = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.BOSS, ExpandPrefabs.doublebeholsterroom01);
            DungeonFlowNode m_BossFoyerNode = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.boss_foyer);

            // First chain of nodes starting off Entrance
            DungeonFlowNode m_ConnectorNode_01     = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_ConnectorNode_02     = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_ConnectorNode_03     = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_ConnectorNode_04     = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_ShopNode             = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SPECIAL, overrideTable: ExpandPrefabs.shop_room_table);
            DungeonFlowNode m_HubNode              = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.HUB);
            DungeonFlowNode m_RewardNode_01        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.reward_room);
            DungeonFlowNode m_RewardNode_02        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.reward_room);
            DungeonFlowNode m_RewardNode_03        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.gungeon_rewardroom_1);
            DungeonFlowNode m_NormalNode_01        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_02        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_03        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_04        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_05        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_06        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_07        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_08        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_09        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_NormalNode_10        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_SecretNode_01        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET);
            DungeonFlowNode m_SecretNode_02        = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.SECRET);
            DungeonFlowNode m_LoopTargetNormalNode = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL, oneWayLoopTarget: true);

            // Warp Wing chain
            DungeonFlowNode m_WarpWingConnectorNode_01 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandRoomPrefabs.Expand_SecretElevatorDestinationRoom, isWarpWingNode: true);
            DungeonFlowNode m_WarpWingConnectorNode_02 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_WarpWingConnectorNode_03 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_WarpWingConnectorNode_04 = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR);
            DungeonFlowNode m_WarpWingNormalNode_01    = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_WarpWingNormalNode_02    = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_WarpWingNormalNode_03    = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode m_WarpWingRewardNode_01    = ExpandDungeonFlow.GenerateDefaultNode(m_CachedFlow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ExpandPrefabs.reward_room);

            // Assign special elevator entrance room to one of the two guranteed secret rooms on this flow.
            if (SecretRoomSelector)
            {
                m_SecretNode_01.overrideExactRoom = ExpandRoomPrefabs.Expand_SecretElevatorEntranceRoom;
            }
            else
            {
                m_SecretNode_02.overrideExactRoom = ExpandRoomPrefabs.Expand_SecretElevatorEntranceRoom;
            }

            m_CachedFlow.AddNodeToFlow(m_EntranceNode, null);
            m_CachedFlow.AddNodeToFlow(m_ConnectorNode_01, m_EntranceNode);
            m_CachedFlow.AddNodeToFlow(m_ConnectorNode_02, m_ConnectorNode_01);
            m_CachedFlow.AddNodeToFlow(m_ConnectorNode_03, m_ConnectorNode_02);
            // Shop node branching off first connector node
            m_CachedFlow.AddNodeToFlow(m_ShopNode, m_ConnectorNode_01);
            // Huh node. A chest node then normal node leading to boss room/exit with a normal node and loop nodes connected to exit.
            m_CachedFlow.AddNodeToFlow(m_HubNode, m_ConnectorNode_01);
            m_CachedFlow.AddNodeToFlow(m_RewardNode_01, m_HubNode);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_01, m_HubNode);
            m_CachedFlow.AddNodeToFlow(m_BossFoyerNode, m_NormalNode_01);
            m_CachedFlow.AddNodeToFlow(m_BossNode, m_BossFoyerNode);
            m_CachedFlow.AddNodeToFlow(m_ExitNode, m_BossNode);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_02, m_ExitNode);
            m_CachedFlow.AddNodeToFlow(m_LoopTargetNormalNode, m_ExitNode);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_03, m_LoopTargetNormalNode);
            m_CachedFlow.AddNodeToFlow(m_RewardNode_02, m_NormalNode_03);
            // Connect end of this chain back to first node in loop chain.
            m_CachedFlow.LoopConnectNodes(m_RewardNode_02, m_LoopTargetNormalNode);


            // Branch of nodes that leads off hub to mainly normal rooms, a chest and a couple secret rooms.
            m_CachedFlow.AddNodeToFlow(m_NormalNode_04, m_HubNode);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_05, m_NormalNode_04);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_06, m_NormalNode_05);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_07, m_NormalNode_06);
            m_CachedFlow.AddNodeToFlow(m_SecretNode_01, m_NormalNode_06);

            m_CachedFlow.AddNodeToFlow(m_NormalNode_08, m_NormalNode_05);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_09, m_NormalNode_08);
            m_CachedFlow.AddNodeToFlow(m_NormalNode_10, m_NormalNode_09);
            m_CachedFlow.AddNodeToFlow(m_SecretNode_02, m_NormalNode_10);
            m_CachedFlow.AddNodeToFlow(m_RewardNode_03, m_NormalNode_10);

            // Warpwing CHain of nodes with 1 reward room
            m_CachedFlow.AddNodeToFlow(m_WarpWingConnectorNode_01, m_HubNode);
            m_CachedFlow.AddNodeToFlow(m_WarpWingNormalNode_01, m_WarpWingConnectorNode_01);
            m_CachedFlow.AddNodeToFlow(m_WarpWingRewardNode_01, m_WarpWingNormalNode_01);
            m_CachedFlow.AddNodeToFlow(m_WarpWingConnectorNode_02, m_WarpWingConnectorNode_01);
            m_CachedFlow.AddNodeToFlow(m_WarpWingNormalNode_02, m_WarpWingConnectorNode_02);
            m_CachedFlow.AddNodeToFlow(m_WarpWingConnectorNode_03, m_WarpWingNormalNode_02);
            m_CachedFlow.AddNodeToFlow(m_WarpWingConnectorNode_04, m_WarpWingConnectorNode_03);
            m_CachedFlow.AddNodeToFlow(m_WarpWingNormalNode_03, m_WarpWingConnectorNode_04);


            m_CachedFlow.FirstNode = m_EntranceNode;

            return(m_CachedFlow);
        }