Javelin Mouse Controls

In the Lost room of the Loft, Created July 14, 2026.

Javelin mouse controls, with mouse accel.

In the firmware tools, in the layer's User Scripts tab, add an entry.

var vx;
var vy;

// up, down, left, right
var mouseMask;
const mouseUpMask = 1;
const mouseDownMask = 2;
const mouseLeftMask = 4;
const mouseRightMask = 8;

// Just my settings
const MOUSE_MAX_VELOCITY = 120;
const MOUSE_ACCELERATION = 10;

func mouseUpPressed() {
  mousePressed(mouseUpMask);
}

func mouseDownPressed() {
  mousePressed(mouseDownMask);
}

func mouseLeftPressed() {
  mousePressed(mouseLeftMask);
}

func mouseRightPressed() {
  mousePressed(mouseRightMask);
}

func mouseUpReleased() {
  vy = 0;
  mouseReleased(mouseUpMask);
}

func mouseDownReleased() {
  vy = 0;
  mouseReleased(mouseDownMask);
}

func mouseLeftReleased() {
  vx = 0;
  mouseReleased(mouseLeftMask);
}

func mouseRightReleased() {
  vx = 0;
  mouseReleased(mouseRightMask);
}

func mousePressed(mask) {
  mouseMask = mouseMask | mask;
  startTimer(@updateMouse, 10, 1, @updateMouse);
  updateMouse();
}

func mouseReleased(mask) {
  mouseMask = mouseMask & ~mask;
  if (mouseMask == 0) {
    stopTimer(@updateMouse);
  }
}

func mouseReleaseAll() {
  mouseMask = 0;
  stopTimer(@updateMouse);
}

func updateMouse() {
  var upDown = mouseMask & 3;

  if (upDown == 0 || upDown == 3) {
    vy = 0;
  } else if(upDown == 1) {
    vy = vy - MOUSE_ACCELERATION;
    if (vy < -MOUSE_MAX_VELOCITY) {
        vy = -MOUSE_MAX_VELOCITY;
    }
  } else {
    vy = vy + MOUSE_ACCELERATION;
    if (vy > MOUSE_MAX_VELOCITY) {
        vy = MOUSE_MAX_VELOCITY;
    }
  }

  var leftRight = mouseMask >> 2;

  if (leftRight == 0 || leftRight == 3) {
    vx = 0;
  } else if(leftRight == 1) {
    vx = vx - MOUSE_ACCELERATION;
    if (vx < -MOUSE_MAX_VELOCITY) {
        vx = -MOUSE_MAX_VELOCITY;
    }
  } else {
    vx = vx + MOUSE_ACCELERATION;
    if (vx > MOUSE_MAX_VELOCITY) {
        vx = MOUSE_MAX_VELOCITY;
    }
  }

  moveMouse(vx/10, vy/10);
}

// #prefab Mouse:Up [{"t":"p","d":{"a":{"t":"s","script":"// Mouse\\nUp\nmouseUpPressed();"}}},{"t":"r","d":{"a":{"t":"s","script":"//\nmouseUpReleased();"}}}]
// #prefab Mouse:Down [{"t":"p","d":{"a":{"t":"s","script":"// Mouse\\nDown\nmouseDownPressed();"}}},{"t":"r","d":{"a":{"t":"s","script":"// \nmouseDownReleased();"}}}]
// #prefab Mouse:Left [{"t":"p","d":{"a":{"t":"s","script":"// Mouse\\nLeft\nmouseLeftPressed();"}}},{"t":"r","d":{"a":{"t":"s","script":"//\nmouseLeftReleased();"}}}]
// #prefab Mouse:Right [{"t":"p","d":{"a":{"t":"s","script":"// Mouse\\nRight\nmouseRightPressed();"}}},{"t":"r","d":{"a":{"t":"s","script":"// \nmouseRightReleased();"}}}]