Well, I have a base in C++, just getting to learning pointers, so that will transfer over to C, but the best way I know how to eliminate a bunch of conditionals, would be just to make a Gigantic switch. I have some time, if you tell me how to do this effectively without pointers and such, I am 100% willing to do this.
it would be very well worth it to have this thing ported to C++...
i believe one could expect an at least tenfold boost in FPS if the type-checking was done with classes and function pointers instead of if-else chains....
not to mention a lot easier to debug and mod
C++ has the needed features for this built-in! (they're called VTables) -- a particle type could be defined by extending a base-type class and overriding virtual functions for display, update and whatnot...
a lot more modder-friendly, and would eliminate the need to check types by "trial-and-error"...
and particle-to-particle reactions could be coordinated via a switch (which uses jump tables under the hood) so it's a lot faster than if-else checks