Our controller is a physical sledgehammer built to match the
tool at the center of Getting Over It with Bennett Foddy, a game about
perseverance, frustration, and the act of struggling with a simple object. The
hammer is constructed from a PVC pipe handle and a 3D printed head, giving it
the weight, shape, and feel of the real thing. The Circuit Playground Express
is housed inside the head, keeping the exterior clean.
The conceptual model is simple: you are holding a hammer,
and the hammer controls the game. When you tilt it, the cursor moves. When you
click the button, it clicks. There is no hidden logic to learn or mental
translation required. The idea is that anyone who picks it up should
immediately understand what to do, because it behaves the way a physical tool
in your hand should behave. A button mounted on the side of the handle acts as
a left click for navigating menus. Its placement on the handle keeps it
accessible during natural grip without interrupting play. A potentiometer, also
mounted on the handle, controls pause and unpause: turn it one direction to
pause, the other to resume.
The signifiers here are largely physical. The hammer's form
tells you to grip it, tilt it, and interact with it as you would any real tool.
The side mounted controls are within thumb reach, signaling that they are
supplementary to the primary tilt input rather than competing with it. Feedback
is delivered through on screen response: the cursor moves as you tilt,
reinforcing the tilt to motion mapping immediately. Together, the design argues
that the controller should feel like an extension of the game's theme:
deliberate, physical, and a little absurd.
Peer review: Through trial
and error, we were able to adjust the sensitivity of the hammer for the mouse
movement, but there is no way to adjust this set up outside of the code. How
would you go about adjusting the sensitivity/calibrating the hammer while
playing?
Schematic:
Code:
#include<Keyboard.h>
#include<KeyboardLayout.h>
#include<Adafruit_CircuitPlayground.h>
#include<Mouse.h>
#include<Wire.h>
#include<SPI.h>
int buttonPin = A3; // button for left click
//int shakeThresh = 40; // shake for pause, shake removed
int potPin = A2; // potentiometer pin
int threshold = 800; // threshold for pause on pot
bool wasAbove = false; // state for potentiometer so esc is inputted both ways
// mouse settings
// x movement settings
#defineX_MIN0.1
#defineX_MAX8.0
#defineX_SPEED25.0
#defineX_SCALE1.5
// y movement settings
#defineY_MIN X_MIN
#defineY_MAX X_MAX
#defineY_SPEED X_SPEED
#defineY_SCALE1.5
// Flip X and Y if needed
#defineFLIPfalse // false makes up up, true is right up
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.