public void germinateLive(GameLocation location, Vector2 center)
        {
            // Only germinate once.
            if (germinating)
            {
                return;
            }

            // Choose a random ID for sprites.
            int id = Game1.random.Next();

            // Play the fuse sound.
            location.netAudio.StartPlaying("fuse");

            // Render the stray particles.
            MP.broadcastSprites(location, new TemporaryAnimatedSprite("LooseSprites\\Cursors",
                                                                      new Rectangle(598, 1279, 3, 4), 53f, 5, 9, center * 64f + new Vector2(5f, 3f) * 4f,
                                                                      flicker: true, flipped: false, (center.Y * 64 + 7) / 10000f, 0f, Color.Brown, 4f, 0f, 0f, 0f)
            {
                id = id,
            });
            MP.broadcastSprites(location, new TemporaryAnimatedSprite("LooseSprites\\Cursors",
                                                                      new Rectangle(598, 1279, 3, 4), 53f, 5, 9, center * 64f + new Vector2(5f, 3f) * 4f,
                                                                      flicker: true, flipped: true, (center.Y * 64 + 7) / 10000f, 0f, Color.Green, 4f, 0f, 0f, 0f)
            {
                delayBeforeAnimationStart = 100,
                id = id,
            });
            MP.broadcastSprites(location, new TemporaryAnimatedSprite("LooseSprites\\Cursors",
                                                                      new Rectangle(598, 1279, 3, 4), 53f, 5, 9, center * 64f + new Vector2(5f, 3f) * 4f,
                                                                      flicker: true, flipped: false, (center.Y * 64 + 7) / 10000f, 0f, Color.Yellow, 3f, 0f, 0f, 0f)
            {
                delayBeforeAnimationStart = 200,
                id = id,
            });

            // Render the shaking bomb, timing the next stage.
            bool ending = false;

            Base.isTemporarilyInvisible = true;
            MP.broadcastSprites(location, new TemporaryAnimatedSprite(
                                    (seed != null) ? FullSaveIndex.Index : TileIndex,
                                    100f, 1, 12, center * 64f, flicker: true, flipped: false, location, null)
            {
                shakeIntensity       = 0.5f,
                shakeIntensityChange = 0.002f,
                endFunction          = (int _) =>
                {
                    // Only end once.
                    if (ending)
                    {
                        return;
                    }
                    ending = true;

                    // Remove the sprites.
                    location.removeTemporarySpritesWithID(id);

                    // Show a mild flash.
                    if (Game1.currentLocation == location)
                    {
                        Game1.flashAlpha = 0.5f;
                    }

                    if (Context.IsMainPlayer)
                    {
                        // Stop the fuse sound and play the thud.
                        location.netAudio.StopPlaying("fuse");
                        location.playSound("treethud");

                        // Actually germinate.
                        germinate(location, center);
                    }
                },
            });
        }