Beispiel #1
0
 private static void makeJammed(AIActor enemy)
 {
     if (SaveAPIManager.GetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_CONSOLE) || SaveAPIManager.GetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_GENUINE))
     {
         enemy.BecomeBlackPhantom();
     }
 }
        public static void ChestPreOpen(Chest self, PlayerController opener)
        {
            JammedChestBehav jamness = self.gameObject.GetComponent <JammedChestBehav>();

            if (jamness != null)
            {
                self.PredictContents(opener);
                if (UnityEngine.Random.value <= 0.5f)
                {
                    List <PickupObject> items = GenerateContents(self.lootTable, self.breakertronLootTable, opener, 0, new System.Random());
                    self.contents.AddRange(items);
                }
                else
                {
                    int          lootID = BraveUtility.RandomElement(LootIDs);
                    PickupObject obj    = PickupObjectDatabase.GetById(lootID);
                    self.contents.Add(obj);
                }
            }
            if (jamness != null)
            {
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.JAMMED_CHESTS_OPENED, 1);
                LootEngine.SpawnCurrency(self.sprite.WorldCenter, UnityEngine.Random.Range(10, 21), false);
                if (UnityEngine.Random.value <= 0.25f && opener.name != "PlayerShade(Clone)")
                {
                    opener.healthHaver.ApplyDamage(1f, Vector2.zero, "Jammed Chest");
                }
            }
        }
        public static void LevelLoaded()
        {
            if (cursesLastFloor == null)
            {
                cursesLastFloor = new List <string>();
            }
            foreach (CurseData curse in CurrentActiveCurses)
            {
                cursesLastFloor.Add(curse.curseName);
            }
            CurseManager.RemoveAllCurses();
            float allCurse = GameManager.Instance.GetCombinedPlayersStatAmount(PlayerStats.StatType.Curse);
            float ran      = UnityEngine.Random.value;

            Debug.Log("Running Curse Check on Floor Load - Random (" + ran + ") - CurseTotal (" + allCurse + ")");
            float curseChance = 0.0666f;

            if (!SaveAPIManager.GetFlag(CustomDungeonFlags.CURSES_DISABLED))
            {
                if (UnityEngine.Random.value <= (allCurse * curseChance))
                {
                    float hellclears = GameStatsManager.Instance.GetPlayerStatValue(TrackedStats.TIMES_CLEARED_BULLET_HELL);
                    if (hellclears > 0)
                    {
                        AddRandomCurse();
                    }
                }
            }
            if (PostNewLevelCurseProcessing != null)
            {
                CurseManager.PostNewLevelCurseProcessing();
            }
            InherentPostLevelCurseProcessing();
            GameManager.Instance.StartCoroutine(DoCursePopups());
        }
        public static void Init()
        {
            bool shouldReturn = true; //Set to false in version given to Hutts

            if (shouldReturn)
            {
                return;
            }

            ETGModConsole.Commands.GetGroup("nn").AddUnit("cheatunlocks", delegate(string[] args)
            {
                foreach (CustomDungeonFlags flag in flagsToSet)
                {
                    if (!SaveAPIManager.GetFlag(flag))
                    {
                        SaveAPIManager.SetFlag(flag, true);
                    }
                }
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.TITAN_KIN_KILLED, 5);
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.BEHOLSTER_KILLS, 20);
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.MINEFLAYER_KILLS, 20);
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.CHARMED_ENEMIES_KILLED, 100);
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.JAMMED_CHESTS_OPENED, 100);
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.RUSTY_ITEMS_PURCHASED, 100);
                SaveAPIManager.RegisterStatChange(CustomTrackedStats.RUSTY_ITEMS_STOLEN, 100);
                SaveAPIManager.UpdateMaximum(CustomTrackedMaximums.MAX_HEART_CONTAINERS_EVER, 10);

                ETGModConsole.Log("<color=#00d6e6>You cheated not only the game, but yourself.</color>");
                ETGModConsole.Log("<color=#00d6e6>You didn't grow.</color>");
                ETGModConsole.Log("<color=#00d6e6>You didn't improve.</color>");
                ETGModConsole.Log("<color=#00d6e6>You took a shortcut and gained nothing.</color>");
                ETGModConsole.Log("<color=#00d6e6>You experienced a hollow victory. Nothing was risked and nothing was gained.</color>");
                ETGModConsole.Log("<color=#00d6e6>It's sad you don't know the difference.</color>");
            });
        }
Beispiel #5
0
 protected override void DoEffect(PlayerController user)
 {
     if (user.HasPickupID(Gungeon.Game.Items["nn:forsaken_heart"].PickupObjectId))
     {
         if (UnityEngine.Random.value < .50f)
         {
             //No curse >:)
         }
         else
         {
             giveSomeCurse(user);
         }
     }
     else
     {
         giveSomeCurse(user);
     }
     if (user.PlayerHasActiveSynergy("Transparent Lies"))
     {
         PickupObject byId = PickupObjectDatabase.GetById(565);
         user.AcquirePassiveItemPrefabDirectly(byId as PassiveItem);
     }
     timesUsed += 1;
     user.ForceBlank(25f, 0.5f, false, true, null, true, -1f);
     if (timesUsed >= 10)
     {
         if (!SaveAPIManager.GetFlag(CustomDungeonFlags.USED_FALSE_BLANK_TEN_TIMES))
         {
             SaveAPIManager.SetFlag(CustomDungeonFlags.USED_FALSE_BLANK_TEN_TIMES, true);
         }
     }
 }
Beispiel #6
0
 public static void OnFailedRatMaze(Action <ResourcefulRatMazeSystemController, PlayerController> orig, ResourcefulRatMazeSystemController self, PlayerController playa)
 {
     if (!SaveAPIManager.GetFlag(CustomDungeonFlags.FAILEDRATMAZE))
     {
         SaveAPIManager.SetFlag(CustomDungeonFlags.FAILEDRATMAZE, true);
     }
     orig(self, playa);
 }
Beispiel #7
0
 public static void BelloFiredBullet(Action <BaseShopController, Projectile> orig, BaseShopController self, Projectile firedShot)
 {
     orig(self, firedShot);
     if (!SaveAPIManager.GetFlag(CustomDungeonFlags.ANGERED_BELLO))
     {
         SaveAPIManager.SetFlag(CustomDungeonFlags.ANGERED_BELLO, true);
     }
 }
Beispiel #8
0
 public static void SreaperAwakeHook(Action <SuperReaperController> orig, SuperReaperController self)
 {
     orig(self);
     if (SaveAPIManager.GetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_CONSOLE) || SaveAPIManager.GetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_GENUINE))
     {
         self.BecomeJammedLord();
     }
 }
 public static void OnChestPreOpen(Chest self, PlayerController opener)
 {
     if (self && self.IsGlitched)
     {
         if (!SaveAPIManager.GetFlag(CustomDungeonFlags.UNLOCKED_MISSINGUNO))
         {
             SaveAPIManager.SetFlag(CustomDungeonFlags.UNLOCKED_MISSINGUNO, true);
         }
     }
 }
 private void OnHitByProjectile(Projectile bullet, PlayerController self)
 {
     if (bullet && bullet.Owner && (bullet.Owner is AIActor) && (bullet.Owner as AIActor).EnemyGuid == "e5cffcfabfae489da61062ea20539887")
     {
         if (!SaveAPIManager.GetFlag(CustomDungeonFlags.HURT_BY_SHROOMER))
         {
             SaveAPIManager.SetFlag(CustomDungeonFlags.HURT_BY_SHROOMER, true);
         }
     }
 }
 private void OnThrownGunHitEnemy(Projectile gun, SpeculativeRigidbody enemy, bool fatal)
 {
     if (enemy && enemy.healthHaver && fatal)
     {
         if (!SaveAPIManager.GetFlag(CustomDungeonFlags.KILLEDENEMYWITHTHROWNGUN))
         {
             SaveAPIManager.SetFlag(CustomDungeonFlags.KILLEDENEMYWITHTHROWNGUN, true);
         }
     }
 }
Beispiel #12
0
        public static void Init()
        {
            SaveAPIManager.SetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_CONSOLE, false);
            SaveAPIManager.SetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_GENUINE, false);
            ETGMod.AIActor.OnPreStart += makeJammed;

            sreaperStartHook = new Hook(
                typeof(SuperReaperController).GetMethod("Start", BindingFlags.NonPublic | BindingFlags.Instance),
                typeof(AllJammedState).GetMethod("SreaperAwakeHook"));
        }
Beispiel #13
0
 public static void PrintUnlock(CustomDungeonFlags flag, string itemname, string unlockPrereqs)
 {
     if (SaveAPIManager.GetFlag(flag))
     {
         ETGModConsole.Log($"{itemname} <color=#04eb00>[Unlocked]</color>!");
     }
     else
     {
         ETGModConsole.Log($"{itemname}  <color=#ff0000ff>[Locked]</color> - {unlockPrereqs}");
     }
 }
Beispiel #14
0
 public static void OnShrineUsed(Action <AdvancedShrineController, PlayerController> orig, AdvancedShrineController self, PlayerController playa)
 {
     //ETGModConsole.Log(self.displayTextKey);
     if (self.displayTextKey == "#SHRINE_FALLEN_ANGEL_DISPLAY")
     {
         if (!SaveAPIManager.GetFlag(CustomDungeonFlags.USEDFALLENANGELSHRINE))
         {
             SaveAPIManager.SetFlag(CustomDungeonFlags.USEDFALLENANGELSHRINE, true);
         }
     }
     orig(self, playa);
 }
Beispiel #15
0
 private void orange2(AIActor enemy)
 {
     if (enemy != null && enemy.aiActor != null)
     {
         if (enemy.aiActor.EnemyGuid == "19b420dec96d4e9ea4aebc3398c0ba7a")
         {
             if (enemy.healthHaver.IsDead)
             {
                 SaveAPIManager.SetFlag(CustomDungeonFlags.SCREAN_UNLOCK, true);
             }
         }
     }
 }
Beispiel #16
0
 private void ToggleEyeStrain(string[] args)
 {
     if (SaveAPIManager.GetFlag(CustomDungeonFlags.EYESTRAINDISABLE) == true)
     {
         ETGModConsole.Log("Potentially eye=straining effects turned off!");
         SaveAPIManager.SetFlag(CustomDungeonFlags.EYESTRAINDISABLE, true);
     }
     else
     {
         ETGModConsole.Log("Potentially eye=straining effects turned on!");
         SaveAPIManager.SetFlag(CustomDungeonFlags.EYESTRAINDISABLE, false);
     }
 }
Beispiel #17
0
 // Token: 0x0600001E RID: 30 RVA: 0x0000297C File Offset: 0x00000B7C
 public override void Init()
 {
     try
     {
         SaveAPIManager.Setup("bny");
     }
     catch (Exception arg)
     {
         ETGModConsole.Log(string.Format("{0}", arg), false);
     }
     JammedSquire.NoHarderLotJ = true;
     ETGMod.AIActor.OnPreStart = (Action <AIActor>)Delegate.Combine(ETGMod.AIActor.OnPreStart, new Action <AIActor>(this.Jamnation));
 }
        private IEnumerator PostDamageCheck(PlayerController player)
        {
            //ETGModConsole.Log("Began post damage check");
            yield return(new WaitForSeconds(5));

            if (player.healthHaver.IsAlive)
            {
                //ETGModConsole.Log("Player is alive!");
                if (!SaveAPIManager.GetFlag(CustomDungeonFlags.CHEATED_DEATH_SHADE))
                {
                    SaveAPIManager.SetFlag(CustomDungeonFlags.CHEATED_DEATH_SHADE, true);
                }
            }
            yield break;
        }
Beispiel #19
0
 public static void OnFloorUnloaded(List <PlayerController> Players)
 {
     if (OnFloorExited != null)
     {
         OnFloorExited();
     }
     foreach (PlayerController player in Players)
     {
     }
     if (CurseManager.CurrentActiveCurses.Count > 0)
     {
         if (!SaveAPIManager.GetFlag(CustomDungeonFlags.FLOOR_CLEARED_WITH_CURSE))
         {
             SaveAPIManager.SetFlag(CustomDungeonFlags.FLOOR_CLEARED_WITH_CURSE, true);
         }
     }
     CurseManager.RemoveAllCurses();
 }
        private void OnInventoryItemsChanged()
        {
            int amountOfJunk = 0;

            foreach (PassiveItem item in m_attachedPlayer.passiveItems)
            {
                if (item.PickupObjectId == 127)
                {
                    amountOfJunk++;
                }
            }
            if (amountOfJunk >= 5 && m_attachedPlayer.characterIdentity == PlayableCharacters.Robot)
            {
                if (!SaveAPIManager.GetFlag(CustomDungeonFlags.ROBOT_HELD_FIVE_JUNK))
                {
                    SaveAPIManager.SetFlag(CustomDungeonFlags.ROBOT_HELD_FIVE_JUNK, true);
                }
            }
        }
 public override void OnPostFired(PlayerController player, Gun gun)
 {
     if (gun.ClipShotsRemaining == 0)
     {
         if (!player.PlayerHasActiveSynergy("Zero Risk"))
         {
             if (player.PlayerHasActiveSynergy("Double Risk, Double Reward"))
             {
                 player.healthHaver.ApplyDamage(1f, Vector2.zero, "Very Risky Business", CoreDamageTypes.None, DamageCategory.Normal, true, null, false);
             }
             else
             {
                 player.healthHaver.ApplyDamage(0.5f, Vector2.zero, "Risky Business", CoreDamageTypes.None, DamageCategory.Normal, true, null, false);
                 if (!SaveAPIManager.GetFlag(CustomDungeonFlags.HASBEENDAMAGEDBYRISKRIFLE))
                 {
                     SaveAPIManager.SetFlag(CustomDungeonFlags.HASBEENDAMAGEDBYRISKRIFLE, true);
                 }
             }
         }
     }
 }
Beispiel #22
0
 public static void Accept(PlayerController player, GameObject npc)
 {
     //ETGModConsole.Log("Acceptance began");
     if (AllJammedState.AllJammedActive)
     {
         npc.GetComponent <tk2dSpriteAnimator>().PlayForDuration("doEffect", -2f, "idle", false);
         string header = "All-Jammed Mode Disabled";
         string text   = "";
         Notify(header, text);
         SaveAPIManager.SetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_CONSOLE, false);
         SaveAPIManager.SetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_GENUINE, false);
     }
     else
     {
         npc.GetComponent <tk2dSpriteAnimator>().PlayForDuration("doEffect", -2f, "idle", false);
         string header = "All-Jammed Mode Enabled";
         string text   = "";
         Notify(header, text);
         SaveAPIManager.SetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_CONSOLE, false);
         SaveAPIManager.SetFlag(CustomDungeonFlags.ALLJAMMEDMODE_ENABLED_GENUINE, true);
     }
     //ETGModConsole.Log("Acceptance didn't break");
 }
Beispiel #23
0
 private void orange(AIActor enemy)
 {
     if (enemy != null && enemy.aiActor != null)
     {
         if (enemy.aiActor.EnemyGuid == "5861e5a077244905a8c25c2b7b4d6ebb")
         {
             if (enemy.healthHaver.IsDead)
             {
                 SaveAPIManager.SetFlag(CustomDungeonFlags.HAT_UNLOCK, true);
             }
         }
         if (enemy.aiActor.EnemyGuid == "7c5d5f09911e49b78ae644d2b50ff3bf")
         {
             if (enemy.healthHaver.IsDead)
             {
                 if ((GameManager.Instance.PrimaryPlayer.HasPickupID(ETGMod.Databases.Items["Chest Devil's Contract"].PickupObjectId)))
                 {
                     SaveAPIManager.SetFlag(CustomDungeonFlags.DEVILMODE_LICH_UNLOCK, true);
                 }
             }
         }
     }
 }
 public static void MaxHealthStatAdder(Action <PlayerStats, PlayerController> action, PlayerStats origStats, PlayerController owner)
 {
     action(origStats, owner);
     SaveAPIManager.UpdateMaximum(CustomTrackedMaximums.MAXIMUM_JAMMO, owner.stats.GetStatValue(PlayerStats.StatType.Curse));
 }
Beispiel #25
0
        public static void Init()
        {
            ETGModConsole.Commands.GetGroup("nn").AddUnit("checkunlocks", delegate(string[] args)
            {
                ETGModConsole.Log("<color=#00d6e6>    ---------------   Item Unlocks in Once More Into The Breach    --------------    </color>");
                ETGModConsole.Log("Unlocks requiring the player to do X amount of things can be done across multiple runs unless otherwise specified.");

                //Armoured Armour
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.PLAYERHELDMORETHANFIVEARMOUR))
                {
                    ETGModConsole.Log("Armoured Armour <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Armoured Armour <color=#ff0000ff>[Locked]</color> - Hold 5 pieces of armour or more at once (11 as Robot).");
                }

                //Keybullet Effigy
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.KILLEDJAMMEDKEYBULLETKIN))
                {
                    ETGModConsole.Log("Keybullet Effigy <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Keybullet Effigy <color=#ff0000ff>[Locked]</color> - Kill a Jammed Keybullet Kin.");
                }

                //Chance Effigy
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.KILLEDJAMMEDCHANCEKIN))
                {
                    ETGModConsole.Log("Chance Effigy <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Chance Effigy <color=#ff0000ff>[Locked]</color> - Kill a Jammed Chance Kin.");
                }

                //Bloody Box
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.KILLEDJAMMEDMIMIC))
                {
                    ETGModConsole.Log("Bloody Box <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Bloody Box <color=#ff0000ff>[Locked]</color> - Kill a Jammed Mimic.");
                }

                //Risky Ring
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.HASBEENDAMAGEDBYRISKRIFLE))
                {
                    ETGModConsole.Log("Risky Ring <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Risky Ring <color=#ff0000ff>[Locked]</color> - Take damage to the Risk Rifle.");
                }

                //Cheese Heart
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.FAILEDRATMAZE))
                {
                    ETGModConsole.Log("Cheese Heart <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Cheese Heart <color=#ff0000ff>[Locked]</color> - Take too many wrong turns in the Rat's maze.");
                }

                //Dagger of the Aimgels
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.USEDFALLENANGELSHRINE))
                {
                    ETGModConsole.Log("Dagger of the Aimgels <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Dagger of the Aimgels <color=#ff0000ff>[Locked]</color> - Use a fallen angel shrine.");
                }

                //Diamond Bracelet
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.KILLEDENEMYWITHTHROWNGUN))
                {
                    ETGModConsole.Log("Diamond Bracelet <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Diamond Bracelet <color=#ff0000ff>[Locked]</color> - Kill an enemy with a thrown gun.");
                }

                //True Blank
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.USED_FALSE_BLANK_TEN_TIMES))
                {
                    ETGModConsole.Log("True Blank <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("True Blank <color=#ff0000ff>[Locked]</color> - Use the False Blank ten times in one run.");
                }

                //Titan Bullets
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.TITAN_KIN_KILLED) >= 5)
                {
                    ETGModConsole.Log("Titan Bullets <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Titan Bullets <color=#ff0000ff>[Locked]</color> - Kill 5 Titan Bullet Kin; [" + SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.TITAN_KIN_KILLED) + "/5]");
                }

                //Mutagen
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.HAS_BEATEN_BOSS_BY_SKIN_OF_TEETH))
                {
                    ETGModConsole.Log("Mutagen <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Mutagen <color=#ff0000ff>[Locked]</color> - Kill a boss while one hit from death.");
                }

                //Doggun
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.KILLED_DRAGUN_WITH_DOG))
                {
                    ETGModConsole.Log("Doggun <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Doggun <color=#ff0000ff>[Locked]</color> - Kill the Dragun with the Dog by your side.");
                }

                //The Beholster
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.BEHOLSTER_KILLS) >= 15)
                {
                    ETGModConsole.Log("The Beholster <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("The Beholster <color=#ff0000ff>[Locked]</color> - Kill 15 Beholsters; [" + SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.BEHOLSTER_KILLS) + "/15]");
                }

                //Flayed Revovler
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.MINEFLAYER_KILLS) >= 10)
                {
                    ETGModConsole.Log("Flayed Revolver <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Flayed Revolver <color=#ff0000ff>[Locked]</color> - Kill 10 Mine Flayers; [" + SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.MINEFLAYER_KILLS) + "/10]");
                }

                //Justice
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.ANGERED_BELLO))
                {
                    ETGModConsole.Log("Justice <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Justice <color=#ff0000ff>[Locked]</color> - Make the Shopkeep very, very mad.");
                }

                //Orgun
                if (SaveAPIManager.GetPlayerMaximum(CustomTrackedMaximums.MAX_HEART_CONTAINERS_EVER) >= 8)
                {
                    ETGModConsole.Log("Orgun <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Orgun <color=#ff0000ff>[Locked]</color> - Have more than 8 heart containers at once.");
                }

                //Junkllets
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.ROBOT_HELD_FIVE_JUNK))
                {
                    ETGModConsole.Log("Junkllets <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Junkllets <color=#ff0000ff>[Locked]</color> - Hold more than five junk at once as the Robot.");
                }

                //Kalibers Eye
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.CHARMED_ENEMIES_KILLED) >= 100)
                {
                    ETGModConsole.Log("Kalibers Eye <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Kalibers Eye <color=#ff0000ff>[Locked]</color> - Kill 100 Charmed Enemies; [" + SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.CHARMED_ENEMIES_KILLED) + "/100]");
                }

                //Shroomed Gun
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.HURT_BY_SHROOMER))
                {
                    ETGModConsole.Log("Shroomed Gun <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Shroomed Gun <color=#ff0000ff>[Locked]</color> - Take damage to a Shroomer.");
                }

                //Missinguno
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.UNLOCKED_MISSINGUNO))
                {
                    ETGModConsole.Log("Missinguno <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Missinguno <color=#ff0000ff>[Locked]</color> - Open a Glitched Chest OR kill the Lich as the Paradox.");
                }

                //Holey Water
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.FLOOR_CLEARED_WITH_CURSE))
                {
                    ETGModConsole.Log("Holey Water <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Holey Water <color=#ff0000ff>[Locked]</color> - Clear a floor with an active... special curse.");
                }

                //Cursed Tumbler
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.JAMMED_CHESTS_OPENED) >= 1)
                {
                    ETGModConsole.Log("Cursed Tumbler <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Cursed Tumbler <color=#ff0000ff>[Locked]</color> - Open a Jammed Chest in All-Jammed mode.");
                }

                //Rusty Casing
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.RUSTY_ITEMS_PURCHASED) >= 3)
                {
                    ETGModConsole.Log("Rusty Casing <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log($"Rusty Casing <color=#ff0000ff>[Locked]</color> - Purchase 3 items from Rusty; [{SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.RUSTY_ITEMS_PURCHASED)}/3]");
                }

                //Rusty Shotgun
                if (SaveAPIManager.GetPlayerStatValue(CustomTrackedStats.RUSTY_ITEMS_STOLEN) >= 1)
                {
                    ETGModConsole.Log("Rusty Shotgun <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Rusty Shotgun <color=#ff0000ff>[Locked]</color> - Steal an item from Rusty.");
                }

                ETGModConsole.Log("<color=#00d6e6>Shade Unlocks:</color>"); //------------------------------------------------------------

                //Shade Kill Dragun
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.DRAGUN_BEATEN_SHADE))
                {
                    ETGModConsole.Log("Shade Shot <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Shade Shot <color=#ff0000ff>[Locked]</color> - Kill the Dragun as the Shade.");
                }

                //Lead Soul
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.LICH_BEATEN_SHADE))
                {
                    ETGModConsole.Log("Lead Soul <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Lead Soul <color=#ff0000ff>[Locked]</color> - Kill the Lich as the Shade.");
                }

                //Shades Eye
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.CHEATED_DEATH_SHADE))
                {
                    ETGModConsole.Log("Shade's Eye <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Shade's Eye <color=#ff0000ff>[Locked]</color> - Take damage as the Shade... and live!");
                }

                //----------------------------------------------------------BOSSRUSH
                ETGModConsole.Log("<color=#00d6e6>Bossrush Unlocks:</color>");//------------------------------------------------------------

                PrintUnlock(CustomDungeonFlags.BOSSRUSH_PILOT, "Keygen", "Beat Bossrush as the Pilot.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_MARINE, "Shot in the Arm", "Beat Bossrush as the Marine.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_CONVICT, "Lvl. 2 Molotov", "Beat Bossrush as the Convict.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_HUNTER, "Boltcaster", "Beat Bossrush as the Hunter.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_BULLET, "Carnwennan", "Beat Bossrush as the Bullet.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_ROBOT, "Magnet", "Beat Bossrush as the Robot.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_PARADOX, "Paraglocks", "Beat Bossrush as the Paradox.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_GUNSLINGER, "Bullet Shuffle", "Beat Bossrush as the Gunslinger.");
                PrintUnlock(CustomDungeonFlags.BOSSRUSH_SHADE, "Jaws of Defeat", "Beat Bossrush as the Shade.");

                //----------------------------------------------------------RAINBOW MODE
                ETGModConsole.Log("<color=#00d6e6>Rainbow Mode Unlocks:</color>");//------------------------------------------------------------

                PrintUnlock(CustomDungeonFlags.RAINBOW_KILLED_LICH, "Rainbow Guon Stone", "Kill the Lich in Rainbow Mode.");

                //----------------------------------------------------------TURBO MODE
                ETGModConsole.Log("<color=#00d6e6>Turbo Mode Unlocks:</color>"); //------------------------------------------------------------

                PrintUnlock(CustomDungeonFlags.BEATEN_ANY_BOSS_TURBO_MODE, "Chaos Ruby", "Beat any boss in Turbo Mode.");
                PrintUnlock(CustomDungeonFlags.BEATEN_MINES_BOSS_TURBO_MODE, "Ringer", "Beat the Black Powder Mine on Turbo Mode.");
                PrintUnlock(CustomDungeonFlags.BEATEN_HOLLOW_BOSS_TURBO_MODE, "Supersonic Shots", "Beat the Hollow on Turbo Mode.");

                //----------------------------------------------------------ADVANCED DRAGUN
                ETGModConsole.Log("<color=#00d6e6>Advanced Dragun Unlocks:</color>"); //------------------------------------------------------------

                PrintUnlock(CustomDungeonFlags.ADVDRAGUN_KILLED_ROBOT, "Electrum Rounds", "Kill the Advanced Dragun as the Robot.");
                PrintUnlock(CustomDungeonFlags.ADVDRAGUN_KILLED_SHADE, "Redhawk", "Kill the Advanced Dragun as the Shade.");

                //----------------------------------------------------------ALL JAMMED MODE
                ETGModConsole.Log("<color=#00d6e6>All-Jammed Mode Unlocks:</color>"); //------------------------------------------------------------

                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_KEEP, "Hallowed Bullets", "Beat the Keep on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_OUB, "Chemical Burn", "Beat the Oubliette on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_PROPER, "Silver Guon Stone", "Beat the Gungeon Proper on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_ABBEY, "Gunidae solvit Haatelis", "Beat the Abbey of the True Gun on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_MINES, "Bloodthirsty Bullets", "Beat the Black Powder Mines on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_RAT, "Ammo Trap", "Beat the Resourceful Rat on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_HOLLOW, "Mirror Bullets", "Beat the Hollow on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_OFFICE, "Scroll of Exact Knowledge", "Beat the R&G Dept on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_FORGE, "Cloak of Darkness", "Beat the Forge on All-Jammed Mode.");
                PrintUnlock(CustomDungeonFlags.ALLJAMMED_BEATEN_HELL, "Gun of a Thousand Sins", "Beat Bullet Hell on All-Jammed Mode.");


                ETGModConsole.Log("<color=#00d6e6>Challenge Run Unlocks:</color>"); //------------------------------------------------------------
                ETGModConsole.Log("View all challenges and how to activate them by entering 'nnchallenges' into the console.");
                //Supersonic Shots
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.CHALLENGE_WHATARMY_BEATEN))
                {
                    ETGModConsole.Log("Tablet of Order <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Tablet of Order <color=#ff0000ff>[Locked]</color> - Kill the Dragun on the 'What Army?' Challenge.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.CHALLENGE_INVISIBLEO_BEATEN))
                {
                    ETGModConsole.Log("Ring of Invisibility <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Ring of Invisibility <color=#ff0000ff>[Locked]</color> - Kill the Dragun on the 'Invisible-O' Challenge.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.CHALLENGE_TOILANDTROUBLE_BEATEN))
                {
                    ETGModConsole.Log("Witches Brew <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Witches Brew <color=#ff0000ff>[Locked]</color> - Kill the Dragun on the 'Toil And Trouble' Challenge.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.CHALLENGE_KEEPITCOOL_BEATEN))
                {
                    ETGModConsole.Log("Blizzkrieg <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Blizzkrieg <color=#ff0000ff>[Locked]</color> - Beat the Hollow on the 'Keep It Cool' Challenge.");
                }

                ETGModConsole.Log("<color=#00d6e6>Hunting Quest Unlocks:</color>"); //------------------------------------------------------------
                ETGModConsole.Log("See Frifle and Mauser for details.");

                if (SaveAPIManager.GetFlag(CustomDungeonFlags.MISFIREBEAST_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Beastclaw <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Beastclaw <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.NITRA_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Dynamite Launcher <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Dynamite Launcher <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.GUNCULTIST_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Kalibers Prayer <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Kalibers Prayer <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.PHASERSPIDER_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Phaser Spiderling <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Phaser Spiderling <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.JAMMEDBULLETKIN_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Maroon Guon Stone <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Maroon Guon Stone <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.JAMMEDSHOTGUNKIN_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Blight Shell <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Blight Shell <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.JAMMEDLEADMAIDEN_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Maiden-Shaped Box <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Maiden-Shaped Box <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.JAMMEDBULLETSHARK_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Gunshark <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Gunshark <color=#ff0000ff>[Locked]</color>.");
                }
                if (SaveAPIManager.GetFlag(CustomDungeonFlags.JAMMEDGUNNUT_QUEST_REWARDED))
                {
                    ETGModConsole.Log("Bullet Blade <color=#04eb00>[Unlocked]</color>!");
                }
                else
                {
                    ETGModConsole.Log("Bullet Blade <color=#ff0000ff>[Locked]</color>.");
                }
            });
        }
 public override void Start()
 {
     ItemBuilder.Init();
     //Hooks.Init();
     //EnemyTools.Init();
     //Tools.Init();
     //EnemyBuilder.Init();
     LifeCube.Register();
     GungeonWind.Register();
     FriendshipBracelet.Register();
     FlamingSkull.Register();
     Carrot.Register();
     WinchestersHat.Register();
     GundromedaPain.Register();
     Bleaker.Register();
     CheeseAmmolet.Register();
     StrawberryJam.Register();
     //WhiteBulletCell.Register();
     Distribullets.Register();
     HungryClips.Register();
     TatteredCape.Register();
     HeroicCape.Register();
     Popcorn.Register();
     RepurposedShellCasing.Register();
     GatlingGullets.Register();
     //SomeBunny.Register();
     FittedTankBarrel.Register();
     LeadCrown.Register();
     //PiratesPendant.Register();
     PendantOfTheFirstOrder.Register();
     MimicBullets.Register();
     CatchingMitts.Register();
     Protractor.Register();
     HealthyBullets.Register();
     ChamberOfFrogs.Register();
     TrickShot.Register();
     ShowoffBullets.Register();
     BabyGoodShellicopter.Init();
     PrismaticGuonStone.Init();
     //GoonStone.Init();
     Overpill.Init();
     JammomancersHat.Init();
     ShotgunEnergyDrink.Init();
     BowlersBriefcase.Init();
     FatalOptics.Init();
     MicroEnhancement.Init();
     TargetingSpecs.Init();
     GunShredder.Init();
     GlassPrincesCannon.Add();
     Rewind.Init();
     Telegunesis.Init();
     //Underpill.Init();
     AegisShield.Init();
     AmmocondasNest.Init();
     ShadesShades.Init();
     BeholstersBelt.Init();
     SuspiciousLookingBell.Init();
     WowTasticPaintbrush.Init();
     SmokingSkull.Init();
     PortableSewerGrate.Init();
     GoldenCirclet.Init();
     //PackOfLostItems.Init();
     CapeOfTheResourcefulRat.Init();
     //DemonicBrick.Init();
     EffigyOfVengeance.Init();
     HornOfTheDragun.Init();
     PickpocketGuide.Init();
     SpillOJar.Init();
     PhaseShifterStopwatch.Init();
     Rhythminator.Add();
     //Bubbler.Add();
     StartStriker.Add();
     PrizeRifle.Add();
     MultiActiveReloadManager.SetupHooks();
     EasyGoopDefinitions.DefineDefaultGoops();
     //ZipFilePath = this.Metadata.Archive;
     //FilePath = this.Metadata.Directory;
     //AudioResourceLoader.InitAudio;
     SaveAPIManager.Setup("bb:");
     Log($"{MOD_NAME} v{VERSION} started successfully.", TEXT_COLOR);
 }
Beispiel #27
0
        public override void Start()
        {
            try
            {
                ZipFilePath     = this.Metadata.Archive;
                metadata        = this.Metadata.Directory;
                metadataARCHIVE = this.Metadata.Archive;
                FilePath        = this.Metadata.Directory + "/rooms";

                path = "CakeMod.Resources.TurtSprites.";

                assembly = Assembly.GetExecutingAssembly();
                list     = new List <Texture2D>();
                foreach (var item in assembly.GetManifestResourceNames())
                {
                    if (!item.EndsWith(".png"))
                    {
                        continue;
                    }

                    if (item.StartsWith(path))
                    {
                        list.Add(ResourceExtractor.GetTextureFromResource(item));
                    }
                }

                ETGModConsole.Log(list.Count.ToString());
                cosmoSpriteSheet = ResourceExtractor.GetTextureFromResource(cosmoSpriteSheetName);
                FloorSheet       = ResourceExtractor.GetTextureFromResource(StringFloorSheet);


                FakePrefabHooks.Init();
                ItemBuilder.Init();
                EnemyTools.Init();
                EnemyBuilder.Init();
                Hooks.Init();
                BossBuilder.Init();
                SpecialBlankModificationItem.InitHooks();
                ItemsMod.Strings = new AdvancedStringDB();
                EasyGoopDefinitions.DefineDefaultGoops();

                Cake.Init();
                CircularKing.Init();
                KinglyBullets.Init();
                LockOfTheJammed.Init();
                CakeBullets.Init();
                BleakBullets.Init();
                Jankan.Init();
                Robohead.Init();
                HatShells.Init();
                DumbBullets.Init();
                ControlledBullets.Init();
                David.Init();
                HeadCrab.Init();
                GunJester.Init();
                Waffle.Init();
                BladeBullets.Init();
                TheFool.Init();
                BowlerHat.Init();
                Depresso.Init();
                FleshCake.Init();
                BountyPoster.Init();
                OneReverse.Init();
                StrangeEffigy.Init();
                ConcealedTreasure.Init();
                Winpetster.Init();
                RookGuonStone.Init();
                IceOgreHead.Init();
                MysteriousIdol.Init();
                GlowingWomb.Init();
                Honkhorn.Init();
                HeartyLocket.Init();
                FunnyHat.Init();
                Radio.Init();
                ChocolateBar.Init();
                CluwneBullets.Init();
                BowlerRainbowDust.Init();
                StrangeArrow.Init();
                testingitem.Init();
                TestItem.Init();
                glitchammolet.Init();
                testbarrel.Init();
                BlobHeart.Init();
                WebAmmolet.Init();
                StarNinja.Init();
                PoisonBomb.Init();
                RoboticHeart.Init();
                ApprenticeScroll.Init();
                amogus.Init();
                ArmouredKey.Init();
                BabyGoodChamber.Init();
                SpringlockSuit.Init();
                BirthdayCandle.Init();
                DeadlyInsanity.Init();
                Keysing.Init();
                BabyGoodLovebulon.Init();
                FreddyPizza.Init();
                CultistHelm.Init();
                Lime.Init();
                CurseItemTest.Init();
                GoopCurse.Init();
                Jammolet.Init();
                HoloProjection.Init();
                Clumsy.Init();
                MiniShroom.Init();
                DrawnChamber.Init();
                BabyGoodMagnum.Init();
                SewingKit.Init();
                PocketRedChest.Init();
                PocketBlackChest.Init();
                PocketGreenChest.Init();
                PocketBlueChest.Init();
                PocketBrownChest.Init();
                ChestFriend.Init();
                PricklyPear.Init();
                StrangePotion.Init();
                DevilContract.Init();
                Hellfire.Init();
                BloomingHeart.Init();
                RatRound.Init();
                FrozenFrog.Init();
                BabyGoodApiary.Init();
                ImmortalSmoke.Init();
                UFO.Init();
                VoodooHeart.Init();
                GunslingKingRequest.Init();
                HappyLad.Init();
                Fez.Init();
                NecromancerBook.Init();
                PlatinumJunk.Init();
                ToxicArmour.Init();
                Notebook.Init();
                TestJammedBullets.Init();
                BulletKinBullets.Init();
                LichHat.Init();
                Skelebot.Init();
                CosmoStatue.CosmoBuildPrefab();
                LichHat2.Init();
                PickleJar.Init();
                Jawbreaker.Init();
                Rift.Init();
                SaveDisk.Init();
                d20.Init();
                ThirdEye.Init();
                GhostlyBody.Init();
                Butter.Init();
                Cookie.Init();
                JunkChestHandler.TheHooks();
                CarpenterHandbook.Init();
                Ipecac.Init();
                Taurus.Init();
                LifeLemon.Init();
                ArmourGuonStone.Init();
                JammedGunParts.Init();
                CloningVat.Init();
                DevilKey.Init();
                TurtsMelon.Init();
                SpareShell.Init();
                FungalTurtle.Init();
                PBullets.Init();
                OddBullets.Init();
                BloodTether.Init();
                TableTechHolographic.Init();
                NavySealCopypasta.Init();
                RuneChalk.Init();
                //RuneChalk2.Init();

                Synergun.Add();
                JackpotOfGreed.Add();
                NoSpriteFound.Add();
                boneblaster.Add();
                KingGun.Add();
                GungeonGun.Add();
                Glockamole.Add();
                CursedKatana.Add();
                Blox.Add();
                Terragun.Add();
                SpongeGun.Add();
                Horn.Add();
                IHateGuns.Add();
                gamefreeze.Add();
                Bananastaff.Add();
                Blackpistol.Add();
                boomstick.Add();
                SydneySleeper.Add();
                Explodergun.Add();
                Scrapgun.Add();
                tinyshotgun.Add();
                GunResource.Add();
                Scrapper.Add();
                Megaphone.Add();
                MissGun.Add();
                Drawn47.Add();
                PirateShotgunKinGun.Add();
                AnArrowkin.Add();
                Timerase.Add();
                Knife.Add();
                firegun.Add();
                Television.Add();
                //Dupligun.Add();
                //OneShot.Add();
                MoneyDebuffEffect.Init();
                money22DebuffEffect.Init();
                hegemonyDebuffEffect.Init();
                moneydebuff3DebuffEffect.Init();
                DemonBuff.Init();
                CasingBullets.Init();
                UnlockHookInators.Init();
                InkBooklet.Init();
                Doodlelet.Init();
                KoolAidMan.Init();
                ammomimic.Init();
                BulletBishop.Init();
                FlameChamber.Init();
                KillShrine.Init();
                InflamedEye.Init();
                FlameClone.Init();
                Jesterlet.Init();
                Mimekin.Init();
                RoyalJesterlet.Init();
                DrawnKin.Init();
                HoveringGunsAdder.AddHovers();
                CakeGunMods.Init();
                BreachShopTool.AddBaseMetaShopTier(ETGMod.Databases.Items["Cultist Helm"].PickupObjectId, 80, ETGMod.Databases.Items["Rainbowllets"].PickupObjectId, 25, ETGMod.Databases.Items["Reloading Waffle"].PickupObjectId, 75, null);
                GameManager.Instance.SynergyManager.synergies = GameManager.Instance.SynergyManager.synergies.Concat(new AdvancedSynergyEntry[]
                {
                    new SyngergraceThisMod.HatSynergy(),
                    new SyngergraceThisMod.IceSynergy(),
                    new SyngergraceThisMod.RainbowSynergy(),
                    new SyngergraceThisMod.ChaosSynergy(),
                    new SyngergraceThisMod.VoodooSynergy(),
                    //new SyngergraceThisMod.OldSynergy(),
                    new SyngergraceThisMod.LoveSynergy(),
                    new SyngergraceThisMod.SoundSynergy(),
                }).ToArray <AdvancedSynergyEntry>();

                //TinyBullet.Add();
                //OldManBreach.Add();


                //ArtistShrine.Add();
                Chester.Add();
                //LesGo.Add();
                StaticReferences.Init();
                StaticReferences2.Init();
                DungeonHandlerTrueForm.Init();
                ShrineFakePrefabHooks.Init();
                ShrineFactory.Init();
                OldShrineFactory.Init();
                SaveAPIManager.Setup("cak");
                ShrineFactory.PlaceBreachShrines();
                ETGModConsole.Log("King's Items is up and running.");
                SyngergraceThisMod.Synergies();
                SynergyFormInitialiser.AddSynergyForms();
                ModPrefabs.InitCustomPrefabs();

                ModRoomPrefabs.InitCustomRooms();

                FloorNameDungeonFlows.InitDungeonFlows();

                DoodleDungeon.InitCustomDungeon();

                ETGModConsole.Commands.AddUnit("daflow", (args) =>
                {
                    DungeonHandlerTrueForm.debugFlow = !DungeonHandlerTrueForm.debugFlow;
                    string status = DungeonHandlerTrueForm.debugFlow ? "enabled" : "disabled";
                    string color  = DungeonHandlerTrueForm.debugFlow ? "00FF00" : "FF0000";
                    ETGModConsole.Log($"da flow is {status}", false);
                });
                List <string> SpareVFXPaths = new List <string>()
                {
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_001",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_002",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_003",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_004",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_005",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_006",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_007",
                    "CakeMod/Resources/BulletBishop/incense_teleport_poof_008",
                };
                GameObject spareVFX = VFXLibrary.CreateVFX("IncensePoof", SpareVFXPaths, 1, new IntVector2(10, 1), tk2dBaseSprite.Anchor.LowerCenter, true, 0.18f, 0, null);
                EasyVFXDatabase.IncenseVFX = spareVFX;
                List <string> SpareVFXPaths3 = new List <string>()
                {
                    "CakeMod/Resources/FlameChamber/flamepoof_001",
                    "CakeMod/Resources/FlameChamber/flamepoof_002",
                    "CakeMod/Resources/FlameChamber/flamepoof_003",
                    "CakeMod/Resources/FlameChamber/flamepoof_004",
                    "CakeMod/Resources/FlameChamber/flamepoof_005",
                };
                GameObject spareVFX3 = VFXLibrary.CreateVFX("FlamePoof", SpareVFXPaths3, 7, new IntVector2(10, 1), tk2dBaseSprite.Anchor.LowerCenter, true, 0.18f, 0, null);
                EasyVFXDatabase.FlameVFX = spareVFX3;
                List <string> SpareVFXPaths2 = new List <string>()
                {
                    "CakeMod/Resources/BloodyLightning/blood1",
                    "CakeMod/Resources/BloodyLightning/blood2",
                    "CakeMod/Resources/BloodyLightning/blood3",
                    "CakeMod/Resources/BloodyLightning/blood4",
                    "CakeMod/Resources/BloodyLightning/blood5",
                    "CakeMod/Resources/BloodyLightning/blood6",
                    "CakeMod/Resources/BloodyLightning/blood7",
                    "CakeMod/Resources/BloodyLightning/blood8",
                    "CakeMod/Resources/BloodyLightning/blood9",
                    "CakeMod/Resources/BloodyLightning/blood10",
                };
                GameObject spareVFX2 = VFXLibrary.CreateVFX("String", SpareVFXPaths2, 16, new IntVector2(10, 1), tk2dBaseSprite.Anchor.LowerCenter, true, 0.18f, 0, null);
                EasyVFXDatabase.StringVFX = spareVFX2;
                //DoodleDungeon.InitCustomDungeon();
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.ToString(), false);
            }
        }
        private void Update()
        {
            if (m_attachedPlayer != null && !Dungeon.IsGenerating)
            {
                if (m_attachedPlayer.healthHaver.Armor != armourLastChecked)
                {
                    if (!SaveAPIManager.GetFlag(CustomDungeonFlags.PLAYERHELDMORETHANFIVEARMOUR))
                    {
                        int threshHold = 5;
                        if (m_attachedPlayer.characterIdentity == PlayableCharacters.Robot)
                        {
                            threshHold = 11;
                        }
                        if (m_attachedPlayer.healthHaver.Armor >= threshHold)
                        {
                            SaveAPIManager.SetFlag(CustomDungeonFlags.PLAYERHELDMORETHANFIVEARMOUR, true);
                        }
                    }
                    armourLastChecked = (int)m_attachedPlayer.healthHaver.Armor;
                }
                if (m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.Health) != hpStatLastChecked)
                {
                    SaveAPIManager.UpdateMaximum(CustomTrackedMaximums.MAX_HEART_CONTAINERS_EVER, m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.Health));
                    hpStatLastChecked = (int)m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.Health);
                }
                if (m_attachedPlayer.passiveItems.Count != itemCountLastChecked)
                {
                    OnInventoryItemsChanged();
                    itemCountLastChecked = m_attachedPlayer.passiveItems.Count;
                }
                if (m_attachedPlayer.CurrentGun)
                {
                    if (m_attachedPlayer.CurrentGun.PickupObjectId != gunIDLastChecked)
                    {
                        OnCurrentGunChanged();
                    }
                }

                #region InvisibleO
                if (Challenges.CurrentChallenge == ChallengeType.INVISIBLEO && m_attachedPlayer.IsVisible == true)
                {
                    playerIsInvisibleForChallenge = true;
                    m_attachedPlayer.DoDustUps    = false;
                    m_attachedPlayer.IsVisible    = false;
                }
                if (playerIsInvisibleForChallenge && Challenges.CurrentChallenge != ChallengeType.INVISIBLEO && m_attachedPlayer.IsVisible == false)
                {
                    playerIsInvisibleForChallenge = false;
                    m_attachedPlayer.DoDustUps    = true;
                    m_attachedPlayer.IsVisible    = true;
                }
                if (playerIsInvisibleForChallenge && m_attachedPlayer.gameActor.ShadowObject.GetComponent <Renderer>().enabled == true && !playerShadowInvisible)
                {
                    m_attachedPlayer.gameActor.ShadowObject.GetComponent <Renderer>().enabled = false;
                    playerShadowInvisible = true;
                }
                else if (!playerIsInvisibleForChallenge && m_attachedPlayer.gameActor.ShadowObject.GetComponent <Renderer>().enabled == false && playerShadowInvisible)
                {
                    m_attachedPlayer.gameActor.ShadowObject.GetComponent <Renderer>().enabled = true;
                    playerShadowInvisible = false;
                }
                if (Challenges.CurrentChallenge == ChallengeType.INVISIBLEO && m_attachedPlayer.CurrentGun && m_attachedPlayer.CurrentGun.GetComponent <InvisibleGun>() == null)
                {
                    m_attachedPlayer.CurrentGun.gameObject.AddComponent <InvisibleGun>();
                }
                if (Challenges.CurrentChallenge == ChallengeType.INVISIBLEO && m_attachedPlayer.CurrentSecondaryGun && m_attachedPlayer.CurrentSecondaryGun.GetComponent <InvisibleGun>() == null)
                {
                    m_attachedPlayer.CurrentSecondaryGun.gameObject.AddComponent <InvisibleGun>();
                }
                if (playerIsInvisibleForChallenge && m_attachedPlayer.primaryHand.ForceRenderersOff == false)
                {
                    m_attachedPlayer.primaryHand.ForceRenderersOff = true;
                }
                if (playerIsInvisibleForChallenge && m_attachedPlayer.secondaryHand.ForceRenderersOff == false)
                {
                    m_attachedPlayer.secondaryHand.ForceRenderersOff = true;
                }
                if (Challenges.CurrentChallenge == ChallengeType.INVISIBLEO && GameUIRoot.Instance.GetReloadBarForPlayer(m_attachedPlayer))
                {
                    int i = m_attachedPlayer.PlayerIDX;
                    GameUIRoot.Instance.ForceClearReload(i);
                }
                #endregion

                if (Challenges.CurrentChallenge == ChallengeType.KEEP_IT_COOL)
                {
                    DeadlyDeadlyGoopManager goop = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.WaterGoop);
                    goop.TimedAddGoopCircle(m_attachedPlayer.specRigidbody.UnitCenter, 2f, 0.01f, true);
                    DeadlyDeadlyGoopManager.FreezeGoopsCircle(m_attachedPlayer.specRigidbody.UnitBottomCenter, 2);
                    if (!m_attachedPlayer.ownerlessStatModifiers.Contains(keepItCoolSpeedBuff))
                    {
                        m_attachedPlayer.ownerlessStatModifiers.Add(keepItCoolSpeedBuff);
                        m_attachedPlayer.stats.RecalculateStats(m_attachedPlayer);
                    }
                    if (m_attachedPlayer.HasPickupID(256))
                    {
                        m_attachedPlayer.RemovePassiveItem(256);
                        IntVector2 bestRewardLocation2 = m_attachedPlayer.CurrentRoom.GetBestRewardLocation(IntVector2.One * 3, RoomHandler.RewardLocationStyle.PlayerCenter, true);
                        Chest      red_Chest           = GameManager.Instance.RewardManager.A_Chest;
                        red_Chest.IsLocked  = false;
                        red_Chest.ChestType = (UnityEngine.Random.value <= 0.5f ? Chest.GeneralChestType.ITEM : Chest.GeneralChestType.WEAPON);
                        Chest spawnedRed = Chest.Spawn(red_Chest, bestRewardLocation2);
                        spawnedRed.lootTable.lootTable = (UnityEngine.Random.value <= 0.5f ? GameManager.Instance.RewardManager.GunsLootTable : GameManager.Instance.RewardManager.ItemsLootTable);
                        spawnedRed.RegisterChestOnMinimap(spawnedRed.GetAbsoluteParentRoom());
                        TextBubble.DoAmbientTalk(m_attachedPlayer.transform, new Vector3(1, 2, 0), "Nice Try", 4f);
                    }
                }
                else if (m_attachedPlayer.ownerlessStatModifiers.Contains(keepItCoolSpeedBuff))
                {
                    m_attachedPlayer.ownerlessStatModifiers.Remove(keepItCoolSpeedBuff);
                    m_attachedPlayer.stats.RecalculateStats(m_attachedPlayer);
                }
            }
        }
        public override void Start()
        {
            try
            {
                ETGModConsole.Log("Once More Into The Breach started initialising...");

                //Rooms
                ZipFilePath = this.Metadata.Archive;
                FilePath    = this.Metadata.Directory + "/rooms";
                ModName     = this.Metadata.Name;

                //Tools and Toolboxes
                StaticReferences.Init();
                ExoticPlaceables.Init();
                DungeonHandler.Init();
                Tools.Init();
                ShrineFakePrefabHooks.Init();

                ShrineFactory.Init();
                OldShrineFactory.Init();

                FakePrefabHooks.Init();

                ItemBuilder.Init();
                CharApi.Init("nn");
                CustomClipAmmoTypeToolbox.Init();
                EnemyTools.Init();
                NpcApi.Hooks.Init();
                EnemyAPI.Hooks.Init();
                SaveAPIManager.Setup("nn");
                AudioResourceLoader.InitAudio();
                CurseManager.Init();
                ETGModMainBehaviour.Instance.gameObject.AddComponent <GlobalUpdate>();
                ETGModMainBehaviour.Instance.gameObject.AddComponent <CustomDarknessHandler>();
                GameOfLifeHandler.Init();
                //ETGModMainBehaviour.Instance.gameObject.AddComponent<GameOfLifeHandler>();

                //ETGModConsole.Log(Assembly.GetExecutingAssembly().FullName);

                //Challenges
                Challenges.Init();

                //Hooks n Shit
                PlayerToolsSetup.Init();
                EnemyHooks.InitEnemyHooks();
                CompanionisedEnemyUtility.InitHooks();
                MiscUnlockHooks.InitHooks();
                FloorAndGenerationToolbox.Init();
                PedestalHooks.Init();
                ExplosionHooks.Init();
                ChestToolbox.Inithooks();
                UIHooks.Init();
                ComplexProjModBeamCompatibility.Init();
                ReloadBreachShrineHooks.Init();
                metadata = this.Metadata;
                //VFX Setup
                VFXToolbox.InitVFX();
                EasyVFXDatabase.Init(); //Needs to occur before goop definition
                ShadeFlightHookFix.Init();

                //Status Effect Setup
                StaticStatusEffects.InitCustomEffects();
                PlagueStatusEffectSetup.Init();
                Confusion.Init();

                //Goop Setup
                EasyGoopDefinitions.DefineDefaultGoops();
                DoGoopEffectHook.Init();

                //Commands and Other Console Utilities
                Commands.Init();

                //Hats
                HatUtility.NecessarySetup();
                HatDefinitions.Init();

                //Gamemodes
                AllJammedState.Init();
                JammedChests.Init();

                //Exotic Object Shit

                //VFX
                LockdownStatusEffect.Initialise();

                //Testing / Debug Items
                ActiveTestingItem.Init();
                PassiveTestingItem.Init();
                BulletComponentLister.Init();
                ObjectComponentLister.Init();

                //-----------------------------------------------------ITEMS GET INITIALISED
                #region ItemInitialisation
                //Character Starters
                ShadeHand.Init();
                ShadeHeart.Init();
                //Egg Salad and Prima Bean can go here, because they were the first
                EggSalad.Init();
                PrimaBean.Init();
                //Bullet modifiers
                BashingBullets.Init();
                TitanBullets.Init();
                MistakeBullets.Init();
                FiftyCalRounds.Init();
                UnengravedBullets.Init();
                EngravedBullets.Init();
                HardReloadBullets.Init();
                NitroBullets.Init();
                SupersonicShots.Init();
                GlassRounds.Init();
                Junkllets.Init();
                BloodthirstyBullets.Init();
                CleansingRounds.Init();
                HallowedBullets.Init();
                PromethianBullets.Init();
                EpimethianBullets.Init();
                RandoRounds.Init();
                IngressBullets.Init(); //Unfinished
                HematicRounds.Init();
                FullArmourJacket.Init();
                MirrorBullets.Init();
                CrowdedClip.Init();
                BashfulShot.Init();
                OneShot.Init();
                BulletBullets.Init();
                AntimatterBullets.Init();
                SpectreBullets.Init();
                Tabullets.Init();
                TierBullets.Init(); //Unfinished
                BombardierShells.Init();
                GildedLead.Init();
                DemoterBullets.Init();
                Voodoollets.Init();
                TracerRound.Init();
                EndlessBullets.Init();
                HellfireRounds.Init();
                Birdshot.Init();
                Unpredictabullets.Init();
                WarpBullets.Init();
                BulletsWithGuns.Init();
                LaserBullets.Init();
                BalancedBullets.Init();          //Unfinished
                WoodenBullets.Init();
                ComicallyGiganticBullets.Init(); //Excluded
                KnightlyBullets.Init();
                EmptyRounds.Init();
                LongswordShot.Init();
                DrillBullets.Init();
                FoamDarts.Init();
                BatterBullets.Init();
                ElectrumRounds.Init();
                BreachingRounds.Init();
                MagnetItem.Init();
                EargesplittenLoudenboomerRounds.Init();
                TheShell.Init();
                //Status Effect Bullet Mods
                SnailBullets.Init();
                LockdownBullets.Init();
                PestiferousLead.Init();
                Shrinkshot.Init();
                //Volley Modifying Bullet Mods
                Splattershot.Init();
                BackwardsBullets.Init();
                CrossBullets.Init();
                ShadeShot.Init();
                //Insta-Kill Bullet Modifiers
                MinersBullets.Init();
                AntimagicRounds.Init();
                AlkaliBullets.Init();
                ShutdownShells.Init();
                ERRORShells.Init();
                OsteoporosisBullets.Init();
                //NonBullet Stat Changers
                MicroAIContact.Init();
                LuckyCoin.Init();
                IronSights.Init();
                Lewis.Init();
                MysticOil.Init();
                VenusianBars.Init();
                NumberOneBossMug.Init();
                LibramOfTheChambers.Init();
                OrganDonorCard.Init();
                GlassGod.Init();
                ChaosRuby.Init();
                BlobulonRage.Init();
                OverpricedHeadband.Init();
                GunslingerEmblem.Init();
                MobiusClip.Init();
                ClipOnAmmoPouch.Init();
                JawsOfDefeat.Init();
                //Armour
                ArmourBandage.Init();
                GoldenArmour.Init();
                ExoskeletalArmour.Init();
                PowerArmour.Init();
                ArmouredArmour.Init();
                //Consumable Givers
                LooseChange.Init();
                SpaceMetal.Init();
                //Blank Themed Items
                TrueBlank.Init();
                FalseBlank.Init();
                SpareBlank.Init();
                OpulentBlank.Init();
                GrimBlanks.Init();
                NNBlankPersonality.Init();
                Blombk.Init();
                Blankh.Init();
                //Key Themed Items
                BlankKey.Init();
                SharpKey.Init();
                SpareKey.Init();
                KeyChain.Init();
                KeyBullwark.Init();
                KeyBulletEffigy.Init();
                FrostKey.Init();
                ShadowKey.Init();
                Keygen.Init();
                CursedTumbler.Init();
                //Ammo Box Themed Items
                TheShellactery.Init();
                BloodyAmmo.Init();
                MengerAmmoBox.Init();
                AmmoTrap.Init();
                //Boxes and Stuff
                BloodyBox.Init();
                MaidenShapedBox.Init();
                Toolbox.Init();
                PocketChest.Init();
                DeliveryBox.Init();
                Wonderchest.Init();
                //Heart themed items
                HeartPadlock.Init();
                Mutagen.Init();
                ForsakenHeart.Init();
                HeartOfGold.Init();
                GooeyHeart.Init();
                ExaltedHeart.Init();
                CheeseHeart.Init();
                TinHeart.Init();
                //Chambers
                BarrelChamber.Init();
                GlassChamber.Init();
                FlameChamber.Init();
                Recyclinder.Init();
                Nitroglycylinder.Init();
                SpringloadedChamber.Init();
                WitheringChamber.Init();
                HeavyChamber.Init();
                CyclopeanChamber.Init();
                //Table Techs
                TableTechTable.Init();
                TableTechSpeed.Init();
                TableTechInvulnerability.Init();
                TableTechAmmo.Init();
                TableTechGuon.Init();
                TableTechNology.Init();
                UnsTableTech.Init();
                //Guon Stones
                WoodGuonStone.Init();
                YellowGuonStone.Init();
                GreyGuonStone.Init();
                GoldGuonStone.Init();
                BrownGuonStone.Init();
                CyanGuonStone.Init();
                IndigoGuonStone.Init();
                SilverGuonStone.Init();
                MaroonGuonStone.Init();
                UltraVioletGuonStone.Init();
                InfraredGuonStone.Init();
                RainbowGuonStone.Init();
                KaleidoscopicGuonStone.Init();
                GuonBoulder.Init();
                BloodglassGuonStone.Init();
                //Ammolets
                GlassAmmolet.Init();
                WickerAmmolet.Init();
                FuriousAmmolet.Init();
                SilverAmmolet.Init();
                IvoryAmmolet.Init();
                KinAmmolet.Init();
                Autollet.Init();
                Keymmolet.Init();
                Ammolock.Init();
                HepatizonAmmolet.Init();
                BronzeAmmolet.Init();
                PearlAmmolet.Init();
                NeutroniumAmmolet.Init();
                Shatterblank.Init();
                // Boots
                CycloneCylinder.Init();
                BootLeg.Init();
                BlankBoots.Init();
                BulletBoots.Init();
                //Bracelets and Jewelry
                DiamondBracelet.Init();
                PearlBracelet.Init();
                PanicPendant.Init();
                GunknightAmulet.Init();
                AmuletOfShelltan.Init();
                //Rings
                RingOfOddlySpecificBenefits.Init();
                FowlRing.Init();
                RingOfAmmoRedemption.Init();
                RiskyRing.Init();
                WidowsRing.Init();
                ShadowRing.Init();
                RingOfInvisibility.Init();
                //Holsters
                BlackHolster.Init();
                TheBeholster.Init();
                HiveHolster.Init();
                ShoulderHolster.Init();
                ArtilleryBelt.Init();
                BulletShuffle.Init();
                //Companions
                MolotovBuddy.Init();
                BabyGoodChanceKin.Init();
                Potty.Init();
                Peanut.Init();
                DarkPrince.Init();
                Diode.Init();
                DroneCompanion.Init();
                GregTheEgg.Init();
                FunGuy.Init();
                BabyGoodDet.Init();
                AngrySpirit.Init();
                Gusty.Init();
                ScrollOfExactKnowledge.Init();
                LilMunchy.Init();
                //Potions / Jars
                SpeedPotion.Init();
                LovePotion.Init();
                HoneyPot.Init();
                ChemicalBurn.Init();
                WitchsBrew.Init();
                Nigredo.Init();
                Albedo.Init();
                Citrinitas.Init();
                Rubedo.Init();
                HoleyWater.Init();
                //Remotes
                ReinforcementRadio.Init();
                //Medicine
                BloodThinner.Init();
                BoosterShot.Init();
                ShotInTheArm.Init();
                //Knives and Blades
                DaggerOfTheAimgel.Init();
                CombatKnife.Init();
                Bayonet.Init();
                //Books
                BookOfMimicAnatomy.Init();
                KalibersPrayer.Init();
                GunidaeSolvitHaatelis.Init();
                //Maps
                MapFragment.Init();
                TatteredMap.Init();
                //Clothing
                CloakOfDarkness.Init();
                TimeFuddlersRobe.Init();
                //Eyes
                CartographersEye.Init();
                BloodshotEye.Init();
                ShadesEye.Init();
                KalibersEye.Init();
                //Hands
                Lefthandedness.Init();
                NecromancersRightHand.Init();
                //Bombs
                InfantryGrenade.Init();
                DiceGrenade.Init();
                //True Misc
                Lvl2Molotov.Init();
                GoldenAppleCore.Init();
                AppleCore.Init();
                AppleActive.Init();
                LibationtoIcosahedrax.Init(); //Unfinished
                BagOfHolding.Init();
                ItemCoupon.Init();
                IdentityCrisis.Init();
                LiquidMetalBody.Init();
                GunGrease.Init();
                BomberJacket.Init();
                DragunsScale.Init();
                GTCWTVRP.Init();
                BlightShell.Init();
                BulletKinPlushie.Init();
                Kevin.Init();
                PurpleProse.Init();
                RustyCasing.Init();
                HikingPack.Init();
                GunpowderPheromones.Init();
                GunsmokePerfume.Init();
                Pestilence.Init();
                ElevatorButton.Init();
                Bullut.Init();
                GSwitch.Init();
                FaultyHoverboots.Init(); //Unfinished
                AcidAura.Init();
                HornedHelmet.Init();
                RocketMan.Init();
                Roulette.Init(); //Unfinished
                FinishedBullet.Init();
                ChanceKinEffigy.Init();
                MagickeCauldron.Init();
                Bombinomicon.Init();
                ClaySculpture.Init();
                GracefulGoop.Init();
                MrFahrenheit.Init();
                MagicQuiver.Init();
                FocalLenses.Init();
                MagicMissile.Init();
                AmberDie.Init();
                ObsidianPistol.Init();
                Showdown.Init();
                LootEngineItem.Init();
                Ammolite.Init();
                PortableHole.Init();
                CardinalsMitre.Init();
                GunjurersBelt.Init();
                GoomperorsCrown.Init();
                ChemGrenade.Init();
                EightButton.Init();
                TitaniumClip.Init();
                PaperBadge.Init();
                Permafrost.Init();
                GlassShard.Init();
                EqualityItem.Init();
                BitBucket.Init();
                Eraser.Init();
                TackShooter.Init();
                Moonrock.Init();
                Telekinesis.Init();
                TabletOfOrder.Init();
                LeadSoul.Init();
                LeadOfLife.Init();
                AWholeBulletKin.Init();
                #endregion

                //-----------------------------------------------------GUNS GET INITIALISED
                #region GunInitialisation
                //UNFINISHED / TEST GUNS
                WailingMagnum.Add();
                Defender.Add();
                TestGun.Add();
                Gunycomb.Add();
                GlobbitSMALL.Add();
                GlobbitMED.Add();
                GlobbitMEGA.Add();


                //GUNS

                //CHARACTERSTARTERS
                ElderMagnum.Add();

                //REVOLVERS
                FlayedRevolver.Add();
                G20.Add();
                MamaGun.Add();
                LovePistol.Add();
                DiscGun.Add();
                Repeatovolver.Add();
                Pista.Add();
                NNGundertale.Add();
                DiamondGun.Add();
                NNMinigun.Add();
                ShroomedGun.Add();
                GoldenRevolver.Add();
                Nocturne.Add();
                BackWarder.Add();
                Redhawk.Add();
                ToolGun.Add();
                //GENERAL HANDGUNS
                StickGun.Add();
                Glock42.Add();
                StarterPistol.Add();
                PopGun.Add();
                UnusCentum.Add();
                StunGun.Add();
                CopperSidearm.Add();
                Rekeyter.Add();
                HotGlueGun.Add();
                UpNUp.Add();
                RedRobin.Add();
                VariableGun.Add();
                CrescendoBlaster.Add();
                Glasster.Add();
                HandGun.Add();
                Viper.Add();
                DiamondCutter.Add();
                MarchGun.Add();
                RebarGun.Add();
                MinuteGun.Add();
                Ulfberht.Add();
                HeadOfTheOrder.Add();
                GunOfAThousandSins.Add();
                DoubleGun.Add();
                //SHOTGUNS
                JusticeGun.Add();
                Orgun.Add();
                Octagun.Add();
                ClownShotgun.Add();
                Ranger.Add();
                RustyShotgun.Add();
                TheBride.Add();
                TheGroom.Add();
                IrregularShotgun.Add();
                GrenadeShotgun.Add();
                Jackhammer.Add();
                SaltGun.Add();
                SoapGun.Add();
                //CANNONS
                Felissile.Add();
                HandCannon.Add();
                Lantaka.Add();
                GreekFire.Add();
                EmberCannon.Add();
                ElysiumCannon.Add();
                DisplacerCannon.Add();
                //SCI-FI GUNS
                Blasmaster.Add();
                St4ke.Add();
                RedBlaster.Add();
                BeamBlade.Add();
                Neutrino.Add();
                Rico.Add();
                TheThinLine.Add();
                RocketPistol.Add();
                Repetitron.Add();
                Dimensionaliser.Add();
                Purpler.Add();
                VacuumGun.Add();
                Oxygun.Add();
                TriBeam.Add();
                KineticBlaster.Add();
                LaserWelder.Add();
                QBeam.Add();
                HighVelocityRifle.Add();
                Demolitionist.Add();
                PumpChargeShotgun.Add();
                TheOutbreak.Add();
                Multiplicator.Add();
                PunishmentRay.Add();
                YBeam.Add();
                WallRay.Add();
                BolaGun.Add();
                AlphaBeam.Add();
                Glazerbeam.Add();
                StasisRifle.Add();
                Gravitron.Add();
                Ferrobolt.Add();
                TauCannon.Add();
                GravityGun.Add();
                GalaxyCrusher.Add();
                //ARC Weapons
                ARCPistol.Add();
                ARCShotgun.Add();
                ARCRifle.Add();
                ARCTactical.Add();
                ARCCannon.Add();
                //BOWS AND CROSSBOWS
                IceBow.Add();
                Boltcaster.Add();
                Clicker.Add();
                //ANTIQUES
                WheelLock.Add();
                Welrod.Add();
                Welgun.Add();
                TheLodger.Add();
                Gonne.Add();
                Hwacha.Add();
                FireLance.Add();
                HandMortar.Add();
                GrandfatherGlock.Add();
                GatlingGun.Add();
                Blowgun.Add();
                Gaxe.Add();
                WoodenHorse.Add();
                AgarGun.Add();
                //KNIVES AND BLADES
                Carnwennan.Add();
                MantidAugment.Add();
                //REALISTIC GUNS
                HeatRay.Add();
                BarcodeScanner.Add();
                AntimaterielRifle.Add();
                Primos1.Add();
                DartRifle.Add();
                AM0.Add();
                RiskRifle.Add();
                RiotGun.Add();
                Kalashnirang.Add();
                MaidenRifle.Add();
                Blizzkrieg.Add();
                Copygat.Add();
                Skorpion.Add();
                HeavyAssaultRifle.Add();
                DynamiteLauncher.Add();
                MarbledUzi.Add();
                BurstRifle.Add();
                OlReliable.Add();
                //MISSILE LAUNCHERS
                BottleRocket.Add();
                NNBazooka.Add();
                BoomBeam.Add();
                Pillarocket.Add();
                //ANIMAL / ORGANIC GUNS
                SporeLauncher.Add();
                PoisonDartFrog.Add();
                Corgun.Add();
                FungoCannon.Add();
                PhaserSpiderling.Add();
                Guneonate.Add();
                KillithidTendril.Add();
                Gunger.Add();
                SickWorm.Add();
                MiniMonger.Add();
                CarrionFormeTwo.Add();
                CarrionFormeThree.Add();
                Carrion.Add();
                UterinePolyp.Add();
                Wrinkler.Add();
                //BLADES
                ButchersKnife.Add();
                RapidRiposte.Add();
                //FUN GUNS
                Gumgun.Add();
                Glooper.Add();
                Accelerator.Add();
                PaintballGun.Add();
                Converter.Add();
                Spiral.Add();
                Gunshark.Add();
                FingerGuns.Add();
                OBrienFist.Add();
                GolfRifle.Add();
                Pandephonium.Add();
                Sweeper.Add();
                DeskFan.Add();
                Pencil.Add();
                SquarePeg.Add();
                Ringer.Add();
                Snaker.Add();
                GayK47.Add();
                DecretionCarbine.Add();
                RC360.Add();
                UziSpineMM.Add();
                Autogun.Add();
                Rebondir.Add();
                BigShot.Add();
                W3irdstar.Add();
                Seismograph.Add();
                BioTranstater2100.Add();
                //MAGICAL GUNS
                Icicle.Add();
                GunjurersStaff.Add();
                InitiateWand.Add();
                LightningRod.Add();
                OrbOfTheGun.Add();
                SpearOfJustice.Add();
                Protean.Add();
                BulletBlade.Add();
                Bookllet.Add();
                Lorebook.Add();
                Beastclaw.Add();
                Bullatterer.Add();
                Entropew.Add();
                Missinguno.Add();
                Paraglocks.Add();
                //CONSUMABLE FIRING GUNS
                Creditor.Add();
                Blankannon.Add();
                Viscerifle.Add();
                //ENDPAGE GUNS
                MastersGun.Add();
                Wrench.Add();
                Pumhart.Add();


                //SYNERGY FORME GUNS
                GunsharkMegasharkSynergyForme.Add();
                DiscGunSuperDiscForme.Add();
                OrgunHeadacheSynergyForme.Add();
                Wolfgun.Add();
                MinigunMiniShotgunSynergyForme.Add();
                PenPencilSynergy.Add();
                ReShelletonKeyter.Add();
                AM0SpreadForme.Add();
                BulletBladeGhostForme.Add();
                GlueGunGlueGunnerSynergy.Add();
                KingBullatterer.Add();
                WrenchNullRefException.Add();
                GatlingGunGatterUp.Add();
                GravityGunNegativeMatterForm.Add();
                GonneElder.Add();
                UterinePolypWombular.Add();
                DiamondGaxe.Add();
                RedRebondir.Add();
                DiamondCutterRangerClass.Add();
                StickGunQuickDraw.Add();
                StormRod.Add();
                UnrustyShotgun.Add();
                #endregion


                //-----------------------------------------------------SHRINES GET INITIALISED
                #region ShrineInitialisation
                InvestmentShrine.Add();
                RelodinShrine.Add();
                DagunShrine.Add();
                ArtemissileShrine.Add();
                ExecutionerShrine.Add();
                TurtleShrine.Add();
                KliklokShrine.Add();
                #endregion

                //-----------------------------------------------------NPCS GET INITIALISED
                #region NPCInitialisation
                Rusty.Init();
                Ironside.Init();
                Boomhildr.Init();
                #endregion

                ChromaGun.Add();

                //GOOD MIMIC (NEEDS TO BE INITIALISED LATER)
                GoodMimic.Add();

                //Characters
                var data = Loader.BuildCharacter("NevernamedsItems/Characters/Shade",
                                                 CustomPlayableCharacters.Shade,
                                                 new Vector3(12.3f, 21.3f),
                                                 false,
                                                 new Vector3(13.1f, 19.1f),
                                                 false,
                                                 false,
                                                 true,
                                                 true,  //Sprites used by paradox
                                                 false, //Glows
                                                 null,  //Glow Mat
                                                 null,  //Alt Skin Glow Mat
                                                 0,     //Hegemony Cost
                                                 false, //HasPast
                                                 "");   //Past ID String

                //Other Features
                MasteryReplacementOub.InitDungeonHook();
                CadenceAndOxShopPoolAdditions.Init();
                CustomHuntingQuest.Init();

                //NPCS
                TheJammomaster.Add();
                //Carto.Add();
                ShrineFactory.PlaceBreachShrines();

                //Synergy Setup, Synergy Formes, Dual Wielding, and any changes to Basegame Guns
                InitialiseSynergies.DoInitialisation();
                SynergyFormInitialiser.AddSynergyForms();
                ExistantGunModifiers.Init();

                ChamberGunAPI.Init("OnceMoreIntoTheBreach");

                //Late Hooks
                AmmoPickupHooks.Init();
                HealthPickupHooks.Init();

                ETGModConsole.Commands.AddUnit("nndebugflow", (args) => { DungeonHandler.debugFlow = !DungeonHandler.debugFlow; string status = DungeonHandler.debugFlow ? "enabled" : "disabled"; string color = DungeonHandler.debugFlow ? "00FF00" : "FF0000"; ETGModConsole.Log($"OMITB flow {status}", false); });

                //PoopySchloopy

                /* Dungeon keepDungeon = DungeonDatabase.GetOrLoadByName("base_jungle");
                 * if (keepDungeon == null) ETGModConsole.Log("Jungle null!");
                 * if (keepDungeon && keepDungeon.PatternSettings != null)
                 * {
                 *   if (keepDungeon.PatternSettings.flows != null && keepDungeon.PatternSettings.flows.Count > 0)
                 *   {
                 *       if (keepDungeon.PatternSettings.flows[0].fallbackRoomTable)
                 *       {
                 *           if (keepDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms != null)
                 *           {
                 *               if (keepDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms.elements != null)
                 *               {
                 *                   foreach (WeightedRoom wRoom in keepDungeon.PatternSettings.flows[0].fallbackRoomTable.includedRooms.elements)
                 *                   {
                 *
                 *                       if (wRoom.room != null && !string.IsNullOrEmpty(wRoom.room.name))
                 *                       {
                 *                           ETGModConsole.Log(wRoom.room.name);
                 *                       }
                 *                   }
                 *               }
                 *               else ETGModConsole.Log("No elements");
                 *           }
                 *           else ETGModConsole.Log("No included rooms");
                 *       }
                 *       else ETGModConsole.Log("No fallback room table");
                 *   }
                 *   else ETGModConsole.Log("Flow was null or empty");
                 * }
                 * else ETGModConsole.Log("Pattern settings null");
                 * keepDungeon = null;*/

                ETGMod.StartGlobalCoroutine(this.delayedstarthandler());
                ETGModConsole.Log("'If you're reading this, I must have done something right' - NN");
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.Message);
                ETGModConsole.Log(e.StackTrace);
            }
        }
 public static bool RustySteal(PlayerController player, PickupObject item, int idfk)
 {
     SaveAPIManager.RegisterStatChange(CustomTrackedStats.RUSTY_ITEMS_STOLEN, 1);
     return false;
 }