Systematic vs individual case for handling a variety of different bullets

i’ve been working for quite a long while to find the best way to handle large amounts of bullets with very complex trajectories and varying size/color (basically, nothing is very consistent here besides the fact that they’re bullets)

my first few attempts was to write a system that took a table and took the data to render a bullet, with one other table named ‘movesequence’ that basically was a table, which the system moved through that table to determine how to move the bullet. this quickly hit a snag, especially since although it wasn’t that hard to use, it wasn’t capable of supporting certain things such as splitting bullets, and was quickly starting to be hard to read or maintain

my second and current method is to have the client be just given a source modulescript and 1 data table (this time a dictionary and much smaller), the client just runs the module and gives the module that datatable. it is less systemic because each module script handles a different kind of bullet, so it allows more complex stuff like splitting bullets, with a few base systems (such as ones to handle recycling etc). however i am not sure if it is good either because it personally is slightly starting to feel a bit messy as well

i don’t know if anyone else has ideas as to how to handle these bullets, or if one of these 2 methods could actually work