const codeURL = document.querySelector('script[src^="blob"]').getAttribute('src')
code = loadStrings(codeURL)
for (let i = 0; i < 100; i++) {
const initialPosition = createVector(random(width), random(height))
position: initialPosition,
targetPosition: initialPosition.copy(),
nextUpdate: now + random(500, 3000),
text(code.join('\n'), 10, 10)
for (const bug of bugs) {
dist(bug.position.x, bug.position.y, mouseX, mouseY) < 100 &&
dist(bug.targetPosition.x, bug.targetPosition.y, mouseX, mouseY) < 100
const off = bug.position.copy().sub(createVector(mouseX, mouseY)).setMag(random(20, 100))
bug.targetPosition.add(off)
const distToTarget = bug.position.dist(bug.targetPosition)
if (distToTarget > 0.1) {
const targetAngle = atan2(
bug.targetPosition.y - bug.position.y,
bug.targetPosition.x - bug.position.x
bug.angle += (targetAngle - bug.angle) * 0.05
bug.position.add(createVector(
distToTarget * 0.1 * cos(targetAngle),
distToTarget * 0.1 * sin(targetAngle)
if (bug.nextUpdate <= now) {
bug.position.x > width ||
? atan2(height/2 - bug.position.y, width/2 - bug.position.x) + random(-0.1,0.1) * PI
: bug.angle + random(-0.2, 0.2) * PI
const off = createVector(cos(newAngle), sin(newAngle)).mult(d)
bug.targetPosition = bug.targetPosition.copy().add(off)
bug.nextUpdate = now + random(100, 5000)
translate(bug.position.x, bug.position.y)
for (const side of [-1, 1]) {
rotate(PI + PI/2 + side * PI * 0.1)