Springs have gotten strong. There are springs out there that can store 500J of energy and deliver that energy very quickly and efficiently. In fact, there are guns that already use springs and shoot with 22lr speed. Also, airsoft rifles often use springs; while their power is low they can be fully automatic because they are not considered firearms. If you've ever fire a full-auto airsoft, it's extremely fun.
After doing some simulation of springs and air pistons using pypy and multi-processing I found that actually the most power transmission happens when the air piston and the projectile have essentially the same diameter. This implied that probably the best design would be a projectile directly driven from the spring.
As with any simulation result we should ask 'does this make sense?' Well, if the spring pushed the projectile itself and was massless and had no internal heating then all the energy would be put into the projectile. Of course there will be internal heating, but that's also a problem with an air piston. And the spring is not massless, but it seems pretty light compared to the projectiles. So it's not a crazy conclusion to think the air part is not necessary. Assuming I could get the weight of the spring and any associated hardware to a minimum I should get good efficiency. If that turns out not to be the case in real-world testing I'll try testing air pistons with a different design.
In this design, we're using a grabber (red) and pulling back a plunger (blue) in the barrel (green). There will be a spring inside the barrel that pushes back. Once the puller gets to a certain point it releases. In this way, we can turn osculating linear movement to continuously load and fire the gun.