Пример #1
0
        public override void Start()
        {
            // Init Prefab Databases
            ChaosPrefabs.InitCustomPrefabs();
            ChaosRoomPrefabs.InitCustomRooms();

            // Init Custom DungeonFlow(s)
            ChaosDungeonFlows.InitDungeonFlows();

            // Setup Console Commands for Glitch and Chaos stuff
            ETGModMainBehaviour.Instance.gameObject.AddComponent <ChaosConsole>();
            // Modified version of Anywhere mod
            ETGModMainBehaviour.Instance.gameObject.AddComponent <DungeonFlowModule>();

            // Add some of the new enemies to the old secret floors
            ChaosEnemyReplacements.InitReplacementEnemiesForSewers(GlobalDungeonData.ValidTilesets.SEWERGEON, "_Sewers");
            ChaosEnemyReplacements.InitReplacementEnemiesForAbbey(GlobalDungeonData.ValidTilesets.CATHEDRALGEON, "_Abbey");

            ChaosSharedHooks.InstallRequiredHooks();

            GameManager.Instance.OnNewLevelFullyLoaded += ChaosObjectMods.Instance.InitSpecialMods;

            // ETGMod.AIActor.OnPreStart = (Action<AIActor>)Delegate.Combine(ETGMod.AIActor.OnPreStart, new Action<AIActor>(EnemyMods));
            ETGMod.AIActor.OnPreStart += EnemyModRandomizer;

            Debug.Log("[ChaosGlitchMod] Installing GameManager.Awake Hook....");
            Hook gameManagerHook = new Hook(
                typeof(GameManager).GetMethod("Awake", BindingFlags.NonPublic | BindingFlags.Instance),
                typeof(ChaosGlitchMod).GetMethod("GameManager_Awake", BindingFlags.NonPublic | BindingFlags.Instance),
                GameManager.Instance
                );
        }
Пример #2
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;
        }
Пример #3
0
        public static void InitFlow()
        {
            for (int i = 0; i < 11; i++)
            {
                ConnectorNodes.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Really_Big_Flow, PrototypeDungeonRoom.RoomCategory.CONNECTOR));
            }
            for (int i = 0; i < 89; i++)
            {
                NormalNodes.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Really_Big_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL));
            }

            ChestNodes.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Really_Big_Flow, PrototypeDungeonRoom.RoomCategory.REWARD, ChaosPrefabs.reward_room));
            ChestNodes.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Really_Big_Flow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.reward_room));
            ChestNodes.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Really_Big_Flow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.reward_room));
            ChestNodes.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Really_Big_Flow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosPrefabs.reward_room));

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

            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(EntranceNode, null);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(ConnectorNodes[10], EntranceNode);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(FirstShopNode, ConnectorNodes[10]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[88], ConnectorNodes[10]);

            // First chain of 25 nodes starting at 99 and moving down
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[87], NormalNodes[88]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[86], NormalNodes[87]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[85], NormalNodes[86]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[84], NormalNodes[85]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[83], NormalNodes[84]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[82], NormalNodes[83]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[81], NormalNodes[82]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[80], NormalNodes[81]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[79], NormalNodes[80]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[78], NormalNodes[79]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[77], NormalNodes[78]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[76], NormalNodes[77]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[75], NormalNodes[76]);
            // Chest 1
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(ChestNodes[0], NormalNodes[75]);

            //Start of Second Chain
            ConnectorNodes[9].roomCategory = PrototypeDungeonRoom.RoomCategory.HUB;
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(ConnectorNodes[9], NormalNodes[75]);

            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[74], ConnectorNodes[9]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[73], NormalNodes[74]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[72], NormalNodes[73]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[71], NormalNodes[72]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[70], NormalNodes[71]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[69], NormalNodes[70]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[68], NormalNodes[69]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[67], NormalNodes[68]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[66], NormalNodes[67]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[65], NormalNodes[66]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[64], NormalNodes[65]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[63], NormalNodes[64]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[62], NormalNodes[63]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[61], NormalNodes[62]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[60], NormalNodes[61]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[59], NormalNodes[60]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[58], NormalNodes[59]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[57], NormalNodes[58]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[56], NormalNodes[57]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[55], NormalNodes[56]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[54], NormalNodes[55]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[53], NormalNodes[54]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[52], NormalNodes[53]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[51], NormalNodes[52]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[50], NormalNodes[51]);
            // Chest 2
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(ChestNodes[1], NormalNodes[50]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(SecondShopNode, ChestNodes[1]);

            //Start of Third Chain
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[49], ConnectorNodes[9]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[48], NormalNodes[49]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[47], NormalNodes[48]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[46], NormalNodes[47]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[45], NormalNodes[46]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[44], NormalNodes[45]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[43], NormalNodes[44]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[42], NormalNodes[43]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[41], NormalNodes[42]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[40], NormalNodes[41]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[39], NormalNodes[40]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[38], NormalNodes[39]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[37], NormalNodes[38]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[36], NormalNodes[37]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[35], NormalNodes[36]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[34], NormalNodes[35]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[33], NormalNodes[34]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[32], NormalNodes[33]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[31], NormalNodes[32]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[30], NormalNodes[31]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[29], NormalNodes[30]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[28], NormalNodes[29]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[27], NormalNodes[28]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[26], NormalNodes[27]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[25], NormalNodes[26]);
            // Chest 3
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(ChestNodes[2], NormalNodes[25]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(MiniBossFoyerNode, ChestNodes[2]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(FakebossNode, MiniBossFoyerNode);


            //Start of Fourth Chain
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[24], ConnectorNodes[9]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[23], NormalNodes[24]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[22], NormalNodes[23]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[21], NormalNodes[22]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[20], NormalNodes[21]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[19], NormalNodes[20]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[18], NormalNodes[19]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[17], NormalNodes[18]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[16], NormalNodes[17]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[15], NormalNodes[16]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[14], NormalNodes[15]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[13], NormalNodes[14]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[12], NormalNodes[13]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[11], NormalNodes[12]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[10], NormalNodes[11]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[9], NormalNodes[10]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[8], NormalNodes[9]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[7], NormalNodes[8]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[6], NormalNodes[7]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[5], NormalNodes[6]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[4], NormalNodes[5]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[3], NormalNodes[4]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[2], NormalNodes[3]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[1], NormalNodes[2]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(NormalNodes[0], NormalNodes[1]);
            // Chest 4
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(ChestNodes[3], NormalNodes[0]);

            // Boss
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(BossFoyerNode, ChestNodes[3]);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(BossNode, BossFoyerNode);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(BossExitNode, BossNode);
            ChaosDungeonFlows.Really_Big_Flow.AddNodeToFlow(BossEndTimesNode, BossExitNode);

            // ChaosDungeonFlows.Really_Big_Flow.LoopConnectNodes(ComplexFlowNode_05, ComplexFlowNode_09);

            ChaosDungeonFlows.Really_Big_Flow.FirstNode = EntranceNode;
        }
        public static void InitFlow()
        {
            DungeonFlowNode entranceNode       = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.ENTRANCE, ChaosPrefabs.tiny_entrance);
            DungeonFlowNode exitNode           = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.EXIT, ChaosRoomPrefabs.SecretExitRoom);
            DungeonFlowNode firstConnectorNode = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosRoomPrefabs.Utiliroom);
            DungeonFlowNode lastConnectorNode  = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.CONNECTOR, ChaosRoomPrefabs.Utiliroom);

            DungeonFlowNode TrapRoomNode_01 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_02 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_03 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_04 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_05 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_06 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_07 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_08 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_09 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_10 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_11 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_12 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_13 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_14 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_15 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_16 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_17 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_18 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_19 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_20 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_21 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_22 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_23 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_24 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);
            DungeonFlowNode TrapRoomNode_25 = ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Test_TrapRoom_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL);

            TrapRoomTable.name                   = "Test Trap Room Table";
            TrapRoomTable.includedRooms          = new WeightedRoomCollection();
            TrapRoomTable.includedRooms.elements = new List <WeightedRoom>();
            TrapRoomTable.includedRoomTables     = new List <GenericRoomTable>(0);

            foreach (WeightedRoom weightedRoom in ChaosPrefabs.CustomRoomTable.includedRooms.elements)
            {
                if (weightedRoom.room != null && weightedRoom.room.category == PrototypeDungeonRoom.RoomCategory.NORMAL &&
                    weightedRoom.room.subCategoryNormal == PrototypeDungeonRoom.RoomNormalSubCategory.TRAP)
                {
                    TrapRoomTable.includedRooms.elements.Add(weightedRoom);
                }
            }

            ChaosDungeonFlows.Test_TrapRoom_Flow.name = "Test_TrapRoom_Flow";
            ChaosDungeonFlows.Test_TrapRoom_Flow.fallbackRoomTable   = TrapRoomTable;
            ChaosDungeonFlows.Test_TrapRoom_Flow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>(0);
            ChaosDungeonFlows.Test_TrapRoom_Flow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            ChaosDungeonFlows.Test_TrapRoom_Flow.sharedInjectionData = new List <SharedInjectionData>(0);
            ChaosDungeonFlows.Test_TrapRoom_Flow.Initialize();

            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(entranceNode, null);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(firstConnectorNode, entranceNode);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_01, firstConnectorNode);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_02, TrapRoomNode_01);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_03, TrapRoomNode_02);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_04, TrapRoomNode_03);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_05, TrapRoomNode_04);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_06, TrapRoomNode_05);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_07, TrapRoomNode_06);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_08, TrapRoomNode_07);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_09, TrapRoomNode_08);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_10, TrapRoomNode_09);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_11, TrapRoomNode_10);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_12, TrapRoomNode_11);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_13, TrapRoomNode_12);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_14, TrapRoomNode_13);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_15, TrapRoomNode_14);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_16, TrapRoomNode_15);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_17, TrapRoomNode_16);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_18, TrapRoomNode_17);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_19, TrapRoomNode_18);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_20, TrapRoomNode_19);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_21, TrapRoomNode_20);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_22, TrapRoomNode_21);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_23, TrapRoomNode_22);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_24, TrapRoomNode_23);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(TrapRoomNode_25, TrapRoomNode_24);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(lastConnectorNode, TrapRoomNode_25);
            ChaosDungeonFlows.Test_TrapRoom_Flow.AddNodeToFlow(exitNode, lastConnectorNode);
            ChaosDungeonFlows.Test_TrapRoom_Flow.FirstNode = entranceNode;
        }
Пример #5
0
        public static void InitFlow()
        {
            for (int i = 0; i < LoopRoomCount + 1; i++)
            {
                m_cachedNodes_01.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Custom_GlitchChestAlt_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL));
                m_cachedNodes_04.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Custom_GlitchChestAlt_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL));
            }

            for (int i = 0; i < SingleChainRoomCount + 1; i++)
            {
                m_cachedNodes_02.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Custom_GlitchChestAlt_Flow, PrototypeDungeonRoom.RoomCategory.NORMAL));
                m_cachedNodes_03.Add(ChaosDungeonFlows.GenerateDefaultNode(ChaosDungeonFlows.Custom_GlitchChestAlt_Flow, 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.Custom_GlitchChestAlt_Flow.name = "Custom_GlitchChestAlt_Flow";
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.fallbackRoomTable   = ChaosPrefabs.CustomRoomTableNoCastle;
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.subtypeRestrictions = new List <DungeonFlowSubtypeRestriction>()
            {
                ChaosDungeonFlows.BaseSubTypeRestrictions
            };
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.flowInjectionData   = new List <ProceduralFlowModifierData>(0);
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.sharedInjectionData = new List <SharedInjectionData>()
            {
                ChaosDungeonFlows.BaseSharedInjectionData
            };
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.Initialize();

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

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

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

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

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

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

            // Second Loop
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.AddNodeToFlow(m_cachedNodes_04[0], m_EntranceNode);
            for (int i = 1; i < LoopRoomCount + 1; i++)
            {
                ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.AddNodeToFlow(m_cachedNodes_04[i], m_cachedNodes_04[i - 1]);
            }
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.AddNodeToFlow(m_ChestRoom_04, m_cachedNodes_04[LoopRoomCount]);
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.LoopConnectNodes(m_ChestRoom_04, m_EntranceNode);
            ChaosDungeonFlows.Custom_GlitchChestAlt_Flow.FirstNode = m_HubNode;
        }