var Character = Entity.extend({
    doesFloat: true,
    affectedByGravity: true,

    isCharacter: true,
    hasHealthBar: true,

    init: function () {
        this.renderer = new CharacterRenderer
        (
            chance.integer({ min: 1, max: 6 }),
            chance.integer({ min: 1, max: 6 })
        )
    },

    drowning: false,

    update: function () {
        if (this.drowning) {
            this.damage(2);
            this.renderer.scale *= 0.975;
            this.posY += 0.5;

            if (this.alpha > 0) {
                this.alpha -= 0.025;
                this.alpha = MathHelper.clamp(this.alpha, 0, 1);
            }
        } else {
            this._super();

            if (this.isFloating()) {
                this.drowning = true;

                AudioOut.playSfx('splash.wav', 1);

                Particles.emit({
                    srcX: this.posX + (this.getWidth() / 2),
                    srcY: this.posY + (this.getHeight() / 2),
                    minAmount: 50,
                    maxAmount: 100,
                    color: '#fff',
                    lifetime: 60
                });
            }
        }
    },

    die: function () {
        this._super();

        if (this.drowning) {
            World.remove(this);
        }
    }
});
@@ -335,24 +335,421 @@
 ng: false,%0A%0A
+    damage: function (d) %7B%0A        if (!this.drowning && !this.dead) %7B%0A            Particles.emit(%7B%0A                srcX: this.posX + (this.getWidth() / 2),%0A                srcY: this.posY + (this.getHeight() / 2),%0A                minAmount: 1,%0A                maxAmount: d,%0A                color: '#ff0000',%0A                lifetime: 60%0A            %7D);%0A        %7D%0A%0A        this._super(d);%0A    %7D,%0A%0A
     update: 

Send out blood particles when a pirate is damaged, but not when dead or drowning.