but maybe better, tho?
No. The fact that octal constants are used unnecessarily means that someone doesn’t really understand what they are doing.
The initial values for the axis array in the joyReport object are stupid.
// turn a button on
Look at the buttons on your shirt. What turns them on? Does such a thing make ANY sense? Turning a switch on is a different story. Microcontrollers READ switches, though. They do NOT turn switches on.
Of course, that code doesn’t actually turn a switch on, so the comment is just plain stupid.
for (int bt = 1; bt < 13; bt ++)
btn[bt] = digitalRead(bt + 1); // reads pins D2-D13
Array indices start at 0.
uint8_t btn; // fix riclamer's  dimension to 
The only “reason” that is needed fixing was because someone didn’t understand that arrays start at 0, not 1.
Other than that, the handling of the analog pins is correct - each is read exactly once. What is wrong, though is the assumption that only 3 pins are used, and that the other 5 values in the array should be set to 0. There SHOULD be a #define or const byte statement that defines how many analog pins are used, and the rest of the values in the array should be left at their initial, meaningful, values.