public bool update(GameTime time, Event e)
        {
            phaseTimer -= time.ElapsedGameTime.Milliseconds;
            steamTimer -= time.ElapsedGameTime.Milliseconds;
            cupTimer   -= time.ElapsedGameTime.Milliseconds;
            if (steamTimer <= 0)
            {
                if (e.aboveMapSprites == null)
                {
                    e.aboveMapSprites = new List <TemporaryAnimatedSprite>();
                }
                int randomX = Game1.random.Next(-48, 64);
                e.aboveMapSprites.Add(new TemporaryAnimatedSprite
                {
                    texture                 = tempText,
                    local                   = true,
                    position                = new Vector2(topLeftX + width / 2, topLeftY + height / 2) + new Vector2(-64 + randomX, 64f),
                    initialPosition         = new Vector2(topLeftX + width / 2, topLeftY + height / 2) + new Vector2(-64 + randomX, 64f),
                    motion                  = new Vector2(-0.1f, -1f),
                    alphaFade               = -0.01f,
                    alphaFadeFade           = -0.0001f,
                    alpha                   = 0.1f,
                    rotationChange          = Utility.Lerp(-0.01f, 0.01f, (float)Game1.random.NextDouble()),
                    sourceRect              = new Rectangle(472, 450, 16, 14),
                    scale                   = 4f,
                    sourceRectStartingPos   = new Vector2(472f, 450f),
                    animationLength         = 1,
                    totalNumberOfLoops      = 1,
                    interval                = 50000f,
                    layerDepth              = 1f,
                    overrideLocationDestroy = true
                });
                steamTimer = 100;
            }
            if (phaseTimer <= 0)
            {
                currentPhase++;
                phaseTimer = 99999;
                switch (currentPhase)
                {
                case 1:
                    text      = Game1.content.LoadString("Strings\\Locations:Caroline_Tea_Event1");
                    textColor = 6;
                    break;

                case 2:
                    text      = Game1.content.LoadString("Strings\\Locations:Caroline_Tea_Event2");
                    textColor = 6;
                    break;

                case 3:
                    text      = Game1.content.LoadString("Strings\\Locations:Caroline_Tea_Event3");
                    textColor = 6;
                    break;

                case 4:
                    buddy = new TemporaryAnimatedSprite
                    {
                        texture                 = tempText,
                        local                   = true,
                        position                = new Vector2(topLeftX, topLeftY) + new Vector2(213f, 170f) * 4f,
                        initialPosition         = new Vector2(topLeftX, topLeftY) + new Vector2(219f, 170f) * 4f,
                        motion                  = new Vector2(0f, -9f),
                        acceleration            = new Vector2(0f, 0.2f),
                        sourceRect              = new Rectangle(0, 242, 27, 32),
                        scale                   = 4f,
                        sourceRectStartingPos   = new Vector2(0f, 242f),
                        animationLength         = 1,
                        totalNumberOfLoops      = 1,
                        interval                = 950000f,
                        layerDepth              = 0.158f,
                        overrideLocationDestroy = true
                    };
                    setBuddyFrame(7);
                    Game1.playSound("pullItemFromWater");
                    buddyPhase = 0;
                    break;

                case 5:
                    phaseTimer = 3000;
                    break;

                default:
                    phaseTimer = 5000;
                    break;
                }
            }
            if (buddy != null)
            {
                float y = buddy.motion.Y;
                buddy.update(time);
                if (y <= 0f && buddy.motion.Y > 0f)
                {
                    buddy.layerDepth = 0.161f;
                }
                if (buddy.motion.Y > 0f && buddy.position.Y >= (float)(topLeftY + 608))
                {
                    buddy.motion.Y       = 0f;
                    buddy.acceleration.Y = 0f;
                    buddy.position.Y     = topLeftY + 608;
                    setBuddyFrame(0);
                    Game1.playSound("coin");
                    buddyPhase = 1;
                    buddyTimer = 2500;
                }
                if (buddyTimer >= 0)
                {
                    buddyTimer -= time.ElapsedGameTime.Milliseconds;
                }
                switch (buddyPhase)
                {
                case 1:
                    setBuddyFrame(buddyTimer % 1000 / 500);
                    if (buddyTimer <= 0)
                    {
                        buddyPhase = 2;
                        buddyTimer = 1500;
                        setBuddyFrame(5);
                        Game1.playSound("dwop");
                        e.aboveMapSprites.Add(new TemporaryAnimatedSprite
                        {
                            texture               = tempText,
                            local                 = true,
                            position              = buddy.position + new Vector2(-7f, -7f) * 4f,
                            initialPosition       = buddy.position + new Vector2(-7f, -7f) * 4f,
                            sourceRect            = new Rectangle(0, 384, 16, 16),
                            scale                 = 4f,
                            sourceRectStartingPos = new Vector2(0f, 384f),
                            animationLength       = 8,
                            totalNumberOfLoops    = 4,
                            interval              = 100f,
                            layerDepth            = 1f,
                            id = 777f,
                            overrideLocationDestroy = true
                        });
                    }
                    break;

                case 2:
                {
                    if (buddyTimer > 0)
                    {
                        break;
                    }
                    setBuddyFrame(6);
                    buddyPhase = 3;
                    Game1.playSound("sipTea");
                    buddyTimer = 1000;
                    for (int i = 0; i < e.aboveMapSprites.Count; i++)
                    {
                        if (e.aboveMapSprites[i].id == 777f)
                        {
                            e.aboveMapSprites.RemoveAt(i);
                            break;
                        }
                    }
                    break;
                }

                case 3:
                    if (buddyTimer <= 0)
                    {
                        setBuddyFrame(8);
                        Game1.playSound("gulp");
                        buddyPhase = 4;
                        buddyTimer = 1500;
                    }
                    break;

                case 4:
                    if (buddyTimer < 1000)
                    {
                        setBuddyFrame(9);
                    }
                    if (buddyTimer <= 0)
                    {
                        buddyPhase = 5;
                        buddyTimer = 2400;
                        Game1.playSound("dustMeep");
                        DelayedAction.playSoundAfterDelay("dustMeep", 400);
                        DelayedAction.playSoundAfterDelay("dustMeep", 800);
                        DelayedAction.playSoundAfterDelay("dustMeep", 1200);
                    }
                    break;

                case 5:
                    if (buddyTimer > 1000)
                    {
                        setBuddyFrame(2 + buddyTimer % 400 / 200);
                    }
                    else
                    {
                        setBuddyFrame(4);
                    }
                    if (buddyTimer <= 0)
                    {
                        buddyTimer = 2000;
                        buddyPhase = 6;
                        for (int j = 0; j < 30; j++)
                        {
                            Vector2 randomPositionOffset = Utility.getRandomPositionInThisRectangle(new Rectangle(-8, -8, 27, 32), Game1.random) * 4f;
                            float   xMotion = Utility.Lerp(-2f, 2f, (float)Game1.random.NextDouble());
                            e.aboveMapSprites.Add(new TemporaryAnimatedSprite
                            {
                                texture                 = tempText,
                                local                   = true,
                                position                = buddy.position + randomPositionOffset,
                                initialPosition         = buddy.position + randomPositionOffset,
                                motion                  = new Vector2(xMotion, -0.5f),
                                alphaFade               = -0.0125f,
                                alphaFadeFade           = -0.0002f,
                                alpha                   = 0.25f,
                                rotationChange          = Utility.Lerp(-0.01f, 0.01f, (float)Game1.random.NextDouble()),
                                sourceRect              = new Rectangle(472, 450, 16, 14),
                                scale                   = 4f,
                                sourceRectStartingPos   = new Vector2(472f, 450f),
                                animationLength         = 1,
                                totalNumberOfLoops      = 1,
                                interval                = 50000f,
                                layerDepth              = 1f,
                                overrideLocationDestroy = true
                            });
                        }
                        buddy      = null;
                        phaseTimer = 1;
                        Game1.playSound("fireball");
                    }
                    break;

                case 6:
                    if (buddyTimer <= 0)
                    {
                        phaseTimer = 1;
                    }
                    break;
                }
                Game1.InvalidateOldMouseMovement();
            }
            if (text != null)
            {
                e.int_useMeForAnything2   = textColor;
                e.float_useMeForAnything += time.ElapsedGameTime.Milliseconds;
                if (e.float_useMeForAnything > 80f)
                {
                    if (e.int_useMeForAnything >= text.Length)
                    {
                        if (e.float_useMeForAnything >= 2500f)
                        {
                            e.int_useMeForAnything   = 0;
                            e.float_useMeForAnything = 0f;
                            e.spriteTextToDraw       = "";
                            text       = null;
                            phaseTimer = 1;
                        }
                    }
                    else
                    {
                        e.int_useMeForAnything++;
                        e.float_useMeForAnything = 0f;
                    }
                }
                e.spriteTextToDraw = text;
            }
            if (currentPhase == 5 && phaseTimer <= 20)
            {
                e.aboveMapSprites.Clear();
                return(true);
            }
            return(false);
        }