protected override void OnUpdate(GameplayScreen gameplayScreen)
 {
     if (Dynamic.Level.ID != 16)
     {
         return;
     }
     if (teleportTriggered)
     {
         return;
     }
     if (Scripts.Count != 0)
     {
         teleportEnabled = true;
         Scripts.Clear();
     }
     if (teleportEnabled && Scripts.Count == 0)
     {
         LevelReflected.JukeBox.StopSong();
         LevelReflected.RequestChangeLevel(new LevelChangeRequest
         {
             LevelID             = 15,
             RoomID              = 0,
             IsUsingWarp         = true,
             IsUsingWhiteFadeOut = true,
             FadeInTime          = 0.5f,
             FadeOutTime         = 0.25f
         });                 // Return to Pyramid start
         LevelReflected.JukeBox.PlaySong(Timespinner.GameAbstractions.EBGM.Level15);
         teleportTriggered = true;
     }
 }
 public GyrePortalEvent(Mobile typedObject) : base(typedObject)
 {
     Dynamic._isUsable = true;
     // Crash Site
     if (typedObject.Level.ID == 10 && typedObject.Level.RoomID == 0)
     {
         Dynamic._portalType = 0;                 // start
     }
     // Closed loop
     else if (typedObject.Level.ID == 14 && typedObject.Level.RoomID == 23)
     {
         Dynamic._portalType = 3;                 // post-boss
     }
     // Lab file cabinet room
     else if (typedObject.Level.ID == 11 && typedObject.Level.RoomID == 4)
     {
         Dynamic._portalType = 2;                              // post-dungeon
         LevelReflected.SetLevelSaveInt("GyreDungeonSeed", 0); // Warp to Ravenlord
     }
     // Backer room
     else if (typedObject.Level.ID == 2 && typedObject.Level.RoomID == 51)
     {
         Dynamic._portalType = 2;                              // post-dungeon
         LevelReflected.SetLevelSaveInt("GyreDungeonSeed", 1); // Warp to Ifrit
     }
     else
     {
         Dynamic._isUsable = false;
     }
 }
        protected override void OnUpdate(GameplayScreen gameplayScreen)
        {
            if (ItemInfo == null || hasReplacedItemScript || (Point)Dynamic.DeathPosition == Point.Zero)
            {
                return;
            }

            var eventTypes = ((Dictionary <int, GameEvent>)LevelReflected._levelEvents).Values.Select(e => e.GetType());

            if (!eventTypes.Contains(SandStreamerEventType))
            {
                return;
            }

            if (((Dictionary <int, Item>)LevelReflected._items).Count == 0)
            {
                var itemDropPickupType = TimeSpinnerType.Get("Timespinner.GameObjects.Items.ItemDropPickup");
                var itemPosition       = (Point)Dynamic.Position;
                var itemDropPickup     = Activator.CreateInstance(itemDropPickupType, ItemInfo.BestiaryItemDropSpecification, Level, itemPosition, -1);

                LevelReflected.RequestAddObject((Item)itemDropPickup);
            }

            hasReplacedItemScript = true;
        }
Beispiel #4
0
 protected override void Initialize(SeedOptions options)
 {
     if (!(!LevelReflected.GetLevelSaveBool("HasWinchBeenUsed") ? false : LevelReflected.GetLevelSaveBool("IsDrawbridgeRaised")))
     {
         Dynamic._isEngineerDead    = true;
         Dynamic._isRaising         = true;
         Dynamic._raiseLowerCounter = 0.0f;
     }
     else
     {
         Dynamic._isRaising         = false;
         Dynamic._raiseLowerCounter = 4f;
     }
 }
Beispiel #5
0
 protected override void OnUpdate(GameplayScreen gameplayScreen)
 {
     if (hasRun)
     {
         return;
     }
     // Undo invulnerability after the cutscene ends
     if (((List <ScriptAction>)LevelReflected._activeScripts).Count == 0 &&
         ((Queue <DialogueBox>)LevelReflected._dialogueQueue).Count == 0 &&
         ((Queue <ScriptAction>)LevelReflected._waitingScripts).Count == 0)
     {
         LevelReflected.TogglePlayerIsInvulnerable(false);
         hasRun = true;
     }
 }
        void RemoveDemonsAndSpawnItem()
        {
            Incubus.Disappear();
            Succubus.Disappear();

            var sandStreamerEventType = TimeSpinnerType.Get("Timespinner.GameObjects.Events.Misc.SandStreamerEvent");
            var sandStreamerEnumType  = TimeSpinnerType.Get("Timespinner.GameObjects.Events.Misc.ESandStreamerType");
            var bossDeathEnumValue    = Enum.Parse(sandStreamerEnumType, "BossDeath");
            var sandStreamerEvent     = Activator.CreateInstance(sandStreamerEventType, Level, ((Rectangle)Incubus.Bbox).Center, bossDeathEnumValue);

            Level.AddEvent((GameEvent)sandStreamerEvent);

            var itemDropPickupType = TimeSpinnerType.Get("Timespinner.GameObjects.Items.ItemDropPickup");
            var itemPosition       = new Point(((Point)Succubus.Position).X, ((Rectangle)Succubus.Bbox).Top);
            var itemDropPickup     = Activator.CreateInstance(itemDropPickupType, ItemInfo.BestiaryItemDropSpecification, Level, itemPosition, -1);

            LevelReflected.RequestAddObject((Item)itemDropPickup);
        }
Beispiel #7
0
 protected override void Initialize(SeedOptions options)
 {
     Dynamic._isDrawbridgeUp      = !LevelReflected.GetLevelSaveBool("HasWinchBeenUsed") ? false : LevelReflected.GetLevelSaveBool("IsDrawbridgeRaised");
     Dynamic._isRotatingClockwise = Dynamic._isDrawbridgeUp;
 }
Beispiel #8
0
        protected override void OnUpdate(GameplayScreen gameplayScreen)
        {
            if (isRandomized && !songHasRun && Scripts.Count == 0 && Level.JukeBox.CurrentSongEnum != vanillaBoss.Song)
            {
                Level.JukeBox.StopSong();
                Level.JukeBox.PlaySong(vanillaBoss.Song);
                songHasRun = true;
            }

            if (warpHasRun || Dynamic._deathScriptTimer <= 0)
            {
                return;
            }

            if (!clearedHasRun && vanillaBoss.Index == (int)EBossID.Nightmare)
            {
                // Boss is Nightmare
                var fillingMethod = Level.GameSave.GetFillingMethod();

                if (fillingMethod == FillingMethod.Archipelago)
                {
                    Client.SetStatus(ArchipelagoClientState.ClientGoal);
                }

                clearedHasRun = true;
            }
            ;

            if (!saveHasRun)
            {
                BestiaryManager.SetBossKillSave(Level, vanillaBoss.Index);
                saveHasRun = true;
            }

            if (!isRandomized)
            {
                warpHasRun = true;
                return;
            }

            var visibleItems = (Dictionary <int, Item>)LevelReflected._items;

            if (visibleItems.Count > 0)
            {
                foreach (var itemKey in visibleItems)
                {
                    itemKey.Value.Kill();
                }
            }

            var eventTypes = ((Dictionary <int, GameEvent>)LevelReflected._levelEvents).Values.Select(e => e.GetType());

            if (currentBoss.Index != (int)EBossID.Maw && !eventTypes.Contains(SandStreamerEventType) && !eventTypes.Contains(TimeBreakEventType))
            {
                return;
            }

            //abort already triggered scripts
            ((List <ScriptAction>)LevelReflected._activeScripts).Clear();
            ((Queue <DialogueBox>)LevelReflected._dialogueQueue).Clear();
            ((Queue <ScriptAction>)LevelReflected._waitingScripts).Clear();
            Level.JukeBox.StopAllSFX();
            Level.JukeBox.StopSong();
            if (Level.GameSave.GetSettings().BossHealing.Value)
            {
                LevelReflected.FullyHealPlayer();
            }

            // Cause Time break
            if (vanillaBoss.ReturnRoom.LevelId == 15 && currentBoss.Index != (int)EBossID.Nightmare)
            {
                warpHasRun = true;
                var enumValue = CutsceneEnumType.GetEnumValue("Alt2_Win");
                CreateAndCallCutsceneMethod.InvokeStatic(enumValue, Level, new Point(200, 200));
                return;
            }

            TeleportPlayer();
            warpHasRun = true;
        }