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; }
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; } }
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); }
protected override void Initialize(SeedOptions options) { Dynamic._isDrawbridgeUp = !LevelReflected.GetLevelSaveBool("HasWinchBeenUsed") ? false : LevelReflected.GetLevelSaveBool("IsDrawbridgeRaised"); Dynamic._isRotatingClockwise = Dynamic._isDrawbridgeUp; }
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; }