예제 #1
0
    // Token: 0x06003848 RID: 14408
    public static void Tick()
    {
        long tick = DateTime.Now.Ticks % 10000000L;

        if (tick < Randomizer.LastTick)
        {
            if (ResetVolume == 1)
            {
                ResetVolume = 0;
                GameSettings.Instance.SoundEffectsVolume = CachedVolume;
            }
            else if (ResetVolume > 1)
            {
                ResetVolume--;
            }

            if (RepeatableCooldown > 0)
            {
                RepeatableCooldown--;
            }
            if (RandomizerStatsManager.StatsTimer > 0)
            {
                RandomizerStatsManager.StatsTimer--;
            }
            RandomizerStatsManager.IncTime();
            if (Scenes.Manager.CurrentScene != null)
            {
                string scene = Scenes.Manager.CurrentScene.Scene;
                if (scene == "titleScreenSwallowsNest")
                {
                    ResetTrackerCount++;
                    if (ResetTrackerCount > 10)
                    {
                        RandomizerTrackedDataManager.Reset();
                        ResetTrackerCount = 0;
                    }
                    if (RandomizerCreditsManager.CreditsDone)
                    {
                        RandomizerCreditsManager.CreditsDone = false;
                    }
                }
                else if (scene == "creditsScreen")
                {
                    if (!CreditsActive && !RandomizerCreditsManager.CreditsDone)
                    {
                        CreditsActive = true;
                        RandomizerCreditsManager.Initialize();
                    }
                }
                else if (scene == "theSacrifice" && RandomizerStatsManager.Active)
                {
                    foreach (SceneManagerScene sms in Scenes.Manager.ActiveScenes)
                    {
                        if (sms.MetaData.Scene == "creditsScreen" && sms.CurrentState == SceneManagerScene.State.Loading)
                        {
                            RandomizerStatsManager.Finish();
                        }
                    }
                }
            }

            if (CreditsActive && !RandomizerCreditsManager.CreditsDone)
            {
                RandomizerCreditsManager.Tick();
            }

            if (Characters.Sein)
            {
                if (JustSpawned && SpawnWith != "" && Characters.Sein.Inventory)
                {
                    JustSpawned = false;
                    RandomizerAction spawnItem;
                    if (Randomizer.StringKeyPickupTypes.Contains(SpawnWith.Substring(0, 2)))
                    {
                        spawnItem = new RandomizerAction(SpawnWith.Substring(0, 2), SpawnWith.Substring(2));
                    }
                    else
                    {
                        spawnItem = new RandomizerAction(SpawnWith.Substring(0, 2), int.Parse(SpawnWith.Substring(2)));
                    }
                    RandomizerSwitch.GivePickup(spawnItem, 2, true);
                }
                if (!Characters.Sein.IsSuspended && Scenes.Manager.CurrentScene != null)
                {
                    ResetTrackerCount = 0;
                    RandomizerTrackedDataManager.UpdateBitfields();
                    RandomizerColorManager.UpdateHotColdTarget();
                    if (Characters.Sein.Position.y > 937f && Sein.World.Events.WarmthReturned && Scenes.Manager.CurrentScene.Scene == "ginsoTreeWaterRisingEnd")
                    {
                        if (Characters.Sein.Abilities.Bash.IsBashing)
                        {
                            Characters.Sein.Abilities.Bash.BashGameComplete(0f);
                        }
                        Characters.Sein.Position = new Vector3(750f, -120f);
                        return;
                    }
                    if (Scenes.Manager.CurrentScene.Scene == "catAndMouseResurrectionRoom" && !Randomizer.canFinalEscape())
                    {
                        if (Randomizer.Entrance)
                        {
                            Randomizer.EnterDoor(new Vector3(-242f, 489f));
                            return;
                        }
                        Characters.Sein.Position = new Vector3(20f, 105f);
                        return;
                    }
                    else if (!Characters.Sein.Controller.CanMove && Scenes.Manager.CurrentScene.Scene == "moonGrottoGumosHideoutB")
                    {
                        Randomizer.LockedCount++;
                        if (Randomizer.LockedCount >= 4)
                        {
                            GameController.Instance.ResetInputLocks();
                            return;
                        }
                    }
                    else
                    {
                        Randomizer.LockedCount = 0;
                    }
                }
            }
        }
        Randomizer.LastTick = tick;
    }
예제 #2
0
    public static void ActivateBonusSkill(int ab)
    {
        if (!Characters.Sein || Characters.Sein.IsSuspended || ab == 0 || RandomizerBonusSkill.get(ab) == 0)
        {
            return;
        }
        switch (ab)
        {
        case 101:
            if (Characters.Sein.Energy.Current > 0f)
            {
                float amount = Characters.Sein.Energy.Current * 4f;
                Characters.Sein.Energy.SetCurrent(Characters.Sein.Mortality.Health.Amount / 4f);
                Characters.Sein.Mortality.Health.SetAmount(amount);
                return;
            }
            UI.SeinUI.ShakeEnergyOrbBar();
            Characters.Sein.Energy.NotifyOutOfEnergy();
            return;

        case 102:
        case 103:
        case 109:
            if (IsActive(ab))
            {
                Deactivate(ab);
                BonusSkillText(BonusSkillNames[ab] + " off");
                RandomizerBonusSkill.EnergyDrainRate -= DrainRates[ab];
            }
            else if (Characters.Sein.Energy.Current > 5 * DrainRates[ab])
            {
                Activate(ab);
                BonusSkillText(BonusSkillNames[ab] + " on");
                RandomizerBonusSkill.EnergyDrainRate += DrainRates[ab];
            }
            else
            {
                UI.SeinUI.ShakeEnergyOrbBar();
                Characters.Sein.Energy.NotifyOutOfEnergy();
                return;
            }
            if (ab == 102)
            {
                if (IsActive(ab) || Characters.Sein.Abilities.Carry.IsCarrying)
                {
                    Characters.Sein.PlatformBehaviour.Gravity.BaseSettings.GravityAngle += 180f;
                }
                else
                {
                    Characters.Sein.PlatformBehaviour.Gravity.BaseSettings.GravityAngle = 0f;
                }
                Characters.Sein.PlatformBehaviour.LeftRightMovement.PlatformMovement.LocalSpeedX *= -1;
            }
            break;

        case 104:
            if (!CanWarpTo(LastAltR))
            {
                return;
            }
            if (Characters.Sein.Energy.Current >= 0.5f)
            {
                Characters.Sein.Energy.Spend(0.5f);
                Randomizer.WarpTo(LastAltR, 0);
                return;
            }
            UI.SeinUI.ShakeEnergyOrbBar();
            Characters.Sein.Energy.NotifyOutOfEnergy();
            return;

        case 105:
            if (!CanWarpTo(LastSoulLink))
            {
                return;
            }
            if (Characters.Sein.Energy.Current >= 0.5f)
            {
                Characters.Sein.Energy.Spend(0.5f);
                Randomizer.WarpTo(LastSoulLink, 0);
                return;
            }
            UI.SeinUI.ShakeEnergyOrbBar();
            Characters.Sein.Energy.NotifyOutOfEnergy();
            return;

        case 106:
            if (!Characters.Sein.SoulFlame.InsideCheckpointMarker)
            {
                BonusSkillText("You can only Respec on a Soul Link!");
                return;
            }
            {
                int apToGain = RandomizerBonus.ResetAP();
                if (apToGain == 0)
                {
                    BonusSkillText("No AP to refund");
                    return;
                }
                BonusSkillText("Respec successful. " + apToGain.ToString() + " AP refunded!");
                CharacterAbility[]      abilities      = Characters.Sein.PlayerAbilities.Abilities;
                List <CharacterAbility> actuallySkills = new List <CharacterAbility>()
                {
                    Characters.Sein.PlayerAbilities.WallJump,
                    Characters.Sein.PlayerAbilities.ChargeFlame,
                    Characters.Sein.PlayerAbilities.DoubleJump,
                    Characters.Sein.PlayerAbilities.Bash,
                    Characters.Sein.PlayerAbilities.Stomp,
                    Characters.Sein.PlayerAbilities.Climb,
                    Characters.Sein.PlayerAbilities.Glide,
                    Characters.Sein.PlayerAbilities.ChargeJump,
                    Characters.Sein.PlayerAbilities.Dash,
                    Characters.Sein.PlayerAbilities.Grenade,
                    Characters.Sein.PlayerAbilities.SpiritFlame
                };
                for (int i = 0; i < abilities.Length; i++)
                {
                    if (!actuallySkills.Contains(abilities[i]))
                    {
                        abilities[i].HasAbility = false;
                    }
                }
                Characters.Sein.Prefabs.EnsureRightPrefabsAreThereForAbilities();
                Characters.Sein.Inventory.SkillPointsCollected += apToGain;
                Characters.Sein.Level.SkillPoints += apToGain;
            }
            return;

        case 107:
            if (LevelExplosionCooldown > 0)
            {
                return;
            }
            if (Characters.Sein.Energy.Current >= 1f)
            {
                Characters.Sein.Energy.Spend(1f);
                OldHealth = Characters.Sein.Mortality.Health.Amount;
                OldEnergy = Characters.Sein.Energy.Current;
                Characters.Sein.Level.AttemptInstantiateLevelUp();
                LevelExplosionCooldown = 15;
                return;
            }
            UI.SeinUI.ShakeEnergyOrbBar();
            Characters.Sein.Energy.NotifyOutOfEnergy();
            return;

        case 108:
            if (IsActive(ab))
            {
                Deactivate(ab);
                BonusSkillText("Movement Bonuses on");
            }
            else
            {
                Activate(ab);
                BonusSkillText("Movement Bonuses off");
            }
            return;

        case 110:
            if (IsActive(ab))
            {
                Deactivate(ab);
                BonusSkillText(BonusSkillNames[ab] + " off");
                RandomizerBonusSkill.EnergyDrainRate -= DrainRates[ab];
            }
            else if (Characters.Sein.Energy.Current > 1f)
            {
                Activate(ab);
                Characters.Sein.Energy.Spend(0.5f);
                BonusSkillText(BonusSkillNames[ab] + " on");
                RandomizerBonusSkill.EnergyDrainRate += DrainRates[ab];
            }
            else
            {
                UI.SeinUI.ShakeEnergyOrbBar();
                Characters.Sein.Energy.NotifyOutOfEnergy();
                return;
            }
            break;

        case 111:
            Characters.Sein.Mortality.DamageReciever.OnRecieveDamage(new Damage(9000f, new Vector2(0, 0), Characters.Sein.Position, DamageType.Lava, Characters.Sein.GameObject));
            break;

        case 112:
            if (CapturedEnemy == null)
            {
                BonusSkillNames[112] = "Pokeball (empty)";
                Characters.Sein.Abilities.SpiritFlameTargetting.UpdateClosestAttackables();
                foreach (ISpiritFlameAttackable target in Characters.Sein.Abilities.SpiritFlameTargetting.ClosestAttackables)
                {
                    string logMessage = target.GetType().ToString();
                    if (target is EntityTargetting)
                    {
                        var enemyTarget = target as EntityTargetting;
                        var entity      = enemyTarget.Entity;
                        if (entity is JumperEnemy)
                        {
                            CapturedName = "Fronkey";
                        }
                        else if (entity is FishEnemy)
                        {
                            CapturedName = "Fish";
                        }
                        else if (entity is SpitterEnemy)
                        {
                            CapturedName = "Frog";
                        }
                        else if (entity is KamikazeSootEnemy)
                        {
                            CapturedName = "Baneling";
                        }
                        else if (entity is DashOwlEnemy)
                        {
                            CapturedName = "Bird";
                        }
                        else
                        {
                            return;
                        }
                        CapturedEnemy = entity as Enemy;
                        Randomizer.LogError(CapturedEnemy.BoundingBox.ToString());
                        CapturedOffset = CapturedEnemy.PositionToPlayerPosition;
                        CapturedLeft   = Characters.Sein.FaceLeft;
                        CapturedEnemy.gameObject.SetActiveRecursively(false);
                        //Events.Scheduler.OnSceneRootDisabled.Remove(new Action<SceneRoot>(CapturedEnemy.OnSceneUnloaded));
                        BonusSkillNames[112] = "Pokeball (" + CapturedName + ")";
                    }
                }
            }
            else
            {
                if (CapturedLeft != Characters.Sein.FaceLeft)
                {
                    CapturedOffset.x *= -1;
                }
                CapturedEnemy.Position = Characters.Sein.Position + CapturedOffset;
                CapturedEnemy.gameObject.SetActiveRecursively(true);
                CapturedEnemy        = null;
                BonusSkillNames[112] = "Pokeball (empty)";
            }
            break;

        case 114:
            if (IsActive(ab))
            {
                Deactivate(ab);
                BonusSkillText("Ori");
            }
            else
            {
                Activate(ab);
                BonusSkillText("Naru");
            }
            return;

            break;

        case 1587:
            if (!Characters.Sein.Controller.CanMove || !Characters.Sein.Active)
            {
                return;
            }
            Randomizer.WarpTo(new Vector3(-2478, -593, 0), 0);
            GameController.Instance.RemoveGameplayObjects();
            RandomizerStatsManager.Active = false;
            RandomizerCreditsManager.Initialize();
            break;

        case 113:
            if (IsActive(ab))
            {
                Deactivate(ab);
                BonusSkillText("Bash/Stomp Damage on");
            }
            else
            {
                Activate(ab);
                BonusSkillText("Bash/Stomp Damage off");
            }
            break;

        default:
            return;
        }
    }