- yscroll = shipy - (YSIZE / 2);
- yscroll += shipdy * 25;
- yscroll /= -25;
- yscroll = ((scrollvel * (12 - gamerate)) + (yscroll * gamerate)) / 12;
- scrollvel = yscroll;
- yscroll = yscroll*gamerate;
- shipy += yscroll;
-
+ tmp = shipy - (YSIZE / 2);
+ tmp += shipdy * 25;
+ tmp /= -25;
+ tmp = ((screendy * (framelen - 12)) + (tmp * framelen)) / 12;
+ screendy = -tmp;
+ tmp = shipx - (XSIZE / 3);
+ tmp += shipdx * 25;
+ tmp /= -25;
+ tmp = ((screendx * (framelen - 12)) + (tmp * framelen)) / 12;
+ screendx = -tmp;
+
+ // taper off if we would hit the barrier in under 2 seconds.
+ if(back_dist + (screendx - SCREENDXMIN)*2*20*opt_gamespeed < 0) {
+ screendx = SCREENDXMIN - (back_dist/(2*20*opt_gamespeed));
+ }
+
+ xscroll = screendx * framelen;
+ yscroll = screendy * framelen;
+ back_dist += (screendx - SCREENDXMIN)*framelen;
+
+ shipx -= xscroll;
+ shipy -= yscroll;
+
+ // move bang center
+ bangx += bangdx*framelen - xscroll;
+ bangy += bangdy*framelen - yscroll;
+