enum type { NORMAL, FLYING, ROCK, /* ... */ NTYPES }; float damage_mod(enum type a, enum type b) { float m[NTYPES][NTYPES] = { [NORMAL][NORMAL] = 1, [NORMAL][FLYING] = 1, [NORMAL][ROCK] = 0.5, /* ... */ }; return m[a][b]; }