Overview
The gaming industry has experienced unprecedented growth, surpassing traditional entertainment mediums such as television and film. With a global player base exceeding 2.7 billion individuals and continuing to expand, gaming has emerged as a pervasive and influential form of entertainment. As an avid gamer myself, I recognize the diverse communities and players worldwide that love being immersed within the digital world of video games. My good friend Nate is the person who inspired me to create this thesis due to the fact that he is diagnosed with Monemelic Amyotrophy, which hinders his overall experience playing video games due to the lack of accommodation for his disability.
What is Monomelic Amyotrophy?
Monomelic amyotrophy (MMA) is an uncommon ailment characterized by muscular weakness primarily affecting the upper extremities. This condition specifically impacts the lower motor neurons, which play a crucial role in transmitting signals from the brain to the skeletal muscles involved in movement. In the case of my friend Nate, MMA manifested as a challenge in maintaining a firm grip on the gaming controller, resulting in difficulties manipulating the device effectively. This prompted him to resort to placing the controller on a table for usage, leading to compromised functionality of the trigger buttons and an overall less ergonomic gaming experience.

This is an image of my friend Nate holding his ps4 controller. Because of his MMA, its difficult for him to hold the controller up, so he tends to place the controller on his lap or table. Because of this grip style, his thumbs cant sit properly on the joystick. When I saw him play, it made me want to make my thesis on solving his issue with gaming.
The Problem & The Question
I have come to realize that the video game industry falls short in establishing inclusive and accessible methods for gaming. Given this insight, how might we develop a device that is able to accommodate for a user’s specific preferences to create a more immersive and personalized gaming experience?
Research
Prior to the ideation process, I had to try and put myself in the shoes of someone who could be struggling with a disability. This required me to conduct organic user interviews with the target audience, look at other controllers on the market and understand the foundations of Game accessibility. Most of the research was primary research conducted myself.
Below will be screenshots from the controllers that I dismantled in order to gain a better understanding of the current mainstream structures of controllers. I mainly focused on the board setup, ease of repair/customization, as well as overall grip for the user.
Things to Consider: Interview with Nate
In order to gain a deeper insight into Nate’s challenges while gaming, I conducted an interview with him to evaluate how he navigates the physical aspects of gaming hardware. This interview gave me valuable insight on the specific areas that needed attention, and highlighted the impacts of a device lacking an inclusive design for users.
Key Terms: Lack of grip, exertion, force, hands, adaptive, tighter, multiple inputs, difficulty, emotional discomfort when not being able to use a controller.
Ideation & Prototyping
In the early stages of bringing this project together, I focused on solving the issue specifically present with Nate (enhancing the experience for a gamer with Monomelic Amyotrophy). The research is what got me thinking of a broader idea to solve this issue for able and disabled gamers alike. Based on the information gathered, I deduced that the grip of the controller seemed to be a large problem for Nate. So I started to mainly plan on improving the construction of his current controller.
These Images display the general idea for Nate's new controller. I added longer triggers, a divider at the back and a stand on each side that could help the controller stand up on a table while also giving more grip if needed. In the physical images, I made half of the controller easier to grip for Nate so I could see if the controller was actually easier to use in comparison to the old design. The plastic add-on were made using a material called polydoh moldable plastic.
Reflecting on the Issues
Regrettably, this phase of the project encountered several challenges, emphasizing the complexity of crafting an inclusive and modular controller. During the transition to modular design, it became apparent that the magnets that I had in place were not strong enough to support the swappable components or enable them to function as intended. This setback was disappointing, as I wasn't exactly sure how I could fix the issue unless I created a whole new controller — a task that would typically require years of effort by a dedicated team within a company. So because of this hurdle, I opted to reassess my approach and narrow the focus of my target audience to developing a controller specifically tailored for Nate's use with his MMA condition.
This was my attempt at getting the parts to connect to the controller with magnets. The idea ended up working, but the functionality of holding the controller up, or parts staying in place while gaming, did not work as planned.
Controller Internals
As a side project to go along with the main project, I also attempted to create a modular controller with a bread board to showcase how the modular design could work with swapping parts and button locations. The controller had all the essential buttons needed: ABYX buttons, back/start, D-pad, L/R trigger and a joystick.
The fritzing diagram of the controller I created. The was made using an Arduino Leonardo, a bread board and an AVR Programmer to reflash the Arduino incase it bricked. You were able to swap buttons or change inputs inside the IDE to suit the players style.

Changes By Page

#include <XInput.h>
// Setup
const boolean UseLeftJoystick = true; // set to true to enable left joystick
const boolean InvertLeftYAxis = false; // set to true to use inverted left joy Y
const boolean UseRightJoystick = false; // set to true to enable right joystick
const boolean UseTriggerButtons = true; // set to false if using analog triggers
const int ADC_Max = 1023; // 10 bit
// Joystick Pins
const int Pin_LeftJoyX = A0;
const int Pin_LeftJoyY = A1;
// Trigger Pins
const int Pin_TriggerL = A4;
const int Pin_TriggerR = A5;
// Button Pins
const int Pin_ButtonA = 0;
const int Pin_ButtonB = 1;
const int Pin_ButtonX = 2;
const int Pin_ButtonY = 3;
const int Pin_ButtonLB = 4;
const int Pin_ButtonRB = 5;
const int Pin_ButtonBack = 6;
const int Pin_ButtonStart = 7;
// Directional Pad Pins
const int Pin_DpadUp = 8;
const int Pin_DpadDown = 9;
const int Pin_DpadLeft = 10;
const int Pin_DpadRight = 11;
void setup() {
// If using buttons for the triggers, use internal pull-up resistors
if (UseTriggerButtons == true) {
pinMode(Pin_TriggerL, INPUT_PULLUP);
pinMode(Pin_TriggerR, INPUT_PULLUP);
}
// If using potentiometers for the triggers, set range
else {
XInput.setTriggerRange(0, ADC_Max);
}
// Set buttons as inputs, using internal pull-up resistors
pinMode(Pin_ButtonA, INPUT_PULLUP);
pinMode(Pin_ButtonB, INPUT_PULLUP);
pinMode(Pin_ButtonX, INPUT_PULLUP);
pinMode(Pin_ButtonY, INPUT_PULLUP);
pinMode(Pin_ButtonLB, INPUT_PULLUP);
pinMode(Pin_ButtonRB, INPUT_PULLUP);
pinMode(Pin_ButtonBack, INPUT_PULLUP);
pinMode(Pin_ButtonStart, INPUT_PULLUP);
pinMode(Pin_DpadUp, INPUT_PULLUP);
pinMode(Pin_DpadDown, INPUT_PULLUP);
pinMode(Pin_DpadLeft, INPUT_PULLUP);
pinMode(Pin_DpadRight, INPUT_PULLUP);
XInput.setJoystickRange(0, ADC_Max); // Set joystick range to the ADC
XInput.setAutoSend(false); // Wait for all controls before sending
XInput.begin();
}
void loop() {
// Read pin values and store in variables
// (Note the "!" to invert the state, because LOW = pressed)
boolean buttonA = !digitalRead(Pin_ButtonA);
boolean buttonB = !digitalRead(Pin_ButtonB);
boolean buttonX = !digitalRead(Pin_ButtonX);
boolean buttonY = !digitalRead(Pin_ButtonY);
boolean buttonLB = !digitalRead(Pin_ButtonLB);
boolean buttonRB = !digitalRead(Pin_ButtonRB);
boolean buttonBack = !digitalRead(Pin_ButtonBack);
boolean buttonStart = !digitalRead(Pin_ButtonStart);
boolean dpadUp = !digitalRead(Pin_DpadUp);
boolean dpadDown = !digitalRead(Pin_DpadDown);
boolean dpadLeft = !digitalRead(Pin_DpadLeft);
boolean dpadRight = !digitalRead(Pin_DpadRight);
// Set XInput buttons
XInput.setButton(BUTTON_A, buttonA);
XInput.setButton(BUTTON_B, buttonB);
XInput.setButton(BUTTON_X, buttonX);
XInput.setButton(BUTTON_Y, buttonY);
XInput.setButton(BUTTON_LB, buttonLB);
XInput.setButton(BUTTON_RB, buttonRB);
XInput.setButton(BUTTON_BACK, buttonBack);
XInput.setButton(BUTTON_START, buttonStart);
// Set XInput DPAD values
XInput.setDpad(dpadUp, dpadDown, dpadLeft, dpadRight);
// Set XInput trigger values
if (UseTriggerButtons == true) {
// Read trigger buttons
boolean triggerLeft = !digitalRead(Pin_TriggerL);
boolean triggerRight = !digitalRead(Pin_TriggerR);
// Set the triggers as if they were buttons
XInput.setButton(TRIGGER_LEFT, triggerLeft);
XInput.setButton(TRIGGER_RIGHT, triggerRight);
}
else {
// Read trigger potentiometer values
int triggerLeft = analogRead(Pin_TriggerL);
int triggerRight = analogRead(Pin_TriggerR);
// Set the trigger values as analog
XInput.setTrigger(TRIGGER_LEFT, triggerLeft);
XInput.setTrigger(TRIGGER_RIGHT, triggerRight);
}
// Set left joystick
if (UseLeftJoystick == true) {
int leftJoyX = analogRead(Pin_LeftJoyX);
int leftJoyY = analogRead(Pin_LeftJoyY);
// White lie here... most generic joysticks are typically
// inverted by default. If the "Invert" variable is false
// then we'll take the opposite value with 'not' (!).
boolean invert = !InvertLeftYAxis;
XInput.setJoystickX(JOY_LEFT, leftJoyX);
XInput.setJoystickY(JOY_LEFT, leftJoyY, invert);
}
// Send control data to the computer
XInput.send();
}
The Solution
At the end, I was able to create a controller that would adapt to a users play style based on their own preferences while retaining game feel and immersion. Because I started creating the controller in an inclusive design basis, I was able to focus on modularity and user comfort. Although the project itself was not perfect and I encountered many speed bumps along the way, I was able to create a controller for my friend that fit his needs more adequately.
↑