Ah, you have the circles fixed to the velocity of the car, instead of the length of the car, in a sense.
Also a bit odd you have the velocities separated and revolve around getangle a lot, when you could have it based on just a single velocity, sin & cos, and a radial direction.
[code]if(created) {
setimg door.png;
dontblock;
drawunderplayer;
disabledefmovement;
showstats 0;
playerx = x-.75;
playery = y-1.25;
this.maxspeed = 1;
this.turnspeed = pi/20; // 20 frames to turn 180’
this.dir = ((playerdir+1) * pi/2) % (pi*2);
}
if(playerenters || timeout) {
this.speed += (keydown(5)) * 0.2 - (!keydown(5)) * 0.05 - (keydown(4)) * 0.25;
if(this.speed < 0) this.speed = 0; else if(this.speed > this.maxspeed) this.speed = this.maxspeed;
if(this.speed > 0) this.dir += this.turnspeed*((keydown(1))-(keydown(3)));
playerx += sin(this.dir)*this.speed;
playery += cos(this.dir)*this.speed;
showimg2 200,wmace0.png,playerx+1.5+sin(this.dir)-4/16,playery+2+cos(this.dir)-4/16,playerz; // -4/16, to center the image to the point.
showimg2 201,wmace0.png,playerx+1.5-sin(this.dir)-4/16,playery+2-cos(this.dir)-4/16,playerz;
//Fancy Showpoly
showpoly 100,{playerx+1.5+sin(this.dir)*1.5,playery+2+cos(this.dir)*1.5,playerx+1.5-sin(this.dir-1),playery+2-cos(this.dir-1),playerx+1.5-sin(this.dir),playery+2-cos(this.dir),playerx+1.5-sin(this.dir+1),playery+2-cos(this.dir+1)};
changeimgvis 100,0;
timeout = 0.05;
}[/code]
Added a showpoly for the hell of it, and centered the chain links to the points where they were to be detecting (-4/16,-4/16)
Oh, and I changed the turning and accelerating variables a bit to revolve around binary flags to use a bit more math to compress the code.
(^- In case anyone reading this wonders what the hell I just did.)
*edit: And that was fun 
Also if you were trying to make a more “accurate car”, in where the front guides the back, acting separately while attached. Then this wouldn’t help you at all. lol