For the 14 SPST toggle switches (OFF-ON), 3 SPDT (ON-OFF-ON) toggle switches, rocker switch (OFF-ON), and push button (OFF-(ON), i.e. momentary), I'd use a 4×6 matrix with diodes, using 10 pins, and 12 BAT54C Schottky diodes in SOT23-3 (a common cathode pair of diodes in each package).
For the five position rotary switch, I'd use resistors and an analog input, making it a five-position potentiometer as a voltage divider using four 1k resistors between the rotary positions, and the common as the "wiper". (The 8-bit ADC results would be 0-31, 32-95, 96-159, 160-223, 224-255.) This then only uses one analog pin. With the two potentiometers, you need three analog pins in voltage divider configuration: wiper to the analog input pin, and each end to 3.3V and GND.
For the rotary encoders, you need two pins each for interrupt-based reading, so ten pins.
By my count, you only need 4 digital output pins, 6 digital input pins, 10 digital input pins with interrupts, and 3 analog input pins, or 23 pins total.
The button matrix is simple. You have four output pins, and five input pins. Each SPST ON-OFF toggle switch, rocker switch, and push button connects an input pin to an output pin through a diode. Only one of the four output pins is high at any time, and it selects the group of buttons and switches the input pins will reflect. BAT54C has two Schottky diodes in each package, with a shared Cathode pin. You use one for each pair of buttons connected to the same output, but different inputs. The SPDT ones (ON-ON or ON-OFF-ON or (ON)-OFF-(ON) et cetera), the shared leg is the input, and the two other legs go to different BAT54C packages. (Basically, they're similar to two separate buttons on the same input line.)
All combinations of switch and button states are supported because of the diodes. In keyboard terms, we have "infinite rollover", exactly like each was wired completely separately. You will need to do debouncing in software (instead of in hardware using a capacitor and a resistor), but it is trivial. For such gaming uses, I like to use the dead-time approach, ignoring changes in the state for 10ms-50ms (depending on the physical switch type) after a transition, as this gives immediate response without any delay, with the only effect being that the fastest "peck" or "momentary toggle" takes the full dead-time duration ("release" or "return" being delayed).