Just a quick update on the resistor values for the ADC button reading. After messing with the values a bit, I came up with some that give a good range of analogRead(). Buttons 13 through 16 are still pretty close, but at least 9 through 12 are better spaced. For future units, I’d probably keep the button count at 12 per analog pin, or work though better resistor values.
Note that I’m using +/- 5% (“gold”) resistors. Going to 1% might help, though I’m sure temperature would have an effect. It’s possible that I might have to have a calibration setting in the game, but I’d really like to avoid that.
So, long story short, if you want a good range in your analogRead, so you can use 5% resistors and not worry about calibration, go with no more than 8 buttons per analog pin. Here is the 16 button 4×4 matrix I made:

The row and column headings would be the resistors used, the intersection is the actual resistance measurement I took using my Agilent Multimeter.
With a 2K resistor as voltage divider, here are the calculated voltages for these resistor ranges:

You can see that you’ve got at least 0.2 V of separation in there. Voltage (drop) = (R1/(R1+R2))*battery voltage. Example: (2000 / (2000+267)) * 5. R1 is the divider resistor (2000), R2 is the intersection resistance value (two resistors in series) that I measured above with my meter. (Note: I screwed up a little here, since I didn’t record the actual value of the 2000 ohm resistor. I just realized that now. Close enough for my work. LOL.)
Here are the analongRead values on the Arduino / Atmtel 10 bit ADC using my resistors and 16 button setup:

I’ve had everything running all night, in a cool (65 degrees F) room, and the buttons are still reading okay. I need to write some “debounce” code, and maybe add a low value (1nF) capacitor to deaden some of the electrical noise (when the mechanical buttons are pressed you get some “random” values because of the mechanical chatter). I might grab average readings recorded over a short (500 ms) time period. We’ll see.