             ali = @align(group)
             coh = @cohesion(group)
 
-            sep.mult(1.5)
+            sep.mult(1)
             ali.mult(1)
             coh.mult(1)
 
             @applyForce(sep)
             @applyForce(ali)
             @applyForce(coh)
+            @applyForce(@seek(@n_tgt))
+
+        separate: (group) ->
+            [tgt,n] = [20,0]
+            dir = p.createVector(0,0)
+            for elem in group
+                d = p5.Vector.dist(@pos,elem.pos)
+                if (0<d<tgt)
+                    diff = p5.Vector.sub(elem.pos,@pos)
+                    diff.normalize()
+                    diff.div(d)
+                    dir.add(diff)
+                    #console.log(elem instanceof Cocaine)
+                    unless (elem instanceof Cocaine)
+                        elem.applyForce(diff.normalize())
+                    n++
+            dir.div(n) if (n>0)
+            if (0<dir.mag())
+                dir.normalize()
+                dir.mult(3)
+                dir.sub(@v)
+                dir.limit(0.05)
+            return dir
+
+    ### `Amphetamine`
+
+    The same neuron! Now with amphetamines! Amphetamines act
+    as a releasing agent for dopamine, and are much easier
+    to animate!
+    - `@a`: acceleration
+    - `@v`: velocity
+    - `@max_v`: maximum speed
+    - `@max_f`: maximum force
+    - `@r`: radius
+    - `@pos`: current position
+    - `@tgt`: target position
+    ###
+    class Amphetamine extends Dopamine
+        @n_tgt = null
+
+        constructor: ->
+            super
+            @n_tgt = p.createVector(
+                p.width/2-128+p.random(-2,2)
+                p.height/2-100+p.random(-2,2))
+            if (p.random(3)>1)
+                @n_tgt = p.createVector(
+                    p.width/2+128+p.random(-2,2)
+                    p.height/2-100+p.random(-2,2))
+
+        update: ->
+            super
+            @lifespan--
+            #console.log("#{@lifespan}")
+            if (@lifespan<0)
+                if (p.random(2)>1)
+                    @applyForce(@seek(p.createVector(
+                        p.width*2, p.random(-30,30))).mult(3))
+                else @applyForce(@seek(p.createVector(
+                        p.width/2,-p.height).mult(3)))
+
+        draw: ->
+            p.push()
+            p.fill(255,180,180)
+            p.stroke(180)
+            p.strokeWeight(2)
+            p.line(@pos.x,@pos.y,@pos.x+8,@pos.y-4)
+            p.line(@pos.x+8,@pos.y-4,@pos.x+12,@pos.y-2)
+            polygon(@pos.x,@pos.y,5,6)
+            p.pop()
+
+        flock: (group) ->
+            sep = @separate(group)
+            ali = @align(group)
+            coh = @cohesion(group)
+
+            sep.mult(1)
+            ali.mult(0)
+            coh.mult(0)
+
+            @applyForce(sep)
+            @applyForce(ali)
+            @applyForce(coh)
+            @applyForce(@seek(@n_tgt))
+
+        separate: (group) ->
+            [tgt,n] = [20,0]
+            dir = p.createVector(0,0)
+            for elem in group
+                d = p5.Vector.dist(@pos,elem.pos)
+                if (0<d<tgt)
+                    diff = p5.Vector.sub(elem.pos,@pos)
+                    diff.normalize()
+                    diff.div(d)
+                    dir.add(diff)
+                    #console.log(elem instanceof Cocaine)
+                    unless (elem instanceof Cocaine)
+                        elem.applyForce(diff.normalize())
+                    n++
+            dir.div(n) if (n>0)
+            if (0<dir.mag())
+                dir.normalize()
+                dir.mult(3)
+                dir.sub(@v)
+                dir.limit(0.1)
+            return dir
 
     ### `Receptor`
 


        draw: ->
            p.push()
            p.fill(127)
            p.stroke(200)
            p.rotate(@theta/p.HALF_PI)
            p.rect(@pos.x-10,@pos.y-10,@pos.x+10,@pos+10)
            p.pop()




    ### `Vesicle`

    This class represents vesicles, which are what transport
    neurotransmitters across synapses.
    - `@r`: body radius
    - `@pos`: position
    - `@list`: contained particles
    ###
    class Vesicle
        constructor: (@r,@pos,@list) ->

        draw: ->
            p.push()
            p.ellipse(pos.x,pos.y)
            p.pop()

    ### `Events`


    p.mousePressed = ->
        pos = p.createVector(p.mouseX,p.mouseY)
        neurotransmitters.unshift(
            new Amphetamine(10,pos,p.createVector(0,0)))
        dope_rate--

    #p.windowResized = -> p.resizeCanvas(p.windowWidth, p.windowHeight);
