http://gafferongames.com/game-physics/fix-your-timestep/
That's one of a collection of articles on the site. I have implemented this and 3d physics based on this article...
http://gafferongames.com/game-physics/physics-in-3d/
...into my own game engine and it seems to work nicely. The simulation runs exactly the same regardless of fps since the physics are updated how ever many times is needed per frame and the RK4 integration allows time based movement.
Edit: I'm using tier 2 but maybe you can implement the same kind of thing in tier one.
Another resource here http://gamedev.tutsplus.com/tutorials/implementation/simulate-fabric-and-ragdolls-with-simple-verlet-integration/
Another Edit: Simulation loop for my project
void Level::Simulate() {
int updates = 0;
if(state == SIMULATING) {
float newTime = agk::Timer();
float deltaTime = newTime - currentTime;
if (deltaTime > 0.060) {
deltaTime = 0.060;
}
//level frame update
Update(t, dt);
currentTime = newTime;
// update discrete time
accumulator += deltaTime;
while (accumulator >= dt) {
//update 3d particle system
particleSystem->UpdateParticles2(t, dt);
//level timestep
TimeStep(t, dt);
//update all objects
for(std::map<int, Object*>::iterator it = objects.begin(); it != objects.end();) {
if((*it).second->state == Object::ObjectState::DEAD) {
(*it).second->ClearComponents();
groups[(*it).second->tag].erase((*it).second->id);
delete (*it).second;
it = objects.erase(it);
}
else {
//per frame updates
if(updates < 1)
{
(*it).second->UpdateComponents();
(*it).second->Update();
}
//timestep update
(*it).second->TimeStep(t, dt);
++it;
}
}
alarmManager.Update(dt);
accumulator -= dt;
t += dt;
++updates;
}
}
}