private static void SetBoolOverride(string boolName, bool value)
        {
            if (boolName.StartsWith("ItemChanger."))
            {
                if (value)
                {
                    string id = boolName.Split('.').Last();
                    GiveItemActions.GiveItem(_ILP.ILPs[id]);
                }
                return;
            }

            PlayerData.instance.SetBoolInternal(boolName, value);
            switch (boolName)
            {
            case nameof(PlayerData.hasAcidArmour) when value:
                PlayMakerFSM.BroadcastEvent("GET ACID ARMOUR");
                break;

            case nameof(PlayerData.hasDreamGate) when value:
                FSMUtility.LocateFSM(HeroController.instance.gameObject, "Dream Nail").FsmVariables
                .GetFsmBool("Dream Warp Allowed").Value = true;
                break;

            case nameof(PlayerData.hasCyclone) when value:
            case nameof(PlayerData.hasDashSlash) when value:
            case nameof(PlayerData.hasUpwardSlash) when value:
                PlayerData.instance.SetBoolInternal(nameof(PlayerData.hasNailArt), true);
                if (PlayerData.instance.hasCyclone && PlayerData.instance.hasDashSlash && PlayerData.instance.hasUpwardSlash)
                {
                    PlayerData.instance.SetBoolInternal(nameof(PlayerData.hasAllNailArts), true);
                }
                break;
            }
        }
Example #2
0
        private IEnumerator configureHero()
        {
            while (HeroController.instance == null)
            {
                yield return(new WaitForEndOfFrame());
            }

            if (sharpShadow != null && sharpShadow.CompareTag("Sharp Shadow"))
            {
                yield break;
            }


            foreach (GameObject go in Resources.FindObjectsOfTypeAll <GameObject>())
            {
                if (go == null || !go.CompareTag("Sharp Shadow"))
                {
                    continue;
                }

                sharpShadow    = go;
                sharpShadowFSM = FSMUtility.LocateFSM(sharpShadow, "damages_enemy");
                log($@"Found Sharp Shadow: {sharpShadow} - {sharpShadowFSM}.");
            }

            completedCoroutines = true;
            log("Completed needed coroutines. Your game is loaded.");
            //HeroController.instance.gameObject.AddComponent<SuperDashHandler>();
        }
Example #3
0
        public void Spawn()
        {
            if (shiny == null)
            {
                if (id == 0)
                {
                    shiny = Instantiate(BossRush.shinySlot1);
                }
                if (id == 1)
                {
                    shiny = Instantiate(BossRush.shinySlot2);
                }
                if (id == 2)
                {
                    shiny = Instantiate(BossRush.shinySlot3);
                }
            }
            if (position.x < -900)
            {
                shiny.transform.position = new Vector2((BossRush.hc.transform.position.x + (id == 1 ? -2.75f : 0) + (id == 2 ? 2.75f : 0)), BossRush.hc.transform.position.y);
            }
            else
            {
                shiny.transform.position = position;
            }
            PlayMakerFSM shinyFSM = FSMUtility.LocateFSM(shiny, "Shiny Control");

            shinyFSM.FsmVariables.GetFsmInt("Trinket Num").Value = id + 1;
            FsmUtil.ChangeTransition(shinyFSM, "PD Bool?", "COLLECTED", "Fling?");

            shiny.name = "ITEM_" + id;
        }
Example #4
0
        private void HandleSceneChanges(Scene from, Scene to)
        {
            if (!IsRando)
            {
                return;
            }

            //DebugLog.Log( "New Scene: " + to.name );
            if (to.name == "Town")
            {
                PlayMakerFSM elder  = FSMUtility.LocateFSM(GameObject.Find("Elderbug"), "npc_control");
                FsmState     target = null;
                foreach (FsmState state in elder.FsmStates)
                {
                    if (state.Name == "Convo End")
                    {
                        target = state;
                        break;
                    }
                }

                if (target != null)
                {
                    List <FsmStateAction> actions = target.Actions.ToList();
                    actions.Add(new ElderbugIsACoolDude());
                    target.Actions = actions.ToArray();
                }
            }
            //throw new NotImplementedException();
        }
Example #5
0
        public override void Process(string scene, Object changeObj)
        {
            if (scene != _sceneName)
            {
                return;
            }

            // Put a shiny in the same location as the original
            GameObject shiny = ObjectCache.ShinyItem;

            shiny.name = _newShinyName;

            shiny.transform.position = new Vector3(_x, _y, shiny.transform.position.z);
            shiny.SetActive(true);

            // Force the new shiny to fall straight downwards
            PlayMakerFSM fsm   = FSMUtility.LocateFSM(shiny, "Shiny Control");
            FsmState     fling = fsm.GetState("Fling?");

            fling.ClearTransitions();
            fling.AddTransition("FINISHED", "Fling R");
            FlingObject flingObj = fsm.GetState("Fling R").GetActionsOfType <FlingObject>()[0];

            flingObj.angleMin = flingObj.angleMax = 270;

            // For some reason not setting speed manually messes with the object position
            flingObj.speedMin = flingObj.speedMax = 0.1f;
        }
Example #6
0
        public static void SetSoul(GameObject totem, string item, string location, SoulTotemSubtype intendedSubtype)
        {
            int hitCount = HitCount[intendedSubtype];

            var fsm  = FSMUtility.LocateFSM(totem, "soul_totem");
            var init = fsm.GetState("Init");
            var hit  = fsm.GetState("Hit");

            if (hitCount == -1)
            {
                // PoP totems, or fake PoP totems, should be infinite
                init.RemoveTransitionsTo("Mesh Renderer Off");
                hit.RemoveTransitionsTo("Depleted");
                hit.RemoveActionsOfType <IntCompare>();
            }
            else
            {
                // Normal totems can use the PersistentIntItem component to store hits remaining etc
                PersistentIntData pid = totem.GetComponent <PersistentIntItem>().persistentIntData;
                pid.id        = totem.name;
                pid.sceneName = totem.scene.name;

                fsm.FsmVariables.GetFsmInt("Value").Value = hitCount;
                fsm.GetState("Reset?").GetActionOfType <SetIntValue>().intValue.Value = hitCount;
                fsm.GetState("Reset").GetActionOfType <SetIntValue>().intValue.Value  = hitCount;
            }

            hit.AddAction(new RandomizerExecuteLambda(() =>
            {
                if (!RandomizerMod.Instance.Settings.CheckLocationFound(location))
                {
                    GiveItem(GiveAction.None, item, location);
                }
            }));
        }
Example #7
0
        void BoopOnHit(Collider2D otherCollider, GameObject gameObject)
        {
            if (hero == null || hero != HeroController.instance)
            {
                ContractorManager.Instance.StartCoroutine(CheckAndInit());
            }

            if (otherCollider.gameObject == null)
            {
                return;
            }
#if LEGACY_VERSION_1221
            bool isEnemy = FSMUtility.LocateFSM(otherCollider.gameObject, "health_manager_enemy") != null || FSMUtility.LocateFSM(otherCollider.gameObject, "health_manager") != null;     //for 1221
#else
            bool isEnemy = otherCollider.gameObject.IsGameEnemy();
#endif
            if (!isEnemy)
            {
                if (boopClip != null)
                {
                    if (!highBoop.isPlaying)
                    {
                        highBoop.Play();
                    }
                }
            }
            else
            {
                if (boopClip != null)
                {
                    Dev.Log("playing boop! " + gameObject.name);
                    hero.GetComponent <AudioSource>().PlayOneShot(boopClip);
                }
            }
        }
        public static void FixBottleFSM(GameObject jar, string item, string location, bool unrandomized)
        {
            PersistentBoolData pbd = jar.GetComponent <PersistentBoolItem>().persistentBoolData;

            pbd.id        = location;
            pbd.sceneName = jar.scene.name;

            PlayMakerFSM fsm = FSMUtility.LocateFSM(jar, "Bottle Control");

            // It's easiest to simply use the sceneData check to decide whether to destroy the bottle
            // FsmState init = fsm.GetState("Init");
            // init.RemoveActionsOfType<BoolTest>();
            // init.AddFirstAction(new RandomizerExecuteLambda(() => fsm.SendEvent(RandomizerMod.Instance.Settings.CheckLocationFound(location) ? "ACTIVATE" : null)));

            // The bottle FSM already takes care of granting the grub and playing happy grub noises
            // We have to add the GiveItem action before incrementing the grub count so the RecentItems
            // correctly notes the grub index
            if (!unrandomized)
            {
                fsm.GetState("Shatter").AddFirstAction(new RandomizerExecuteLambda(() => GiveItem(GiveAction.None, item, location)));
            }

            // It seems pointless to mark this scene as having been cleared of grub jars
            fsm.GetState("Set Map?").ClearTransitions();
        }
        private static void OpenYNDialogue(GameObject shiny, string itemName, int cost, int type)
        {
            FSMUtility.LocateFSM(GameObject.Find("DialogueManager"), "Box Open YN").SendEvent("BOX UP YN");
            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmGameObject("Requester").Value = shiny;

            if (type == TYPE_ESSENCE)
            {
                LanguageStringManager.SetString("UI", "RANDOMIZER_YN_DIALOGUE",
                                                cost + " Essence: " + LanguageStringManager.GetLanguageString(itemName, "UI"));

                if (Ref.PD.dreamOrbs < cost)
                {
                    FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control")
                    .StartCoroutine(KillGeoText());
                }

                cost = 0;
            }
            else
            {
                LanguageStringManager.SetString("UI", "RANDOMIZER_YN_DIALOGUE",
                                                LanguageStringManager.GetLanguageString(itemName, "UI"));
            }

            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmInt("Toll Cost").Value = cost;

            GameObject.Find("Text YN").GetComponent <DialogueBox>().StartConversation("RANDOMIZER_YN_DIALOGUE", "UI");
        }
Example #10
0
        private static void EnemyDescendants(Transform transform)
        {
            List <Transform> list = new List <Transform>();

            foreach (object obj in transform)
            {
                Transform transform2 = (Transform)obj;
                if ((transform2.gameObject.layer == 11 || transform2.gameObject.layer == 17) && !enemyPool.Any(ed => ed.gameObject == transform2.gameObject) && !Ignore(transform2.gameObject.name))
                {
                    PlayMakerFSM playMakerFSM = FSMUtility.LocateFSM(transform2.gameObject, "health_manager_enemy");
                    if (playMakerFSM == null)
                    {
                        playMakerFSM = FSMUtility.LocateFSM(GUIController.Instance.gameObject, "health_manager");
                    }
                    Component component = transform2.gameObject.GetComponent <tk2dSprite>();
                    if (playMakerFSM)
                    {
                        if (component == null)
                        {
                            component = null;
                        }
                        int value = playMakerFSM.FsmVariables.GetFsmInt("HP").Value;
                        enemyPool.Add(new EnemyData(value, playMakerFSM, component, parent, transform2.gameObject));
                    }
                }
                list.Add(transform2);
            }
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].childCount > 0)
                {
                    foreach (object obj2 in list[i])
                    {
                        Transform transform3 = (Transform)obj2;
                        if ((transform3.gameObject.layer == 11 || transform3.gameObject.layer == 17) && !enemyPool.Any(ed => ed.gameObject == transform3.gameObject) && !Ignore(transform3.gameObject.name))
                        {
                            PlayMakerFSM playMakerFSM2 = FSMUtility.LocateFSM(transform3.gameObject, "health_manager_enemy");
                            if (playMakerFSM2 == null)
                            {
                                playMakerFSM2 = FSMUtility.LocateFSM(GUIController.Instance.gameObject, "health_manager");
                            }
                            Component component2 = transform3.gameObject.GetComponent <tk2dSprite>();
                            if (playMakerFSM2)
                            {
                                if (component2 == null)
                                {
                                    component2 = null;
                                }
                                int value2 = playMakerFSM2.FsmVariables.GetFsmInt("HP").Value;
                                enemyPool.Add(new EnemyData(value2, playMakerFSM2, component2, parent, transform3.gameObject));
                            }
                        }
                        list.Add(transform3);
                    }
                }
            }
        }
        public override void Process(string scene, Object changeObj)
        {
            if (scene != _sceneName)
            {
                return;
            }

            GameObject shiny = ObjectCache.ShinyItem;

            shiny.name = _newShinyName;

            if (_activeCheck.Invoke())
            {
                // Simply create the shiny to be active, as in CreateNewShiny

                shiny.transform.position = new Vector3(_x, _y, shiny.transform.position.z);

                shiny.SetActive(true);

                // Force the new shiny to fall straight downwards
                PlayMakerFSM fsm   = FSMUtility.LocateFSM(shiny, "Shiny Control");
                FsmState     fling = fsm.GetState("Fling?");
                fling.ClearTransitions();
                fling.AddTransition("FINISHED", "Fling R");
                FlingObject flingObj = fsm.GetState("Fling R").GetActionsOfType <FlingObject>()[0];
                flingObj.angleMin = flingObj.angleMax = 270;

                // For some reason not setting speed manually messes with the object position
                flingObj.speedMin = flingObj.speedMax = 0.1f;
            }
            else
            {
                // Inactive shiny needs a parent so we can find it later, so create a dummy object if necessary

                string parentName = string.IsNullOrEmpty(_parent) ? _newShinyName + " Parent" : _parent;

                if (GameObject.Find(parentName) is GameObject go)
                {
                    shiny.transform.SetParent(go.transform);
                    shiny.transform.localPosition = new Vector3(0, 0, shiny.transform.position.z);
                }
                else
                {
                    GameObject go2 = new GameObject()
                    {
                        name = parentName
                    };
                    go2.SetActive(true);
                    shiny.transform.SetParent(go2.transform);

                    shiny.SetActive(false);
                }
            }
        }
Example #12
0
        public static void FixBottleFSM(GameObject jar, string item, string location)
        {
            var fsm  = FSMUtility.LocateFSM(jar, "Bottle Control");
            var init = fsm.GetState("Init");

            init.RemoveActionsOfType <BoolTest>();
            init.AddFirstAction(new RandomizerExecuteLambda(() => fsm.SendEvent(RandomizerMod.Instance.Settings.CheckLocationFound(location) ? "ACTIVATE" : null)));
            // The bottle FSM already takes care of granting the grub and playing happy grub noises
            // We have to add the GiveItem action before incrementing the grub count so the RecentItems
            // correctly notes the grub index
            fsm.GetState("Shatter").AddFirstAction(new RandomizerExecuteLambda(() => GiveItem(GiveAction.None, item, location)));
        }
Example #13
0
        public override void OnEnter()
        {
            GameManager gm = Ref.GM;

            if (gm == null)
            {
                Finish();
                return;
            }

            PlayerData pd = gm.playerData;

            if (pd == null)
            {
                Finish();
                return;
            }

            GameObject spawnPoint = GameObject.FindGameObjectWithTag("RespawnPoint");

            if (spawnPoint == null)
            {
                LogWarn(
                    "RandomizerSetHardSave action present in scene with no respawn points: " +
                    Ref.GM.GetSceneNameString());
                Finish();
                return;
            }

            PlayMakerFSM  bench  = FSMUtility.LocateFSM(spawnPoint, "Bench Control");
            RespawnMarker marker = spawnPoint.GetComponent <RespawnMarker>();

            if (bench != null)
            {
                pd.SetBenchRespawn(spawnPoint.name, gm.GetSceneNameString(), 1, true);
            }
            else if (marker != null)
            {
                pd.SetBenchRespawn(marker, gm.GetSceneNameString(), 2);
            }
            else
            {
                LogWarn(
                    "RandomizerSetHardSave could not identify type of RespawnPoint object in scene " +
                    Ref.GM.GetSceneNameString());
                Finish();
                return;
            }

            gm.SaveGame();
            Finish();
        }
        public override void Process(string scene, Object changeObj)
        {
            if (scene != _sceneName)
            {
                return;
            }

            Scene currentScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();

            string[]   objectHierarchy = _objectName.Split('\\');
            int        i   = 1;
            GameObject obj = currentScene.FindGameObject(objectHierarchy[0]);

            while (i < objectHierarchy.Length)
            {
                obj = obj.FindGameObjectInChildren(objectHierarchy[i++]);
            }

            if (obj == null)
            {
                return;
            }

            // Put a shiny in the same location as the original
            GameObject shiny = ObjectCache.ShinyItem;

            shiny.name = _newShinyName;
            if (obj.transform.parent != null)
            {
                shiny.transform.SetParent(obj.transform.parent);
            }

            shiny.transform.position      = obj.transform.position;
            shiny.transform.localPosition = obj.transform.localPosition;
            shiny.SetActive(obj.activeSelf);

            // Force the new shiny to fall straight downwards
            PlayMakerFSM fsm   = FSMUtility.LocateFSM(shiny, "Shiny Control");
            FsmState     fling = fsm.GetState("Fling?");

            fling.ClearTransitions();
            fling.AddTransition("FINISHED", "Fling R");
            FlingObject flingObj = fsm.GetState("Fling R").GetActionsOfType <FlingObject>()[0];

            flingObj.angleMin = flingObj.angleMax = 270;

            // For some reason not setting speed manually messes with the object position
            flingObj.speedMin = flingObj.speedMax = 0.1f;

            // Destroy the original
            Object.Destroy(obj);
        }
Example #15
0
        private static void CloneClicked(string buttonName)
        {
            int       num = Convert.ToInt32(buttonName.Substring(5));
            EnemyData dat = enemyPool.FindAll(ed => ed.gameObject != null && ed.gameObject.activeSelf)[num - 1];

            GameObject   gameObject2   = UnityEngine.Object.Instantiate(dat.gameObject, dat.gameObject.transform.position, dat.gameObject.transform.rotation) as GameObject;
            Component    component     = gameObject2.GetComponent <tk2dSprite>();
            PlayMakerFSM playMakerFSM2 = FSMUtility.LocateFSM(gameObject2, dat.FSM.FsmName);
            int          value8        = playMakerFSM2.FsmVariables.GetFsmInt("HP").Value;

            enemyPool.Add(new EnemyData(value8, playMakerFSM2, component, parent, gameObject2));
            Console.AddLine("Cloning enemy as: " + gameObject2.name);
        }
Example #16
0
 private GameObject DashSoul(GameObject go, Fsm fsm)
 {
     if (go == sharpShadow)
     {
         PlayMakerFSM hm = FSMUtility.LocateFSM(fsm.GameObject, "health_manager") ?? FSMUtility.LocateFSM(fsm.GameObject, "health_manager_enemy");
         if (!Equals(hm, null))
         {
             LogDebug($"Hitting enemy {fsm.GameObject}");
             HeroController.instance.AddMPChargeSpa(11);
         }
     }
     return(go);
 }
Example #17
0
        private static IEnumerator KillGeoText()
        {
            PlayMakerFSM ynFsm = FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control");

            while (ynFsm.ActiveStateName != "Ready for Input")
            {
                yield return(new WaitForEndOfFrame());
            }

            ynFsm.FsmVariables.GetFsmGameObject("Geo Text").Value.SetActive(false);
            ynFsm.FsmVariables.GetFsmInt("Toll Cost").Value = int.MaxValue;
            PlayMakerFSM.BroadcastEvent("NOT ENOUGH");
        }
        public void GrimmballUpdater()
        {
            try
            {
                AddSoulGrimmball();

                customGrimmball = UnityEngine.Object.Instantiate(deadShootSpawner.gameObject.Value, grimmchild.transform.position, Quaternion.Euler(Vector3.up));
                customGrimmball.transform.position = grimmchild.transform.position;
                PlayMakerFSM     customGrimmballControl = FSMUtility.LocateFSM(customGrimmball, "Control");
                CircleCollider2D grimmballHitbox        = customGrimmball.GetComponent <CircleCollider2D>();


                //customGrimmball.d
                Rigidbody2D grimmPhysics = customGrimmball.GetComponent <Rigidbody2D>();
                grimmPhysics.isKinematic = true;

                grimmballHitbox.radius = 1.1f;

                SetScale realSize = customGrimmballControl.GetState("Init").GetActionsOfType <SetScale>()[0];
                realSize.x = ballSize;
                realSize.y = ballSize;


                customGrimmballControl.SetState("Init");



                GameObject   hitbox        = customGrimmball.FindGameObjectInChildren("Enemy Damager");
                PlayMakerFSM hitboxControl = FSMUtility.LocateFSM(hitbox, "Attack");
                FsmState     inv           = hitboxControl.GetState("Invincible?");

                hitboxControl.FsmVariables.FindFsmInt("Damage").Value = damage;


                if (ghostBalls)
                {
                    FsmState         initState   = customGrimmballControl.GetState("Init");
                    Collision2dEvent initCollide = initState.GetActionsOfType <Collision2dEvent>()[0];
                    initCollide.collideTag = "Enemy";
                }



                oldAttack.gameObject.OwnerOption = OwnerDefaultOption.SpecifyGameObject;
                oldAttack.gameObject.GameObject  = customGrimmball;
            }
            catch (Exception e)
            {
                Log("Unable to make the ball because of error: " + e);
            }
        }
Example #19
0
        public static void SelfDamage()
        {
            if (PlayerData.instance.health <= 0 || HeroController.instance.cState.dead || !GameManager.instance.IsGameplayScene() || GameManager.instance.IsGamePaused() || HeroController.instance.cState.recoiling || HeroController.instance.cState.invulnerable)
            {
                Console.AddLine("Unacceptable conditions for selfDamage(" + PlayerData.instance.health + "," + DebugMod.HC.cState.dead + "," + DebugMod.GM.IsGameplayScene() + "," + DebugMod.HC.cState.recoiling + "," + DebugMod.GM.IsGamePaused() + "," + DebugMod.HC.cState.invulnerable + ")." + " Pressed too many times at once?");
                return;
            }
            if (!DebugMod.settings.EnemiesPanelVisible)
            {
                Console.AddLine("Enable EnemyPanel for self-damage");
                return;
            }
            if (EnemiesPanel.enemyPool.Count < 1)
            {
                Console.AddLine("Unable to locate a single enemy in the scene.");
                return;
            }

            GameObject    enemyObj     = EnemiesPanel.enemyPool.ElementAt(new Random().Next(0, EnemiesPanel.enemyPool.Count)).gameObject;
            CollisionSide side         = HeroController.instance.cState.facingRight ? CollisionSide.right : CollisionSide.left;
            int           damageAmount = 1;
            int           hazardType   = (int)HazardType.NON_HAZARD;

            PlayMakerFSM fsm = FSMUtility.LocateFSM(enemyObj, "damages_hero");

            if (fsm != null)
            {
                damageAmount = FSMUtility.GetInt(fsm, "damageDealt");
                hazardType   = FSMUtility.GetInt(fsm, "hazardType");
            }

            object[] paramArray;

            if (EnemiesPanel.parameters.Length == 2)
            {
                paramArray = new object[] { enemyObj, side };
            }
            else if (EnemiesPanel.parameters.Length == 4)
            {
                paramArray = new object[] { enemyObj, side, damageAmount, hazardType };
            }
            else
            {
                Console.AddLine("Unexpected parameter count on HeroController.TakeDamage");
                return;
            }

            Console.AddLine("Attempting self damage");
            EnemiesPanel.takeDamage.Invoke(HeroController.instance, paramArray);
        }
Example #20
0
        protected static void SendEventToFSM(GameObject gameObject, string fsmName, string eventName)
        {
            if (gameObject == null)
            {
                return;
            }

            PlayMakerFSM fsm = FSMUtility.LocateFSM(gameObject, fsmName);

            if (fsm != null)
            {
                fsm.SendEvent(eventName);
            }
        }
Example #21
0
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (monitorFSMStates)
            {
                return;
            }

            bool isPlayer = false;

            foreach (Transform t in collision.gameObject.GetComponentsInParent <Transform>())
            {
                if (t.gameObject == HeroController.instance.gameObject)
                {
                    isPlayer = true;
                    break;
                }
            }

            if (!isPlayer)
            {
                Dev.Log("Something not the player entered us!");
                return;
            }

            Dev.Log("Player entered our wake area! ");

            if (!string.IsNullOrEmpty(fsmName))
            {
                PlayMakerFSM fsm = FSMUtility.LocateFSM(owner, fsmName);

                if (fsm != null && wakeEvents != null)
                {
                    foreach (string s in wakeEvents)
                    {
                        Dev.Log("Sending event! " + s);
                        fsm.SendEvent(s);
                    }
                }
                else
                {
                    Dev.Log("Could not find FSM!");
                }
            }

            //remove this after waking up the enemy
            Destroy(gameObject);
        }
        public static void SetGeo(GameObject rock, string item, string location, int geo)
        {
            var fsm  = FSMUtility.LocateFSM(rock, "Geo Rock");
            var init = fsm.GetState("Initiate");

            init.RemoveActionsOfType <IntCompare>();
            init.AddAction(new RandomizerExecuteLambda(() => {
                fsm.SendEvent(RandomizerMod.Instance.Settings.CheckLocationFound(location) ? "BROKEN" : null);
            }));
            var hit = fsm.GetState("Hit");

            hit.ClearTransitions();
            hit.AddTransition("HIT", "Pause Frame");
            hit.AddTransition("FINISHED", "Pause Frame");
            hit.RemoveActionsOfType <FlingObjectsFromGlobalPool>();
            var payout       = fsm.GetState("Destroy");
            var payoutAction = payout.GetActionOfType <FlingObjectsFromGlobalPool>();

            // If we're flinging 420 geo from a rock that isn't the 420 rock, the game doesn't like loading 420 items at once.
            if (geo == 420)
            {
                geo /= 5;
                payout.AddFirstAction(new RandomizerExecuteLambda(() => {
                    GameObject mediumPrefab = ObjectCache.MediumGeo;
                    Object.Destroy(mediumPrefab.Spawn());
                    mediumPrefab.SetActive(true);
                    payoutAction.gameObject.Value = mediumPrefab;
                }));
                payout.AddAction(new RandomizerExecuteLambda(() => payoutAction.gameObject.Value.SetActive(false)));
            }

            payoutAction.spawnMin.Value = geo;
            payoutAction.spawnMax.Value = geo;
            // Keep geo from flying into unreachable spots
            switch (location)
            {
            case "Thorns_of_Agony":
            case "Spore_Shroom":
            case "Hallownest_Seal-Fog_Canyon_East":
                payoutAction.angleMin.Value = 90;
                payoutAction.angleMax.Value = 90;
                break;
            }
            payout.AddAction(new RandomizerExecuteLambda(() => GiveItem(GiveAction.None, item, location)));
        }
Example #23
0
        public static void EnemyUpdate(float boxSize)
        {
            if (autoUpdate)
            {
                boxSize = 50f;
            }

            if (DebugMod.settings.EnemiesPanelVisible && HeroController.instance != null && !HeroController.instance.cState.transitioning && DebugMod.GM.IsGameplayScene())
            {
                int          count     = enemyPool.Count;
                int          layerMask = 133120;
                Collider2D[] array     = Physics2D.OverlapBoxAll(DebugMod.RefKnight.transform.position, new Vector2(boxSize, boxSize), 1f, layerMask);
                if (array != null)
                {
                    for (int i = 0; i < array.Length; i++)
                    {
                        PlayMakerFSM playMakerFSM = FSMUtility.LocateFSM(array[i].gameObject, "health_manager_enemy");
                        if (playMakerFSM == null)
                        {
                            FSMUtility.LocateFSM(array[i].gameObject, "health_manager");
                        }
                        if (playMakerFSM && !enemyPool.Any(ed => ed.gameObject == array[i].gameObject) && !Ignore(array[i].gameObject.name))
                        {
                            Component component = array[i].gameObject.GetComponent <tk2dSprite>();
                            if (component == null)
                            {
                                component = null;
                            }
                            int value = playMakerFSM.FsmVariables.GetFsmInt("HP").Value;
                            enemyPool.Add(new EnemyData(value, playMakerFSM, component, parent, array[i].gameObject));
                        }
                    }
                    if (enemyPool.Count > count)
                    {
                        Console.AddLine("EnemyList updated: +" + (enemyPool.Count - count));
                        return;
                    }
                }
            }
            else if (autoUpdate && (!DebugMod.settings.EnemiesPanelVisible || !GameManager.instance.IsGameplayScene() || HeroController.instance == null))
            {
                autoUpdate = false;
                Console.AddLine("Cancelling enemy auto-scan due to weird conditions");
            }
        }
        public static bool InInventory()
        {
            GameObject inventoryTop = GameObject.FindGameObjectWithTag("Inventory Top");

            if (inventoryTop == null)
            {
                return(false);
            }

            PlayMakerFSM playMakerFsm = FSMUtility.LocateFSM(inventoryTop, "Inventory Control");

            if (playMakerFsm == null)
            {
                return(false);
            }

            return(playMakerFsm.FsmVariables.FindFsmBool("Open").Value);
        }
Example #25
0
        private IEnumerator getHeroFSMs()
        {
            while (GameManager.instance == null || HeroController.instance == null)
            {
                yield return(null);
            }

            voidKnight = GameObject.Find("Knight");
            redwing_game_objects.voidKnight = voidKnight;


            voidKnightSpellControl = FSMUtility.LocateFSM(voidKnight, "ProxyFSM");
            voidKnightNailArts     = FSMUtility.LocateFSM(voidKnight, "Nail Arts");

            setupFlamePillar();
            setupNailArtFireballs();
            createFlameShield();
        }
Example #26
0
 public static void RefreshEnemyList()
 {
     if (DebugMod.settings.EnemiesPanelVisible)
     {
         GameObject[] rootGameObjects = UnityEngine.SceneManagement.SceneManager.GetSceneByName(DebugMod.GetSceneName()).GetRootGameObjects();
         if (rootGameObjects != null)
         {
             foreach (GameObject gameObject in rootGameObjects)
             {
                 if ((gameObject.layer == 11 || gameObject.layer == 17 || gameObject.tag == "Boss") && !Ignore(gameObject.name))
                 {
                     PlayMakerFSM playMakerFSM = FSMUtility.LocateFSM(gameObject, "health_manager_enemy");
                     Component    component    = gameObject.GetComponent <tk2dSprite>();
                     if (playMakerFSM == null)
                     {
                         playMakerFSM = FSMUtility.LocateFSM(gameObject, "health_manager");
                     }
                     int num3 = gameObject.name.IndexOf("grass", StringComparison.OrdinalIgnoreCase);
                     int num2 = gameObject.name.IndexOf("hopper", StringComparison.OrdinalIgnoreCase);
                     if (num3 >= 0 && num2 >= 0)
                     {
                         component = gameObject.transform.FindChild("Sprite").gameObject.gameObject.GetComponent <tk2dSprite>();
                     }
                     if (playMakerFSM != null)
                     {
                         if (component == null)
                         {
                             component = null;
                         }
                         int value = playMakerFSM.FsmVariables.GetFsmInt("HP").Value;
                         enemyPool.Add(new EnemyData(value, playMakerFSM, component, parent, gameObject));
                     }
                 }
                 EnemyDescendants(gameObject.transform);
             }
         }
         if (enemyPool.Count > 0)
         {
             Console.AddLine("Enemy data filled, entries added: " + enemyPool.Count);
         }
         EnemyUpdate(200f);
     }
 }
Example #27
0
        private static void OpenYNDialogue(GameObject shiny, string text, Func <bool> canBuy)
        {
            FSMUtility.LocateFSM(GameObject.Find("DialogueManager"), "Box Open YN").SendEvent("BOX UP YN");
            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmGameObject("Requester").Value = shiny;

            Lang.Add("UI", "RANDOMIZER_YN_DIALOGUE", text);
            if (!canBuy())
            {
                KillGeoText().RunCoroutine();
            }

            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmInt("Toll Cost").Value = 0;
            FSMUtility.LocateFSM(GameObject.Find("Text YN"), "Dialogue Page Control").FsmVariables
            .GetFsmGameObject("Geo Text").Value.SetActive(true);

            GameObject.Find("Text YN").GetComponent <DialogueBox>().StartConversation("RANDOMIZER_YN_DIALOGUE", "UI");
        }
        // No idea
        private static void FalseKnightNoises(On.EnemyHitEffectsArmoured.orig_RecieveHitEffect orig,
                                              EnemyHitEffectsArmoured self, float dir)
        {
            orig(self, dir);

            if (_rndNum != 17 || self.gameObject.name != "False Knight New")
            {
                return;
            }

            AudioPlayerOneShot hitPlayer = FSMUtility.LocateFSM(self.gameObject, "FalseyControl").GetState("Hit")
                                           .GetActionsOfType <AudioPlayerOneShot>()[0];
            AudioClip clip = hitPlayer.audioClips[Rnd.Next(hitPlayer.audioClips.Length)];

            AudioClip temp = self.enemyDamage.Clip;

            self.enemyDamage.Clip = clip;
            self.enemyDamage.SpawnAndPlayOneShot(self.audioPlayerPrefab, self.transform.position);
            self.enemyDamage.Clip = temp;
        }
Example #29
0
        public void GetReferences()
        {
            if (sharpShadow == null || sharpShadow.tag != "Sharp Shadow")
            {
                foreach (GameObject gameObject in Resources.FindObjectsOfTypeAll <GameObject>())
                {
                    if (gameObject != null && gameObject.tag == "Sharp Shadow")
                    {
                        sharpShadow    = gameObject;
                        sharpShadowFSM = FSMUtility.LocateFSM(sharpShadow, "damages_enemy");
                        LogDebug($@"Found Sharp Shadow: {sharpShadow} - {sharpShadowFSM}.");
                    }
                }
            }

            if (superDash == null)
            {
                superDash = HeroController.instance.superDash;
                HeroController.instance.gameObject.AddComponent <SuperDashHandler>();
            }
        }
Example #30
0
        // Spawns in grimmchild after loading scene.
        public static IEnumerator spawnGrimmchild()
        {
            yield return(new WaitForFinishedEnteringScene());

            yield return(new WaitForSeconds(5f));

            if (!PlayerData.instance.GetBoolInternal("equippedCharm_40"))
            {
                yield break;
            }
            log("Spawning grimmchild in grimm arena.");
            PlayMakerFSM gcControl = FSMUtility.LocateFSM(infinite_tent.grimmchild, "Control");

            infinite_tent.grimmchild.SetActive(true);
            FsmState starting = gcControl.getState("Pause");

            starting.removeActionsOfType <BoolTest>();
            starting.clearTransitions();
            starting.addTransition("FINISHED", "Spawn");
            starting.addTransition("AWOKEN", "Spawn");
        }