up    |    index

# ps1 rope physics

#### July 29, 2021

For the past few weeks I've been following a rope physics tutorial.

If you connect a bunch of masses together with springs and use a slightly altered version of Hooke's law [ F = -k * (x - d) ], you'll get a rope! I've only applied four forces to a total of 24 masses (23 springs) on the rope:

• gravitational force
• spring force
• spring friction force
• air friction force

Since I've neglected to add a ground absorption force, part of the rope that is in contact with the ground for extended periods of time will jitter. Also, instead of using a ground repulsion constant, I've simply deflected the vertical velocity of each mass when they are to collide with the ground. The constants provided in NeHe's tutorial didn't work for me, so I had to do some experimenting to get it to look good.

The hardest part was not the physics, but instead dealing with the dumb little quirks of fixed-point arithmetic. For example, whilst determining the unit vector, I wrote this (using 2^6-based numbers):

``````
setVector(&u,
(v.vx / r)>>6,
(v.vy / r)>>6,
0);
``````
which prevented me from getting fractional values because I divided the whole damned thing by one. What I should've written was this:
``````
setVector(&u,
v.vx / (r>>6),
v.vy / (r>>6),
0);
``````

convert the divisor to an integer and your answer will be a fractional number whilst remaining in the same fixed-point format.

Okay. So most of the degree2 engine has been rewritten with the addition of physics. Perhaps it's time to start another game project...