^^ PytonPago, that is a genius idea. I would not have thought of doing that, but now I will be using it for sure! Just rotating chunks of a coil spring around center and moving them together should work well. Awesome!
... youre have a lot of meshes to define and use in script, but i think that those 200 lines in script is the only problem there.
Also, if you use such names as i did ( like SpringLeftFront - SLF01, SLF02, ... , SLF28 ) than you need just copy/paste the same script over multiple times and just rewrite the numbers, witch spares some time in it ... you also can do the same during modeling - make just one part of the spring meshes, set the origin/pivot point at right place and then just copy the mesh several times n change the numbers placing them one after another and parenting them. -- Mind that the pivot point/origin orientation is set right ( so that you need to rotate the segments only around one axis ! Best to place them in circle from the up-view and set height in place from the left/right views in blender ). Otherwise, you rotate the origin point too and it will be a pain to set them right.
Note, the spring parts (on my model) are parented to the vehicle body, and after importing and writing the script, i was trying to change the wheel-height data with a number multiplier till it fits the movement. You could find the multiplier trough math, but my experience is, that it isnt quite exact and trying out to find it empirically does the work well. -- you also can parent them to the wheels, but it may be complicated to figure rotations out if the part they sit on are moving themselves.
The last problem is then the spring rotation that will make it face its joint on the wheel (if the wheel moves up and the spring isnt in vertical set-up, than it will just compress, but the wheel joint for it will be at different place).
Most cars have them nicely vertical with the tires so there is no need for aditional rotations of the spring to the left/right and front/back ... but some vehicles have them in angle :
It might seem just a bit, but when the wheel moves up and down, it may become quite de-synchronized. There is a solution to that too ... the same i used on my urals hydraulic suspension - just parent the spring to two empty meshes (just two pivot points without any vertices in the mesh) and set one empty meshes rotation in script to the sides and the other empty to the front/back. It will be a little challenging to set the multipliers for each rotation, but it works nicely when the balance is found. (best to set first that the spring faces its joint on the wheel as it should and then the spring compression intensity as the last thing) .... then, if all four wheels have the same geometry set-up, you just use the same multipliers and scripts (maybe a - will be needed here and there if the stuff has been created trough mirroring in blender for the other side of the vehicle)