protected override IEnumerable <Animate> Replace(Level level, Animate obj) { var reflected = obj.AsDynamic(); var levelReflected = level.AsDynamic(); var treasureChest = new TreasureChestEvent(level, new Point(obj.Position.X, obj.Position.Y + YOffset), -1, reflected._objectSpec); var trigger = new TriggerAfterLootDrop(level, treasureChest, () => { bool hasSpindle = level.GameSave.HasRelic(EInventoryRelicType.TimespinnerSpindle); if (hasSpindle) { level.GameSave.Inventory.RelicInventory.Inventory.Remove((int)EInventoryRelicType.TimespinnerSpindle); } ((Queue <ScriptAction>)levelReflected._waitingScripts).Clear(); reflected._onPickedUpAction(); if (!hasSpindle) { level.GameSave.Inventory.RelicInventory.Inventory.Remove((int)EInventoryRelicType.TimespinnerSpindle); } var scripts = ((Queue <ScriptAction>)levelReflected._waitingScripts).ToArray().ToList(); var giveOrbScript = scripts.Single(s => s.AsDynamic().ScriptType == EScriptType.RelicOrbGetToast); giveOrbScript.AsDynamic().ScriptType = EScriptType.Wait; giveOrbScript.AsDynamic().ActionTimer = 0f; }); return(new Animate[] { treasureChest, trigger }); }