public override void CustomDraw(SpriteBatch spriteBatch)
        {
            Texture2D texture   = ParticleHandler.GetTexture(Type);
            var       drawFrame = new Rectangle(0, _frame * texture.Height / 2, texture.Width, texture.Height / 2);

            Effect effect = SpiritMod.ShaderDict["PrimitiveTextureMap"];

            effect.Parameters["uTexture"].SetValue(SpiritMod.Instance.GetTexture("NPCs/Boss/Occultist/SoulTrail"));
            Vector2[] vertices = _chain.VerticesArray();
            vertices.IterateArray(delegate(ref Vector2 vertex, int index, float progress) { IterateVerticesSine(ref vertex, progress); });
            var strip = new PrimitiveStrip
            {
                Color         = Color.White * _opacity,
                Width         = 13 * Scale,
                PositionArray = vertices,
                TaperingType  = StripTaperType.None,
            };

            PrimitiveRenderer.DrawPrimitiveShape(strip, effect);

            var origin = new Vector2(drawFrame.Width / 2, drawFrame.Height);

            spriteBatch.Draw(texture, _chain.StartPosition - Main.screenPosition, drawFrame, Color.White * _opacity, Rotation, origin, Scale, SpriteEffects.None, 0);

            Texture2D bloom = SpiritMod.Instance.GetTexture("Effects/Ripple");

            spriteBatch.Draw(bloom, _chain.StartPosition - Main.screenPosition, null, Color.Red * _opacity, 0, bloom.Size() / 2, 0.75f, SpriteEffects.None, 0);
        }
        public override bool PreDraw(SpriteBatch spriteBatch, Color lightColor)
        {
            if (_chain != null)
            {
                Effect effect = SpiritMod.ShaderDict["PrimitiveTextureMap"];
                effect.Parameters["uTexture"].SetValue(mod.GetTexture("NPCs/Boss/Occultist/SoulTrail"));

                Vector2[] vertices = _chain.VerticesArray();
                vertices.IterateArray(delegate(ref Vector2 vertex, int index, float progress) { IterateVerticesSine(ref vertex, progress); });
                var strip = new PrimitiveStrip
                {
                    Color         = Color.White * projectile.Opacity,
                    Width         = 13 * projectile.scale,
                    PositionArray = vertices,
                    TaperingType  = StripTaperType.None,
                };
                PrimitiveRenderer.DrawPrimitiveShape(strip, effect);

                Texture2D projTexture = Main.projectileTexture[projectile.type];
                var       origin      = new Vector2(projectile.DrawFrame().Width / 2, projectile.DrawFrame().Height + 2);
                spriteBatch.Draw(projTexture, _chain.StartPosition - Main.screenPosition, projectile.DrawFrame(), projectile.GetAlpha(Color.White), _chain.StartRotation + MathHelper.PiOver2, origin, projectile.scale, SpriteEffects.None, 0);
            }
            return(false);
        }