           bigPos.radius = Math.sqrt bigBlob.weight
           smallPos.radius = Math.sqrt smallBlob.weight
           diff = bigPos.radius + smallPos.radius - bigPos.distance smallPos
-          weightGain = Math.max 0, smallBlob.weight - square(smallPos.radius - diff)
-          weightGain = smallBlob.weight if Math.abs smallBlob.weight - weightGain < 10
+          expectedWeight = square Math.max 0, smallPos.radius - diff
+          expectedWeight = 0 if expectedWeight < 10
+          weightGain = smallBlob.weight - expectedWeight
+          # Velocity sharing doesn't work as well as expected.
+          #bigBlob.velX = (bigBlob.velX + smallBlob.velX) * bigBlob.weight / (bigBlob.weight + weightGain)
+          #bigBlob.velY = (bigBlob.velY + smallBlob.velY) * bigBlob.weight / (bigBlob.weight + weightGain)
           bigBlob.weight += weightGain
           bigPos.radius = Math.sqrt bigBlob.weight
           smallBlob.weight -= weightGain
           smallBlob.weight = Math.max 0, smallBlob.weight
           smallPos.radius = Math.sqrt smallBlob.weight
-          bigBlob.velX += smallBlob.velX / bigBlob.weight * weightGain
-          bigBlob.velY += smallBlob.velY / bigBlob.weight * weightGain
     i = 0
     while i < @entities.length
       entity = @entities[i]

  update: (delta) ->
    for entity, i in @entities
      [entPos, entBlob] = [entity.c('pos'), entity.c('blob')]
      entPos.x += entBlob.velX / 1000 * delta
      entPos.y += entBlob.velY / 1000 * delta
      entBlob.velX *= Math.pow 0.994, 1 / 32 * delta

      # TODO: Implement better algorithm of this, such as QuadTree
      for other, j in @entities
        continue if not j > i
        [otherPos, otherBlob] = [other.c('pos'), other.c('blob')]
        continue if otherBlob.weightCap
        if entBlob.parent == other.id
          entBlob.parent = null if not entPos.collides otherPos
          pushOther entity, other
          continue
        if otherBlob.parent == entity.id
          otherBlob.parent = null if not entPos.collides otherPos
          pushOther entity, other
          continue
        continue if otherBlob.weight <= 0.1
        if entPos.collides otherPos
          # Bigger one eats smaller one
          entityBig = entPos.radius > otherPos.radius
